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
__archive__
oharboe 2009-04-21 09:41:41 +00:00
parent e5afb14241
commit 2c89a1ec5f
1 changed files with 18 additions and 31 deletions

View 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, /* calls the given usb_bulk_* function, allowing for the data to trickle in with some timeouts */
int timeout) { 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; int rc = 0, tries = 3, this_size;
while (tries && 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) { if (this_size > 0) {
size -= this_size; size -= this_size;
@ -877,35 +879,20 @@ static int usb_bulk_write_ex(usb_dev_handle *dev, int ep, char *bytes, int size,
} else } else
tries --; tries --;
} }
return rc; return rc;
} }
static inline int usb_bulk_write_ex(usb_dev_handle *dev, int ep,
static int usb_bulk_read_ex(usb_dev_handle *dev, int ep, char *bytes, int size, char *bytes, int size, int timeout)
int timeout) { {
return usb_bulk_with_retries(&usb_bulk_write,
int rc = 0, tries = 3, this_size; dev, ep, bytes, size, timeout);
}
while (tries && size) { static inline int usb_bulk_read_ex(usb_dev_handle *dev, int ep,
char *bytes, int size, int timeout)
this_size = usb_bulk_read (dev, ep, bytes, size, timeout); {
return usb_bulk_with_retries(&usb_bulk_read,
if (this_size > 0) { dev, ep, bytes, size, timeout);
size -= this_size;
rc += this_size;
bytes += this_size;
} else
tries --;
}
return rc;
} }
/* Write data from out_buffer to USB. */ /* Write data from out_buffer to USB. */
static int jlink_usb_write(jlink_jtag_t *jlink_jtag, int out_length) static int jlink_usb_write(jlink_jtag_t *jlink_jtag, int out_length)