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; | 
