libusb: add debug message on adapter not found due to wrong serial
authorAntonio Borneo <borneo.antonio@gmail.com>
Thu, 4 Oct 2018 09:39:50 +0000 (11:39 +0200)
committerTomas Vanek <vanekt@fbl.cz>
Tue, 8 Jan 2019 10:04:42 +0000 (10:04 +0000)
When few adapters of the same type are in use, the serial string is
the way to select the right one.
Currently a serial string that does not match any of the connected
adapters will just fail the open, without specific information to
track the issue.

Add a specific message to highlight that the open failure is caused
by a serial mismatch.

Change-Id: I5cb77f1045cc746e532d395b2e5ced40a23ab638
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/4701
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/jtag/drivers/libusb0_common.c
src/jtag/drivers/libusb1_common.c

index 9cf85b70e9ff2a3382bd7adc079072342b42a112..14a8b61cc42617eb740ec9a0e358e4a2bdf00aba 100644 (file)
@@ -68,6 +68,7 @@ int jtag_libusb_open(const uint16_t vids[], const uint16_t pids[],
                struct jtag_libusb_device_handle **out)
 {
        int retval = ERROR_FAIL;
+       bool serial_mismatch = false;
        struct jtag_libusb_device_handle *libusb_handle;
        usb_init();
 
@@ -90,14 +91,20 @@ int jtag_libusb_open(const uint16_t vids[], const uint16_t pids[],
                        /* Device must be open to use libusb_get_string_descriptor_ascii. */
                        if (serial != NULL &&
                                        !string_descriptor_equal(libusb_handle, dev->descriptor.iSerialNumber, serial)) {
+                               serial_mismatch = true;
                                usb_close(libusb_handle);
                                continue;
                        }
                        *out = libusb_handle;
                        retval = ERROR_OK;
+                       serial_mismatch = false;
                        break;
                }
        }
+
+       if (serial_mismatch)
+               LOG_INFO("No device matches the serial string");
+
        return retval;
 }
 
index a1db86f4bb9e05f08022cf9d593a9751d2a1d38e..ec52a1bce272464b68c86405301efbf608620062 100644 (file)
@@ -72,6 +72,7 @@ int jtag_libusb_open(const uint16_t vids[], const uint16_t pids[],
 {
        int cnt, idx, errCode;
        int retval = ERROR_FAIL;
+       bool serial_mismatch = false;
        struct jtag_libusb_device_handle *libusb_handle = NULL;
 
        if (libusb_init(&jtag_libusb_context) < 0)
@@ -99,6 +100,7 @@ int jtag_libusb_open(const uint16_t vids[], const uint16_t pids[],
                /* Device must be open to use libusb_get_string_descriptor_ascii. */
                if (serial != NULL &&
                                !string_descriptor_equal(libusb_handle, dev_desc.iSerialNumber, serial)) {
+                       serial_mismatch = true;
                        libusb_close(libusb_handle);
                        continue;
                }
@@ -106,10 +108,15 @@ int jtag_libusb_open(const uint16_t vids[], const uint16_t pids[],
                /* Success. */
                *out = libusb_handle;
                retval = ERROR_OK;
+               serial_mismatch = false;
                break;
        }
        if (cnt >= 0)
                libusb_free_device_list(devs, 1);
+
+       if (serial_mismatch)
+               LOG_INFO("No device matches the serial string");
+
        return retval;
 }