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 */ |
---|