1*1370a723SSascha Wildner /** @file 2*1370a723SSascha Wildner Simple Text Input protocol from the UEFI 2.0 specification. 3*1370a723SSascha Wildner 4*1370a723SSascha Wildner Abstraction of a very simple input device like a keyboard or serial 5*1370a723SSascha Wildner terminal. 6*1370a723SSascha Wildner 7*1370a723SSascha Wildner Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR> 8*1370a723SSascha Wildner SPDX-License-Identifier: BSD-2-Clause-Patent 9*1370a723SSascha Wildner 10*1370a723SSascha Wildner **/ 11*1370a723SSascha Wildner 12*1370a723SSascha Wildner #ifndef __SIMPLE_TEXT_IN_PROTOCOL_H__ 13*1370a723SSascha Wildner #define __SIMPLE_TEXT_IN_PROTOCOL_H__ 14*1370a723SSascha Wildner 15*1370a723SSascha Wildner #define EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID \ 16*1370a723SSascha Wildner { \ 17*1370a723SSascha Wildner 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ 18*1370a723SSascha Wildner } 19*1370a723SSascha Wildner 20*1370a723SSascha Wildner typedef struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL; 21*1370a723SSascha Wildner 22*1370a723SSascha Wildner /// 23*1370a723SSascha Wildner /// Protocol GUID name defined in EFI1.1. 24*1370a723SSascha Wildner /// 25*1370a723SSascha Wildner #define SIMPLE_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID 26*1370a723SSascha Wildner 27*1370a723SSascha Wildner /// 28*1370a723SSascha Wildner /// Protocol name in EFI1.1 for backward-compatible. 29*1370a723SSascha Wildner /// 30*1370a723SSascha Wildner typedef struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL SIMPLE_INPUT_INTERFACE; 31*1370a723SSascha Wildner 32*1370a723SSascha Wildner /// 33*1370a723SSascha Wildner /// The keystroke information for the key that was pressed. 34*1370a723SSascha Wildner /// 35*1370a723SSascha Wildner typedef struct { 36*1370a723SSascha Wildner UINT16 ScanCode; 37*1370a723SSascha Wildner CHAR16 UnicodeChar; 38*1370a723SSascha Wildner } EFI_INPUT_KEY; 39*1370a723SSascha Wildner 40*1370a723SSascha Wildner // 41*1370a723SSascha Wildner // Required unicode control chars 42*1370a723SSascha Wildner // 43*1370a723SSascha Wildner #define CHAR_BACKSPACE 0x0008 44*1370a723SSascha Wildner #define CHAR_TAB 0x0009 45*1370a723SSascha Wildner #define CHAR_LINEFEED 0x000A 46*1370a723SSascha Wildner #define CHAR_CARRIAGE_RETURN 0x000D 47*1370a723SSascha Wildner 48*1370a723SSascha Wildner // 49*1370a723SSascha Wildner // EFI Scan codes 50*1370a723SSascha Wildner // 51*1370a723SSascha Wildner #define SCAN_NULL 0x0000 52*1370a723SSascha Wildner #define SCAN_UP 0x0001 53*1370a723SSascha Wildner #define SCAN_DOWN 0x0002 54*1370a723SSascha Wildner #define SCAN_RIGHT 0x0003 55*1370a723SSascha Wildner #define SCAN_LEFT 0x0004 56*1370a723SSascha Wildner #define SCAN_HOME 0x0005 57*1370a723SSascha Wildner #define SCAN_END 0x0006 58*1370a723SSascha Wildner #define SCAN_INSERT 0x0007 59*1370a723SSascha Wildner #define SCAN_DELETE 0x0008 60*1370a723SSascha Wildner #define SCAN_PAGE_UP 0x0009 61*1370a723SSascha Wildner #define SCAN_PAGE_DOWN 0x000A 62*1370a723SSascha Wildner #define SCAN_F1 0x000B 63*1370a723SSascha Wildner #define SCAN_F2 0x000C 64*1370a723SSascha Wildner #define SCAN_F3 0x000D 65*1370a723SSascha Wildner #define SCAN_F4 0x000E 66*1370a723SSascha Wildner #define SCAN_F5 0x000F 67*1370a723SSascha Wildner #define SCAN_F6 0x0010 68*1370a723SSascha Wildner #define SCAN_F7 0x0011 69*1370a723SSascha Wildner #define SCAN_F8 0x0012 70*1370a723SSascha Wildner #define SCAN_F9 0x0013 71*1370a723SSascha Wildner #define SCAN_F10 0x0014 72*1370a723SSascha Wildner #define SCAN_ESC 0x0017 73*1370a723SSascha Wildner 74*1370a723SSascha Wildner /** 75*1370a723SSascha Wildner Reset the input device and optionally run diagnostics 76*1370a723SSascha Wildner 77*1370a723SSascha Wildner @param This Protocol instance pointer. 78*1370a723SSascha Wildner @param ExtendedVerification Driver may perform diagnostics on reset. 79*1370a723SSascha Wildner 80*1370a723SSascha Wildner @retval EFI_SUCCESS The device was reset. 81*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The device is not functioning properly and could not be reset. 82*1370a723SSascha Wildner 83*1370a723SSascha Wildner **/ 84*1370a723SSascha Wildner typedef 85*1370a723SSascha Wildner EFI_STATUS 86*1370a723SSascha Wildner (EFIAPI *EFI_INPUT_RESET)( 87*1370a723SSascha Wildner IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, 88*1370a723SSascha Wildner IN BOOLEAN ExtendedVerification 89*1370a723SSascha Wildner ); 90*1370a723SSascha Wildner 91*1370a723SSascha Wildner /** 92*1370a723SSascha Wildner Reads the next keystroke from the input device. The WaitForKey Event can 93*1370a723SSascha Wildner be used to test for existence of a keystroke via WaitForEvent () call. 94*1370a723SSascha Wildner 95*1370a723SSascha Wildner @param This Protocol instance pointer. 96*1370a723SSascha Wildner @param Key A pointer to a buffer that is filled in with the keystroke 97*1370a723SSascha Wildner information for the key that was pressed. 98*1370a723SSascha Wildner 99*1370a723SSascha Wildner @retval EFI_SUCCESS The keystroke information was returned. 100*1370a723SSascha Wildner @retval EFI_NOT_READY There was no keystroke data available. 101*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The keystroke information was not returned due to 102*1370a723SSascha Wildner hardware errors. 103*1370a723SSascha Wildner 104*1370a723SSascha Wildner **/ 105*1370a723SSascha Wildner typedef 106*1370a723SSascha Wildner EFI_STATUS 107*1370a723SSascha Wildner (EFIAPI *EFI_INPUT_READ_KEY)( 108*1370a723SSascha Wildner IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, 109*1370a723SSascha Wildner OUT EFI_INPUT_KEY *Key 110*1370a723SSascha Wildner ); 111*1370a723SSascha Wildner 112*1370a723SSascha Wildner /// 113*1370a723SSascha Wildner /// The EFI_SIMPLE_TEXT_INPUT_PROTOCOL is used on the ConsoleIn device. 114*1370a723SSascha Wildner /// It is the minimum required protocol for ConsoleIn. 115*1370a723SSascha Wildner /// 116*1370a723SSascha Wildner struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL { 117*1370a723SSascha Wildner EFI_INPUT_RESET Reset; 118*1370a723SSascha Wildner EFI_INPUT_READ_KEY ReadKeyStroke; 119*1370a723SSascha Wildner /// 120*1370a723SSascha Wildner /// Event to use with WaitForEvent() to wait for a key to be available 121*1370a723SSascha Wildner /// 122*1370a723SSascha Wildner EFI_EVENT WaitForKey; 123*1370a723SSascha Wildner }; 124*1370a723SSascha Wildner 125*1370a723SSascha Wildner extern EFI_GUID gEfiSimpleTextInProtocolGuid; 126*1370a723SSascha Wildner 127*1370a723SSascha Wildner #endif 128