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;
33#if defined(USE_SOCKET_SELECT_SUPPORT) && defined(USE_WAKE_LOOP_THREADSAFE)
42 if (event ==
nullptr) {
43 ESP_LOGW(TAG,
"Event pool exhausted, line coding event dropped (itf=%d)", this->
itf_);
48 event->data.line_coding.bit_rate = bit_rate;
49 event->data.line_coding.stop_bits = stop_bits;
50 event->data.line_coding.parity = parity;
51 event->data.line_coding.data_bits = data_bits;
57#if defined(USE_SOCKET_SELECT_SUPPORT) && defined(USE_WAKE_LOOP_THREADSAFE)
66 switch (event->
type) {
68 bool dtr =
event->data.line_state.dtr;
69 bool rts =
event->data.line_state.rts;
78 uint32_t bit_rate =
event->data.line_coding.bit_rate;
79 uint8_t stop_bits =
event->data.line_coding.stop_bits;
80 uint8_t parity =
event->data.line_coding.parity;
81 uint8_t data_bits =
event->data.line_coding.data_bits;
89 this->
stop_bits_ = (stop_bits == 0) ? 1 : (stop_bits == 1) ? 1 : 2;
130 if (interface !=
nullptr) {
139 if (interface !=
nullptr) {
148 " Number of Interfaces: %d",
149 ESPHOME_MAX_USB_CDC_INSTANCES);
150 for (uint8_t i = 0; i < ESPHOME_MAX_USB_CDC_INSTANCES; ++i) {
154 ESP_LOGCONFIG(TAG,
" Interface %u is disabled", i);
160 uint8_t itf_num =
static_cast<uint8_t
>(interface->
get_itf());
161 if (itf_num < ESPHOME_MAX_USB_CDC_INSTANCES) {
164 ESP_LOGE(TAG,
"Interface number must be less than %u", ESPHOME_MAX_USB_CDC_INSTANCES);
170 if ((interface !=
nullptr) && (interface->get_itf() == itf)) {
void wake_loop_threadsafe()
Wake the main event loop from another FreeRTOS task.
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 - 1 > 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.