diff options
Diffstat (limited to 'UefiLessonsPkg')
| -rwxr-xr-x | UefiLessonsPkg/HotKeyDriver/HotKeyDriver.c | 107 | ||||
| -rwxr-xr-x | UefiLessonsPkg/HotKeyDriver/HotKeyDriver.inf | 22 | ||||
| -rw-r--r-- | UefiLessonsPkg/UefiLessonsPkg.dsc | 1 | 
3 files changed, 130 insertions, 0 deletions
| diff --git a/UefiLessonsPkg/HotKeyDriver/HotKeyDriver.c b/UefiLessonsPkg/HotKeyDriver/HotKeyDriver.c new file mode 100755 index 0000000..bb73c0c --- /dev/null +++ b/UefiLessonsPkg/HotKeyDriver/HotKeyDriver.c @@ -0,0 +1,107 @@ +#include <Library/UefiBootServicesTableLib.h> +#include <Library/UefiLib.h> + +#include <Protocol/SimpleTextInEx.h> + + +EFI_HANDLE NotifyHandle; +EFI_HANDLE NotifyHandle1; + +EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL* InputEx = NULL; + +EFI_STATUS EFIAPI MyKeyNotificationFunction(EFI_KEY_DATA* KeyData) +{ +	Print(L"\nHot Key 1 is pressed"); +	return EFI_SUCCESS; +} + +EFI_STATUS EFIAPI MyKeyNotificationFunction1(EFI_KEY_DATA* KeyData) +{ +	Print(L"\nHot Key 2 is pressed"); +	return EFI_SUCCESS; +} + + +EFI_STATUS +EFIAPI +HotKeyDriverUnload( +  IN EFI_HANDLE        ImageHandle +  ) +{ +  if (!InputEx) +    return EFI_SUCCESS; + +  EFI_STATUS Status; + +  if (!NotifyHandle) { +    Status = InputEx->UnregisterKeyNotify(InputEx, +                                   (VOID*)NotifyHandle); + +    if (EFI_ERROR(Status)) { +      Print(L"Error! Can't perform RegisterKeyNotify: %r", Status); +      return Status; +    } +  } + +  if (!NotifyHandle1) { +    Status = InputEx->UnregisterKeyNotify(InputEx, +                       (VOID*)NotifyHandle1); + +    if (EFI_ERROR(Status)) { +      Print(L"Error! Can't perform RegisterKeyNotify: %r", Status); +      return Status; +    } +  } + +  return EFI_SUCCESS; +} + + +EFI_STATUS +EFIAPI +HotKeyDriverEntryPoint( +  IN EFI_HANDLE        ImageHandle, +  IN EFI_SYSTEM_TABLE  *SystemTable +  ) +{ +  EFI_STATUS Status = gBS->LocateProtocol( +			 &gEfiSimpleTextInputExProtocolGuid, +			 NULL, +			 (VOID**)&InputEx +			 ); +  if (EFI_ERROR(Status)) { +    Print(L"Error! Can't locate EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL: %r", Status); +    return Status; +  } + +  EFI_KEY_DATA HotKey; +  HotKey.Key.ScanCode = 0; +  HotKey.Key.UnicodeChar = L'z'; +  HotKey.KeyState.KeyShiftState = EFI_LEFT_CONTROL_PRESSED | EFI_LEFT_ALT_PRESSED | EFI_SHIFT_STATE_VALID; +  HotKey.KeyState.KeyToggleState = 0; + +  Status = InputEx->RegisterKeyNotify(InputEx, +			&HotKey, +			MyKeyNotificationFunction, +                        (VOID**)&NotifyHandle); + +  if (EFI_ERROR(Status)) { +    Print(L"Error! Can't perform RegisterKeyNotify: %r", Status); +    return Status; +  } + +  HotKey.KeyState.KeyShiftState = 0; +  HotKey.KeyState.KeyToggleState = EFI_TOGGLE_STATE_VALID | EFI_NUM_LOCK_ACTIVE | EFI_KEY_STATE_EXPOSED; + +  Status = InputEx->RegisterKeyNotify(InputEx, +			&HotKey, +			MyKeyNotificationFunction1, +                        (VOID**)&NotifyHandle1);  + +  if (EFI_ERROR(Status)) { +    Print(L"Error! Can't perform RegisterKeyNotify: %r", Status); +    return Status; +  } + +  return EFI_SUCCESS; +} diff --git a/UefiLessonsPkg/HotKeyDriver/HotKeyDriver.inf b/UefiLessonsPkg/HotKeyDriver/HotKeyDriver.inf new file mode 100755 index 0000000..fa04f32 --- /dev/null +++ b/UefiLessonsPkg/HotKeyDriver/HotKeyDriver.inf @@ -0,0 +1,22 @@ +[Defines] +  INF_VERSION                    = 1.25 +  BASE_NAME                      = HotKeyDriver +  FILE_GUID                      = da316635-c66f-477e-9df6-880d2d729f1b +  MODULE_TYPE                    = UEFI_DRIVER +  VERSION_STRING                 = 1.0 +  ENTRY_POINT                    = HotKeyDriverEntryPoint +  UNLOAD_IMAGE                   = HotKeyDriverUnload +   +[Sources] +  HotKeyDriver.c + +[Packages] +  MdePkg/MdePkg.dec + +[Protocols] +  gEfiSimpleTextInputExProtocolGuid + +[LibraryClasses] +  UefiDriverEntryPoint +  UefiLib + diff --git a/UefiLessonsPkg/UefiLessonsPkg.dsc b/UefiLessonsPkg/UefiLessonsPkg.dsc index 0bb1762..88d299f 100644 --- a/UefiLessonsPkg/UefiLessonsPkg.dsc +++ b/UefiLessonsPkg/UefiLessonsPkg.dsc @@ -57,6 +57,7 @@    UefiLessonsPkg/SimpleLibraryUser/SimpleLibraryUser.inf    UefiLessonsPkg/SimpleClassProtocol/SimpleClassProtocol.inf    UefiLessonsPkg/SimpleClassUser/SimpleClassUser.inf +  UefiLessonsPkg/HotKeyDriver/HotKeyDriver.inf  [PcdsFixedAtBuild]    gUefiLessonsPkgTokenSpaceGuid.PcdMyVar32_2|44 | 
