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__
parent
e5afb14241
commit
2c89a1ec5f
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue