From bac159f4a40a0f1b7982601b11665f279c457001 Mon Sep 17 00:00:00 2001 From: nick Date: Fri, 19 Jun 2026 00:18:35 -0600 Subject: [PATCH] dashboard: add diag-style battery card double click --- .../esp32-s3-dashboard/dashboard_config.h | 2 +- .../esp32-s3-dashboard/esp32-s3-dashboard.ino | 50 ++++++++++--------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/firmware/esp32-s3-dashboard/dashboard_config.h b/firmware/esp32-s3-dashboard/dashboard_config.h index f1bc59e..9b617ee 100644 --- a/firmware/esp32-s3-dashboard/dashboard_config.h +++ b/firmware/esp32-s3-dashboard/dashboard_config.h @@ -1,6 +1,6 @@ #pragma once -static const char *DASHBOARD_VERSION = "0.1.105-battery-card-doubletap"; +static const char *DASHBOARD_VERSION = "0.1.106-diag-style-battery-doubleclick"; // Update these if your Cargo ESP AP credentials are different. //static const char *CARGO_WIFI_SSID = "OverlandController"; diff --git a/firmware/esp32-s3-dashboard/esp32-s3-dashboard.ino b/firmware/esp32-s3-dashboard/esp32-s3-dashboard.ino index d8346f2..d4170c8 100644 --- a/firmware/esp32-s3-dashboard/esp32-s3-dashboard.ino +++ b/firmware/esp32-s3-dashboard/esp32-s3-dashboard.ino @@ -764,40 +764,35 @@ static void show_dashboard_screen(DashboardScreen screen) } -static void battery_card_doubletap_event_cb(lv_event_t *event) + + +static unsigned long battery_card_last_tap_ms = 0; + +static void battery_card_event_cb(lv_event_t *event) { - if (lv_event_get_code(event) != LV_EVENT_SHORT_CLICKED) return; + if (lv_event_get_code(event) != LV_EVENT_CLICKED) { + return; + } - static uint32_t last_tap_ms = 0; - uint32_t now_ms = millis(); - - if (now_ms - last_tap_ms <= 550) { - last_tap_ms = 0; - Serial.println("NAV: Battery card double tap"); + unsigned long now = millis(); + if (now - battery_card_last_tap_ms < 350) { + battery_card_last_tap_ms = 0; + Serial.println("NAV: Battery card double click"); queue_dashboard_page_switch(SCREEN_BATTERY_DETAIL); return; } - last_tap_ms = now_ms; + battery_card_last_tap_ms = now; } -static void add_battery_card_doubletap_hitbox(lv_obj_t *screen) +static void add_battery_card_tap_target(lv_obj_t *obj) { - lv_obj_t *hitbox = lv_obj_create(screen); - lv_obj_set_size(hitbox, 380, 310); - lv_obj_align(hitbox, LV_ALIGN_TOP_LEFT, 32, 68); - lv_obj_set_style_bg_opa(hitbox, LV_OPA_TRANSP, 0); - lv_obj_set_style_border_opa(hitbox, LV_OPA_TRANSP, 0); - lv_obj_set_style_pad_all(hitbox, 0, 0); - lv_obj_clear_flag(hitbox, LV_OBJ_FLAG_SCROLLABLE); - lv_obj_add_flag(hitbox, LV_OBJ_FLAG_CLICKABLE); + if (obj == nullptr) { + return; + } - lv_obj_add_event_cb(hitbox, battery_card_doubletap_event_cb, LV_EVENT_SHORT_CLICKED, nullptr); - - // Keep swipe navigation working even over the battery card. - lv_obj_add_event_cb(hitbox, dashboard_root_event_cb, LV_EVENT_GESTURE, nullptr); - - lv_obj_move_foreground(hitbox); + lv_obj_add_flag(obj, LV_OBJ_FLAG_CLICKABLE); + lv_obj_add_event_cb(obj, battery_card_event_cb, LV_EVENT_CLICKED, nullptr); } @@ -1698,6 +1693,7 @@ lv_obj_t *system_card = create_card(screen, "", 960, 48, LV_ALIGN_TOP_MID, 0, 12 lv_obj_add_event_cb(system_card, system_card_event_cb, LV_EVENT_CLICKED, nullptr); lv_obj_t *battery_card = create_card(screen, "", 380, 310, LV_ALIGN_TOP_LEFT, 32, 68); battery_card_obj = battery_card; + add_battery_card_tap_target(battery_card); lv_obj_t *temp_card = create_card(screen, "", 260, 310, LV_ALIGN_TOP_LEFT, 426, 68); lv_obj_t *vehicle_card = create_card(screen, "", 292, 310, LV_ALIGN_TOP_RIGHT, -32, 68); lv_obj_t *relay_card = create_card(screen, "", 960, 205, LV_ALIGN_BOTTOM_MID, 0, -8); @@ -1760,6 +1756,12 @@ lv_obj_t *system_card = create_card(screen, "", 960, 48, LV_ALIGN_TOP_MID, 0, 12 lv_obj_align(battery_current_label, LV_ALIGN_TOP_MID, 0, 161); lv_obj_add_flag(battery_current_label, LV_OBJ_FLAG_HIDDEN); + add_battery_card_tap_target(battery_charge_pulse_arc); + add_battery_card_tap_target(battery_soc_arc); + add_battery_card_tap_target(battery_estimate_label); + add_battery_card_tap_target(battery_soc_label); + add_battery_card_tap_target(battery_current_label); + const int temp_tile_w = 236; const int temp_tile_h = 132; const int temp_tile_y[2] = {18, 160};