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);
143 [[nodiscard]]
const ConfigItems& CurrentConfigItems()
const;
148 void BindEndpoints(
bool in_isr);
153 void UnbindEndpoints(
bool in_isr);
159 void RebuildBosCache();
165 void RegisterInterfaceStrings();
175 bool ep_assigned_ =
false;
178 uint8_t current_cfg_ = 0;
179 uint8_t i_configuration_ = 0;
180 uint8_t bm_attributes_ = CFG_BUS_POWERED;
182 const bool composite_ =
false;
183 const size_t config_num_ = 0;
184 ConfigItems* items_ =
nullptr;
186 size_t class_count_ = 0;
189 const char** interface_strings_ =
191 size_t interface_string_count_ =
193 RawData interface_string_buffer_{
只读原始数据视图 / Immutable raw data view
可写原始数据视图 / Mutable raw data view
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,...
void Deinit(bool in_isr)
释放当前 configuration 的运行态资源 Release runtime resources for the active configuration.
ErrorCode TryOverrideDeviceDescriptor(DeviceDescriptor &descriptor)
用当前配置覆盖 device descriptor 的类字段 Try to override device-descriptor class fields from the current config...
RawData GetConfigDescriptor() const
获取当前 configuration 描述符缓存 Get the current configuration descriptor cache.
ErrorCode SwitchConfig(size_t index, bool in_isr)
切换到指定 configuration value Switch to the given configuration value.
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.
size_t GetConfigNum() const
配置数量 / Number of configurations
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 GetCurrentConfig() const
当前 configuration value / Current configuration value
ErrorCode BuildConfigDescriptor()
生成当前 configuration 描述符缓存 Build the current configuration descriptor cache.
USB描述符基类 USB descriptor base class.
USB端点池类 / USB endpoint pool class.
ErrorCode
定义错误码枚举 / Defines an enumeration for error codes
Vendor 请求处理结果(EP0 控制传输) Vendor request handling result for EP0 control transfers.
USB 标准请求 SETUP 包(固定8字节) Standard USB setup packet (8 bytes)