diff options
author | Antonio Borneo <borneo.antonio@gmail.com> | 2023-07-02 23:48:42 +0200 |
---|---|---|
committer | Antonio Borneo <borneo.antonio@gmail.com> | 2023-08-12 16:41:45 +0000 |
commit | 3b78b5c1db68841fdc18ee48b6011f4affff2bfd (patch) | |
tree | 70477f84c19e4176318036447d02d1fc46b6d8d6 /src/jtag/drivers/libusb_helper.h | |
parent | 51be311f73933d8b51938371a989f1130dec3cfc (diff) | |
download | riscv-openocd-3b78b5c1db68841fdc18ee48b6011f4affff2bfd.zip riscv-openocd-3b78b5c1db68841fdc18ee48b6011f4affff2bfd.tar.gz riscv-openocd-3b78b5c1db68841fdc18ee48b6011f4affff2bfd.tar.bz2 |
libusb_helper: split error and returned value
The USB control transfer can be executed without any data.
The libusb API libusb_control_transfer() can thus be called with
zero 'size', thus returning zero byte transferred when succeed.
The OpenOCD API jtag_libusb_control_transfer() returns zero either
in case of transfer error and in case of libusb_control_transfer()
returning zero, making impossible discriminating the two cases.
Extend jtag_libusb_control_transfer() with separate return value
for error code and explicit parameter's pointer for transferred
bytes.
Make the transferred pointer optional, as many callers do not
properly handle the returned value.
Use 'int' type pointer for transferred, instead of the 'uint16_t'
that would have matched the type of 'size'. This can simplify the
caller's code by using a single 'int transferred' variable shared
with other jtag_libusb_bulk_read|write, while keeping possible the
comparison int vs uint16_t without cast.
This change is inspired from commit d612baacaa3f
("jtag_libusb_bulk_read|write: return error code instead of size")
Change-Id: I14d9bff3e845675be03465c307a136e69eebc317
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/7756
Tested-by: jenkins
Reviewed-by: ahmed BOUDJELIDA <aboudjelida@nanoxplore.com>
Diffstat (limited to 'src/jtag/drivers/libusb_helper.h')
-rw-r--r-- | src/jtag/drivers/libusb_helper.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/jtag/drivers/libusb_helper.h b/src/jtag/drivers/libusb_helper.h index 799e3e6..75f1335 100644 --- a/src/jtag/drivers/libusb_helper.h +++ b/src/jtag/drivers/libusb_helper.h @@ -38,7 +38,8 @@ int jtag_libusb_open(const uint16_t vids[], const uint16_t pids[], void jtag_libusb_close(struct libusb_device_handle *dev); int jtag_libusb_control_transfer(struct libusb_device_handle *dev, uint8_t request_type, uint8_t request, uint16_t value, - uint16_t index, char *bytes, uint16_t size, unsigned int timeout); + uint16_t index, char *bytes, uint16_t size, unsigned int timeout, + int *transferred); int jtag_libusb_bulk_write(struct libusb_device_handle *dev, int ep, char *bytes, int size, int timeout, int *transferred); int jtag_libusb_bulk_read(struct libusb_device_handle *dev, int ep, |