From 659c470eba542383987aad227b7f918100f131fa Mon Sep 17 00:00:00 2001
From: wangzhibo <wangzhibo@shsening.com>
Date: 星期五, 11 九月 2026 15:09:05 +0800
Subject: [PATCH] 小智终端 5种 场景模式 OK
---
xiaozhi-esp32-2.2.6/main/protocols/protocol.cc | 28 +++++++++++++++++++++++-----
1 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/xiaozhi-esp32-2.2.6/main/protocols/protocol.cc b/xiaozhi-esp32-2.2.6/main/protocols/protocol.cc
index 470cc91..360e277 100644
--- a/xiaozhi-esp32-2.2.6/main/protocols/protocol.cc
+++ b/xiaozhi-esp32-2.2.6/main/protocols/protocol.cc
@@ -48,10 +48,20 @@
SendText(message);
}
-void Protocol::SendWakeWordDetected(const std::string& wake_word) {
- std::string json = "{\"session_id\":\"" + session_id_ +
- "\",\"type\":\"listen\",\"state\":\"detect\",\"text\":\"" + wake_word + "\"}";
- SendText(json);
+bool Protocol::SendWakeWordDetected(const std::string& wake_word) {
+ cJSON* root = cJSON_CreateObject();
+ cJSON_AddStringToObject(root, "session_id", session_id_.c_str());
+ cJSON_AddStringToObject(root, "type", "listen");
+ cJSON_AddStringToObject(root, "state", "detect");
+ cJSON_AddStringToObject(root, "text", wake_word.c_str());
+ char* json = cJSON_PrintUnformatted(root);
+ cJSON_Delete(root);
+ if (json == nullptr) {
+ return false;
+ }
+ bool ok = SendText(json);
+ cJSON_free(json);
+ return ok;
}
void Protocol::SendStartListening(ListeningMode mode) {
@@ -78,13 +88,21 @@
SendText(message);
}
+bool Protocol::IsAudioChannelConnected() const {
+ return IsAudioChannelOpened();
+}
+
+void Protocol::MarkIncomingActivity() {
+ last_incoming_time_ = std::chrono::steady_clock::now();
+}
+
bool Protocol::IsTimeout() const {
const int kTimeoutSeconds = 120;
auto now = std::chrono::steady_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::seconds>(now - last_incoming_time_);
bool timeout = duration.count() > kTimeoutSeconds;
if (timeout) {
- ESP_LOGE(TAG, "Channel timeout %ld seconds", (long)duration.count());
+ ESP_LOGW(TAG, "Channel idle %ld seconds (socket may still be up)", (long)duration.count());
}
return timeout;
}
--
Gitblit v1.9.1