libxr
Embedded C++ framework for bare-metal, RTOS and Linux
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 defined(__DOXYGEN__)
8
9namespace LibXR
10{
11
12class ESP32USBDevice;
13
18{
19 public:
20 ESP32USBEndpoint(ESP32USBDevice& device, EPNumber number, Direction direction,
21 RawData buffer);
22
23 friend class ESP32USBDevice;
24
25 void Configure(const Config& cfg) override;
26 void Close() override;
27 ErrorCode Stall() override;
29 ErrorCode Transfer(size_t size) override;
30
31 size_t MaxTransferSize() const override;
32
33 private:
34 enum class Ep0OutPhase : uint8_t
35 {
36 SETUP = 0U,
37 DATA = 1U,
38 STATUS = 2U,
39 };
40
41 void ResetHardwareState();
42 void HandleInInterrupt(bool in_isr);
43 void FinishPendingEp0InStatus(bool in_isr);
44 void HandleOutInterrupt(bool in_isr);
45 void HandleRxData(size_t size);
46 void ObserveDmaRxStatus(uint8_t pktsts, size_t size);
47 void ResetTransferState();
48 bool EnsureDmaShadow(size_t size);
49 bool PrepareTransferBuffer(size_t size);
50 bool FinishOutTransfer(size_t actual_size);
51 size_t GetRemainingTransferSize() const;
52 size_t GetCompletedTransferSize() const;
53 void ActivateHardwareEndpoint();
54 void ProgramTransfer(size_t size);
55 void WriteMoreTxData();
56
57 ESP32USBDevice& device_;
58 bool fifo_allocated_ = false;
59 uint16_t fifo_words_ = 0U;
60 uint8_t* dma_shadow_buffer_ = nullptr;
61 size_t dma_shadow_size_ = 0U;
62 uint8_t* transfer_buffer_ = nullptr;
63 uint8_t* transfer_hw_buffer_ = nullptr;
64 size_t transfer_request_size_ = 0U;
65 size_t transfer_actual_size_ = 0U;
66 size_t transfer_queued_size_ = 0U;
67 bool transfer_uses_shadow_ = false;
68 size_t transfer_direct_sync_size_ = 0U;
69 size_t dma_rx_status_bytes_ = 0U;
70 bool dma_rx_status_seen_ = false;
71 Ep0OutPhase ep0_out_phase_ = Ep0OutPhase::SETUP;
72};
73
74} // namespace LibXR
75
76#endif
ESP32-S3 USB OTG 设备核心实现 / ESP32-S3 USB OTG device-core implementation.
ESP32-S3 USB endpoint implementation.
ErrorCode ClearStall() override
清除 STALL / Clear stall
size_t MaxTransferSize() const override
返回当前最大可传输字节数 / Return maximum transferable size at this time
void Close() override
关闭端点 / Close endpoint
ErrorCode Transfer(size_t size) override
启动一次传输 / Start a transfer
void Configure(const Config &cfg) override
配置端点协议参数 / Configure endpoint protocol parameters
ErrorCode Stall() override
置 STALL / Stall endpoint
可写原始数据视图 / Mutable raw data view
USB 端点基类 / USB Endpoint base class.
Definition ep.hpp:24
EPNumber
端点号 Endpoint number
Definition ep.hpp:42
Direction
端点方向 Endpoint direction
Definition ep.hpp:31
LibXR 命名空间 / LibXR namespace.
Definition ch32_can.hpp:14
ErrorCode
定义错误码枚举 / Defines an enumeration for error codes
端点配置参数 / Endpoint configuration parameters
Definition ep.hpp:138