| #ifndef CONSOLE_H |
| #define CONSOLE_H |
| |
| #include <gpxe/tables.h> |
| |
| /** @file |
| * |
| * User interaction. |
| * |
| * Various console devices can be selected via the build options |
| * CONSOLE_FIRMWARE, CONSOLE_SERIAL etc. The console functions |
| * putchar(), getchar() and iskey() delegate to the individual console |
| * drivers. |
| * |
| */ |
| |
| FILE_LICENCE ( GPL2_OR_LATER ); |
| |
| /** |
| * A console driver |
| * |
| * Defines the functions that implement a particular console type. |
| * Must be made part of the console drivers table by using |
| * #__console_driver. |
| * |
| * @note Consoles that cannot be used before their initialisation |
| * function has completed should set #disabled=1 initially. This |
| * allows other console devices to still be used to print out early |
| * debugging messages. |
| * |
| */ |
| struct console_driver { |
| /** Console is disabled. |
| * |
| * The console's putchar(), putline(), getchar() and iskey() |
| * methods will not be called while #disabled==1. Typically |
| * the console's initialisation functions will set #disabled=0 |
| * upon completion. |
| * |
| */ |
| int disabled; |
| |
| /** Write a character to the console. |
| * |
| * @v character Character to be written |
| * @ret None - |
| * @err None - |
| * |
| */ |
| void ( *putchar ) ( int character ); |
| |
| /** Write an entire line to the console. |
| * This is intended to be used by line-oriented output media, |
| * like system logging facilities or line printers. |
| * Line output will not contain non-printable characters. |
| * |
| * @v linebuffer Pointer to the \0-terminated line |
| * @ret None - |
| * @err None - |
| */ |
| void ( * putline ) ( unsigned char * linebuffer ); |
| |
| /** Read a character from the console. |
| * |
| * @v None - |
| * @ret character Character read |
| * @err None - |
| * |
| * If no character is available to be read, this method will |
| * block. The character read should not be echoed back to the |
| * console. |
| * |
| */ |
| int ( *getchar ) ( void ); |
| |
| /** Check for available input. |
| * |
| * @v None - |
| * @ret True Input is available |
| * @ret False Input is not available |
| * @err None - |
| * |
| * This should return True if a subsequent call to getchar() |
| * will not block. |
| * |
| */ |
| int ( *iskey ) ( void ); |
| }; |
| |
| /** Console driver table */ |
| #define CONSOLES __table ( struct console_driver, "consoles" ) |
| |
| /** |
| * Mark a <tt> struct console_driver </tt> as being part of the |
| * console drivers table. |
| * |
| * Use as e.g. |
| * |
| * @code |
| * |
| * struct console_driver my_console __console_driver = { |
| * .putchar = my_putchar, |
| * .getchar = my_getchar, |
| * .iskey = my_iskey, |
| * }; |
| * |
| * @endcode |
| * |
| */ |
| #define __console_driver __table_entry ( CONSOLES, 01 ) |
| |
| /* Function prototypes */ |
| |
| extern void putchar ( int character ); |
| extern int getchar ( void ); |
| extern int iskey ( void ); |
| extern int getkey ( void ); |
| |
| #endif /* CONSOLE_H */ |