diff options
Diffstat (limited to 'wirish/usb_serial.cpp')
-rw-r--r-- | wirish/usb_serial.cpp | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/wirish/usb_serial.cpp b/wirish/usb_serial.cpp index f186dea..2effa3d 100644 --- a/wirish/usb_serial.cpp +++ b/wirish/usb_serial.cpp @@ -32,24 +32,53 @@ #include "wirish.h" #include "usb.h" +#define USB_TIMEOUT 2 + USBSerial :: USBSerial(void) { } +void USBSerial::begin(void) { + setupUSB(); +} + +void USBSerial::end(void) { + disableUSB(); +} + void USBSerial::write(uint8 ch) { - usbSendBytes(&ch, 1); + uint16 status = 0; + uint32 start = millis(); + while(status == 0 && (millis() - start <= USB_TIMEOUT)) { + status = usbSendBytes(&ch, 1); + } } void USBSerial::write(const char *str) { - uint32 len = strlen(str); - - usbSendBytes((uint8*)str, len); + uint32 len = strlen(str); + uint16 status = 0; + uint16 oldstatus = 0; + uint32 start = millis(); + while(status < len && (millis() - start < USB_TIMEOUT)) { + status += usbSendBytes((uint8*)str+status, len-status); + if(oldstatus != status) + start = millis(); + oldstatus = status; + } } void USBSerial::write(void *buf, uint32 size) { if (!buf) { return; } - usbSendBytes((uint8*)buf, size); + uint16 status = 0; + uint16 oldstatus = 0; + uint32 start = millis(); + while(status < size && (millis() - start < USB_TIMEOUT)) { + status += usbSendBytes((uint8*)buf+status, size-status); + if(oldstatus != status) + start = millis(); + oldstatus = status; + } } uint32 USBSerial::available(void) { @@ -70,5 +99,9 @@ uint8 USBSerial::read(void) { return ch; } +uint8 USBSerial::pending(void) { + return usbGetPending(); +} + USBSerial SerialUSB; |