3#include "usb/core/ep.hpp"
5#if SOC_USB_OTG_SUPPORTED && defined(CONFIG_IDF_TARGET_ESP32S3) && \
6 CONFIG_IDF_TARGET_ESP32S3
16class ESP32USBEndpoint :
public USB::Endpoint
19 ESP32USBEndpoint(ESP32USBDevice& device, EPNumber number, Direction direction,
22 friend class ESP32USBDevice;
24 void Configure(
const Config& cfg)
override;
25 void Close()
override;
30 size_t MaxTransferSize()
const override;
33 enum class Ep0OutPhase : uint8_t
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();
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;