jtag/drivers/cmsis_dap: prevent CDC missdetect as CMSIS-DAP bulk 79/7279/2
authorTomas Vanek <vanekt@fbl.cz>
Thu, 20 Oct 2022 09:43:10 +0000 (11:43 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Fri, 11 Nov 2022 20:22:25 +0000 (20:22 +0000)
The autodetection of CMSIS-DAP v2 bulk interface is tricky
as not all adapters conform CMSIS-DAP specs.

If an interface has a string descriptor containing CMSIS-DAP,
then OpenOCD did not insisted on the correct interface class
LIBUSB_CLASS_VENDOR_SPEC.

However the relaxed test caused false autodetection of v2 bulk
interface on some CMSIS-DAP v1 adapters with an additional serial
interface with the string descriptor stupidly containing
CMSIS-DAP text.

Make the test less relaxed, refuse autodetection of the interfaces
with the class number of well known functions including CDC and MSC.

Link: https://sourceforge.net/p/openocd/tickets/368/
Change-Id: I917cb257eb42aab93560cc39c61ec35a60ce52e3
Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-on: https://review.openocd.org/c/openocd/+/7279
Tested-by: jenkins
Reviewed-by: SilverFox <yyjdelete@126.com>
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
src/jtag/drivers/cmsis_dap_usb_bulk.c

index a738200ea57d878bd35f5ef25c6e873edc24ef19..55b9a558a1ccfb921d7ae90aa0a92ca4b0d2813c 100644 (file)
@@ -262,8 +262,10 @@ static int cmsis_dap_usb_open(struct cmsis_dap *dap, uint16_t vids[], uint16_t p
                                        /* If the interface is reliably identified
                                         * then we need not insist on setting USB class, subclass and protocol
                                         * exactly as the specification requires.
+                                        * Just filter out the well known classes, mainly CDC and MSC.
                                         * At least KitProg3 uses class 0 contrary to the specification */
-                                       if (intf_identified_reliably) {
+                                       if (intf_identified_reliably &&
+                                                       (intf_desc->bInterfaceClass == 0 || intf_desc->bInterfaceClass > 0x12)) {
                                                LOG_WARNING("Using CMSIS-DAPv2 interface %d with wrong class %" PRId8
                                                                  " subclass %" PRId8 " or protocol %" PRId8,
                                                                  interface_num,

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)