#include "ai_media.h"
#include "ConfigModelC.h"
#include "ConfigModel.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include "imsl_vad.h"
+#include "dmp_api.h"
+#ifdef __cplusplus
+}
+#endif
#define JUHEPINGTAI 0
#if JUHEPINGTAI
#include "websocket_server_manager.h"
// 检查是否在对话界面
if (currentView == THUNDERBIRD_DIALOGUEVIEW && (currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING || currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING)) {
// 检查是否是在对话模式进入时因为WebSocket未连接而显示的提醒
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
ThunderBirdPresenter *presenter = ThunderBirdPresenter::GetInstance();
if (presenter && presenter->isDialogueing) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[定时器] WebSocket连接成功,隐藏网络断开提醒,进入对话模式");
}
// 如果在对话界面,初始化音频
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[定时器] WebSocket连接成功,在对话界面,初始化音频");
- do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
+
}
}
}
uapi_init_all_websocket_servers();
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; // 达到最大重试次数,不再尝试
+ }
+ }
+ }
+ }
init_falg = true;
}