mirror of
https://xff.cz/git/u-boot/
synced 2025-08-31 16:22:36 +02:00
console: Add a console buffer
It is useful to be able to record console output and provide console input via a buffer. This provides sandbox with the ability to run a command and check its output. If the console is set to silent then no visible output is generated. This also provides a means to fix the problem where tests produce unwanted output, such as errors or warnings. This can be confusing. We can instead set the console to silent and record this output. It can be checked later in the test if required. It is possible that this may prove useful for non-test situations. For example the console output may be suppressed for normal operations, but recorded and stored for access by the OS. That feature is not implemented at present. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -378,6 +378,15 @@ int getc(void)
|
||||
if (!gd->have_console)
|
||||
return 0;
|
||||
|
||||
#ifdef CONFIG_CONSOLE_RECORD
|
||||
if (gd->console_in.start) {
|
||||
int ch;
|
||||
|
||||
ch = membuff_getbyte(&gd->console_in);
|
||||
if (ch != -1)
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
if (gd->flags & GD_FLG_DEVINIT) {
|
||||
/* Get from the standard input */
|
||||
return fgetc(stdin);
|
||||
@@ -396,7 +405,12 @@ int tstc(void)
|
||||
|
||||
if (!gd->have_console)
|
||||
return 0;
|
||||
|
||||
#ifdef CONFIG_CONSOLE_RECORD
|
||||
if (gd->console_in.start) {
|
||||
if (membuff_peekbyte(&gd->console_in) != -1)
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
if (gd->flags & GD_FLG_DEVINIT) {
|
||||
/* Test the standard input */
|
||||
return ftstc(stdin);
|
||||
@@ -470,6 +484,10 @@ void putc(const char c)
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_CONSOLE_RECORD
|
||||
if (gd && (gd->flags & GD_FLG_RECORD) && gd->console_out.start)
|
||||
membuff_putbyte(&gd->console_out, c);
|
||||
#endif
|
||||
#ifdef CONFIG_SILENT_CONSOLE
|
||||
if (gd->flags & GD_FLG_SILENT)
|
||||
return;
|
||||
@@ -513,6 +531,10 @@ void puts(const char *s)
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_CONSOLE_RECORD
|
||||
if (gd && (gd->flags & GD_FLG_RECORD) && gd->console_out.start)
|
||||
membuff_put(&gd->console_out, s, strlen(s));
|
||||
#endif
|
||||
#ifdef CONFIG_SILENT_CONSOLE
|
||||
if (gd->flags & GD_FLG_SILENT)
|
||||
return;
|
||||
@@ -575,6 +597,32 @@ int vprintf(const char *fmt, va_list args)
|
||||
return i;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CONSOLE_RECORD
|
||||
int console_record_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = membuff_new(&gd->console_out, CONFIG_CONSOLE_RECORD_OUT_SIZE);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = membuff_new(&gd->console_in, CONFIG_CONSOLE_RECORD_IN_SIZE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void console_record_reset(void)
|
||||
{
|
||||
membuff_purge(&gd->console_out);
|
||||
membuff_purge(&gd->console_in);
|
||||
}
|
||||
|
||||
void console_record_reset_enable(void)
|
||||
{
|
||||
console_record_reset();
|
||||
gd->flags |= GD_FLG_RECORD;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* test if ctrl-c was pressed */
|
||||
static int ctrlc_disabled = 0; /* see disable_ctrl() */
|
||||
static int ctrlc_was_pressed = 0;
|
||||
|
Reference in New Issue
Block a user