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,
22 void Configure(
const Config& cfg)
override;
23 void Close()
override;
24 ErrorCode Transfer(
size_t size)
override;
26 void TransferComplete(
size_t size);
27 ErrorCode Stall()
override;
28 ErrorCode ClearStall()
override;
30 void SwitchBuffer()
override;
33 bool is_isochronous_ =
false;
35 size_t last_transfer_size_ = 0;
38 static constexpr uint8_t EP_OTG_FS_MAX_SIZE = 8;
39 static inline CH32EndpointOtgFs* map_otg_fs_[EP_OTG_FS_MAX_SIZE][2] = {};
44#if defined(RCC_APB1Periph_USB)
49class CH32EndpointDevFs :
public USB::Endpoint
52 CH32EndpointDevFs(EPNumber ep_num, Direction dir,
LibXR::RawData buffer,
55 void Configure(
const Config& cfg)
override;
56 void Close()
override;
57 ErrorCode Transfer(
size_t size)
override;
59 void TransferComplete(
size_t size);
61 void CopyRxDataToBuffer(
size_t size);
63 ErrorCode Stall()
override;
64 ErrorCode ClearStall()
override;
66 void SwitchBuffer()
override;
68 static void ResetPMAAllocator();
69 static void SetEpTxStatus(uint8_t ep, uint16_t status);
70 static void SetEpRxStatus(uint8_t ep, uint16_t status);
71 static void ClearEpCtrTx(uint8_t ep);
72 static void ClearEpCtrRx(uint8_t ep);
73 static uint16_t GetRxCount(uint8_t ep);
75 bool is_isochronous_ =
false;
77 size_t last_transfer_size_ = 0;
79 uint16_t pma_addr_ = 0;
81 static constexpr uint8_t EP_DEV_FS_MAX_SIZE = 8;
82 static inline CH32EndpointDevFs* map_dev_fs_[EP_DEV_FS_MAX_SIZE][2] = {};
92class CH32EndpointOtgHs :
public USB::Endpoint
95 CH32EndpointOtgHs(EPNumber ep_num, Direction dir,
LibXR::RawData buffer,
98 void Configure(
const Config& cfg)
override;
99 void Close()
override;
100 ErrorCode Transfer(
size_t size)
override;
102 void TransferComplete(
size_t size);
103 ErrorCode Stall()
override;
104 ErrorCode ClearStall()
override;
106 void SwitchBuffer()
override;
111 bool hw_double_buffer_ =
false;
113 size_t last_transfer_size_ = 0;
116 static constexpr uint8_t EP_OTG_HS_MAX_SIZE = 16;
117 static inline CH32EndpointOtgHs* map_otg_hs_[EP_OTG_HS_MAX_SIZE][2] = {};
原始数据封装类。 A class for encapsulating raw data.