3#include "usb/core/ep.hpp"
5#if SOC_USB_OTG_SUPPORTED && defined(CONFIG_IDF_TARGET_ESP32S3) && CONFIG_IDF_TARGET_ESP32S3
15class ESP32USBEndpoint :
public USB::Endpoint
18 ESP32USBEndpoint(ESP32USBDevice& device, EPNumber number, Direction direction, RawData buffer);
20 friend class ESP32USBDevice;
22 void Configure(
const Config& cfg)
override;
23 void Close()
override;
28 size_t MaxTransferSize()
const override;
31 enum class Ep0OutPhase : uint8_t
38 void ResetHardwareState();
39 void HandleInInterrupt(
bool in_isr);
40 void FinishPendingEp0InStatus(
bool in_isr);
41 void HandleOutInterrupt(
bool in_isr);
42 void HandleRxData(
size_t size);
43 void ObserveDmaRxStatus(uint8_t pktsts,
size_t size);
44 void ResetTransferState();
45 bool EnsureDmaShadow(
size_t size);
46 bool PrepareTransferBuffer(
size_t size);
47 bool FinishOutTransfer(
size_t actual_size);
48 size_t GetRemainingTransferSize()
const;
49 size_t GetCompletedTransferSize()
const;
50 void ActivateHardwareEndpoint();
51 void ProgramTransfer(
size_t size);
52 void WriteMoreTxData();
54 ESP32USBDevice& device_;
55 bool fifo_allocated_ =
false;
56 uint16_t fifo_words_ = 0U;
57 uint8_t* dma_shadow_buffer_ =
nullptr;
58 size_t dma_shadow_size_ = 0U;
59 uint8_t* transfer_buffer_ =
nullptr;
60 uint8_t* transfer_hw_buffer_ =
nullptr;
61 size_t transfer_request_size_ = 0U;
62 size_t transfer_actual_size_ = 0U;
63 size_t transfer_queued_size_ = 0U;
64 bool transfer_uses_shadow_ =
false;
65 size_t transfer_direct_sync_size_ = 0U;
66 size_t dma_rx_status_bytes_ = 0U;
67 bool dma_rx_status_seen_ =
false;
68 Ep0OutPhase ep0_out_phase_ = Ep0OutPhase::SETUP;