Closed
Description
I tested this on a Pico running MP 1.23 and the latest version of usb-device-cdc on mip
main.py:
from io import BytesIO
from select import poll, POLLIN, POLLHUP, POLLERR
from time import sleep_ms
import usb.device
from usb.device.cdc import CDCInterface
SERIAL_TWO = None
def ingest():
f = BytesIO(512)
ba = bytearray(256)
mv = memoryview(ba)
print("beginning ingest")
# SERIAL_TWO.read(4)
while True:
bytes_read = SERIAL_TWO.readinto(mv)
if bytes_read:
f.write(mv[:bytes_read])
print("{} written, total {}".format(bytes_read, f.tell()))
else:
break
f.seek(0)
print(f.read(-1))
def main():
global SERIAL_TWO
buf = bytearray(4)
SERIAL_TWO = CDCInterface(timeout=0)
usb.device.get().init(SERIAL_TWO, builtin_driver=True)
while not SERIAL_TWO.is_open():
sleep_ms(100)
api_poll = poll()
api_poll.register(SERIAL_TWO, POLLIN)
while True:
cmd_waiting = api_poll.poll(0)
if cmd_waiting and cmd_waiting[0][1] is POLLIN:
# SERIAL_TWO.read(4)
ingest()
sleep_ms(1000)
if __name__ == '__main__': main()
client.py:
from serial import Serial
from string import ascii_letters
def main():
test_str = ascii_letters * 7
conn = Serial("/dev/ttyACM1", 115200)
conn.read_all()
data = "\x03" + "\n" + "\x21" + "\n" + test_str
conn.write(data.encode())
if __name__ == '__main__': main()
I need to read four bytes off the input to confirm I should call ingest()
, but in doing so I consistently lose eight bytes after the first call to readinto()
(the output skips V -> e after 256 bytes) and some of the content never appears to leave the buffer. Moving the read()
call into ingest()
doesn't help, nor does using readinto()
instead.
Metadata
Metadata
Assignees
Labels
No labels