4#include "libxr_def.hpp"
5#include "libxr_type.hpp"
6#include "usb/core/ep.hpp"
16class CH32EndpointOtgFs :
public USB::Endpoint
19 CH32EndpointOtgFs(EPNumber ep_num, Direction dir,
LibXR::RawData buffer,
20 bool single_direction);
22 void Configure(
const Config& cfg)
override;
23 void Close()
override;
26 void TransferComplete(
size_t size);
30 void SwitchBuffer()
override;
33 bool is_isochronous_ =
false;
34 bool single_direction_ =
false;
36 size_t last_transfer_size_ = 0;
39 static constexpr uint8_t EP_OTG_FS_MAX_SIZE = 8;
40 static inline CH32EndpointOtgFs* map_otg_fs_[EP_OTG_FS_MAX_SIZE][2] = {};
45#if defined(RCC_APB1Periph_USB)
50class CH32EndpointDevFs :
public USB::Endpoint
53 CH32EndpointDevFs(EPNumber ep_num, Direction dir,
LibXR::RawData buffer,
56 void Configure(
const Config& cfg)
override;
57 void Close()
override;
60 void TransferComplete(
size_t size);
62 void CopyRxDataToBuffer(
size_t size);
67 void SwitchBuffer()
override;
69 static void ResetPMAAllocator();
70 static void SetEpTxStatus(uint8_t ep, uint16_t status);
71 static void SetEpRxStatus(uint8_t ep, uint16_t status);
72 static void ClearEpCtrTx(uint8_t ep);
73 static void ClearEpCtrRx(uint8_t ep);
74 static uint16_t GetRxCount(uint8_t ep);
76 bool is_isochronous_ =
false;
78 size_t last_transfer_size_ = 0;
80 uint16_t pma_addr_ = 0;
82 static constexpr uint8_t EP_DEV_FS_MAX_SIZE = 8;
83 static inline CH32EndpointDevFs* map_dev_fs_[EP_DEV_FS_MAX_SIZE][2] = {};
93class CH32EndpointOtgHs :
public USB::Endpoint
96 CH32EndpointOtgHs(EPNumber ep_num, Direction dir,
LibXR::RawData buffer,
99 void Configure(
const Config& cfg)
override;
100 void Close()
override;
101 ErrorCode Transfer(
size_t size)
override;
103 void TransferComplete(
size_t size);
107 void SwitchBuffer()
override;
112 bool hw_double_buffer_ =
false;
114 size_t last_transfer_size_ = 0;
117 static constexpr uint8_t EP_OTG_HS_MAX_SIZE = 16;
118 static inline CH32EndpointOtgHs* map_otg_hs_[EP_OTG_HS_MAX_SIZE][2] = {};
原始数据封装类。 A class for encapsulating raw data.