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<
22 const std::initializer_list<USB::ConfigDescriptorItem *>>
23 CONFIGS,
24 USB::Speed speed = USB::Speed::FULL, USB::USBSpec spec = USB::USBSpec::USB_2_0)
25 : USB::EndpointPool(max_ep_num),
26 USB::DeviceCore(*this, spec, speed, packet_size, vid, pid, bcd, LANG_LIST,
27 CONFIGS),
28 id_(id)
29 {
30 }
31
32 void Init() override { USB::DeviceCore::Init(); }
33 void Deinit() override { USB::DeviceCore::Deinit(); }
34
35 uint8_t id_;
36};
37
38#if defined(USBFSD)
39
40class CH32USBDeviceFS : public USB::EndpointPool, public USB::DeviceCore
41{
42 public:
43 CH32USBDeviceFS(
44 const std::initializer_list<LibXR::RawData> EP_CFGS,
45 USB::DeviceDescriptor::PacketSize0 packet_size, uint16_t vid, uint16_t pid,
46 uint16_t bcd,
47 const std::initializer_list<const USB::DescriptorStrings::LanguagePack *> LANG_LIST,
48 const std::initializer_list<
49 const std::initializer_list<USB::ConfigDescriptorItem *>>
50 CONFIGS);
51
52 ErrorCode SetAddress(uint8_t address, USB::DeviceCore::Context context) override;
53
54 void Start() override;
55
56 void Stop() override;
57
58 static inline CH32USBDeviceFS *self_ = nullptr;
59};
60
61#endif
62
63#if defined(USBHSD)
64
65class CH32USBDeviceHS : public USB::EndpointPool, public USB::DeviceCore
66{
67 public:
68 struct EPConfig
69 {
70 RawData buffer_tx;
71 RawData buffer_rx;
72 bool double_buffer;
73 bool is_in;
74
75 EPConfig(RawData buffer)
76 : buffer_tx(buffer), buffer_rx(buffer), double_buffer(false), is_in(false)
77 {
78 }
79
80 EPConfig(RawData buffer, bool is_in)
81 : buffer_tx(buffer), buffer_rx(buffer), double_buffer(true), is_in(is_in)
82 {
83 }
84
85 EPConfig(RawData buffer_tx, RawData buffer_rx)
86 : buffer_tx(buffer_tx), buffer_rx(buffer_rx), double_buffer(false), is_in(false)
87 {
88 }
89 };
90
91 CH32USBDeviceHS(
92 const std::initializer_list<EPConfig> EP_CFGS, uint16_t vid, uint16_t pid,
93 uint16_t bcd,
94 const std::initializer_list<const USB::DescriptorStrings::LanguagePack *> LANG_LIST,
95 const std::initializer_list<
96 const std::initializer_list<USB::ConfigDescriptorItem *>>
97 CONFIGS);
98
99 ErrorCode SetAddress(uint8_t address, USB::DeviceCore::Context context) override;
100
101 void Start() override;
102
103 void Stop() override;
104
105 static inline CH32USBDeviceHS *self_ = nullptr;
106};
107#endif
108
109} // namespace LibXR
void Init() override
初始化 USB 设备 / Initialize USB device
void Deinit() override
反初始化 USB 设备 / Deinitialize USB device
USB 设备协议栈核心类,负责端点 0 控制传输及配置、描述符、标准请求处理等。 USB device protocol stack core class. Handles EP0 control tr...
Definition dev_core.hpp:108
virtual void Deinit()
反初始化 USB 设备 / Deinitialize USB device
Definition dev_core.cpp:102
Speed speed
当前速度 / Current speed
Definition dev_core.hpp:351
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 命名空间
Definition ch32_gpio.hpp:9