I've done extensive work with the serial port for a dozen years with 100% success 24 hour operation.
Sometimes people get mixed up with "0x02" thinking it's binary. That is 4 characters ascii. I prefer to use chr(2) to create a 1 length string binary 2. If you're going to use byte[] array then byte[0] = 2 is the equivalent. Using escape (like HTML encoding) is the incorrect thinking -Fernando -- Open WebMail Project (http://openwebmail.org) ---------- Original Message ----------- From: ML <d4t4f...@gmail.com> To: gambas-user@lists.sourceforge.net Sent: Thu, 30 Jun 2016 10:51:41 -0300 Subject: Re: [Gambas-user] Serial Port issues and events. > Alexie, > > Not really. This is my first attempt at a binary-exchange over serial in > Gambas. Can't also find out the old G3 examples that might have existed > about this and my web searches were unsuccessful. > So, if you could point me to some example code to read a Byte[], I'll be > grateful. My attempts to read to a Byte[] failed with SEGFAULT, or > errors with no text. > > On the other hand, I just realized -again, happened to me in the past > and I forgot it did- that the list does not send text inside RAW tags... > The code can be seen only on Nabble's site, so I'm reinserting it here. > Please excuse my notation; I know it's not Gambas standard. It's what I > used for eons on QB45, VB3, VB4, VB5 VB6 and even .Net for my day to day > work; (really) old habits die hard. > > Declarations: > > Private Const TEST_TX As String = "ΓΈ1" '0x02-0xF8-0x31-0x03 - > Nabble's RAW TEXT tags removed some data from the string > Private Const TEST_RX As String = "" '0x02-0x15-0x03 - Nabble's RAW > TEXT tags removed some data from the string > Private m_tty As SerialPort > Private m_rxBuff As String = Null > > Instancing and setting the port up: > > 'Instance serial port and set properties > m_tty = New SerialPort As "myTty" 'This should call myTty_Read() > when there is data to read from the port, but it does not seem to > trigger. Wonder why. > m_tty.PortName = "/dev/" & m_port > m_tty.Speed = m_speed > Select Case m_parity > Case "No/Space" > m_tty.Parity = SerialPort.None > Case "Even" > m_tty.Parity = SerialPort.Even > Case "Odd" > m_tty.Parity = SerialPort.Odd > End Select > m_tty.DataBits = m_bits > m_tty.StopBits = m_stop > > 'Encoder use hardware handshake (RTS/CTS) > m_tty.FlowControl = SerialPort.Hardware > > 'Try opening the port > m_tty.Open() > m_tty.Blocking = False > m_tty.DTR = True > > Then, I send TEST_TX and expect for either TEST_RX or a timeout: > > Public Function Test() As Boolean > > Dim tOut As Date = DateAdd(Now, gb.Second, 2) > > 'Reset RX Buffer, send test command and check for timeout/response > m_tty.Drop 'Kill remaining send data > m_tty.Begin() 'Start buffering > Write #m_tty, TEST_TX 'Add to send buffer > m_rxBuff = Null 'Kill RX buffer > m_tty.Send() 'Send buffer > > While (Now < tOut) And (m_rxBuff <> TEST_RX) > Sleep 0.1 > 'This IF below should not be needed, but myTty_Read() never fires > otherwise! > If m_tty.InputBufferSize > 0 Then > myTty_Read() > Endif > Wend > > Finally > Return (m_rxBuff = TEST_RX) > > Catch > Message.Error("Error '" & Error.Text & "' occurred in " & Error.Where) > > End > > Finally, this next is the problem code. It does not fire as expected > when data arrives, and when I call it by hand in the IF above, if I try > to READ #m_tty As String it chops off the leading 0x02 byte, and I could > not figure out how to READ #m_tty As Byte[] or As Object (I get a null > error; nothing on the message.error text, and no OK button on it either): > > Public Sub myTty_Read() > > Dim dLen As Integer = m_tty.InputBufferSize > Dim sgmnt As Byte[] 'String = Null 'This here is my desperate > attempt to read As String or As Object... > > 'Data should be available in the serial port buffer > 'sgmnt = Read #m_tty As String > 'm_rxBuff &= sgmnt > sgmnt = Read #m_tty As Object > m_rxBuff &= sgmnt.ToString > Debug "Rx: (" & CStr(dLen) & ") " & sgmnt > > Catch > 'This is triggered when reading As Object or As Byte[]. But the > text is NULL and has no OK button! > Message.Error("Error '" & Error.Text & "' occurred in " & Error.Where) > > End > > A breakpoint in the "sgmnt = Read #m_tty As ..." line show that the > value of "dLen" is three, which is OK. But when I try to READ As String, > the leading 0x02 is missing from the string, leaving only 0x15-0x03 > (quick tooltip shows the string to be "\x15\x03"). When this is later > compared to TEST_RX in Test(), the comparison obviously fails. > > TIA, > zxMarce. > > ------------------------------------------------------------------------------ > Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San > Francisco, CA to explore cutting-edge tech and listen to tech luminaries > present their vision of the future. This family event has something for > everyone, including kids. Get more information and register today. > http://sdm.link/attshape > _______________________________________________ > Gambas-user mailing list > Gambas-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/gambas-user ------- End of Original Message ------- ------------------------------------------------------------------------------ Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San Francisco, CA to explore cutting-edge tech and listen to tech luminaries present their vision of the future. This family event has something for everyone, including kids. Get more information and register today. http://sdm.link/attshape _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user