cmsis-dap: refactor HID PID/VID check loop

In preparation for adding serial number support.

Change-Id: I3c9fb411b79d54a4d2de067039255436ba6708c7
Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-on: http://openocd.zylin.com/2328
Tested-by: jenkins
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
This commit is contained in:
Spencer Oliver 2014-10-02 21:47:22 +01:00
parent c7de02d619
commit ef02315de3
1 changed files with 21 additions and 15 deletions

View File

@ -163,14 +163,16 @@ static int cmsis_dap_usb_open(void)
struct hid_device_info *devs, *cur_dev; struct hid_device_info *devs, *cur_dev;
unsigned short target_vid, target_pid; unsigned short target_vid, target_pid;
bool found = false;
target_vid = 0; target_vid = 0;
target_pid = 0; target_pid = 0;
/* /*
The CMSIS-DAP specification stipulates: * The CMSIS-DAP specification stipulates:
"The Product String must contain "CMSIS-DAP" somewhere in the string. This is used by the * "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." * debuggers to identify a CMSIS-DAP compliant Debug Unit that is connected to a host computer."
*/ */
devs = hid_enumerate(0x0, 0x0); devs = hid_enumerate(0x0, 0x0);
cur_dev = devs; cur_dev = devs;
while (NULL != cur_dev) { 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", LOG_DEBUG("Cannot read product string of device 0x%x:0x%x",
cur_dev->vendor_id, cur_dev->product_id); cur_dev->vendor_id, cur_dev->product_id);
} else { } else {
if (wcsstr(cur_dev->product_string, L"CMSIS-DAP")) if (wcsstr(cur_dev->product_string, L"CMSIS-DAP")) {
/* /* if the user hasn't specified VID:PID *and*
if the user hasn't specified VID:PID *and* * product string contains "CMSIS-DAP", pick it
product string contains "CMSIS-DAP", pick it */
*/ found = true;
break; }
} }
} else { } 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++) { 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)) 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]) 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; cur_dev = cur_dev->next;