diff options
author | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-04-21 09:41:41 +0000 |
---|---|---|
committer | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-04-21 09:41:41 +0000 |
commit | 2c89a1ec5ff521ff7dff5931ec64947ab4fd31a4 (patch) | |
tree | 7eae7ed6923e608db2423499a67bd6a0a8aa3b4d /src | |
parent | e5afb1424166206474694b3f90ff9d68a1b20923 (diff) | |
download | openocd_libswd-2c89a1ec5ff521ff7dff5931ec64947ab4fd31a4.tar.gz openocd_libswd-2c89a1ec5ff521ff7dff5931ec64947ab4fd31a4.tar.bz2 openocd_libswd-2c89a1ec5ff521ff7dff5931ec64947ab4fd31a4.tar.xz openocd_libswd-2c89a1ec5ff521ff7dff5931ec64947ab4fd31a4.zip |
Zach Welch <zw@superlucidity.net> factor jlink usb_bulk_*_ex functions
git-svn-id: svn://svn.berlios.de/openocd/trunk@1492 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src')
-rw-r--r-- | src/jtag/jlink.c | 49 |
1 files changed, 18 insertions, 31 deletions
diff --git a/src/jtag/jlink.c b/src/jtag/jlink.c index 9b5a6954..5c3dbbe7 100644 --- a/src/jtag/jlink.c +++ b/src/jtag/jlink.c @@ -859,15 +859,17 @@ static int jlink_usb_message(jlink_jtag_t *jlink_jtag, int out_length, int in_le } } -static int usb_bulk_write_ex(usb_dev_handle *dev, int ep, char *bytes, int size, - int timeout) { - +/* calls the given usb_bulk_* function, allowing for the data to trickle in with some timeouts */ +static int usb_bulk_with_retries( + int (*f)(usb_dev_handle *, int, char *, int, int), + usb_dev_handle *dev, int ep, + char *bytes, int size, int timeout) +{ int rc = 0, tries = 3, this_size; while (tries && size) { - this_size = usb_bulk_write (dev, ep, bytes, size, timeout); - + this_size = f(dev, ep, bytes, size, timeout); if (this_size > 0) { size -= this_size; @@ -877,35 +879,20 @@ static int usb_bulk_write_ex(usb_dev_handle *dev, int ep, char *bytes, int size, } else tries --; } - return rc; - - } - -static int usb_bulk_read_ex(usb_dev_handle *dev, int ep, char *bytes, int size, - int timeout) { - - int rc = 0, tries = 3, this_size; - - while (tries && size) { - - this_size = usb_bulk_read (dev, ep, bytes, size, timeout); - - if (this_size > 0) { - - size -= this_size; - rc += this_size; - bytes += this_size; - - } else - tries --; - } - - return rc; - +static inline int usb_bulk_write_ex(usb_dev_handle *dev, int ep, + char *bytes, int size, int timeout) +{ + return usb_bulk_with_retries(&usb_bulk_write, + dev, ep, bytes, size, timeout); +} +static inline int usb_bulk_read_ex(usb_dev_handle *dev, int ep, + char *bytes, int size, int timeout) +{ + return usb_bulk_with_retries(&usb_bulk_read, + dev, ep, bytes, size, timeout); } - /* Write data from out_buffer to USB. */ static int jlink_usb_write(jlink_jtag_t *jlink_jtag, int out_length) |