summaryrefslogtreecommitdiff
path: root/src/jtag/jlink.c
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-04-21 09:41:41 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-04-21 09:41:41 +0000
commit2c89a1ec5ff521ff7dff5931ec64947ab4fd31a4 (patch)
tree7eae7ed6923e608db2423499a67bd6a0a8aa3b4d /src/jtag/jlink.c
parente5afb1424166206474694b3f90ff9d68a1b20923 (diff)
downloadopenocd+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/jtag/jlink.c')
-rw-r--r--src/jtag/jlink.c49
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)