shell: Add rtems_shell_wait_for_explicit_input()

This commit is contained in:
Alexander Krutwig
2016-06-02 13:29:45 +02:00
committed by Sebastian Huber
parent 214156d98c
commit a2597f3160
2 changed files with 40 additions and 4 deletions

View File

@@ -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
);
}

View File

@@ -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);
/*