drivers/usbprog: switch to libusb1
authorAntonio Borneo <borneo.antonio@gmail.com>
Tue, 29 Dec 2020 20:52:56 +0000 (21:52 +0100)
committerAntonio Borneo <borneo.antonio@gmail.com>
Mon, 5 Apr 2021 22:25:02 +0000 (23:25 +0100)
Convert the driver from libusb0 to libusb1.

Change-Id: I3f334f2d02515d612097955e714910a587169990
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/5992
Tested-by: jenkins
configure.ac
src/jtag/drivers/usbprog.c

index 269452bb6631238fb07e0470e25213bf7efdc4ee..800ced5e91312a6a208818e724bee46ee30ac105 100644 (file)
@@ -123,11 +123,11 @@ m4_define([USB1_ADAPTERS],
        [[osbdm], [OSBDM (JTAG only) Programmer], [OSBDM]],
        [[opendous], [eStick/opendous JTAG Programmer], [OPENDOUS]],
        [[rlink], [Raisonance RLink JTAG Programmer], [RLINK]],
+       [[usbprog], [USBProg JTAG Programmer], [USBPROG]],
        [[aice], [Andes JTAG Programmer], [AICE]]])
 
 m4_define([USB0_ADAPTERS],
-       [[[usbprog], [USBProg JTAG Programmer], [USBPROG]],
-       [[armjtagew], [Olimex ARM-JTAG-EW Programmer], [ARMJTAGEW]]])
+       [[[armjtagew], [Olimex ARM-JTAG-EW Programmer], [ARMJTAGEW]]])
 
 m4_define([HIDAPI_ADAPTERS],
        [[[cmsis_dap], [CMSIS-DAP Compliant Debugger], [CMSIS_DAP_HID]],
index 627e4653dd2182306e45b6062d480b09c00bc35b..44db61ec095d0c29bbb6c23b66c76393b75d2cbe 100644 (file)
@@ -34,7 +34,7 @@
 
 #include <jtag/interface.h>
 #include <jtag/commands.h>
-#include "usb_common.h"
+#include "libusb_helper.h"
 
 #define VID 0x1781
 #define PID 0x0c63
@@ -64,7 +64,7 @@ static void usbprog_scan(bool ir_scan, enum scan_type type, uint8_t *buffer, int
 #define WRITE_TMS_CHAIN 0x0A
 
 struct usbprog_jtag {
-       struct usb_dev_handle *usb_handle;
+       struct libusb_device_handle *usb_handle;
 };
 
 static struct usbprog_jtag *usbprog_jtag_handle;
@@ -350,21 +350,19 @@ struct usb_bus *busses;
 
 struct usbprog_jtag *usbprog_jtag_open(void)
 {
-       usb_set_debug(10);
-       usb_init();
-
        const uint16_t vids[] = { VID, 0 };
        const uint16_t pids[] = { PID, 0 };
-       struct usb_dev_handle *dev;
-       if (jtag_usb_open(vids, pids, &dev) != ERROR_OK)
+       struct libusb_device_handle *dev;
+
+       if (jtag_libusb_open(vids, pids, NULL, &dev, NULL) != ERROR_OK)
                return NULL;
 
        struct usbprog_jtag *tmp = malloc(sizeof(struct usbprog_jtag));
        tmp->usb_handle = dev;
 
-       usb_set_configuration(dev, 1);
-       usb_claim_interface(dev, 0);
-       usb_set_altinterface(dev, 0);
+       libusb_set_configuration(dev, 1);
+       libusb_claim_interface(dev, 0);
+       libusb_set_interface_alt_setting(dev, 0, 0);
 
        return tmp;
 }
@@ -372,21 +370,23 @@ struct usbprog_jtag *usbprog_jtag_open(void)
 #if 0
 static void usbprog_jtag_close(struct usbprog_jtag *usbprog_jtag)
 {
-       usb_close(usbprog_jtag->usb_handle);
+       libusb_close(usbprog_jtag->usb_handle);
        free(usbprog_jtag);
 }
 #endif
 
 static unsigned char usbprog_jtag_message(struct usbprog_jtag *usbprog_jtag, char *msg, int msglen)
 {
-       int res = usb_bulk_write(usbprog_jtag->usb_handle, 3, msg, msglen, 100);
+       int transferred;
+
+       int res = jtag_libusb_bulk_write(usbprog_jtag->usb_handle, 3, msg, msglen, 100, &transferred);
        if ((msg[0] == 2) || (msg[0] == 1) || (msg[0] == 4) || (msg[0] == 0) ||
            (msg[0] == 6) || (msg[0] == 0x0A) || (msg[0] == 9))
                return 1;
-       if (res == msglen) {
+       if (res == ERROR_OK && transferred == msglen) {
                /* LOG_INFO("HALLLLOOO %i",(int)msg[0]); */
-               res = usb_bulk_read(usbprog_jtag->usb_handle, 0x82, msg, 2, 100);
-               if (res > 0)
+               res = jtag_libusb_bulk_read(usbprog_jtag->usb_handle, 0x82, msg, 2, 100, &transferred);
+               if (res == ERROR_OK && transferred > 0)
                        return (unsigned char)msg[1];
                else
                        return -1;
@@ -428,11 +428,13 @@ static void usbprog_jtag_write_and_read(struct usbprog_jtag *usbprog_jtag, char
                        bufindex++;
                }
 
-               if (usb_bulk_write(usbprog_jtag->usb_handle, 3, tmp, 64, 1000) == 64) {
+               int transferred;
+               int res = jtag_libusb_bulk_write(usbprog_jtag->usb_handle, 3, tmp, 64, 1000, &transferred);
+               if (res == ERROR_OK && transferred == 64) {
                        /* LOG_INFO("HALLLLOOO2 %i",(int)tmp[0]); */
                        usleep(1);
                        int timeout = 0;
-                       while (usb_bulk_read(usbprog_jtag->usb_handle, 0x82, tmp, 64, 1000) < 1) {
+                       while (jtag_libusb_bulk_read(usbprog_jtag->usb_handle, 0x82, tmp, 64, 1000, &transferred) != ERROR_OK) {
                                timeout++;
                                if (timeout > 10)
                                        break;
@@ -469,12 +471,13 @@ static void usbprog_jtag_read_tdo(struct usbprog_jtag *usbprog_jtag, char *buffe
                tmp[1] = (char)(send_bits >> 8);        /* high */
                tmp[2] = (char)(send_bits);                     /* low */
 
-               usb_bulk_write(usbprog_jtag->usb_handle, 3, tmp, 3, 1000);
+               int transferred;
+               jtag_libusb_bulk_write(usbprog_jtag->usb_handle, 3, tmp, 3, 1000, &transferred);
 
                /* LOG_INFO("HALLLLOOO3 %i",(int)tmp[0]); */
                int timeout = 0;
                usleep(1);
-               while (usb_bulk_read(usbprog_jtag->usb_handle, 0x82, tmp, 64, 10) < 1) {
+               while (jtag_libusb_bulk_read(usbprog_jtag->usb_handle, 0x82, tmp, 64, 10, &transferred) != ERROR_OK) {
                        timeout++;
                        if (timeout > 10)
                                break;
@@ -513,7 +516,8 @@ static void usbprog_jtag_write_tdi(struct usbprog_jtag *usbprog_jtag, char *buff
                        tmp[3 + i] = buffer[bufindex];
                        bufindex++;
                }
-               usb_bulk_write(usbprog_jtag->usb_handle, 3, tmp, 64, 1000);
+               int transferred;
+               jtag_libusb_bulk_write(usbprog_jtag->usb_handle, 3, tmp, 64, 1000, &transferred);
        }
 }
 
@@ -582,15 +586,15 @@ static void usbprog_jtag_tms_collect(char tms_scan)
 
 static void usbprog_jtag_tms_send(struct usbprog_jtag *usbprog_jtag)
 {
-       int i;
        /* LOG_INFO("TMS SEND"); */
        if (tms_chain_index > 0) {
                char tmp[tms_chain_index + 2];
                tmp[0] = WRITE_TMS_CHAIN;
                tmp[1] = (char)(tms_chain_index);
-               for (i = 0; i < tms_chain_index + 1; i++)
+               for (int i = 0; i < tms_chain_index + 1; i++)
                        tmp[2 + i] = tms_chain[i];
-               usb_bulk_write(usbprog_jtag->usb_handle, 3, tmp, tms_chain_index + 2, 1000);
+               int transferred;
+               jtag_libusb_bulk_write(usbprog_jtag->usb_handle, 3, tmp, tms_chain_index + 2, 1000, &transferred);
                tms_chain_index = 0;
        }
 }