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>
__archive__
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;
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;