Add discharging status

This commit is contained in:
Xiaoxia
2025-03-09 19:18:10 +08:00
parent ad0c5312f8
commit dd1139b169
14 changed files with 67 additions and 57 deletions

View File

@@ -4,7 +4,7 @@
# CMakeLists in this exact order for cmake to work correctly # CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
set(PROJECT_VER "1.4.6") set(PROJECT_VER "1.4.7")
# Add this line to disable the specific warning # Add this line to disable the specific warning
add_compile_options(-Wno-missing-field-initializers) add_compile_options(-Wno-missing-field-initializers)

View File

@@ -44,7 +44,7 @@ std::string Board::GenerateUuid() {
return std::string(uuid_str); return std::string(uuid_str);
} }
bool Board::GetBatteryLevel(int &level, bool& charging) { bool Board::GetBatteryLevel(int &level, bool& charging, bool& discharging) {
return false; return false;
} }

View File

@@ -45,7 +45,7 @@ public:
virtual Udp* CreateUdp() = 0; virtual Udp* CreateUdp() = 0;
virtual void StartNetwork() = 0; virtual void StartNetwork() = 0;
virtual const char* GetNetworkStateIcon() = 0; virtual const char* GetNetworkStateIcon() = 0;
virtual bool GetBatteryLevel(int &level, bool& charging); virtual bool GetBatteryLevel(int &level, bool& charging, bool& discharging);
virtual std::string GetJson(); virtual std::string GetJson();
virtual void SetPowerSaveMode(bool enabled) = 0; virtual void SetPowerSaveMode(bool enabled) = 0;
}; };

View File

@@ -263,21 +263,16 @@ public:
return backlight_; return backlight_;
} }
virtual bool GetBatteryLevel(int &level, bool& charging) override { virtual bool GetBatteryLevel(int &level, bool& charging, bool& discharging) override {
static bool last_charging = false; static bool last_discharging = false;
charging = pmic_->IsCharging(); charging = pmic_->IsCharging();
if (charging != last_charging) { discharging = pmic_->IsDischarging();
power_save_timer_->WakeUp(); if (discharging != last_discharging) {
last_charging = charging; power_save_timer_->SetEnabled(discharging);
last_discharging = discharging;
} }
level = pmic_->GetBatteryLevel(); level = pmic_->GetBatteryLevel();
if (pmic_->IsDischarging()) {
power_save_timer_->SetEnabled(true);
} else {
power_save_timer_->SetEnabled(false);
}
return true; return true;
} }

View File

@@ -250,21 +250,16 @@ public:
return display_; return display_;
} }
virtual bool GetBatteryLevel(int &level, bool& charging) override { virtual bool GetBatteryLevel(int &level, bool& charging, bool& discharging) override {
static bool last_charging = false; static bool last_discharging = false;
charging = pmic_->IsCharging(); charging = pmic_->IsCharging();
if (charging != last_charging) { discharging = pmic_->IsDischarging();
power_save_timer_->WakeUp(); if (discharging != last_discharging) {
last_charging = charging; power_save_timer_->SetEnabled(discharging);
last_discharging = discharging;
} }
level = pmic_->GetBatteryLevel(); level = pmic_->GetBatteryLevel();
if (pmic_->IsDischarging()) {
power_save_timer_->SetEnabled(true);
} else {
power_save_timer_->SetEnabled(false);
}
return true; return true;
} }
}; };

View File

@@ -346,21 +346,16 @@ public:
return display_; return display_;
} }
virtual bool GetBatteryLevel(int &level, bool& charging) override { virtual bool GetBatteryLevel(int &level, bool& charging, bool& discharging) override {
static bool last_charging = false; static bool last_discharging = false;
charging = pmic_->IsCharging(); charging = pmic_->IsCharging();
if (charging != last_charging) { discharging = pmic_->IsDischarging();
power_save_timer_->WakeUp(); if (discharging != last_discharging) {
last_charging = charging; power_save_timer_->SetEnabled(discharging);
last_discharging = discharging;
} }
level = pmic_->GetBatteryLevel(); level = pmic_->GetBatteryLevel();
if (pmic_->IsDischarging()) {
power_save_timer_->SetEnabled(true);
} else {
power_save_timer_->SetEnabled(false);
}
return true; return true;
} }

View File

@@ -269,21 +269,16 @@ public:
return display_; return display_;
} }
virtual bool GetBatteryLevel(int &level, bool& charging) override { virtual bool GetBatteryLevel(int &level, bool& charging, bool& discharging) override {
static bool last_charging = false; static bool last_discharging = false;
charging = pmic_->IsCharging(); charging = pmic_->IsCharging();
if (charging != last_charging) { discharging = pmic_->IsDischarging();
power_save_timer_->WakeUp(); if (discharging != last_discharging) {
last_charging = charging; power_save_timer_->SetEnabled(discharging);
last_discharging = discharging;
} }
level = pmic_->GetBatteryLevel(); level = pmic_->GetBatteryLevel();
if (pmic_->IsDischarging()) {
power_save_timer_->SetEnabled(true);
} else {
power_save_timer_->SetEnabled(false);
}
return true; return true;
} }
}; };

View File

