mch2022-talktopics/main/test_common.c
2022-06-03 01:30:50 +02:00

65 lines
1.9 KiB
C

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <esp_log.h>
#include <freertos/FreeRTOS.h>
#include <freertos/queue.h>
#include <driver/gpio.h>
#include "hardware.h"
#include "ili9341.h"
#include "ice40.h"
#include "rp2040.h"
#include "pax_gfx.h"
typedef bool (*test_fn)(uint32_t *rc);
bool test_wait_for_response(uint32_t *rc) {
RP2040* rp2040 = get_rp2040();
rp2040_input_message_t button_message = {0};
if (rc != NULL) *rc = 0;
while (1) {
if (xQueueReceive(rp2040->queue, &button_message, portMAX_DELAY) == pdTRUE) {
if (button_message.state) {
switch(button_message.input) {
case RP2040_INPUT_BUTTON_HOME:
case RP2040_INPUT_BUTTON_MENU:
case RP2040_INPUT_BUTTON_BACK:
return false;
case RP2040_INPUT_BUTTON_ACCEPT:
if (rc != NULL) *rc = 1;
return true;
default:
break;
}
}
}
}
}
bool run_test(pax_buf_t* pax_buffer, const pax_font_t *font, ILI9341* ili9341, int line, const char *test_name, test_fn fn) {
bool test_result;
uint32_t rc;
/* Test name */
pax_draw_text(pax_buffer, 0xffffffff, font, 18, 0, 20*line, test_name);
if (ili9341) ili9341_write(ili9341, pax_buffer->buf);
/* Run the test */
test_result = fn(&rc);
/* Display result */
if (!test_result) {
/* Error */
char buf[10];
snprintf(buf, sizeof(buf), "%08x", rc);
pax_draw_text(pax_buffer, 0xffff0000, font, 18, 200, 20*line, buf);
} else {
/* OK ! */
pax_draw_text(pax_buffer, 0xff00ff00, font, 18, 200, 20*line, " OK");
}
if (ili9341) ili9341_write(ili9341, pax_buffer->buf);
/* Pass through the 'OK' status */
return test_result;
}