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
61 ErrorCode SetAddress(uint8_t address, USB::DeviceCore::Context context) override;
62
63 void Start() override;
64
65 void Stop() override;
66
67 static inline CH32USBDeviceFS* self_ = nullptr;
68};
69
70#endif
71
72#if defined(USBHSD)
73
74class CH32USBDeviceHS : public USB::EndpointPool, public USB::DeviceCore
75{
76 public:
77 struct EPConfig
78 {
79 RawData buffer_tx;
80 RawData buffer_rx;
81 bool double_buffer;
82 bool is_in;
83
84 EPConfig(RawData buffer)
85 : buffer_tx(buffer), buffer_rx(buffer), double_buffer(false), is_in(false)
86 {
87 }
88
89 EPConfig(RawData buffer, bool is_in)
90 : buffer_tx(buffer), buffer_rx(buffer), double_buffer(true), is_in(is_in)
91 {
92 }
93
94 EPConfig(RawData buffer_tx, RawData buffer_rx)
95 : buffer_tx(buffer_tx), buffer_rx(buffer_rx), double_buffer(false), is_in(false)
96 {
97 }
98 };
99
100 CH32USBDeviceHS(
101 const std::initializer_list<EPConfig> EP_CFGS, uint16_t vid, uint16_t pid,
102 uint16_t bcd,
103 const std::initializer_list<const USB::DescriptorStrings::LanguagePack*> LANG_LIST,
104 const std::initializer_list<const std::initializer_list<USB::ConfigDescriptorItem*>>
105 CONFIGS);
106
107 ErrorCode SetAddress(uint8_t address, USB::DeviceCore::Context context) override;
108
109 void Start() override;
110
111 void Stop() override;
112
113 static inline CH32USBDeviceHS* self_ = nullptr;
114};
115#endif
116
117} // 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:110
virtual void Deinit()
反初始化 USB 设备 / Deinitialize USB device
Definition dev_core.cpp:102
Speed speed
当前速度 / Current speed
Definition dev_core.hpp:354
virtual void Init()
初始化 USB 设备 / Initialize USB device
Definition dev_core.cpp:86
PacketSize0
控制端点0最大包长度枚举 Packet size for endpoint 0 (bMaxPacketSize0)
Definition desc_dev.hpp:72
USB端点池类 / USB endpoint pool class.
Definition ep_pool.hpp:23
LibXR 命名空间