From 3da0c2504c14ea0736b973fa0b5085c42a9c6ce8 Mon Sep 17 00:00:00 2001 From: Tomas Vanek Date: Thu, 20 Oct 2022 11:43:10 +0200 Subject: [PATCH] jtag/drivers/cmsis_dap: prevent CDC missdetect as CMSIS-DAP bulk 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 Reviewed-on: https://review.openocd.org/c/openocd/+/7279 Tested-by: jenkins Reviewed-by: SilverFox Reviewed-by: Antonio Borneo --- src/jtag/drivers/cmsis_dap_usb_bulk.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/jtag/drivers/cmsis_dap_usb_bulk.c b/src/jtag/drivers/cmsis_dap_usb_bulk.c index a738200ea5..55b9a558a1 100644 --- a/src/jtag/drivers/cmsis_dap_usb_bulk.c +++ b/src/jtag/drivers/cmsis_dap_usb_bulk.c @@ -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, -- 2.30.2