@@ -215,8 +215,14 @@ public:
return display_; return display_;
} }
virtual bool GetBatteryLevel(int& level, bool& charging) override { virtual bool GetBatteryLevel(int& level, bool& charging, bool& discharging) override {
static bool last_discharging = false;
charging = power_manager_->IsCharging(); charging = power_manager_->IsCharging();
discharging = power_manager_->IsDischarging();
if (discharging != last_discharging) {
power_save_timer_->SetEnabled(discharging);
last_discharging = discharging;
}
level = power_manager_->GetBatteryLevel(); level = power_manager_->GetBatteryLevel();
return true; return true;
} }

View File

@@ -220,8 +220,14 @@ public:
return display_; return display_;
} }
virtual bool GetBatteryLevel(int& level, bool& charging) override { virtual bool GetBatteryLevel(int& level, bool& charging, bool& discharging) override {
static bool last_discharging = false;
charging = power_manager_->IsCharging(); charging = power_manager_->IsCharging();
discharging = power_manager_->IsDischarging();
if (discharging != last_discharging) {
power_save_timer_->SetEnabled(discharging);
last_discharging = discharging;
}
level = power_manager_->GetBatteryLevel(); level = power_manager_->GetBatteryLevel();
return true; return true;
} }

View File

@@ -196,8 +196,14 @@ public:
return &backlight; return &backlight;
} }
virtual bool GetBatteryLevel(int& level, bool& charging) override { virtual bool GetBatteryLevel(int& level, bool& charging, bool& discharging) override {
static bool last_discharging = false;
charging = power_manager_->IsCharging(); charging = power_manager_->IsCharging();
discharging = power_manager_->IsDischarging();
if (discharging != last_discharging) {
power_save_timer_->SetEnabled(discharging);
last_discharging = discharging;
}
level = power_manager_->GetBatteryLevel(); level = power_manager_->GetBatteryLevel();
return true; return true;
} }

View File

@@ -167,6 +167,11 @@ public:
return is_charging_; return is_charging_;
} }
bool IsDischarging() {
// 没有区分充电和放电,所以直接返回相反状态
return !is_charging_;
}
uint8_t GetBatteryLevel() { uint8_t GetBatteryLevel() {
return battery_level_; return battery_level_;
} }

View File

@@ -199,8 +199,14 @@ public:
return &backlight; return &backlight;
} }
virtual bool GetBatteryLevel(int& level, bool& charging) override { virtual bool GetBatteryLevel(int& level, bool& charging, bool& discharging) override {
static bool last_discharging = false;
charging = power_manager_->IsCharging(); charging = power_manager_->IsCharging();
discharging = power_manager_->IsDischarging();
if (discharging != last_discharging) {
power_save_timer_->SetEnabled(discharging);
last_discharging = discharging;
}
level = power_manager_->GetBatteryLevel(); level = power_manager_->GetBatteryLevel();
return true; return true;
} }

View File

@@ -127,9 +127,9 @@ void Display::Update() {
esp_pm_lock_acquire(pm_lock_); esp_pm_lock_acquire(pm_lock_);
// 更新电池图标 // 更新电池图标
int battery_level; int battery_level;
bool charging; bool charging, discharging;
const char* icon = nullptr; const char* icon = nullptr;
if (board.GetBatteryLevel(battery_level, charging)) { if (board.GetBatteryLevel(battery_level, charging, discharging)) {
if (charging) { if (charging) {
icon = FONT_AWESOME_BATTERY_CHARGING; icon = FONT_AWESOME_BATTERY_CHARGING;
} else { } else {
@@ -150,15 +150,15 @@ void Display::Update() {
} }
if (low_battery_popup_ != nullptr) { if (low_battery_popup_ != nullptr) {
if (strcmp(icon, FONT_AWESOME_BATTERY_EMPTY) == 0) { if (strcmp(icon, FONT_AWESOME_BATTERY_EMPTY) == 0 && discharging) {
if (lv_obj_has_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN)) { if (lv_obj_has_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN)) { // 如果低电量提示框隐藏,则显示
lv_obj_clear_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN); lv_obj_clear_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN);
auto& app = Application::GetInstance(); auto& app = Application::GetInstance();
app.PlaySound(Lang::Sounds::P3_LOW_BATTERY); app.PlaySound(Lang::Sounds::P3_LOW_BATTERY);
} }
} else { } else {
// Hide the low battery popup when the battery is not empty // Hide the low battery popup when the battery is not empty
if (!lv_obj_has_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN)) { if (!lv_obj_has_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN)) { // 如果低电量提示框显示,则隐藏
lv_obj_add_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN); lv_obj_add_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN);
} }
} }

View File

@@ -12,13 +12,14 @@ class Battery : public Thing {
private: private:
int level_ = 0; int level_ = 0;
bool charging_ = false; bool charging_ = false;
bool discharging_ = false;
public: public:
Battery() : Thing("Battery", "电池管理") { Battery() : Thing("Battery", "电池管理") {
// 定义设备的属性 // 定义设备的属性
properties_.AddNumberProperty("level", "当前电量百分比", [this]() -> int { properties_.AddNumberProperty("level", "当前电量百分比", [this]() -> int {
auto& board = Board::GetInstance(); auto& board = Board::GetInstance();
if (board.GetBatteryLevel(level_, charging_)) { if (board.GetBatteryLevel(level_, charging_, discharging_)) {
return level_; return level_;
} }
return 0; return 0;