libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
esp_usb_ep.hpp
1#pragma once
2
3#include "usb/core/ep.hpp"
4
5#if SOC_USB_OTG_SUPPORTED && defined(CONFIG_IDF_TARGET_ESP32S3) && \
6 CONFIG_IDF_TARGET_ESP32S3
7
8namespace LibXR
9{
10
11class ESP32USBDevice;
12
16class ESP32USBEndpoint : public USB::Endpoint
17{
18 public:
19 ESP32USBEndpoint(ESP32USBDevice& device, EPNumber number, Direction direction,
20 RawData buffer);
21
22 friend class ESP32USBDevice;
23
24 void Configure(const Config& cfg) override;
25 void Close() override;
26 ErrorCode Stall() override;
27 ErrorCode ClearStall() override;
28 ErrorCode Transfer(size_t size) override;
29
30 size_t MaxTransferSize() const override;
31
32 private:
33 enum class Ep0OutPhase : uint8_t
34 {
35 SETUP = 0U,
36 DATA = 1U,
37 STATUS = 2U,
38 };
39
40 void ResetHardwareState();
41 void HandleInInterrupt(bool in_isr);
42 void FinishPendingEp0InStatus(bool in_isr);
43 void HandleOutInterrupt(bool in_isr);
44 void HandleRxData(size_t size);
45 void ObserveDmaRxStatus(uint8_t pktsts, size_t size);
46 void ResetTransferState();
47 bool EnsureDmaShadow(size_t size);
48 bool PrepareTransferBuffer(size_t size);
49 bool FinishOutTransfer(size_t actual_size);
50 size_t GetRemainingTransferSize() const;
51 size_t GetCompletedTransferSize() const;
52 void ActivateHardwareEndpoint();
53 void ProgramTransfer(size_t size);
54 void WriteMoreTxData();
55
56 ESP32USBDevice& device_;
57 bool fifo_allocated_ = false;
58 uint16_t fifo_words_ = 0U;
59 uint8_t* dma_shadow_buffer_ = nullptr;
60 size_t dma_shadow_size_ = 0U;
61 uint8_t* transfer_buffer_ = nullptr;
62 uint8_t* transfer_hw_buffer_ = nullptr;
63 size_t transfer_request_size_ = 0U;
64 size_t transfer_actual_size_ = 0U;
65 size_t transfer_queued_size_ = 0U;
66 bool transfer_uses_shadow_ = false;
67 size_t transfer_direct_sync_size_ = 0U;
68 size_t dma_rx_status_bytes_ = 0U;
69 bool dma_rx_status_seen_ = false;
70 Ep0OutPhase ep0_out_phase_ = Ep0OutPhase::SETUP;
71};
72
73} // namespace LibXR
74
75#endif
LibXR 命名空间
Definition ch32_can.hpp:14
ErrorCode
定义错误码枚举