From: Jaakko Kukkohovi Date: Wed, 21 Jan 2015 14:16:31 +0000 (+0200) Subject: jtag/drivers/cmsis-dap-usb: fix cmsis_dap_serial X-Git-Tag: v0.9.0-rc1~176 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=fe04314c2affada149f80858ee90e9b671ab9d25 jtag/drivers/cmsis-dap-usb: fix cmsis_dap_serial 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 Reviewed-on: http://openocd.zylin.com/2487 Tested-by: jenkins Reviewed-by: Jörg Wunsch Reviewed-by: Spencer Oliver --- diff --git a/src/jtag/drivers/cmsis_dap_usb.c b/src/jtag/drivers/cmsis_dap_usb.c index 95f553b626..d607b7f59e 100644 --- a/src/jtag/drivers/cmsis_dap_usb.c +++ b/src/jtag/drivers/cmsis_dap_usb.c @@ -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");