From b07ec1a148886ed34c35e93c40e7928f17f576c4 Mon Sep 17 00:00:00 2001 From: Terrence Date: Mon, 25 Nov 2024 02:27:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9E=E6=8E=A5wifi=E6=97=B6=E6=8C=89?= =?UTF-8?q?=E4=B8=8Bboot=E9=87=8D=E7=BD=AEwifi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/application.cc | 2 +- .../bread-compact-wifi/compact_wifi_board.cc | 7 ++++++- main/boards/common/wifi_board.cc | 13 +++++++++++++ main/boards/common/wifi_board.h | 1 + main/boards/lichuang-dev/lichuang_dev_board.cc | 7 ++++++- main/display/ssd1306_display.cc | 4 +++- main/display/st7789_display.cc | 1 - main/idf_component.yml | 2 +- main/settings.cc | 16 ++++++++++++++++ main/settings.h | 2 ++ 10 files changed, 49 insertions(+), 6 deletions(-) diff --git a/main/application.cc b/main/application.cc index 33a62c99..19b4147c 100644 --- a/main/application.cc +++ b/main/application.cc @@ -517,7 +517,7 @@ void Application::AudioEncodeTask() { audio_decode_queue_.pop_front(); lock.unlock(); - if (skip_to_end_ || chat_state_ != kChatStateSpeaking) { + if (skip_to_end_) { continue; } diff --git a/main/boards/bread-compact-wifi/compact_wifi_board.cc b/main/boards/bread-compact-wifi/compact_wifi_board.cc index 67c31bb8..f5f19a0c 100644 --- a/main/boards/bread-compact-wifi/compact_wifi_board.cc +++ b/main/boards/bread-compact-wifi/compact_wifi_board.cc @@ -7,6 +7,7 @@ #include "led.h" #include "config.h" +#include #include #include @@ -38,7 +39,11 @@ private: void InitializeButtons() { boot_button_.OnClick([this]() { - Application::GetInstance().ToggleChatState(); + auto& app = Application::GetInstance(); + if (app.GetChatState() == kChatStateUnknown && !WifiStation::GetInstance().IsConnected()) { + ResetWifiConfiguration(); + } + app.ToggleChatState(); }); volume_up_button_.OnClick([this]() { diff --git a/main/boards/common/wifi_board.cc b/main/boards/common/wifi_board.cc index 40e0458a..622ea405 100644 --- a/main/boards/common/wifi_board.cc +++ b/main/boards/common/wifi_board.cc @@ -2,6 +2,7 @@ #include "application.h" #include "system_info.h" #include "font_awesome_symbols.h" +#include "settings.h" #include #include @@ -149,3 +150,15 @@ void WifiBoard::SetPowerSaveMode(bool enabled) { auto& wifi_station = WifiStation::GetInstance(); wifi_station.SetPowerSaveMode(enabled); } + +void WifiBoard::ResetWifiConfiguration() { + // Reset the wifi station + { + Settings settings("wifi", true); + settings.EraseAll(); + } + GetDisplay()->ShowNotification("已重置 WiFi..."); + vTaskDelay(pdMS_TO_TICKS(1000)); + // Reboot the device + esp_restart(); +} diff --git a/main/boards/common/wifi_board.h b/main/boards/common/wifi_board.h index 185d971a..546039a2 100644 --- a/main/boards/common/wifi_board.h +++ b/main/boards/common/wifi_board.h @@ -19,6 +19,7 @@ public: virtual bool GetNetworkState(std::string& network_name, int& signal_quality, std::string& signal_quality_text) override; virtual const char* GetNetworkStateIcon() override; virtual void SetPowerSaveMode(bool enabled) override; + virtual void ResetWifiConfiguration(); }; #endif // WIFI_BOARD_H diff --git a/main/boards/lichuang-dev/lichuang_dev_board.cc b/main/boards/lichuang-dev/lichuang_dev_board.cc index cebc6f6e..3ef44c65 100644 --- a/main/boards/lichuang-dev/lichuang_dev_board.cc +++ b/main/boards/lichuang-dev/lichuang_dev_board.cc @@ -11,6 +11,7 @@ #include #include #include +#include #define TAG "LichuangDevBoard" @@ -71,7 +72,11 @@ private: void InitializeButtons() { boot_button_.OnClick([this]() { - Application::GetInstance().ToggleChatState(); + auto& app = Application::GetInstance(); + if (app.GetChatState() == kChatStateUnknown && !WifiStation::GetInstance().IsConnected()) { + ResetWifiConfiguration(); + } + app.ToggleChatState(); }); } diff --git a/main/display/ssd1306_display.cc b/main/display/ssd1306_display.cc index 00331bdd..9c9369b3 100644 --- a/main/display/ssd1306_display.cc +++ b/main/display/ssd1306_display.cc @@ -184,7 +184,6 @@ void Ssd1306Display::SetupUI_128x64() { status_label_ = lv_label_create(status_bar_); lv_obj_set_flex_grow(status_label_, 1); - lv_label_set_long_mode(status_label_, LV_LABEL_LONG_SCROLL_CIRCULAR); lv_label_set_text(status_label_, "正在初始化"); lv_obj_set_style_text_align(status_label_, LV_TEXT_ALIGN_CENTER, 0); @@ -255,11 +254,14 @@ void Ssd1306Display::SetupUI_128x32() { status_label_ = lv_label_create(side_bar_); lv_obj_set_flex_grow(status_label_, 1); + lv_obj_set_width(status_label_, width_ - 32); lv_label_set_long_mode(status_label_, LV_LABEL_LONG_SCROLL_CIRCULAR); lv_label_set_text(status_label_, "正在初始化"); notification_label_ = lv_label_create(side_bar_); lv_obj_set_flex_grow(notification_label_, 1); + lv_obj_set_width(notification_label_, width_ - 32); + lv_label_set_long_mode(notification_label_, LV_LABEL_LONG_SCROLL_CIRCULAR); lv_label_set_text(notification_label_, "通知"); lv_obj_add_flag(notification_label_, LV_OBJ_FLAG_HIDDEN); } diff --git a/main/display/st7789_display.cc b/main/display/st7789_display.cc index 32a6f722..20d0c387 100644 --- a/main/display/st7789_display.cc +++ b/main/display/st7789_display.cc @@ -198,7 +198,6 @@ void St7789Display::SetupUI() { status_label_ = lv_label_create(status_bar_); lv_obj_set_flex_grow(status_label_, 1); - lv_label_set_long_mode(status_label_, LV_LABEL_LONG_SCROLL_CIRCULAR); lv_label_set_text(status_label_, "正在初始化"); lv_obj_set_style_text_align(status_label_, LV_TEXT_ALIGN_CENTER, 0); diff --git a/main/idf_component.yml b/main/idf_component.yml index b22373c7..a3bcc214 100644 --- a/main/idf_component.yml +++ b/main/idf_component.yml @@ -1,6 +1,6 @@ ## IDF Component Manager Manifest File dependencies: - 78/esp-wifi-connect: "~1.4.0" + 78/esp-wifi-connect: "~1.4.1" 78/esp-opus-encoder: "~1.1.0" 78/esp-ml307: "~1.6.3" espressif/led_strip: "^2.4.1" diff --git a/main/settings.cc b/main/settings.cc index ec27ffb2..fb63f477 100644 --- a/main/settings.cc +++ b/main/settings.cc @@ -63,3 +63,19 @@ void Settings::SetInt(const std::string& key, int32_t value) { ESP_LOGW(TAG, "Namespace %s is not open for writing", ns_.c_str()); } } + +void Settings::EraseKey(const std::string& key) { + if (read_write_) { + ESP_ERROR_CHECK(nvs_erase_key(nvs_handle_, key.c_str())); + } else { + ESP_LOGW(TAG, "Namespace %s is not open for writing", ns_.c_str()); + } +} + +void Settings::EraseAll() { + if (read_write_) { + ESP_ERROR_CHECK(nvs_erase_all(nvs_handle_)); + } else { + ESP_LOGW(TAG, "Namespace %s is not open for writing", ns_.c_str()); + } +} diff --git a/main/settings.h b/main/settings.h index 2273b5a8..0fe13885 100644 --- a/main/settings.h +++ b/main/settings.h @@ -13,6 +13,8 @@ public: void SetString(const std::string& key, const std::string& value); int32_t GetInt(const std::string& key, int32_t default_value = 0); void SetInt(const std::string& key, int32_t value); + void EraseKey(const std::string& key); + void EraseAll(); private: std::string ns_;