]> git.proxmox.com Git - mirror_edk2.git/blob - EdkModulePkg/Universal/Console/Terminal/Dxe/Terminal.h
2382d86f7e562c9e7696197fdabbf3432be2f308
[mirror_edk2.git] / EdkModulePkg / Universal / Console / Terminal / Dxe / Terminal.h
1 /*++
2
3 Copyright (c) 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 terminal.h
15
16 Abstract:
17
18
19 Revision History
20
21 --*/
22
23 #ifndef _TERMINAL_H
24 #define _TERMINAL_H
25
26 #define RAW_FIFO_MAX_NUMBER 256
27 #define FIFO_MAX_NUMBER 128
28
29 typedef struct {
30 UINT8 Head;
31 UINT8 Tail;
32 UINT8 Data[RAW_FIFO_MAX_NUMBER + 1];
33 } RAW_DATA_FIFO;
34
35 typedef struct {
36 UINT8 Head;
37 UINT8 Tail;
38 UINT16 Data[FIFO_MAX_NUMBER + 1];
39 } UNICODE_FIFO;
40
41 typedef struct {
42 UINT8 Head;
43 UINT8 Tail;
44 EFI_INPUT_KEY Data[FIFO_MAX_NUMBER + 1];
45 } EFI_KEY_FIFO;
46
47 #define TERMINAL_DEV_SIGNATURE EFI_SIGNATURE_32 ('t', 'm', 'n', 'l')
48
49 typedef struct {
50 UINTN Signature;
51 EFI_HANDLE Handle;
52 UINT8 TerminalType;
53 EFI_SERIAL_IO_PROTOCOL *SerialIo;
54 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
55 VENDOR_DEVICE_PATH Node;
56 EFI_SIMPLE_TEXT_IN_PROTOCOL SimpleInput;
57 EFI_SIMPLE_TEXT_OUT_PROTOCOL SimpleTextOutput;
58 EFI_SIMPLE_TEXT_OUTPUT_MODE SimpleTextOutputMode;
59 UINTN SerialInTimeOut;
60 RAW_DATA_FIFO RawFiFo;
61 UNICODE_FIFO UnicodeFiFo;
62 EFI_KEY_FIFO EfiKeyFiFo;
63 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
64 EFI_EVENT TwoSecondTimeOut;
65 UINT32 InputState;
66 UINT32 ResetState;
67
68 //
69 // Esc could not be output to the screen by user,
70 // but the terminal driver need to output it to
71 // the terminal emulation software to send control sequence.
72 // This boolean is used by the terminal driver only
73 // to indicate whether the Esc could be sent or not.
74 //
75 BOOLEAN OutputEscChar;
76 } TERMINAL_DEV;
77
78 #define INPUT_STATE_DEFAULT 0x00
79 #define INPUT_STATE_ESC 0x01
80 #define INPUT_STATE_CSI 0x02
81 #define INPUT_STATE_LEFTOPENBRACKET 0x04
82 #define INPUT_STATE_O 0x08
83 #define INPUT_STATE_2 0x10
84
85 #define RESET_STATE_DEFAULT 0x00
86 #define RESET_STATE_ESC_R 0x01
87 #define RESET_STATE_ESC_R_ESC_r 0x02
88
89 #define TERMINAL_CON_IN_DEV_FROM_THIS(a) CR (a, TERMINAL_DEV, SimpleInput, TERMINAL_DEV_SIGNATURE)
90 #define TERMINAL_CON_OUT_DEV_FROM_THIS(a) CR (a, TERMINAL_DEV, SimpleTextOutput, TERMINAL_DEV_SIGNATURE)
91
92 typedef union {
93 UINT8 Utf8_1;
94 UINT8 Utf8_2[2];
95 UINT8 Utf8_3[3];
96 } UTF8_CHAR;
97
98 #define PcAnsiType 0
99 #define VT100Type 1
100 #define VT100PlusType 2
101 #define VTUTF8Type 3
102
103 #define LEFTOPENBRACKET 0x5b // '['
104 #define ACAP 0x41
105 #define BCAP 0x42
106 #define CCAP 0x43
107 #define DCAP 0x44
108
109 #define MODE0_COLUMN_COUNT 80
110 #define MODE0_ROW_COUNT 25
111
112 #define BACKSPACE 8
113 #define ESC 27
114 #define CSI 0x9B
115 #define DEL 127
116 #define BRIGHT_CONTROL_OFFSET 2
117 #define FOREGROUND_CONTROL_OFFSET 6
118 #define BACKGROUND_CONTROL_OFFSET 11
119 #define ROW_OFFSET 2
120 #define COLUMN_OFFSET 5
121
122 typedef struct {
123 UINT16 Unicode;
124 CHAR8 PcAnsi;
125 CHAR8 Ascii;
126 } UNICODE_TO_CHAR;
127
128 #define VarConsoleInpDev L"ConInDev"
129 #define VarConsoleOutDev L"ConOutDev"
130 #define VarErrorOutDev L"ErrOutDev"
131
132 //
133 // Global Variables
134 //
135 extern EFI_DRIVER_BINDING_PROTOCOL gTerminalDriverBinding;
136 extern EFI_COMPONENT_NAME_PROTOCOL gTerminalComponentName;
137
138 //
139 // Prototypes
140 //
141 EFI_STATUS
142 EFIAPI
143 InitializeTerminal (
144 IN EFI_HANDLE ImageHandle,
145 IN EFI_SYSTEM_TABLE *SystemTable
146 )
147 ;
148
149 EFI_STATUS
150 EFIAPI
151 TerminalConInReset (
152 IN EFI_SIMPLE_TEXT_IN_PROTOCOL *This,
153 IN BOOLEAN ExtendedVerification
154 )
155 ;
156
157 EFI_STATUS
158 EFIAPI
159 TerminalConInReadKeyStroke (
160 IN EFI_SIMPLE_TEXT_IN_PROTOCOL *This,
161 OUT EFI_INPUT_KEY *Key
162 )
163 ;
164
165 VOID
166 EFIAPI
167 TerminalConInWaitForKey (
168 IN EFI_EVENT Event,
169 IN VOID *Context
170 )
171 ;
172
173 EFI_STATUS
174 EFIAPI
175 TerminalConOutReset (
176 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
177 IN BOOLEAN ExtendedVerification
178 )
179 ;
180
181 EFI_STATUS
182 EFIAPI
183 TerminalConOutOutputString (
184 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
185 IN CHAR16 *WString
186 )
187 ;
188
189 EFI_STATUS
190 EFIAPI
191 TerminalConOutTestString (
192 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
193 IN CHAR16 *WString
194 )
195 ;
196
197 EFI_STATUS
198 EFIAPI
199 TerminalConOutQueryMode (
200 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
201 IN UINTN ModeNumber,
202 OUT UINTN *Columns,
203 OUT UINTN *Rows
204 )
205 ;
206
207 EFI_STATUS
208 EFIAPI
209 TerminalConOutSetMode (
210 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
211 IN UINTN ModeNumber
212 )
213 ;
214
215 EFI_STATUS
216 EFIAPI
217 TerminalConOutSetAttribute (
218 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
219 IN UINTN Attribute
220 )
221 ;
222
223 EFI_STATUS
224 EFIAPI
225 TerminalConOutClearScreen (
226 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This
227 )
228 ;
229
230 EFI_STATUS
231 EFIAPI
232 TerminalConOutSetCursorPosition (
233 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
234 IN UINTN Column,
235 IN UINTN Row
236 )
237 ;
238
239 EFI_STATUS
240 EFIAPI
241 TerminalConOutEnableCursor (
242 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
243 IN BOOLEAN Visible
244 )
245 ;
246
247 //
248 // internal functions
249 //
250 EFI_STATUS
251 TerminalConInCheckForKey (
252 IN EFI_SIMPLE_TEXT_IN_PROTOCOL *This
253 )
254 ;
255
256 VOID
257 TerminalUpdateConsoleDevVariable (
258 IN CHAR16 *VariableName,
259 IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath
260 )
261 ;
262
263 VOID
264 TerminalRemoveConsoleDevVariable (
265 IN CHAR16 *VariableName,
266 IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath
267 )
268 ;
269
270 VOID *
271 TerminalGetVariableAndSize (
272 IN CHAR16 *Name,
273 IN EFI_GUID *VendorGuid,
274 OUT UINTN *VariableSize
275 )
276 ;
277
278 EFI_STATUS
279 SetTerminalDevicePath (
280 IN UINT8 TerminalType,
281 IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
282 OUT EFI_DEVICE_PATH_PROTOCOL **TerminalDevicePath
283 )
284 ;
285
286 VOID
287 InitializeRawFiFo (
288 IN TERMINAL_DEV *TerminalDevice
289 )
290 ;
291
292 VOID
293 InitializeUnicodeFiFo (
294 IN TERMINAL_DEV *TerminalDevice
295 )
296 ;
297
298 VOID
299 InitializeEfiKeyFiFo (
300 IN TERMINAL_DEV *TerminalDevice
301 )
302 ;
303
304 EFI_STATUS
305 GetOneKeyFromSerial (
306 EFI_SERIAL_IO_PROTOCOL *SerialIo,
307 UINT8 *Input
308 )
309 ;
310
311 BOOLEAN
312 RawFiFoInsertOneKey (
313 TERMINAL_DEV *TerminalDevice,
314 UINT8 Input
315 )
316 ;
317
318 BOOLEAN
319 RawFiFoRemoveOneKey (
320 TERMINAL_DEV *TerminalDevice,
321 UINT8 *Output
322 )
323 ;
324
325 BOOLEAN
326 IsRawFiFoEmpty (
327 TERMINAL_DEV *TerminalDevice
328 )
329 ;
330
331 BOOLEAN
332 IsRawFiFoFull (
333 TERMINAL_DEV *TerminalDevice
334 )
335 ;
336
337 BOOLEAN
338 EfiKeyFiFoInsertOneKey (
339 TERMINAL_DEV *TerminalDevice,
340 EFI_INPUT_KEY Key
341 )
342 ;
343
344 BOOLEAN
345 EfiKeyFiFoRemoveOneKey (
346 TERMINAL_DEV *TerminalDevice,
347 EFI_INPUT_KEY *Output
348 )
349 ;
350
351 BOOLEAN
352 IsEfiKeyFiFoEmpty (
353 TERMINAL_DEV *TerminalDevice
354 )
355 ;
356
357 BOOLEAN
358 IsEfiKeyFiFoFull (
359 TERMINAL_DEV *TerminalDevice
360 )
361 ;
362
363 BOOLEAN
364 UnicodeFiFoInsertOneKey (
365 TERMINAL_DEV *TerminalDevice,
366 UINT16 Input
367 )
368 ;
369
370 BOOLEAN
371 UnicodeFiFoRemoveOneKey (
372 TERMINAL_DEV *TerminalDevice,
373 UINT16 *Output
374 )
375 ;
376
377 BOOLEAN
378 IsUnicodeFiFoEmpty (
379 TERMINAL_DEV *TerminalDevice
380 )
381 ;
382
383 BOOLEAN
384 IsUnicodeFiFoFull (
385 TERMINAL_DEV *TerminalDevice
386 )
387 ;
388
389 UINT8
390 UnicodeFiFoGetKeyCount (
391 TERMINAL_DEV *TerminalDevice
392 )
393 ;
394
395 VOID
396 TranslateRawDataToEfiKey (
397 IN TERMINAL_DEV *TerminalDevice
398 )
399 ;
400
401 //
402 // internal functions for PC ANSI
403 //
404 VOID
405 AnsiRawDataToUnicode (
406 IN TERMINAL_DEV *PcAnsiDevice
407 )
408 ;
409
410 VOID
411 UnicodeToEfiKey (
412 IN TERMINAL_DEV *PcAnsiDevice
413 )
414 ;
415
416 EFI_STATUS
417 AnsiTestString (
418 IN TERMINAL_DEV *TerminalDevice,
419 IN CHAR16 *WString
420 )
421 ;
422
423 //
424 // internal functions for VT100
425 //
426 EFI_STATUS
427 VT100TestString (
428 IN TERMINAL_DEV *VT100Device,
429 IN CHAR16 *WString
430 )
431 ;
432
433 //
434 // internal functions for VT100Plus
435 //
436 EFI_STATUS
437 VT100PlusTestString (
438 IN TERMINAL_DEV *TerminalDevice,
439 IN CHAR16 *WString
440 )
441 ;
442
443 //
444 // internal functions for VTUTF8
445 //
446 VOID
447 VTUTF8RawDataToUnicode (
448 IN TERMINAL_DEV *VtUtf8Device
449 )
450 ;
451
452 EFI_STATUS
453 VTUTF8TestString (
454 IN TERMINAL_DEV *TerminalDevice,
455 IN CHAR16 *WString
456 )
457 ;
458
459 VOID
460 UnicodeToUtf8 (
461 IN CHAR16 Unicode,
462 OUT UTF8_CHAR *Utf8Char,
463 OUT UINT8 *ValidBytes
464 )
465 ;
466
467 VOID
468 GetOneValidUtf8Char (
469 IN TERMINAL_DEV *Utf8Device,
470 OUT UTF8_CHAR *Utf8Char,
471 OUT UINT8 *ValidBytes
472 )
473 ;
474
475 VOID
476 Utf8ToUnicode (
477 IN UTF8_CHAR Utf8Char,
478 IN UINT8 ValidBytes,
479 OUT CHAR16 *UnicodeChar
480 )
481 ;
482
483 //
484 // functions for boxdraw unicode
485 //
486 BOOLEAN
487 TerminalIsValidTextGraphics (
488 IN CHAR16 Graphic,
489 OUT CHAR8 *PcAnsi, OPTIONAL
490 OUT CHAR8 *Ascii OPTIONAL
491 )
492 ;
493
494 BOOLEAN
495 TerminalIsValidAscii (
496 IN CHAR16 Ascii
497 )
498 ;
499
500 BOOLEAN
501 TerminalIsValidEfiCntlChar (
502 IN CHAR16 CharC
503 )
504 ;
505
506 #endif