diff options
author | Alexander Krutwig <alexander.krutwig@embedded-brains.de> | 2016-06-02 13:29:45 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-06-06 12:57:07 +0200 |
commit | a2597f31602ec9d23c26e119d3ac512e7af4daa4 (patch) | |
tree | 99b29f38d46285de6fb072362e8830f63147e720 /cpukit/libmisc/shell | |
parent | mghttpd: Add RTEMS printer support (diff) | |
download | rtems-a2597f31602ec9d23c26e119d3ac512e7af4daa4.tar.bz2 |
shell: Add rtems_shell_wait_for_explicit_input()
Diffstat (limited to 'cpukit/libmisc/shell')
-rw-r--r-- | cpukit/libmisc/shell/shell-wait-for-input.c | 26 | ||||
-rw-r--r-- | 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); /* |