summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Krutwig <alexander.krutwig@embedded-brains.de>2016-06-02 13:29:45 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-06-06 12:57:07 +0200
commita2597f31602ec9d23c26e119d3ac512e7af4daa4 (patch)
tree99b29f38d46285de6fb072362e8830f63147e720
parent214156d98c3421a84fe8ad27ba8891651eea7291 (diff)
shell: Add rtems_shell_wait_for_explicit_input()
-rw-r--r--cpukit/libmisc/shell/shell-wait-for-input.c26
-rw-r--r--cpukit/libmisc/shell/shell.h18
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);
/*