summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakimisu <[email protected]>2022-12-31 16:27:38 +0800
committersakimisu <[email protected]>2022-12-31 16:27:38 +0800
commitdb330b42e7bba489c6b42ad2119a2e1df4a58c2b (patch)
treeb155b208a0e61468700d98728b0dc1e66fc9c682
parentf45e0f47fa17512ec47be88d1b9f12b986421dae (diff)
add class only match
-rw-r--r--class/hid/usbh_hid.c18
-rw-r--r--core/usbh_core.c6
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;
}