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/application.h |   38 +++++++++++++++++++++++++++++++++++++-
 1 files changed, 37 insertions(+), 1 deletions(-)

diff --git a/xiaozhi-esp32-2.2.6/main/application.h b/xiaozhi-esp32-2.2.6/main/application.h
index 7ca7af4..1f72922 100644
--- a/xiaozhi-esp32-2.2.6/main/application.h
+++ b/xiaozhi-esp32-2.2.6/main/application.h
@@ -10,6 +10,8 @@
 #include <mutex>
 #include <deque>
 #include <memory>
+#include <functional>
+#include <atomic>
 
 #include "protocol.h"
 #include "ota.h"
@@ -105,8 +107,18 @@
 
     void Reboot();
     void WakeWordInvoke(const std::string& wake_word);
-    bool UpgradeFirmware(const std::string& url, const std::string& version = "");
+    bool UpgradeFirmware(const std::string& url, const std::string& version = "",
+                         std::function<void(int progress, size_t speed)> progress_callback = nullptr,
+                         std::function<void(bool success)> complete_callback = nullptr);
+    void EnterStandby();
+    void RequestPowerOffStandby();
+    void EnterPowerOffStandby();
+    void RestoreFromPowerOffStandby(bool network_ready);
+    bool IsPowerOffStandby() const { return power_off_standby_active_.load(); }
+    void AcquireSleepInhibit();
+    void ReleaseSleepInhibit();
     bool CanEnterSleepMode();
+    void PrepareProtocolForNetworkStandby();
     void SendMcpMessage(const std::string& payload);
     void SetAecMode(AecMode mode);
     AecMode GetAecMode() const { return aec_mode_; }
@@ -139,7 +151,24 @@
     bool has_server_time_ = false;
     bool aborted_ = false;
     bool assets_version_checked_ = false;
+    bool local_assets_applied_ = false;
     bool play_popup_on_listening_ = false;  // Flag to play popup sound after state changes to listening
+    bool resume_sdcard_mp3_after_tts_ = false;
+    bool resume_sdcard_mp3_after_voice_ = false;
+    bool sdcard_mp3_stop_requested_ = false;
+    bool opening_audio_channel_ = false;
+    bool tts_audio_expected_ = false;
+    bool tts_response_started_ = false;
+    bool tts_audio_received_ = false;
+    bool tts_stop_pending_ = false;
+    bool tts_stop_waiting_ = false;
+    bool tts_idle_waiting_ = false;
+    bool tts_speaking_state_ready_ = false;
+    uint32_t tts_activity_generation_ = 0;
+    bool standby_requested_ = false;
+    bool power_off_requested_ = false;
+    std::atomic_bool power_off_standby_active_{false};
+    int sleep_inhibit_count_ = 0;
     int clock_ticks_ = 0;
     TaskHandle_t activation_task_handle_ = nullptr;
 
@@ -160,10 +189,17 @@
     void ActivationTask();
 
     // Helper methods
+    void LoadLocalAssetsForWakeWord();
     void CheckAssetsVersion();
     void CheckNewVersion();
     void InitializeProtocol();
     void ShowActivationCode(const std::string& code, const std::string& message);
+    void FinishTtsResponse();
+    void FinishTtsResponseAfterPlayback();
+    void ScheduleTtsAudio(std::shared_ptr<AudioStreamPacket> packet);
+    void ScheduleTtsIdleFallback();
+    void PauseSdCardMp3ForVoice();
+    void ResumeSdCardMp3AfterVoice();
     void SetListeningMode(ListeningMode mode);
     ListeningMode GetDefaultListeningMode() const;
     

--
Gitblit v1.9.1