10#include "lockfree_list.hpp"
11#include "lockfree_pool.hpp"
17constexpr uint8_t CFG_BUS_POWERED = 0x80;
18constexpr uint8_t CFG_SELF_POWERED = 0x40;
19constexpr uint8_t CFG_REMOTE_WAKEUP = 0x20;
21class ConfigDescriptor;
123 return ErrorCode::NOT_SUPPORT;
139 return ErrorCode::OK;
141 return ErrorCode::NOT_SUPPORT;
156 return ErrorCode::NOT_SUPPORT;
221 static bool IsCompositeConfig(
222 const std::initializer_list<
const std::initializer_list<ConfigDescriptorItem*>>&
238 const std::initializer_list<
const std::initializer_list<ConfigDescriptorItem*>>&
240 uint8_t bmAttributes = CFG_BUS_POWERED, uint8_t bMaxPower = 50);
242 ErrorCode SwitchConfig(
size_t index);
原始数据封装类。 A class for encapsulating raw data.
USB 配置描述符生成器 USB configuration descriptor generator.
bool IsComposite() const
判断是否为复合设备(composite device) Check if this is a composite device
RawData GetData() const
获取拼接好的配置描述符数据 Get the generated configuration descriptor data
uint8_t i_configuration_
配置字符串索引 / String descriptor index
uint8_t bm_attributes_
配置属性 / bmAttributes
uint16_t GetDeviceStatus() const
获取当前设备状态 / Get the current device status
void AssignEndpoints()
分配端点并分配总缓冲区 Assign endpoints and allocate the total config descriptor buffer
ErrorCode OverrideDeviceDescriptor(DeviceDescriptor &descriptor)
覆盖设备描述符(非IAD时可用) Override the device descriptor (can be used when not using IAD)
uint8_t current_cfg_
配置值 / Configuration value
size_t GetConfigNum() const
获取配置项数量 / Get the number of configuration items
bool ep_assigned_
端点是否已分配 / Is endpoint assigned
const bool COMPOSITE
是否为复合设备 / Is composite device
size_t buffer_index_
数据写入索引 / Write index (for internal use)
void ReleaseEndpoints()
释放所有功能项占用的端点资源 Release all endpoints/resources allocated by function blocks
EndpointPool & endpoint_pool_
端点资源池 / Endpoint pool
uint8_t b_max_power_
最大电流(2mA 单位)/ Max power (2mA unit)
const size_t CFG_NUM
当前功能项数 / Current item count
ErrorCode Generate()
生成完整的配置描述符(自动拼接 header 和所有功能项数据) Generate and assemble the full configuration descriptor (header + al...
ConfigDescriptor(EndpointPool &endpoint_pool, const std::initializer_list< const std::initializer_list< ConfigDescriptorItem * > > &configs, uint8_t bmAttributes=CFG_BUS_POWERED, uint8_t bMaxPower=50)
构造函数,初始化配置项存储和属性 Constructor: setup item list and descriptor attributes
Config * items_
功能项数组 / Item array
RawData buffer_
拼接后的描述符缓冲区 / Assembled descriptor buffer
size_t GetCurrentConfig() const
获取当前配置值 / Get the current configuration value
ConfigDescriptorItem * GetItemByInterfaceNum(size_t index) const
获取指定接口的配置项 / Get the configuration item by interface number
USB 配置项接口类 USB configuration item base class.
virtual void Deinit(EndpointPool &endpoint_pool)=0
USB配置描述符反初始化,派生类在此处释放端点
RawData GetData()
获取本配置项描述符的二进制数据 Get the binary data of this configuration item
virtual bool HasIAD()=0
判断是否包含IAD Check if this configuration item contains IAD
virtual ErrorCode WriteDeviceDescriptor(DeviceDescriptor &header)
写入/补全设备描述符(非IAD情况下会被调用) Write device descriptor (non-IAD case will be called)
virtual size_t GetInterfaceNum()=0
获取该配置项包含的接口数 Get the number of interfaces included in this configuration item
virtual ErrorCode GetAltSetting(uint8_t itf, uint8_t &alt)
获取接口的备用设置 Get the alternate setting of an interface
void SetData(RawData data)
设置配置项数据 Set configuration item data
virtual void Init(EndpointPool &endpoint_pool, uint8_t start_itf_num)=0
USB配置描述符初始化,派生类在此处申请端点
virtual ErrorCode SetAltSetting(uint8_t itf, uint8_t alt)
设置接口的备用设置 Set the alternate setting of an interface
virtual size_t GetMaxConfigSize()=0
获取该配置项的最大描述符长度 Get the maximum descriptor length of this configuration item
USB描述符基类 USB descriptor base class.
USB端点池类 / USB endpoint pool class.
端点描述符结构体 Endpoint descriptor structure (USB 2.0 Spec 9.6.6)
uint8_t bmAttributes
属性位 / Attributes (transfer type, sync, usage)
uint8_t bDescriptorType
描述符类型(0x05)/ Descriptor type (endpoint, 0x05)
uint8_t bLength
结构体长度 / Descriptor length (always 7)
uint16_t wMaxPacketSize
最大包长 / Max packet size
uint8_t bEndpointAddress
端点地址 / Endpoint address (IN/OUT & index)
uint8_t bInterval
轮询间隔 / Polling interval (ms/frames, per endpoint type)
接口关联描述符(IAD,Interface Association Descriptor) IAD descriptor structure (用于复合设备多接口归组 / used for groupi...
uint8_t bInterfaceCount
包含接口数 / Number of interfaces in this function
uint8_t bDescriptorType
描述符类型(0x0B)/ Descriptor type (IAD, 0x0B)
uint8_t bFirstInterface
第一个接口号 / First interface number
uint8_t iFunction
字符串描述符索引 / String descriptor index
uint8_t bLength
结构体长度 / Descriptor length (always 8)
uint8_t bFunctionClass
功能类代码 / Function class
uint8_t bFunctionSubClass
功能子类代码 / Function subclass
uint8_t bFunctionProtocol
功能协议代码 / Function protocol
接口描述符结构体 Interface descriptor structure (USB 2.0 Spec 9.6.5)
uint8_t bInterfaceProtocol
协议代码 / Protocol code
uint8_t bDescriptorType
描述符类型(0x04)/ Descriptor type (interface, 0x04)
uint8_t iInterface
字符串描述符索引 / String descriptor index
uint8_t bLength
结构体长度 / Descriptor length (always 9)
uint8_t bNumEndpoints
端点数量 / Number of endpoints (excluding endpoint 0)
uint8_t bAlternateSetting
备用设置号 / Alternate setting number
uint8_t bInterfaceClass
接口类 / Interface class code
uint8_t bInterfaceSubClass
接口子类 / Interface subclass code
uint8_t bInterfaceNumber
接口号 / Interface number