From a2597f31602ec9d23c26e119d3ac512e7af4daa4 Mon Sep 17 00:00:00 2001 From: Alexander Krutwig Date: Thu, 2 Jun 2016 13:29:45 +0200 Subject: shell: Add rtems_shell_wait_for_explicit_input() --- 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 a4bfc21008..69ab883dc0 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); } 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 ea8532d332..4d545d6a41 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); /* -- cgit v1.2.3