5#include <initializer_list>
7#include "device_class.hpp"
8#include "device_composition.hpp"
9#include "libxr_type.hpp"
10#include "usb/core/core.hpp"
11#include "usb/core/ep_pool.hpp"
60 const std::initializer_list<const DescriptorStrings::LanguagePack*>& lang_list,
61 const std::initializer_list<
const std::initializer_list<ConfigDescriptorItem*>>&
70 virtual void Init(
bool in_isr);
77 virtual void Deinit(
bool in_isr);
84 virtual void Start(
bool in_isr) = 0;
91 virtual void Stop(
bool in_isr) = 0;
131 [[nodiscard]] Speed
GetSpeed()
const;
134 static void OnEP0OutCompleteStatic(
bool in_isr,
DeviceCore* self,
136 static void OnEP0InCompleteStatic(
bool in_isr,
DeviceCore* self,
139 static bool IsValidUSBCombination(USBSpec spec, Speed
speed,
147 void ResetControlTransferState();
150 size_t request_size = 0,
bool early_read_zlp =
false);
152 void ArmStatusOutIfNeeded();
155 RequestDirection direction, Recipient recipient);
161 ErrorCode PrepareAddressChange(uint16_t address);
162 ErrorCode SwitchConfiguration(uint16_t value,
bool in_isr);
165 void StallControlEndpoint();
166 void ClearControlEndpointStall();
167 void ResetClassRequestState();
170 RequestDirection direction, Recipient recipient);
173 RequestDirection direction, Recipient recipient);
通用回调包装,支持动态参数传递 / Generic callback wrapper supporting dynamic argument passing
常量原始数据封装类。 A class for encapsulating constant raw data.
原始数据封装类。 A class for encapsulating raw data.
USB 设备类接口基类 / USB device class interface base.
USB 组合管理器:class 列表、字符串、BOS、配置切换 USB composition manager: class list, strings, BOS,...
USB 设备协议栈核心:EP0 控制传输、描述符、配置、标准/类/厂商请求 USB device core: EP0 control transfer, descriptors,...
virtual void Deinit(bool in_isr)
反初始化 / Deinitialize
virtual void EnableRemoteWakeup()
启用远程唤醒 / Enable remote wakeup
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_BEFORE_STATUS
Setup handled, before STATUS IN ZLP is armed.
@ STATUS_IN_ARMED
STATUS IN ZLP armed, but not yet completed.
@ STATUS_IN_COMPLETE
IN status stage completed.
@ 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
DeviceComposition composition_
USB 组合管理器 / USB composition manager.
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
uint8_t b_request
当前请求码 / Current request code
bool status_out_armed
STATUS OUT 已经预先挂起 / STATUS OUT already armed.
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.
bool class_in_data_status_pending
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.
USB 标准请求 SETUP 包(固定8字节) Standard USB setup packet (8 bytes)