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