6#include "libxr_mem.hpp"
8using namespace LibXR::USB;
14static size_t calc_max_config_size(
15 const std::initializer_list<
const std::initializer_list<ConfigDescriptorItem*>>&
20 size_t max_config_size = 0;
22 for (
const auto& cfg_group : configs)
24 size_t config_size =
sizeof(Header);
25 for (
auto* item : cfg_group)
29 config_size += item->GetMaxConfigSize();
33 if (config_size > max_config_size)
35 max_config_size = config_size;
39 return max_config_size;
48 : bm_attributes_(bmAttributes), b_max_power_(bMaxPower)
50 ASSERT(buffer_size > 0);
56 const std::initializer_list<
const std::initializer_list<ConfigDescriptorItem*>>&
59 return calc_max_config_size(configs);
64 uint8_t i_configuration)
66 if (items ==
nullptr || item_num == 0)
71 uint8_t* buffer =
reinterpret_cast<uint8_t*
>(
buffer_.
addr_);
84 size_t offset =
sizeof(
Header);
85 uint8_t total_interfaces = 0;
87 for (
size_t i = 0; i < item_num; ++i)
89 auto* item = items[i];
100 total_interfaces =
static_cast<uint8_t
>(total_interfaces + item->GetInterfaceCount());
103 ASSERT(offset <= 0xFFFF);
static void FastCopy(void *dst, const void *src, size_t size)
快速内存拷贝 / Fast memory copy
原始数据封装类。 A class for encapsulating raw data.
size_t size_
数据大小(字节)。 The size of the data (in bytes).
void * addr_
数据存储地址。 The storage address of the data.
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)
RawData GetData()
获取内部数据缓存 / Get internal data cache
RawData data_
内部数据缓存 / Internal data cache
@ OK
操作成功 | Operation successful
@ ARG_ERR
参数错误 | Argument error