Android Tutorial [B4X] AsyncStreams Tutorial

Status
Not open for further replies.

mbatgr

Active Member
Licensed User
Longtime User
I have the following code. This is a working code I used to send one digit number to the server (VB6) except that times the is a delay and the server received a message with more digits instead of 1 (i send a digit when i press a particular button, so pressing in a row eg 3 buttons, I expect the server to receive 3 messages with 1 digit length. But because of the delay I receive a message with 3 digits!. Is there I can do in the code to trap this situation?
Thanking you the colleges in advance

Sub btnConnect_Click
Select Case btnConnect.Text
Case "Connect"
btnConnect.Text = "Disconnect"
Socket1.Initialize("Socket1")
Socket1.Connect("xxx.xxx.x.xxx",9000,15000)
Case "Disconnect"
btnConnect.Text = "Connect"
Socket1.Close
Case Else
End Select
End Sub

Sub Socket1_Connected(Connected As Boolean)As Boolean
If Connected = True Then
ToastMessageShow("Connected",True)
AStreams.Initialize(Socket1.InputStream,Socket1.OutputStream,"Astreams")
SendData("+") 'send + as a sign of succesfull link
Else
ToastMessageShow("Server not available",True)
btnConnect.Text = "Connect"
End If
btnConnect.Enabled = True
End Sub

Sub AStreams_NewData (Buffer() As Byte)
Dim msg As String
msg = BytesToString(Buffer, 0, Buffer.Length, "Windows-1252")
log(msg)
End Sub

Sub SendData(msg As String)
Dim Buffer() As Byte
Buffer = Msg.GetBytes("Windows-1252")
AStreams.Write(Buffer)
End Sub

Sub Buttons_Click
Dim btn As Button
Dim msg As String
Dim b As Beeper

btn = Sender
b.Beep
msg = btn.Tag

SendData(msg)

End Sub
 

mbatgr

Active Member
Licensed User
Longtime User
Also while the code above is working, sometimes when the program runs for the very first time I got a crash
The reference line where the eroor happens is the "AStreams.Initialize(Socket1.InputStream,Socket1.OutputStream,"Astreams")"


LogCat connected to: 07961702
--------- beginning of /dev/log/system


--------- beginning of /dev/log/main


** Activity (main) Create, isFirst = true **


1920 x 1104, scale = 2.0 (320 dpi)


** Activity (main) Resume **


** Activity (main) Pause, UserClosed = false **


sending message to waiting queue (socket1_connected)


running waiting messages (1)


Error occurred on line: 123 (main)
main$ResumeMessagerun (java line: 252)


java.lang.NullPointerException
at anywheresoftware.b4a.objects.SocketWrapper.getInputStream(SocketWrapper.java:133)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:485)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:229)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:174)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:93)
at anywheresoftware.b4a.BA$3.run(BA.java:312)
at anywheresoftware.b4a.BA.setActivityPaused(BA.java:382)
 

mbatgr

Active Member
Licensed User
Longtime User
sorry erel, i was tired on the front of my pc
I just stareted a new conversation about
 

shmulik taiber

Member
Licensed User
Longtime User
Hello Erel .
I've managed to communicate between Arduino and Nexus 7 using the Bluetooth example - without the prefix mode .
however, the data sometimes gets broken into parts, and I'm trying to get a fixed size in an orderly fashion for an array of sensor data - which means prefix mode .
I've attempted to adhere to the protocol from the arduino side - with 4 first Bytes as size indicators- for example buf (2,2,2,2,0,0) to get 2 data bytes of zero . the program finds my arduino, connects, but shows nothing.
any advise ?
 

shmulik taiber

Member
Licensed User
Longtime User
Thank you Erel .
There is some progress, although not the promised land of full communication
now, in the screen at least something appears after the "You" - line after line of a trapezoid with a question mark in it.......
my arduino code is as simple as can be, serial.write buf (0,0,0,2,0,0), baud rate 38,400, delay(1000) .
I'm so desperate I'm going to take cyanide pills.... at least my wife won't mind since I've seriously neglected her in the time consuming attempt to crack this thing....
 

shmulik taiber

Member
Licensed User
Longtime User
Hi Erel .
The example you have for text class is not for Bluetooth, and I don't know the right structure for it . there is no documentation of it in the auto complete.... besides, the array of bytes (prefix) is more suitable for my control needs .
I can send an array of data and commands in one stroke .
It connects, but gives me line after line of "you" without anything . this is arduino simple code :

void setup() {

Serial.begin(38400);

}

void loop() {

byte buf[6]={0,0,0,2,3,4};

Serial.write(buf,6)
;
delay(1000);

}

what gives ?
 

shmulik taiber

Member
Licensed User
Longtime User
Thnx again .
I was hoping to see 3 and 4 displayed . the array "buf" has 6 bytes . as far as I understood, the first four are for prefix and the remaining two are the real data which is converted in BytesToString (in the Bluetooth example) for Logging . At least that's what I thought .
What do you mean by not valid ?
 

whcir

Member
Licensed User
Longtime User
Hi,

Using the Testclientsocket example flyingbag posted, and everthing seems to be working fine. temperature is sent from a microcontroller and received on my tablet, only problem is after many hours (over night) the tablet stops updating with the new data sent and there are no errors. used a computer with a tcp/ip terminal to make sure the data is still being transmitted, and it is, so its something on the android side. any help would appreciated. restarting the app, and it works again
 

whcir

Member
Licensed User
Longtime User
Hi Erel,

Under the developer options I checked the option "stay awake". Is there something else I need to do so the tablet dosent go to sleep? The version of android my tablet is running is 4.1.1
 

Turbo3

Active Member
Licensed User
Longtime User
I am using the ASteam_NewData (Buffer() As Byte) to receive a byte stream from a BT device (non-prefix).

I noticed that sometimes the data coming from one BT device is being truncated at 255 bytes. The stream is ASCII characters with CR (0x0d) but no line feeds. What is the size limit on the receive Buffer? If it is 255 bytes can I increase it?

Normally I see data of 10 to 40 bytes in the Buffer for each interrupt except for this one device so I was thinking it is the device that must be truncating the data. I just want to be sure it is not something on my side or if it is how to increase the Async receive buffer.
 
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…