B4J Question jSerial library - Exchange is very slow...

red30

Well-Known Member
Licensed User
Longtime User
I connect microcontroller (USB CDC) to the android device (felUsbSerial library and USB) works fine. Rewrote the program on Windows (jSerial library), all the same only the exchange is very slow ... why?
 

red30

Well-Known Member
Licensed User
Longtime User
Erel, here's my non-UI applications.
B4X:
'Non-UI application (console / server application)
#Region Project Attributes
    #CommandLineArgs:
    #MergeLibraries: True
#End Region

Sub Process_Globals
    Dim sp As Serial
    Dim astream As AsyncStreams
    Dim ForCRC(255) As Int
    ForCRC = Array As Int(0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53)
    Dim New123(8),j=0 As Int
    Dim Timer1 As Timer
End Sub

Sub AppStart (Args() As String)
    sp.Initialize("")
    sp.Open("COM56")
    sp.SetParams (115200,8,1,0)
    'sp.ReadingThreadInterval=0
    astream.Initialize(sp.GetInputStream, sp.GetOutputStream, "astream")
    Timer1.Initialize("Timer1", 10)
    Timer1.Enabled=True
    StartMessageLoop
End Sub

Sub Timer1_Tick
    Timer1.Enabled=False
    astream.Write(Array As Byte(0x00,0x07,0x52,0x00,0x01,0x00,0x00,CRC8(0x00,0x07,0x52,0x00,0x01,0x00,0x00)))
End Sub

Sub AStream_NewData (Buffer() As Byte)
    For ii = 0 To Buffer.Length-1
        New123(j)=Buffer(ii)
        j=j+1
        If j = 8 Then
            j=0
            astream.Write(Array As Byte(0x00,0x07,0x52,0x00,0x01,0x00,0x00,CRC8(0x00,0x07,0x52,0x00,0x01,0x00,0x00)))
        End If
    Next
End Sub

'Return true to allow the default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
    Return True
End Sub

Sub CRC8 (b0 As Int,b1 As Int,b2 As Int,b3 As Int,b4 As Int,b5 As Int,b6 As Int) As Int
    Return ForCRC(Bit.Xor(b6,ForCRC(Bit.Xor(b5,ForCRC(Bit.Xor(b4,ForCRC(Bit.Xor(b3,ForCRC(Bit.Xor(b2,ForCRC(Bit.Xor(b1,ForCRC(Bit.Xor(0,b0))))))))))))))
End Sub
If ReadingThreadInterval default, then on an oscilloscope I see the difference between 10ms requests. (As it is by default)
If ReadingThreadInterval=0 (or any up to 10), then on the oscilloscope I see the difference between the ~ 16ms requests.
If I increase the ReadingThreadInterval(more than 10), everything works in accordance with the ReadingThreadInterval.
 
Upvote 0

red30

Well-Known Member
Licensed User
Longtime User
And if ReadingThreadInterval by default, it does not matter why the time runs up (~ 10-20ms).
 
Upvote 0

red30

Well-Known Member
Licensed User
Longtime User
Erel, what exactly driver do you mean? The chip ft232RL is used for exchange. Is the problem in it's driver for Windows? Or some other? If I will use some other converter, will something change?
 
Upvote 0
Top