From 104a7dd641aa96422cbc3eec7e63c87e51a71b56 Mon Sep 17 00:00:00 2001 From: Forairaaaaa Date: Mon, 13 Oct 2025 09:52:32 +0800 Subject: [PATCH 1/5] add low battery power off --- main/apps/app_power.cpp | 19 +++++++++++++++++++ main/apps/apps.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/main/apps/app_power.cpp b/main/apps/app_power.cpp index 4854a0b..5efcb45 100644 --- a/main/apps/app_power.cpp +++ b/main/apps/app_power.cpp @@ -23,6 +23,7 @@ void AppPower::onRunning() update_bat_voltage(); update_icon_chg(); update_shut_down_button(); + check_low_battery_power_off(); } void AppPower::update_bat_voltage() @@ -71,3 +72,21 @@ void AppPower::update_shut_down_button() GetHAL().powerOff(); } } + +void AppPower::check_low_battery_power_off() +{ + if (GetHAL().millis() - _time_count.lowBat > 2000) { + bool is_usb_connected = GetHAL().isUsbConnected(); + float battery_voltage = GetHAL().getBatteryVoltage(); + + if (!is_usb_connected && (battery_voltage < 3.8)) { + GetHAL().display.setEpdMode(epd_mode_t::epd_quality); + GetHAL().display.drawPng(img_logo_start, img_logo_end - img_logo_start, 0, 0); + GetHAL().delay(2000); + + GetHAL().powerOff(); + } + + _time_count.lowBat = GetHAL().millis(); + } +} diff --git a/main/apps/apps.h b/main/apps/apps.h index c29b0e6..b5bfdbf 100644 --- a/main/apps/apps.h +++ b/main/apps/apps.h @@ -21,6 +21,7 @@ class AppPower : public mooncake::AppAbility { struct UpdateTimeCount_t { uint32_t batVoltage = 0; uint32_t iconChg = 0; + uint32_t lowBat = 0; }; UpdateTimeCount_t _time_count; bool _current_icon_chg = false; @@ -28,6 +29,7 @@ class AppPower : public mooncake::AppAbility { void update_bat_voltage(); void update_icon_chg(); void update_shut_down_button(); + void check_low_battery_power_off(); }; /** From 22d0b0f3d57ee07f575dcdd90b77f0b29cd34889 Mon Sep 17 00:00:00 2001 From: Forairaaaaa Date: Mon, 13 Oct 2025 10:04:50 +0800 Subject: [PATCH 2/5] add fw version display --- main/main.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/main/main.cpp b/main/main.cpp index 444bc09..d46eb56 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -14,11 +14,21 @@ using namespace mooncake; +void draw_firmware_version() +{ + GetHAL().display.setEpdMode(epd_mode_t::epd_quality); + GetHAL().display.loadFont(font_montserrat_medium_36); + GetHAL().display.setTextDatum(middle_center); + GetHAL().display.setTextColor(TFT_BLACK); + GetHAL().display.drawString("FactoryTest: V0.4", GetHAL().display.width() / 2, GetHAL().display.height() / 2); +} + void draw_gray_scale_bars() { GetHAL().display.setEpdMode(epd_mode_t::epd_quality); std::vector colors = {0xffffff, 0xeeeeee, 0xdddddd, 0xcccccc, 0xbbbbbb, 0xaaaaaa, 0x999999, 0x888888, 0x777777, 0x666666, 0x555555, 0x444444, 0x333333, 0x222222, 0x111111, 0x000000}; + GetHAL().display.fillScreen(TFT_WHITE); for (int i = 0; i < 16; i++) { GetHAL().display.fillRect(i * 60, 0, 60, 540, colors[i]); } @@ -44,6 +54,9 @@ extern "C" void app_main(void) { GetHAL().init(); + draw_firmware_version(); + GetHAL().delay(2000); + draw_gray_scale_bars(); GetHAL().delay(3000); From 17ca5d507cc350a601ffee799956294e5b5dbca2 Mon Sep 17 00:00:00 2001 From: Forairaaaaa Date: Mon, 13 Oct 2025 10:16:05 +0800 Subject: [PATCH 3/5] improve gray scale bars display --- main/main.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/main/main.cpp b/main/main.cpp index d46eb56..6785dd5 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -25,13 +25,17 @@ void draw_firmware_version() void draw_gray_scale_bars() { - GetHAL().display.setEpdMode(epd_mode_t::epd_quality); std::vector colors = {0xffffff, 0xeeeeee, 0xdddddd, 0xcccccc, 0xbbbbbb, 0xaaaaaa, 0x999999, 0x888888, 0x777777, 0x666666, 0x555555, 0x444444, 0x333333, 0x222222, 0x111111, 0x000000}; - GetHAL().display.fillScreen(TFT_WHITE); + + GetHAL().display.setEpdMode(epd_mode_t::epd_quality); + GetHAL().display.fillScreen(TFT_BLACK); + GetHAL().delay(800); + GetHAL().display.startWrite(); for (int i = 0; i < 16; i++) { GetHAL().display.fillRect(i * 60, 0, 60, 540, colors[i]); } + GetHAL().display.endWrite(); } void check_full_display_refresh_request(bool force = false) From 1800b6298a73c036b9e23135f8cde3c639fdde53 Mon Sep 17 00:00:00 2001 From: Forairaaaaa Date: Mon, 13 Oct 2025 11:03:01 +0800 Subject: [PATCH 4/5] add low bat power off condition: wifi scanning --- main/apps/app_power.cpp | 5 +++++ main/apps/app_wifi.cpp | 11 +++++++++-- main/apps/apps.h | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/main/apps/app_power.cpp b/main/apps/app_power.cpp index 5efcb45..a1842ed 100644 --- a/main/apps/app_power.cpp +++ b/main/apps/app_power.cpp @@ -75,6 +75,11 @@ void AppPower::update_shut_down_button() void AppPower::check_low_battery_power_off() { + // Only auto power off when wifi start scanning + if (!AppWifi::is_wifi_start_scanning()) { + return; + } + if (GetHAL().millis() - _time_count.lowBat > 2000) { bool is_usb_connected = GetHAL().isUsbConnected(); float battery_voltage = GetHAL().getBatteryVoltage(); diff --git a/main/apps/app_wifi.cpp b/main/apps/app_wifi.cpp index 3eb8dd8..4d9d4b4 100644 --- a/main/apps/app_wifi.cpp +++ b/main/apps/app_wifi.cpp @@ -13,6 +13,12 @@ using namespace mooncake; +static bool _is_wifi_start_scanning = false; +bool AppWifi::is_wifi_start_scanning() +{ + return _is_wifi_start_scanning; +} + void AppWifi::onCreate() { setAppInfo().name = "AppWifi"; @@ -95,8 +101,9 @@ void AppWifi::handle_state_first_scan() _scanning_mutex.unlock(); if (!is_scanning) { - _state = STATE_SCANNING_RESULT; - _time_count = 0; + _state = STATE_SCANNING_RESULT; + _is_wifi_start_scanning = true; + _time_count = 0; return; } diff --git a/main/apps/apps.h b/main/apps/apps.h index b5bfdbf..3cb9f8b 100644 --- a/main/apps/apps.h +++ b/main/apps/apps.h @@ -94,6 +94,8 @@ class AppWifi : public mooncake::AppAbility { void onCreate() override; void onRunning() override; + static bool is_wifi_start_scanning(); + private: enum State_t { STATE_IDLE = 0, From 6e355772068835f4fcea731713efe4f6eb58a142 Mon Sep 17 00:00:00 2001 From: Forairaaaaa Date: Mon, 13 Oct 2025 11:16:06 +0800 Subject: [PATCH 5/5] add rtc init set date time --- main/hal/hal.cpp | 22 ++++++++++++++++++++++ main/hal/hal.h | 1 + main/main.cpp | 2 ++ 3 files changed, 25 insertions(+) diff --git a/main/hal/hal.cpp b/main/hal/hal.cpp index 47e9b99..8f68f7c 100644 --- a/main/hal/hal.cpp +++ b/main/hal/hal.cpp @@ -45,6 +45,7 @@ void Hal::init() M5.begin(); M5.Display.setRotation(1); + rtc_init(); power_init(); sd_card_init(); wifi_init(); @@ -57,6 +58,27 @@ void Hal::feedTheDog() vTaskDelay(5); } +/* -------------------------------------------------------------------------- */ +/* RTC */ +/* -------------------------------------------------------------------------- */ +void Hal::rtc_init() +{ + mclog::tagInfo(_tag, "rtc init"); + + m5::rtc_date_t date; + date.year = 2077; + date.month = 1; + date.date = 1; + date.weekDay = 1; + + m5::rtc_time_t time; + time.hours = 12; + time.minutes = 0; + time.seconds = 0; + + M5.Rtc.setDateTime(&date, &time); +} + /* -------------------------------------------------------------------------- */ /* Power */ /* -------------------------------------------------------------------------- */ diff --git a/main/hal/hal.h b/main/hal/hal.h index 0bb3fbc..641fe46 100644 --- a/main/hal/hal.h +++ b/main/hal/hal.h @@ -115,6 +115,7 @@ class Hal { WifiScanResult_t _wifi_scan_result; SdCardTestResult_t _sd_card_test_result; + void rtc_init(); void power_init(); void sd_card_init(); void wifi_init(); diff --git a/main/main.cpp b/main/main.cpp index 6785dd5..c56bcbc 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -56,6 +56,8 @@ void check_full_display_refresh_request(bool force = false) extern "C" void app_main(void) { + mclog::set_time_format(mclog::time_format_unix_seconds); + GetHAL().init(); draw_firmware_version();