Home | History | Annotate | Download | only in include
      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