libusb_helper: split error and returned value 56/7756/5
authorAntonio Borneo <borneo.antonio@gmail.com>
Sun, 2 Jul 2023 21:48:42 +0000 (23:48 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 12 Aug 2023 16:41:45 +0000 (16:41 +0000)
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>
src/jtag/drivers/esp_usb_jtag.c
src/jtag/drivers/ft232r.c
src/jtag/drivers/kitprog.c
src/jtag/drivers/libusb_helper.c
src/jtag/drivers/libusb_helper.h
src/jtag/drivers/opendous.c
src/jtag/drivers/openjtag.c
src/jtag/drivers/usb_blaster/ublast2_access_libusb.c

index dd96f4b3954915a776d71d00b4f34dfff70562bc..2ed0f58fd1e5e73b9687e4d42b7751340678d781 100644 (file)
@@ -506,11 +506,13 @@ static int esp_usb_jtag_init(void)
         * 1- With the minimum size required to get to know the total length of that struct,
         * 2- Then exactly the length of that struct. */
        uint8_t jtag_caps_desc[JTAG_PROTO_CAPS_DATA_LEN];
-       int jtag_caps_read_len = jtag_libusb_control_transfer(priv->usb_device,
+       int jtag_caps_read_len;
+       r = jtag_libusb_control_transfer(priv->usb_device,
                LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_STANDARD | LIBUSB_RECIPIENT_DEVICE,
                LIBUSB_REQUEST_GET_DESCRIPTOR, esp_usb_jtag_caps, 0,
-               (char *)jtag_caps_desc, JTAG_PROTO_CAPS_DATA_LEN, LIBUSB_TIMEOUT_MS);
-       if (jtag_caps_read_len <= 0) {
+               (char *)jtag_caps_desc, JTAG_PROTO_CAPS_DATA_LEN, LIBUSB_TIMEOUT_MS,
+               &jtag_caps_read_len);
+       if (r != ERROR_OK) {
                LOG_ERROR("esp_usb_jtag: could not retrieve jtag_caps descriptor!");
                goto out;
        }
@@ -580,7 +582,8 @@ static int esp_usb_jtag_init(void)
                0,
                NULL,
                0,
-               LIBUSB_TIMEOUT_MS);
+               LIBUSB_TIMEOUT_MS,
+               NULL);
 
        return ERROR_OK;
 
@@ -637,7 +640,7 @@ static int esp_usb_jtag_speed(int divisor)
 
        LOG_DEBUG("esp_usb_jtag: setting divisor %d", divisor);
        jtag_libusb_control_transfer(priv->usb_device,
-               LIBUSB_REQUEST_TYPE_VENDOR, VEND_JTAG_SETDIV, divisor, 0, NULL, 0, LIBUSB_TIMEOUT_MS);
+               LIBUSB_REQUEST_TYPE_VENDOR, VEND_JTAG_SETDIV, divisor, 0, NULL, 0, LIBUSB_TIMEOUT_MS, NULL);
 
        return ERROR_OK;
 }
@@ -648,8 +651,8 @@ COMMAND_HANDLER(esp_usb_jtag_tdo_cmd)
        if (!priv->usb_device)
                return ERROR_FAIL;
        int r = jtag_libusb_control_transfer(priv->usb_device,
-               LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR, VEND_JTAG_GETTDO, 0, 0, &tdo, 1, LIBUSB_TIMEOUT_MS);
-       if (r < 1)
+               LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR, VEND_JTAG_GETTDO, 0, 0, &tdo, 1, LIBUSB_TIMEOUT_MS, NULL);
+       if (r != ERROR_OK)
                return r;
 
        command_print(CMD, "%d", tdo);
@@ -685,7 +688,7 @@ COMMAND_HANDLER(esp_usb_jtag_setio_cmd)
                d |= VEND_JTAG_SETIO_SRST;
 
        jtag_libusb_control_transfer(priv->usb_device,
-               0x40, VEND_JTAG_SETIO, d, 0, NULL, 0, LIBUSB_TIMEOUT_MS);
+               0x40, VEND_JTAG_SETIO, d, 0, NULL, 0, LIBUSB_TIMEOUT_MS, NULL);
 
        return ERROR_OK;
 }
index 1d73af4e5c24e7d78ccdcd78c22b280265df9133..c2ec78ad8888df9f1c2ca25abb547b474b84005e 100644 (file)
@@ -235,7 +235,7 @@ static int ft232r_speed(int divisor)
 
        if (jtag_libusb_control_transfer(adapter,
                LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT,
-               SIO_SET_BAUD_RATE, divisor, 0, NULL, 0, 1000) != 0) {
+               SIO_SET_BAUD_RATE, divisor, 0, NULL, 0, 1000, NULL) != ERROR_OK) {
                LOG_ERROR("cannot set baud rate");
                return ERROR_JTAG_DEVICE_ERROR;
        }
@@ -266,7 +266,7 @@ static int ft232r_init(void)
        /* Reset the device. */
        if (jtag_libusb_control_transfer(adapter,
                LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT,
-               SIO_RESET, 0, 0, NULL, 0, 1000) != 0) {
+               SIO_RESET, 0, 0, NULL, 0, 1000, NULL) != ERROR_OK) {
                LOG_ERROR("unable to reset device");
                return ERROR_JTAG_INIT_FAILED;
        }
@@ -275,7 +275,7 @@ static int ft232r_init(void)
        if (jtag_libusb_control_transfer(adapter,
                LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT,
                SIO_SET_BITMODE, (1<<tck_gpio) | (1<<tdi_gpio) | (1<<tms_gpio) | (1<<ntrst_gpio) | (1<<nsysrst_gpio) | 0x400,
-               0, NULL, 0, 1000) != 0) {
+               0, NULL, 0, 1000, NULL) != ERROR_OK) {
                LOG_ERROR("cannot set sync bitbang mode");
                return ERROR_JTAG_INIT_FAILED;
        }
@@ -288,13 +288,13 @@ static int ft232r_init(void)
        if (jtag_libusb_control_transfer(adapter,
                LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT,
                SIO_SET_BAUD_RATE, divisor,
-               0, NULL, 0, 1000) != 0) {
+               0, NULL, 0, 1000, NULL) != ERROR_OK) {
                LOG_ERROR("cannot set baud rate");
                return ERROR_JTAG_INIT_FAILED;
        }
        if (jtag_libusb_control_transfer(adapter,
                LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT,
-               SIO_SET_LATENCY_TIMER, latency_timer, 0, NULL, 0, 1000) != 0) {
+               SIO_SET_LATENCY_TIMER, latency_timer, 0, NULL, 0, 1000, NULL) != ERROR_OK) {
                LOG_ERROR("unable to set latency timer");
                return ERROR_JTAG_INIT_FAILED;
        }
@@ -315,7 +315,7 @@ static int ft232r_quit(void)
                if (jtag_libusb_control_transfer(adapter,
                        LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT,
                        SIO_SET_BITMODE, ft232r_restore_bitmode,
-                       0, NULL, 0, 1000) != 0) {
+                       0, NULL, 0, 1000, NULL) != ERROR_OK) {
                        LOG_ERROR("cannot set bitmode to restore serial port");
                }
        }
index 0af1ff7a0e04b46e4662c8566179f9a7f9adc3b9..b953218b855c63710333eb73157a013a5f775286 100644 (file)
@@ -414,13 +414,13 @@ static int kitprog_set_protocol(uint8_t protocol)
        int transferred;
        char status = PROGRAMMER_NOK_NACK;
 
-       transferred = jtag_libusb_control_transfer(kitprog_handle->usb_handle,
+       int retval = jtag_libusb_control_transfer(kitprog_handle->usb_handle,
                LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE,
                CONTROL_TYPE_WRITE,
                (CONTROL_MODE_SET_PROGRAMMER_PROTOCOL << 8) | CONTROL_COMMAND_PROGRAM,
-               protocol, &status, 1, 0);
+               protocol, &status, 1, 0, &transferred);
 
-       if (transferred == 0) {
+       if (retval != ERROR_OK || transferred == 0) {
                LOG_DEBUG("Zero bytes transferred");
                return ERROR_FAIL;
        }
@@ -440,11 +440,11 @@ static int kitprog_get_status(void)
 
        /* Try a maximum of three times */
        for (int i = 0; (i < 3) && (transferred == 0); i++) {
-               transferred = jtag_libusb_control_transfer(kitprog_handle->usb_handle,
+               jtag_libusb_control_transfer(kitprog_handle->usb_handle,
                        LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE,
                        CONTROL_TYPE_READ,
                        (CONTROL_MODE_POLL_PROGRAMMER_STATUS << 8) | CONTROL_COMMAND_PROGRAM,
-                       0, &status, 1, 0);
+                       0, &status, 1, 0, &transferred);
                jtag_sleep(1000);
        }
 
@@ -466,13 +466,13 @@ static int kitprog_set_unknown(void)
        int transferred;
        char status = PROGRAMMER_NOK_NACK;
 
-       transferred = jtag_libusb_control_transfer(kitprog_handle->usb_handle,
+       int retval = jtag_libusb_control_transfer(kitprog_handle->usb_handle,
                LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE,
                CONTROL_TYPE_WRITE,
                (0x03 << 8) | 0x04,
-               0, &status, 1, 0);
+               0, &status, 1, 0, &transferred);
 
-       if (transferred == 0) {
+       if (retval != ERROR_OK || transferred == 0) {
                LOG_DEBUG("Zero bytes transferred");
                return ERROR_FAIL;
        }
@@ -491,13 +491,13 @@ static int kitprog_acquire_psoc(uint8_t psoc_type, uint8_t acquire_mode,
        int transferred;
        char status = PROGRAMMER_NOK_NACK;
 
-       transferred = jtag_libusb_control_transfer(kitprog_handle->usb_handle,
+       int retval = jtag_libusb_control_transfer(kitprog_handle->usb_handle,
                LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE,
                CONTROL_TYPE_WRITE,
                (CONTROL_MODE_ACQUIRE_SWD_TARGET << 8) | CONTROL_COMMAND_PROGRAM,
-               (max_attempts << 8) | (acquire_mode << 4) | psoc_type, &status, 1, 0);
+               (max_attempts << 8) | (acquire_mode << 4) | psoc_type, &status, 1, 0, &transferred);
 
-       if (transferred == 0) {
+       if (retval != ERROR_OK || transferred == 0) {
                LOG_DEBUG("Zero bytes transferred");
                return ERROR_FAIL;
        }
@@ -515,13 +515,13 @@ static int kitprog_reset_target(void)
        int transferred;
        char status = PROGRAMMER_NOK_NACK;
 
-       transferred = jtag_libusb_control_transfer(kitprog_handle->usb_handle,
+       int retval = jtag_libusb_control_transfer(kitprog_handle->usb_handle,
                LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE,
                CONTROL_TYPE_WRITE,
                (CONTROL_MODE_RESET_TARGET << 8) | CONTROL_COMMAND_PROGRAM,
-               0, &status, 1, 0);
+               0, &status, 1, 0, &transferred);
 
-       if (transferred == 0) {
+       if (retval != ERROR_OK || transferred == 0) {
                LOG_DEBUG("Zero bytes transferred");
                return ERROR_FAIL;
        }
@@ -539,13 +539,13 @@ static int kitprog_swd_sync(void)
        int transferred;
        char status = PROGRAMMER_NOK_NACK;
 
-       transferred = jtag_libusb_control_transfer(kitprog_handle->usb_handle,
+       int retval = jtag_libusb_control_transfer(kitprog_handle->usb_handle,
                LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE,
                CONTROL_TYPE_WRITE,
                (CONTROL_MODE_SYNCHRONIZE_TRANSFER << 8) | CONTROL_COMMAND_PROGRAM,
-               0, &status, 1, 0);
+               0, &status, 1, 0, &transferred);
 
-       if (transferred == 0) {
+       if (retval != ERROR_OK || transferred == 0) {
                LOG_DEBUG("Zero bytes transferred");
                return ERROR_FAIL;
        }
@@ -563,13 +563,13 @@ static int kitprog_swd_seq(uint8_t seq_type)
        int transferred;
        char status = PROGRAMMER_NOK_NACK;
 
-       transferred = jtag_libusb_control_transfer(kitprog_handle->usb_handle,
+       int retval = jtag_libusb_control_transfer(kitprog_handle->usb_handle,
                LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE,
                CONTROL_TYPE_WRITE,
                (CONTROL_MODE_SEND_SWD_SEQUENCE << 8) | CONTROL_COMMAND_PROGRAM,
-               seq_type, &status, 1, 0);
+               seq_type, &status, 1, 0, &transferred);
 
-       if (transferred == 0) {
+       if (retval != ERROR_OK || transferred == 0) {
                LOG_DEBUG("Zero bytes transferred");
                return ERROR_FAIL;
        }
index 4b098b482f02815dfa02d1d26720d264b113ef7a..c77fe78c28ea3b9f4c141be1238449c2a0d87776 100644 (file)
@@ -216,17 +216,22 @@ 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 size, unsigned int timeout, int *transferred)
 {
-       int transferred = 0;
-
-       transferred = libusb_control_transfer(dev, request_type, request, value, index,
+       int retval = libusb_control_transfer(dev, request_type, request, value, index,
                                (unsigned char *)bytes, size, timeout);
 
-       if (transferred < 0)
-               transferred = 0;
+       if (retval < 0) {
+               LOG_ERROR("libusb_control_transfer error: %s", libusb_error_name(retval));
+               if (transferred)
+                       *transferred = 0;
+               return jtag_libusb_error(retval);
+       }
 
-       return transferred;
+       if (transferred)
+               *transferred = retval;
+
+       return ERROR_OK;
 }
 
 int jtag_libusb_bulk_write(struct libusb_device_handle *dev, int ep, char *bytes,
index 799e3e6a913c5c43f0bfecb5320c58a442f9c1e9..75f133519a50f689ce4f325cb90aa2392c64b494 100644 (file)
@@ -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,
index ad980bf23810725776eaf8dd111dd44d5029b8e7..2e1d648147bc011df341d531f27a202d220f56eb 100644 (file)
@@ -735,7 +735,7 @@ int opendous_usb_message(struct opendous_jtag *opendous_jtag, int out_length, in
 /* Write data from out_buffer to USB. */
 int opendous_usb_write(struct opendous_jtag *opendous_jtag, int out_length)
 {
-       int result;
+       int result, transferred;
 
        if (out_length > OPENDOUS_OUT_BUFFER_SIZE) {
                LOG_ERROR("opendous_jtag_write illegal out_length=%d (max=%d)", out_length, OPENDOUS_OUT_BUFFER_SIZE);
@@ -748,7 +748,11 @@ int opendous_usb_write(struct opendous_jtag *opendous_jtag, int out_length)
        if (opendous_probe->CONTROL_TRANSFER) {
                result = jtag_libusb_control_transfer(opendous_jtag->usb_handle,
                        LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT,
-                       FUNC_WRITE_DATA, 0, 0, (char *) usb_out_buffer, out_length, OPENDOUS_USB_TIMEOUT);
+                       FUNC_WRITE_DATA, 0, 0, (char *)usb_out_buffer, out_length, OPENDOUS_USB_TIMEOUT,
+                       &transferred);
+               /* FIXME: propagate error separately from transferred */
+               if (result == ERROR_OK)
+                       result = transferred;
        } else {
                jtag_libusb_bulk_write(opendous_jtag->usb_handle, OPENDOUS_WRITE_ENDPOINT,
                        (char *)usb_out_buffer, out_length, OPENDOUS_USB_TIMEOUT, &result);
@@ -768,6 +772,8 @@ int opendous_usb_write(struct opendous_jtag *opendous_jtag, int out_length)
 /* Read data from USB into in_buffer. */
 int opendous_usb_read(struct opendous_jtag *opendous_jtag)
 {
+       int transferred;
+
 #ifdef _DEBUG_USB_COMMS_
        LOG_DEBUG("USB read begin");
 #endif
@@ -775,7 +781,11 @@ int opendous_usb_read(struct opendous_jtag *opendous_jtag)
        if (opendous_probe->CONTROL_TRANSFER) {
                result = jtag_libusb_control_transfer(opendous_jtag->usb_handle,
                        LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN,
-                       FUNC_READ_DATA, 0, 0, (char *) usb_in_buffer, OPENDOUS_IN_BUFFER_SIZE, OPENDOUS_USB_TIMEOUT);
+                       FUNC_READ_DATA, 0, 0, (char *)usb_in_buffer, OPENDOUS_IN_BUFFER_SIZE, OPENDOUS_USB_TIMEOUT,
+                       &transferred);
+               /* FIXME: propagate error separately from transferred */
+               if (result == ERROR_OK)
+                       result = transferred;
        } else {
                jtag_libusb_bulk_read(opendous_jtag->usb_handle, OPENDOUS_READ_ENDPOINT,
                        (char *)usb_in_buffer, OPENDOUS_IN_BUFFER_SIZE, OPENDOUS_USB_TIMEOUT, &result);
index 12ea463302a96e602e99d578769f0d02e2829d6b..fe3a8ff7f9ac042a7b243963708dd22a4f85f225 100644 (file)
@@ -239,10 +239,10 @@ static int openjtag_buf_write_cy7c65215(
 
        ret = jtag_libusb_control_transfer(usbh, CY7C65215_JTAG_REQUEST,
                                                                           CY7C65215_JTAG_WRITE, size, 0,
-                                                                          NULL, 0, CY7C65215_USB_TIMEOUT);
-       if (ret < 0) {
-               LOG_ERROR("vendor command failed, error %d", ret);
-               return ERROR_JTAG_DEVICE_ERROR;
+                                                                          NULL, 0, CY7C65215_USB_TIMEOUT, NULL);
+       if (ret != ERROR_OK) {
+               LOG_ERROR("vendor command failed");
+               return ret;
        }
 
        if (jtag_libusb_bulk_write(usbh, ep_out, (char *)buf, size,
@@ -306,10 +306,10 @@ static int openjtag_buf_read_cy7c65215(
 
        ret = jtag_libusb_control_transfer(usbh, CY7C65215_JTAG_REQUEST,
                                                                           CY7C65215_JTAG_READ, qty, 0,
-                                                                          NULL, 0, CY7C65215_USB_TIMEOUT);
-       if (ret < 0) {
-               LOG_ERROR("vendor command failed, error %d", ret);
-               return ERROR_JTAG_DEVICE_ERROR;
+                                                                          NULL, 0, CY7C65215_USB_TIMEOUT, NULL);
+       if (ret != ERROR_OK) {
+               LOG_ERROR("vendor command failed");
+               return ret;
        }
 
        if (jtag_libusb_bulk_read(usbh, ep_in, (char *)buf, qty,
@@ -455,8 +455,8 @@ static int openjtag_init_cy7c65215(void)
        ret = jtag_libusb_control_transfer(usbh,
                                                                           CY7C65215_JTAG_REQUEST,
                                                                           CY7C65215_JTAG_ENABLE,
-                                                                          0, 0, NULL, 0, CY7C65215_USB_TIMEOUT);
-       if (ret < 0) {
+                                                                          0, 0, NULL, 0, CY7C65215_USB_TIMEOUT, NULL);
+       if (ret != ERROR_OK) {
                LOG_ERROR("could not enable JTAG module");
                goto err;
        }
@@ -466,7 +466,7 @@ static int openjtag_init_cy7c65215(void)
 err:
        if (usbh)
                jtag_libusb_close(usbh);
-       return ERROR_JTAG_INIT_FAILED;
+       return ret;
 }
 
 static int openjtag_init(void)
@@ -508,8 +508,8 @@ static int openjtag_quit_cy7c65215(void)
        ret = jtag_libusb_control_transfer(usbh,
                                                                           CY7C65215_JTAG_REQUEST,
                                                                           CY7C65215_JTAG_DISABLE,
-                                                                          0, 0, NULL, 0, CY7C65215_USB_TIMEOUT);
-       if (ret < 0)
+                                                                          0, 0, NULL, 0, CY7C65215_USB_TIMEOUT, NULL);
+       if (ret != ERROR_OK)
                LOG_WARNING("could not disable JTAG module");
 
        jtag_libusb_close(usbh);
index 7f9781869c1de4a4d51a5ebe6ca24bb5e2d98260..f5e0026a7ba31092c23e26b5b34407e9d27fd544 100644 (file)
@@ -103,7 +103,8 @@ static int ublast2_write_firmware_section(struct libusb_device_handle *libusb_de
                                             0,
                                             (char *)data_ptr,
                                             chunk_size,
-                                            100);
+                                            100,
+                                            NULL);
 
                bytes_remaining -= chunk_size;
                addr += chunk_size;
@@ -154,7 +155,8 @@ static int load_usb_blaster_firmware(struct libusb_device_handle *libusb_dev,
                                     0,
                                     &value,
                                     1,
-                                    100);
+                                    100,
+                                    NULL);
 
        /* Download all sections in the image to ULINK */
        for (unsigned int i = 0; i < ublast2_firmware_image.num_sections; i++) {
@@ -175,7 +177,8 @@ static int load_usb_blaster_firmware(struct libusb_device_handle *libusb_dev,
                                     0,
                                     &value,
                                     1,
-                                    100);
+                                    100,
+                                    NULL);
 
 error_close_firmware:
        image_close(&ublast2_firmware_image);
@@ -245,7 +248,8 @@ static int ublast2_libusb_init(struct ublast_lowlevel *low)
                                     0,
                                     buffer,
                                     5,
-                                    100);
+                                    100,
+                                    NULL);
 
        LOG_INFO("Altera USB-Blaster II found (Firm. rev. = %s)", buffer);
 

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)