优化开机获取Vad认证
authorxue <2144439972@qq.com>
Fri, 28 Nov 2025 03:01:55 +0000 (11:01 +0800)
committerxue <2144439972@qq.com>
Fri, 28 Nov 2025 03:01:55 +0000 (11:01 +0800)
code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c

index 28d41a2..c16ae2f 100644 (file)
@@ -1354,13 +1354,9 @@ int ln_ws_vad_auth(void)
     LN_WS_INFO("Starting VAD authentication...\n");
     // 使用静态变量,避免重复认证
     static uint8_t task_dmp_auth = 0;
-    static uint8_t task_dmp_auth_retry_count = 0;
-    const uint8_t MAX_AUTH_RETRY = 5; // 最多重试1次
     
-    if(task_dmp_auth == 0 && task_dmp_auth_retry_count < MAX_AUTH_RETRY)
+    if(task_dmp_auth == 0)
     {
-        task_dmp_auth_retry_count++;
-        
         char dmp_token[64] = {0};
         if(dmp_read_dev_token(dmp_token))
         {
@@ -1376,33 +1372,46 @@ int ln_ws_vad_auth(void)
         {
             if(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);
-                    LN_WS_INFO("VAD auth result after login: %d, token: %s\n", ret, auth_info.dmp_token);
-                    task_dmp_auth = 1;
-                    g_vad_server_auth_success = true;
-                    return (ret == 1) ? 0 : -1; // auth_vad 返回1表示成功
-                }
-                else
+                // 登录成功后循环尝试读取token,直到获取成功
+                int retry_count = 0;
+                const int MAX_TOKEN_READ_RETRY = 1000; // 最多重试100次,避免无限循环
+                const int RETRY_INTERVAL_MS = 100;    // 每次重试间隔100ms
+                
+                while(retry_count < MAX_TOKEN_READ_RETRY)
                 {
-                    LN_WS_ERROR("VAD auth failed: failed to read token after login\n");
-                    task_dmp_auth = 1; // 标记为已尝试,避免重复
-                    return -1;
+                    dmp_aut_login();
+                    if(dmp_read_dev_token(dmp_token))
+                    {
+                        // 成功读取token
+                        struct AuthInfo auth_info;
+                        memset(&auth_info, 0, sizeof(auth_info));
+                        strcpy(auth_info.dmp_token, dmp_token);
+                        LN_WS_INFO("VAD auth result after login: %d, token: %s, retry_count=%d\n", 
+                                  ret, auth_info.dmp_token, retry_count);
+                        task_dmp_auth = 1;
+                        g_vad_server_auth_success = true;
+                        return (ret == 1) ? 0 : -1; // auth_vad 返回1表示成功
+                    }
+                    
+                    // 读取失败,等待后重试
+                    retry_count++;
+                    if(retry_count % 10 == 0) // 每10次打印一次日志,减少日志噪音
+                    {
+                        LN_WS_INFO("Waiting for token after login, retry_count=%d\n", retry_count);
+                    }
+                    LOS_Msleep(RETRY_INTERVAL_MS);
                 }
+                
+                // 达到最大重试次数仍未成功
+                LN_WS_ERROR("VAD auth failed: failed to read token after login, max retry reached (%d)\n", 
+                           MAX_TOKEN_READ_RETRY);
+                task_dmp_auth = 1; // 标记为已尝试,避免重复
+                return -1;
             }
             else
             {
-                LN_WS_ERROR("VAD auth failed: dmp_aut_login failed, retry_count=%d\n", task_dmp_auth_retry_count);
-                // 如果网络失败,也标记为已尝试,避免无限重试
-                if(task_dmp_auth_retry_count >= MAX_AUTH_RETRY)
-                {
-                    task_dmp_auth = 1; // 达到最大重试次数,不再尝试
-                }
+                LN_WS_ERROR("VAD auth failed: dmp_aut_login failed\n");
+                task_dmp_auth = 1; // 标记为已尝试,避免重复
                 return -1;
             }
         }