From a2ee93f95a128ede3a83c442eee6f6afe5c92c1e Mon Sep 17 00:00:00 2001 From: AJM Date: Mon, 13 Dec 2010 22:09:12 -0500 Subject: made SerialUSB.read blocking it should have been blocking before but wasnt. see bug #49 --- wirish/usb_serial.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'wirish') diff --git a/wirish/usb_serial.cpp b/wirish/usb_serial.cpp index 5c8a65f..d4a8148 100644 --- a/wirish/usb_serial.cpp +++ b/wirish/usb_serial.cpp @@ -101,17 +101,27 @@ uint32 USBSerial::available(void) { return usbBytesAvailable(); } +/* blocks forever until len_bytes is received */ uint32 USBSerial::read(void *buf, uint32 len) { if (!buf) { return 0; } - return usbReceiveBytes((uint8*)buf, len); + uint32 bytes_in = 0; + while (len > 0) { + uint32 new_bytes = usbReceiveBytes(&(uint8)buf[new_bytes], len); + len -= newBytes; + bytes_in += new_bytes; + } + + return len; } +/* blocks forever until 1 byte is received */ uint8 USBSerial::read(void) { uint8 ch; - usbReceiveBytes(&ch, 1); + + while (usbReceiveBytes(&ch, 1) == 0); return ch; } -- cgit v1.2.3