增加对话初始化完成回调函数
authorxue <2144439972@qq.com>
Wed, 26 Nov 2025 01:58:34 +0000 (09:58 +0800)
committerxue <2144439972@qq.com>
Wed, 26 Nov 2025 01:58:34 +0000 (09:58 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/include/uiservice/ui_service.h
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp
code/sdk/zhihui/leiniao/imsl_ln/ln_api.h
code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.cpp
code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.h

index d7e8d9f..3f94263 100644 (file)
@@ -75,6 +75,7 @@ typedef enum {
     HAND_UPGRADE_DESCRIPTION_NOTIFY, // 升级描述通知
     HAND_STORY_RESPONSE_FINISHED_NOTIFY, // 故事响应finished通知
     HAND_DIALOGUE_RESPONSE_FINISHED_NOTIFY, // 对话响应finished通知
+    HAND_VAD_INITIALIZED_NOTIFY, // VAD初始化完成通知
     MAX_NUM_HANDLER, 
 } UiServiceMsgId;
 
index e376500..5bb2fee 100644 (file)
@@ -1523,57 +1523,7 @@ extern "C" {
                     uapi_start_all_websocket_servers(0); // 连接服务器
                     #endif
                     
-                    // // VAD 认证初始化(只尝试一次,避免网络失败时重复重试导致死机)
-                    // static uint8_t dmp_auth = 0;
-                    // static uint8_t dmp_auth_retry_count = 0;
-                    // const uint8_t MAX_AUTH_RETRY = 1; // 最多重试1次
-                    
-                    // if(dmp_auth == 0 && dmp_auth_retry_count < MAX_AUTH_RETRY)
-                    // {
-                    //     dmp_auth_retry_count++;
-                    //     char dmp_token[64] = {0};
-                    //     if(dmp_read_dev_token(dmp_token))
-                    //     {
-                    //         struct AuthInfo auth_info;
-                    //         memset(&auth_info, 0, sizeof(auth_info));
-                    //         strcpy(auth_info.dmp_token, dmp_token);
-                    //         int ret = auth_vad(&auth_info);
-                    //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "VAD auth result: %d, token: %s", ret, auth_info.dmp_token);
-                    //         dmp_auth = 1; // 无论成功失败都标记为已尝试,避免重复
-                    //     }
-                    //     else
-                    //     {
-                    //         // 只有在网络正常时才尝试登录,避免网络失败时阻塞
-                    //         if(HasNetwork() && dmp_aut_login())
-                    //         {
-                    //             // 登录成功后重新尝试读取token
-                    //             if(dmp_read_dev_token(dmp_token))
-                    //             {
-                    //                 struct AuthInfo auth_info;
-                    //                 memset(&auth_info, 0, sizeof(auth_info));
-                    //                 strcpy(auth_info.dmp_token, dmp_token);
-                    //                 int ret = auth_vad(&auth_info);
-                    //                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "VAD auth result after login: %d, token: %s", ret, auth_info.dmp_token);
-                    //                 dmp_auth = 1;
-                    //             }
-                    //             else
-                    //             {
-                    //                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "VAD auth failed: failed to read token after login");
-                    //                 dmp_auth = 1; // 标记为已尝试,避免重复
-                    //             }
-                    //         }
-                    //         else
-                    //         {
-                    //             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "VAD auth failed: dmp_aut_login failed or no network, retry_count=%d", dmp_auth_retry_count);
-                    //             // 如果网络失败,也标记为已尝试,避免无限重试
-                    //             // 但允许在下次网络恢复时再试一次(通过 retry_count 控制)
-                    //             if(dmp_auth_retry_count >= MAX_AUTH_RETRY)
-                    //             {
-                    //                 dmp_auth = 1; // 达到最大重试次数,不再尝试
-                    //             }
-                    //         }
-                    //     }
-                    // }
+                    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_VAD_AUTH, NULL, 0);
                     init_falg = true;
                 }
                
@@ -2703,6 +2653,19 @@ extern "C" {
             }
         
     }
+
+    // VAD初始化完成处理函数
+    void ThunderBirdModel::HandleVadInitialized()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleVadInitialized: VAD初始化完成");
+        // 隐藏提醒界面,暂不处理,后续有需要再增加
+        // if(ThunderBirdReminderView::GetInstance())
+        // {
+        //     ThunderBirdReminderView::GetInstance()->HideAll();
+        // }
+        
+        // ThunderBirdPresenter::GetInstance()->vadFirstSuccess = true;
+    }
     
     // 将英文表情映射到英文文件名
     std::string ThunderBirdModel::MapEmotionToFileName(const char* emotion)
@@ -2769,19 +2732,19 @@ extern "C" {
                     expressionPath = "/user/res/video/Default/" + emotionFileName + ".mp4";
                 } else {
                     // 非默认表情
-                    if(m_currentExpression == "winking") {
+                    if(emotion == "winking") {
                         // 如果为眨眼表情,则在默认文件目录里面
                         // expressionPath = "/user/res/video/CloseEyes/" + eyesShape_ + "/" + eyesColor_ + ".mp4";
                         return;
                     } else {
                         // 非眨眼表情,则在下载文件目录里面
-                        if(m_currentExpression == "sleeping")
+                        if(emotion == "sleeping")
                         {
                             expressionPath = "/user/res/video/Default/sleeping.mp4";
                         }
                         else
                         {
-                            expressionPath = "/user/userdata/leiniao/emoji/" + eyesShape_ + "/" + eyesColor_ + "/" + m_currentExpression + ".mp4";
+                            expressionPath = "/user/userdata/leiniao/emoji/" + eyesShape_ + "/" + eyesColor_ + "/" + emotion + ".mp4";
                         }
                     }
                 }
index a23ea28..bcea953 100644 (file)
 #include "TransitionType.h"
 
 #include "thunderbird/include/ThunderBirdModel.h"
+#include "thunderbird/include/ThunderBirdReminderView.h"
+#include "thunderbird/include/ThunderBirdPresenter.h"
+#include "thunderbird/include/ThunderBirdMainView.h"
+#include "thunderbird/include/ThunderBirdDialogueView.h"
 #include "ota/include/OtaModel.h"
+#include "ln_api.h"
 
 extern "C" errcode_t uapi_pm_add_sleep_veto(pm_id_t veto_id);
 extern "C" errcode_t uapi_pm_remove_sleep_veto(pm_id_t veto_id);
@@ -111,6 +116,7 @@ static void HandTimelineStatusChangeNotify(Request *request);
 static void HandUpgradeDescriptionNotify(Request *request);
 static void HandStoryResponseFinishedNotify(Request *request);
 static void HandDialogueResponseFinishedNotify(Request *request);
+static void HandVadInitializedNotify(Request *request);
 // 消息处理程序项数组(每个消息类型对应一个处理函数,函数名以 Handle 开头)
 MsgHandlerEntry msgHandlers[] = {
     {HANDLE_JUMP_OTA_VIEW, HandleJumpOtaView},
@@ -138,6 +144,7 @@ MsgHandlerEntry msgHandlers[] = {
     {HAND_UPGRADE_DESCRIPTION_NOTIFY,HandUpgradeDescriptionNotify},
     {HAND_STORY_RESPONSE_FINISHED_NOTIFY,HandStoryResponseFinishedNotify},
     {HAND_DIALOGUE_RESPONSE_FINISHED_NOTIFY,HandDialogueResponseFinishedNotify},
+    {HAND_VAD_INITIALIZED_NOTIFY,HandVadInitializedNotify},
 };
 /* -------------------------------------------------------------------------- */
 void ScreenTurnOn(int32_t timeout)
@@ -816,6 +823,17 @@ void HandDialogueResponseFinishedNotify(Request *request)
                          OHOS::ThunderBirdModel::GetInstance(), finished));
     }
 }
+
+void HandVadInitializedNotify(Request *request)
+{
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandVadInitializedNotify msg_id = %d", request->msgId);
+    // 隐藏等待语音初始化提醒,并进入对话模式
+    GraphicService::GetInstance()->PostGraphicEvent(
+        std::bind([]() {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "VAD initialized, hiding reminder and entering dialogue mode");
+                std::bind(&OHOS::ThunderBirdModel::HandleVadInitialized,OHOS::ThunderBirdModel::GetInstance());
+        }));
+}
 /* -------------------------------------------------------------------------- */
 #ifdef __cplusplus
 }
index 5959587..cb1448c 100644 (file)
@@ -418,6 +418,7 @@ typedef enum {
     WS_CMD_AUDIO_RECORDING_START,    /* 开始录音上传 */
     WS_CMD_AUDIO_RECORDING_END,      /* 结束录音上传 */
     WS_CMD_SENTENCE_PLAYBACK_COMPLETE, /* 单句语音播放完成 */
+    WS_CMD_VAD_INITIALIZED,          /* VAD 服务器初始化完成 */
     WS_CMD_DEVICE_UPGRADE,           /* 设备升级(DeviceUpgrade) */
     WS_CMD_MAX                       /* 最大命令 */
 } ws_command_t;
@@ -474,6 +475,8 @@ void ln_ws_audio_deinit(void);
 
 bool ln_ws_is_audio_initialized(void);
 
+int ln_ws_vad_auth(void);
+
 /* WebSocket状态查询接口 */
 int ln_ws_get_connection_state(void);
 const char* ln_ws_get_connection_state_string(void);
@@ -488,6 +491,7 @@ int ln_ws_enable_vad_server(void);      /* 启用 VAD 服务器 */
 int ln_ws_disable_vad_server(void);     /* 禁用 VAD 服务器 */
 bool ln_ws_is_vad_server_enabled(void); /* 获取 VAD 服务器启用状态 */
 bool ln_ws_is_vad_server_initialized(void); /* 获取 VAD 服务器初始化状态 */
+bool ln_ws_is_vad_server_auth_success(void); /* 获取 VAD 服务器认证成功状态 */
 
 #ifdef __cplusplus
 }
index 22ec664..310a74f 100644 (file)
@@ -323,6 +323,13 @@ void push_dialogue_response_finished_notification(bool finished)
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DIALOGUE_RESPONSE_FINISHED] finished=%d", finished);
     SendMsgToUIService(HAND_DIALOGUE_RESPONSE_FINISHED_NOTIFY, 0, &finished, sizeof(finished));
 }
+
+//通知VAD初始化完成
+void push_vad_initialized_notification(void)
+{
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[VAD_INITIALIZED] VAD server initialized");
+    SendMsgToUIService(HAND_VAD_INITIALIZED_NOTIFY, 0, NULL, 0);
+}
 #ifdef __cplusplus
 };
 #endif
\ No newline at end of file
index 1ca3442..31c4852 100644 (file)
@@ -117,6 +117,8 @@ void push_upgrade_description_notification(const char *description);
 void push_story_response_finished_notification(bool finished);
 //通知对话响应finished
 void push_dialogue_response_finished_notification(bool finished);
+//通知VAD初始化完成
+void push_vad_initialized_notification(void);
 #ifdef __cplusplus
 }
 #endif