/** @file\r
Header file for Terminal driver.\r
\r
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+Copyright (C) 2016 Silicon Graphics, Inc. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn;\r
LIST_ENTRY NotifyEntry;\r
} TERMINAL_CONSOLE_IN_EX_NOTIFY;\r
+\r
+typedef enum {\r
+ TerminalTypePcAnsi,\r
+ TerminalTypeVt100,\r
+ TerminalTypeVt100Plus,\r
+ TerminalTypeVtUtf8,\r
+ TerminalTypeTtyTerm\r
+} TERMINAL_TYPE;\r
+\r
typedef struct {\r
UINTN Signature;\r
EFI_HANDLE Handle;\r
- UINT8 TerminalType;\r
+ TERMINAL_TYPE TerminalType;\r
EFI_SERIAL_IO_PROTOCOL *SerialIo;\r
EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleInput;\r
RAW_DATA_FIFO *RawFiFo;\r
UNICODE_FIFO *UnicodeFiFo;\r
EFI_KEY_FIFO *EfiKeyFiFo;\r
+ EFI_KEY_FIFO *EfiKeyFiFoForNotify;\r
EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
EFI_EVENT TimerEvent;\r
EFI_EVENT TwoSecondTimeOut;\r
UINT32 InputState;\r
UINT32 ResetState;\r
+ UINT16 TtyEscapeStr[3];\r
+ INTN TtyEscapeIndex;\r
\r
//\r
// Esc could not be output to the screen by user,\r
BOOLEAN OutputEscChar;\r
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleInputEx;\r
LIST_ENTRY NotifyList;\r
+ EFI_EVENT KeyNotifyProcessEvent;\r
} TERMINAL_DEV;\r
\r
#define INPUT_STATE_DEFAULT 0x00\r
#define INPUT_STATE_LEFTOPENBRACKET 0x04\r
#define INPUT_STATE_O 0x08\r
#define INPUT_STATE_2 0x10\r
+#define INPUT_STATE_LEFTOPENBRACKET_2 0x20\r
\r
#define RESET_STATE_DEFAULT 0x00\r
#define RESET_STATE_ESC_R 0x01\r
UINT8 Utf8_3[3];\r
} UTF8_CHAR;\r
\r
-#define PCANSITYPE 0\r
-#define VT100TYPE 1\r
-#define VT100PLUSTYPE 2\r
-#define VTUTF8TYPE 3\r
-#define TTYTERMTYPE 4\r
-\r
#define LEFTOPENBRACKET 0x5b // '['\r
#define ACAP 0x41\r
#define BCAP 0x42\r
#define BACKGROUND_CONTROL_OFFSET 11\r
#define ROW_OFFSET 2\r
#define COLUMN_OFFSET 5\r
+#define FW_BACK_OFFSET 2\r
\r
typedef struct {\r
UINT16 Unicode;\r
@param This Protocol instance pointer.\r
@param KeyData A pointer to a buffer that is filled in with the\r
keystroke information data for the key that was\r
- pressed.\r
+ pressed. If KeyData.Key, KeyData.KeyState.KeyToggleState\r
+ and KeyData.KeyState.KeyShiftState are 0, then any incomplete\r
+ keystroke will trigger a notification of the KeyNotificationFunction.\r
@param KeyNotificationFunction Points to the function to be called when the key\r
- sequence is typed specified by KeyData.\r
+ sequence is typed specified by KeyData. This notification function\r
+ should be called at <=TPL_CALLBACK.\r
@param NotifyHandle Points to the unique handle assigned to the\r
registered notification.\r
\r
**/\r
EFI_STATUS\r
SetTerminalDevicePath (\r
- IN UINT8 TerminalType,\r
+ IN TERMINAL_TYPE TerminalType,\r
IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,\r
OUT EFI_DEVICE_PATH_PROTOCOL **TerminalDevicePath\r
);\r
TERMINAL_DEV *TerminalDevice\r
);\r
\r
+/**\r
+ Insert one pre-fetched key into the FIFO buffer.\r
+\r
+ @param EfiKeyFiFo Pointer to instance of EFI_KEY_FIFO.\r
+ @param Input The key will be input.\r
+\r
+ @retval TRUE If insert successfully.\r
+ @retval FALSE If FIFO buffer is full before key insertion,\r
+ and the key is lost.\r
+\r
+**/\r
+BOOLEAN\r
+EfiKeyFiFoForNotifyInsertOneKey (\r
+ EFI_KEY_FIFO *EfiKeyFiFo,\r
+ EFI_INPUT_KEY *Input\r
+ );\r
+\r
+/**\r
+ Remove one pre-fetched key out of the FIFO buffer.\r
+\r
+ @param EfiKeyFiFo Pointer to instance of EFI_KEY_FIFO.\r
+ @param Output The key will be removed.\r
+\r
+ @retval TRUE If insert successfully.\r
+ @retval FALSE If FIFO buffer is empty before remove operation.\r
+\r
+**/\r
+BOOLEAN\r
+EfiKeyFiFoForNotifyRemoveOneKey (\r
+ EFI_KEY_FIFO *EfiKeyFiFo,\r
+ EFI_INPUT_KEY *Output\r
+ );\r
+\r
+/**\r
+ Clarify whether FIFO buffer is empty.\r
+\r
+ @param EfiKeyFiFo Pointer to instance of EFI_KEY_FIFO.\r
+\r
+ @retval TRUE If FIFO buffer is empty.\r
+ @retval FALSE If FIFO buffer is not empty.\r
+\r
+**/\r
+BOOLEAN\r
+IsEfiKeyFiFoForNotifyEmpty (\r
+ IN EFI_KEY_FIFO *EfiKeyFiFo\r
+ );\r
+\r
+/**\r
+ Clarify whether FIFO buffer is full.\r
+\r
+ @param EfiKeyFiFo Pointer to instance of EFI_KEY_FIFO.\r
+\r
+ @retval TRUE If FIFO buffer is full.\r
+ @retval FALSE If FIFO buffer is not full.\r
+\r
+**/\r
+BOOLEAN\r
+IsEfiKeyFiFoForNotifyFull (\r
+ EFI_KEY_FIFO *EfiKeyFiFo\r
+ );\r
+\r
/**\r
Insert one pre-fetched key into the FIFO buffer.\r
\r
\r
/**\r
Remove one pre-fetched key out of the Unicode FIFO buffer.\r
- The caller should guarantee that Unicode FIFO buffer is not empty \r
+ The caller should guarantee that Unicode FIFO buffer is not empty\r
by IsUnicodeFiFoEmpty ().\r
\r
@param TerminalDevice Terminal driver private structure.\r
TERMINAL_DEV *TerminalDevice\r
);\r
\r
-/**\r
- Count Unicode FIFO buffer.\r
-\r
- @param TerminalDevice Terminal driver private structure\r
-\r
- @return The count in bytes of Unicode FIFO.\r
-\r
-**/\r
-UINT8\r
-UnicodeFiFoGetKeyCount (\r
- TERMINAL_DEV *TerminalDevice\r
- );\r
\r
/**\r
Translate raw data into Unicode (according to different encode), and\r
Translate one Unicode character into VT-UTF8 characters.\r
\r
UTF8 Encoding Table\r
- Bits per Character | Unicode Character Range | Unicode Binary Encoding | UTF8 Binary Encoding\r
- 0-7 | 0x0000 - 0x007F | 00000000 0xxxxxxx | 0xxxxxxx\r
- 8-11 | 0x0080 - 0x07FF | 00000xxx xxxxxxxx | 110xxxxx 10xxxxxx\r
- 12-16 | 0x0800 - 0xFFFF | xxxxxxxx xxxxxxxx | 1110xxxx 10xxxxxx 10xxxxxx\r
+ Bits per Character | Unicode Character Range | Unicode Binary Encoding | UTF8 Binary Encoding\r
+ 0-7 | 0x0000 - 0x007F | 00000000 0xxxxxxx | 0xxxxxxx\r
+ 8-11 | 0x0080 - 0x07FF | 00000xxx xxxxxxxx | 110xxxxx 10xxxxxx\r
+ 12-16 | 0x0800 - 0xFFFF | xxxxxxxx xxxxxxxx | 1110xxxx 10xxxxxx 10xxxxxx\r
\r
\r
@param Unicode Unicode character need translating.\r
Translate VT-UTF8 characters into one Unicode character.\r
\r
UTF8 Encoding Table\r
- Bits per Character | Unicode Character Range | Unicode Binary Encoding | UTF8 Binary Encoding\r
- 0-7 | 0x0000 - 0x007F | 00000000 0xxxxxxx | 0xxxxxxx\r
- 8-11 | 0x0080 - 0x07FF | 00000xxx xxxxxxxx | 110xxxxx 10xxxxxx\r
- 12-16 | 0x0800 - 0xFFFF | xxxxxxxx xxxxxxxx | 1110xxxx 10xxxxxx 10xxxxxx\r
+ Bits per Character | Unicode Character Range | Unicode Binary Encoding | UTF8 Binary Encoding\r
+ 0-7 | 0x0000 - 0x007F | 00000000 0xxxxxxx | 0xxxxxxx\r
+ 8-11 | 0x0080 - 0x07FF | 00000xxx xxxxxxxx | 110xxxxx 10xxxxxx\r
+ 12-16 | 0x0800 - 0xFFFF | xxxxxxxx xxxxxxxx | 1110xxxx 10xxxxxx 10xxxxxx\r
\r
\r
@param Utf8Char VT-UTF8 character set needs translating.\r
IN EFI_EVENT Event,\r
IN VOID *Context\r
);\r
+\r
+\r
+/**\r
+ Process key notify.\r
+\r
+ @param Event Indicates the event that invoke this function.\r
+ @param Context Indicates the calling context.\r
+**/\r
+VOID\r
+EFIAPI\r
+KeyNotifyProcessHandler (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ );\r
+\r
#endif\r