diff options
author | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2020-12-27 14:47:50 +0100 |
---|---|---|
committer | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2020-12-31 14:33:07 +0100 |
commit | 97d36f069d3362cd09b481fba94ee1de01a1f51b (patch) | |
tree | f17bd8e69037f92902ad69f22f56430dfe1dcf65 /lib | |
parent | db6288de85dce4482712ac5ed59d78ef22cd9ab6 (diff) | |
download | u-boot-97d36f069d3362cd09b481fba94ee1de01a1f51b.zip u-boot-97d36f069d3362cd09b481fba94ee1de01a1f51b.tar.gz u-boot-97d36f069d3362cd09b481fba94ee1de01a1f51b.tar.bz2 |
efi_loader: escape key handling
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>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/efi_loader/efi_console.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/efi_loader/efi_console.c b/lib/efi_loader/efi_console.c index 011acca..7051095 100644 --- a/lib/efi_loader/efi_console.c +++ b/lib/efi_loader/efi_console.c @@ -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 @@ -689,6 +690,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 */ |