1#if defined(USE_ESP32_VARIANT_ESP32P4) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
8static const char *
const TAG =
"usb_cdc_acm";
20 if (event ==
nullptr) {
21 ESP_LOGW(TAG,
"Event pool exhausted, line state event dropped (itf=%d)", this->
itf_);
26 event->data.line_state.dtr = dtr;
27 event->data.line_state.rts = rts;
30 ESP_LOGW(TAG,
"Event queue full, line state event dropped (itf=%d)", this->
itf_);
35#if defined(USE_SOCKET_SELECT_SUPPORT) && defined(USE_WAKE_LOOP_THREADSAFE)
45 if (event ==
nullptr) {
46 ESP_LOGW(TAG,
"Event pool exhausted, line coding event dropped (itf=%d)", this->
itf_);
51 event->data.line_coding.bit_rate = bit_rate;
52 event->data.line_coding.stop_bits = stop_bits;
53 event->data.line_coding.parity = parity;
54 event->data.line_coding.data_bits = data_bits;
57 ESP_LOGW(TAG,
"Event queue full, line coding event dropped (itf=%d)", this->
itf_);
62#if defined(USE_SOCKET_SELECT_SUPPORT) && defined(USE_WAKE_LOOP_THREADSAFE)
72 switch (event->
type) {
74 bool dtr =
event->data.line_state.dtr;
75 bool rts =
event->data.line_state.rts;
84 uint32_t bit_rate =
event->data.line_coding.bit_rate;
85 uint8_t stop_bits =
event->data.line_coding.stop_bits;
86 uint8_t parity =
event->data.line_coding.parity;
87 uint8_t data_bits =
event->data.line_coding.data_bits;
95 this->
stop_bits_ = (stop_bits == 0) ? 1 : (stop_bits == 1) ? 1 : 2;
136 if (interface !=
nullptr) {
145 if (interface !=
nullptr) {
154 " Number of Interfaces: %d",
155 ESPHOME_MAX_USB_CDC_INSTANCES);
156 for (uint8_t i = 0; i < ESPHOME_MAX_USB_CDC_INSTANCES; ++i) {
160 ESP_LOGCONFIG(TAG,
" Interface %u is disabled", i);
166 uint8_t itf_num =
static_cast<uint8_t
>(interface->
get_itf());
167 if (itf_num < ESPHOME_MAX_USB_CDC_INSTANCES) {
170 ESP_LOGE(TAG,
"Interface number must be less than %u", ESPHOME_MAX_USB_CDC_INSTANCES);
176 if ((interface !=
nullptr) && (interface->get_itf() == itf)) {
void wake_loop_threadsafe()
Wake the main event loop from a FreeRTOS task Thread-safe, can be called from task context to immedia...
UARTParityOptions parity_
Main USB CDC ACM component that manages the USB device and all CDC interfaces.
void add_interface(USBCDCACMInstance *interface)
std::array< USBCDCACMInstance *, ESPHOME_MAX_USB_CDC_INSTANCES > interfaces_
USBCDCACMInstance * get_interface_by_number(uint8_t itf)
void dump_config() override
Represents a single CDC ACM interface instance.
EventPool< CDCEvent, EVENT_QUEUE_SIZE > event_pool_
LineStateCallback line_state_callback_
LockFreeQueue< CDCEvent, EVENT_QUEUE_SIZE > event_queue_
void queue_line_coding_event(uint32_t bit_rate, uint8_t stop_bits, uint8_t parity, uint8_t data_bits)
LineCodingCallback line_coding_callback_
void queue_line_state_event(bool dtr, bool rts)
@ UART_CONFIG_PARITY_EVEN
@ UART_CONFIG_PARITY_NONE
@ CDC_EVENT_LINE_CODING_CHANGED
@ CDC_EVENT_LINE_STATE_CHANGED
USBCDCACMComponent * global_usb_cdc_component
Application App
Global storage of Application pointer - only one Application can exist.