4#include "ch32_usb_endpoint.hpp"
5#include "libxr_def.hpp"
6#include "libxr_type.hpp"
7#include "usb/core/ep_pool.hpp"
8#include "usb/device/dev_core.hpp"
23 const std::initializer_list<const USB::DescriptorStrings::LanguagePack*> LANG_LIST,
24 const std::initializer_list<
const std::initializer_list<USB::ConfigDescriptorItem*>>
26 USB::Speed
speed = USB::Speed::FULL, USB::USBSpec spec = USB::USBSpec::USB_2_1)
28 USB::
DeviceCore(*this, spec,
speed, packet_size, vid, pid, bcd, LANG_LIST,
40#if defined(RCC_APB1Periph_USB)
45class CH32USBDeviceFS :
public USB::EndpointPool,
public USB::DeviceCore
58 EPConfig(
LibXR::RawData buffer,
bool is_in) : buffer(buffer), is_in(is_in ? 1 : 0) {}
65 const std::initializer_list<EPConfig> EP_CFGS,
66 USB::DeviceDescriptor::PacketSize0 packet_size, uint16_t vid, uint16_t pid,
68 const std::initializer_list<const USB::DescriptorStrings::LanguagePack*> LANG_LIST,
69 const std::initializer_list<
const std::initializer_list<USB::ConfigDescriptorItem*>>
71 ConstRawData uid = {
nullptr, 0});
73 ErrorCode SetAddress(uint8_t address, USB::DeviceCore::Context context)
override;
75 void Start(
bool in_isr)
override;
76 void Stop(
bool in_isr)
override;
78 static inline CH32USBDeviceFS* self_ =
nullptr;
88class CH32USBOtgFS :
public USB::EndpointPool,
public USB::DeviceCore
100 EPConfig(
LibXR::RawData buffer,
bool is_in) : buffer(buffer), is_in(is_in ? 1 : 0) {}
107 const std::initializer_list<EPConfig> EP_CFGS,
108 USB::DeviceDescriptor::PacketSize0 packet_size, uint16_t vid, uint16_t pid,
110 const std::initializer_list<const USB::DescriptorStrings::LanguagePack*> LANG_LIST,
111 const std::initializer_list<
const std::initializer_list<USB::ConfigDescriptorItem*>>
113 ConstRawData uid = {
nullptr, 0});
115 ErrorCode SetAddress(uint8_t address, USB::DeviceCore::Context context)
override;
117 void Start(
bool in_isr)
override;
118 void Stop(
bool in_isr)
override;
120 static inline CH32USBOtgFS* self_ =
nullptr;
130class CH32USBOtgHS :
public USB::EndpointPool,
public USB::DeviceCore
143 EPConfig(RawData buffer)
144 : buffer_tx(buffer), buffer_rx(buffer), double_buffer(false), is_in(false)
148 EPConfig(RawData buffer,
bool is_in)
149 : buffer_tx(buffer), buffer_rx(buffer), double_buffer(true), is_in(is_in)
153 EPConfig(RawData buffer_tx, RawData buffer_rx)
154 : buffer_tx(buffer_tx), buffer_rx(buffer_rx), double_buffer(false), is_in(false)
163 const std::initializer_list<EPConfig> EP_CFGS, uint16_t vid, uint16_t pid,
165 const std::initializer_list<const USB::DescriptorStrings::LanguagePack*> LANG_LIST,
166 const std::initializer_list<
const std::initializer_list<USB::ConfigDescriptorItem*>>
168 ConstRawData uid = {
nullptr, 0});
170 ErrorCode SetAddress(uint8_t address, USB::DeviceCore::Context context)
override;
172 void Start(
bool in_isr)
override;
173 void Stop(
bool in_isr)
override;
175 static inline CH32USBOtgHS* self_ =
nullptr;
CH32USBDevice(ch32_usb_dev_id_t id, size_t max_ep_num, USB::DeviceDescriptor::PacketSize0 packet_size, uint16_t vid, uint16_t pid, uint16_t bcd, const std::initializer_list< const USB::DescriptorStrings::LanguagePack * > LANG_LIST, const std::initializer_list< const std::initializer_list< USB::ConfigDescriptorItem * > > CONFIGS, USB::Speed speed=USB::Speed::FULL, USB::USBSpec spec=USB::USBSpec::USB_2_1)
构造 CH32 USB 设备核心对象 / Construct CH32 USB device core
void Init(bool in_isr) override
初始化 / Initialize
void Deinit(bool in_isr) override
反初始化 / Deinitialize
原始数据封装类。 A class for encapsulating raw data.
USB 设备协议栈核心:EP0 控制传输、描述符、配置、标准/类/厂商请求 USB device core: EP0 control transfer, descriptors,...
virtual void Deinit(bool in_isr)
反初始化 / Deinitialize
virtual void Init(bool in_isr)
初始化 / Initialize
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
PacketSize0
控制端点0最大包长度枚举 Packet size for endpoint 0 (bMaxPacketSize0)
USB端点池类 / USB endpoint pool class.
EndpointPool(size_t endpoint_num)
构造函数 / Constructor
ch32_usb_dev_id_t
CH32 USB 控制器编号 / CH32 USB controller identifiers.