mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
efi: serial: Support arrow keys
At present only the backspace key is supported in U-Boot, when running as an EFI app. Add support for arrows, home and end as well, to make the CLI more friendly. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
This commit is contained in:
parent
613cd0c467
commit
2996066110
1 changed files with 9 additions and 2 deletions
|
@ -24,6 +24,9 @@ struct serial_efi_priv {
|
|||
bool have_key;
|
||||
};
|
||||
|
||||
/* Convert a lower-case character to its ctrl-char equivalent */
|
||||
#define CTL_CH(c) ((c) - 'a' + 1)
|
||||
|
||||
int serial_efi_setbrg(struct udevice *dev, int baudrate)
|
||||
{
|
||||
return 0;
|
||||
|
@ -49,6 +52,7 @@ static int serial_efi_get_key(struct serial_efi_priv *priv)
|
|||
static int serial_efi_getc(struct udevice *dev)
|
||||
{
|
||||
struct serial_efi_priv *priv = dev_get_priv(dev);
|
||||
char conv_scan[10] = {0, 'p', 'n', 'f', 'b', 'a', 'e', 0, 8};
|
||||
int ret, ch;
|
||||
|
||||
ret = serial_efi_get_key(priv);
|
||||
|
@ -63,8 +67,11 @@ static int serial_efi_getc(struct udevice *dev)
|
|||
* key scan code of 8. Handle this so that backspace works correctly
|
||||
* in the U-Boot command line.
|
||||
*/
|
||||
if (!ch && priv->key.scan_code == 8)
|
||||
ch = 8;
|
||||
if (!ch && priv->key.scan_code < sizeof(conv_scan)) {
|
||||
ch = conv_scan[priv->key.scan_code];
|
||||
if (ch >= 'a')
|
||||
ch -= 'a' - 1;
|
||||
}
|
||||
debug(" [%x %x %x] ", ch, priv->key.unicode_char, priv->key.scan_code);
|
||||
|
||||
return ch;
|
||||
|
|
Loading…
Reference in a new issue