From ce0c429dae8bf6a975ea95997d11806d619ffe74 Mon Sep 17 00:00:00 2001 From: jpirnay Date: Tue, 17 Mar 2026 21:12:42 +0100 Subject: [PATCH] Refine --- src/SystemStatus.h | 7 ++++ .../settings/SystemInformationActivity.cpp | 33 +++++++++++++++---- src/network/CrossPointWebServer.cpp | 4 +-- 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/SystemStatus.h b/src/SystemStatus.h index 38b39f46..f76ea392 100644 --- a/src/SystemStatus.h +++ b/src/SystemStatus.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include // Snapshot of device system status, shared between the web server and the @@ -13,6 +14,9 @@ struct SystemStatus { std::string macAddress; uint32_t freeHeapBytes; uint32_t uptimeSeconds; + uint64_t sdTotalBytes; + uint64_t sdUsedBytes; + uint64_t sdFreeBytes; static SystemStatus collect() { SystemStatus s; @@ -20,6 +24,9 @@ struct SystemStatus { s.freeHeapBytes = ESP.getFreeHeap(); s.uptimeSeconds = millis() / 1000; s.macAddress = WiFi.macAddress().c_str(); + s.sdTotalBytes = Storage.sdTotalBytes(); + s.sdUsedBytes = Storage.sdUsedBytes(); + s.sdFreeBytes = Storage.sdFreeBytes(); const wifi_mode_t mode = WiFi.getMode(); const bool isAP = (mode == WIFI_MODE_AP) || (mode == WIFI_MODE_APSTA); diff --git a/src/activities/settings/SystemInformationActivity.cpp b/src/activities/settings/SystemInformationActivity.cpp index d0bd2fd7..02fa7531 100644 --- a/src/activities/settings/SystemInformationActivity.cpp +++ b/src/activities/settings/SystemInformationActivity.cpp @@ -8,6 +8,17 @@ #include "components/UITheme.h" #include "fontIds.h" +static std::string formatBytes(uint64_t bytes) { + if (bytes >= 1024ULL * 1024 * 1024) { + char buf[16]; + snprintf(buf, sizeof(buf), "%.1f GB", bytes / (1024.0 * 1024 * 1024)); + return buf; + } + char buf[16]; + snprintf(buf, sizeof(buf), "%u MB", static_cast(bytes / (1024 * 1024))); + return buf; +} + void SystemInformationActivity::onEnter() { Activity::onEnter(); requestUpdate(); @@ -28,12 +39,12 @@ void SystemInformationActivity::render(RenderLock&&) { renderer.clearScreen(); - GUI.drawHeader(renderer, Rect{0, metrics.topPadding, pageWidth, metrics.headerHeight}, - tr(STR_SYSTEM_INFO), CROSSPOINT_VERSION); + GUI.drawHeader(renderer, Rect{0, metrics.topPadding, pageWidth, metrics.headerHeight}, tr(STR_SYSTEM_INFO), + CROSSPOINT_VERSION); const auto status = SystemStatus::collect(); - // Layout: label on the left, value on the right of the midpoint + // Layout: label on the left, value right of the midpoint const int leftX = metrics.verticalSpacing * 3; const int valueX = pageWidth / 2; const int lineH = renderer.getLineHeight(UI_10_FONT_ID); @@ -45,6 +56,7 @@ void SystemInformationActivity::render(RenderLock&&) { renderer.drawText(UI_10_FONT_ID, valueX, y, value.c_str()); }; + // Device drawRow(0, "Version", status.version); drawRow(1, "Free heap", std::to_string(status.freeHeapBytes / 1024) + " KB"); @@ -55,13 +67,22 @@ void SystemInformationActivity::render(RenderLock&&) { snprintf(uptimeBuf, sizeof(uptimeBuf), "%uh %02um %02us", h, m, s); drawRow(2, "Uptime", uptimeBuf); + // SD card + const std::string sdUsed = formatBytes(status.sdUsedBytes) + " / " + formatBytes(status.sdTotalBytes); + drawRow(3, "SD card", status.sdTotalBytes > 0 ? sdUsed : "N/A"); + + // WiFi (shown as-is; "Off" when not connected) std::string wifiLabel = status.wifiMode; if (status.rssi != 0) { wifiLabel += " (" + std::to_string(status.rssi) + " dBm)"; } - drawRow(3, "WiFi", wifiLabel); - drawRow(4, "IP address", status.ip); - drawRow(5, "MAC address", status.macAddress); + drawRow(4, "WiFi", wifiLabel); + if (status.wifiMode != "Off") { + drawRow(5, "IP address", status.ip); + drawRow(6, "MAC address", status.macAddress); + } else { + drawRow(5, "MAC address", status.macAddress); + } const auto labels = mappedInput.mapLabels(tr(STR_BACK), "", "", ""); GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); diff --git a/src/network/CrossPointWebServer.cpp b/src/network/CrossPointWebServer.cpp index 1690375b..d0cae11e 100644 --- a/src/network/CrossPointWebServer.cpp +++ b/src/network/CrossPointWebServer.cpp @@ -326,8 +326,8 @@ void CrossPointWebServer::handleStatus() const { doc["rssi"] = status.rssi; doc["freeHeap"] = status.freeHeapBytes; doc["uptime"] = status.uptimeSeconds; - doc["sdTotal"] = Storage.sdTotalBytes(); - doc["sdUsed"] = Storage.sdUsedBytes(); + doc["sdTotal"] = status.sdTotalBytes; + doc["sdUsed"] = status.sdUsedBytes; String json; serializeJson(doc, json);