cmsis-dap: refactor HID PID/VID check loop
authorSpencer Oliver <spen@spen-soft.co.uk>
Thu, 2 Oct 2014 20:47:22 +0000 (21:47 +0100)
committerSpencer Oliver <spen@spen-soft.co.uk>
Thu, 16 Oct 2014 12:30:45 +0000 (12:30 +0000)
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>
src/jtag/drivers/cmsis_dap_usb.c

index 3e62ce9c87cf8e05e993bf25b585565ae316877a..fd8c82e01deacc07c54bdce711d6f0c6eb523ed1 100644 (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;