b1fe955b2b6c389dd67e3b04f12157cb9702f2ba
[gpxe.git] / src / include / console.h
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 /**
18  * A console driver
19  *
20  * Defines the functions that implement a particular console type.
21  * Must be made part of the console drivers table by using
22  * #__console_driver.
23  *
24  * @note Consoles that cannot be used before their INIT_FN() has
25  * completed should set #disabled=1 initially.  This allows other
26  * console devices to still be used to print out early debugging
27  * messages.
28  *
29  */
30 struct console_driver {
31         /** Console is disabled.
32          *
33          * The console's putchar(), getchar() and iskey() methods will
34          * not be called while #disabled==1.  Typically the
35          * console's initialisation functions (called via INIT_FN())
36          * will set #disabled=0 upon completion.
37          *
38          */
39         int disabled;
40
41         /** Write a character to the console.
42          *
43          * @v character         Character to be written
44          * @ret None            -
45          * @err None            -
46          *
47          */
48         void ( *putchar ) ( int character );
49
50         /** Read a character from the console.
51          *
52          * @v None              -
53          * @ret character       Character read
54          * @err None            -
55          *
56          * If no character is available to be read, this method will
57          * block.  The character read should not be echoed back to the
58          * console.
59          *
60          */
61         int ( *getchar ) ( void );
62
63         /** Check for available input.
64          *
65          * @v None              -
66          * @ret True            Input is available
67          * @ret False           Input is not available
68          * @err None            -
69          *
70          * This should return True if a subsequent call to getchar()
71          * will not block.
72          *
73          */
74         int ( *iskey ) ( void );
75 };
76
77 /**
78  * Mark a <tt> struct console_driver </tt> as being part of the
79  * console drivers table.
80  *
81  * Use as e.g.
82  *
83  * @code
84  *
85  *   struct console_driver my_console __console_driver = {
86  *      .putchar = my_putchar,
87  *      .getchar = my_getchar,
88  *      .iskey = my_iskey,
89  *   };
90  *
91  * @endcode
92  *
93  */
94 #define __console_driver __table ( struct console_driver, console, 01 )
95
96 /* Function prototypes */
97
98 extern void putchar ( int character );
99 extern int getchar ( void );
100 extern int iskey ( void );
101 extern int getkey ( void );
102
103 #endif /* CONSOLE_H */