]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
efi_loader: escape key handling
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 27 Dec 2020 13:47:50 +0000 (14:47 +0100)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Tue, 29 Dec 2020 01:09:04 +0000 (02:09 +0100)
Up to now the escape key was not correctly detected in UEFI applications.
We had to hit it twice for a single escape to be recognized.

Use a 10 ms delay to detect if we are dealing with the escape key or an
escape sequence.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
lib/efi_loader/efi_console.c

index 011accab78944848b710a3cefe8592a65dc8cccf..705109596eb214d5e8a807b6b39da38de6a76d69 100644 (file)
@@ -14,6 +14,7 @@
 #include <env.h>
 #include <stdio_dev.h>
 #include <video_console.h>
+#include <linux/delay.h>
 
 #define EFI_COUT_MODE_2 2
 #define EFI_MAX_COUT_MODE 3
@@ -688,6 +689,17 @@ static efi_status_t efi_cin_read_key(struct efi_key_data *key)
 
        switch (ch) {
        case 0x1b:
+               /*
+                * If a second key is received within 10 ms, assume that we are
+                * dealing with an escape sequence. Otherwise consider this the
+                * escape key being hit. 10 ms is long enough to work fine at
+                * 1200 baud and above.
+                */
+               udelay(10000);
+               if (!tstc()) {
+                       pressed_key.scan_code = 23;
+                       break;
+               }
                /*
                 * Xterm Control Sequences
                 * https://www.xfree86.org/4.8.0/ctlseqs.html