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;
220 explicit ConfigDescriptor(
size_t buffer_size, uint8_t bmAttributes = CFG_BUS_POWERED,
221 uint8_t bMaxPower = 50);
231 const std::initializer_list<
const std::initializer_list<ConfigDescriptorItem*>>&
245 uint8_t configuration_value,
246 uint8_t i_configuration = 0);
原始数据封装类。 A class for encapsulating raw data.
BOS 能力提供者接口 / BOS capability provider interface.
配置描述符字节构造器 Configuration descriptor byte builder.
RawData GetData() const
获取配置描述符数据 / Get configuration descriptor data
uint8_t bm_attributes_
配置属性 / bmAttributes
ErrorCode BuildConfigDescriptor(ConfigDescriptorItem *const *items, size_t item_num, uint8_t configuration_value, uint8_t i_configuration=0)
构建指定 configuration 的描述符 Build the descriptor for the specified configuration.
static size_t CalcMaxConfigSize(const std::initializer_list< const std::initializer_list< ConfigDescriptorItem * > > &configs)
计算所有 configuration 中需要的最大缓冲区大小 Calculate the maximum buffer size required across all configurations.
size_t buffer_index_
当前有效字节数 / Current valid byte count
uint8_t b_max_power_
最大电流(2mA 单位)/ Max power (2mA units)
RawData buffer_
配置描述符缓冲区 / Configuration descriptor buffer
ConfigDescriptor(size_t buffer_size, uint8_t bmAttributes=CFG_BUS_POWERED, uint8_t bMaxPower=50)
构造函数 / Constructor
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.
@ NOT_SUPPORT
不支持 | Not supported
@ OK
操作成功 | Operation successful
端点描述符(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