[PATCH] shell: Add rtems_shell_wait_for_explicit_input()
Gedare Bloom
gedare at rtems.org
Fri Jun 3 13:10:26 UTC 2016
On Fri, Jun 3, 2016 at 4:05 AM, Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
> 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);
I'd suggest desired_input < 0. Also, desired_input of 0 might make
sense, and be more logical to understand? Can one send a '\0' to the
shell without any other character?
> }
>
> 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
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
More information about the devel
mailing list