summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2022-08-19 23:32:10 +0800
committersakumisu <[email protected]>2022-08-19 23:34:35 +0800
commit523d33506d35142a5effeffe1dafad13e356e096 (patch)
tree608d5cb017313445edaa78276a41505c65680286
parent607a05716273dacb46e2e56c680acbb9e6dd9607 (diff)
give up class register
-rw-r--r--class/audio/usbd_audio.c7
-rw-r--r--class/cdc/usbd_cdc.c7
-rw-r--r--class/dfu/usbd_dfu.c7
-rw-r--r--class/hid/usbd_hid.c7
-rw-r--r--class/hub/usbd_hub.c7
-rw-r--r--class/msc/usbd_msc.c7
-rw-r--r--class/printer/usbd_printer.c7
-rw-r--r--class/template/usbd_xxx.c7
-rw-r--r--class/video/usbd_video.c7
-rw-r--r--core/usbd_core.c76
10 files changed, 29 insertions, 110 deletions
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);
-
- usb_slist_for_each(j, &devclass->intf_list)
- {
- usbd_interface_t *intf = usb_slist_entry(j, struct usbd_interface, list);
+ usbd_interface_t *intf = usb_slist_entry(i, 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);
-
- usb_slist_for_each(j, &devclass->intf_list)
- {
- usbd_interface_t *intf = usb_slist_entry(j, struct usbd_interface, list);
+ usbd_interface_t *intf = usb_slist_entry(i, 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);
-
- usb_slist_for_each(j, &devclass->intf_list)
- {
- usbd_interface_t *intf = usb_slist_entry(j, struct usbd_interface, list);
+ usbd_interface_t *intf = usb_slist_entry(i, 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();
+}