X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdePkg%2FInclude%2FProtocol%2FSimpleTextInEx.h;h=ffc11c601e1304e3ee283d4675a4a633dc4bd571;hp=ab09be1a7231b10dd7736a532b8022a075ad0c29;hb=2de87e461d37680ebbae455b51341dbf49a27567;hpb=842f5579c7e2a313f56c576e4c5150f7f4793079 diff --git a/MdePkg/Include/Protocol/SimpleTextInEx.h b/MdePkg/Include/Protocol/SimpleTextInEx.h index ab09be1a72..ffc11c601e 100644 --- a/MdePkg/Include/Protocol/SimpleTextInEx.h +++ b/MdePkg/Include/Protocol/SimpleTextInEx.h @@ -1,23 +1,26 @@ /** @file - The file defines the protocol to obtain input from the - ConsoleIn device. The EFI specification requires that the - EFI_SIMPLE_TEXT_INPUT_PROTOCOL supports the same languages as - the corresponding + Simple Text Input Ex protocol from the UEFI 2.0 specification. - Copyright (c) 2006 - 2007, Intel Corporation - All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php + This protocol defines an extension to the EFI_SIMPLE_TEXT_INPUT_PROTOCOL + which exposes much more state and modifier information from the input device, + also allows one to register a notification for a particular keystroke. - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+ This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ #ifndef __SIMPLE_TEXT_IN_EX_H__ #define __SIMPLE_TEXT_IN_EX_H__ +#include + #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \ {0xdd9e7534, 0x7762, 0x4698, { 0x8c, 0x14, 0xf5, 0x85, 0x17, 0xa6, 0x25, 0xaa } } @@ -35,9 +38,7 @@ typedef struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL EFI_SIMPLE_TEXT_INPUT_EX_PROTO this specification and is left up to the platform firmware or driver to implement. - @param This A pointer to the EFI_SIMPLE_TEXT_INPUT_PROTOCOL_EX - instance. Type EFI_SIMPLE_TEXT_INPUT_PROTOCOL_EX - is defined in this section. + @param This A pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance. @param ExtendedVerification Indicates that the driver may perform a more exhaustive @@ -45,87 +46,117 @@ typedef struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL EFI_SIMPLE_TEXT_INPUT_EX_PROTO device during reset. - @retval EFI_SUCCESS The device was reset. - + @retval EFI_SUCCESS The device was reset. + @retval EFI_DEVICE_ERROR The device is not functioning correctly and could not be reset. **/ typedef EFI_STATUS -(EFIAPI *EFI_INPUT_RESET_EX) ( - IN CONST EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, - IN CONST BOOLEAN ExtendedVerification +(EFIAPI *EFI_INPUT_RESET_EX)( + IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ); -// -// EFI_KEY_TOGGLE_STATE -// -typedef UINT8 EFI_KEY_TOGGLE_STATE; -#define TOGGLE_STATE_VALID 0x80 -#define SCROLL_LOCK_ACTIVE 0x01 -#define NUM_LOCK_ACTIVE 0x02 -#define CAPS_LOCK_ACTIVE 0x04 - -/** - Definition of EFI_KEY_STATE +/// +/// EFI_KEY_TOGGLE_STATE. The toggle states are defined. +/// They are: EFI_TOGGLE_STATE_VALID, EFI_SCROLL_LOCK_ACTIVE +/// EFI_NUM_LOCK_ACTIVE, EFI_CAPS_LOCK_ACTIVE +/// +typedef UINT8 EFI_KEY_TOGGLE_STATE; - @param KeyShiftState Reflects the currently pressed shift - modifiers for the input device. The - returned value is valid only if the high - order bit has been set. - - @param KeyToggleState Reflects the current internal state of - various toggled attributes. The returned - value is valid only if the high order - bit has been set. - -**/ typedef struct _EFI_KEY_STATE { + /// + /// Reflects the currently pressed shift + /// modifiers for the input device. The + /// returned value is valid only if the high + /// order bit has been set. + /// UINT32 KeyShiftState; + /// + /// Reflects the current internal state of + /// various toggled attributes. The returned + /// value is valid only if the high order + /// bit has been set. + /// EFI_KEY_TOGGLE_STATE KeyToggleState; } EFI_KEY_STATE; -/** - Definition of EFI_KEY_DATA. - - @param Key The EFI scan code and Unicode value returned from - the input device. - - @param KeyState The current state of various toggled - attributes as well as input modifier values. - -**/ typedef struct { + /// + /// The EFI scan code and Unicode value returned from the input device. + /// EFI_INPUT_KEY Key; + /// + /// The current state of various toggled attributes as well as input modifier values. + /// EFI_KEY_STATE KeyState; } EFI_KEY_DATA; -// -// Shift State. // // Any Shift or Toggle State that is valid should have // high order bit set. // -#define SHIFT_STATE_VALID 0x80000000 -#define RIGHT_SHIFT_PRESSED 0x00000001 -#define LEFT_SHIFT_PRESSED 0x00000002 -#define RIGHT_CONTROL_PRESSED 0x00000004 -#define LEFT_CONTROL_PRESSED 0x00000008 -#define RIGHT_ALT_PRESSED 0x00000010 -#define LEFT_ALT_PRESSED 0x00000020 -#define RIGHT_LOGO_PRESSED 0x00000040 -#define LEFT_LOGO_PRESSED 0x00000080 -#define MENU_KEY_PRESSED 0x00000100 -#define SYS_REQ_PRESSED 0x00000200 +// Shift state +// +#define EFI_SHIFT_STATE_VALID 0x80000000 +#define EFI_RIGHT_SHIFT_PRESSED 0x00000001 +#define EFI_LEFT_SHIFT_PRESSED 0x00000002 +#define EFI_RIGHT_CONTROL_PRESSED 0x00000004 +#define EFI_LEFT_CONTROL_PRESSED 0x00000008 +#define EFI_RIGHT_ALT_PRESSED 0x00000010 +#define EFI_LEFT_ALT_PRESSED 0x00000020 +#define EFI_RIGHT_LOGO_PRESSED 0x00000040 +#define EFI_LEFT_LOGO_PRESSED 0x00000080 +#define EFI_MENU_KEY_PRESSED 0x00000100 +#define EFI_SYS_REQ_PRESSED 0x00000200 + +// +// Toggle state +// +#define EFI_TOGGLE_STATE_VALID 0x80 +#define EFI_KEY_STATE_EXPOSED 0x40 +#define EFI_SCROLL_LOCK_ACTIVE 0x01 +#define EFI_NUM_LOCK_ACTIVE 0x02 +#define EFI_CAPS_LOCK_ACTIVE 0x04 + +// +// EFI Scan codes +// +#define SCAN_F11 0x0015 +#define SCAN_F12 0x0016 +#define SCAN_PAUSE 0x0048 +#define SCAN_F13 0x0068 +#define SCAN_F14 0x0069 +#define SCAN_F15 0x006A +#define SCAN_F16 0x006B +#define SCAN_F17 0x006C +#define SCAN_F18 0x006D +#define SCAN_F19 0x006E +#define SCAN_F20 0x006F +#define SCAN_F21 0x0070 +#define SCAN_F22 0x0071 +#define SCAN_F23 0x0072 +#define SCAN_F24 0x0073 +#define SCAN_MUTE 0x007F +#define SCAN_VOLUME_UP 0x0080 +#define SCAN_VOLUME_DOWN 0x0081 +#define SCAN_BRIGHTNESS_UP 0x0100 +#define SCAN_BRIGHTNESS_DOWN 0x0101 +#define SCAN_SUSPEND 0x0102 +#define SCAN_HIBERNATE 0x0103 +#define SCAN_TOGGLE_DISPLAY 0x0104 +#define SCAN_RECOVERY 0x0105 +#define SCAN_EJECT 0x0106 /** The function reads the next keystroke from the input device. If there is no pending keystroke the function returns EFI_NOT_READY. If there is a pending keystroke, then KeyData.Key.ScanCode is the EFI scan code defined in Error! - Reference source not found.. The KeyData.Key.UnicodeChar is the + Reference source not found. The KeyData.Key.UnicodeChar is the actual printable character or is zero if the key does not represent a printable character (control key, function key, etc.). The KeyData.KeyState is shift state for the character @@ -151,45 +182,39 @@ typedef struct { state information, and in those cases the high order bit in the respective Toggle and Shift state fields should not be active. - - @param This A pointer to the - EFI_SIMPLE_TEXT_INPUT_PROTOCOL_EX instance. + + @param This A pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance. @param KeyData A pointer to a buffer that is filled in with the keystroke state data for the key that was pressed. - - @retval EFI_SUCCESS The keystroke information was - returned. - - @retval EFI_NOT_READY There was no keystroke data available. - EFI_DEVICE_ERROR The keystroke - information was not returned due to - hardware errors. + + @retval EFI_SUCCESS The keystroke information was returned. + @retval EFI_NOT_READY There was no keystroke data available. + @retval EFI_DEVICE_ERROR The keystroke information was not returned due to + hardware errors. **/ typedef EFI_STATUS -(EFIAPI *EFI_INPUT_READ_KEY_EX) ( - IN CONST EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, - OUT EFI_KEY_DATA *KeyData +(EFIAPI *EFI_INPUT_READ_KEY_EX)( + IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, + OUT EFI_KEY_DATA *KeyData ); /** The SetState() function allows the input device hardware to have state settings adjusted. - - @param This A pointer to the EFI_SIMPLE_TEXT_INPUT_PROTOCOL_EX - instance. Type EFI_SIMPLE_TEXT_INPUT_PROTOCOL_EX - is defined in this section. - + + @param This A pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance. + @param KeyToggleState Pointer to the EFI_KEY_TOGGLE_STATE to set the state for the input device. - - - @retval EFI_SUCCESS The device state was set appropriately. + + + @retval EFI_SUCCESS The device state was set appropriately. @retval EFI_DEVICE_ERROR The device is not functioning correctly and could not have the @@ -201,42 +226,41 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_SET_STATE) ( - IN CONST EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, - IN CONST EFI_KEY_TOGGLE_STATE *KeyToggleState +(EFIAPI *EFI_SET_STATE)( + IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, + IN EFI_KEY_TOGGLE_STATE *KeyToggleState ); -// -// EFI_KEY_NOTIFY -// +/// +/// The function will be called when the key sequence is typed specified by KeyData. +/// typedef EFI_STATUS -(EFIAPI *EFI_KEY_NOTIFY_FUNCTION) ( - IN CONST EFI_KEY_DATA *KeyData +(EFIAPI *EFI_KEY_NOTIFY_FUNCTION)( + IN EFI_KEY_DATA *KeyData ); /** The RegisterKeystrokeNotify() function registers a function which will be called when a specified keystroke will occur. - - @param This A pointer to the EFI_SIMPLE_TEXT_INPUT_PROTOCOL_EX - instance. Type EFI_SIMPLE_TEXT_INPUT_PROTOCOL_EX - is defined in this section. - - @param KeyData A pointer to a buffer that is filled in with - the keystroke information for the key that was - pressed. - - @param KeyNotificationFunction Points to the function to be - called when the key sequence - is typed specified by KeyData. - - - @param NotifyHandle Points to the unique handle assigned to - the registered notification. - - @retval EFI_SUCCESS The device state was set - appropriately. + + @param This A pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance. + + @param 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. + + @param 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. + + + @param NotifyHandle Points to the unique handle assigned to + the registered notification. + + @retval EFI_SUCCESS Key notify was registered successfully. @retval EFI_OUT_OF_RESOURCES Unable to allocate necessary data structures. @@ -244,65 +268,48 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_REGISTER_KEYSTROKE_NOTIFY) ( - IN CONST EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, - IN CONST EFI_KEY_DATA *KeyData, - IN CONST EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, - OUT EFI_HANDLE *NotifyHandle +(EFIAPI *EFI_REGISTER_KEYSTROKE_NOTIFY)( + IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, + IN EFI_KEY_DATA *KeyData, + IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, + OUT VOID **NotifyHandle ); /** The UnregisterKeystrokeNotify() function removes the notification which was previously registered. - - @param This A pointer to the EFI_SIMPLE_TEXT_INPUT_PROTOCOL_EX - instance. - + + @param This A pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance. + @param NotificationHandle The handle of the notification function being unregistered. - - @retval EFI_SUCCESS The device state was set appropriately. - + + @retval EFI_SUCCESS Key notify was unregistered successfully. + @retval EFI_INVALID_PARAMETER The NotificationHandle is invalid. **/ typedef EFI_STATUS -(EFIAPI *EFI_UNREGISTER_KEYSTROKE_NOTIFY) ( -IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, -IN EFI_HANDLE NotificationHandle +(EFIAPI *EFI_UNREGISTER_KEYSTROKE_NOTIFY)( + IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, + IN VOID *NotificationHandle ); -/** - The EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL is used on the ConsoleIn - device. It is an extension to the Simple Text Input protocol - which allows a variety of extended shift state information to be - returned. - - @param Reset Reset the ConsoleIn device. See Reset(). - - @param ReadKeyStrokeEx Returns the next input character. See - ReadKeyStrokeEx(). - - @param WaitForKeyEx Event to use with WaitForEvent() to wait - for a key to be available. - - @param SetState Set the EFI_KEY_TOGGLE_STATE state settings - for the input device. - - @param RegisterKeyNotify Register a notification function to - be called when a given key sequence - is hit. - - @param UnregisterKeyNotifyRemoves A specific notification - function. - -**/ +/// +/// The EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL is used on the ConsoleIn +/// device. It is an extension to the Simple Text Input protocol +/// which allows a variety of extended shift state information to be +/// returned. +/// struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL{ EFI_INPUT_RESET_EX Reset; EFI_INPUT_READ_KEY_EX ReadKeyStrokeEx; + /// + /// Event to use with WaitForEvent() to wait for a key to be available. + /// EFI_EVENT WaitForKeyEx; EFI_SET_STATE SetState; EFI_REGISTER_KEYSTROKE_NOTIFY RegisterKeyNotify;