This is an automated email from the ASF dual-hosted git repository. aguettouche pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git
commit f88e4af8afe4b1cac0e7c369d60e206b3718607e Author: Matias Nitsche <[email protected]> AuthorDate: Mon Jun 15 12:27:13 2020 -0300 pty: support waiting for underlying serial device to appear, useful for pty over USBDEV serial device --- examples/pty_test/Kconfig | 8 ++++++++ examples/pty_test/pty_test.c | 28 +++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/examples/pty_test/Kconfig b/examples/pty_test/Kconfig index 8448693..1f3921c 100644 --- a/examples/pty_test/Kconfig +++ b/examples/pty_test/Kconfig @@ -40,4 +40,12 @@ config EXAMPLES_PTYTEST_DAEMONPRIO int "PTY_Test daemon task priority" default 100 +config EXAMPLES_PTYTEST_WAIT_CONNECTED + bool "Keep retrying open serial device" + ---help--- + For USB based serial devices, open will fail + if the other end is not connected (USB cable unplugged). + Enabling this option will retry the open() call every second + until connected. + endif diff --git a/examples/pty_test/pty_test.c b/examples/pty_test/pty_test.c index 262e576..8a285fd 100644 --- a/examples/pty_test/pty_test.c +++ b/examples/pty_test/pty_test.c @@ -315,9 +315,35 @@ int main(int argc, FAR char *argv[]) O_RDWR | O_NONBLOCK); if (termpair.fd_uart < 0) { - fprintf(stderr, "Failed to open %s: %\n", +#ifdef CONFIG_EXAMPLES_PTYTEST_WAIT_CONNECTED + /* if ENOTCONN is received, re-attempt to open periodically */ + + if (errno == ENOTCONN) + { + fprintf(stderr, "ERROR: device not connected, will continue trying\n"); + } + + while (termpair.fd_uart < 0 && errno == ENOTCONN) + { + sleep(1); + + termpair.fd_uart = open(CONFIG_EXAMPLES_PTYTEST_SERIALDEV, + O_RDWR | O_NONBLOCK); + } + + /* if we exited due to an error different than ENOTCONN */ + + if (termpair.fd_uart < 0) + { + fprintf(stderr, "Failed to open %s: %i\n", + CONFIG_EXAMPLES_PTYTEST_SERIALDEV, errno); + goto error_serial; + } +#else + fprintf(stderr, "Failed to open %s: %i\n", CONFIG_EXAMPLES_PTYTEST_SERIALDEV, errno); goto error_serial; +#endif } #ifdef CONFIG_SERIAL_TERMIOS
