remove intf malloc

This commit is contained in:
sakumisu
2022-10-20 21:22:08 +08:00
parent 731f206254
commit dca8b4cfed
36 changed files with 178 additions and 247 deletions

View File

@@ -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);