dashboard: make battery detail a non-destructive overlay page

This commit is contained in:
2026-06-18 23:19:31 -06:00
parent 6459c8f4d7
commit 1ea44f9312
2 changed files with 58 additions and 13 deletions
@@ -1,6 +1,6 @@
#pragma once
static const char *DASHBOARD_VERSION = "0.1.92-loop-page-switch";
static const char *DASHBOARD_VERSION = "0.1.93-battery-detail-overlay";
// Update these if your Cargo ESP AP credentials are different.
//static const char *CARGO_WIFI_SSID = "OverlandController";
@@ -36,6 +36,7 @@ enum DashboardScreen {
};
static DashboardScreen current_dashboard_screen = SCREEN_OVERVIEW;
static lv_obj_t *battery_detail_page = nullptr;
static lv_obj_t *battery_detail_soc_label = nullptr;
static lv_obj_t *battery_detail_status_label = nullptr;
static lv_obj_t *battery_detail_voltage_label = nullptr;
@@ -651,15 +652,54 @@ static void update_battery_detail_widgets()
set_label_text_if_changed(battery_detail_delta_label, last_battery_detail_delta_text, delta);
}
static void clear_battery_detail_refs()
{
battery_detail_soc_label = nullptr;
battery_detail_status_label = nullptr;
battery_detail_voltage_label = nullptr;
battery_detail_current_label = nullptr;
battery_detail_power_label = nullptr;
battery_detail_remaining_label = nullptr;
battery_detail_capacity_label = nullptr;
battery_detail_temp_label = nullptr;
battery_detail_delta_label = nullptr;
battery_detail_estimate_label = nullptr;
}
static void close_battery_detail_screen()
{
if (battery_detail_page != nullptr) {
lv_obj_del(battery_detail_page);
battery_detail_page = nullptr;
}
clear_battery_detail_refs();
current_dashboard_screen = SCREEN_OVERVIEW;
}
static void create_battery_detail_screen()
{
if (battery_detail_page != nullptr) {
lv_obj_move_foreground(battery_detail_page);
current_dashboard_screen = SCREEN_BATTERY_DETAIL;
return;
}
lv_obj_t *screen = lv_scr_act();
lv_obj_clean(screen);
battery_detail_page = lv_obj_create(screen);
lv_obj_set_size(battery_detail_page, lv_pct(100), lv_pct(100));
lv_obj_align(battery_detail_page, LV_ALIGN_TOP_LEFT, 0, 0);
lv_obj_set_style_bg_color(battery_detail_page, lv_color_hex(0x101418), 0);
lv_obj_set_style_border_width(battery_detail_page, 0, 0);
lv_obj_set_style_pad_all(battery_detail_page, 0, 0);
lv_obj_clear_flag(battery_detail_page, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_add_event_cb(battery_detail_page, dashboard_root_event_cb, LV_EVENT_GESTURE, nullptr);
current_dashboard_screen = SCREEN_BATTERY_DETAIL;
lv_obj_set_style_bg_color(screen, lv_color_hex(0x101418), 0);
lv_obj_add_event_cb(screen, dashboard_root_event_cb, LV_EVENT_GESTURE, nullptr);
lv_obj_t *system_card = create_card(battery_detail_page, "", 960, 48, LV_ALIGN_TOP_MID, 0, 12);
lv_obj_t *system_card = create_card(screen, "", 960, 48, LV_ALIGN_TOP_MID, 0, 12);
lv_obj_t *title = lv_label_create(system_card);
lv_label_set_text(title, "BATTERY DETAIL");
lv_obj_set_style_text_color(title, lv_color_hex(0xFFFFFF), 0);
@@ -672,7 +712,7 @@ static void create_battery_detail_screen()
lv_obj_set_style_text_font(hint, &lv_font_montserrat_26, 0);
lv_obj_align(hint, LV_ALIGN_RIGHT_MID, -18, 0);
lv_obj_t *soc_card = create_card(screen, "", 300, 500, LV_ALIGN_TOP_LEFT, 32, 78);
lv_obj_t *soc_card = create_card(battery_detail_page, "", 300, 500, LV_ALIGN_TOP_LEFT, 32, 78);
battery_detail_soc_label = lv_label_create(soc_card);
lv_label_set_text(battery_detail_soc_label, "--%");
lv_obj_set_style_text_color(battery_detail_soc_label, lv_color_hex(0xFFFFFF), 0);
@@ -681,15 +721,17 @@ static void create_battery_detail_screen()
lv_obj_set_style_text_align(battery_detail_soc_label, LV_TEXT_ALIGN_CENTER, 0);
lv_obj_align(battery_detail_soc_label, LV_ALIGN_CENTER, 0, -20);
battery_detail_value_label(screen, "Voltage", &battery_detail_voltage_label, 356, 78);
battery_detail_value_label(screen, "Current", &battery_detail_current_label, 670, 78);
battery_detail_value_label(screen, "Power", &battery_detail_power_label, 356, 220);
battery_detail_value_label(screen, "Remaining", &battery_detail_remaining_label, 670, 220);
battery_detail_value_label(screen, "Capacity", &battery_detail_capacity_label, 356, 362);
battery_detail_value_label(screen, "Battery Temp", &battery_detail_temp_label, 670, 362);
battery_detail_value_label(screen, "Cell Delta", &battery_detail_delta_label, 356, 504);
battery_detail_value_label(battery_detail_page, "Voltage", &battery_detail_voltage_label, 356, 78);
battery_detail_value_label(battery_detail_page, "Current", &battery_detail_current_label, 670, 78);
battery_detail_value_label(battery_detail_page, "Power", &battery_detail_power_label, 356, 220);
battery_detail_value_label(battery_detail_page, "Remaining", &battery_detail_remaining_label, 670, 220);
battery_detail_value_label(battery_detail_page, "Capacity", &battery_detail_capacity_label, 356, 362);
battery_detail_value_label(battery_detail_page, "Battery Temp", &battery_detail_temp_label, 670, 362);
battery_detail_value_label(battery_detail_page, "Cell Delta", &battery_detail_delta_label, 356, 504);
update_battery_detail_widgets();
lv_obj_move_foreground(battery_detail_page);
}
static void show_dashboard_screen(DashboardScreen screen)
@@ -1538,6 +1580,9 @@ static void show_boot_screen()
static void create_overland_overview_screen()
{
battery_detail_page = nullptr;
clear_battery_detail_refs();
lv_obj_t *screen = lv_scr_act();
lv_obj_clean(screen);
current_dashboard_screen = SCREEN_OVERVIEW;