aboutsummaryrefslogtreecommitdiffstats
path: root/wirish
diff options
context:
space:
mode:
Diffstat (limited to 'wirish')
-rw-r--r--wirish/usb_serial.cpp43
-rw-r--r--wirish/usb_serial.h7
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;