Bring the user-land console driver closer to uKernel

This commit is contained in:
Pierre Pronchery 2018-06-20 21:59:39 +02:00
parent 4ac899b883
commit ecb1d85402

View File

@ -24,23 +24,29 @@ static size_t _console_buf_cnt = 0;
/* console_init */ /* console_init */
ukConsole * console_init(ukBus * bus, char const * name) ukConsole * console_init(ukBus * bus, char const * name)
{ {
ukConsole * console = NULL; ukConsole * drivers[] = {
&_stdio_console
};
size_t i;
if(strcmp(name, "stdio") == 0) if(_console != NULL)
return _console;
for(i = 0; i < sizeof(drivers) / sizeof(*drivers); i++)
if(strncmp(drivers[i]->name, name,
strlen(drivers[i]->name)) == 0
&& drivers[i]->init != NULL)
{ {
printf("%s%s%s\n", name, (bus != NULL) ? " at " : "", printf("%s%s%s\n", name, (bus != NULL) ? " at " : "",
(bus != NULL) ? bus->name : ""); (bus != NULL) ? bus->name : "");
console = _stdio_console_init(bus); _console = _stdio_console_init(bus);
} }
else if(_console == NULL)
{ {
errno = ENODEV; errno = ENODEV;
return NULL; return NULL;
} }
if(_console == NULL)
_console = console;
_console->print(_console, _console_buf, _console_buf_cnt); _console->print(_console, _console_buf, _console_buf_cnt);
return console; return _console;
} }
@ -49,6 +55,8 @@ ukConsole * console_init(ukBus * bus, char const * name)
/* console_get_default */ /* console_get_default */
ukConsole * console_get_default(void) ukConsole * console_get_default(void)
{ {
if(_console == NULL)
errno = ENODEV;
return _console; return _console;
} }
@ -57,8 +65,9 @@ ukConsole * console_get_default(void)
/* console_clear */ /* console_clear */
void console_clear(ukConsole * console) void console_clear(ukConsole * console)
{ {
if(console == NULL) if(console == NULL
console = console_get_default(); && (console = console_get_default()) == NULL)
return;
console->clear(console); console->clear(console);
} }