Merge branch 'bugfix/console_usbserjtag_detect' into 'master'

console, usb_serial_jtag: don't block on non-interactive terminals

Closes IDFGH-7248

See merge request espressif/esp-idf!17985
This commit is contained in:
Ivan Grokhotkov
2022-05-04 19:19:56 +08:00
2 changed files with 11 additions and 3 deletions

View File

@@ -1057,6 +1057,10 @@ int linenoiseProbe(void) {
if (cb < 0) { if (cb < 0) {
continue; continue;
} }
if (read_bytes == 0 && c != '\x1b') {
/* invalid response */
break;
}
read_bytes += cb; read_bytes += cb;
} }
/* Restore old mode */ /* Restore old mode */

View File

@@ -71,8 +71,11 @@ typedef struct {
// Read and write locks, lazily initialized // Read and write locks, lazily initialized
_lock_t read_lock; _lock_t read_lock;
_lock_t write_lock; _lock_t write_lock;
// Non-blocking flag. Note: default implementation does not honor this // Non-blocking flag.
// flag, all reads are non-blocking. ToDo: implement driver that honours this. // The default implementation does not honor this flag, all reads
// are non-blocking.
// When the driver is used (via esp_vfs_usb_serial_jtag_use_driver),
// reads are either blocking or non-blocking depending on this flag.
bool non_blocking; bool non_blocking;
// Newline conversion mode when transmitting // Newline conversion mode when transmitting
esp_line_endings_t tx_mode; esp_line_endings_t tx_mode;
@@ -389,7 +392,8 @@ esp_err_t esp_vfs_dev_usb_serial_jtag_register(void)
static int usbjtag_rx_char_via_driver(int fd) static int usbjtag_rx_char_via_driver(int fd)
{ {
uint8_t c; uint8_t c;
int n = usb_serial_jtag_read_bytes(&c, 1, portMAX_DELAY); TickType_t timeout = s_ctx.non_blocking ? 0 : portMAX_DELAY;
int n = usb_serial_jtag_read_bytes(&c, 1, timeout);
if (n <= 0) { if (n <= 0) {
return NONE; return NONE;
} }