3#if defined(USE_ESP32_VARIANT_ESP32P4) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
16class USBUartTypeCdcAcm;
17class USBUartComponent;
20static const char *
const TAG =
"usb_uart";
22static constexpr uint8_t USB_CDC_SUBCLASS_ACM = 0x02;
23static constexpr uint8_t USB_SUBCLASS_COMMON = 0x02;
24static constexpr uint8_t USB_SUBCLASS_NULL = 0x00;
25static constexpr uint8_t USB_PROTOCOL_NULL = 0x00;
26static constexpr uint8_t USB_DEVICE_PROTOCOL_IAD = 0x01;
27static constexpr uint8_t USB_VENDOR_IFC = usb_host::USB_TYPE_VENDOR | usb_host::USB_RECIP_INTERFACE;
28static constexpr uint8_t USB_VENDOR_DEV = usb_host::USB_TYPE_VENDOR | usb_host::USB_RECIP_DEVICE;
82static const char *
const PARITY_NAMES[] = {
"NONE",
"ODD",
"EVEN",
"MARK",
"SPACE"};
83static const char *
const STOP_BITS_NAMES[] = {
"1",
"1.5",
"2"};
94 void push(uint8_t item);
95 void push(
const uint8_t *data,
size_t len);
97 size_t pop(uint8_t *data,
size_t len);
183 void setup()
override;
184 void loop()
override;
236 void apply_line_settings_();
238 const char *chip_name_{
"unknown"};
239 uint8_t num_ports_{1};
Helper class to easily give an object a parent of type T.
StringRef is a reference to a string owned by something else.
USBClient(uint16_t vid, uint16_t pid)
RingBuffer(uint16_t buffer_size)
size_t get_free_space() const
size_t get_available() const
void set_dummy_receiver(bool dummy_receiver)
EventPool< UsbOutputChunk, USB_OUTPUT_CHUNK_COUNT - 1 > output_pool_
std::atomic< bool > input_started_
std::atomic< bool > initialised_
LockFreeQueue< UsbOutputChunk, USB_OUTPUT_CHUNK_COUNT > output_queue_
size_t available() override
bool peek_byte(uint8_t *data) override
void set_flush_timeout(uint32_t flush_timeout_ms) override
std::function< void()> rx_callback_
void set_parity(UARTParityOptions parity)
UARTParityOptions parity_
void write_array(const uint8_t *data, size_t len) override
void check_logger_conflict() override
void set_rx_callback(std::function< void()> cb)
Register a callback invoked immediately after data is pushed to the input ring buffer.
static constexpr uint8_t USB_OUTPUT_CHUNK_COUNT
bool read_array(uint8_t *data, size_t len) override
uint32_t flush_timeout_ms_
void set_debug_prefix(const char *prefix)
USBUartChannel(uint8_t index, uint16_t buffer_size)
uart::FlushResult flush() override
void set_debug(bool debug)
std::atomic< bool > output_started_
void add_channel(USBUartChannel *channel)
USBUartComponent(uint16_t vid, uint16_t pid)
std::vector< USBUartChannel * > channels_
LockFreeQueue< UsbDataChunk, USB_DATA_QUEUE_SIZE > usb_data_queue_
void start_output(USBUartChannel *channel)
void dump_config() override
void start_input(USBUartChannel *channel)
std::vector< USBUartChannel * > get_channels()
static constexpr int USB_DATA_QUEUE_SIZE
EventPool< UsbDataChunk, USB_DATA_QUEUE_SIZE - 1 > chunk_pool_
void dump_config() override
void enable_channels() override
std::vector< CdcEps > parse_descriptors(usb_device_handle_t dev_hdl) override
USBUartTypeCH34X(uint16_t vid, uint16_t pid)
USBUartTypeCP210X(uint16_t vid, uint16_t pid)
std::vector< CdcEps > parse_descriptors(usb_device_handle_t dev_hdl) override
void enable_channels() override
void on_disconnected() override
void on_connected() override
void start_channels()
Resets per-channel transfer flags and posts the first bulk IN transfer.
USBUartTypeCdcAcm(uint16_t vid, uint16_t pid)
virtual std::vector< CdcEps > parse_descriptors(usb_device_handle_t dev_hdl)
virtual void enable_channels()
FlushResult
Result of a flush() call.
@ UART_CONFIG_STOP_BITS_1_5
@ UART_CONFIG_STOP_BITS_1
@ UART_CONFIG_STOP_BITS_2
@ UART_CONFIG_PARITY_SPACE
@ UART_CONFIG_PARITY_MARK
@ UART_CONFIG_PARITY_NONE
@ UART_CONFIG_PARITY_EVEN
const usb_ep_desc_t * out_ep
uint8_t bulk_interface_number
const usb_ep_desc_t * notify_ep
const usb_ep_desc_t * in_ep
uint8_t interrupt_interface_number
uint8_t data[MAX_CHUNK_SIZE]
static constexpr size_t MAX_CHUNK_SIZE
uint8_t data[MAX_CHUNK_SIZE]
static constexpr size_t MAX_CHUNK_SIZE