upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/main/display.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/display.c')
-rw-r--r--main/display.c48
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
149static void render_boot_screen(void) { 149static 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
200static void display_task(void *pvParameters) { 200static 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