diff options
author | AJM <poslathian@poslathian.(none)> | 2010-04-25 16:13:07 -0400 |
---|---|---|
committer | bnewbold <bnewbold@robocracy.org> | 2010-05-20 22:09:16 -0400 |
commit | fc4b9b386a80d06c73e03d70767643aae3961e2a (patch) | |
tree | f3ea4c4eeecc247ac964311702767b0a2532c3ab /core | |
parent | 7b1e00bca888247efddddd28912d51e9ba7112ba (diff) | |
download | librambutan-fc4b9b386a80d06c73e03d70767643aae3961e2a.tar.gz librambutan-fc4b9b386a80d06c73e03d70767643aae3961e2a.zip |
fixed the receive 0 bytes bug, where full buffers block the usb port and never get re-enabled.
Diffstat (limited to 'core')
-rw-r--r-- | core/usb/usb.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/core/usb/usb.c b/core/usb/usb.c index cb8de52..a8298c0 100644 --- a/core/usb/usb.c +++ b/core/usb/usb.c @@ -407,6 +407,12 @@ uint8 usbReceiveBytes(uint8* recvBuf, uint8 len) { } maxNewBytes += len; + + /* re-enable the rx endpoint which we had set to receive 0 bytes */ + if (maxNewBytes - len == 0) { + SetEPRxCount(VCOM_RX_ENDP,maxNewBytes); + } + return len; } @@ -415,10 +421,12 @@ void usbSendHello(void) { uint8 bufin = 48 + recvBufIn;; uint8 bufout = 48 + recvBufOut; + uint8 avail = 48 + usbBytesAvailable(); char *line = "\r\n"; while(usbSendBytes(&bufin,1) == 0); while(usbSendBytes(&bufout,1) == 0); + while(usbSendBytes(&avail,1) == 0); while(usbSendBytes((uint8*)line,2) == 0); uint8 recv[64]; |