remove intf malloc
This commit is contained in:
12
README.md
12
README.md
@@ -67,13 +67,13 @@ CherryUSB Device Stack has the following functions:
|
|||||||
CherryUSB Device Stack resource usage (GCC 10.2 with -O2):
|
CherryUSB Device Stack resource usage (GCC 10.2 with -O2):
|
||||||
|
|
||||||
| file | FLASH (Byte) | No Cache RAM (Byte) | RAM (Byte) | Heap (Byte) |
|
| file | FLASH (Byte) | No Cache RAM (Byte) | RAM (Byte) | Heap (Byte) |
|
||||||
|:-------------:|:--------------:|:-------------------------:|:-------------:|:---------------------------------:|
|
|:-------------:|:--------------:|:-------------------------:|:-------------:|:----------------:|
|
||||||
|usbd_core.c | 3263 | 384 | 17 | 0 |
|
|usbd_core.c | 3263 | 384 | 17 | 0 |
|
||||||
|usbd_cdc.c | 490 | 0 | 0 | sizeof(struct usbd_interface) * x |
|
|usbd_cdc.c | 490 | 0 | 0 | 0 |
|
||||||
|usbd_msc.c | 2772 | 128 + 512(default) | 16 | sizeof(struct usbd_interface) * x |
|
|usbd_msc.c | 2772 | 128 + 512(default) | 16 | 0 |
|
||||||
|usbd_hid.c | 501 | 0 | 0 | sizeof(struct usbd_interface) * x |
|
|usbd_hid.c | 501 | 0 | 0 | 0 |
|
||||||
|usbd_audio.c | 1208 | 0 | 4 | sizeof(struct usbd_interface) * x |
|
|usbd_audio.c | 1208 | 0 | 4 | 0 |
|
||||||
|usbd_video.c | 2272 | 0 | 82 | sizeof(struct usbd_interface) * x |
|
|usbd_video.c | 2272 | 0 | 82 | 0 |
|
||||||
|
|
||||||
## Host Stack Overview
|
## Host Stack Overview
|
||||||
|
|
||||||
|
|||||||
12
README_zh.md
12
README_zh.md
@@ -66,13 +66,13 @@ CherryUSB Device 协议栈当前实现以下功能:
|
|||||||
CherryUSB Device 协议栈资源占用说明(GCC 10.2 with -O2):
|
CherryUSB Device 协议栈资源占用说明(GCC 10.2 with -O2):
|
||||||
|
|
||||||
| file | FLASH (Byte) | No Cache RAM (Byte) | RAM (Byte) | Heap (Byte) |
|
| file | FLASH (Byte) | No Cache RAM (Byte) | RAM (Byte) | Heap (Byte) |
|
||||||
|:-------------:|:--------------:|:-------------------------:|:-------------:|:---------------------------------:|
|
|:-------------:|:--------------:|:-------------------------:|:-------------:|:----------------:|
|
||||||
|usbd_core.c | 3263 | 384 | 17 | 0 |
|
|usbd_core.c | 3263 | 384 | 17 | 0 |
|
||||||
|usbd_cdc.c | 490 | 0 | 0 | sizeof(struct usbd_interface) * x |
|
|usbd_cdc.c | 490 | 0 | 0 | 0 |
|
||||||
|usbd_msc.c | 2772 | 128 + 512(default) | 16 | sizeof(struct usbd_interface) * x |
|
|usbd_msc.c | 2772 | 128 + 512(default) | 16 | 0 |
|
||||||
|usbd_hid.c | 501 | 0 | 0 | sizeof(struct usbd_interface) * x |
|
|usbd_hid.c | 501 | 0 | 0 | 0 |
|
||||||
|usbd_audio.c | 1208 | 0 | 4 | sizeof(struct usbd_interface) * x |
|
|usbd_audio.c | 1208 | 0 | 4 | 0 |
|
||||||
|usbd_video.c | 2272 | 0 | 82 | sizeof(struct usbd_interface) * x |
|
|usbd_video.c | 2272 | 0 | 82 | 0 |
|
||||||
|
|
||||||
## Host 协议栈简介
|
## Host 协议栈简介
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
intf->class_interface_handler = audio_class_interface_request_handler;
|
||||||
#if CONFIG_USBDEV_AUDIO_VERSION < 0x0200
|
#if CONFIG_USBDEV_AUDIO_VERSION < 0x0200
|
||||||
intf->class_endpoint_handler = audio_class_endpoint_request_handler;
|
intf->class_endpoint_handler = audio_class_endpoint_request_handler;
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Alloc audio interface driver */
|
/* Init audio interface driver */
|
||||||
struct usbd_interface *usbd_audio_alloc_intf(void);
|
struct usbd_interface *usbd_audio_init_intf(struct usbd_interface *intf);
|
||||||
|
|
||||||
void usbd_audio_open(uint8_t intf);
|
void usbd_audio_open(uint8_t intf);
|
||||||
void usbd_audio_close(uint8_t intf);
|
void usbd_audio_close(uint8_t intf);
|
||||||
|
|||||||
@@ -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_interface_handler = cdc_acm_class_interface_request_handler;
|
||||||
intf->class_endpoint_handler = NULL;
|
intf->class_endpoint_handler = NULL;
|
||||||
intf->vendor_handler = NULL;
|
intf->vendor_handler = NULL;
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Alloc cdc acm interface driver */
|
/* Init cdc acm interface driver */
|
||||||
struct usbd_interface *usbd_cdc_acm_alloc_intf(void);
|
struct usbd_interface *usbd_cdc_acm_init_intf(struct usbd_interface *intf);
|
||||||
|
|
||||||
/* Setup request command callback api */
|
/* Setup request command callback api */
|
||||||
void usbd_cdc_acm_set_line_coding(uint8_t intf, struct cdc_line_coding *line_coding);
|
void usbd_cdc_acm_set_line_coding(uint8_t intf, struct cdc_line_coding *line_coding);
|
||||||
|
|||||||
@@ -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_interface_handler = dfu_class_interface_request_handler;
|
||||||
intf->class_endpoint_handler = NULL;
|
intf->class_endpoint_handler = NULL;
|
||||||
intf->vendor_handler = NULL;
|
intf->vendor_handler = NULL;
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Alloc dfu interface driver */
|
/* Init dfu interface driver */
|
||||||
struct usbd_interface *usbd_dfu_alloc_intf(void);
|
struct usbd_interface *usbd_dfu_init_intf(struct usbd_interface *intf);
|
||||||
|
|
||||||
/* Interface functions that need to be implemented by the user */
|
/* Interface functions that need to be implemented by the user */
|
||||||
uint8_t *dfu_read_flash(uint8_t *src, uint8_t *dest, uint32_t len);
|
uint8_t *dfu_read_flash(uint8_t *src, uint8_t *dest, uint32_t len);
|
||||||
|
|||||||
@@ -6,62 +6,6 @@
|
|||||||
#include "usbd_core.h"
|
#include "usbd_core.h"
|
||||||
#include "usbd_hid.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)
|
static int hid_class_interface_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len)
|
||||||
{
|
{
|
||||||
USB_LOG_DBG("HID Class request: "
|
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;
|
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_interface_handler = hid_class_interface_request_handler;
|
||||||
intf->class_endpoint_handler = NULL;
|
intf->class_endpoint_handler = NULL;
|
||||||
intf->vendor_handler = NULL;
|
intf->vendor_handler = NULL;
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Alloc hid interface driver */
|
/* Init hid interface driver */
|
||||||
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);
|
||||||
|
|
||||||
/* Register desc api */
|
/* Register desc api */
|
||||||
void usbd_hid_descriptor_register(uint8_t intf_num, const uint8_t *desc);
|
void usbd_hid_descriptor_register(uint8_t intf_num, const uint8_t *desc);
|
||||||
|
|||||||
@@ -912,14 +912,8 @@ static void usbd_msc_thread(void *argument)
|
|||||||
}
|
}
|
||||||
#endif
|
#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_interface_handler = msc_storage_class_interface_request_handler;
|
||||||
intf->class_endpoint_handler = NULL;
|
intf->class_endpoint_handler = NULL;
|
||||||
intf->vendor_handler = NULL;
|
intf->vendor_handler = NULL;
|
||||||
|
|||||||
@@ -12,8 +12,10 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Alloc msc interface driver */
|
/* Init msc interface driver */
|
||||||
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);
|
||||||
|
|
||||||
void usbd_msc_get_cap(uint8_t lun, uint32_t *block_num, uint16_t *block_size);
|
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);
|
int usbd_msc_sector_read(uint32_t sector, uint8_t *buffer, uint32_t length);
|
||||||
|
|||||||
@@ -742,14 +742,11 @@ void usbd_video_probe_and_commit_controls_init(uint32_t dwFrameInterval, uint32_
|
|||||||
usbd_video_cfg.commit.bMaxVersion = 0;
|
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_interface_handler = video_class_interface_request_handler;
|
||||||
intf->class_endpoint_handler = NULL;
|
intf->class_endpoint_handler = NULL;
|
||||||
intf->vendor_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;
|
picture_pos += usbd_video_cfg.probe.dwMaxPayloadTransferSize - 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
uvc_header[1] ^=1;
|
uvc_header[1] ^= 1;
|
||||||
*out_len = (input_len + 2 * packets);
|
*out_len = (input_len + 2 * packets);
|
||||||
return packets;
|
return packets;
|
||||||
}
|
}
|
||||||
@@ -12,8 +12,9 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Alloc video interface driver */
|
/* Init video interface driver */
|
||||||
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 dwMaxVideoFrameSize,
|
||||||
uint32_t dwMaxPayloadTransferSize);
|
uint32_t dwMaxPayloadTransferSize);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
return usbd_ep_start_write(rndis_ep_data[RNDIS_IN_EP_IDX].ep_addr, g_rndis_tx_buffer, g_rndis_tx_data_length);
|
||||||
}
|
}
|
||||||
#endif
|
#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);
|
memcpy(usbd_rndis_cfg.mac, mac, 6);
|
||||||
|
|
||||||
rndis_ep_data[RNDIS_OUT_EP_IDX].ep_addr = out_ep;
|
rndis_ep_data[RNDIS_OUT_EP_IDX].ep_addr = out_ep;
|
||||||
|
|||||||
@@ -12,7 +12,11 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#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
|
#ifdef CONFIG_USBDEV_RNDIS_USING_LWIP
|
||||||
struct pbuf *usbd_rndis_eth_rx(void);
|
struct pbuf *usbd_rndis_eth_rx(void);
|
||||||
|
|||||||
@@ -173,11 +173,14 @@ static struct usbd_endpoint audio_in_ep = {
|
|||||||
.ep_addr = AUDIO_IN_EP
|
.ep_addr = AUDIO_IN_EP
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct usbd_interface intf0;
|
||||||
|
struct usbd_interface intf1;
|
||||||
|
|
||||||
void audio_init()
|
void audio_init()
|
||||||
{
|
{
|
||||||
usbd_desc_register(audio_descriptor);
|
usbd_desc_register(audio_descriptor);
|
||||||
usbd_add_interface(usbd_audio_alloc_intf());
|
usbd_add_interface(usbd_audio_init_intf(&intf0));
|
||||||
usbd_add_interface(usbd_audio_alloc_intf());
|
usbd_add_interface(usbd_audio_init_intf(&intf1));
|
||||||
usbd_add_endpoint(&audio_in_ep);
|
usbd_add_endpoint(&audio_in_ep);
|
||||||
|
|
||||||
usbd_audio_add_entity(0x02, AUDIO_CONTROL_FEATURE_UNIT);
|
usbd_audio_add_entity(0x02, AUDIO_CONTROL_FEATURE_UNIT);
|
||||||
|
|||||||
@@ -193,12 +193,16 @@ static struct usbd_endpoint audio_out_ep = {
|
|||||||
.ep_addr = AUDIO_OUT_EP
|
.ep_addr = AUDIO_OUT_EP
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct usbd_interface intf0;
|
||||||
|
struct usbd_interface intf1;
|
||||||
|
struct usbd_interface intf2;
|
||||||
|
|
||||||
void audio_init()
|
void audio_init()
|
||||||
{
|
{
|
||||||
usbd_desc_register(audio_descriptor);
|
usbd_desc_register(audio_descriptor);
|
||||||
usbd_add_interface(usbd_audio_alloc_intf());
|
usbd_add_interface(usbd_audio_init_intf(&intf0));
|
||||||
usbd_add_interface(usbd_audio_alloc_intf());
|
usbd_add_interface(usbd_audio_init_intf(&intf1));
|
||||||
usbd_add_interface(usbd_audio_alloc_intf());
|
usbd_add_interface(usbd_audio_init_intf(&intf2));
|
||||||
usbd_add_endpoint(&audio_in_ep);
|
usbd_add_endpoint(&audio_in_ep);
|
||||||
usbd_add_endpoint(&audio_out_ep);
|
usbd_add_endpoint(&audio_out_ep);
|
||||||
|
|
||||||
|
|||||||
@@ -174,11 +174,14 @@ static struct usbd_endpoint audio_in_ep = {
|
|||||||
.ep_addr = AUDIO_IN_EP
|
.ep_addr = AUDIO_IN_EP
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct usbd_interface intf0;
|
||||||
|
struct usbd_interface intf1;
|
||||||
|
|
||||||
void audio_init()
|
void audio_init()
|
||||||
{
|
{
|
||||||
usbd_desc_register(audio_descriptor);
|
usbd_desc_register(audio_descriptor);
|
||||||
usbd_add_interface(usbd_audio_alloc_intf());
|
usbd_add_interface(usbd_audio_init_intf(&intf0));
|
||||||
usbd_add_interface(usbd_audio_alloc_intf());
|
usbd_add_interface(usbd_audio_init_intf(&intf1));
|
||||||
usbd_add_endpoint(&audio_in_ep);
|
usbd_add_endpoint(&audio_in_ep);
|
||||||
|
|
||||||
usbd_audio_add_entity(0x01, AUDIO_CONTROL_CLOCK_SOURCE);
|
usbd_audio_add_entity(0x01, AUDIO_CONTROL_CLOCK_SOURCE);
|
||||||
|
|||||||
@@ -262,12 +262,16 @@ static struct usbd_endpoint audio_in_ep = {
|
|||||||
.ep_addr = AUDIO_IN_EP
|
.ep_addr = AUDIO_IN_EP
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct usbd_interface intf0;
|
||||||
|
struct usbd_interface intf1;
|
||||||
|
struct usbd_interface intf2;
|
||||||
|
|
||||||
void audio_init()
|
void audio_init()
|
||||||
{
|
{
|
||||||
usbd_desc_register(audio_descriptor);
|
usbd_desc_register(audio_descriptor);
|
||||||
usbd_add_interface(usbd_audio_alloc_intf());
|
usbd_add_interface(usbd_audio_init_intf(&intf0));
|
||||||
usbd_add_interface(usbd_audio_alloc_intf());
|
usbd_add_interface(usbd_audio_init_intf(&intf1));
|
||||||
usbd_add_interface(usbd_audio_alloc_intf());
|
usbd_add_interface(usbd_audio_init_intf(&intf2));
|
||||||
usbd_add_endpoint(&audio_in_ep);
|
usbd_add_endpoint(&audio_in_ep);
|
||||||
usbd_add_endpoint(&audio_out_ep);
|
usbd_add_endpoint(&audio_out_ep);
|
||||||
|
|
||||||
|
|||||||
@@ -182,11 +182,14 @@ static struct usbd_endpoint audio_out_ep = {
|
|||||||
.ep_addr = AUDIO_OUT_EP
|
.ep_addr = AUDIO_OUT_EP
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct usbd_interface intf0;
|
||||||
|
struct usbd_interface intf1;
|
||||||
|
|
||||||
void audio_init()
|
void audio_init()
|
||||||
{
|
{
|
||||||
usbd_desc_register(audio_descriptor);
|
usbd_desc_register(audio_descriptor);
|
||||||
usbd_add_interface(usbd_audio_alloc_intf());
|
usbd_add_interface(usbd_audio_init_intf(&intf0));
|
||||||
usbd_add_interface(usbd_audio_alloc_intf());
|
usbd_add_interface(usbd_audio_init_intf(&intf1));
|
||||||
usbd_add_endpoint(&audio_out_ep);
|
usbd_add_endpoint(&audio_out_ep);
|
||||||
|
|
||||||
usbd_audio_add_entity(0x01, AUDIO_CONTROL_CLOCK_SOURCE);
|
usbd_audio_add_entity(0x01, AUDIO_CONTROL_CLOCK_SOURCE);
|
||||||
|
|||||||
@@ -291,25 +291,23 @@ struct usbd_endpoint cdc_in_ep = {
|
|||||||
.ep_cb = usbd_cdc_acm_bulk_in
|
.ep_cb = usbd_cdc_acm_bulk_in
|
||||||
};
|
};
|
||||||
|
|
||||||
/* function ------------------------------------------------------------------*/
|
struct usbd_interface intf0;
|
||||||
/**
|
struct usbd_interface intf1;
|
||||||
* @brief msc ram init
|
struct usbd_interface intf2;
|
||||||
* @pre none
|
struct usbd_interface intf3;
|
||||||
* @param[in] none
|
|
||||||
* @retval none
|
|
||||||
*/
|
|
||||||
void cdc_acm_hid_msc_descriptor_init(void)
|
void cdc_acm_hid_msc_descriptor_init(void)
|
||||||
{
|
{
|
||||||
usbd_desc_register(cdc_acm_hid_msc_descriptor);
|
usbd_desc_register(cdc_acm_hid_msc_descriptor);
|
||||||
|
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf0));
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf1));
|
||||||
usbd_add_endpoint(&cdc_out_ep);
|
usbd_add_endpoint(&cdc_out_ep);
|
||||||
usbd_add_endpoint(&cdc_in_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);
|
usbd_add_endpoint(&hid_in_ep);
|
||||||
|
|
||||||
/*!< init mouse report data */
|
/*!< init mouse report data */
|
||||||
|
|||||||
@@ -145,15 +145,18 @@ struct usbd_endpoint cdc_in_ep = {
|
|||||||
.ep_cb = usbd_cdc_acm_bulk_in
|
.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)
|
void cdc_acm_msc_init(void)
|
||||||
{
|
{
|
||||||
usbd_desc_register(cdc_msc_descriptor);
|
usbd_desc_register(cdc_msc_descriptor);
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf0));
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf1));
|
||||||
usbd_add_endpoint(&cdc_out_ep);
|
usbd_add_endpoint(&cdc_out_ep);
|
||||||
usbd_add_endpoint(&cdc_in_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();
|
usbd_initialize();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -187,28 +187,36 @@ struct usbd_endpoint cdc_in_ep4 = {
|
|||||||
.ep_cb = usbd_cdc_acm_bulk_in
|
.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)
|
void cdc_acm_multi_init(void)
|
||||||
{
|
{
|
||||||
usbd_desc_register(cdc_descriptor);
|
usbd_desc_register(cdc_descriptor);
|
||||||
|
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf0));
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf1));
|
||||||
usbd_add_endpoint(&cdc_out_ep1);
|
usbd_add_endpoint(&cdc_out_ep1);
|
||||||
usbd_add_endpoint(&cdc_in_ep1);
|
usbd_add_endpoint(&cdc_in_ep1);
|
||||||
|
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf2));
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf3));
|
||||||
usbd_add_endpoint(&cdc_out_ep2);
|
usbd_add_endpoint(&cdc_out_ep2);
|
||||||
usbd_add_endpoint(&cdc_in_ep2);
|
usbd_add_endpoint(&cdc_in_ep2);
|
||||||
|
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf4));
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf5));
|
||||||
usbd_add_endpoint(&cdc_out_ep3);
|
usbd_add_endpoint(&cdc_out_ep3);
|
||||||
usbd_add_endpoint(&cdc_in_ep3);
|
usbd_add_endpoint(&cdc_in_ep3);
|
||||||
|
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf6));
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf7));
|
||||||
usbd_add_endpoint(&cdc_out_ep4);
|
usbd_add_endpoint(&cdc_out_ep4);
|
||||||
usbd_add_endpoint(&cdc_in_ep4);
|
usbd_add_endpoint(&cdc_in_ep4);
|
||||||
|
|
||||||
|
|||||||
@@ -144,12 +144,14 @@ struct usbd_endpoint cdc_in_ep = {
|
|||||||
.ep_cb = usbd_cdc_acm_bulk_in
|
.ep_cb = usbd_cdc_acm_bulk_in
|
||||||
};
|
};
|
||||||
|
|
||||||
/* function ------------------------------------------------------------------*/
|
struct usbd_interface intf0;
|
||||||
|
struct usbd_interface intf1;
|
||||||
|
|
||||||
void cdc_acm_init(void)
|
void cdc_acm_init(void)
|
||||||
{
|
{
|
||||||
usbd_desc_register(cdc_descriptor);
|
usbd_desc_register(cdc_descriptor);
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf0));
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf1));
|
||||||
usbd_add_endpoint(&cdc_out_ep);
|
usbd_add_endpoint(&cdc_out_ep);
|
||||||
usbd_add_endpoint(&cdc_in_ep);
|
usbd_add_endpoint(&cdc_in_ep);
|
||||||
usbd_initialize();
|
usbd_initialize();
|
||||||
|
|||||||
@@ -161,14 +161,16 @@ void usbd_configure_done_callback(void)
|
|||||||
|
|
||||||
#endif /* RT_USING_LWIP */
|
#endif /* RT_USING_LWIP */
|
||||||
|
|
||||||
/* function ------------------------------------------------------------------*/
|
struct usbd_interface intf0;
|
||||||
|
struct usbd_interface intf1;
|
||||||
|
|
||||||
void cdc_rndis_init(void)
|
void cdc_rndis_init(void)
|
||||||
{
|
{
|
||||||
#ifdef RT_USING_LWIP
|
#ifdef RT_USING_LWIP
|
||||||
rt_usbd_rndis_init();
|
rt_usbd_rndis_init();
|
||||||
#endif
|
#endif
|
||||||
usbd_desc_register(cdc_descriptor);
|
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_init_intf(&intf0, 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(&intf1, CDC_OUT_EP, CDC_IN_EP, CDC_INT_EP, mac));
|
||||||
usbd_initialize();
|
usbd_initialize();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -261,6 +261,8 @@ static struct usbd_endpoint dap_in_ep = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct usbd_interface dap_interface;
|
struct usbd_interface dap_interface;
|
||||||
|
struct usbd_interface intf1;
|
||||||
|
struct usbd_interface intf2;
|
||||||
|
|
||||||
void daplink_init(void)
|
void daplink_init(void)
|
||||||
{
|
{
|
||||||
@@ -273,8 +275,8 @@ void daplink_init(void)
|
|||||||
usbd_add_endpoint(&dap_in_ep);
|
usbd_add_endpoint(&dap_in_ep);
|
||||||
|
|
||||||
/*!< cdc acm */
|
/*!< cdc acm */
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf1));
|
||||||
usbd_add_interface(usbd_cdc_acm_alloc_intf());
|
usbd_add_interface(usbd_cdc_acm_init_intf(&intf2));
|
||||||
usbd_add_endpoint(&cdc_out_ep);
|
usbd_add_endpoint(&cdc_out_ep);
|
||||||
usbd_add_endpoint(&cdc_in_ep);
|
usbd_add_endpoint(&cdc_in_ep);
|
||||||
|
|
||||||
|
|||||||
@@ -134,23 +134,19 @@ const uint8_t dfu_flash_descriptor[] = {
|
|||||||
0x01,
|
0x01,
|
||||||
0x00,
|
0x00,
|
||||||
#endif
|
#endif
|
||||||
0x00};
|
0x00
|
||||||
|
};
|
||||||
|
|
||||||
void usbd_configure_done_callback(void)
|
void usbd_configure_done_callback(void)
|
||||||
{
|
{
|
||||||
/* no out ep, do nothing */
|
/* no out ep, do nothing */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* function ------------------------------------------------------------------*/
|
struct usbd_interface intf0;
|
||||||
/**
|
|
||||||
* @brief dfu flash init
|
|
||||||
* @pre none
|
|
||||||
* @param[in] none
|
|
||||||
* @retval none
|
|
||||||
*/
|
|
||||||
void dfu_flash_init(void)
|
void dfu_flash_init(void)
|
||||||
{
|
{
|
||||||
usbd_desc_register(dfu_flash_descriptor);
|
usbd_desc_register(dfu_flash_descriptor);
|
||||||
usbd_add_interface(usbd_dfu_alloc_intf());
|
usbd_add_interface(usbd_dfu_init_intf(&intf0));
|
||||||
usbd_initialize();
|
usbd_initialize();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,17 +194,12 @@ static struct usbd_endpoint custom_out_ep = {
|
|||||||
.ep_addr = HIDRAW_OUT_EP
|
.ep_addr = HIDRAW_OUT_EP
|
||||||
};
|
};
|
||||||
|
|
||||||
/* function ------------------------------------------------------------------*/
|
struct usbd_interface intf0;
|
||||||
/**
|
|
||||||
* @brief hid custom init
|
|
||||||
* @pre none
|
|
||||||
* @param[in] none
|
|
||||||
* @retval none
|
|
||||||
*/
|
|
||||||
void hid_custom_keyboard_init(void)
|
void hid_custom_keyboard_init(void)
|
||||||
{
|
{
|
||||||
usbd_desc_register(hid_descriptor);
|
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_in_ep);
|
||||||
usbd_add_endpoint(&custom_out_ep);
|
usbd_add_endpoint(&custom_out_ep);
|
||||||
|
|
||||||
|
|||||||
@@ -193,10 +193,12 @@ static struct usbd_endpoint hid_in_ep = {
|
|||||||
.ep_addr = HID_INT_EP
|
.ep_addr = HID_INT_EP
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct usbd_interface intf0;
|
||||||
|
|
||||||
void hid_keyboard_init(void)
|
void hid_keyboard_init(void)
|
||||||
{
|
{
|
||||||
usbd_desc_register(hid_descriptor);
|
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_add_endpoint(&hid_in_ep);
|
||||||
|
|
||||||
usbd_initialize();
|
usbd_initialize();
|
||||||
|
|||||||
@@ -211,17 +211,12 @@ static struct usbd_endpoint hid_in_ep = {
|
|||||||
.ep_addr = HID_INT_EP
|
.ep_addr = HID_INT_EP
|
||||||
};
|
};
|
||||||
|
|
||||||
/* function ------------------------------------------------------------------*/
|
struct usbd_interface intf0;
|
||||||
/**
|
|
||||||
* @brief hid mouse init
|
|
||||||
* @pre none
|
|
||||||
* @param[in] none
|
|
||||||
* @retval none
|
|
||||||
*/
|
|
||||||
void hid_mouse_init(void)
|
void hid_mouse_init(void)
|
||||||
{
|
{
|
||||||
usbd_desc_register(hid_descriptor);
|
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_add_endpoint(&hid_in_ep);
|
||||||
|
|
||||||
usbd_initialize();
|
usbd_initialize();
|
||||||
|
|||||||
@@ -138,8 +138,8 @@ void usbd_midi_bulk_in(uint8_t ep, uint32_t nbytes)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
struct usbd_interface midi_cmd_intf;
|
struct usbd_interface intf0;
|
||||||
struct usbd_interface midi_data_intf;
|
struct usbd_interface intf1;
|
||||||
|
|
||||||
struct usbd_endpoint midi_out_ep = {
|
struct usbd_endpoint midi_out_ep = {
|
||||||
.ep_addr = MIDI_OUT_EP,
|
.ep_addr = MIDI_OUT_EP,
|
||||||
@@ -154,8 +154,8 @@ struct usbd_endpoint midi_in_ep = {
|
|||||||
void midi_init(void)
|
void midi_init(void)
|
||||||
{
|
{
|
||||||
usbd_desc_register(midi_descriptor);
|
usbd_desc_register(midi_descriptor);
|
||||||
usbd_add_interface(&midi_cmd_intf);
|
usbd_add_interface(&intf0);
|
||||||
usbd_add_interface(&midi_data_intf);
|
usbd_add_interface(&intf1);
|
||||||
usbd_add_endpoint(&midi_out_ep);
|
usbd_add_endpoint(&midi_out_ep);
|
||||||
usbd_add_endpoint(&midi_in_ep);
|
usbd_add_endpoint(&midi_in_ep);
|
||||||
|
|
||||||
|
|||||||
@@ -123,17 +123,12 @@ int usbd_msc_sector_write(uint32_t sector, uint8_t *buffer, uint32_t length)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* function ------------------------------------------------------------------*/
|
struct usbd_interface intf0;
|
||||||
/**
|
|
||||||
* @brief msc ram init
|
|
||||||
* @pre none
|
|
||||||
* @param[in] none
|
|
||||||
* @retval none
|
|
||||||
*/
|
|
||||||
void msc_ram_init(void)
|
void msc_ram_init(void)
|
||||||
{
|
{
|
||||||
usbd_desc_register(msc_ram_descriptor);
|
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();
|
usbd_initialize();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -173,11 +173,14 @@ static struct usbd_endpoint video_in_ep = {
|
|||||||
.ep_addr = VIDEO_IN_EP
|
.ep_addr = VIDEO_IN_EP
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct usbd_interface intf0;
|
||||||
|
struct usbd_interface intf1;
|
||||||
|
|
||||||
void video_init()
|
void video_init()
|
||||||
{
|
{
|
||||||
usbd_desc_register(video_descriptor);
|
usbd_desc_register(video_descriptor);
|
||||||
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_alloc_intf(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_add_endpoint(&video_in_ep);
|
||||||
|
|
||||||
usbd_initialize();
|
usbd_initialize();
|
||||||
|
|||||||
@@ -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 = {
|
struct usbd_endpoint winusb_out_ep = {
|
||||||
.ep_addr = WINUSB_OUT_EP,
|
.ep_addr = WINUSB_OUT_EP,
|
||||||
.ep_cb = usbd_winusb_out
|
.ep_cb = usbd_winusb_out
|
||||||
@@ -218,16 +216,15 @@ struct usbd_endpoint winusb_in_ep = {
|
|||||||
.ep_cb = usbd_winusb_in
|
.ep_cb = usbd_winusb_in
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct usbd_interface intf0;
|
||||||
|
|
||||||
void daplink_winusb_init(void)
|
void daplink_winusb_init(void)
|
||||||
{
|
{
|
||||||
usbd_desc_register(winusb_descriptor);
|
usbd_desc_register(winusb_descriptor);
|
||||||
usbd_msosv1_desc_register(&msosv1_desc);
|
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_out_ep);
|
||||||
usbd_add_endpoint(&winusb_in_ep);
|
usbd_add_endpoint(&winusb_in_ep);
|
||||||
|
|
||||||
usbd_initialize();
|
usbd_initialize();
|
||||||
|
|
||||||
/* setup first out ep read transfer */
|
|
||||||
usbd_ep_start_read(WINUSB_OUT_EP, read_buffer, 2048);
|
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
设备协议栈主要负责枚举和驱动加载,枚举这边就不说了,驱动加载,也就是接口驱动加载,主要是依靠 `usbd_add_interface` 函数,记录传入的接口驱动保存到链表中,当主机进行类请求时就可以查找链表进行访问了。
|
设备协议栈主要负责枚举和驱动加载,枚举这边就不说了,驱动加载,也就是接口驱动加载,主要是依靠 `usbd_add_interface` 函数,记录传入的接口驱动保存到链表中,当主机进行类请求时就可以查找链表进行访问了。
|
||||||
在调用 `usbd_desc_register` 以后需要进行接口注册和端点注册,口诀如下:
|
在调用 `usbd_desc_register` 以后需要进行接口注册和端点注册,口诀如下:
|
||||||
|
|
||||||
- 有多少个接口就调用多少次 `usbd_add_interface`,参数填相关 `xxx_alloc_intf`, 如果没有支持的,手动创建一个填入
|
- 有多少个接口就调用多少次 `usbd_add_interface`,参数填相关 `xxx_init_intf`, 如果没有支持的,手动创建一个填入
|
||||||
- 有多少个端点就调用多少次 `usbd_add_endpoint`,当中断完成时,会调用到注册的端点回调中。
|
- 有多少个端点就调用多少次 `usbd_add_endpoint`,当中断完成时,会调用到注册的端点回调中。
|
||||||
|
|
||||||
CORE
|
CORE
|
||||||
@@ -109,7 +109,7 @@ usbd_add_interface
|
|||||||
|
|
||||||
void usbd_add_interface(struct usbd_interface *intf);
|
void usbd_add_interface(struct usbd_interface *intf);
|
||||||
|
|
||||||
- **intf** 接口驱动句柄,通常从不同 class 的 `xxx_alloc_intf` 函数获取
|
- **intf** 接口驱动句柄,通常从不同 class 的 `xxx_init_intf` 函数获取
|
||||||
|
|
||||||
usbd_add_endpoint
|
usbd_add_endpoint
|
||||||
""""""""""""""""""""""""""""""""""""
|
""""""""""""""""""""""""""""""""""""
|
||||||
@@ -156,17 +156,17 @@ usbd_initialize
|
|||||||
CDC ACM
|
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_acm_class_request_handler`` 用来处理 USB CDC ACM 类 Setup 请求。
|
||||||
- ``cdc_notify_handler`` 用来处理 USB CDC 其他中断回调函数。
|
- ``cdc_notify_handler`` 用来处理 USB CDC 其他中断回调函数。
|
||||||
|
|
||||||
.. code-block:: C
|
.. 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** 接口句柄
|
- **return** 接口句柄
|
||||||
|
|
||||||
@@ -236,10 +236,10 @@ CDC_ACM_DESCRIPTOR_INIT
|
|||||||
HID
|
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_class_request_handler`` 用来处理 USB HID 类的 Setup 请求。
|
||||||
- ``hid_custom_request_handler`` 用来处理 USB HID 获取报告描述符请求。
|
- ``hid_custom_request_handler`` 用来处理 USB HID 获取报告描述符请求。
|
||||||
@@ -247,7 +247,7 @@ usbd_hid_alloc_intf
|
|||||||
|
|
||||||
.. code-block:: C
|
.. 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** 报告描述符
|
||||||
- **desc_len** 报告描述符长度
|
- **desc_len** 报告描述符长度
|
||||||
@@ -255,9 +255,9 @@ usbd_hid_alloc_intf
|
|||||||
MSC
|
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_class_request_handler`` 用于处理 USB MSC Setup 中断请求。
|
||||||
- ``msc_storage_notify_handler`` 用于实现 USB MSC 其他中断回调函数。
|
- ``msc_storage_notify_handler`` 用于实现 USB MSC 其他中断回调函数。
|
||||||
@@ -267,7 +267,7 @@ usbd_msc_alloc_intf
|
|||||||
|
|
||||||
.. code-block:: C
|
.. 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 端点地址
|
- **out_ep** out 端点地址
|
||||||
- **in_ep** in 端点地址
|
- **in_ep** in 端点地址
|
||||||
@@ -315,16 +315,16 @@ usbd_msc_sector_write
|
|||||||
UAC
|
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_class_request_handler`` 用于处理 USB Audio Setup 中断请求。
|
||||||
- ``audio_notify_handler`` 用于实现 USB Audio 其他中断回调函数。
|
- ``audio_notify_handler`` 用于实现 USB Audio 其他中断回调函数。
|
||||||
|
|
||||||
.. code-block:: C
|
.. code-block:: C
|
||||||
|
|
||||||
struct usbd_interface *usbd_audio_alloc_intf(void);
|
struct usbd_interface *usbd_audio_init_intf(struct usbd_interface *intf);
|
||||||
|
|
||||||
- **class** 类的句柄
|
- **class** 类的句柄
|
||||||
- **intf** 接口句柄
|
- **intf** 接口句柄
|
||||||
@@ -425,16 +425,17 @@ usbd_audio_set_pitch
|
|||||||
UVC
|
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_class_request_handler`` 用于处理 USB Video Setup 中断请求。
|
||||||
- ``video_notify_handler`` 用于实现 USB Video 其他中断回调函数。
|
- ``video_notify_handler`` 用于实现 USB Video 其他中断回调函数。
|
||||||
|
|
||||||
.. code-block:: C
|
.. 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 dwMaxVideoFrameSize,
|
||||||
uint32_t dwMaxPayloadTransferSize);
|
uint32_t dwMaxPayloadTransferSize);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user