4#include "usb/core/core.hpp"
5#include "usb/core/desc_cfg.hpp"
6#include "usb/core/ep_pool.hpp"
54 return ErrorCode::NOT_SUPPORT;
67 virtual ErrorCode
OnClassRequest(
bool in_isr, uint8_t bRequest, uint16_t wValue,
75 return ErrorCode::NOT_SUPPORT;
91 return ErrorCode::NOT_SUPPORT;
139 const std::initializer_list<const DescriptorStrings::LanguagePack *> &lang_list,
140 const std::initializer_list<
const std::initializer_list<ConfigDescriptorItem *>>
227 size_t request_size = 0);
242 RequestDirection direction, Recipient recipient);
293 RequestDirection direction, Recipient recipient);
299 RequestDirection direction, Recipient recipient);
提供一个通用的回调包装,支持动态参数传递。 Provides a generic callback wrapper, supporting dynamic argument passing.
常量原始数据封装类。 A class for encapsulating constant raw data.
原始数据封装类。 A class for encapsulating raw data.
USB 配置描述符生成器 USB configuration descriptor generator.
USB 配置项接口类 USB configuration item base class.
字符串描述符管理器 / USB string descriptor manager
USB 设备类接口基类,所有自定义 USB 类(如 HID、CDC、MSC)都需派生自本类。 USB device class base interface, all custom device cla...
virtual ErrorCode OnClassData(bool in_isr, uint8_t bRequest, LibXR::ConstRawData &data)
处理类请求的数据阶段 Handle data stage for class request
virtual ErrorCode OnGetDescriptor(bool in_isr, uint8_t bRequest, uint16_t wValue, uint16_t wLength, ConstRawData &need_write)
处理标准请求 GET_DESCRIPTOR Handle standard request GET_DESCRIPTOR
virtual ErrorCode OnClassRequest(bool in_isr, uint8_t bRequest, uint16_t wValue, uint16_t wLength, RequestResult &result)
处理类特定请求(Class-specific Request) Handle class-specific request
USB 设备协议栈核心类,负责端点 0 控制传输及配置、描述符、标准请求处理等。 USB device protocol stack core class. Handles EP0 control tr...
ErrorCode SwitchConfiguration(uint16_t value)
切换配置 / Switch USB configuration
virtual void EnableRemoteWakeup()
启用远程唤醒功能(SetFeature: DEVICE_REMOTE_WAKEUP) Enable remote wakeup (via SetFeature)
ConfigDescriptor config_desc_
配置描述符 / Config descriptor
Endpoint * out0
控制 OUT 端点指针 / Control OUT endpoint
static void OnEP0OutCompleteStatic(bool in_isr, DeviceCore *self, LibXR::ConstRawData &data)
EP0 OUT 端点传输完成回调(静态) EP0 OUT endpoint transfer complete (static)
ErrorCode PrepareAddressChange(uint16_t address)
预设地址变更 / Prepare address change
bool need_write_zlp
是否需要写 ZLP / Need to write ZLP
Endpoint * in0
控制 IN 端点指针 / Control IN endpoint
ErrorCode RespondWithStatus(const SetupPacket *setup, Recipient recipient)
返回状态响应 / Respond with status stage
Context in0
IN0 状态 / IN0 context.
ErrorCode ProcessStandardRequest(bool in_isr, const SetupPacket *&setup, RequestDirection direction, Recipient recipient)
处理标准请求 Process standard USB requests
static bool IsValidUSBCombination(USBSpec spec, Speed speed, DeviceDescriptor::PacketSize0 packet_size)
检查 USB 组合是否合法 / Check if USB combination is valid
LibXR::Callback< LibXR::ConstRawData & > ep0_out_cb
EP0 OUT 回调 / EP0 OUT callback.
EndpointPool & pool
端点池 / Endpoint pool
Context
控制传输状态枚举 / Control transfer context enum
@ SETUP
SETUP 阶段 / Setup stage.
@ STATUS_IN
状态 IN 阶段 / Status in stage
@ DATA_OUT
数据 OUT 阶段 / Data out stage
@ STATUS_OUT
状态 OUT 阶段 / Status out stage
@ DATA_IN
数据 IN 阶段 / Data in stage
@ ZLP
0 长度包 / Zero-length packet
DeviceClass * class_ptr
当前类指针 / Current device class pointer
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)
构造函数 / Constructor
virtual void Start()=0
启动 USB 设备 / Start USB device
RawData read_remain
剩余读数据 / Remaining read data
void ReadZLP(Context context=Context::ZLP)
接收 0 长度包 / Receive zero-length packet (ZLP)
bool read
是否读操作 / Read operation
ErrorCode ProcessVendorRequest(bool in_isr, const SetupPacket *&setup, RequestDirection direction, Recipient recipient)
处理厂商请求 / Process vendor-specific request
DeviceDescriptor device_desc_
设备描述符 / Device descriptor
virtual void Deinit()
反初始化 USB 设备 / Deinitialize USB device
void OnEP0InComplete(bool in_isr, LibXR::ConstRawData &data)
EP0 IN 端点传输完成回调 / EP0 IN endpoint transfer complete.
Speed GetSpeed() const
获取当前 USB 速度 / Get current USB speed
bool inited
是否初始化 / Initialized
void WriteZLP(Context context=Context::ZLP)
发送 0 长度包 / Send zero-length packet (ZLP)
void OnEP0OutComplete(bool in_isr, LibXR::ConstRawData &data)
EP0 OUT 端点传输完成回调 / EP0 OUT endpoint transfer complete.
virtual void Stop()=0
停止 USB 设备 / Stop USB device
void DevReadEP0Data(LibXR::RawData data, size_t packet_max_length)
接收主机发送的 EP0 数据包 Receive data packet from host via EP0
virtual void DisableRemoteWakeup()
禁用远程唤醒功能(ClearFeature: DEVICE_REMOTE_WAKEUP) Disable remote wakeup (via ClearFeature)
static void OnEP0InCompleteStatic(bool in_isr, DeviceCore *self, LibXR::ConstRawData &data)
EP0 IN 端点传输完成回调(静态) EP0 IN endpoint transfer complete (static)
ErrorCode ClearFeature(const SetupPacket *setup, Recipient recipient)
清除功能特性 / Clear USB feature
uint8_t pending_addr
待设置的新地址 / Pending device address
ErrorCode SendDescriptor(bool in_isr, const SetupPacket *setup, Recipient recipient)
发送描述符 / Send USB descriptor
ErrorCode ApplyFeature(const SetupPacket *setup, Recipient recipient)
启用功能特性 / Apply USB feature
Speed speed
当前速度 / Current speed
LibXR::Callback< LibXR::ConstRawData & > ep0_in_cb
EP0 IN 回调 / EP0 IN callback.
DescriptorStrings strings_
字符串描述符管理 / String descriptors
uint8_t b_request
当前请求码 / Current request code
ErrorCode ProcessClassRequest(bool in_isr, const SetupPacket *setup, RequestDirection direction, Recipient recipient)
处理类请求 / Process class-specific request
void OnSetupPacket(bool in_isr, const SetupPacket *setup)
处理主机发送的 SETUP 包 Handle USB setup packet from host
ErrorCode SendConfiguration()
发送配置响应 / Send configuration
virtual void Init()
初始化 USB 设备 / Initialize USB device
virtual bool IsRemoteWakeupEnabled() const
判断当前是否允许远程唤醒 Query if remote wakeup is enabled
void StallControlEndpoint()
设置控制端点为 STALL / Stall control endpoint
void ClearControlEndpointStall()
清除控制端点 STALL / Clear control endpoint stall
uint8_t * out0_buffer
OUT0 缓冲区 / OUT0 buffer.
bool write
是否写操作 / Write operation
virtual ErrorCode SetAddress(uint8_t address, Context state)=0
设置设备地址(必须由子类实现) Set device address (must be implemented by subclass)
ConstRawData write_remain
剩余写数据 / Remaining write data
Context out0
OUT0 状态 / OUT0 context.
void DevWriteEP0Data(LibXR::ConstRawData data, size_t packet_max_length, size_t request_size=0)
向主机发送 EP0 数据包 Send data packet to host via EP0
USB描述符基类 USB descriptor base class.
PacketSize0
控制端点0最大包长度枚举 Packet size for endpoint 0 (bMaxPacketSize0)
USB端点基类 / USB Endpoint base class.
USB端点池类 / USB endpoint pool class.
控制请求结果结构体 / Structure for control transfer results
RawData read_data
设备返回给主机的数据 / Data to read (to host)
bool write_zlp
写操作是否需要发送 0 长度包 / Send ZLP after write
ConstRawData write_data
主机写入设备的数据 / Data to write (from host)
bool read_zlp
读操作是否需要发送 0 长度包 / Send ZLP after read
USB 标准请求 SETUP 包(固定8字节) Standard USB setup packet (8 bytes)