pySerial inWaiting devuelve un número incorrecto de bytes
Tengo un programa simple para probar la funcionalidad serial. Mi dispositivo serial reacciona a dos entradas. Si el usuario ingresa 'a', responde con 'fg'. Si el usuario ingresa cualquier otro carácter / byte, responde con 'z'. Si envío 'b' al dispositivo serie, devolverá 'z' muy bien. Cuando envío 'a', debería devolver tanto 'f' como 'g', así que dos bytes en lugar de uno.
Ver código a continuación.
#!/usr/bin/env python
import serial
ser = serial.Serial(
port = '/dev/ttyUSB0',
baudrate = 9600,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS
)
ser.write('a')
byteData = ser.read(1) # read one, blocking
moreBytes = ser.inWaiting()
if moreBytes:
byteData = byteData + ser.read(moreBytes)
print byteData
print byteData
ser.close()
La salida es:
user@ubuntu:~/code/native$ ./serialTesting.py
f
inWaiting () da el valor de 0, por lo que nunca lee el segundo byte. Si hago un pequeño cambio en el código y leo manualmente los dos bytes esperados, funciona bien.
#!/usr/bin/env python
import serial
ser = serial.Serial(
port = '/dev/ttyUSB0',
baudrate = 9600,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS
)
ser.write('a')
byteData = ser.read(2) # read two expected bytes for the result 'fg'
print byteData
ser.close()
La salida es la esperada:
user@ubuntu:~/code/native$ ./serialTesting.py
fg