From 0c971f76e3ac2674259a5de0dd784edfb681f760 Mon Sep 17 00:00:00 2001 From: Ky1eYang Date: Fri, 18 Jul 2025 01:07:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E6=B6=88=E6=81=AF=E6=8E=A5=E6=94=B6=E5=B9=B6=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E5=9C=A8display=E6=88=96=E4=B8=B2=E5=8F=A3=E4=B8=8A?= =?UTF-8?q?=20(#921)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 添加声波配网, 需调整application的ReadAudio公有, 需添加条件编译, 位于'afsk_demod.h'内定义参数 * mod: afsk的重构,旨在提高代码可读性并遵循Google C++代码风格指南 * mod: 更新依赖esp-wifi-connect需求版号 * feat: 添加声波配网, 需调整application的ReadAudio公有, 需添加条件编译, 位于'afsk_demod.h'内定义参数 * mod: afsk的重构,旨在提高代码可读性并遵循Google C++代码风格指南 * mod: 更新依赖esp-wifi-connect需求版号 * mod: 添加判断只有在WiFi配置模式下才会调用ReadAudio, 否则delay(联网成功重启后该任务不会被启动) * add: 添加USE_ACOUSTIC_WIFI_PROVISIONING进MENU开关声波配网功能 * feat: 添加mqtt自定义消息接收, 修复menu的声波配网config * 简化接收custom消息的处理, 只打印或处理payload字段 * fix: 修复payload在执行时指向被释放的线程不安全问题 --------- Co-authored-by: yangkaiyue --- main/Kconfig.projbuild | 6 ++++++ main/application.cc | 12 ++++++++++++ main/boards/common/wifi_board.cc | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index eac41c8a..12057109 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -444,6 +444,12 @@ config AUDIO_DEBUG_UDP_SERVER help UDP服务器地址,格式: IP:PORT,用于接收音频调试数据 +config RECEIVE_CUSTOM_MESSAGE + bool "Enable Custom Message Reception" + default n + help + 启用接收自定义消息功能,允许设备接收来自服务器的自定义消息(最好通过 MQTT 协议) + choice IOT_PROTOCOL prompt "IoT Protocol" default IOT_PROTOCOL_MCP diff --git a/main/application.cc b/main/application.cc index 198bbb0c..09f260ba 100644 --- a/main/application.cc +++ b/main/application.cc @@ -554,6 +554,18 @@ void Application::Start() { display->SetEmotion(emotion_str.c_str()); }); } +#if CONFIG_RECEIVE_CUSTOM_MESSAGE + } else if (strcmp(type->valuestring, "custom") == 0) { + auto payload = cJSON_GetObjectItem(root, "payload"); + ESP_LOGI(TAG, "Received custom message: %s", cJSON_PrintUnformatted(root)); + if (cJSON_IsObject(payload)) { + Schedule([this, display, payload_str = std::string(cJSON_PrintUnformatted(payload))]() { + display->SetChatMessage("system", payload_str.c_str()); + }); + } else { + ESP_LOGW(TAG, "Invalid custom message format: missing payload"); + } +#endif #if CONFIG_IOT_PROTOCOL_MCP } else if (strcmp(type->valuestring, "mcp") == 0) { auto payload = cJSON_GetObjectItem(root, "payload"); diff --git a/main/boards/common/wifi_board.cc b/main/boards/common/wifi_board.cc index 77781adb..92ce68a9 100644 --- a/main/boards/common/wifi_board.cc +++ b/main/boards/common/wifi_board.cc @@ -51,7 +51,7 @@ void WifiBoard::EnterWifiConfigMode() { // 播报配置 WiFi 的提示 application.Alert(Lang::Strings::WIFI_CONFIG_MODE, hint.c_str(), "", Lang::Sounds::P3_WIFICONFIG); - #if USE_ACOUSTIC_WIFI_PROVISIONING + #if CONFIG_USE_ACOUSTIC_WIFI_PROVISIONING audio_wifi_config::ReceiveWifiCredentialsFromAudio(&application, &wifi_ap); #endif