menu/main: wire up multi-button handling

This commit is contained in:
Puck Meerburg
2026-02-06 17:58:08 +00:00
parent b5fb2372fb
commit 4eb0c6cdd2
2 changed files with 34 additions and 18 deletions

View File

@@ -11,6 +11,7 @@
#include "ble.h" #include "ble.h"
#include "cdc.h" #include "cdc.h"
#include "wang.h" #include "wang.h"
#include "platform.h"
int anim_render(uint16_t *fb, int index, int frame); int anim_render(uint16_t *fb, int index, int frame);
@@ -25,10 +26,7 @@ enum usb_control_resp bl_handler(enum usb_control_state state) {
} }
int btn1_was_pressed = 1; int button_was_pressed[BUTTON_COUNT] = {0};
int btn2_was_pressed = 0;
int btn1_hold = 0;
int btn2_hold = 0;
int image_index = 0; int image_index = 0;
@@ -46,11 +44,11 @@ int main_handler(void) {
return 1; return 1;
} }
if (button_pressed[0] && !btn1_was_pressed) { if (button_pressed[0] && !button_was_pressed[0]) {
display_brightness = (display_brightness + 1) % 16; display_brightness = (display_brightness + 1) % 16;
} }
if (button_pressed[1] && !btn2_was_pressed) { if (button_pressed[1] && !button_was_pressed[1]) {
if (flash_header_valid) { if (flash_header_valid) {
image_index++; image_index++;
if (!flash_header.widths[image_index]) image_index = 0; if (!flash_header.widths[image_index]) image_index = 0;
@@ -75,8 +73,9 @@ int main_handler(void) {
display_flip(); display_flip();
} }
btn2_was_pressed = button_pressed[1]; for (int i = 0; i < BUTTON_COUNT; i++) {
btn1_was_pressed = button_pressed[0]; button_was_pressed[i] = button_pressed[i];
}
if (!flash_header_valid) return 1; if (!flash_header_valid) return 1;
@@ -124,8 +123,9 @@ int main()
if (cur_handler) { if (cur_handler) {
cur_handler = menu_handler(); cur_handler = menu_handler();
if (!cur_handler) { if (!cur_handler) {
btn2_was_pressed = button_pressed[1]; for (int i = 0; i < BUTTON_COUNT; i++) {
btn1_was_pressed = button_pressed[0]; button_was_pressed[i] = button_pressed[i];
}
subframe = 99999; subframe = 99999;
} }
} else } else

View File

@@ -55,8 +55,7 @@ static void render_xbm(unsigned char *bits, struct row_buf *b) {
int menu_index = 0; int menu_index = 0;
static int btn0_pressed = 0; static int was_button_pressed[BUTTON_COUNT] = {0};
static int btn1_pressed = 0;
void menu_render(void) { void menu_render(void) {
char buffer[(48 * 11) / 8]; char buffer[(48 * 11) / 8];
@@ -104,8 +103,9 @@ void menu_render(void) {
} }
void menu_switch(void) { void menu_switch(void) {
btn0_pressed = button_pressed[0]; for (int i = 0; i < BUTTON_COUNT; i++) {
btn1_pressed = button_pressed[1]; was_button_pressed[i] = button_pressed[i];
}
menu_index = flash_header_valid ? 0 : 1; menu_index = flash_header_valid ? 0 : 1;
menu_render(); menu_render();
@@ -123,14 +123,29 @@ int menu_handler(void) {
btldr_timer = 0; 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; menu_index = (menu_index + 1) % 3;
if (!flash_header_valid && !menu_index) menu_index = 1; if (!flash_header_valid && !menu_index) menu_index = 1;
menu_render(); menu_render();
render_ticks = 0; 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) { if (menu_index == 0) {
return 0; return 0;
} else if (menu_index == 1) { } else if (menu_index == 1) {
@@ -147,8 +162,9 @@ int menu_handler(void) {
menu_render(); menu_render();
} }
btn0_pressed = button_pressed[0]; for (int i = 0; i < BUTTON_COUNT; i++) {
btn1_pressed = button_pressed[1]; was_button_pressed[i] = button_pressed[i];
}
return 1; return 1;
} }