jtag/drivers/cmsis-dap-usb: fix cmsis_dap_serial
authorJaakko Kukkohovi <jkukkohovi@gmail.com>
Wed, 21 Jan 2015 14:16:31 +0000 (16:16 +0200)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 26 Jan 2015 21:16:42 +0000 (21:16 +0000)
Previously the serial wasn't actually used in hid_open() call,
which meant that the first device with matching vid:pid was opened
irrespective of the actual serial number.

Change-Id: I45216ae5d9e0798e97be693c30e2f03c89b9a02b
Signed-off-by: Jaakko Kukkohovi <jkukkohovi@gmail.com>
Reviewed-on: http://openocd.zylin.com/2487
Tested-by: jenkins
Reviewed-by: Jörg Wunsch <openocd@uriah.heep.sax.de>
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/jtag/drivers/cmsis_dap_usb.c

index 95f553b626f147e6718a1399a3d4ad6ee5626105..d607b7f59ec3cff9f7955be6a717292857574849 100644 (file)
@@ -163,8 +163,10 @@ static int cmsis_dap_usb_open(void)
        int i;
        struct hid_device_info *devs, *cur_dev;
        unsigned short target_vid, target_pid;
+       wchar_t *target_serial = NULL;
 
        bool found = false;
+       bool serial_found = false;
 
        target_vid = 0;
        target_pid = 0;
@@ -204,8 +206,10 @@ static int cmsis_dap_usb_open(void)
                        /* we have found an adapter, so exit further checks */
                        /* check serial number matches if given */
                        if (cmsis_dap_serial != NULL) {
-                               if (wcscmp(cmsis_dap_serial, cur_dev->serial_number) == 0)
+                               if (wcscmp(cmsis_dap_serial, cur_dev->serial_number) == 0) {
+                                       serial_found = true;
                                        break;
+                               }
                        } else
                                break;
                }
@@ -216,6 +220,8 @@ static int cmsis_dap_usb_open(void)
        if (NULL != cur_dev) {
                target_vid = cur_dev->vendor_id;
                target_pid = cur_dev->product_id;
+               if (serial_found)
+                       target_serial = cmsis_dap_serial;
        }
 
        hid_free_enumeration(devs);
@@ -230,7 +236,7 @@ static int cmsis_dap_usb_open(void)
                return ERROR_FAIL;
        }
 
-       dev = hid_open(target_vid, target_pid, NULL);
+       dev = hid_open(target_vid, target_pid, target_serial);
 
        if (dev == NULL) {
                LOG_ERROR("unable to open CMSIS-DAP device");