diff options
Diffstat (limited to 'main/display.c')
| -rw-r--r-- | main/display.c | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/main/display.c b/main/display.c index 1085d4a..26d0c5f 100644 --- a/main/display.c +++ b/main/display.c | |||
| @@ -148,8 +148,8 @@ void display_render_qr(const char *text) { | |||
| 148 | 148 | ||
| 149 | static void render_boot_screen(void) { | 149 | static void render_boot_screen(void) { |
| 150 | axs15231b_fill_screen(0x0000); | 150 | axs15231b_fill_screen(0x0000); |
| 151 | display_render_text(64, 210, "TollGate", 0xF79F, 0x0000, 3); | 151 | display_render_text(64, 210, "TollGate", 0x07FF, 0x0000, 3); |
| 152 | display_render_text(72, 250, "starting...", 0xB5B6, 0x0000, 2); | 152 | display_render_text(72, 250, "starting...", 0xFFE0, 0x0000, 2); |
| 153 | axs15231b_flush(); | 153 | axs15231b_flush(); |
| 154 | } | 154 | } |
| 155 | 155 | ||
| @@ -199,37 +199,47 @@ static void render_error_screen(void) { | |||
| 199 | 199 | ||
| 200 | static void display_task(void *pvParameters) { | 200 | static void display_task(void *pvParameters) { |
| 201 | ESP_LOGI(TAG, "Display task started"); | 201 | ESP_LOGI(TAG, "Display task started"); |
| 202 | vTaskDelay(pdMS_TO_TICKS(500)); | ||
| 203 | 202 | ||
| 204 | while (1) { | 203 | while (1) { |
| 205 | display_state_t state = s_state; | 204 | display_state_t state = s_state; |
| 206 | 205 | ||
| 206 | bool qr_changed = false; | ||
| 207 | if (state == DISPLAY_READY) { | 207 | if (state == DISPLAY_READY) { |
| 208 | int64_t now = (int64_t)xTaskGetTickCount() * portTICK_PERIOD_MS; | 208 | int64_t now = (int64_t)xTaskGetTickCount() * portTICK_PERIOD_MS; |
| 209 | if ((now - s_last_qr_switch) >= QR_CYCLE_MS) { | 209 | if ((now - s_last_qr_switch) >= QR_CYCLE_MS) { |
| 210 | s_qr_mode = (s_qr_mode == DISPLAY_QR_WIFI) ? DISPLAY_QR_PORTAL : DISPLAY_QR_WIFI; | 210 | s_qr_mode = (s_qr_mode == DISPLAY_QR_WIFI) ? DISPLAY_QR_PORTAL : DISPLAY_QR_WIFI; |
| 211 | s_last_qr_switch = now; | 211 | s_last_qr_switch = now; |
| 212 | qr_changed = true; | ||
| 212 | } | 213 | } |
| 213 | } | 214 | } |
| 214 | 215 | ||
| 215 | switch (state) { | 216 | if (s_force_render || state != s_rendered_state || |
| 216 | case DISPLAY_BOOT: | 217 | (state == DISPLAY_READY && qr_changed)) { |
| 217 | render_boot_screen(); | 218 | s_force_render = false; |
| 218 | break; | 219 | |
| 219 | case DISPLAY_READY: | 220 | switch (state) { |
| 220 | render_ready_screen(); | 221 | case DISPLAY_BOOT: |
| 221 | break; | 222 | render_boot_screen(); |
| 222 | case DISPLAY_PAYMENT_RECEIVED: | 223 | break; |
| 223 | render_payment_screen(); | 224 | case DISPLAY_READY: |
| 224 | vTaskDelay(pdMS_TO_TICKS(2000)); | 225 | render_ready_screen(); |
| 225 | s_state = DISPLAY_READY; | 226 | break; |
| 226 | break; | 227 | case DISPLAY_PAYMENT_RECEIVED: |
| 227 | case DISPLAY_ERROR: | 228 | render_payment_screen(); |
| 228 | render_error_screen(); | 229 | vTaskDelay(pdMS_TO_TICKS(2000)); |
| 229 | break; | 230 | s_state = DISPLAY_READY; |
| 231 | s_force_render = true; | ||
| 232 | break; | ||
| 233 | case DISPLAY_ERROR: | ||
| 234 | render_error_screen(); | ||
| 235 | break; | ||
| 236 | } | ||
| 237 | |||
| 238 | s_rendered_state = state; | ||
| 239 | s_rendered_qr_mode = s_qr_mode; | ||
| 230 | } | 240 | } |
| 231 | 241 | ||
| 232 | vTaskDelay(pdMS_TO_TICKS(1000)); | 242 | vTaskDelay(pdMS_TO_TICKS(500)); |
| 233 | } | 243 | } |
| 234 | } | 244 | } |
| 235 | 245 | ||