On Fri, Jun 3, 2016 at 4:05 AM, Sebastian Huber <sebastian.hu...@embedded-brains.de> wrote: > From: Alexander Krutwig <alexander.krut...@embedded-brains.de> > > --- > cpukit/libmisc/shell/shell-wait-for-input.c | 26 ++++++++++++++++++++++---- > cpukit/libmisc/shell/shell.h | 18 ++++++++++++++++++ > 2 files changed, 40 insertions(+), 4 deletions(-) > > diff --git a/cpukit/libmisc/shell/shell-wait-for-input.c > b/cpukit/libmisc/shell/shell-wait-for-input.c > index a4bfc21..69ab883 100644 > --- a/cpukit/libmisc/shell/shell-wait-for-input.c > +++ b/cpukit/libmisc/shell/shell-wait-for-input.c > @@ -53,11 +53,12 @@ static rtems_status_code restore_serial_settings(int fd, > struct termios *term) > return rv == 0 ? RTEMS_SUCCESSFUL : RTEMS_UNSATISFIED; > } > > -rtems_status_code rtems_shell_wait_for_input( > +rtems_status_code rtems_shell_wait_for_explicit_input( > int fd, > int timeout_in_seconds, > rtems_shell_wait_for_input_notification notification, > - void *notification_arg > + void *notification_arg, > + int desired_input > ) > { > struct termios term; > @@ -68,11 +69,12 @@ rtems_status_code rtems_shell_wait_for_input( > int i = 0; > > for (i = 0; i < timeout_in_seconds && !input_detected; ++i) { > - char c; > + unsigned char c; > > (*notification)(fd, timeout_in_seconds - i, notification_arg); > > - input_detected = read(fd, &c, sizeof(c)) > 0; > + input_detected = read(fd, &c, sizeof(c)) > 0 > + && (desired_input == -1 || desired_input == c); I'd suggest desired_input < 0. Also, desired_input of 0 might make sense, and be more logical to understand? Can one send a '\0' to the shell without any other character?
> } > > sc = restore_serial_settings(fd, &term); > @@ -83,3 +85,19 @@ rtems_status_code rtems_shell_wait_for_input( > > return sc; > } > + > +rtems_status_code rtems_shell_wait_for_input( > + int fd, > + int timeout_in_seconds, > + rtems_shell_wait_for_input_notification notification, > + void *notification_arg > +) > +{ > + return rtems_shell_wait_for_explicit_input( > + fd, > + timeout_in_seconds, > + notification, > + notification_arg, > + -1 > + ); > +} > diff --git a/cpukit/libmisc/shell/shell.h b/cpukit/libmisc/shell/shell.h > index ea8532d..4d545d6 100644 > --- a/cpukit/libmisc/shell/shell.h > +++ b/cpukit/libmisc/shell/shell.h > @@ -322,6 +322,24 @@ extern rtems_status_code rtems_shell_wait_for_input( > void *notification_arg > ); > > +/** > + * @brief Waits for explicit input. > + * > + * @param desired_input An explicit unsigned character to wait for or -1 to > + * accept any input. > + * > + * @retval RTEMS_SUCCESSFUL Input detected. > + * @retval RTEMS_TIMEOUT Timeout expired. > + * @retval RTEMS_UNSATISFIED Cannot change or restore termios attributes. > + */ > +extern rtems_status_code rtems_shell_wait_for_explicit_input( > + int fd, > + int timeout_in_seconds, > + rtems_shell_wait_for_input_notification notification, > + void *notification_arg, > + int desired_input > +); > + > extern int rtems_shell_main_monitor(int argc, char **argv); > > /* > -- > 1.8.4.5 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel