diff --git a/src/main.c b/src/main.c index 991ecc3..0c96327 100644 --- a/src/main.c +++ b/src/main.c @@ -11,6 +11,7 @@ #include "ble.h" #include "cdc.h" #include "wang.h" +#include "platform.h" 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 btn2_was_pressed = 0; -int btn1_hold = 0; -int btn2_hold = 0; +int button_was_pressed[BUTTON_COUNT] = {0}; int image_index = 0; @@ -46,11 +44,11 @@ int main_handler(void) { return 1; } - if (button_pressed[0] && !btn1_was_pressed) { + if (button_pressed[0] && !button_was_pressed[0]) { 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) { image_index++; if (!flash_header.widths[image_index]) image_index = 0; @@ -75,8 +73,9 @@ int main_handler(void) { display_flip(); } - btn2_was_pressed = button_pressed[1]; - btn1_was_pressed = button_pressed[0]; + for (int i = 0; i < BUTTON_COUNT; i++) { + button_was_pressed[i] = button_pressed[i]; + } if (!flash_header_valid) return 1; @@ -124,8 +123,9 @@ int main() if (cur_handler) { cur_handler = menu_handler(); if (!cur_handler) { - btn2_was_pressed = button_pressed[1]; - btn1_was_pressed = button_pressed[0]; + for (int i = 0; i < BUTTON_COUNT; i++) { + button_was_pressed[i] = button_pressed[i]; + } subframe = 99999; } } else diff --git a/src/menu.c b/src/menu.c index e89f6db..549e7ef 100644 --- a/src/menu.c +++ b/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; }