Skip to content

Commit 6a8abcb

Browse files
GrixaYrevnashif
authored andcommitted
usb: cdc_acm: trigger TX IRQ when CDC ACM class is ready
Before commit 4f2682b ("usb: cdc_acm: avoid spurious interrupt on configured or resume events") spurious rx-interrupt provided start to read shell tx ring buffer by CDC ACM UART. Now shell log backend not transmit data, until CDC ACM UART received data from host. This PR added invoking interrupt callback if tx interrupt is enable, when CDC ACM class go to configured state, and flag tx_ready go to true. Signed-off-by: Grixa Yrev <[email protected]>
1 parent bcbc530 commit 6a8abcb

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

subsys/usb/class/cdc_acm.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,9 +358,15 @@ static void cdc_acm_do_cb(struct cdc_acm_dev_data_t *dev_data,
358358
if (!dev_data->configured) {
359359
cdc_acm_read_cb(cfg->endpoint[ACM_OUT_EP_IDX].ep_addr, 0,
360360
dev_data);
361+
dev_data->configured = true;
362+
}
363+
if (!dev_data->tx_ready) {
364+
dev_data->tx_ready = true;
365+
/* if wait tx irq, invoke callback */
366+
if (dev_data->cb != NULL && dev_data->tx_irq_ena) {
367+
k_work_submit_to_queue(&USB_WORK_Q, &dev_data->cb_work);
368+
}
361369
}
362-
dev_data->configured = true;
363-
dev_data->tx_ready = true;
364370
break;
365371
case USB_DC_DISCONNECTED:
366372
LOG_INF("Device disconnected");

0 commit comments

Comments
 (0)