summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2022-10-20 21:22:08 +0800
committersakumisu <[email protected]>2022-10-20 21:22:08 +0800
commitdca8b4cfedd94b34207cacd3f6c43e7e354d34d2 (patch)
tree3c81bb0313a1ef0b3779fb14daa468dbadcfe04e
parent731f206254fe25368650f3c85918b2b12f3680a6 (diff)
remove intf malloc
-rw-r--r--README.md16
-rw-r--r--README_zh.md16
-rw-r--r--class/audio/usbd_audio.c8
-rw-r--r--class/audio/usbd_audio.h4
-rw-r--r--class/cdc/usbd_cdc.c8
-rw-r--r--class/cdc/usbd_cdc.h4
-rw-r--r--class/dfu/usbd_dfu.c8
-rw-r--r--class/dfu/usbd_dfu.h4
-rw-r--r--class/hid/usbd_hid.c64
-rw-r--r--class/hid/usbd_hid.h4
-rw-r--r--class/msc/usbd_msc.c8
-rw-r--r--class/msc/usbd_msc.h6
-rw-r--r--class/video/usbd_video.c13
-rw-r--r--class/video/usbd_video.h9
-rw-r--r--class/wireless/usbd_rndis.c11
-rw-r--r--class/wireless/usbd_rndis.h6
-rw-r--r--demo/audio_v1_mic_multichan_template.c7
-rw-r--r--demo/audio_v1_mic_speaker_multichan_template.c10
-rw-r--r--demo/audio_v2_mic_multichan_template.c7
-rw-r--r--demo/audio_v2_mic_speaker_multichan_template.c10
-rw-r--r--demo/audio_v2_speaker_multichan_template.c7
-rw-r--r--demo/cdc_acm_hid_msc_template.c20
-rw-r--r--demo/cdc_acm_msc_template.c11
-rw-r--r--demo/cdc_acm_multi_template.c26
-rw-r--r--demo/cdc_acm_template.c8
-rw-r--r--demo/cdc_rndis_template.c8
-rw-r--r--demo/cmsis-dap_v2.1_tempate.c6
-rw-r--r--demo/dfu_with_st_tool_template.c20
-rw-r--r--demo/hid_custom_inout_template.c11
-rw-r--r--demo/hid_keyboard_template.c4
-rw-r--r--demo/hid_mouse_template.c11
-rw-r--r--demo/midi_template.c8
-rw-r--r--demo/msc_ram_template.c11
-rw-r--r--demo/video_static_mjpeg_template.c7
-rw-r--r--demo/winusb1.0_template.c9
-rw-r--r--docs/source/api/api_device.rst35
36 files changed, 178 insertions, 247 deletions
diff --git a/README.md b/README.md
index c4445e51..aee4c636 100644
--- a/README.md
+++ b/README.md
@@ -66,14 +66,14 @@ CherryUSB Device Stack has the following functions:
CherryUSB Device Stack resource usage (GCC 10.2 with -O2):
-| file | FLASH (Byte) | No Cache RAM (Byte) | RAM (Byte) | Heap (Byte) |
-|:-------------:|:--------------:|:-------------------------:|:-------------:|:---------------------------------:|
-|usbd_core.c | 3263 | 384 | 17 | 0 |
-|usbd_cdc.c | 490 | 0 | 0 | sizeof(struct usbd_interface) * x |
-|usbd_msc.c | 2772 | 128 + 512(default) | 16 | sizeof(struct usbd_interface) * x |
-|usbd_hid.c | 501 | 0 | 0 | sizeof(struct usbd_interface) * x |
-|usbd_audio.c | 1208 | 0 | 4 | sizeof(struct usbd_interface) * x |
-|usbd_video.c | 2272 | 0 | 82 | sizeof(struct usbd_interface) * x |
+| file | FLASH (Byte) | No Cache RAM (Byte) | RAM (Byte) | Heap (Byte) |
+|:-------------:|:--------------:|:-------------------------:|:-------------:|:----------------:|
+|usbd_core.c | 3263 | 384 | 17 | 0 |
+|usbd_cdc.c | 490 | 0 | 0 | 0 |
+|usbd_msc.c | 2772 | 128 + 512(default) | 16 | 0 |
+|usbd_hid.c | 501 | 0 | 0 | 0 |
+|usbd_audio.c | 1208 | 0 | 4 | 0 |
+|usbd_video.c | 2272 | 0 | 82 | 0 |
## Host Stack Overview
diff --git a/README_zh.md b/README_zh.md
index d19d5207..2efcfeaf 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -65,14 +65,14 @@ CherryUSB Device 协议栈当前实现以下功能:
CherryUSB Device 协议栈资源占用说明(GCC 10.2 with -O2):
-| file | FLASH (Byte) | No Cache RAM (Byte) | RAM (Byte) | Heap (Byte) |
-|:-------------:|:--------------:|:-------------------------:|:-------------:|:---------------------------------:|
-|usbd_core.c | 3263 | 384 | 17 | 0 |
-|usbd_cdc.c | 490 | 0 | 0 | sizeof(struct usbd_interface) * x |
-|usbd_msc.c | 2772 | 128 + 512(default) | 16 | sizeof(struct usbd_interface) * x |
-|usbd_hid.c | 501 | 0 | 0 | sizeof(struct usbd_interface) * x |
-|usbd_audio.c | 1208 | 0 | 4 | sizeof(struct usbd_interface) * x |
-|usbd_video.c | 2272 | 0 | 82 | sizeof(struct usbd_interface) * x |
+| file | FLASH (Byte) | No Cache RAM (Byte) | RAM (Byte) | Heap (Byte) |
+|:-------------:|:--------------:|:-------------------------:|:-------------:|:----------------:|
+|usbd_core.c | 3263 | 384 | 17 | 0 |
+|usbd_cdc.c | 490 | 0 | 0 | 0 |
+|usbd_msc.c | 2772 | 128 + 512(default) | 16 | 0 |
+|usbd_hid.c | 501 | 0 | 0 | 0 |
+|usbd_audio.c | 1208 | 0 | 4 | 0 |
+|usbd_video.c | 2272 | 0 | 82 | 0 |
## Host 协议栈简介
diff --git a/class/audio/usbd_audio.c b/class/audio/usbd_audio.c
index 6755b83d..4baab5a4 100644
--- a/class/audio/usbd_audio.c
+++ b/class/audio/usbd_audio.c
@@ -373,14 +373,8 @@ static void audio_notify_handler(uint8_t event, void *arg)
}
}
-struct usbd_interface *usbd_audio_alloc_intf(void)
+struct usbd_interface *usbd_audio_init_intf(struct usbd_interface *intf)
{
- struct usbd_interface *intf = usb_malloc(sizeof(struct usbd_interface));
- if (intf == NULL) {
- USB_LOG_ERR("no mem to alloc intf\r\n");
- return NULL;
- }
-
intf->class_interface_handler = audio_class_interface_request_handler;
#if CONFIG_USBDEV_AUDIO_VERSION < 0x0200
intf->class_endpoint_handler = audio_class_endpoint_request_handler;
diff --git a/class/audio/usbd_audio.h b/class/audio/usbd_audio.h
index 723e8666..420e88ce 100644
--- a/class/audio/usbd_audio.h
+++ b/class/audio/usbd_audio.h
@@ -12,8 +12,8 @@
extern "C" {
#endif
-/* Alloc audio interface driver */
-struct usbd_interface *usbd_audio_alloc_intf(void);
+/* Init audio interface driver */
+struct usbd_interface *usbd_audio_init_intf(struct usbd_interface *intf);
void usbd_audio_open(uint8_t intf);
void usbd_audio_close(uint8_t intf);
diff --git a/class/cdc/usbd_cdc.c b/class/cdc/usbd_cdc.c
index 8c9ee5a8..2f4977f4 100644
--- a/class/cdc/usbd_cdc.c
+++ b/class/cdc/usbd_cdc.c
@@ -90,14 +90,8 @@ static void cdc_notify_handler(uint8_t event, void *arg)
}
}
-struct usbd_interface *usbd_cdc_acm_alloc_intf(void)
+struct usbd_interface *usbd_cdc_acm_init_intf(struct usbd_interface *intf)
{
- struct usbd_interface *intf = usb_malloc(sizeof(struct usbd_interface));
- if (intf == NULL) {
- USB_LOG_ERR("no mem to alloc intf\r\n");
- return NULL;
- }
-
intf->class_interface_handler = cdc_acm_class_interface_request_handler;
intf->class_endpoint_handler = NULL;
intf->vendor_handler = NULL;
diff --git a/class/cdc/usbd_cdc.h b/class/cdc/usbd_cdc.h
index 8cd88270..b4f5d993 100644
--- a/class/cdc/usbd_cdc.h
+++ b/class/cdc/usbd_cdc.h
@@ -12,8 +12,8 @@
extern "C" {
#endif
-/* Alloc cdc acm interface driver */
-struct usbd_interface *usbd_cdc_acm_alloc_intf(void);
+/* Init cdc acm interface driver */
+struct usbd_interface *usbd_cdc_acm_init_intf(struct usbd_interface *intf);
/* Setup request command callback api */
void usbd_cdc_acm_set_line_coding(uint8_t intf, struct cdc_line_coding *line_coding);
diff --git a/class/dfu/usbd_dfu.c b/class/dfu/usbd_dfu.c
index 10c33a48..3042e4df 100644
--- a/class/dfu/usbd_dfu.c
+++ b/class/dfu/usbd_dfu.c
@@ -477,14 +477,8 @@ static void dfu_notify_handler(uint8_t event, void *arg)
}
}
-struct usbd_interface *usbd_dfu_alloc_intf(void)
+struct usbd_interface *usbd_dfu_init_intf(struct usbd_interface *intf)
{
- struct usbd_interface *intf = usb_malloc(sizeof(struct usbd_interface));
- if (intf == NULL) {
- USB_LOG_ERR("no mem to alloc intf\r\n");
- return NULL;
- }
-
intf->class_interface_handler = dfu_class_interface_request_handler;
intf->class_endpoint_handler = NULL;
intf->vendor_handler = NULL;
diff --git a/class/dfu/usbd_dfu.h b/class/dfu/usbd_dfu.h
index 1cc4510b..9081d0dd 100644
--- a/class/dfu/usbd_dfu.h
+++ b/class/dfu/usbd_dfu.h
@@ -12,8 +12,8 @@
extern "C" {
#endif
-/* Alloc dfu interface driver */
-struct usbd_interface *usbd_dfu_alloc_intf(void);
+/* Init dfu interface driver */
+struct usbd_interface *usbd_dfu_init_intf(struct usbd_interface *intf);
/* Interface functions that need to be implemented by the user */
uint8_t *dfu_read_flash(uint8_t *src, uint8_t *dest, uint32_t len);
diff --git a/class/hid/usbd_hid.c b/class/hid/usbd_hid.c
index 1f47bb3f..b2659bdf 100644
--- a/class/hid/usbd_hid.c
+++ b/class/hid/usbd_hid.c
@@ -6,62 +6,6 @@
#include "usbd_core.h"
#include "usbd_hid.h"
-static int hid_custom_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len)
-{
- USB_LOG_DBG("HID Custom request: "
- "bRequest 0x%02x\r\n",
- setup->bRequest);
-
- if (((setup->bmRequestType & USB_REQUEST_DIR_MASK) == USB_REQUEST_DIR_IN) &&
- setup->bRequest == USB_REQUEST_GET_DESCRIPTOR) {
- uint8_t value = (uint8_t)(setup->wValue >> 8);
- uint8_t intf_num = (uint8_t)setup->wIndex;
-
- usb_slist_t *i;
- struct usbd_interface *match_intf = NULL;
-
- usb_slist_for_each(i, &usbd_intf_head)
- {
- struct usbd_interface *intf = usb_slist_entry(i, struct usbd_interface, list);
-
- if (intf->intf_num == intf_num) {
- match_intf = intf;
- break;
- }
- }
-
- if (match_intf == NULL) {
- return -2;
- }
-
- switch (value) {
- case HID_DESCRIPTOR_TYPE_HID:
- USB_LOG_INFO("get HID Descriptor\r\n");
- // *data = (uint8_t *)match_intf->hid_descriptor;
- // *len = match_intf->hid_descriptor[0];
- break;
-
- case HID_DESCRIPTOR_TYPE_HID_REPORT:
- USB_LOG_INFO("get Report Descriptor\r\n");
- *data = (uint8_t *)match_intf->hid_report_descriptor;
- *len = match_intf->hid_report_descriptor_len;
- break;
-
- case HID_DESCRIPTOR_TYPE_HID_PHYSICAL:
- USB_LOG_INFO("get PHYSICAL Descriptor\r\n");
-
- break;
-
- default:
- return -2;
- }
-
- return 0;
- }
-
- return -1;
-}
-
static int hid_class_interface_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len)
{
USB_LOG_DBG("HID Class request: "
@@ -105,14 +49,8 @@ static int hid_class_interface_request_handler(struct usb_setup_packet *setup, u
return 0;
}
-struct usbd_interface *usbd_hid_alloc_intf(const uint8_t *desc, uint32_t desc_len)
+struct usbd_interface *usbd_hid_init_intf(struct usbd_interface *intf, const uint8_t *desc, uint32_t desc_len)
{
- struct usbd_interface *intf = usb_malloc(sizeof(struct usbd_interface));
- if (intf == NULL) {
- USB_LOG_ERR("no mem to alloc intf\r\n");
- return NULL;
- }
-
intf->class_interface_handler = hid_class_interface_request_handler;
intf->class_endpoint_handler = NULL;
intf->vendor_handler = NULL;
diff --git a/class/hid/usbd_hid.h b/class/hid/usbd_hid.h
index d065cf45..9c1be362 100644
--- a/class/hid/usbd_hid.h
+++ b/class/hid/usbd_hid.h
@@ -12,8 +12,8 @@
extern "C" {
#endif
-/* Alloc hid interface driver */
-struct usbd_interface *usbd_hid_alloc_intf(const uint8_t *desc, uint32_t desc_len);
+/* Init hid interface driver */
+struct usbd_interface *usbd_hid_init_intf(struct usbd_interface *intf, const uint8_t *desc, uint32_t desc_len);
/* Register desc api */
void usbd_hid_descriptor_register(uint8_t intf_num, const uint8_t *desc);
diff --git a/class/msc/usbd_msc.c b/class/msc/usbd_msc.c
index 2ca1a837..9655c951 100644
--- a/class/msc/usbd_msc.c
+++ b/class/msc/usbd_msc.c
@@ -912,14 +912,8 @@ static void usbd_msc_thread(void *argument)
}
#endif
-struct usbd_interface *usbd_msc_alloc_intf(const uint8_t out_ep, const uint8_t in_ep)
+struct usbd_interface *usbd_msc_init_intf(struct usbd_interface *intf, const uint8_t out_ep, const uint8_t in_ep)
{
- struct usbd_interface *intf = usb_malloc(sizeof(struct usbd_interface));
- if (intf == NULL) {
- USB_LOG_ERR("no mem to alloc intf\r\n");
- return NULL;
- }
-
intf->class_interface_handler = msc_storage_class_interface_request_handler;
intf->class_endpoint_handler = NULL;
intf->vendor_handler = NULL;
diff --git a/class/msc/usbd_msc.h b/class/msc/usbd_msc.h
index 53ec4692..824b4844 100644
--- a/class/msc/usbd_msc.h
+++ b/class/msc/usbd_msc.h
@@ -12,8 +12,10 @@
extern "C" {
#endif
-/* Alloc msc interface driver */
-struct usbd_interface *usbd_msc_alloc_intf(const uint8_t out_ep, const uint8_t in_ep);
+/* Init msc interface driver */
+struct usbd_interface *usbd_msc_init_intf(struct usbd_interface *intf,
+ const uint8_t out_ep,
+ const uint8_t in_ep);
void usbd_msc_get_cap(uint8_t lun, uint32_t *block_num, uint16_t *block_size);
int usbd_msc_sector_read(uint32_t sector, uint8_t *buffer, uint32_t length);
diff --git a/class/video/usbd_video.c b/class/video/usbd_video.c
index fbb2beec..be27bba5 100644
--- a/class/video/usbd_video.c
+++ b/class/video/usbd_video.c
@@ -742,14 +742,11 @@ void usbd_video_probe_and_commit_controls_init(uint32_t dwFrameInterval, uint32_
usbd_video_cfg.commit.bMaxVersion = 0;
}
-struct usbd_interface *usbd_video_alloc_intf(uint32_t dwFrameInterval, uint32_t dwMaxVideoFrameSize, uint32_t dwMaxPayloadTransferSize)
+struct usbd_interface *usbd_video_init_intf(struct usbd_interface *intf,
+ uint32_t dwFrameInterval,
+ uint32_t dwMaxVideoFrameSize,
+ uint32_t dwMaxPayloadTransferSize)
{
- struct usbd_interface *intf = usb_malloc(sizeof(struct usbd_interface));
- if (intf == NULL) {
- USB_LOG_ERR("no mem to alloc intf\r\n");
- return NULL;
- }
-
intf->class_interface_handler = video_class_interface_request_handler;
intf->class_endpoint_handler = NULL;
intf->vendor_handler = NULL;
@@ -780,7 +777,7 @@ uint32_t usbd_video_mjpeg_payload_fill(uint8_t *input, uint32_t input_len, uint8
picture_pos += usbd_video_cfg.probe.dwMaxPayloadTransferSize - 2;
}
}
- uvc_header[1] ^=1;
+ uvc_header[1] ^= 1;
*out_len = (input_len + 2 * packets);
return packets;
} \ No newline at end of file
diff --git a/class/video/usbd_video.h b/class/video/usbd_video.h
index cbb54d71..75d7f9ed 100644
--- a/class/video/usbd_video.h
+++ b/class/video/usbd_video.h
@@ -12,10 +12,11 @@
extern "C" {
#endif
-/* Alloc video interface driver */
-struct usbd_interface *usbd_video_alloc_intf(uint32_t dwFrameInterval,
- uint32_t dwMaxVideoFrameSize,
- uint32_t dwMaxPayloadTransferSize);
+/* Init video interface driver */
+struct usbd_interface *usbd_video_init_intf(struct usbd_interface *intf,
+ uint32_t dwFrameInterval,
+ uint32_t dwMaxVideoFrameSize,
+ uint32_t dwMaxPayloadTransferSize);
void usbd_video_open(uint8_t intf);
void usbd_video_close(uint8_t intf);
diff --git a/class/wireless/usbd_rndis.c b/class/wireless/usbd_rndis.c
index 2479bb0b..6b58d937 100644
--- a/class/wireless/usbd_rndis.c
+++ b/class/wireless/usbd_rndis.c
@@ -529,14 +529,11 @@ int usbd_rndis_eth_tx(struct pbuf *p)
return usbd_ep_start_write(rndis_ep_data[RNDIS_IN_EP_IDX].ep_addr, g_rndis_tx_buffer, g_rndis_tx_data_length);
}
#endif
-struct usbd_interface *usbd_rndis_alloc_intf(uint8_t out_ep, uint8_t in_ep, uint8_t int_ep, uint8_t mac[6])
+struct usbd_interface *usbd_rndis_init_intf(struct usbd_interface *intf,
+ const uint8_t out_ep,
+ const uint8_t in_ep,
+ const uint8_t int_ep, uint8_t mac[6])
{
- struct usbd_interface *intf = (struct usbd_interface *)usb_malloc(sizeof(struct usbd_interface));
- if (intf == NULL) {
- USB_LOG_ERR("no mem to alloc intf\r\n");
- return NULL;
- }
-
memcpy(usbd_rndis_cfg.mac, mac, 6);
rndis_ep_data[RNDIS_OUT_EP_IDX].ep_addr = out_ep;
diff --git a/class/wireless/usbd_rndis.h b/class/wireless/usbd_rndis.h
index 05ed53ae..d9f9f646 100644
--- a/class/wireless/usbd_rndis.h
+++ b/class/wireless/usbd_rndis.h
@@ -12,7 +12,11 @@
extern "C" {
#endif
-struct usbd_interface *usbd_rndis_alloc_intf(uint8_t out_ep, uint8_t in_ep, uint8_t int_ep, uint8_t mac[6]);
+/* Init rndis interface driver */
+struct usbd_interface *usbd_rndis_init_intf(struct usbd_interface *intf,
+ const uint8_t out_ep,
+ const uint8_t in_ep,
+ const uint8_t int_ep, uint8_t mac[6]);
#ifdef CONFIG_USBDEV_RNDIS_USING_LWIP
struct pbuf *usbd_rndis_eth_rx(void);
diff --git a/demo/audio_v1_mic_multichan_template.c b/demo/audio_v1_mic_multichan_template.c
index 7d077a3b..276ae32e 100644
--- a/demo/audio_v1_mic_multichan_template.c
+++ b/demo/audio_v1_mic_multichan_template.c
@@ -173,11 +173,14 @@ static struct usbd_endpoint audio_in_ep = {
.ep_addr = AUDIO_IN_EP
};
+struct usbd_interface intf0;
+struct usbd_interface intf1;
+
void audio_init()
{
usbd_desc_register(audio_descriptor);
- usbd_add_interface(usbd_audio_alloc_intf());
- usbd_add_interface(usbd_audio_alloc_intf());
+ usbd_add_interface(usbd_audio_init_intf(&intf0));
+ usbd_add_interface(usbd_audio_init_intf(&intf1));
usbd_add_endpoint(&audio_in_ep);
usbd_audio_add_entity(0x02, AUDIO_CONTROL_FEATURE_UNIT);
diff --git a/demo/audio_v1_mic_speaker_multichan_template.c b/demo/audio_v1_mic_speaker_multichan_template.c
index 48047ac8..b5152a3f 100644
--- a/demo/audio_v1_mic_speaker_multichan_template.c
+++ b/demo/audio_v1_mic_speaker_multichan_template.c
@@ -193,12 +193,16 @@ static struct usbd_endpoint audio_out_ep = {
.ep_addr = AUDIO_OUT_EP
};
+struct usbd_interface intf0;
+struct usbd_interface intf1;
+struct usbd_interface intf2;
+
void audio_init()
{
usbd_desc_register(audio_descriptor);
- usbd_add_interface(usbd_audio_alloc_intf());
- usbd_add_interface(usbd_audio_alloc_intf());
- usbd_add_interface(usbd_audio_alloc_intf());
+ usbd_add_interface(usbd_audio_init_intf(&intf0));
+ usbd_add_interface(usbd_audio_init_intf(&intf1));
+ usbd_add_interface(usbd_audio_init_intf(&intf2));
usbd_add_endpoint(&audio_in_ep);
usbd_add_endpoint(&audio_out_ep);
diff --git a/demo/audio_v2_mic_multichan_template.c b/demo/audio_v2_mic_multichan_template.c
index af6256cc..ab8cef22 100644
--- a/demo/audio_v2_mic_multichan_template.c
+++ b/demo/audio_v2_mic_multichan_template.c
@@ -174,11 +174,14 @@ static struct usbd_endpoint audio_in_ep = {
.ep_addr = AUDIO_IN_EP
};
+struct usbd_interface intf0;
+struct usbd_interface intf1;
+
void audio_init()
{
usbd_desc_register(audio_descriptor);
- usbd_add_interface(usbd_audio_alloc_intf());
- usbd_add_interface(usbd_audio_alloc_intf());
+ usbd_add_interface(usbd_audio_init_intf(&intf0));
+ usbd_add_interface(usbd_audio_init_intf(&intf1));
usbd_add_endpoint(&audio_in_ep);
usbd_audio_add_entity(0x01, AUDIO_CONTROL_CLOCK_SOURCE);
diff --git a/demo/audio_v2_mic_speaker_multichan_template.c b/demo/audio_v2_mic_speaker_multichan_template.c
index 17b28a69..805a9632 100644
--- a/demo/audio_v2_mic_speaker_multichan_template.c
+++ b/demo/audio_v2_mic_speaker_multichan_template.c
@@ -262,12 +262,16 @@ static struct usbd_endpoint audio_in_ep = {
.ep_addr = AUDIO_IN_EP
};
+struct usbd_interface intf0;
+struct usbd_interface intf1;
+struct usbd_interface intf2;
+
void audio_init()
{
usbd_desc_register(audio_descriptor);
- usbd_add_interface(usbd_audio_alloc_intf());
- usbd_add_interface(usbd_audio_alloc_intf());
- usbd_add_interface(usbd_audio_alloc_intf());
+ usbd_add_interface(usbd_audio_init_intf(&intf0));
+ usbd_add_interface(usbd_audio_init_intf(&intf1));
+ usbd_add_interface(usbd_audio_init_intf(&intf2));
usbd_add_endpoint(&audio_in_ep);
usbd_add_endpoint(&audio_out_ep);
diff --git a/demo/audio_v2_speaker_multichan_template.c b/demo/audio_v2_speaker_multichan_template.c
index dc103558..c1de77cf 100644
--- a/demo/audio_v2_speaker_multichan_template.c
+++ b/demo/audio_v2_speaker_multichan_template.c
@@ -182,11 +182,14 @@ static struct usbd_endpoint audio_out_ep = {
.ep_addr = AUDIO_OUT_EP
};
+struct usbd_interface intf0;
+struct usbd_interface intf1;
+
void audio_init()
{
usbd_desc_register(audio_descriptor);
- usbd_add_interface(usbd_audio_alloc_intf());
- usbd_add_interface(usbd_audio_alloc_intf());
+ usbd_add_interface(usbd_audio_init_intf(&intf0));
+ usbd_add_interface(usbd_audio_init_intf(&intf1));
usbd_add_endpoint(&audio_out_ep);
usbd_audio_add_entity(0x01, AUDIO_CONTROL_CLOCK_SOURCE);
diff --git a/demo/cdc_acm_hid_msc_template.c b/demo/cdc_acm_hid_msc_template.c
index 13b97cdc..58afd7e9 100644
--- a/demo/cdc_acm_hid_msc_template.c
+++ b/demo/cdc_acm_hid_msc_template.c
@@ -291,25 +291,23 @@ struct usbd_endpoint cdc_in_ep = {
.ep_cb = usbd_cdc_acm_bulk_in
};
-/* function ------------------------------------------------------------------*/
-/**
- * @brief msc ram init
- * @pre none
- * @param[in] none
- * @retval none
- */
+struct usbd_interface intf0;
+struct usbd_interface intf1;
+struct usbd_interface intf2;
+struct usbd_interface intf3;
+
void cdc_acm_hid_msc_descriptor_init(void)
{
usbd_desc_register(cdc_acm_hid_msc_descriptor);
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf0));
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf1));
usbd_add_endpoint(&cdc_out_ep);
usbd_add_endpoint(&cdc_in_ep);
- usbd_add_interface(usbd_msc_alloc_intf(MSC_OUT_EP, MSC_IN_EP));
+ usbd_add_interface(usbd_msc_init_intf(&intf2, MSC_OUT_EP, MSC_IN_EP));
- usbd_add_interface(usbd_hid_alloc_intf(hid_mouse_report_desc, HID_MOUSE_REPORT_DESC_SIZE));
+ usbd_add_interface(usbd_hid_init_intf(&intf3, hid_mouse_report_desc, HID_MOUSE_REPORT_DESC_SIZE));
usbd_add_endpoint(&hid_in_ep);
/*!< init mouse report data */
diff --git a/demo/cdc_acm_msc_template.c b/demo/cdc_acm_msc_template.c
index 82c741a5..f322c925 100644
--- a/demo/cdc_acm_msc_template.c
+++ b/demo/cdc_acm_msc_template.c
@@ -145,15 +145,18 @@ struct usbd_endpoint cdc_in_ep = {
.ep_cb = usbd_cdc_acm_bulk_in
};
-/* function ------------------------------------------------------------------*/
+struct usbd_interface intf0;
+struct usbd_interface intf1;
+struct usbd_interface intf2;
+
void cdc_acm_msc_init(void)
{
usbd_desc_register(cdc_msc_descriptor);
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf0));
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf1));
usbd_add_endpoint(&cdc_out_ep);
usbd_add_endpoint(&cdc_in_ep);
- usbd_add_interface(usbd_msc_alloc_intf(MSC_OUT_EP, MSC_IN_EP));
+ usbd_add_interface(usbd_msc_init_intf(&intf2, MSC_OUT_EP, MSC_IN_EP));
usbd_initialize();
}
diff --git a/demo/cdc_acm_multi_template.c b/demo/cdc_acm_multi_template.c
index 334ebc10..68eb4e41 100644
--- a/demo/cdc_acm_multi_template.c
+++ b/demo/cdc_acm_multi_template.c
@@ -187,28 +187,36 @@ struct usbd_endpoint cdc_in_ep4 = {
.ep_cb = usbd_cdc_acm_bulk_in
};
-/* function ------------------------------------------------------------------*/
+struct usbd_interface intf0;
+struct usbd_interface intf1;
+struct usbd_interface intf2;
+struct usbd_interface intf3;
+struct usbd_interface intf4;
+struct usbd_interface intf5;
+struct usbd_interface intf6;
+struct usbd_interface intf7;
+
void cdc_acm_multi_init(void)
{
usbd_desc_register(cdc_descriptor);
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf0));
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf1));
usbd_add_endpoint(&cdc_out_ep1);
usbd_add_endpoint(&cdc_in_ep1);
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf2));
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf3));
usbd_add_endpoint(&cdc_out_ep2);
usbd_add_endpoint(&cdc_in_ep2);
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf4));
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf5));
usbd_add_endpoint(&cdc_out_ep3);
usbd_add_endpoint(&cdc_in_ep3);
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf6));
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf7));
usbd_add_endpoint(&cdc_out_ep4);
usbd_add_endpoint(&cdc_in_ep4);
diff --git a/demo/cdc_acm_template.c b/demo/cdc_acm_template.c
index 050d4ccd..2fa76058 100644
--- a/demo/cdc_acm_template.c
+++ b/demo/cdc_acm_template.c
@@ -144,12 +144,14 @@ struct usbd_endpoint cdc_in_ep = {
.ep_cb = usbd_cdc_acm_bulk_in
};
-/* function ------------------------------------------------------------------*/
+struct usbd_interface intf0;
+struct usbd_interface intf1;
+
void cdc_acm_init(void)
{
usbd_desc_register(cdc_descriptor);
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf0));
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf1));
usbd_add_endpoint(&cdc_out_ep);
usbd_add_endpoint(&cdc_in_ep);
usbd_initialize();
diff --git a/demo/cdc_rndis_template.c b/demo/cdc_rndis_template.c
index a056e472..f9e974a4 100644
--- a/demo/cdc_rndis_template.c
+++ b/demo/cdc_rndis_template.c
@@ -161,14 +161,16 @@ void usbd_configure_done_callback(void)
#endif /* RT_USING_LWIP */
-/* function ------------------------------------------------------------------*/
+struct usbd_interface intf0;
+struct usbd_interface intf1;
+
void cdc_rndis_init(void)
{
#ifdef RT_USING_LWIP
rt_usbd_rndis_init();
#endif
usbd_desc_register(cdc_descriptor);
- usbd_add_interface(usbd_rndis_alloc_intf(CDC_OUT_EP, CDC_IN_EP, CDC_INT_EP, mac));
- usbd_add_interface(usbd_rndis_alloc_intf(CDC_OUT_EP, CDC_IN_EP, CDC_INT_EP, mac));
+ usbd_add_interface(usbd_rndis_init_intf(&intf0, CDC_OUT_EP, CDC_IN_EP, CDC_INT_EP, mac));
+ usbd_add_interface(usbd_rndis_init_intf(&intf1, CDC_OUT_EP, CDC_IN_EP, CDC_INT_EP, mac));
usbd_initialize();
}
diff --git a/demo/cmsis-dap_v2.1_tempate.c b/demo/cmsis-dap_v2.1_tempate.c
index 6e51a432..627efb8d 100644
--- a/demo/cmsis-dap_v2.1_tempate.c
+++ b/demo/cmsis-dap_v2.1_tempate.c
@@ -261,6 +261,8 @@ static struct usbd_endpoint dap_in_ep = {
};
struct usbd_interface dap_interface;
+struct usbd_interface intf1;
+struct usbd_interface intf2;
void daplink_init(void)
{
@@ -273,8 +275,8 @@ void daplink_init(void)
usbd_add_endpoint(&dap_in_ep);
/*!< cdc acm */
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
- usbd_add_interface(usbd_cdc_acm_alloc_intf());
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf1));
+ usbd_add_interface(usbd_cdc_acm_init_intf(&intf2));
usbd_add_endpoint(&cdc_out_ep);
usbd_add_endpoint(&cdc_in_ep);
diff --git a/demo/dfu_with_st_tool_template.c b/demo/dfu_with_st_tool_template.c
index 4cb397d5..7d168242 100644
--- a/demo/dfu_with_st_tool_template.c
+++ b/demo/dfu_with_st_tool_template.c
@@ -1,9 +1,9 @@
#include "usbd_core.h"
#include "usbd_dfu.h"
-#define USBD_VID 0x0483
-#define USBD_PID 0xDF11
-#define USBD_MAX_POWER 100
+#define USBD_VID 0x0483
+#define USBD_PID 0xDF11
+#define USBD_MAX_POWER 100
#define USBD_LANGID_STRING 1033
#define FLASH_DESC_STR "@Internal Flash /0x08000000/16*001Ka,112*01Kg"
@@ -134,23 +134,19 @@ const uint8_t dfu_flash_descriptor[] = {
0x01,
0x00,
#endif
- 0x00};
+ 0x00
+};
void usbd_configure_done_callback(void)
{
/* no out ep, do nothing */
}
-/* function ------------------------------------------------------------------*/
-/**
- * @brief dfu flash init
- * @pre none
- * @param[in] none
- * @retval none
- */
+struct usbd_interface intf0;
+
void dfu_flash_init(void)
{
usbd_desc_register(dfu_flash_descriptor);
- usbd_add_interface(usbd_dfu_alloc_intf());
+ usbd_add_interface(usbd_dfu_init_intf(&intf0));
usbd_initialize();
}
diff --git a/demo/hid_custom_inout_template.c b/demo/hid_custom_inout_template.c
index c1e80212..493a49e3 100644
--- a/demo/hid_custom_inout_template.c
+++ b/demo/hid_custom_inout_template.c
@@ -194,17 +194,12 @@ static struct usbd_endpoint custom_out_ep = {
.ep_addr = HIDRAW_OUT_EP
};
-/* function ------------------------------------------------------------------*/
-/**
- * @brief hid custom init
- * @pre none
- * @param[in] none
- * @retval none
- */
+struct usbd_interface intf0;
+
void hid_custom_keyboard_init(void)
{
usbd_desc_register(hid_descriptor);
- usbd_add_interface(usbd_hid_alloc_intf(hid_custom_report_desc, HID_CUSTOM_REPORT_DESC_SIZE));
+ usbd_add_interface(usbd_hid_init_intf(&intf0, hid_custom_report_desc, HID_CUSTOM_REPORT_DESC_SIZE));
usbd_add_endpoint(&custom_in_ep);
usbd_add_endpoint(&custom_out_ep);
diff --git a/demo/hid_keyboard_template.c b/demo/hid_keyboard_template.c
index 4b41bbfb..662cae11 100644
--- a/demo/hid_keyboard_template.c
+++ b/demo/hid_keyboard_template.c
@@ -193,10 +193,12 @@ static struct usbd_endpoint hid_in_ep = {
.ep_addr = HID_INT_EP
};
+struct usbd_interface intf0;
+
void hid_keyboard_init(void)
{
usbd_desc_register(hid_descriptor);
- usbd_add_interface(usbd_hid_alloc_intf(hid_keyboard_report_desc, HID_KEYBOARD_REPORT_DESC_SIZE));
+ usbd_add_interface(usbd_hid_init_intf(&intf0, hid_keyboard_report_desc, HID_KEYBOARD_REPORT_DESC_SIZE));
usbd_add_endpoint(&hid_in_ep);
usbd_initialize();
diff --git a/demo/hid_mouse_template.c b/demo/hid_mouse_template.c
index 971ab1f0..718ab20a 100644
--- a/demo/hid_mouse_template.c
+++ b/demo/hid_mouse_template.c
@@ -211,17 +211,12 @@ static struct usbd_endpoint hid_in_ep = {
.ep_addr = HID_INT_EP
};
-/* function ------------------------------------------------------------------*/
-/**
- * @brief hid mouse init
- * @pre none
- * @param[in] none
- * @retval none
- */
+struct usbd_interface intf0;
+
void hid_mouse_init(void)
{
usbd_desc_register(hid_descriptor);
- usbd_add_interface(usbd_hid_alloc_intf(hid_mouse_report_desc, HID_MOUSE_REPORT_DESC_SIZE));
+ usbd_add_interface(usbd_hid_init_intf(&intf0, hid_mouse_report_desc, HID_MOUSE_REPORT_DESC_SIZE));
usbd_add_endpoint(&hid_in_ep);
usbd_initialize();
diff --git a/demo/midi_template.c b/demo/midi_template.c
index b4ee0be9..c58b3b28 100644
--- a/demo/midi_template.c
+++ b/demo/midi_template.c
@@ -138,8 +138,8 @@ void usbd_midi_bulk_in(uint8_t ep, uint32_t nbytes)
{
}
-struct usbd_interface midi_cmd_intf;
-struct usbd_interface midi_data_intf;
+struct usbd_interface intf0;
+struct usbd_interface intf1;
struct usbd_endpoint midi_out_ep = {
.ep_addr = MIDI_OUT_EP,
@@ -154,8 +154,8 @@ struct usbd_endpoint midi_in_ep = {
void midi_init(void)
{
usbd_desc_register(midi_descriptor);
- usbd_add_interface(&midi_cmd_intf);
- usbd_add_interface(&midi_data_intf);
+ usbd_add_interface(&intf0);
+ usbd_add_interface(&intf1);
usbd_add_endpoint(&midi_out_ep);
usbd_add_endpoint(&midi_in_ep);
diff --git a/demo/msc_ram_template.c b/demo/msc_ram_template.c
index b7e5e0eb..ebd34fce 100644
--- a/demo/msc_ram_template.c
+++ b/demo/msc_ram_template.c
@@ -123,17 +123,12 @@ int usbd_msc_sector_write(uint32_t sector, uint8_t *buffer, uint32_t length)
return 0;
}
-/* function ------------------------------------------------------------------*/
-/**
- * @brief msc ram init
- * @pre none
- * @param[in] none
- * @retval none
- */
+struct usbd_interface intf0;
+
void msc_ram_init(void)
{
usbd_desc_register(msc_ram_descriptor);
- usbd_add_interface(usbd_msc_alloc_intf(MSC_OUT_EP, MSC_IN_EP));
+ usbd_add_interface(usbd_msc_init_intf(&intf0, MSC_OUT_EP, MSC_IN_EP));
usbd_initialize();
}
diff --git a/demo/video_static_mjpeg_template.c b/demo/video_static_mjpeg_template.c
index af4f77b9..a9c4b020 100644
--- a/demo/video_static_mjpeg_template.c
+++ b/demo/video_static_mjpeg_template.c
@@ -173,11 +173,14 @@ static struct usbd_endpoint video_in_ep = {
.ep_addr = VIDEO_IN_EP
};
+struct usbd_interface intf0;
+struct usbd_interface intf1;
+
void video_init()
{
usbd_desc_register(video_descriptor);
- usbd_add_interface(usbd_video_alloc_intf(INTERVAL, MAX_FRAME_SIZE, MAX_PAYLOAD_SIZE));
- usbd_add_interface(usbd_video_alloc_intf(INTERVAL, MAX_FRAME_SIZE, MAX_PAYLOAD_SIZE));
+ usbd_add_interface(usbd_video_init_intf(&intf0, INTERVAL, MAX_FRAME_SIZE, MAX_PAYLOAD_SIZE));
+ usbd_add_interface(usbd_video_init_intf(&intf1, INTERVAL, MAX_FRAME_SIZE, MAX_PAYLOAD_SIZE));
usbd_add_endpoint(&video_in_ep);
usbd_initialize();
diff --git a/demo/winusb1.0_template.c b/demo/winusb1.0_template.c
index aa208fff..afe4bb72 100644
--- a/demo/winusb1.0_template.c
+++ b/demo/winusb1.0_template.c
@@ -206,8 +206,6 @@ void usbd_winusb_in(uint8_t ep, uint32_t nbytes)
{
}
-struct usbd_interface winusb_intf;
-
struct usbd_endpoint winusb_out_ep = {
.ep_addr = WINUSB_OUT_EP,
.ep_cb = usbd_winusb_out
@@ -218,16 +216,15 @@ struct usbd_endpoint winusb_in_ep = {
.ep_cb = usbd_winusb_in
};
+struct usbd_interface intf0;
+
void daplink_winusb_init(void)
{
usbd_desc_register(winusb_descriptor);
usbd_msosv1_desc_register(&msosv1_desc);
- usbd_add_interface(&winusb_intf);
+ usbd_add_interface(&intf0);
usbd_add_endpoint(&winusb_out_ep);
usbd_add_endpoint(&winusb_in_ep);
usbd_initialize();
-
- /* setup first out ep read transfer */
- usbd_ep_start_read(WINUSB_OUT_EP, read_buffer, 2048);
} \ No newline at end of file
diff --git a/docs/source/api/api_device.rst b/docs/source/api/api_device.rst
index 6b32c446..3b2f2674 100644
--- a/docs/source/api/api_device.rst
+++ b/docs/source/api/api_device.rst
@@ -4,7 +4,7 @@
设备协议栈主要负责枚举和驱动加载,枚举这边就不说了,驱动加载,也就是接口驱动加载,主要是依靠 `usbd_add_interface` 函数,记录传入的接口驱动保存到链表中,当主机进行类请求时就可以查找链表进行访问了。
在调用 `usbd_desc_register` 以后需要进行接口注册和端点注册,口诀如下:
-- 有多少个接口就调用多少次 `usbd_add_interface`,参数填相关 `xxx_alloc_intf`, 如果没有支持的,手动创建一个填入
+- 有多少个接口就调用多少次 `usbd_add_interface`,参数填相关 `xxx_init_intf`, 如果没有支持的,手动创建一个填入
- 有多少个端点就调用多少次 `usbd_add_endpoint`,当中断完成时,会调用到注册的端点回调中。
CORE
@@ -109,7 +109,7 @@ usbd_add_interface
void usbd_add_interface(struct usbd_interface *intf);
-- **intf** 接口驱动句柄,通常从不同 class 的 `xxx_alloc_intf` 函数获取
+- **intf** 接口驱动句柄,通常从不同 class 的 `xxx_init_intf` 函数获取
usbd_add_endpoint
""""""""""""""""""""""""""""""""""""
@@ -156,17 +156,17 @@ usbd_initialize
CDC ACM
-----------------
-usbd_cdc_acm_alloc_intf
+usbd_cdc_acm_init_intf
""""""""""""""""""""""""""""""""""""
-``usbd_cdc_acm_alloc_intf`` 用来申请一个 USB CDC ACM 类接口,并实现该接口相关的函数。
+``usbd_cdc_acm_init_intf`` 用来初始化 USB CDC ACM 类接口,并实现该接口相关的函数。
- ``cdc_acm_class_request_handler`` 用来处理 USB CDC ACM 类 Setup 请求。
- ``cdc_notify_handler`` 用来处理 USB CDC 其他中断回调函数。
.. code-block:: C
- struct usbd_interface *usbd_cdc_acm_alloc_intf(void);
+ struct usbd_interface *usbd_cdc_acm_init_intf(struct usbd_interface *intf);
- **return** 接口句柄
@@ -236,10 +236,10 @@ CDC_ACM_DESCRIPTOR_INIT
HID
-----------------
-usbd_hid_alloc_intf
+usbd_hid_init_intf
""""""""""""""""""""""""""""""""""""
-``usbd_hid_alloc_intf`` 用来申请一个 USB HID 类接口,并实现该接口相关的函数:
+``usbd_hid_init_intf`` 用来初始化 USB HID 类接口,并实现该接口相关的函数:
- ``hid_class_request_handler`` 用来处理 USB HID 类的 Setup 请求。
- ``hid_custom_request_handler`` 用来处理 USB HID 获取报告描述符请求。
@@ -247,7 +247,7 @@ usbd_hid_alloc_intf
.. code-block:: C
- struct usbd_interface *usbd_hid_alloc_intf(const uint8_t *desc, uint32_t desc_len);
+ struct usbd_interface *usbd_hid_init_intf(struct usbd_interface *intf, const uint8_t *desc, uint32_t desc_len);
- **desc** 报告描述符
- **desc_len** 报告描述符长度
@@ -255,9 +255,9 @@ usbd_hid_alloc_intf
MSC
-----------------
-usbd_msc_alloc_intf
+usbd_msc_init_intf
""""""""""""""""""""""""""""""""""""
-``usbd_msc_alloc_intf`` 用来申请一个 MSC 类接口,并实现该接口相关函数,并且注册端点回调函数。(因为 msc bot 协议是固定的,所以不需要用于实现,因此端点回调函数自然不需要用户实现)。
+``usbd_msc_init_intf`` 用来初始化 MSC 类接口,并实现该接口相关函数,并且注册端点回调函数。(因为 msc bot 协议是固定的,所以不需要用于实现,因此端点回调函数自然不需要用户实现)。
- ``msc_storage_class_request_handler`` 用于处理 USB MSC Setup 中断请求。
- ``msc_storage_notify_handler`` 用于实现 USB MSC 其他中断回调函数。
@@ -267,7 +267,7 @@ usbd_msc_alloc_intf
.. code-block:: C
- struct usbd_interface *usbd_msc_alloc_intf(const uint8_t out_ep, const uint8_t in_ep);
+ struct usbd_interface *usbd_msc_init_intf(struct usbd_interface *intf, const uint8_t out_ep, const uint8_t in_ep);
- **out_ep** out 端点地址
- **in_ep** in 端点地址
@@ -315,16 +315,16 @@ usbd_msc_sector_write
UAC
-----------------
-usbd_audio_alloc_intf
+usbd_audio_init_intf
""""""""""""""""""""""""""""""""""""
-``usbd_audio_alloc_intf`` 用来申请一个 USB Audio 类接口,并实现该接口相关的函数:
+``usbd_audio_init_intf`` 用来初始化 USB Audio 类接口,并实现该接口相关的函数:
- ``audio_class_request_handler`` 用于处理 USB Audio Setup 中断请求。
- ``audio_notify_handler`` 用于实现 USB Audio 其他中断回调函数。
.. code-block:: C
- struct usbd_interface *usbd_audio_alloc_intf(void);
+ struct usbd_interface *usbd_audio_init_intf(struct usbd_interface *intf);
- **class** 类的句柄
- **intf** 接口句柄
@@ -425,16 +425,17 @@ usbd_audio_set_pitch
UVC
-----------------
-usbd_video_alloc_intf
+usbd_video_init_intf
""""""""""""""""""""""""""""""""""""
-``usbd_video_alloc_intf`` 用来申请一个 USB Video 类接口,并实现该接口相关的函数:
+``usbd_video_init_intf`` 用来初始化 USB Video 类接口,并实现该接口相关的函数:
- ``video_class_request_handler`` 用于处理 USB Video Setup 中断请求。
- ``video_notify_handler`` 用于实现 USB Video 其他中断回调函数。
.. code-block:: C
- struct usbd_interface *usbd_video_alloc_intf(uint32_t dwFrameInterval,
+ struct usbd_interface *usbd_video_init_intf(struct usbd_interface *intf,
+ uint32_t dwFrameInterval,
uint32_t dwMaxVideoFrameSize,
uint32_t dwMaxPayloadTransferSize);