menu/main: wire up multi-button handling
This commit is contained in:
32
src/menu.c
32
src/menu.c
@@ -55,8 +55,7 @@ static void render_xbm(unsigned char *bits, struct row_buf *b) {
|
||||
|
||||
int menu_index = 0;
|
||||
|
||||
static int btn0_pressed = 0;
|
||||
static int btn1_pressed = 0;
|
||||
static int was_button_pressed[BUTTON_COUNT] = {0};
|
||||
|
||||
void menu_render(void) {
|
||||
char buffer[(48 * 11) / 8];
|
||||
@@ -104,8 +103,9 @@ void menu_render(void) {
|
||||
}
|
||||
|
||||
void menu_switch(void) {
|
||||
btn0_pressed = button_pressed[0];
|
||||
btn1_pressed = button_pressed[1];
|
||||
for (int i = 0; i < BUTTON_COUNT; i++) {
|
||||
was_button_pressed[i] = button_pressed[i];
|
||||
}
|
||||
menu_index = flash_header_valid ? 0 : 1;
|
||||
|
||||
menu_render();
|
||||
@@ -123,14 +123,29 @@ int menu_handler(void) {
|
||||
btldr_timer = 0;
|
||||
}
|
||||
|
||||
if (button_pressed[0] && !btn0_pressed && !button_pressed[1]) {
|
||||
if (button_pressed[0] && !was_button_pressed[0] && !button_pressed[1]) {
|
||||
menu_index = (menu_index + 1) % 3;
|
||||
if (!flash_header_valid && !menu_index) menu_index = 1;
|
||||
menu_render();
|
||||
render_ticks = 0;
|
||||
}
|
||||
|
||||
if (button_pressed[1] && !btn1_pressed && !button_pressed[0]) {
|
||||
#if BUTTON_COUNT == 4
|
||||
if (button_pressed[2] && !was_button_pressed[2]) {
|
||||
menu_index = (menu_index + 2) % 3;
|
||||
if (!flash_header_valid && !menu_index) menu_index = 2;
|
||||
menu_render();
|
||||
render_ticks = 0;
|
||||
}
|
||||
if (button_pressed[3] && !was_button_pressed[3]) {
|
||||
menu_index = (menu_index + 1) % 3;
|
||||
if (!flash_header_valid && !menu_index) menu_index = 1;
|
||||
menu_render();
|
||||
render_ticks = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (button_pressed[1] && !was_button_pressed[1] && !button_pressed[0]) {
|
||||
if (menu_index == 0) {
|
||||
return 0;
|
||||
} else if (menu_index == 1) {
|
||||
@@ -147,8 +162,9 @@ int menu_handler(void) {
|
||||
menu_render();
|
||||
}
|
||||
|
||||
btn0_pressed = button_pressed[0];
|
||||
btn1_pressed = button_pressed[1];
|
||||
for (int i = 0; i < BUTTON_COUNT; i++) {
|
||||
was_button_pressed[i] = button_pressed[i];
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user