forked from Imagelibrary/rtems
shell: Add rtems_shell_wait_for_explicit_input()
This commit is contained in:
committed by
Sebastian Huber
parent
214156d98c
commit
a2597f3160
@@ -53,11 +53,12 @@ static rtems_status_code restore_serial_settings(int fd, struct termios *term)
|
|||||||
return rv == 0 ? RTEMS_SUCCESSFUL : RTEMS_UNSATISFIED;
|
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 fd,
|
||||||
int timeout_in_seconds,
|
int timeout_in_seconds,
|
||||||
rtems_shell_wait_for_input_notification notification,
|
rtems_shell_wait_for_input_notification notification,
|
||||||
void *notification_arg
|
void *notification_arg,
|
||||||
|
int desired_input
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
struct termios term;
|
struct termios term;
|
||||||
@@ -68,11 +69,12 @@ rtems_status_code rtems_shell_wait_for_input(
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
for (i = 0; i < timeout_in_seconds && !input_detected; ++i) {
|
for (i = 0; i < timeout_in_seconds && !input_detected; ++i) {
|
||||||
char c;
|
unsigned char c;
|
||||||
|
|
||||||
(*notification)(fd, timeout_in_seconds - i, notification_arg);
|
(*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);
|
sc = restore_serial_settings(fd, &term);
|
||||||
@@ -83,3 +85,19 @@ rtems_status_code rtems_shell_wait_for_input(
|
|||||||
|
|
||||||
return sc;
|
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
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -322,6 +322,24 @@ extern rtems_status_code rtems_shell_wait_for_input(
|
|||||||
void *notification_arg
|
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);
|
extern int rtems_shell_main_monitor(int argc, char **argv);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user