aboutsummaryrefslogtreecommitdiffstats
path: root/Lesson_18/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'Lesson_18/README.md')
-rw-r--r--Lesson_18/README.md116
1 files changed, 0 insertions, 116 deletions
diff --git a/Lesson_18/README.md b/Lesson_18/README.md
deleted file mode 100644
index 228b311..0000000
--- a/Lesson_18/README.md
+++ /dev/null
@@ -1,116 +0,0 @@
-
-Let's create an app that can actually handle input from user.
-
-To do this we will need `ReadKeyStroke` function:
-```
-EFI_SIMPLE_TEXT_INPUT_PROTOCOL.ReadKeyStroke()
-
-Summary:
-Reads the next keystroke from the input device.
-
-Prototype:
-typedef
-EFI_STATUS
-(EFIAPI *EFI_INPUT_READ_KEY) (
- IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
- OUT EFI_INPUT_KEY *Key
- );
-
-Parameters:
-This A pointer to the EFI_SIMPLE_TEXT_INPUT_PROTOCOL instance.
-Key A pointer to a buffer that is filled in with the keystroke information
- for the key that was pressed.
-
-Description:
-The ReadKeyStroke() function reads the next keystroke from the input device.
-
-Status Codes Returned:
-EFI_SUCCESS The keystroke information was returned.
-EFI_NOT_READY There was no keystroke data available.
-EFI_DEVICE_ERROR The keystroke information was not returned due to hardware errors.
-```
-
-The `EFI_INPUT_KEY` function is defined like this:
-```
-typedef struct {
- UINT16 ScanCode;
- CHAR16 UnicodeChar;
-} EFI_INPUT_KEY;
-```
-
-
-Create `InteractiveApp` with the following code:
-```
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiLib.h>
-
-EFI_STATUS
-EFIAPI
-UefiMain (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- UINTN Index;
- EFI_INPUT_KEY Key;
-
- Print(L"Try to guess the secret symbol!\n");
- Print(L"To quit press 'q'\n");
-
- while(TRUE) {
- gBS->WaitForEvent(1, &(gST->ConIn->WaitForKey), &Index);
- gST->ConIn->ReadKeyStroke(gST->ConIn, &Key);
- Print(L"ScanCode = %04x, UnicodeChar = %04x (%c)\n", Key.ScanCode, Key.UnicodeChar, Key.UnicodeChar);
-
- if (Key.UnicodeChar == 'k') {
- Print(L"Correct!\n");
- break;
- } else if (Key.UnicodeChar == 'q') {
- Print(L"Bye!\n");
- break;
- } else {
- Print(L"Wrong!\n");
- }
- }
- gST->ConIn->Reset(gST->ConIn, FALSE);
- return EFI_SUCCESS;
-}
-```
-
-The code is pretty simple, so I hope no detailed explanation is needed.
-App asks for the secret symbol and loops until user presses the correct one ('k'), or presses 'q'.
-
-```
-FS0:\> InteractiveApp.efi
-Try to guess the secret symbol!
-To quit press 'q'
-ScanCode = 0000, UnicodeChar = 0066 (f)
-Wrong!
-ScanCode = 0000, UnicodeChar = 0074 (t)
-Wrong!
-ScanCode = 0000, UnicodeChar = 0073 (s)
-Wrong!
-ScanCode = 0000, UnicodeChar = 0069 (i)
-Wrong!
-ScanCode = 0000, UnicodeChar = 0061 (a)
-Wrong!
-ScanCode = 0000, UnicodeChar = 006E (n)
-Wrong!
-ScanCode = 0000, UnicodeChar = 006B (k)
-Correct!
-FS0:\>
-```
-
-With this app you can also look at how special keys are handled.
-This is the output from "PageUp" key:
-```
-ScanCode = 0017, UnicodeChar = 0000 ( )
-Wrong!
-ScanCode = 0000, UnicodeChar = 005B ([)
-Wrong!
-ScanCode = 0000, UnicodeChar = 0035 (5)
-Wrong!
-ScanCode = 0000, UnicodeChar = 007E (~)
-Wrong!
-```
-