diff options
Diffstat (limited to 'wirish')
-rw-r--r-- | wirish/usb_serial.cpp | 43 | ||||
-rw-r--r-- | wirish/usb_serial.h | 7 |
2 files changed, 45 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; diff --git a/wirish/usb_serial.h b/wirish/usb_serial.h index e1c61ff..abb362b 100644 --- a/wirish/usb_serial.h +++ b/wirish/usb_serial.h @@ -36,6 +36,9 @@ class USBSerial : public Print { public: USBSerial(void); + void begin(void); + void end(void); + uint32 available(void); uint32 read(void *buf, uint32 len); @@ -44,6 +47,10 @@ class USBSerial : public Print { void write(uint8); void write(const char *str); void write(void *, uint32); + + uint8 getRTS(); + uint8 getDTR(); + uint8 pending(); }; extern USBSerial SerialUSB; |