libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
ch32_usb_dev.hpp
1#pragma once
2
3#include "ch32_usb.hpp"
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"
9
10namespace LibXR
11{
12
14{
15 public:
17 ch32_usb_dev_id_t id, size_t max_ep_num,
18 USB::DeviceDescriptor::PacketSize0 packet_size, uint16_t vid, uint16_t pid,
19 uint16_t bcd,
20 const std::initializer_list<const USB::DescriptorStrings::LanguagePack*> LANG_LIST,
21 const std::initializer_list<const std::initializer_list<USB::ConfigDescriptorItem*>>
22 CONFIGS,
23 USB::Speed speed = USB::Speed::FULL, USB::USBSpec spec = USB::USBSpec::USB_2_0)
24 : USB::EndpointPool(max_ep_num),
25 USB::DeviceCore(*this, spec, speed, packet_size, vid, pid, bcd, LANG_LIST,
26 CONFIGS),
27 id_(id)
28 {
29 }
30
31 void Init() override { USB::DeviceCore::Init(); }
32 void Deinit() override { USB::DeviceCore::Deinit(); }
33
34 uint8_t id_;
35};
36
37#if defined(USBFSD)
38
39class CH32USBDeviceFS : public USB::EndpointPool, public USB::DeviceCore
40{
41 public:
42 struct EPConfig
43 {
44 LibXR::RawData buffer;
45 int8_t is_in;
46
47 EPConfig(LibXR::RawData buffer) : buffer(buffer), is_in(-1) {}
48
49 // isochronous endpoint
50 EPConfig(LibXR::RawData buffer, bool is_in) : buffer(buffer), is_in(is_in ? 1 : 0) {}
51 };
52
53 CH32USBDeviceFS(
54 const std::initializer_list<EPConfig> EP_CFGS,
55 USB::DeviceDescriptor::PacketSize0 packet_size, uint16_t vid, uint16_t pid,
56 uint16_t bcd,
57 const std::initializer_list<const USB::DescriptorStrings::LanguagePack*> LANG_LIST,
58 const std::initializer_list<const std::initializer_list<USB::ConfigDescriptorItem*>>
59 CONFIGS,
60 ConstRawData uid = {nullptr, 0});
61
62 ErrorCode SetAddress(uint8_t address, USB::DeviceCore::Context context) override;
63
64 void Start() override;
65
66 void Stop() override;
67
68 static inline CH32USBDeviceFS* self_ = nullptr;
69};
70
71#endif
72
73#if defined(USBHSD)
74
75class CH32USBDeviceHS : public USB::EndpointPool, public USB::DeviceCore
76{
77 public:
78 struct EPConfig
79 {
80 RawData buffer_tx;
81 RawData buffer_rx;
82 bool double_buffer;
83 bool is_in;
84
85 EPConfig(RawData buffer)
86 : buffer_tx(buffer), buffer_rx(buffer), double_buffer(false), is_in(false)
87 {
88 }
89
90 EPConfig(RawData buffer, bool is_in)
91 : buffer_tx(buffer), buffer_rx(buffer), double_buffer(true), is_in(is_in)
92 {
93 }
94
95 EPConfig(RawData buffer_tx, RawData buffer_rx)
96 : buffer_tx(buffer_tx), buffer_rx(buffer_rx), double_buffer(false), is_in(false)
97 {
98 }
99 };
100
101 CH32USBDeviceHS(
102 const std::initializer_list<EPConfig> EP_CFGS, uint16_t vid, uint16_t pid,
103 uint16_t bcd,
104 const std::initializer_list<const USB::DescriptorStrings::LanguagePack*> LANG_LIST,
105 const std::initializer_list<const std::initializer_list<USB::ConfigDescriptorItem*>>
106 CONFIGS,
107 ConstRawData uid = {nullptr, 0});
108
109 ErrorCode SetAddress(uint8_t address, USB::DeviceCore::Context context) override;
110
111 void Start() override;
112
113 void Stop() override;
114
115 static inline CH32USBDeviceHS* self_ = nullptr;
116};
117#endif
118
119} // namespace LibXR
void Init() override
初始化 USB 设备 / Initialize USB device
void Deinit() override
反初始化 USB 设备 / Deinitialize USB device
原始数据封装类。 A class for encapsulating raw data.
USB 设备协议栈核心类,负责端点 0 控制传输及配置、描述符、标准请求处理等。 USB device protocol stack core class. Handles EP0 control tr...
Definition dev_core.hpp:136
virtual void Deinit()
反初始化 USB 设备 / Deinitialize USB device
Definition dev_core.cpp:111
Speed speed
当前速度 / Current speed
Definition dev_core.hpp:383
virtual void Init()
初始化 USB 设备 / Initialize USB device
Definition dev_core.cpp:95
PacketSize0
控制端点0最大包长度枚举 Packet size for endpoint 0 (bMaxPacketSize0)
Definition desc_dev.hpp:72
USB端点池类 / USB endpoint pool class.
Definition ep_pool.hpp:23
LibXR 命名空间