From ef02315de3392c164f18e26e06006d7f56dc1b81 Mon Sep 17 00:00:00 2001 From: Spencer Oliver Date: Thu, 2 Oct 2014 21:47:22 +0100 Subject: [PATCH] cmsis-dap: refactor HID PID/VID check loop In preparation for adding serial number support. Change-Id: I3c9fb411b79d54a4d2de067039255436ba6708c7 Signed-off-by: Spencer Oliver Reviewed-on: http://openocd.zylin.com/2328 Tested-by: jenkins Reviewed-by: Andreas Fritiofson --- src/jtag/drivers/cmsis_dap_usb.c | 36 +++++++++++++++++++------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/jtag/drivers/cmsis_dap_usb.c b/src/jtag/drivers/cmsis_dap_usb.c index 3e62ce9c8..fd8c82e01 100644 --- a/src/jtag/drivers/cmsis_dap_usb.c +++ b/src/jtag/drivers/cmsis_dap_usb.c @@ -163,14 +163,16 @@ static int cmsis_dap_usb_open(void) struct hid_device_info *devs, *cur_dev; unsigned short target_vid, target_pid; + bool found = false; + target_vid = 0; target_pid = 0; /* - The CMSIS-DAP specification stipulates: - "The Product String must contain "CMSIS-DAP" somewhere in the string. This is used by the - debuggers to idenify a CMSIS-DAP compliant Debug Unit that is connected to a host computer." - */ + * The CMSIS-DAP specification stipulates: + * "The Product String must contain "CMSIS-DAP" somewhere in the string. This is used by the + * debuggers to identify a CMSIS-DAP compliant Debug Unit that is connected to a host computer." + */ devs = hid_enumerate(0x0, 0x0); cur_dev = devs; while (NULL != cur_dev) { @@ -179,23 +181,27 @@ static int cmsis_dap_usb_open(void) LOG_DEBUG("Cannot read product string of device 0x%x:0x%x", cur_dev->vendor_id, cur_dev->product_id); } else { - if (wcsstr(cur_dev->product_string, L"CMSIS-DAP")) - /* - if the user hasn't specified VID:PID *and* - product string contains "CMSIS-DAP", pick it - */ - break; + if (wcsstr(cur_dev->product_string, L"CMSIS-DAP")) { + /* if the user hasn't specified VID:PID *and* + * product string contains "CMSIS-DAP", pick it + */ + found = true; + } } } else { - /* - otherwise, exhaustively compare against all VID:PID in list - */ + /* otherwise, exhaustively compare against all VID:PID in list */ for (i = 0; cmsis_dap_vid[i] || cmsis_dap_pid[i]; i++) { if ((cmsis_dap_vid[i] == cur_dev->vendor_id) && (cmsis_dap_pid[i] == cur_dev->product_id)) - break; + found = true; } + if (cmsis_dap_vid[i] || cmsis_dap_pid[i]) - break; + found = true; + } + + if (found) { + /* we have found an adapter, so exit further checks */ + break; } cur_dev = cur_dev->next;