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