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