From c30ac4dfd88b730a13161185a3d478ddf9355f9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mo=C5=84?= Date: Fri, 24 May 2024 08:50:31 +0200 Subject: [PATCH] usb: device_next: CDC ACM: Process TX on configuration enable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If CDC ACM uart side has TX enabled when the configuration gets enabled, depending on fifo state following has to happen: * if the fifo is empty - trigger TX ready interrupt * if the fifo is not empty - queue TX data on IN endpoint Signed-off-by: Tomasz Moń --- subsys/usb/device_next/class/usbd_cdc_acm.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/subsys/usb/device_next/class/usbd_cdc_acm.c b/subsys/usb/device_next/class/usbd_cdc_acm.c index 838550f18dd..453759d55a5 100644 --- a/subsys/usb/device_next/class/usbd_cdc_acm.c +++ b/subsys/usb/device_next/class/usbd_cdc_acm.c @@ -268,7 +268,13 @@ static void usbd_cdc_acm_enable(struct usbd_class_data *const c_data) } if (atomic_test_bit(&data->state, CDC_ACM_IRQ_TX_ENABLED)) { - /* TODO */ + if (ring_buf_is_empty(data->tx_fifo.rb)) { + /* Raise TX ready interrupt */ + cdc_acm_work_submit(&data->irq_cb_work); + } else { + /* Queue pending TX data on IN endpoint */ + cdc_acm_work_submit(&data->tx_fifo_work); + } } }