forked from xiaozhi/xiaozhi-esp32
Add discharging status
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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_;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user