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
|
|
@ -24,6 +24,9 @@ struct serial_efi_priv {
|
||||||
bool have_key;
|
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)
|
int serial_efi_setbrg(struct udevice *dev, int baudrate)
|
||||||
{
|
{
|
||||||
return 0;
|
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)
|
static int serial_efi_getc(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct serial_efi_priv *priv = dev_get_priv(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;
|
int ret, ch;
|
||||||
|
|
||||||
ret = serial_efi_get_key(priv);
|
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
|
* key scan code of 8. Handle this so that backspace works correctly
|
||||||
* in the U-Boot command line.
|
* in the U-Boot command line.
|
||||||
*/
|
*/
|
||||||
if (!ch && priv->key.scan_code == 8)
|
if (!ch && priv->key.scan_code < sizeof(conv_scan)) {
|
||||||
ch = 8;
|
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);
|
debug(" [%x %x %x] ", ch, priv->key.unicode_char, priv->key.scan_code);
|
||||||
|
|
||||||
return ch;
|
return ch;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue