esp32 firmware for a toaster reflow oven WIP!!!!!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
reflower/main/gui.c

87 lines
1.8 KiB

5 years ago
#include "gui.h"
#include "nokia.h"
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
static void gui_thread(void *arg);
TaskHandle_t hGuiThread = NULL;
void gui_init() {
printf("GUI init\n");
LCD_setup();
LCD_setContrast(60);
5 years ago
LCD_clearDisplay(0);
LCD_setStr("Hello World", 0, 0, 1);
LCD_updateDisplay();
int rv = xTaskCreate(gui_thread, "gui", 4096, NULL, 6, &hGuiThread);
5 years ago
assert (rv == pdPASS);
}
/**
* Notification API:
*
* 0b1 - knob CW
* 0b10 - knowb CCW
* 0b100 - button released
* 0b1000 - button pressed
*
* @param arg
*/
5 years ago
static void __attribute__((noreturn)) gui_thread(void *arg) {
uint32_t pos = 20;
bool btn = 0;
5 years ago
#define NMAX 60
while (1) {
uint32_t value = 0;
5 years ago
xTaskNotifyWait(0, ULONG_MAX, &value, portMAX_DELAY);
// printf("Knob event 0x%02x ", value);
5 years ago
5 years ago
if (value & 0b1000) {
// printf("PUSH ");
btn = 1;
} else if (value & 0b100) {
btn = 0;
5 years ago
}
if (value & 0b01) {
// printf("FWD ");
if (pos == NMAX) {
pos = 0;
5 years ago
}
else {
pos += 1;
5 years ago
}
5 years ago
}
if (value & 0b10) {
// printf("BACK ");
if (pos == 0) {
pos = NMAX;
}
else {
pos--;
}
5 years ago
}
LCD_setRect(0, 15, 83, 35, 1, 1);
char buf[10];
sprintf(buf, "%3d %s", pos, btn?"BTN":"");
LCD_setStr(buf, 2, 17, 0);
LCD_updateDisplay();
// printf(">");
// for (int i=0; i<pos; i++) {
// printf(" ");
// }
// printf("#");
// for (int i=pos; i<NMAX; i++) {
// printf(" ");
// }
// printf("<\n");
5 years ago
}
}