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
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.
26 #define RAW_FIFO_MAX_NUMBER 256
27 #define FIFO_MAX_NUMBER 128
32 UINT8 Data
[RAW_FIFO_MAX_NUMBER
+ 1];
38 UINT16 Data
[FIFO_MAX_NUMBER
+ 1];
44 EFI_INPUT_KEY Data
[FIFO_MAX_NUMBER
+ 1];
47 #define TERMINAL_DEV_SIGNATURE EFI_SIGNATURE_32 ('t', 'm', 'n', 'l')
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
;
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.
75 BOOLEAN OutputEscChar
;
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
85 #define RESET_STATE_DEFAULT 0x00
86 #define RESET_STATE_ESC_R 0x01
87 #define RESET_STATE_ESC_R_ESC_r 0x02
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)
100 #define VT100PlusType 2
103 #define LEFTOPENBRACKET 0x5b // '['
109 #define MODE0_COLUMN_COUNT 80
110 #define MODE0_ROW_COUNT 25
116 #define BRIGHT_CONTROL_OFFSET 2
117 #define FOREGROUND_CONTROL_OFFSET 6
118 #define BACKGROUND_CONTROL_OFFSET 11
120 #define COLUMN_OFFSET 5
128 #define VarConsoleInpDev L"ConInDev"
129 #define VarConsoleOutDev L"ConOutDev"
130 #define VarErrorOutDev L"ErrOutDev"
135 extern EFI_DRIVER_BINDING_PROTOCOL gTerminalDriverBinding
;
136 extern EFI_COMPONENT_NAME_PROTOCOL gTerminalComponentName
;
144 IN EFI_HANDLE ImageHandle
,
145 IN EFI_SYSTEM_TABLE
*SystemTable
152 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*This
,
153 IN BOOLEAN ExtendedVerification
159 TerminalConInReadKeyStroke (
160 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*This
,
161 OUT EFI_INPUT_KEY
*Key
167 TerminalConInWaitForKey (
175 TerminalConOutReset (
176 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
177 IN BOOLEAN ExtendedVerification
183 TerminalConOutOutputString (
184 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
191 TerminalConOutTestString (
192 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
199 TerminalConOutQueryMode (
200 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
209 TerminalConOutSetMode (
210 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
217 TerminalConOutSetAttribute (
218 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
225 TerminalConOutClearScreen (
226 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
232 TerminalConOutSetCursorPosition (
233 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
241 TerminalConOutEnableCursor (
242 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
248 // internal functions
251 TerminalConInCheckForKey (
252 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*This
257 TerminalUpdateConsoleDevVariable (
258 IN CHAR16
*VariableName
,
259 IN EFI_DEVICE_PATH_PROTOCOL
*ParentDevicePath
264 TerminalRemoveConsoleDevVariable (
265 IN CHAR16
*VariableName
,
266 IN EFI_DEVICE_PATH_PROTOCOL
*ParentDevicePath
271 TerminalGetVariableAndSize (
273 IN EFI_GUID
*VendorGuid
,
274 OUT UINTN
*VariableSize
279 SetTerminalDevicePath (
280 IN UINT8 TerminalType
,
281 IN EFI_DEVICE_PATH_PROTOCOL
*ParentDevicePath
,
282 OUT EFI_DEVICE_PATH_PROTOCOL
**TerminalDevicePath
288 IN TERMINAL_DEV
*TerminalDevice
293 InitializeUnicodeFiFo (
294 IN TERMINAL_DEV
*TerminalDevice
299 InitializeEfiKeyFiFo (
300 IN TERMINAL_DEV
*TerminalDevice
305 GetOneKeyFromSerial (
306 EFI_SERIAL_IO_PROTOCOL
*SerialIo
,
312 RawFiFoInsertOneKey (
313 TERMINAL_DEV
*TerminalDevice
,
319 RawFiFoRemoveOneKey (
320 TERMINAL_DEV
*TerminalDevice
,
327 TERMINAL_DEV
*TerminalDevice
333 TERMINAL_DEV
*TerminalDevice
338 EfiKeyFiFoInsertOneKey (
339 TERMINAL_DEV
*TerminalDevice
,
345 EfiKeyFiFoRemoveOneKey (
346 TERMINAL_DEV
*TerminalDevice
,
347 EFI_INPUT_KEY
*Output
353 TERMINAL_DEV
*TerminalDevice
359 TERMINAL_DEV
*TerminalDevice
364 UnicodeFiFoInsertOneKey (
365 TERMINAL_DEV
*TerminalDevice
,
371 UnicodeFiFoRemoveOneKey (
372 TERMINAL_DEV
*TerminalDevice
,
379 TERMINAL_DEV
*TerminalDevice
385 TERMINAL_DEV
*TerminalDevice
390 UnicodeFiFoGetKeyCount (
391 TERMINAL_DEV
*TerminalDevice
396 TranslateRawDataToEfiKey (
397 IN TERMINAL_DEV
*TerminalDevice
402 // internal functions for PC ANSI
405 AnsiRawDataToUnicode (
406 IN TERMINAL_DEV
*PcAnsiDevice
412 IN TERMINAL_DEV
*PcAnsiDevice
418 IN TERMINAL_DEV
*TerminalDevice
,
424 // internal functions for VT100
428 IN TERMINAL_DEV
*VT100Device
,
434 // internal functions for VT100Plus
437 VT100PlusTestString (
438 IN TERMINAL_DEV
*TerminalDevice
,
444 // internal functions for VTUTF8
447 VTUTF8RawDataToUnicode (
448 IN TERMINAL_DEV
*VtUtf8Device
454 IN TERMINAL_DEV
*TerminalDevice
,
462 OUT UTF8_CHAR
*Utf8Char
,
463 OUT UINT8
*ValidBytes
468 GetOneValidUtf8Char (
469 IN TERMINAL_DEV
*Utf8Device
,
470 OUT UTF8_CHAR
*Utf8Char
,
471 OUT UINT8
*ValidBytes
477 IN UTF8_CHAR Utf8Char
,
479 OUT CHAR16
*UnicodeChar
484 // functions for boxdraw unicode
487 TerminalIsValidTextGraphics (
489 OUT CHAR8
*PcAnsi
, OPTIONAL
490 OUT CHAR8
*Ascii OPTIONAL
495 TerminalIsValidAscii (
501 TerminalIsValidEfiCntlChar (