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