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
,
249 TerminalDriverBindingSupported (
250 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
251 IN EFI_HANDLE Controller
,
252 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
257 TerminalDriverBindingStart (
258 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
259 IN EFI_HANDLE Controller
,
260 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
265 TerminalDriverBindingStop (
266 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
267 IN EFI_HANDLE Controller
,
268 IN UINTN NumberOfChildren
,
269 IN EFI_HANDLE
*ChildHandleBuffer
274 TerminalComponentNameGetDriverName (
275 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
277 OUT CHAR16
**DriverName
282 TerminalComponentNameGetControllerName (
283 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
284 IN EFI_HANDLE ControllerHandle
,
285 IN EFI_HANDLE ChildHandle OPTIONAL
,
287 OUT CHAR16
**ControllerName
291 // internal functions
294 TerminalConInCheckForKey (
295 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*This
300 TerminalUpdateConsoleDevVariable (
301 IN CHAR16
*VariableName
,
302 IN EFI_DEVICE_PATH_PROTOCOL
*ParentDevicePath
307 TerminalRemoveConsoleDevVariable (
308 IN CHAR16
*VariableName
,
309 IN EFI_DEVICE_PATH_PROTOCOL
*ParentDevicePath
314 TerminalGetVariableAndSize (
316 IN EFI_GUID
*VendorGuid
,
317 OUT UINTN
*VariableSize
322 SetTerminalDevicePath (
323 IN UINT8 TerminalType
,
324 IN EFI_DEVICE_PATH_PROTOCOL
*ParentDevicePath
,
325 OUT EFI_DEVICE_PATH_PROTOCOL
**TerminalDevicePath
331 IN TERMINAL_DEV
*TerminalDevice
336 InitializeUnicodeFiFo (
337 IN TERMINAL_DEV
*TerminalDevice
342 InitializeEfiKeyFiFo (
343 IN TERMINAL_DEV
*TerminalDevice
348 GetOneKeyFromSerial (
349 EFI_SERIAL_IO_PROTOCOL
*SerialIo
,
355 RawFiFoInsertOneKey (
356 TERMINAL_DEV
*TerminalDevice
,
362 RawFiFoRemoveOneKey (
363 TERMINAL_DEV
*TerminalDevice
,
370 TERMINAL_DEV
*TerminalDevice
376 TERMINAL_DEV
*TerminalDevice
381 EfiKeyFiFoInsertOneKey (
382 TERMINAL_DEV
*TerminalDevice
,
388 EfiKeyFiFoRemoveOneKey (
389 TERMINAL_DEV
*TerminalDevice
,
390 EFI_INPUT_KEY
*Output
396 TERMINAL_DEV
*TerminalDevice
402 TERMINAL_DEV
*TerminalDevice
407 UnicodeFiFoInsertOneKey (
408 TERMINAL_DEV
*TerminalDevice
,
414 UnicodeFiFoRemoveOneKey (
415 TERMINAL_DEV
*TerminalDevice
,
422 TERMINAL_DEV
*TerminalDevice
428 TERMINAL_DEV
*TerminalDevice
433 UnicodeFiFoGetKeyCount (
434 TERMINAL_DEV
*TerminalDevice
439 TranslateRawDataToEfiKey (
440 IN TERMINAL_DEV
*TerminalDevice
445 // internal functions for PC ANSI
448 AnsiRawDataToUnicode (
449 IN TERMINAL_DEV
*PcAnsiDevice
455 IN TERMINAL_DEV
*PcAnsiDevice
461 IN TERMINAL_DEV
*TerminalDevice
,
467 // internal functions for VT100
471 IN TERMINAL_DEV
*VT100Device
,
477 // internal functions for VT100Plus
480 VT100PlusTestString (
481 IN TERMINAL_DEV
*TerminalDevice
,
487 // internal functions for VTUTF8
490 VTUTF8RawDataToUnicode (
491 IN TERMINAL_DEV
*VtUtf8Device
497 IN TERMINAL_DEV
*TerminalDevice
,
505 OUT UTF8_CHAR
*Utf8Char
,
506 OUT UINT8
*ValidBytes
511 GetOneValidUtf8Char (
512 IN TERMINAL_DEV
*Utf8Device
,
513 OUT UTF8_CHAR
*Utf8Char
,
514 OUT UINT8
*ValidBytes
520 IN UTF8_CHAR Utf8Char
,
522 OUT CHAR16
*UnicodeChar
527 // functions for boxdraw unicode
530 TerminalIsValidTextGraphics (
532 OUT CHAR8
*PcAnsi
, OPTIONAL
533 OUT CHAR8
*Ascii OPTIONAL
538 TerminalIsValidAscii (
544 TerminalIsValidEfiCntlChar (