解决说话一个问题时快速点击说话完毕按钮导致只有问题而没有答案bug
authorluozheng <1732036298@qq.com>
Thu, 24 Jul 2025 09:22:37 +0000 (17:22 +0800)
committerluozheng <1732036298@qq.com>
Thu, 24 Jul 2025 09:22:37 +0000 (17:22 +0800)
code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp
code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoicePresenter.cpp
code/sdk/drivers/peripheral/slip/cat1Service/cat1_ai_server.cpp

index a20a80d..f9f5953 100644 (file)
@@ -526,6 +526,25 @@ namespace OHOS
     /*设置用户问题的字符串*/
     void AiVoiceModel::SetUserQuestionStr(std::string str)
     {
+        if (GetSelect4gorbt() == AI_SELECT_4G)
+        {
+            if(str.empty())
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "传入的问题为空");
+                return;
+            }
+            userQuestionStr = str;
+            if (!entryTextViewState)
+            {
+                SendMsgToUIService(UI_AI_JUMP_TO_RESULT_VIEW, 0, nullptr, 0);
+                entryTextViewState = true; // 进入返回结果界面的标志  避免重复发消息
+                usleep(50000);             // 延时等待创建完成,0.05秒
+            }
+            /* -------------------------------------------------------------------------- */
+            SendMsgToUIService(UI_UPDATE_USER_QUESTION_STR, 0, nullptr, 0);
+        }
+        else if (GetSelect4gorbt() == AI_SELECT_BT)
+        {
         if (!entryTextViewState)
         {
             SendMsgToUIService(UI_AI_JUMP_TO_RESULT_VIEW, 0, nullptr, 0);
@@ -538,6 +557,7 @@ namespace OHOS
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "拼接的问题:%s", userQuestionStr.c_str());
         /* -------------------------------------------------------------------------- */
         SendMsgToUIService(UI_UPDATE_USER_QUESTION_STR, 0, nullptr, 0);
+        }
     }
 
     /*获取Ai回答的字符串*/
@@ -1878,11 +1898,11 @@ namespace OHOS
         int textId = 0;
         selectAiModelToTextId = {
             {0, {STR_DEEPSEEK, 4}},
-            {1, {STR_AIMODES_CHATGPT, 1}},
+            {1, {STR_JIUTIAN, 5}},
             {2, {STR_AIMODELS_DOUBAO, 3}},
             {3, {STR_AIMODES_WENXINYIYAN, 0}},
             {4, {STR_AIMODES_KIMI, 2}},
-            {5, {STR_IFLYTEK_SPARK, 5}},
+            {5, {STR_AIMODES_CHATGPT, 1}},
         };
         textId = STR_DEEPSEEK;
 
index 8f950bc..bbde5aa 100644 (file)
@@ -557,6 +557,7 @@ namespace OHOS
             if (model->GetSelect4gorbt() == AI_SELECT_4G)
             {
                 uapi_UI_stop_asr();
+                usleep(10000); 
                 if (!model->is_need_to_jump_result_view()) //没有数据就跳转到思考中界面
                 {
                     ChangeViewAndLogicOperator(AIVOICE_LISTENING_VIEWID, AIVOICE_THINKING_VIEWID);
index c257d3f..7481446 100644 (file)
@@ -130,13 +130,20 @@ char result_str_asr[AI_RESULT_STR_LEN]={0};
 static uint8_t type_ai=0;
 
 uint8_t chat_reconnect=0;
+#if 1
+#define ASR_HODE
+static uint8_t asr_is_stop=0;
+#endif
+
 
 void uapi_UI_start_asr(uint8_t type)
 { 
     memset_s(result_str_asr,AI_RESULT_STR_LEN,0,AI_RESULT_STR_LEN); 
     // uapi_stop_tts();
 
-    
+    #ifdef ASR_HODE
+    asr_is_stop=0;
+    #endif
 
     type_ai=type;
     if(chat_client)
@@ -177,9 +184,7 @@ void uapi_UI_stop_start_asr_timeout(void)
 {
     asr_need_stop=1;
 }
-#if 1
-#define ASR_HODE
-#endif
+
 
 void uapi_UI_stop_asr(void)
 {
@@ -196,8 +201,7 @@ void uapi_UI_stop_asr(void)
 
     if(stop_AudioCaptureProcess_AI())
     {
-        
-
+        asr_is_stop=1;
     }
 }
 
@@ -720,6 +724,16 @@ bool aer_result_analysis(char *buf)
         
         #ifdef ASR_HODE
         memcpy_s(&result_str_asr[strlen(result_str_asr)],AI_RESULT_STR_LEN/2,result_str,strlen(result_str));
+
+        if(asr_is_stop==1 && strlen(result_str_asr))
+        {
+            send_ai_txt(0,result_str_asr);
+            ble_set_ai_Question_str(result_str_asr);
+
+            memset_s(result_str_asr,AI_RESULT_STR_LEN,0,AI_RESULT_STR_LEN);
+        }
+
+        
         #else
         memset_s(result_str_asr,256,0,256); 
         memcpy_s(result_str_asr,256,result_str,strlen(result_str));