Zach Welch <zw@superlucidity.net> factor jlink usb_bulk_*_ex functions
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 21 Apr 2009 09:41:41 +0000 (09:41 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 21 Apr 2009 09:41:41 +0000 (09:41 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@1492 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/jtag/jlink.c

index 9b5a6954a3564614fcbb1ad781f3cc9c2fdcc09f..5c3dbbe7d132e9873ef041972d828ef3a61d1637 100644 (file)
@@ -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)