22.2 Simple Text Input Protocol Implementation

The implementation of the Simple Text Input Protocols is typically found in the file SimpleTextInput.c. Appendix A contains a template for a SimpleTextInput.c file for a UEFI Driver. The list of tasks to implement the Simple Text Input Protocols is as follows:

  • Add global variable for the EFI_SIMPLE_TEXT_INPUT_PROTOCOL instance to

    SimpleTextInput.c. - Add global variable for the

    EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance to SimpleTextInput.c.

  • Implement the Reset() and ReadKeyStroke()services in SimpleTextInput.c

    that is shared between the Simple Text Input Protocol and the Simple Text

    Input Ex Protocol.

  • Implement the SetState(), RegisterKeyNotify()and UnregisterKeyNotify()

    services in SimpleTextInput.c for the Simple Text Input Ex Protocol.

  • Implement notification function for the WaitForKey and WaitForKeyEx

    events in SimpleTextInput.c that is shared between the Simple Text Input

    Protocol and the Simple Text Input Ex Protocol.

  • Create WaitForKey and WaitForKeyEx events before the Simple Input

    Protocols are installed into the Handle Database.

  • If a device does not buffer keystrokes, or the buffer is very small, a timer

    event may be required to periodically read contents from a keyboard buffer.

Example 223, following, shows the protocol interface structure for the Simple Text Input Protocol and Example 224, below that, shows the protocol interface structure for the Simple Text Input Ex Protocol for reference. These two protocols are composed of services and each has an EFI_EVENT that may be used by the UEFI Boot Manager or UEFI Applications to determine if a keystroke has been pressed. The UEFI Boot Services WaitForEvent() and CheckEvent() can be used to perform these checks on the events specified by WaitForKey and WaitForKeyEx.

Example 223-Simple Text Input Protocol

typedef struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL;
///
/// The EFI_SIMPLE_TEXT_INPUT_PROTOCOL is used on the ConsoleIn device.
/// It is the minimum required protocol for ConsoleIn.
///
struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL {
EFI_INPUT_RESET Reset;
EFI_INPUT_READ_KEY ReadKeyStroke;
///
/// Event to use with WaitForEvent() to wait for a key to be available
///
EFI_EVENT WaitForKey;
};

Example 224-Simple Text Input Ex Protocol

typedef struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL;
///
/// 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;
EFI_UNREGISTER_KEYSTROKE_NOTIFY UnregisterKeyNotify;
};