From db330b42e7bba489c6b42ad2119a2e1df4a58c2b Mon Sep 17 00:00:00 2001 From: sakimisu <1203593632@qq.com> Date: Sat, 31 Dec 2022 16:27:38 +0800 Subject: [PATCH] add class only match --- class/hid/usbh_hid.c | 18 ++++-------------- core/usbh_core.c | 6 +++++- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/class/hid/usbh_hid.c b/class/hid/usbh_hid.c index d6a252ec..4fb4a534 100644 --- a/class/hid/usbh_hid.c +++ b/class/hid/usbh_hid.c @@ -196,21 +196,11 @@ const struct usbh_class_driver hid_class_driver = { .disconnect = usbh_hid_disconnect }; -CLASS_INFO_DEFINE const struct usbh_class_info hid_keyboard_class_info = { - .match_flags = USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS | USB_CLASS_MATCH_INTF_PROTOCOL, +CLASS_INFO_DEFINE const struct usbh_class_info hid_custom_class_info = { + .match_flags = USB_CLASS_MATCH_INTF_CLASS, .class = USB_DEVICE_CLASS_HID, - .subclass = HID_SUBCLASS_BOOTIF, - .protocol = HID_PROTOCOL_KEYBOARD, - .vid = 0x00, - .pid = 0x00, - .class_driver = &hid_class_driver -}; - -CLASS_INFO_DEFINE const struct usbh_class_info hid_mouse_class_info = { - .match_flags = USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS | USB_CLASS_MATCH_INTF_PROTOCOL, - .class = USB_DEVICE_CLASS_HID, - .subclass = HID_SUBCLASS_BOOTIF, - .protocol = HID_PROTOCOL_MOUSE, + .subclass = 0x00, + .protocol = 0x00, .vid = 0x00, .pid = 0x00, .class_driver = &hid_class_driver diff --git a/core/usbh_core.c b/core/usbh_core.c index b0b0a807..6eb4ccd4 100644 --- a/core/usbh_core.c +++ b/core/usbh_core.c @@ -109,7 +109,11 @@ static const struct usbh_class_driver *usbh_find_class_driver(uint8_t class, uin if (index->vid == vid && index->pid == pid && index->class == class) { return index->class_driver; } - } else if (index->match_flags & (USB_CLASS_MATCH_INTF_CLASS)) { + } else if ((index->match_flags & (USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS)) == (USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS)) { + if (index->class == class && index->subclass == subclass) { + return index->class_driver; + } + } else if ((index->match_flags & (USB_CLASS_MATCH_INTF_CLASS)) == USB_CLASS_MATCH_INTF_CLASS) { if (index->class == class) { return index->class_driver; }