18#include <Library/BaseMemoryLib.h>
19#include <Library/DebugLib.h>
21#include <Library/UefiBootServicesTableLib.h>
33 ZeroMem (KeyData,
sizeof (*KeyData));
48 Status = EFI_NOT_FOUND;
52 if (EFI_ERROR (Status)) {
62 if ((KeyData->
Key.UnicodeChar & ~0xFFU) != 0) {
63 return EFI_UNSUPPORTED;
66 switch (KeyData->
Key.ScanCode) {
106 case SCAN_VOLUME_DOWN:
107 case SCAN_BRIGHTNESS_UP:
108 case SCAN_BRIGHTNESS_DOWN:
111 case SCAN_TOGGLE_DISPLAY:
116 return EFI_UNSUPPORTED;
121 gBS->SignalEvent (Event);
142 Status =
gBS->HandleProtocol (
147 if (EFI_ERROR (Status)) {
148 DEBUG ((DEBUG_INFO,
"OCII: AmiEfiKeycodeProtocol is unavailable on gST->ConsoleHandle - %r\n", Status));
153 Status =
gBS->HandleProtocol (
155 &gEfiSimpleTextInProtocolGuid,
158 if (EFI_ERROR (Status)) {
159 DEBUG ((DEBUG_INFO,
"OCII: EfiSimpleTextInProtocol is unavailable on gST->ConsoleHandle - %r\n", Status));
164 Status =
gBS->HandleProtocol (
166 &gEfiSimpleTextInputExProtocolGuid,
169 if (EFI_ERROR (Status)) {
170 DEBUG ((DEBUG_INFO,
"OCII: EfiSimpleTextInputExProtocol is unavailable on gST->ConsoleHandle - %r\n", Status));
175 DEBUG ((DEBUG_INFO,
"OCII: No ConSplitter input protocol is unavailable\n"));
176 return EFI_NOT_FOUND;
179 DEBUG ((DEBUG_INFO,
"OCII: gST->ConIn %p vs found %p\n",
gST->ConIn, Source->
TextInput));
185 Status =
gBS->CreateEvent (
192 if (EFI_ERROR (Status)) {
193 DEBUG ((DEBUG_INFO,
"OCII: AmiEfiKeycodeProtocol WaitForKey replace failed - %r\n", Status));
203 Status =
gBS->CreateEvent (
210 if (EFI_ERROR (Status)) {
211 DEBUG ((DEBUG_INFO,
"OCII: EfiSimpleTextInProtocol WaitForKey replace failed - %r\n", Status));
221 Status =
gBS->CreateEvent (
228 if (EFI_ERROR (Status)) {
229 DEBUG ((DEBUG_INFO,
"OCII: EfiSimpleTextInputExProtocol WaitForKey replace failed - %r\n", Status));
VOID EFIAPI AIKShimWaitForKeyHandler(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS EFIAPI AIKShimTextInputReadKeyStroke(IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, OUT EFI_INPUT_KEY *Key)
EFI_STATUS EFIAPI AIKShimAmiKeycodeReadEfikey(IN AMI_EFIKEYCODE_PROTOCOL *This, OUT AMI_EFI_KEY_DATA *KeyData)
EFI_STATUS EFIAPI AIKShimTextInputReadKeyStrokeEx(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, OUT EFI_KEY_DATA *KeyData)
EFI_STATUS AIKSourceInstall(AIK_SOURCE *Source, OC_INPUT_KEY_MODE Mode)
EFI_STATUS AIKSourceGrabEfiKey(AIK_SOURCE *Source, AMI_EFI_KEY_DATA *KeyData, BOOLEAN KeyFiltering)
VOID AIKSourceUninstall(AIK_SOURCE *Source)
EFI_GUID gAmiEfiKeycodeProtocolGuid
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
AMI_READ_EFI_KEY ReadEfikey
EFI_HANDLE ConSplitHandler
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL * TextInputEx
EFI_SIMPLE_TEXT_INPUT_PROTOCOL * TextInput
EFI_INPUT_READ_KEY TextReadKeyStroke
EFI_INPUT_READ_KEY_EX TextReadKeyStrokeEx
AMI_EFIKEYCODE_PROTOCOL * AmiKeycode
AMI_READ_EFI_KEY AmiReadEfikey