USB Composite
- group USB_Composite
USB composite device consists of multiple configurations, and each configuration consists of multiple interfaces. This module provides fundamental components for implementing USB composite devices, which include multiple USB classes such as USB audio and HID.
How to Initialize the USB Device and Configuration
- Example
T_USB_DEVICE_DESC demo_usb_dev_desc = { ...init... }; T_USB_CONFIG_DESC demo_usb_cfg_desc = { ...init... }; usb_composite_dev_init(&demo_usb_dev_desc); usb_composite_dev_cfg_add(&demo_usb_cfg_desc); //if string index of demo_usb_dev_desc/demo_usb_cfg_desc is not zero usb_composite_dev_string_add(language, string index, string);
How to Implement USB Interfaces
The core interface information is defined in T_USB_INTERFACE. It is mainly used to initialize T_USB_INTERFACE to implement an interface.
- Example
#include "usb_spec20.h" T_USB_INTERFACE_DESC std_if_desc_hs = { ...init... }; (Class interface descriptor type) class_if_desc_hs = { ...init... }; T_USB_ENDPOINT_DESC std_endpoint_desc_hs = { ...init... }; (Class endpoint descriptor type) class_endpoint_desc_hs = { ...init... }; T_USB_INTERFACE_DESC std_if_desc_fs = { ...init... }; (Class interface descriptor type) class_if_desc_fs = { ...init... }; T_USB_ENDPOINT_DESC std_endpoint_desc_fs = { ...init... }; (Class endpoint descriptor type) class_endpoint_desc_fs = { ...init... }; T_USB_DESC_HDR* demo_if_descs_hs[] = { (T_USB_DESC_HDR*)&std_if_desc_hs, (T_USB_DESC_HDR*)&class_if_desc_hs, (T_USB_DESC_HDR*)&std_endpoint_desc_hs, (T_USB_DESC_HDR*)&class_endpoint_desc_hs, NULL, }; T_USB_DESC_HDR* demo_if_descs_fs[] = { (T_USB_DESC_HDR*)&std_if_desc_fs, (T_USB_DESC_HDR*)&class_if_desc_fs, (T_USB_DESC_HDR*)&std_endpoint_desc_fs, (T_USB_DESC_HDR*)&class_endpoint_desc_fs, NULL, }; int demo_if_ctrl_request_proc(T_USB_INTERFACE *interface, T_USB_DEVICE_REQUEST *ctrl_request, T_HAL_USB_REQUEST_BLOCK *ctrl_urb) { //Process class-specific control requests } int demo_if_alt_get(T_USB_INTERFACE *interface, T_HAL_USB_REQUEST_BLOCK *ctrl_urb) { //Process GET_ALT request } int demo_if_alt_set(T_USB_INTERFACE *interface, T_HAL_USB_REQUEST_BLOCK *ctrl_urb, uint8_t alt) { //Process SET_ALT request } int demo_if_create(T_USB_INTERFACE *interface) { //Initialize interface-related resources, such as endpoints } int demo_if_release(T_USB_INTERFACE *interface) { //Deinit interface-related resources initialized in \ref demo_if_create } int demo_if_suspend(T_USB_INTERFACE *interface) { //Process USB suspend } int demo_if_resume(T_USB_INTERFACE *interface) { //Process USB resume } T_USB_INTERFACE usb_if = { .if_num = 0, .descs_fs = demo_if_descs_fs, .descs_hs = demo_if_descs_hs, .ctrl_request_proc = demo_if_ctrl_request_proc, .alt_get = demo_if_alt_get, .alt_set = demo_if_alt_set, .suspend = demo_if_suspend, .resume = demo_if_resume, .create = demo_if_create, .release = demo_if_release, }; usb_composite_dev_interface_add(&usb_if, cfg val);
Definitions
Typedefs
Functions