5#include <initializer_list>
7#include "device_class.hpp"
8#include "libxr_type.hpp"
9#include "usb/core/bos.hpp"
10#include "usb/core/desc_cfg.hpp"
11#include "usb/core/desc_str.hpp"
12#include "usb/core/ep_pool.hpp"
42 const std::initializer_list<const DescriptorStrings::LanguagePack*>& lang_list,
43 const std::initializer_list<
const std::initializer_list<ConfigDescriptorItem*>>&
45 ConstRawData uid = {
nullptr, 0}, uint8_t bmAttributes = CFG_BUS_POWERED,
46 uint8_t bMaxPower = 50);
57 void Init(
bool in_isr);
常量原始数据封装类。 A class for encapsulating constant raw data.
原始数据封装类。 A class for encapsulating raw data.
BOS 管理器:能力收集、BOS 描述符拼装、Vendor 请求链式分发 BOS manager: capability collection, descriptor building,...
配置描述符字节构造器 Configuration descriptor byte builder.
USB 配置项基类(功能块)/ USB configuration item base (functional block)
字符串描述符管理器 / USB string descriptor manager
USB 设备类接口基类 / USB device class interface base.
USB 组合管理器:class 列表、字符串、BOS、配置切换 USB composition manager: class list, strings, BOS,...
size_t class_count_
唯一 class 数量 / Unique class count
void Deinit(bool in_isr)
释放当前 configuration 的运行态资源 Release runtime resources for the active configuration.
const ConfigItems & CurrentConfigItems() const
获取当前激活 configuration 的扁平 item 表 Get the flattened item table of the active configuration.
void RegisterInterfaceStrings()
为所有 class 分配并登记 interface string 索引 Allocate and register interface-string indices for all classes.
bool ep_assigned_
端点是否已绑定 / Whether endpoints are assigned
ConfigItems * items_
配置项集合 / Configuration item set
DeviceClass ** classes_
唯一 class 表 / Unique class table
ErrorCode TryOverrideDeviceDescriptor(DeviceDescriptor &descriptor)
用当前配置覆盖 device descriptor 的类字段 Try to override device-descriptor class fields from the current config...
uint8_t i_configuration_
配置字符串索引 / Configuration string index
const bool composite_
是否为复合设备 / Whether composite device
RawData GetConfigDescriptor() const
获取当前 configuration 描述符缓存 Get the current configuration descriptor cache.
bool configured_
是否已进入非 0 配置态 / Whether a non-zero config is active
const size_t config_num_
配置数量 / Configuration count
uint8_t bm_attributes_
配置属性 / bmAttributes
const char ** interface_strings_
接口字符串源表 / Interface string source table
EndpointPool & endpoint_pool_
端点池引用 / Endpoint pool reference
DescriptorStrings strings_
字符串描述符管理 / String descriptor manager
BosManager bos_
BOS 聚合管理 / BOS aggregation manager.
RawData interface_string_buffer_
临时字符串描述符缓冲区 / Temp interface string descriptor buffer
ErrorCode SwitchConfig(size_t index, bool in_isr)
切换到指定 configuration value Switch to the given configuration value.
void BindEndpoints(bool in_isr)
绑定当前配置的全部端点 / Bind all endpoints for the active configuration
uint8_t current_cfg_
当前配置索引 / Current configuration index
DeviceComposition(EndpointPool &endpoint_pool, const std::initializer_list< const DescriptorStrings::LanguagePack * > &lang_list, const std::initializer_list< const std::initializer_list< ConfigDescriptorItem * > > &configs, ConstRawData uid={nullptr, 0}, uint8_t bmAttributes=CFG_BUS_POWERED, uint8_t bMaxPower=50)
构造 USB 组合管理器 Construct the USB composition manager.
DeviceClass * FindClassByInterfaceNumber(size_t index) const
按接口号查找所属 class Find the owning class by interface number.
uint16_t GetDeviceStatus() const
设备 GET_STATUS 返回值 / Device-level GET_STATUS value
ErrorCode GetStringDescriptor(uint8_t string_index, uint16_t lang, ConstRawData &data)
获取字符串描述符(含 interface string) Get a string descriptor, including runtime-generated interface strings.
DeviceClass * FindClassByEndpointAddress(uint8_t addr) const
按端点地址查找所属 class Find the owning class by endpoint address.
void RebuildBosCache()
按当前配置重建 BOS capability 缓存 Rebuild the BOS capability cache from the active configuration.
size_t GetConfigNum() const
配置数量 / Number of configurations
void UnbindEndpoints(bool in_isr)
解绑当前配置的全部端点 / Unbind all endpoints for the active configuration
void Init(bool in_isr)
初始化当前 configuration 的运行态资源 Initialize runtime resources for the active configuration.
ErrorCode ProcessBosVendorRequest(bool in_isr, const SetupPacket *setup, BosVendorResult &result)
分发 BOS vendor request / Dispatch BOS vendor requests
ConstRawData GetBosDescriptor()
获取当前 BOS 描述符缓存 / Get the current BOS descriptor cache
bool IsComposite() const
是否为复合设备 / Whether this is a composite device
size_t interface_string_count_
接口字符串总数量 / Total interface string count
size_t GetCurrentConfig() const
当前 configuration value / Current configuration value
ErrorCode BuildConfigDescriptor()
生成当前 configuration 描述符缓存 Build the current configuration descriptor cache.
ConfigDescriptor config_desc_
配置描述符构造器 / Configuration descriptor builder
ErrorCode GenerateInterfaceString(uint8_t string_index, ConstRawData &data)
运行时生成 interface string 描述符 Generate one interface-string descriptor at runtime.
USB描述符基类 USB descriptor base class.
USB端点池类 / USB endpoint pool class.
Vendor 请求处理结果(EP0 控制传输) Vendor request handling result for EP0 control transfers.
单个 configuration 的扁平 item 表 Flattened item table for one configuration.
ConfigDescriptorItem ** items
配置项指针表 / Item pointer table
size_t item_num
配置项数量 / Item count
USB 标准请求 SETUP 包(固定8字节) Standard USB setup packet (8 bytes)