5#include <initializer_list>
7#include "libxr_type.hpp"
8#include "usb/core/core.hpp"
9#include "usb/core/desc_cfg.hpp"
10#include "usb/core/ep_pool.hpp"
37 explicit DeviceClass(std::initializer_list<BosCapability*> bos_caps = {});
66 bool& ExpectStatusOutZLP() {
return read_zlp; }
67 bool ExpectStatusOutZLP()
const {
return read_zlp; }
69 bool& SendStatusInZLP() {
return write_zlp; }
70 bool SendStatusInZLP()
const {
return write_zlp; }
93 return ErrorCode::NOT_SUPPORT;
109 uint16_t wLength, uint16_t wIndex,
118 return ErrorCode::NOT_SUPPORT;
138 return ErrorCode::NOT_SUPPORT;
153 uint16_t wLength, uint16_t wIndex,
162 return ErrorCode::NOT_SUPPORT;
216 const std::initializer_list<const DescriptorStrings::LanguagePack*>& lang_list,
217 const std::initializer_list<
const std::initializer_list<ConfigDescriptorItem*>>&
226 virtual void Init(
bool in_isr);
233 virtual void Deinit(
bool in_isr);
240 virtual void Start(
bool in_isr) = 0;
247 virtual void Stop(
bool in_isr) = 0;
287 [[nodiscard]] Speed
GetSpeed()
const;
290 static void OnEP0OutCompleteStatic(
bool in_isr,
DeviceCore* self,
292 static void OnEP0InCompleteStatic(
bool in_isr,
DeviceCore* self,
295 static bool IsValidUSBCombination(USBSpec spec, Speed
speed,
305 size_t request_size = 0,
bool early_read_zlp =
false);
308 ErrorCode ProcessStandardRequest(
bool in_isr,
const SetupPacket*& setup,
309 RequestDirection direction, Recipient recipient);
311 ErrorCode RespondWithStatus(
const SetupPacket* setup, Recipient recipient);
312 ErrorCode ClearFeature(
const SetupPacket* setup, Recipient recipient);
313 ErrorCode ApplyFeature(
const SetupPacket* setup, Recipient recipient);
314 ErrorCode SendDescriptor(
bool in_isr,
const SetupPacket* setup, Recipient recipient);
315 ErrorCode PrepareAddressChange(uint16_t address);
316 ErrorCode SwitchConfiguration(uint16_t value,
bool in_isr);
317 ErrorCode SendConfiguration();
319 void StallControlEndpoint();
320 void ClearControlEndpointStall();
322 ErrorCode ProcessClassRequest(
bool in_isr,
const SetupPacket* setup,
323 RequestDirection direction, Recipient recipient);
325 ErrorCode ProcessVendorRequest(
bool in_isr,
const SetupPacket*& setup,
326 RequestDirection direction, Recipient recipient);
通用回调包装,支持动态参数传递 / Generic callback wrapper supporting dynamic argument passing
常量原始数据封装类。 A class for encapsulating constant raw data.
原始数据封装类。 A class for encapsulating raw data.
BOS 能力接口 / BOS capability interface.
配置描述符管理与构建器,并聚合 BOS 能力 Configuration descriptor builder with BOS aggregation.
USB 配置项基类(功能块)/ USB configuration item base (functional block)
字符串描述符管理器 / USB string descriptor manager
USB 设备类接口基类 / USB device class interface base.
virtual ErrorCode OnClassRequest(bool in_isr, uint8_t bRequest, uint16_t wValue, uint16_t wLength, uint16_t wIndex, ControlTransferResult &result)
处理 Class-specific 请求(Setup stage)/ Handle class-specific request (Setup stage)
virtual ErrorCode OnClassData(bool in_isr, uint8_t bRequest, LibXR::ConstRawData &data)
处理 Class request 数据阶段 / Handle class request data stage
virtual ErrorCode OnVendorRequest(bool in_isr, uint8_t bRequest, uint16_t wValue, uint16_t wLength, uint16_t wIndex, ControlTransferResult &result)
处理 Vendor request(Setup stage)/ Handle vendor request (Setup stage)
~DeviceClass() override
析构函数 / Destructor
size_t bos_cap_num_
BOS capability 数量 / BOS capability count.
BosCapability ** bos_caps_
BOS capability 指针表 / BOS capability pointer table.
virtual ErrorCode OnGetDescriptor(bool in_isr, uint8_t bRequest, uint16_t wValue, uint16_t wLength, ConstRawData &out_data)
处理标准请求 GET_DESCRIPTOR(类特定描述符) Handle standard GET_DESCRIPTOR request (class-specific descriptors).
DeviceClass(std::initializer_list< BosCapability * > bos_caps={})
构造:传入本类提供的 BOS capabilities(对象指针列表) Constructor: pass BOS capabilities provided by this class (pointe...
USB 设备协议栈核心:EP0 控制传输、描述符、配置、标准/类/厂商请求 USB device core: EP0 control transfer, descriptors,...
virtual void Deinit(bool in_isr)
反初始化 / Deinitialize
virtual void EnableRemoteWakeup()
启用远程唤醒 / Enable remote wakeup
ConfigDescriptor config_desc_
配置描述符管理器 / Configuration descriptor manager
Endpoint * out0
EP0 OUT 端点 / EP0 OUT endpoint.
bool need_write_zlp
是否需要发送 ZLP / Whether to send ZLP
Endpoint * in0
EP0 IN 端点 / EP0 IN endpoint.
ConstRawData data
数据阶段数据 / Data stage payload
LibXR::Callback< LibXR::ConstRawData & > ep0_in_cb
EP0 IN 回调 / EP0 IN callback.
virtual void Stop(bool in_isr)=0
停止设备(由子类实现)/ Stop device (implemented by derived class)
EndpointPool & pool
端点池引用 / Endpoint pool reference
Context
控制传输上下文 / Control transfer context
@ SETUP
Setup stage / Setup stage.
@ STATUS_IN
IN status stage / IN status stage.
@ DATA_OUT
OUT data stage / OUT data stage.
@ STATUS_OUT
OUT status stage / OUT status stage.
@ DATA_IN
IN data stage / IN data stage.
@ ZLP
ZLP stage marker / ZLP stage marker.
DeviceClass * class_ptr
当前处理类 / Current class handler
virtual void Init(bool in_isr)
初始化 / Initialize
RawData read_remain
OUT 剩余待接收 / Remaining OUT buffer.
bool read
是否存在 OUT 数据阶段 / Whether OUT data stage exists
DeviceDescriptor device_desc_
设备描述符 / Device descriptor
Speed GetSpeed() const
获取设备速度 / Get device speed
bool inited
是否已初始化 / Whether initialized
virtual void Start(bool in_isr)=0
启动设备(由子类实现)/ Start device (implemented by derived class)
virtual void DisableRemoteWakeup()
禁用远程唤醒 / Disable remote wakeup
uint8_t pending_addr
待生效地址 / Pending address
DeviceCore(EndpointPool &ep_pool, USBSpec spec, Speed speed, DeviceDescriptor::PacketSize0 packet_size, uint16_t vid, uint16_t pid, uint16_t bcd, const std::initializer_list< const DescriptorStrings::LanguagePack * > &lang_list, const std::initializer_list< const std::initializer_list< ConfigDescriptorItem * > > &configs, ConstRawData uid={nullptr, 0})
构造函数 / Constructor
Speed speed
设备速度 / Device speed
DescriptorStrings strings_
字符串描述符管理器 / String descriptor manager
uint8_t b_request
当前请求码 / Current request code
void OnSetupPacket(bool in_isr, const SetupPacket *setup)
处理 Setup 包 / Handle Setup packet
virtual bool IsRemoteWakeupEnabled() const
远程唤醒是否启用 / Whether remote wakeup is enabled
uint8_t * out0_buffer
EP0 OUT 缓冲区 / EP0 OUT buffer.
bool write
是否存在 IN 数据阶段 / Whether IN data stage exists
virtual ErrorCode SetAddress(uint8_t address, Context state)=0
设置设备地址(由子类实现) Set device address (implemented by derived class).
ConstRawData write_remain
IN 剩余待发送 / Remaining IN payload.
LibXR::Callback< LibXR::ConstRawData & > ep0_out_cb
EP0 OUT 回调 / EP0 OUT callback.
USB描述符基类 USB descriptor base class.
PacketSize0
控制端点0最大包长度枚举 Packet size for endpoint 0 (bMaxPacketSize0)
USB 端点基类 / USB Endpoint base class.
USB端点池类 / USB endpoint pool class.
控制请求(Class/Vendor)处理结果 / Control request (Class/Vendor) handling result
bool write_zlp
发送 STATUS IN(发送 ZLP)/ Send STATUS IN (send ZLP)
USB 标准请求 SETUP 包(固定8字节) Standard USB setup packet (8 bytes)