menu/main: wire up multi-button handling
This commit is contained in:
20
src/main.c
20
src/main.c
@@ -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
|
||||||
|
|||||||
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;
|
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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user