From 70481429367ca00144b24f118cbfdfb28b02967d Mon Sep 17 00:00:00 2001
From: wangzhibo <wangzhibo@shsening.com>
Date: 星期三, 26 八月 2026 15:54:31 +0800
Subject: [PATCH] add sening functions

---
 xiaozhi-esp32-2.2.6/main/boards/common/wifi_board.cc |   22 ++++++++++++++++++++++
 1 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/xiaozhi-esp32-2.2.6/main/boards/common/wifi_board.cc b/xiaozhi-esp32-2.2.6/main/boards/common/wifi_board.cc
index 377685b..7a70d39 100644
--- a/xiaozhi-esp32-2.2.6/main/boards/common/wifi_board.cc
+++ b/xiaozhi-esp32-2.2.6/main/boards/common/wifi_board.cc
@@ -73,6 +73,21 @@
             case WifiEvent::Disconnected:
                 OnNetworkEvent(NetworkEvent::Disconnected);
                 break;
+            case WifiEvent::ConnectionFailed:
+                OnNetworkEvent(NetworkEvent::ConnectionFailed);
+                if (suppress_config_mode_on_connection_failed_) {
+                    ESP_LOGW(TAG, "All saved WiFi networks failed, staying offline");
+                    break;
+                }
+                ESP_LOGW(TAG, "All saved WiFi networks failed, entering config mode");
+                esp_timer_stop(connect_timer_);
+                xTaskCreate([](void* arg) {
+                    auto* board = static_cast<WifiBoard*>(arg);
+                    WifiManager::GetInstance().StopStation();
+                    board->StartWifiConfigMode();
+                    vTaskDelete(NULL);
+                }, "wifi_conn_failed", 4096, this, 2, NULL);
+                break;
             case WifiEvent::ConfigModeEnter:
                 OnNetworkEvent(NetworkEvent::WifiConfigModeEnter);
                 break;
@@ -124,6 +139,9 @@
         case NetworkEvent::Disconnected:
             ESP_LOGW(TAG, "WiFi disconnected");
             break;
+        case NetworkEvent::ConnectionFailed:
+            ESP_LOGW(TAG, "WiFi connection failed");
+            break;
         case NetworkEvent::WifiConfigModeEnter:
             ESP_LOGI(TAG, "WiFi config mode entered");
             in_config_mode_ = true;
@@ -148,6 +166,10 @@
     network_event_callback_ = std::move(callback);
 }
 
+void WifiBoard::SetSuppressConfigModeOnConnectionFailed(bool suppress) {
+    suppress_config_mode_on_connection_failed_ = suppress;
+}
+
 void WifiBoard::OnWifiConnectTimeout(void* arg) {
     auto* board = static_cast<WifiBoard*>(arg);
     ESP_LOGW(TAG, "WiFi connection timeout, entering config mode");

--
Gitblit v1.9.1