1 #ifndef CONSOLE_H 2 #define CONSOLE_H 3 4 #include <gpxe/tables.h> 5 6 /** @file 7 * 8 * User interaction. 9 * 10 * Various console devices can be selected via the build options 11 * CONSOLE_FIRMWARE, CONSOLE_SERIAL etc. The console functions 12 * putchar(), getchar() and iskey() delegate to the individual console 13 * drivers. 14 * 15 */ 16 17 FILE_LICENCE ( GPL2_OR_LATER ); 18 19 /** 20 * A console driver 21 * 22 * Defines the functions that implement a particular console type. 23 * Must be made part of the console drivers table by using 24 * #__console_driver. 25 * 26 * @note Consoles that cannot be used before their initialisation 27 * function has completed should set #disabled=1 initially. This 28 * allows other console devices to still be used to print out early 29 * debugging messages. 30 * 31 */ 32 struct console_driver { 33 /** Console is disabled. 34 * 35 * The console's putchar(), putline(), getchar() and iskey() 36 * methods will not be called while #disabled==1. Typically 37 * the console's initialisation functions will set #disabled=0 38 * upon completion. 39 * 40 */ 41 int disabled; 42 43 /** Write a character to the console. 44 * 45 * @v character Character to be written 46 * @ret None - 47 * @err None - 48 * 49 */ 50 void ( *putchar ) ( int character ); 51 52 /** Write an entire line to the console. 53 * This is intended to be used by line-oriented output media, 54 * like system logging facilities or line printers. 55 * Line output will not contain non-printable characters. 56 * 57 * @v linebuffer Pointer to the \0-terminated line 58 * @ret None - 59 * @err None - 60 */ 61 void ( * putline ) ( unsigned char * linebuffer ); 62 63 /** Read a character from the console. 64 * 65 * @v None - 66 * @ret character Character read 67 * @err None - 68 * 69 * If no character is available to be read, this method will 70 * block. The character read should not be echoed back to the 71 * console. 72 * 73 */ 74 int ( *getchar ) ( void ); 75 76 /** Check for available input. 77 * 78 * @v None - 79 * @ret True Input is available 80 * @ret False Input is not available 81 * @err None - 82 * 83 * This should return True if a subsequent call to getchar() 84 * will not block. 85 * 86 */ 87 int ( *iskey ) ( void ); 88 }; 89 90 /** Console driver table */ 91 #define CONSOLES __table ( struct console_driver, "consoles" ) 92 93 /** 94 * Mark a <tt> struct console_driver </tt> as being part of the 95 * console drivers table. 96 * 97 * Use as e.g. 98 * 99 * @code 100 * 101 * struct console_driver my_console __console_driver = { 102 * .putchar = my_putchar, 103 * .getchar = my_getchar, 104 * .iskey = my_iskey, 105 * }; 106 * 107 * @endcode 108 * 109 */ 110 #define __console_driver __table_entry ( CONSOLES, 01 ) 111 112 /* Function prototypes */ 113 114 extern void putchar ( int character ); 115 extern int getchar ( void ); 116 extern int iskey ( void ); 117 extern int getkey ( void ); 118 119 #endif /* CONSOLE_H */ 120