diff --git a/components/driver/usb_serial_jtag/usb_serial_jtag.c b/components/driver/usb_serial_jtag/usb_serial_jtag.c index 76a5fd83ef9..045d6da86ce 100644 --- a/components/driver/usb_serial_jtag/usb_serial_jtag.c +++ b/components/driver/usb_serial_jtag/usb_serial_jtag.c @@ -163,10 +163,13 @@ int usb_serial_jtag_write_bytes(const void* src, size_t size, TickType_t ticks_t const uint8_t *buff = (const uint8_t *)src; // Blocking method, Sending data to ringbuffer, and handle the data in ISR. - xRingbufferSend(p_usb_serial_jtag_obj->tx_ring_buf, (void*) (buff), size, ticks_to_wait); + BaseType_t result = xRingbufferSend(p_usb_serial_jtag_obj->tx_ring_buf, (void*) (buff), size, ticks_to_wait); + // Now trigger the ISR to read data from the ring buffer. - usb_serial_jtag_ll_ena_intr_mask(USB_SERIAL_JTAG_INTR_SERIAL_IN_EMPTY); - return size; + usb_serial_jtag_ll_ena_intr_mask(USB_SERIAL_JTAG_INTR_SERIAL_IN_EMPTY); + + // Return 0 on failure, size on success. + return (result == pdFALSE) ? 0 : size; } esp_err_t usb_serial_jtag_driver_uninstall(void) diff --git a/components/vfs/vfs_usb_serial_jtag.c b/components/vfs/vfs_usb_serial_jtag.c index d17a2a4d6c7..20cc8bc692c 100644 --- a/components/vfs/vfs_usb_serial_jtag.c +++ b/components/vfs/vfs_usb_serial_jtag.c @@ -407,11 +407,13 @@ static void usbjtag_tx_char_via_driver(int fd, int c) { char ch = (char) c; TickType_t ticks = (TX_FLUSH_TIMEOUT_US / 1000) / portTICK_PERIOD_MS; + // Attempt to send the character immediately without blocking. if (usb_serial_jtag_write_bytes(&ch, 1, 0) != 0) { s_ctx.tx_tried_blocking = false; return; } + // If immediate send fails, try blocking with a timeout. if (s_ctx.tx_tried_blocking == false) { if (usb_serial_jtag_write_bytes(&ch, 1, ticks) != 0) { return;