libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
stm32_usb_ep.hpp
1#pragma once
2
3#include "libxr_def.hpp"
4#include "main.h"
5#include "stm32_usb.hpp"
6#include "stm32_usb_dev.hpp"
7#include "usb/core/ep.hpp"
8
9#if defined(HAL_PCD_MODULE_ENABLED)
10
11namespace LibXR
12{
13
18{
19 public:
20#if defined(USB_OTG_HS) || defined(USB_OTG_FS)
21 STM32Endpoint(EPNumber ep_num, stm32_usb_dev_id_t id, PCD_HandleTypeDef* hpcd,
22 Direction dir, size_t fifo_size, LibXR::RawData buffer);
23#endif
24#if defined(USB_BASE)
25 STM32Endpoint(EPNumber ep_num, stm32_usb_dev_id_t id, PCD_HandleTypeDef* hpcd,
26 Direction dir, size_t hw_buffer_offset, size_t hw_buffer_size,
27 LibXR::RawData buffer);
28#endif
29
30 void Configure(const Config& cfg) override;
31 void Close() override;
32 ErrorCode Transfer(size_t size) override;
33
34 ErrorCode Stall() override;
35 ErrorCode ClearStall() override;
36
37 size_t MaxTransferSize() const override;
38
39 PCD_HandleTypeDef* hpcd_;
40
41 size_t last_transfer_size_ = 0;
42
43#if defined(USB_OTG_FS) || defined(USB_OTG_HS)
44 size_t fifo_size_ = 0;
45#endif
46#if defined(USB_BASE)
47 size_t hw_buffer_size_ = 0;
48#endif
49 stm32_usb_dev_id_t id_;
50
51#if defined(USB_OTG_HS)
52#if defined(USB_OTG_HS_MAX_IN_ENDPOINTS)
53 static constexpr uint8_t EP_OTG_HS_MAX_SIZE =
54 LibXR::max(USB_OTG_HS_MAX_IN_ENDPOINTS, USB_OTG_HS_MAX_OUT_ENDPOINTS);
55#else
56 static constexpr uint8_t EP_OTG_HS_MAX_SIZE = 9;
57#endif
58
59 static inline STM32Endpoint* map_otg_hs_[EP_OTG_HS_MAX_SIZE][2] = {};
60#endif
61
62#if defined(USB_OTG_FS)
63#if defined(USB_OTG_FS_MAX_IN_ENDPOINTS)
64 static constexpr uint8_t EP_OTG_FS_MAX_SIZE =
65 LibXR::max(USB_OTG_FS_MAX_IN_ENDPOINTS, USB_OTG_FS_MAX_OUT_ENDPOINTS);
66#elif defined(STM32H7) || defined(STM32N6)
67 static constexpr uint8_t EP_OTG_FS_MAX_SIZE = 9;
68#else
69 static constexpr uint8_t EP_OTG_FS_MAX_SIZE = 6;
70#endif
71 static inline STM32Endpoint* map_otg_fs_[EP_OTG_FS_MAX_SIZE][2] = {};
72#endif
73
74#if defined(USB_BASE)
75 static constexpr uint8_t EP_OTG_FS_MAX_SIZE = 8;
76 static inline STM32Endpoint* map_fs_[EP_OTG_FS_MAX_SIZE][2] = {};
77#endif
78};
79
80} // namespace LibXR
81
82#endif
原始数据封装类。 A class for encapsulating raw data.
STM32 USB 端点实现 / STM32 USB endpoint implementation.
ErrorCode Transfer(size_t size) override
启动一次传输 / Start a transfer
ErrorCode ClearStall() override
清除 STALL / Clear stall
void Configure(const Config &cfg) override
配置端点协议参数 / Configure endpoint protocol parameters
void Close() override
关闭端点 / Close endpoint
ErrorCode Stall() override
置 STALL / Stall endpoint
size_t MaxTransferSize() const override
返回当前最大可传输字节数 / Return maximum transferable size at this time
USB 端点基类 / USB Endpoint base class.
Definition ep.hpp:23
EPNumber
端点号 Endpoint number
Definition ep.hpp:41
Direction
端点方向 Endpoint direction
Definition ep.hpp:30
LibXR 命名空间
Definition ch32_can.hpp:14
constexpr auto max(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最大值
端点配置参数 / Endpoint configuration parameters
Definition ep.hpp:138