[PATCH] shell: Add rtems_shell_wait_for_explicit_input()
Sebastian Huber
sebastian.huber at embedded-brains.de
Fri Jun 3 08:05:54 UTC 2016
From: Alexander Krutwig <alexander.krutwig at 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);
}
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
More information about the devel
mailing list