TianoCore EDK2 master
|
#include "Terminal.h"
Go to the source code of this file.
Implementation for EFI_SIMPLE_TEXT_INPUT_PROTOCOL protocol.
(C) Copyright 2014 Hewlett-Packard Development Company, L.P.
Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
Copyright (C) 2016 Silicon Graphics, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
Definition in file TerminalConIn.c.
BOOLEAN EfiKeyFiFoForNotifyInsertOneKey | ( | EFI_KEY_FIFO * | EfiKeyFiFo, |
EFI_INPUT_KEY * | Input | ||
) |
Insert one pre-fetched key into the FIFO buffer.
EfiKeyFiFo | Pointer to instance of EFI_KEY_FIFO. |
Input | The key will be input. |
TRUE | If insert successfully. |
FALSE | If FIFO buffer is full before key insertion, and the key is lost. |
Definition at line 830 of file TerminalConIn.c.
BOOLEAN EfiKeyFiFoForNotifyRemoveOneKey | ( | EFI_KEY_FIFO * | EfiKeyFiFo, |
EFI_INPUT_KEY * | Output | ||
) |
Remove one pre-fetched key out of the FIFO buffer.
EfiKeyFiFo | Pointer to instance of EFI_KEY_FIFO. |
Output | The key will be removed. |
TRUE | If remove successfully. |
FALSE | If FIFO buffer is empty before remove operation. |
Definition at line 864 of file TerminalConIn.c.
BOOLEAN EfiKeyFiFoInsertOneKey | ( | TERMINAL_DEV * | TerminalDevice, |
EFI_INPUT_KEY * | Key | ||
) |
Insert one pre-fetched key into the FIFO buffer.
TerminalDevice | Terminal driver private structure. |
Key | The key will be input. |
TRUE | If insert successfully. |
FALSE | If FIFO buffer is full before key insertion, and the key is lost. |
Definition at line 950 of file TerminalConIn.c.
BOOLEAN EfiKeyFiFoRemoveOneKey | ( | TERMINAL_DEV * | TerminalDevice, |
EFI_INPUT_KEY * | Output | ||
) |
Remove one pre-fetched key out of the FIFO buffer.
TerminalDevice | Terminal driver private structure. |
Output | The key will be removed. |
TRUE | If insert successfully. |
FALSE | If FIFO buffer is empty before remove operation. |
Definition at line 1015 of file TerminalConIn.c.
EFI_STATUS GetOneKeyFromSerial | ( | EFI_SERIAL_IO_PROTOCOL * | SerialIo, |
UINT8 * | Output | ||
) |
Get one key out of serial buffer.
SerialIo | Serial I/O protocol attached to the serial device. |
Output | The fetched key. |
EFI_NOT_READY | If serial buffer is empty. |
EFI_DEVICE_ERROR | If reading serial buffer encounter error. |
EFI_SUCCESS | If reading serial buffer successfully, put the fetched key to the parameter output. |
Definition at line 669 of file TerminalConIn.c.
BOOLEAN IsEfiKeyFiFoEmpty | ( | TERMINAL_DEV * | TerminalDevice | ) |
Clarify whether FIFO buffer is empty.
TerminalDevice | Terminal driver private structure |
TRUE | If FIFO buffer is empty. |
FALSE | If FIFO buffer is not empty. |
Definition at line 1051 of file TerminalConIn.c.
BOOLEAN IsEfiKeyFiFoForNotifyEmpty | ( | EFI_KEY_FIFO * | EfiKeyFiFo | ) |
Clarify whether FIFO buffer is empty.
EfiKeyFiFo | Pointer to instance of EFI_KEY_FIFO. |
TRUE | If FIFO buffer is empty. |
FALSE | If FIFO buffer is not empty. |
Definition at line 900 of file TerminalConIn.c.
BOOLEAN IsEfiKeyFiFoForNotifyFull | ( | EFI_KEY_FIFO * | EfiKeyFiFo | ) |
Clarify whether FIFO buffer is full.
EfiKeyFiFo | Pointer to instance of EFI_KEY_FIFO. |
TRUE | If FIFO buffer is full. |
FALSE | If FIFO buffer is not full. |
Definition at line 921 of file TerminalConIn.c.
BOOLEAN IsEfiKeyFiFoFull | ( | TERMINAL_DEV * | TerminalDevice | ) |
Clarify whether FIFO buffer is full.
TerminalDevice | Terminal driver private structure |
TRUE | If FIFO buffer is full. |
FALSE | If FIFO buffer is not full. |
Definition at line 1072 of file TerminalConIn.c.
BOOLEAN IsKeyRegistered | ( | IN EFI_KEY_DATA * | RegsiteredData, |
IN EFI_KEY_DATA * | InputData | ||
) |
Check if the key already has been registered.
If both RegsiteredData and InputData is NULL, then ASSERT().
RegsiteredData | A pointer to a buffer that is filled in with the keystroke state data for the key that was registered. |
InputData | A pointer to a buffer that is filled in with the keystroke state data for the key that was pressed. |
TRUE | Key be pressed matches a registered key. |
FALSE | Match failed. |
Definition at line 166 of file TerminalConIn.c.
BOOLEAN IsRawFiFoEmpty | ( | TERMINAL_DEV * | TerminalDevice | ) |
Clarify whether Raw Data FIFO buffer is empty.
TerminalDevice | Terminal driver private structure |
TRUE | If Raw Data FIFO buffer is empty. |
FALSE | If Raw Data FIFO buffer is not empty. |
Definition at line 780 of file TerminalConIn.c.
BOOLEAN IsRawFiFoFull | ( | TERMINAL_DEV * | TerminalDevice | ) |
Clarify whether Raw Data FIFO buffer is full.
TerminalDevice | Terminal driver private structure |
TRUE | If Raw Data FIFO buffer is full. |
FALSE | If Raw Data FIFO buffer is not full. |
Definition at line 801 of file TerminalConIn.c.
BOOLEAN IsUnicodeFiFoEmpty | ( | TERMINAL_DEV * | TerminalDevice | ) |
Clarify whether Unicode FIFO buffer is empty.
TerminalDevice | Terminal driver private structure |
TRUE | If Unicode FIFO buffer is empty. |
FALSE | If Unicode FIFO buffer is not empty. |
Definition at line 1160 of file TerminalConIn.c.
BOOLEAN IsUnicodeFiFoFull | ( | TERMINAL_DEV * | TerminalDevice | ) |
Clarify whether Unicode FIFO buffer is full.
TerminalDevice | Terminal driver private structure |
TRUE | If Unicode FIFO buffer is full. |
FALSE | If Unicode FIFO buffer is not full. |
Definition at line 1181 of file TerminalConIn.c.
Process key notify.
Event | Indicates the event that invoke this function. |
Context | Indicates the calling context. |
Definition at line 610 of file TerminalConIn.c.
BOOLEAN RawFiFoInsertOneKey | ( | TERMINAL_DEV * | TerminalDevice, |
UINT8 | Input | ||
) |
Insert one byte raw data into the Raw Data FIFO.
TerminalDevice | Terminal driver private structure. |
Input | The key will be input. |
TRUE | If insert successfully. |
FALSE | If Raw Data buffer is full before key insertion, and the key is lost. |
Definition at line 712 of file TerminalConIn.c.
BOOLEAN RawFiFoRemoveOneKey | ( | TERMINAL_DEV * | TerminalDevice, |
UINT8 * | Output | ||
) |
Remove one pre-fetched key out of the Raw Data FIFO.
TerminalDevice | Terminal driver private structure. |
Output | The key will be removed. |
TRUE | If insert successfully. |
FALSE | If Raw Data FIFO buffer is empty before remove operation. |
Definition at line 746 of file TerminalConIn.c.
EFI_STATUS ReadKeyStrokeWorker | ( | IN TERMINAL_DEV * | TerminalDevice, |
OUT EFI_KEY_DATA * | KeyData | ||
) |
Reads the next keystroke from the input device. The WaitForKey Event can be used to test for existence of a keystroke via WaitForEvent () call.
TerminalDevice | Terminal driver private structure |
KeyData | A pointer to a buffer that is filled in with the keystroke state data for the key that was pressed. |
EFI_SUCCESS | The keystroke information was returned. |
EFI_NOT_READY | There was no keystroke data available. |
EFI_INVALID_PARAMETER | KeyData is NULL. |
Definition at line 28 of file TerminalConIn.c.
EFI_STATUS EFIAPI TerminalConInReadKeyStroke | ( | IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL * | This, |
OUT EFI_INPUT_KEY * | Key | ||
) |
Implements EFI_SIMPLE_TEXT_INPUT_PROTOCOL.ReadKeyStroke().
This | Indicates the calling context. |
Key | A pointer to a buffer that is filled in with the keystroke information for the key that was sent from terminal. |
EFI_SUCCESS | The keystroke information is returned successfully. |
EFI_NOT_READY | There is no keystroke data available. |
EFI_DEVICE_ERROR | The dependent serial device encounters error. |
EFI_UNSUPPORTED | The device does not support the ability to read keystroke data. |
Definition at line 125 of file TerminalConIn.c.
EFI_STATUS EFIAPI TerminalConInReadKeyStrokeEx | ( | IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL * | This, |
OUT EFI_KEY_DATA * | KeyData | ||
) |
Reads the next keystroke from the input device. The WaitForKey Event can be used to test for existence of a keystroke via WaitForEvent () call.
This | Protocol instance pointer. |
KeyData | A pointer to a buffer that is filled in with the keystroke state data for the key that was pressed. |
EFI_SUCCESS | The keystroke information was returned. |
EFI_NOT_READY | There was no keystroke data available. |
EFI_DEVICE_ERROR | The keystroke information was not returned due to hardware errors. |
EFI_INVALID_PARAMETER | KeyData is NULL. |
EFI_UNSUPPORTED | The device does not support the ability to read keystroke data. |
Definition at line 255 of file TerminalConIn.c.
EFI_STATUS EFIAPI TerminalConInRegisterKeyNotify | ( | IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL * | This, |
IN EFI_KEY_DATA * | KeyData, | ||
IN EFI_KEY_NOTIFY_FUNCTION | KeyNotificationFunction, | ||
OUT VOID ** | NotifyHandle | ||
) |
Register a notification function for a particular keystroke for the input device.
This | Protocol instance pointer. |
KeyData | A pointer to a buffer that is filled in with the keystroke information for the key that was pressed. If KeyData.Key, KeyData.KeyState.KeyToggleState and KeyData.KeyState.KeyShiftState are 0, then any incomplete keystroke will trigger a notification of the KeyNotificationFunction. |
KeyNotificationFunction | Points to the function to be called when the key sequence is typed specified by KeyData. This notification function should be called at <=TPL_CALLBACK. |
NotifyHandle | Points to the unique handle assigned to the registered notification. |
EFI_SUCCESS | The notification function was registered successfully. |
EFI_OUT_OF_RESOURCES | Unable to allocate resources for necessary data structures. |
EFI_INVALID_PARAMETER | KeyData or NotifyHandle is NULL. |
Definition at line 328 of file TerminalConIn.c.
EFI_STATUS EFIAPI TerminalConInReset | ( | IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL * | This, |
IN BOOLEAN | ExtendedVerification | ||
) |
Implements EFI_SIMPLE_TEXT_INPUT_PROTOCOL.Reset(). This driver only perform dependent serial device reset regardless of the value of ExtendeVerification
This | Indicates the calling context. |
ExtendedVerification | Skip by this driver. |
EFI_SUCCESS | The reset operation succeeds. |
EFI_DEVICE_ERROR | The dependent serial port reset fails. |
Definition at line 61 of file TerminalConIn.c.
EFI_STATUS EFIAPI TerminalConInResetEx | ( | IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL * | This, |
IN BOOLEAN | ExtendedVerification | ||
) |
Reset the input device and optionally run diagnostics
This | Protocol instance pointer. |
ExtendedVerification | Driver may perform diagnostics on reset. |
EFI_SUCCESS | The device was reset. |
EFI_DEVICE_ERROR | The device is not functioning properly and could not be reset. |
Definition at line 217 of file TerminalConIn.c.
EFI_STATUS EFIAPI TerminalConInSetState | ( | IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL * | This, |
IN EFI_KEY_TOGGLE_STATE * | KeyToggleState | ||
) |
Set certain state for the input device.
This | Protocol instance pointer. |
KeyToggleState | A pointer to the EFI_KEY_TOGGLE_STATE to set the state for the input device. |
EFI_SUCCESS | The device state was set successfully. |
EFI_DEVICE_ERROR | The device is not functioning correctly and could not have the setting adjusted. |
EFI_UNSUPPORTED | The device does not have the ability to set its state. |
EFI_INVALID_PARAMETER | KeyToggleState is NULL. |
Definition at line 288 of file TerminalConIn.c.
Timer handler to poll the key from serial.
Event | Indicates the event that invoke this function. |
Context | Indicates the calling context. |
Definition at line 513 of file TerminalConIn.c.
EFI_STATUS EFIAPI TerminalConInUnregisterKeyNotify | ( | IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL * | This, |
IN VOID * | NotificationHandle | ||
) |
Remove a registered notification function from a particular keystroke.
This | Protocol instance pointer. |
NotificationHandle | The handle of the notification function being unregistered. |
EFI_SUCCESS | The notification function was unregistered successfully. |
EFI_INVALID_PARAMETER | The NotificationHandle is invalid. |
Definition at line 398 of file TerminalConIn.c.
Event notification function for EFI_SIMPLE_TEXT_INPUT_PROTOCOL.WaitForKey event Signal the event if there is key available
Event | Indicates the event that invoke this function. |
Context | Indicates the calling context. |
Definition at line 491 of file TerminalConIn.c.
Event notification function for EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.WaitForKeyEx event Signal the event if there is key available
Event | Indicates the event that invoke this function. |
Context | Indicates the calling context. |
Definition at line 192 of file TerminalConIn.c.
VOID TranslateRawDataToEfiKey | ( | IN TERMINAL_DEV * | TerminalDevice | ) |
Translate raw data into Unicode (according to different encode), and translate Unicode into key information. (according to different standard).
TerminalDevice | Terminal driver private structure. |
Definition at line 447 of file TerminalConIn.c.
BOOLEAN UnicodeFiFoInsertOneKey | ( | TERMINAL_DEV * | TerminalDevice, |
UINT16 | Input | ||
) |
Insert one pre-fetched key into the Unicode FIFO buffer.
TerminalDevice | Terminal driver private structure. |
Input | The key will be input. |
TRUE | If insert successfully. |
FALSE | If Unicode FIFO buffer is full before key insertion, and the key is lost. |
Definition at line 1101 of file TerminalConIn.c.
VOID UnicodeFiFoRemoveOneKey | ( | TERMINAL_DEV * | TerminalDevice, |
UINT16 * | Output | ||
) |
Remove one pre-fetched key out of the Unicode FIFO buffer. The caller should guarantee that Unicode FIFO buffer is not empty by IsUnicodeFiFoEmpty ().
TerminalDevice | Terminal driver private structure. |
Output | The key will be removed. |
Definition at line 1135 of file TerminalConIn.c.
VOID UnicodeToEfiKey | ( | IN TERMINAL_DEV * | TerminalDevice | ) |
Converts a stream of Unicode characters from a terminal input device into EFI Keys that can be read through the Simple Input Protocol.
The table below shows the keyboard input mappings that this function supports. If the ESC sequence listed in one of the columns is presented, then it is translated into the corresponding EFI Scan Code. If a matching sequence is not found, then the raw key strokes are converted into EFI Keys.
2 seconds are allowed for an ESC sequence to be completed. If the ESC sequence is not completed in 2 seconds, then the raw key strokes of the partial ESC sequence are converted into EFI Keys. There is one special input sequence that will force the system to reset. This is ESC R ESC r ESC R.
Note: current implementation support terminal types include: PC ANSI, VT100+/VTUTF8, VT100. The table below is not same with UEFI Spec 2.3 Appendix B Table 201(not support ANSI X3.64 / DEC VT200-500 and extra support PC ANSI, VT100)since UEFI Table 201 is just an example.
ESC = 0x1B CSI = 0x9B DEL = 0x7f ^ = CTRL
+=========+======+===========+==========+==========+ | | EFI | UEFI 2.0 | | | | | Scan | | VT100+ | | | KEY | Code | PC ANSI | VTUTF8 | VT100 | +=========+======+===========+==========+==========+ | NULL | 0x00 | | | | | UP | 0x01 | ESC [ A | ESC [ A | ESC [ A | | DOWN | 0x02 | ESC [ B | ESC [ B | ESC [ B | | RIGHT | 0x03 | ESC [ C | ESC [ C | ESC [ C | | LEFT | 0x04 | ESC [ D | ESC [ D | ESC [ D | | HOME | 0x05 | ESC [ H | ESC h | ESC [ H | | END | 0x06 | ESC [ F | ESC k | ESC [ K | | INSERT | 0x07 | ESC [ @ | ESC + | ESC [ @ | | | | ESC [ L | | ESC [ L | | DELETE | 0x08 | ESC [ X | ESC - | ESC [ P | | PG UP | 0x09 | ESC [ I | ESC ? | ESC [ V | | | | | | ESC [ ? | | PG DOWN | 0x0A | ESC [ G | ESC / | ESC [ U | | | | | | ESC [ / | | F1 | 0x0B | ESC [ M | ESC 1 | ESC O P | | F2 | 0x0C | ESC [ N | ESC 2 | ESC O Q | | F3 | 0x0D | ESC [ O | ESC 3 | ESC O w | | F4 | 0x0E | ESC [ P | ESC 4 | ESC O x | | F5 | 0x0F | ESC [ Q | ESC 5 | ESC O t | | F6 | 0x10 | ESC [ R | ESC 6 | ESC O u | | F7 | 0x11 | ESC [ S | ESC 7 | ESC O q | | F8 | 0x12 | ESC [ T | ESC 8 | ESC O r | | F9 | 0x13 | ESC [ U | ESC 9 | ESC O p | | F10 | 0x14 | ESC [ V | ESC 0 | ESC O M | | Escape | 0x17 | ESC | ESC | ESC | | F11 | 0x15 | | ESC ! | | | F12 | 0x16 | | ESC @ | | +=========+======+===========+==========+==========+
Putty function key map: +=========+======+===========+=============+=============+=============+=========+ | | EFI | | | | | | | | Scan | VT100+ | | Normal | | | | KEY | Code | VTUTF8 | Xterm R6 | VT400 | Linux | SCO | +=========+======+===========+=============+=============+=============+=========+ | F1 | 0x0B | ESC O P | ESC O P | ESC [ 1 1 ~ | ESC [ [ A | ESC [ M | | F2 | 0x0C | ESC O Q | ESC O Q | ESC [ 1 2 ~ | ESC [ [ B | ESC [ N | | F3 | 0x0D | ESC O R | ESC O R | ESC [ 1 3 ~ | ESC [ [ C | ESC [ O | | F4 | 0x0E | ESC O S | ESC O S | ESC [ 1 4 ~ | ESC [ [ D | ESC [ P | | F5 | 0x0F | ESC O T | ESC [ 1 5 ~ | ESC [ 1 5 ~ | ESC [ [ E | ESC [ Q | | F6 | 0x10 | ESC O U | ESC [ 1 7 ~ | ESC [ 1 7 ~ | ESC [ 1 7 ~ | ESC [ R | | F7 | 0x11 | ESC O V | ESC [ 1 8 ~ | ESC [ 1 8 ~ | ESC [ 1 8 ~ | ESC [ S | | F8 | 0x12 | ESC O W | ESC [ 1 9 ~ | ESC [ 1 9 ~ | ESC [ 1 9 ~ | ESC [ T | | F9 | 0x13 | ESC O X | ESC [ 2 0 ~ | ESC [ 2 0 ~ | ESC [ 2 0 ~ | ESC [ U | | F10 | 0x14 | ESC O Y | ESC [ 2 1 ~ | ESC [ 2 1 ~ | ESC [ 2 1 ~ | ESC [ V | | Escape | 0x17 | ESC | ESC | ESC | ESC | ESC | | F11 | 0x15 | ESC O Z | ESC [ 2 3 ~ | ESC [ 2 3 ~ | ESC [ 2 3 ~ | ESC [ W | | F12 | 0x16 | ESC O [ | ESC [ 2 4 ~ | ESC [ 2 4 ~ | ESC [ 2 4 ~ | ESC [ X | +=========+======+===========+=============+=============+=============+=========+
ESC R ESC r ESC R = Reset System
TerminalDevice | The terminal device to use to translate raw input into EFI Keys |
Definition at line 1349 of file TerminalConIn.c.
VOID UnicodeToEfiKeyFlushState | ( | IN TERMINAL_DEV * | TerminalDevice | ) |
Update the Unicode characters from a terminal input device into EFI Keys FIFO.
TerminalDevice | The terminal device to use to translate raw input into EFI Keys |
Definition at line 1205 of file TerminalConIn.c.