diff --git a/class/audio/usbd_audio.c b/class/audio/usbd_audio.c index 3edfa80d..e5563693 100644 --- a/class/audio/usbd_audio.c +++ b/class/audio/usbd_audio.c @@ -375,13 +375,6 @@ static void audio_notify_handler(uint8_t event, void *arg) void usbd_audio_add_interface(usbd_class_t *devclass, usbd_interface_t *intf) { - static usbd_class_t *last_class = NULL; - - if (last_class != devclass) { - last_class = devclass; - usbd_class_register(devclass); - } - intf->class_handler = audio_class_request_handler; #if CONFIG_USBDEV_AUDIO_VERSION < 0x0200 intf->custom_handler = audio_custom_request_handler; diff --git a/class/cdc/usbd_cdc.c b/class/cdc/usbd_cdc.c index 08fc92be..c134b1b8 100644 --- a/class/cdc/usbd_cdc.c +++ b/class/cdc/usbd_cdc.c @@ -92,13 +92,6 @@ static void cdc_notify_handler(uint8_t event, void *arg) void usbd_cdc_add_acm_interface(usbd_class_t *devclass, usbd_interface_t *intf) { - static usbd_class_t *last_class = NULL; - - if (last_class != devclass) { - last_class = devclass; - usbd_class_register(devclass); - } - intf->class_handler = cdc_acm_class_request_handler; intf->custom_handler = NULL; intf->vendor_handler = NULL; diff --git a/class/dfu/usbd_dfu.c b/class/dfu/usbd_dfu.c index 626cc265..3e5c6f5a 100644 --- a/class/dfu/usbd_dfu.c +++ b/class/dfu/usbd_dfu.c @@ -53,13 +53,6 @@ static void dfu_notify_handler(uint8_t event, void *arg) void usbd_dfu_add_interface(usbd_class_t *devclass, usbd_interface_t *intf) { - static usbd_class_t *last_class = NULL; - - if (last_class != devclass) { - last_class = devclass; - usbd_class_register(devclass); - } - intf->class_handler = dfu_class_request_handler; intf->custom_handler = NULL; intf->vendor_handler = NULL; diff --git a/class/hid/usbd_hid.c b/class/hid/usbd_hid.c index 61e803cd..a0bb9cd8 100644 --- a/class/hid/usbd_hid.c +++ b/class/hid/usbd_hid.c @@ -175,13 +175,6 @@ int usbd_hid_alloc(uint8_t intf) void usbd_hid_add_interface(usbd_class_t *devclass, usbd_interface_t *intf) { - static usbd_class_t *last_class = NULL; - - if (last_class != devclass) { - last_class = devclass; - usbd_class_register(devclass); - } - intf->class_handler = hid_class_request_handler; intf->custom_handler = hid_custom_request_handler; intf->vendor_handler = NULL; diff --git a/class/hub/usbd_hub.c b/class/hub/usbd_hub.c index d22a4d0b..a01312b8 100644 --- a/class/hub/usbd_hub.c +++ b/class/hub/usbd_hub.c @@ -74,13 +74,6 @@ static void hub_notify_handler(uint8_t event, void *arg) void usbd_hub_add_interface(usbd_class_t *devclass, usbd_interface_t *intf) { - static usbd_class_t *last_class = NULL; - - if (last_class != devclass) { - last_class = devclass; - usbd_class_register(devclass); - } - intf->class_handler = NULL; intf->custom_handler = hub_custom_request_handler; intf->vendor_handler = NULL; diff --git a/class/msc/usbd_msc.c b/class/msc/usbd_msc.c index 195ab3b7..66b2200d 100644 --- a/class/msc/usbd_msc.c +++ b/class/msc/usbd_msc.c @@ -911,8 +911,6 @@ static void usbd_msc_thread(void *argument) } #endif -static usbd_class_t msc_class; - static usbd_interface_t msc_intf = { .class_handler = msc_storage_class_request_handler, .vendor_handler = NULL, @@ -921,10 +919,7 @@ static usbd_interface_t msc_intf = { void usbd_msc_class_init(uint8_t out_ep, uint8_t in_ep) { - msc_class.name = "usbd_msc"; - - usbd_class_register(&msc_class); - usbd_class_add_interface(&msc_class, &msc_intf); + usbd_class_add_interface(NULL, &msc_intf); mass_ep_data[0].ep_addr = out_ep; mass_ep_data[0].ep_cb = mass_storage_bulk_out; diff --git a/class/printer/usbd_printer.c b/class/printer/usbd_printer.c index 689869ee..24b8fa88 100644 --- a/class/printer/usbd_printer.c +++ b/class/printer/usbd_printer.c @@ -48,13 +48,6 @@ static void printer_notify_handler(uint8_t event, void *arg) void usbd_printer_add_interface(usbd_class_t *devclass, usbd_interface_t *intf) { - static usbd_class_t *last_class = NULL; - - if (last_class != devclass) { - last_class = devclass; - usbd_class_register(devclass); - } - intf->class_handler = printer_class_request_handler; intf->custom_handler = NULL; intf->vendor_handler = NULL; diff --git a/class/template/usbd_xxx.c b/class/template/usbd_xxx.c index 827b4a84..66632517 100644 --- a/class/template/usbd_xxx.c +++ b/class/template/usbd_xxx.c @@ -30,13 +30,6 @@ static void xxx_notify_handler(uint8_t event, void *arg) void usbd_xxx_add_interface(usbd_class_t *devclass, usbd_interface_t *intf) { - static usbd_class_t *last_class = NULL; - - if (last_class != devclass) { - last_class = devclass; - usbd_class_register(devclass); - } - intf->class_handler = xxx_class_request_handler; intf->custom_handler = NULL; intf->vendor_handler = NULL; diff --git a/class/video/usbd_video.c b/class/video/usbd_video.c index bc37c0b2..578f8a89 100644 --- a/class/video/usbd_video.c +++ b/class/video/usbd_video.c @@ -709,13 +709,6 @@ static void video_notify_handler(uint8_t event, void *arg) void usbd_video_add_interface(usbd_class_t *devclass, usbd_interface_t *intf) { - static usbd_class_t *last_class = NULL; - - if (last_class != devclass) { - last_class = devclass; - usbd_class_register(devclass); - } - intf->class_handler = video_class_request_handler; intf->custom_handler = NULL; intf->vendor_handler = NULL; diff --git a/core/usbd_core.c b/core/usbd_core.c index c466d9b2..f8a3f6f8 100644 --- a/core/usbd_core.c +++ b/core/usbd_core.c @@ -51,7 +51,8 @@ USB_NOCACHE_RAM_SECTION struct usbd_core_cfg_priv { #endif } usbd_core_cfg; -static usb_slist_t usbd_class_head = USB_SLIST_OBJECT_INIT(usbd_class_head); +static usb_slist_t usbd_intf_head = USB_SLIST_OBJECT_INIT(usbd_intf_head); + static struct usb_msosv1_descriptor *msosv1_desc; static struct usb_msosv2_descriptor *msosv2_desc; static struct usb_bos_descriptor *bos_desc; @@ -582,31 +583,21 @@ static int usbd_class_request_handler(struct usb_setup_packet *setup, uint8_t ** { usb_slist_t *i, *j; if ((setup->bmRequestType & USB_REQUEST_RECIPIENT_MASK) == USB_REQUEST_RECIPIENT_INTERFACE) { - usb_slist_for_each(i, &usbd_class_head) + usb_slist_for_each(i, &usbd_intf_head) { - usbd_class_t *devclass = usb_slist_entry(i, struct usbd_class, list); + usbd_interface_t *intf = usb_slist_entry(i, struct usbd_interface, list); - usb_slist_for_each(j, &devclass->intf_list) - { - usbd_interface_t *intf = usb_slist_entry(j, struct usbd_interface, list); - - if (intf->class_handler && (intf->intf_num == (setup->wIndex & 0xFF))) { - return intf->class_handler(setup, data, len); - } + if (intf->class_handler && (intf->intf_num == (setup->wIndex & 0xFF))) { + return intf->class_handler(setup, data, len); } } } else if ((setup->bmRequestType & USB_REQUEST_RECIPIENT_MASK) == USB_REQUEST_RECIPIENT_ENDPOINT) { - usb_slist_for_each(i, &usbd_class_head) + usb_slist_for_each(i, &usbd_intf_head) { - usbd_class_t *devclass = usb_slist_entry(i, struct usbd_class, list); + usbd_interface_t *intf = usb_slist_entry(i, struct usbd_interface, list); - usb_slist_for_each(j, &devclass->intf_list) - { - usbd_interface_t *intf = usb_slist_entry(j, struct usbd_interface, list); - - if (intf->custom_handler && (intf->intf_num == ((setup->wIndex >> 8) & 0xFF))) { - return intf->custom_handler(setup, data, len); - } + if (intf->custom_handler && (intf->intf_num == ((setup->wIndex >> 8) & 0xFF))) { + return intf->custom_handler(setup, data, len); } } } @@ -661,19 +652,14 @@ static int usbd_vendor_request_handler(struct usb_setup_packet *setup, uint8_t * } } - usb_slist_t *i, *j; + usb_slist_t *i; - usb_slist_for_each(i, &usbd_class_head) + usb_slist_for_each(i, &usbd_intf_head) { - usbd_class_t *devclass = usb_slist_entry(i, struct usbd_class, list); + usbd_interface_t *intf = usb_slist_entry(i, struct usbd_interface, list); - usb_slist_for_each(j, &devclass->intf_list) - { - usbd_interface_t *intf = usb_slist_entry(j, struct usbd_interface, list); - - if (intf->vendor_handler && !intf->vendor_handler(setup, data, len)) { - return 0; - } + if (intf->vendor_handler && !intf->vendor_handler(setup, data, len)) { + return 0; } } @@ -695,18 +681,13 @@ static int usbd_custom_request_handler(struct usb_setup_packet *setup, uint8_t * return -1; } - usb_slist_t *i, *j; - usb_slist_for_each(i, &usbd_class_head) + usb_slist_t *i; + usb_slist_for_each(i, &usbd_intf_head) { - usbd_class_t *devclass = usb_slist_entry(i, struct usbd_class, list); + usbd_interface_t *intf = usb_slist_entry(i, struct usbd_interface, list); - usb_slist_for_each(j, &devclass->intf_list) - { - usbd_interface_t *intf = usb_slist_entry(j, struct usbd_interface, list); - - if (intf->custom_handler && (intf->intf_num == (setup->wIndex & 0xFF))) { - return intf->custom_handler(setup, data, len); - } + if (intf->custom_handler && (intf->intf_num == (setup->wIndex & 0xFF))) { + return intf->custom_handler(setup, data, len); } } @@ -758,10 +739,9 @@ static bool usbd_setup_request_handler(struct usb_setup_packet *setup, uint8_t * static void usbd_class_event_notify_handler(uint8_t event, void *arg) { usb_slist_t *i; - usb_slist_for_each(i, &usbd_class_head) + usb_slist_for_each(i, &usbd_intf_head) { - usbd_class_t *devclass = usb_slist_entry(i, struct usbd_class, list); - usbd_interface_t *intf = usb_slist_first_entry(&devclass->intf_list, struct usbd_interface, list); + usbd_interface_t *intf = usb_slist_entry(i, struct usbd_interface, list); if (intf->notify_handler) { intf->notify_handler(event, arg); @@ -974,15 +954,16 @@ void usbd_bos_desc_register(struct usb_bos_descriptor *desc) void usbd_class_register(usbd_class_t *devclass) { - usb_slist_add_tail(&usbd_class_head, &devclass->list); - usb_slist_init(&devclass->intf_list); + // usb_slist_add_tail(&usbd_class_head, &devclass->list); + // usb_slist_init(&devclass->intf_list); } void usbd_class_add_interface(usbd_class_t *devclass, usbd_interface_t *intf) { static uint8_t intf_offset = 0; + intf->intf_num = intf_offset; - usb_slist_add_tail(&devclass->intf_list, &intf->list); + usb_slist_add_tail(&usbd_intf_head, &intf->list); usb_slist_init(&intf->ep_list); intf_offset++; } @@ -1004,6 +985,5 @@ bool usb_device_is_configured(void) int usbd_initialize(void) { - usb_dc_init(); - return 0; -} \ No newline at end of file + return usb_dc_init(); +}