aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAJM <poslathian@poslathian.(none)>2010-04-25 15:19:41 -0400
committerbnewbold <bnewbold@robocracy.org>2010-05-20 22:09:15 -0400
commit8d6602547bc7beb39652a35a1cfdddc250f683ff (patch)
treee0ca6532b26db74654382a2db761b6bdc8ddd868
parent4dcbd9612275d7957484f4a87e16f0bb09484ee6 (diff)
downloadlibrambutan-8d6602547bc7beb39652a35a1cfdddc250f683ff.tar.gz
librambutan-8d6602547bc7beb39652a35a1cfdddc250f683ff.zip
theres still a remaining bug whereby fast consecutive read/writes to serial might crash the fifo, but other than that it seems to work. see usbSendHello for an example. include usb.h in your application, and call setupUSB() to turn everything on.
-rw-r--r--core/usb/usb.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/core/usb/usb.c b/core/usb/usb.c
index c0229ff..f20f144 100644
--- a/core/usb/usb.c
+++ b/core/usb/usb.c
@@ -396,19 +396,17 @@ uint8 usbBytesAvailable(void) {
will only copy the minimum of len or the available
bytes. returns the number of bytes copied */
uint8 usbReceiveBytes(uint8* recvBuf, uint8 len) {
- uint8 bytesCopied;
-
if (len > VCOM_RX_EPSIZE - maxNewBytes) {
len = VCOM_RX_EPSIZE - maxNewBytes;
}
int i;
for (i=0;i<len;i++) {
- *recvBuf++ = vcomBufferRx[(recvBufOut++)%VCOM_RX_EPSIZE];
+ recvBuf[i] = (uint8)(vcomBufferRx[(recvBufOut++)%VCOM_RX_EPSIZE]);
}
- maxNewBytes += bytesCopied;
- return bytesCopied;
+ maxNewBytes += len;
+ return len;
}
void usbSendHello(void) {
@@ -418,4 +416,7 @@ void usbSendHello(void) {
char *line = "\n";
while(usbSendBytes(&thisVal,1) == 0);
while(usbSendBytes((uint8*)line,1) == 0);
+
+ uint8 recv[64];
+ usbReceiveBytes(&recv[0],1);
}