From 25da331e21946fcb36971a201cf00bdb8f41acc5 Mon Sep 17 00:00:00 2001 From: Daniel Beer Date: Wed, 29 Feb 2012 16:08:26 +1300 Subject: [PATCH] olimex: fix usbtr_recv. Partial sends need to skip the sent portion of the buffer before retrying. --- drivers/olimex.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/olimex.c b/drivers/olimex.c index 5a9dced..2c0c6a6 100644 --- a/drivers/olimex.c +++ b/drivers/olimex.c @@ -203,20 +203,20 @@ static int open_device(struct olimex_transport *tr, struct usb_device *dev) static int usbtr_send(transport_t tr_base, const uint8_t *data, int len) { struct olimex_transport *tr = (struct olimex_transport *)tr_base; - int sent; - while (len) { #ifdef DEBUG_OLIMEX - debug_hexdump(__FILE__": USB transfer out", data, len); + debug_hexdump(__FILE__ ": USB transfer out", data, len); #endif + while (len) { sent = usb_bulk_write(tr->handle, tr->out_ep, (char *)data, len, TIMEOUT); - if (sent < 0) { + if (sent <= 0) { pr_error(__FILE__": can't send data"); return -1; } + data += sent; len -= sent; } @@ -239,7 +239,7 @@ static int usbtr_recv(transport_t tr_base, uint8_t *databuf, int max_len) printc(__FILE__": %s : read %d\n", __FUNCTION__, rlen); #endif - if (rlen < 0) { + if (rlen <= 0) { pr_error(__FILE__": can't receive data"); return -1; }