可开启第二轮对话版本
authorhcj <1224667075@qq.com>
Tue, 12 Aug 2025 12:24:10 +0000 (20:24 +0800)
committerhcj <1224667075@qq.com>
Tue, 12 Aug 2025 12:24:10 +0000 (20:24 +0800)
code/sdk/drivers/peripheral/slip/cat1Service/cat1_ai_server.cpp

index ebcbfa2..c50cab4 100644 (file)
@@ -874,10 +874,26 @@ void bk_websocket_demo(void *data) {
             goto cleanup_and_exit;
         }
         
-        while (chat_client->handshake==0)
-        {
+        // 等待WebSocket握手完成,增加超时机制
+        uint32_t handshake_start_time = (uint32_t)osKernelGetTickCount();
+        const uint32_t handshake_timeout_ms = 30000; // 30秒超时
+        
+        while (chat_client->handshake == 0) {
+            // 检查是否超时
+            if ((uint32_t)osKernelGetTickCount() - handshake_start_time > handshake_timeout_ms) {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WebSocket握手超时 (%d ms),重新连接", handshake_timeout_ms);
+                lwip_close_websocket_client(chat_client);
+                chat_client = NULL;
+                goto char_reconnet;
+            }
+            
             msleep(1000);
+            WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "等待WebSocket握手完成... (%d ms)", 
+                          (uint32_t)osKernelGetTickCount() - handshake_start_time);
         }
+        
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "WebSocket握手完成,耗时 %d ms", 
+                      (uint32_t)osKernelGetTickCount() - handshake_start_time);
 
         // 设置socket超时
         // struct timeval timeout;
@@ -1345,10 +1361,26 @@ void bk_websocket_asr(void *data) {
             goto asr_cleanup_and_exit;
         }
 
-        while (asr_client->handshake==0)
-        {
+        // 等待ASR WebSocket握手完成,增加超时机制
+        uint32_t asr_handshake_start_time = (uint32_t)osKernelGetTickCount();
+        const uint32_t asr_handshake_timeout_ms = 30000; // 30秒超时
+        
+        while (asr_client->handshake == 0) {
+            // 检查是否超时
+            if ((uint32_t)osKernelGetTickCount() - asr_handshake_start_time > asr_handshake_timeout_ms) {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ASR WebSocket握手超时 (%d ms),重新连接", asr_handshake_timeout_ms);
+                lwip_close_websocket_client(asr_client);
+                asr_client = NULL;
+                goto asr_cleanup_and_exit;
+            }
+            
             msleep(1000);
+            WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "等待ASR WebSocket握手完成... (%d ms)", 
+                          (uint32_t)osKernelGetTickCount() - asr_handshake_start_time);
         }
+        
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "ASR WebSocket握手完成,耗时 %d ms", 
+                      (uint32_t)osKernelGetTickCount() - asr_handshake_start_time);
 
         uapi_cat1_keep_wakeup(1);
 
@@ -1764,10 +1796,26 @@ void bk_websocket_tts(void *data) {
             goto tts_cleanup_and_exit;
         }
 
-        while (tts_client->handshake==0)
-        {
+        // 等待TTS WebSocket握手完成,增加超时机制
+        uint32_t tts_handshake_start_time = (uint32_t)osKernelGetTickCount();
+        const uint32_t tts_handshake_timeout_ms = 30000; // 30秒超时
+        
+        while (tts_client->handshake == 0) {
+            // 检查是否超时
+            if ((uint32_t)osKernelGetTickCount() - tts_handshake_start_time > tts_handshake_timeout_ms) {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TTS WebSocket握手超时 (%d ms),重新连接", tts_handshake_timeout_ms);
+                lwip_close_websocket_client(tts_client);
+                tts_client = NULL;
+                goto tts_cleanup_and_exit;
+            }
+            
             msleep(1000);
+            WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "等待TTS WebSocket握手完成... (%d ms)", 
+                          (uint32_t)osKernelGetTickCount() - tts_handshake_start_time);
         }
+        
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "TTS WebSocket握手完成,耗时 %d ms", 
+                      (uint32_t)osKernelGetTickCount() - tts_handshake_start_time);
 
         server_state = 0x04 ^ server_state;