9
0
Fork 0

console_countdown: add possibility to abort countdown by external commands

This patch makes it possible to abort a console countdown by an external
command, for example when fastboot is used. This requires additional
modifications in the external commands, a call to "console_countdown_abort()"
has to be inserted.

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Marc Kleine-Budde 2017-03-10 07:05:22 +01:00 committed by Sascha Hauer
parent 3d92ea4738
commit e3dda8553e
3 changed files with 23 additions and 2 deletions

View File

@ -32,7 +32,7 @@ static int do_timeout(int argc, char *argv[])
char str[2] = { };
const char *varname = NULL;
while((opt = getopt(argc, argv, "crsav:")) > 0) {
while ((opt = getopt(argc, argv, "crsav:e")) > 0) {
switch(opt) {
case 'r':
flags |= CONSOLE_COUNTDOWN_RETURN;
@ -46,6 +46,9 @@ static int do_timeout(int argc, char *argv[])
case 's':
flags |= CONSOLE_COUNTDOWN_SILENT;
break;
case 'e':
flags |= CONSOLE_COUNTDOWN_EXTERN;
break;
case 'v':
varname = optarg;
break;
@ -73,6 +76,7 @@ BAREBOX_CMD_HELP_TEXT("Options:")
BAREBOX_CMD_HELP_OPT("-a", "interrupt on any key")
BAREBOX_CMD_HELP_OPT("-c", "interrupt on Ctrl-C")
BAREBOX_CMD_HELP_OPT("-r", "interrupt on RETURN")
BAREBOX_CMD_HELP_OPT("-e", "interrupt on external commands (i.e. fastboot")
BAREBOX_CMD_HELP_OPT("-s", "silent mode")
BAREBOX_CMD_HELP_OPT("-v <VARIABLE>", "export pressed key to environment")
BAREBOX_CMD_HELP_END
@ -80,7 +84,7 @@ BAREBOX_CMD_HELP_END
BAREBOX_CMD_START(timeout)
.cmd = do_timeout,
BAREBOX_CMD_DESC("wait for a specified timeout")
BAREBOX_CMD_OPTS("[-acrsv] SECONDS")
BAREBOX_CMD_OPTS("[-acrsev] SECONDS")
BAREBOX_CMD_GROUP(CMD_GRP_CONSOLE)
BAREBOX_CMD_HELP(cmd_timeout_help)
BAREBOX_CMD_END

View File

@ -23,6 +23,13 @@
#include <console_countdown.h>
#include <stdio.h>
static bool console_countdown_timeout_abort;
void console_countdown_abort(void)
{
console_countdown_timeout_abort = true;
}
int console_countdown(int timeout_s, unsigned flags, char *out_key)
{
uint64_t start, second;
@ -48,6 +55,9 @@ int console_countdown(int timeout_s, unsigned flags, char *out_key)
goto out;
key = 0;
}
if ((flags & CONSOLE_COUNTDOWN_EXTERN) &&
console_countdown_timeout_abort)
goto out;
if (!(flags & CONSOLE_COUNTDOWN_SILENT) &&
is_timeout(second, SECOND)) {
printf("\b\b\b\b%4d", countdown--);
@ -55,6 +65,10 @@ int console_countdown(int timeout_s, unsigned flags, char *out_key)
}
} while (!is_timeout(start, timeout_s * SECOND));
if ((flags & CONSOLE_COUNTDOWN_EXTERN) &&
console_countdown_timeout_abort)
goto out;
ret = 0;
out:
@ -62,6 +76,7 @@ int console_countdown(int timeout_s, unsigned flags, char *out_key)
printf("\n");
if (key && out_key)
*out_key = key;
console_countdown_timeout_abort = false;
return ret;
}

View File

@ -5,7 +5,9 @@
#define CONSOLE_COUNTDOWN_ANYKEY (1 << 1)
#define CONSOLE_COUNTDOWN_RETURN (1 << 3)
#define CONSOLE_COUNTDOWN_CTRLC (1 << 4)
#define CONSOLE_COUNTDOWN_EXTERN (1 << 5)
int console_countdown(int timeout_s, unsigned flags, char *out_key);
void console_countdown_abort(void);
#endif /* __CONSOLE_COUNTDOWN_H */