From c5c0212b8edfc405665c9ac46e2e4dca8b9c34aa Mon Sep 17 00:00:00 2001 From: patacongo Date: Sat, 26 May 2012 01:45:37 +0000 Subject: Now have to press enter 3 times to start with USB NSH console git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4772 42af7a65-404d-4744-a932-0658087f49c3 --- apps/nshlib/nsh_usbdev.c | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) (limited to 'apps/nshlib/nsh_usbdev.c') diff --git a/apps/nshlib/nsh_usbdev.c b/apps/nshlib/nsh_usbdev.c index 2b31a1a14..87689d5a2 100644 --- a/apps/nshlib/nsh_usbdev.c +++ b/apps/nshlib/nsh_usbdev.c @@ -92,6 +92,9 @@ #ifdef HAVE_USB_CONSOLE int nsh_usbconsole(void) { + char inch; + ssize_t nbytes; + int nlc; int fd; int ret; @@ -116,13 +119,7 @@ int nsh_usbconsole(void) DEBUGASSERT(ret == OK); #endif - /* Make sure the stdin, stdout, and stderr are closed */ - - (void)fclose(stdin); - (void)fclose(stdout); - (void)fclose(stderr); - - /* Open the USB serial device for writing */ + /* Open the USB serial device for read/write access */ do { @@ -146,6 +143,43 @@ int nsh_usbconsole(void) } while (fd < 0); + /* Now waiting until we successfully read a carriage return a few times. + * That is a sure way of know that there is something at the other end of + * the USB serial connection that is ready to talk with us. The user needs + * to hit ENTER a few times to get things started. + */ + + nlc = 0; + do + { + /* Read one byte */ + + inch = 0; + nbytes = read(fd, &inch, 1); + + /* Is it a carriage return (or maybe a newline)? */ + + if (nbytes == 1 && (inch == '\n' || inch == '\r')) + { + /* Yes.. increment the count */ + + nlc++; + } + else + { + /* No.. Reset the count. We need to see 3 in a row to continue. */ + + nlc = 0; + } + } + while (nlc < 3); + + /* Make sure the stdin, stdout, and stderr are closed */ + + (void)fclose(stdin); + (void)fclose(stdout); + (void)fclose(stderr); + /* Dup the fd to create standard fd 0-2 */ (void)dup2(fd, 0); -- cgit v1.2.3