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 <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>
This commit is contained in:
parent
1dea9ab41f
commit
3da0c2504c
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue