summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorRenze Nicolai <renze@rnplus.nl>2022-06-03 05:59:42 +0200
committerRenze Nicolai <renze@rnplus.nl>2022-06-03 05:59:42 +0200
commite2fc23eed3673c1f33ec06d8aad0d5ad96010ac4 (patch)
tree977505e43e1651bffc6e762d2a593364caef5446 /main
parent5ff7e84997dca973132bb8b07a93d70f8657e00d (diff)
downloadmch2022-e2fc23eed3673c1f33ec06d8aad0d5ad96010ac4.tar.gz
mch2022-e2fc23eed3673c1f33ec06d8aad0d5ad96010ac4.tar.bz2
mch2022-e2fc23eed3673c1f33ec06d8aad0d5ad96010ac4.zip
Add button test
Diffstat (limited to 'main')
-rw-r--r--main/CMakeLists.txt1
-rw-r--r--main/button_test.c106
-rw-r--r--main/include/button_test.h9
-rw-r--r--main/menus/dev.c7
4 files changed, 122 insertions, 1 deletions
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt
index 2c6644e..02468fc 100644
--- a/main/CMakeLists.txt
+++ b/main/CMakeLists.txt
@@ -23,6 +23,7 @@ idf_component_register(
"test_common.c"
"factory_test.c"
"animation.c"
+ "button_test.c"
INCLUDE_DIRS "."
"include"
"menus"
diff --git a/main/button_test.c b/main/button_test.c
new file mode 100644
index 0000000..3f67524
--- /dev/null
+++ b/main/button_test.c
@@ -0,0 +1,106 @@
+#include <stdio.h>
+#include <sdkconfig.h>
+#include <freertos/FreeRTOS.h>
+#include <freertos/task.h>
+#include <freertos/queue.h>
+#include "ili9341.h"
+#include "pax_gfx.h"
+#include "rp2040.h"
+
+void test_buttons(xQueueHandle buttonQueue, pax_buf_t* pax_buffer, ILI9341* ili9341) {
+ bool render = true;
+ bool quit = false;
+
+ bool btn_joy_down = false;
+ bool btn_joy_up = false;
+ bool btn_joy_left = false;
+ bool btn_joy_right = false;
+ bool btn_joy_press = false;
+ bool btn_home = false;
+ bool btn_menu = false;
+ bool btn_select = false;
+ bool btn_start = false;
+ bool btn_accept = false;
+ bool btn_back = false;
+
+ while (!quit) {
+ rp2040_input_message_t buttonMessage = {0};
+ if (xQueueReceive(buttonQueue, &buttonMessage, 16 / portTICK_PERIOD_MS) == pdTRUE) {
+ uint8_t pin = buttonMessage.input;
+ bool value = buttonMessage.state;
+ render = true;
+ switch(pin) {
+ case RP2040_INPUT_JOYSTICK_DOWN:
+ btn_joy_down = value;
+ break;
+ case RP2040_INPUT_JOYSTICK_UP:
+ btn_joy_up = value;
+ break;
+ case RP2040_INPUT_JOYSTICK_LEFT:
+ btn_joy_left = value;
+ break;
+ case RP2040_INPUT_JOYSTICK_RIGHT:
+ btn_joy_right = value;
+ break;
+ case RP2040_INPUT_JOYSTICK_PRESS:
+ btn_joy_press = value;
+ break;
+ case RP2040_INPUT_BUTTON_HOME:
+ btn_home = value;
+ break;
+ case RP2040_INPUT_BUTTON_MENU:
+ btn_menu = value;
+ break;
+ case RP2040_INPUT_BUTTON_SELECT:
+ btn_select = value;
+ break;
+ case RP2040_INPUT_BUTTON_START:
+ btn_start = value;
+ break;
+ case RP2040_INPUT_BUTTON_ACCEPT:
+ btn_accept = value;
+ break;
+ case RP2040_INPUT_BUTTON_BACK:
+ btn_back = value;
+ default:
+ break;
+ }
+ }
+
+ if (render) {
+ pax_noclip(pax_buffer);
+ pax_background(pax_buffer, 0x325aa8);
+ pax_draw_text(pax_buffer, 0xFFFFFFFF, NULL, 18, 0, 20*0, "Press HOME + START to exit");
+ char buffer[64];
+ snprintf(buffer, sizeof(buffer), "JOY DOWN %s", btn_joy_down ? "PRESSED" : "released");
+ pax_draw_text(pax_buffer, 0xFFFFFFFF, NULL, 18, 0, 20*1, buffer);
+ snprintf(buffer, sizeof(buffer), "JOY UP %s", btn_joy_up ? "PRESSED" : "released");
+ pax_draw_text(pax_buffer, 0xFFFFFFFF, NULL, 18, 0, 20*2, buffer);
+ snprintf(buffer, sizeof(buffer), "JOY LEFT %s", btn_joy_left ? "PRESSED" : "released");
+ pax_draw_text(pax_buffer, 0xFFFFFFFF, NULL, 18, 0, 20*3, buffer);
+ snprintf(buffer, sizeof(buffer), "JOY RIGHT %s", btn_joy_right ? "PRESSED" : "released");
+ pax_draw_text(pax_buffer, 0xFFFFFFFF, NULL, 18, 0, 20*4, buffer);
+ snprintf(buffer, sizeof(buffer), "JOY PRESS %s", btn_joy_press ? "PRESSED" : "released");
+ pax_draw_text(pax_buffer, 0xFFFFFFFF, NULL, 18, 0, 20*5, buffer);
+ snprintf(buffer, sizeof(buffer), "BTN HOME %s", btn_home ? "PRESSED" : "released");
+ pax_draw_text(pax_buffer, 0xFFFFFFFF, NULL, 18, 0, 20*6, buffer);
+ snprintf(buffer, sizeof(buffer), "BTN MENU %s", btn_menu ? "PRESSED" : "released");
+ pax_draw_text(pax_buffer, 0xFFFFFFFF, NULL, 18, 0, 20*7, buffer);
+ snprintf(buffer, sizeof(buffer), "BTN SELECT %s", btn_select ? "PRESSED" : "released");
+ pax_draw_text(pax_buffer, 0xFFFFFFFF, NULL, 18, 0, 20*8, buffer);
+ snprintf(buffer, sizeof(buffer), "BTN START %s", btn_start ? "PRESSED" : "released");
+ pax_draw_text(pax_buffer, 0xFFFFFFFF, NULL, 18, 0, 20*9, buffer);
+ snprintf(buffer, sizeof(buffer), "BTN A %s", btn_accept ? "PRESSED" : "released");
+ pax_draw_text(pax_buffer, 0xFFFFFFFF, NULL, 18, 0, 20*10, buffer);
+ snprintf(buffer, sizeof(buffer), "BTN B %s", btn_back ? "PRESSED" : "released");
+ pax_draw_text(pax_buffer, 0xFFFFFFFF, NULL, 18, 0, 20*11, buffer);
+ ili9341_write(ili9341, pax_buffer->buf);
+ render = false;
+ }
+
+ if (btn_home && btn_start) {
+ quit = true;
+ }
+ }
+}
+
diff --git a/main/include/button_test.h b/main/include/button_test.h
new file mode 100644
index 0000000..6b16506
--- /dev/null
+++ b/main/include/button_test.h
@@ -0,0 +1,9 @@
+#include <stdio.h>
+#include <sdkconfig.h>
+#include <freertos/FreeRTOS.h>
+#include <freertos/task.h>
+#include <freertos/queue.h>
+#include "ili9341.h"
+#include "pax_gfx.h"
+
+void test_buttons(xQueueHandle buttonQueue, pax_buf_t* pax_buffer, ILI9341* ili9341);
diff --git a/main/menus/dev.c b/main/menus/dev.c
index 016dc06..2db34b2 100644
--- a/main/menus/dev.c
+++ b/main/menus/dev.c
@@ -21,6 +21,7 @@
#include "file_browser.h"
#include "fpga_test.h"
#include "animation.h"
+#include "button_test.h"
extern const uint8_t dev_png_start[] asm("_binary_dev_png_start");
extern const uint8_t dev_png_end[] asm("_binary_dev_png_end");
@@ -32,7 +33,8 @@ typedef enum action {
ACTION_FPGA_TEST,
ACTION_FILE_BROWSER,
ACTION_FILE_BROWSER_INT,
- ACTION_ANIMATION
+ ACTION_ANIMATION,
+ ACTION_BUTTON_TEST
} menu_dev_action_t;
void render_dev_help(pax_buf_t* pax_buffer) {
@@ -65,6 +67,7 @@ void menu_dev(xQueueHandle buttonQueue, pax_buf_t* pax_buffer, ILI9341* ili9341)
menu_insert_item(menu, "File browser (SD card)", NULL, (void*) ACTION_FILE_BROWSER, -1);
menu_insert_item(menu, "File browser (internal)", NULL, (void*) ACTION_FILE_BROWSER_INT, -1);
menu_insert_item(menu, "Animation", NULL, (void*) ACTION_ANIMATION, -1);
+ menu_insert_item(menu, "Button test", NULL, (void*) ACTION_BUTTON_TEST, -1);
bool render = true;
menu_dev_action_t action = ACTION_NONE;
@@ -125,6 +128,8 @@ void menu_dev(xQueueHandle buttonQueue, pax_buf_t* pax_buffer, ILI9341* ili9341)
file_browser(buttonQueue, pax_buffer, ili9341, "/internal");
} else if (action == ACTION_ANIMATION) {
display_animation(pax_buffer, ili9341);
+ } else if (action == ACTION_BUTTON_TEST) {
+ test_buttons(buttonQueue, pax_buffer, ili9341);
} else if (action == ACTION_BACK) {
break;
}