update status bar immediately after network started

This commit is contained in:
Terrence
2025-05-24 07:25:34 +08:00
parent 6d5331dddd
commit 0204b8800b
4 changed files with 47 additions and 44 deletions

View File

@@ -395,6 +395,9 @@ void Application::Start() {
/* Wait for the network to be ready */ /* Wait for the network to be ready */
board.StartNetwork(); board.StartNetwork();
// Update the status bar immediately to show the network state
display->UpdateStatusBar(true);
// Check for new firmware version or get the MQTT broker address // Check for new firmware version or get the MQTT broker address
CheckNewVersion(); CheckNewVersion();

View File

@@ -92,7 +92,7 @@ void Display::ShowNotification(const char* notification, int duration_ms) {
ESP_ERROR_CHECK(esp_timer_start_once(notification_timer_, duration_ms * 1000)); ESP_ERROR_CHECK(esp_timer_start_once(notification_timer_, duration_ms * 1000));
} }
void Display::UpdateStatusBar() { void Display::UpdateStatusBar(bool update_all) {
auto& board = Board::GetInstance(); auto& board = Board::GetInstance();
auto codec = board.GetAudioCodec(); auto codec = board.GetAudioCodec();
@@ -112,50 +112,50 @@ void Display::UpdateStatusBar() {
} }
} }
// 每 10 秒更新一次电池图标 esp_pm_lock_acquire(pm_lock_);
static int seconds_counter = 0; // 更新电池图标
if (seconds_counter++ % 10 == 0) { int battery_level;
esp_pm_lock_acquire(pm_lock_); bool charging, discharging;
// 更新电池图标 const char* icon = nullptr;
int battery_level; if (board.GetBatteryLevel(battery_level, charging, discharging)) {
bool charging, discharging; if (charging) {
const char* icon = nullptr; icon = FONT_AWESOME_BATTERY_CHARGING;
if (board.GetBatteryLevel(battery_level, charging, discharging)) { } else {
if (charging) { const char* levels[] = {
icon = FONT_AWESOME_BATTERY_CHARGING; FONT_AWESOME_BATTERY_EMPTY, // 0-19%
} else { FONT_AWESOME_BATTERY_1, // 20-39%
const char* levels[] = { FONT_AWESOME_BATTERY_2, // 40-59%
FONT_AWESOME_BATTERY_EMPTY, // 0-19% FONT_AWESOME_BATTERY_3, // 60-79%
FONT_AWESOME_BATTERY_1, // 20-39% FONT_AWESOME_BATTERY_FULL, // 80-99%
FONT_AWESOME_BATTERY_2, // 40-59% FONT_AWESOME_BATTERY_FULL, // 100%
FONT_AWESOME_BATTERY_3, // 60-79% };
FONT_AWESOME_BATTERY_FULL, // 80-99% icon = levels[battery_level / 20];
FONT_AWESOME_BATTERY_FULL, // 100% }
}; DisplayLockGuard lock(this);
icon = levels[battery_level / 20]; if (battery_label_ != nullptr && battery_icon_ != icon) {
} battery_icon_ = icon;
DisplayLockGuard lock(this); lv_label_set_text(battery_label_, battery_icon_);
if (battery_label_ != nullptr && battery_icon_ != icon) { }
battery_icon_ = icon;
lv_label_set_text(battery_label_, battery_icon_);
}
if (low_battery_popup_ != nullptr) { if (low_battery_popup_ != nullptr) {
if (strcmp(icon, FONT_AWESOME_BATTERY_EMPTY) == 0 && discharging) { 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);
}
} }
} }
} }
}
// 每 10 秒更新一次网络图标
static int seconds_counter = 0;
if (update_all || seconds_counter++ % 10 == 0) {
// 升级固件时,不读取 4G 网络状态,避免占用 UART 资源 // 升级固件时,不读取 4G 网络状态,避免占用 UART 资源
auto device_state = Application::GetInstance().GetDeviceState(); auto device_state = Application::GetInstance().GetDeviceState();
static const std::vector<DeviceState> allowed_states = { static const std::vector<DeviceState> allowed_states = {
@@ -173,9 +173,9 @@ void Display::UpdateStatusBar() {
lv_label_set_text(network_label_, network_icon_); lv_label_set_text(network_label_, network_icon_);
} }
} }
esp_pm_lock_release(pm_lock_);
} }
esp_pm_lock_release(pm_lock_);
} }

View File

@@ -27,7 +27,7 @@ public:
virtual void SetIcon(const char* icon); virtual void SetIcon(const char* icon);
virtual void SetTheme(const std::string& theme_name); virtual void SetTheme(const std::string& theme_name);
virtual std::string GetTheme() { return current_theme_name_; } virtual std::string GetTheme() { return current_theme_name_; }
virtual void UpdateStatusBar(); virtual void UpdateStatusBar(bool update_all = false);
inline int width() const { return width_; } inline int width() const { return width_; }
inline int height() const { return height_; } inline int height() const { return height_; }

View File

@@ -20,7 +20,7 @@ dependencies:
espressif/knob: ^1.0.0 espressif/knob: ^1.0.0
espressif/esp_lcd_touch_ft5x06: ~1.0.7 espressif/esp_lcd_touch_ft5x06: ~1.0.7
espressif/esp_lcd_touch_gt911: ^1 espressif/esp_lcd_touch_gt911: ^1
waveshare/esp_lcd_touch_cst9217: ^1.0.2 waveshare/esp_lcd_touch_cst9217: ^1.0.3
lvgl/lvgl: ~9.2.2 lvgl/lvgl: ~9.2.2
esp_lvgl_port: ~2.6.0 esp_lvgl_port: ~2.6.0
espressif/esp_io_expander_tca95xx_16bit: ^2.0.0 espressif/esp_io_expander_tca95xx_16bit: ^2.0.0