5#include <initializer_list>
11#include "libxr_type.hpp"
19constexpr uint8_t CFG_BUS_POWERED = 0x80;
20constexpr uint8_t CFG_SELF_POWERED = 0x40;
21constexpr uint8_t CFG_REMOTE_WAKEUP = 0x20;
23class ConfigDescriptor;
126 return ErrorCode::NOT_SUPPORT;
138 return (alt == 0) ? ErrorCode::OK : ErrorCode::NOT_SUPPORT;
151 return ErrorCode::NOT_SUPPORT;
220 const std::initializer_list<
const std::initializer_list<ConfigDescriptorItem*>>&
235 const std::initializer_list<
const std::initializer_list<ConfigDescriptorItem*>>&
237 uint8_t bmAttributes = CFG_BUS_POWERED, uint8_t bMaxPower = 50);
原始数据封装类。 A class for encapsulating raw data.
BOS 能力提供者接口 / BOS capability provider interface.
BOS 管理器:能力收集、BOS 描述符拼装、Vendor 请求链式分发 BOS manager: capability collection, descriptor building,...
配置描述符管理与构建器,并聚合 BOS 能力 Configuration descriptor builder with BOS aggregation.
bool IsComposite() const
是否为复合设备 / Whether composite device
RawData GetData() const
获取配置描述符数据 / Get configuration descriptor data
ConfigDescriptorItem * FindItemByInterfaceNumber(size_t index) const
按接口号查找配置项 / Find item by interface number
uint8_t i_configuration_
配置字符串索引 / Configuration string index
uint8_t bm_attributes_
配置属性 / bmAttributes
bool CanOverrideDeviceDescriptor() const
是否允许覆盖设备描述符 / Whether device descriptor override is allowed
uint16_t GetDeviceStatus() const
设备状态(GET_STATUS)/ Device status (GET_STATUS)
ErrorCode OverrideDeviceDescriptor(DeviceDescriptor &descriptor)
覆盖设备描述符 / Override device descriptor
uint8_t current_cfg_
当前配置索引 / Current configuration index
void BindEndpoints(bool in_isr)
绑定当前配置端点 / Bind endpoints for current configuration
size_t GetConfigNum() const
配置数量 / Number of configurations
bool ep_assigned_
端点是否已绑定 / Whether endpoints are assigned
ConfigDescriptorItem * FindItemByEndpointAddress(uint8_t addr) const
按端点地址查找配置项 / Find item by endpoint address
const bool COMPOSITE
是否为复合设备 / Whether composite device
size_t buffer_index_
缓冲区写入位置 / Buffer write index
ErrorCode BuildConfigDescriptor()
构建当前配置描述符 / Build current configuration descriptor
EndpointPool & endpoint_pool_
端点池引用 / Endpoint pool reference
static bool IsCompositeConfig(const std::initializer_list< const std::initializer_list< ConfigDescriptorItem * > > &configs)
uint8_t b_max_power_
最大电流(2mA 单位)/ Max power (2mA units)
const size_t CFG_NUM
配置数量 / Configuration count
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
void RebuildBosCache()
重建 BOS 缓存 / Rebuild BOS cache
Config * items_
配置项集合 / Configuration item set
RawData buffer_
配置描述符缓冲区 / Configuration descriptor buffer
size_t GetCurrentConfig() const
当前配置索引 / Current configuration index
ErrorCode SwitchConfig(size_t index, bool in_isr)
切换当前 configuration / Switch current configuration
void UnbindEndpoints(bool in_isr)
解绑当前配置端点 / Unbind endpoints for current configuration
USB 配置项基类(功能块)/ USB configuration item base (functional block)
virtual size_t GetInterfaceCount()=0
接口数量 / Number of interfaces contributed
virtual void BindEndpoints(EndpointPool &endpoint_pool, uint8_t start_itf_num, bool in_isr)=0
绑定端点资源 / Bind endpoint resources
RawData GetData()
获取内部数据缓存 / Get internal data cache
RawData data_
内部数据缓存 / Internal data cache
virtual bool HasIAD()=0
是否包含 IAD / Whether an IAD is used
virtual ErrorCode WriteDeviceDescriptor(DeviceDescriptor &header)
可选:覆盖设备描述符字段 / Optional: override device descriptor fields
virtual void UnbindEndpoints(EndpointPool &endpoint_pool, bool in_isr)=0
解绑端点资源 / Unbind endpoint resources
virtual bool OwnsEndpoint(uint8_t ep_addr) const
可选:端点归属判定 / Optional: endpoint ownership
virtual ErrorCode GetAltSetting(uint8_t itf, uint8_t &alt)
可选:获取接口备用设置 / Optional: get interface alternate setting
void SetData(RawData data)
设置内部数据缓存 / Set internal data cache
virtual ErrorCode SetAltSetting(uint8_t itf, uint8_t alt)
可选:设置接口备用设置 / Optional: set interface alternate setting
virtual size_t GetMaxConfigSize()=0
最大配置描述符占用 / Maximum bytes required in configuration descriptor
USB描述符基类 USB descriptor base class.
USB端点池类 / USB endpoint pool class.
单个 configuration 的配置项集合 / Item set for one configuration
size_t item_num
配置项数量 / Item count
ConfigDescriptorItem ** items
配置项指针表 / Item pointer table
端点描述符(7 字节)/ Endpoint descriptor (7 bytes)
uint8_t bmAttributes
端点属性 / Endpoint attributes
uint8_t bDescriptorType
描述符类型 / Descriptor type
uint8_t bLength
描述符长度 / Descriptor length
uint16_t wMaxPacketSize
最大包长 / Maximum packet size
uint8_t bEndpointAddress
端点地址 / Endpoint address
uint8_t bInterval
轮询间隔 / Polling interval
IAD(8 字节)/ Interface Association Descriptor (8 bytes)
uint8_t bInterfaceCount
接口数量 / Interface count
uint8_t bDescriptorType
描述符类型 / Descriptor type
uint8_t bFirstInterface
首接口号 / First interface number
uint8_t iFunction
功能字符串索引 / Function string index
uint8_t bLength
描述符长度 / Descriptor length
uint8_t bFunctionClass
功能类 / Function class
uint8_t bFunctionSubClass
功能子类 / Function subclass
uint8_t bFunctionProtocol
功能协议 / Function protocol
接口描述符(9 字节)/ Interface descriptor (9 bytes)
uint8_t bInterfaceProtocol
接口协议 / Interface protocol
uint8_t bDescriptorType
描述符类型 / Descriptor type
uint8_t iInterface
接口字符串索引 / Interface string index
uint8_t bLength
描述符长度 / Descriptor length
uint8_t bNumEndpoints
端点数量 / Number of endpoints
uint8_t bAlternateSetting
备用设置号 / Alternate setting
uint8_t bInterfaceClass
接口类 / Interface class
uint8_t bInterfaceSubClass
接口子类 / Interface subclass
uint8_t bInterfaceNumber
接口号 / Interface number