[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