diff --git a/examples/companion_radio/MyMesh.h b/examples/companion_radio/MyMesh.h index 6c6879a..f949c7a 100644 --- a/examples/companion_radio/MyMesh.h +++ b/examples/companion_radio/MyMesh.h @@ -12,7 +12,7 @@ #endif #ifndef FIRMWARE_VERSION -#define FIRMWARE_VERSION "Meck v0.8.7" +#define FIRMWARE_VERSION "Meck v0.8.8" #endif #if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM) diff --git a/examples/companion_radio/ui-new/UITask.cpp b/examples/companion_radio/ui-new/UITask.cpp index 4ea97ff..2cca883 100644 --- a/examples/companion_radio/ui-new/UITask.cpp +++ b/examples/companion_radio/ui-new/UITask.cpp @@ -110,22 +110,16 @@ class HomeScreen : public UIScreen { AdvertPath recent[UI_RECENT_LIST_SIZE]; -void renderBatteryIndicator(DisplayDriver& display, uint16_t batteryMilliVolts, int* outIconX = nullptr) { - // Use the BQ27220 fuel gauge SOC register for accurate percentage. - // Falls back to voltage estimation if the fuel gauge is uncalibrated. - uint8_t batteryPercentage = board.getBatteryPercent(); - - // Sanity check: if voltage says full but gauge disagrees significantly, - // the gauge hasn't calibrated yet — fall back to voltage estimate - int voltagePct = 0; +void renderBatteryIndicator(DisplayDriver& display, uint16_t batteryMilliVolts) { + // Use voltage-based estimation to match BLE app readings + uint8_t batteryPercentage = 0; if (batteryMilliVolts > 0) { - voltagePct = ((batteryMilliVolts - 3000) * 100) / (4200 - 3000); - if (voltagePct < 0) voltagePct = 0; - if (voltagePct > 100) voltagePct = 100; - } - - if (batteryPercentage == 0 || abs((int)batteryPercentage - voltagePct) > 30) { - batteryPercentage = (uint8_t)voltagePct; + const int minMilliVolts = 3000; + const int maxMilliVolts = 4200; + int pct = ((batteryMilliVolts - minMilliVolts) * 100) / (maxMilliVolts - minMilliVolts); + if (pct < 0) pct = 0; + if (pct > 100) pct = 100; + batteryPercentage = (uint8_t)pct; } display.setColor(DisplayDriver::GREEN); @@ -258,28 +252,50 @@ public: } if (_page == HomePage::FIRST) { + int y = 20; display.setColor(DisplayDriver::YELLOW); display.setTextSize(2); sprintf(tmp, "MSG: %d", _task->getMsgCount()); - display.drawTextCentered(display.width() / 2, 20, tmp); + display.drawTextCentered(display.width() / 2, y, tmp); + y += 18; #ifdef WIFI_SSID IPAddress ip = WiFi.localIP(); snprintf(tmp, sizeof(tmp), "IP: %d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); display.setTextSize(1); - display.drawTextCentered(display.width() / 2, 54, tmp); + display.drawTextCentered(display.width() / 2, y, tmp); + y += 12; #endif if (_task->hasConnection()) { display.setColor(DisplayDriver::GREEN); display.setTextSize(1); - display.drawTextCentered(display.width() / 2, 43, "< Connected >"); - - } else if (the_mesh.getBLEPin() != 0) { // BT pin + display.drawTextCentered(display.width() / 2, y, "< Connected >"); + y += 12; + } else if (_task->isSerialEnabled() && the_mesh.getBLEPin() != 0) { display.setColor(DisplayDriver::RED); display.setTextSize(2); sprintf(tmp, "Pin:%d", the_mesh.getBLEPin()); - display.drawTextCentered(display.width() / 2, 43, tmp); + display.drawTextCentered(display.width() / 2, y, tmp); + y += 18; } + + // Menu shortcuts - tinyfont monospaced grid + y += 6; + display.setColor(DisplayDriver::LIGHT); + display.setTextSize(0); // tinyfont 6x8 monospaced + display.drawTextCentered(display.width() / 2, y, "Press:"); + y += 12; + display.drawTextCentered(display.width() / 2, y, "[M] Messages [C] Contacts"); + y += 10; + display.drawTextCentered(display.width() / 2, y, "[N] Notes [S] Settings"); + y += 10; + display.drawTextCentered(display.width() / 2, y, "[E] Reader [P] Audiobooks"); + y += 14; + + // Nav hint + display.setColor(DisplayDriver::GREEN); + display.drawTextCentered(display.width() / 2, y, "Press A/D to cycle home views"); + display.setTextSize(1); // restore } else if (_page == HomePage::RECENT) { the_mesh.getRecentlyHeard(recent, UI_RECENT_LIST_SIZE); display.setColor(DisplayDriver::GREEN); @@ -380,7 +396,7 @@ public: display.drawTextRightAlign(display.width()-1, y, buf); y = y + 12; - // NMEA sentence counter — confirms baud rate and data flow + // NMEA sentence counter — confirms baud rate and data flow display.drawTextLeftAlign(0, y, "sentences"); if (gpsDuty.isHardwareOn()) { uint16_t sps = gpsStream.getSentencesPerSec(); @@ -1088,13 +1104,13 @@ void UITask::toggleGPS() { if (_sensors != NULL) { if (_node_prefs->gps_enabled) { - // Disable GPS — cut hardware power + // Disable GPS — cut hardware power _sensors->setSettingValue("gps", "0"); _node_prefs->gps_enabled = 0; gpsDuty.disable(); notify(UIEventType::ack); } else { - // Enable GPS — start duty cycle + // Enable GPS — start duty cycle _sensors->setSettingValue("gps", "1"); _node_prefs->gps_enabled = 1; gpsDuty.enable(); diff --git a/variants/lilygo_tdeck_pro/platformio.ini b/variants/lilygo_tdeck_pro/platformio.ini index 526f0b1..cd40730 100644 --- a/variants/lilygo_tdeck_pro/platformio.ini +++ b/variants/lilygo_tdeck_pro/platformio.ini @@ -80,7 +80,7 @@ build_flags = -D PIN_DISPLAY_BL=45 -D PIN_USER_BTN=0 -D CST328_PIN_RST=38 - -D FIRMWARE_VERSION='"Meck v0.8.7"' + -D FIRMWARE_VERSION='"Meck v0.8.8"' build_src_filter = ${esp32_base.build_src_filter} +<../variants/LilyGo_TDeck_Pro> +