menu: Factor out menu-keypress decoding

Move this code into a separate function so that it can be used in the new
VBE menu.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2023-01-06 08:52:35 -06:00 committed by Tom Rini
parent 24d8e1b37b
commit 9e7ac0b0be
2 changed files with 40 additions and 18 deletions

View file

@ -483,26 +483,11 @@ enum bootmenu_key bootmenu_autoboot_loop(struct bootmenu_data *menu,
return key;
}
enum bootmenu_key bootmenu_loop(struct bootmenu_data *menu,
struct cli_ch_state *cch)
enum bootmenu_key bootmenu_conv_key(int ichar)
{
enum bootmenu_key key = BKEY_NONE;
int c;
enum bootmenu_key key;
c = cli_ch_process(cch, 0);
if (!c) {
while (!c && !tstc()) {
schedule();
mdelay(10);
c = cli_ch_process(cch, -ETIMEDOUT);
}
if (!c) {
c = getchar();
c = cli_ch_process(cch, c);
}
}
switch (c) {
switch (ichar) {
case '\n':
/* enter key was pressed */
key = BKEY_SELECT;
@ -527,7 +512,34 @@ enum bootmenu_key bootmenu_loop(struct bootmenu_data *menu,
case ' ':
key = BKEY_SPACE;
break;
default:
key = BKEY_NONE;
break;
}
return key;
}
enum bootmenu_key bootmenu_loop(struct bootmenu_data *menu,
struct cli_ch_state *cch)
{
enum bootmenu_key key;
int c;
c = cli_ch_process(cch, 0);
if (!c) {
while (!c && !tstc()) {
schedule();
mdelay(10);
c = cli_ch_process(cch, -ETIMEDOUT);
}
if (!c) {
c = getchar();
c = cli_ch_process(cch, c);
}
}
key = bootmenu_conv_key(c);
return key;
}

View file

@ -53,6 +53,8 @@ enum bootmenu_key {
BKEY_PLUS,
BKEY_MINUS,
BKEY_SPACE,
BKEY_COUNT,
};
/**
@ -101,4 +103,12 @@ enum bootmenu_key bootmenu_autoboot_loop(struct bootmenu_data *menu,
enum bootmenu_key bootmenu_loop(struct bootmenu_data *menu,
struct cli_ch_state *cch);
/**
* bootmenu_conv_key() - Convert a U-Boot keypress into a menu key
*
* @ichar: Keypress to convert (ASCII, including control characters)
* Returns: Menu key that corresponds to @ichar, or BKEY_NONE if none
*/
enum bootmenu_key bootmenu_conv_key(int ichar);
#endif /* __MENU_H__ */