m_cat1RestartInProgress(false),
m_bootTime(0),
m_lastCat1RestartTime(0),
- m_storyModeTimeoutTimer(nullptr)
+ m_storyModeTimeoutTimer(nullptr),
+ m_networkConnectingReason(NetworkConnectingReason::NONE),
+ m_networkConnectingTimeoutCount(0)
{
// 初始化时加载提醒数据
// LoadRemindersFromFile();
{
if(get_is_ln_get_device_network_success())
{
- //如果ws连接上了但还是没网
- if (m_networkType == 0 && !m_cat1RestartInProgress)
- {
- // 如果无网络,跳转到网络连接中界面
- ThunderBirdMainView *mainView = ThunderBirdMainView::GetInstance();
- if (mainView != nullptr)
- {
- int16_t currentView = mainView->GetCurrentView();
- mainView->ChangeView(currentView, THUNDERBIRD_ADJUSTVIEW, ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_NETWORK_CONNECTING);
- }
- m_cat1RestartInProgress = true;
- return;
- }
if (init_falg == false)
{
//发送获取绑定用户ID,异步执行,避免阻塞UI线程
// 检查是否是网络连接中界面,6秒后自动跳转到状态界面
else if (currentView == THUNDERBIRD_ADJUSTVIEW &&
currentSubView == ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_NETWORK_CONNECTING) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "网络连接中界面6秒定时器到时,自动跳转到状态界面");
- // 重置Cat1重启标志位
- m_cat1RestartInProgress = false;
- // 跳转到对话状态界面
- view->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "网络连接中界面6秒定时器到时,检查状态");
+
+ bool shouldContinue = false; // 是否需要继续等待
+
+ // 根据进入原因检查状态
+ if (m_networkConnectingReason == NetworkConnectingReason::NETWORK_DISCONNECT) {
+ // 检查网络是否已连接
+ bool networkSuccess = get_is_ln_get_device_network_success();
+
+ if (!networkSuccess) {
+ // 网络仍未连接,检查是否超过60秒
+ m_networkConnectingTimeoutCount++;
+ if (m_networkConnectingTimeoutCount < 10) { // 最多10次,共60秒
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "网络仍未连接,继续等待(%d/10)", m_networkConnectingTimeoutCount);
+ shouldContinue = true;
+ // 重新启动6秒定时器
+ StartCountUpTimer(6);
+ } else {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "网络连接超时(60秒),跳转");
+ // 超时,重置标志位和计数器
+ m_networkConnectingReason = NetworkConnectingReason::NONE;
+ m_networkConnectingTimeoutCount = 0;
+ m_cat1RestartInProgress = false;
+ }
+ } else {
+ // 网络已连接,重置标志位和计数器
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "网络已连接,跳转");
+ m_networkConnectingReason = NetworkConnectingReason::NONE;
+ m_networkConnectingTimeoutCount = 0;
+ m_cat1RestartInProgress = false;
+ }
+ } else if (m_networkConnectingReason == NetworkConnectingReason::VAD_AUTH_FAILED) {
+ // 检查VAD认证是否成功
+ bool vadAuthSuccess = ln_ws_is_vad_server_auth_success();
+
+ if (!vadAuthSuccess) {
+ // VAD认证仍未成功,检查是否超过60秒
+ m_networkConnectingTimeoutCount++;
+ if (m_networkConnectingTimeoutCount < 10) { // 最多10次,共60秒
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "VAD认证仍未成功,继续等待(%d/10)", m_networkConnectingTimeoutCount);
+ shouldContinue = true;
+ // 重新启动6秒定时器
+ StartCountUpTimer(6);
+ } else {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "VAD认证超时(60秒),跳转");
+ // 超时,重置标志位和计数器
+ m_networkConnectingReason = NetworkConnectingReason::NONE;
+ m_networkConnectingTimeoutCount = 0;
+ }
+ } else {
+ // VAD认证已成功,重置标志位和计数器
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "VAD认证已成功,跳转");
+ m_networkConnectingReason = NetworkConnectingReason::NONE;
+ m_networkConnectingTimeoutCount = 0;
+ }
+ } else {
+ // 无原因或未知原因,直接跳转
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "无原因标志,直接跳转");
+ m_cat1RestartInProgress = false;
+ }
+
+ // 如果不需要继续等待,则跳转
+ if (!shouldContinue) {
+ // 根据绑定状态决定跳转目标
+ if (bind_status == true) {
+ // 已绑定,跳转到对话状态界面
+ view->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
+ } else {
+ // 未绑定,跳转到引导界面
+ view->ChangeView(currentView, THUNDERBIRD_GUIDEVIEW, ThunderBirdGuideView::THUNDERBIRD_GUIDEVIEW_5);
+ }
+ }
}
// 检查是否是绑定成功界面,需要跳转到对话界面
else if (currentView == THUNDERBIRD_ADJUSTVIEW &&
*/
bool ThunderBirdPresenter::HandleFuncKey(uint16_t keyState, int16_t currentView, int16_t currentSubView, int screenState)
{
- // 长按FUNC键:开启对话模式切换
- // if (keyState == InputDevice::STATE_LONG_PRESS && screenState == 0) {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFuncKey: KEY_TYPE_FUNC long press");
- // //NativeAbility::GetInstance().SwitchSlice(VIEW_LCD_TEST);
- // if(currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW)
- // {
- // ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
- // isDialogueing = true;
- // }
- // else
- // {
- // ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
- // isDialogueing = false;
- // }
- // return true;
- // }
-
// 处理设备列表功能
if (keyState == InputDevice::STATE_RELEASE && screenState == 0 )
{
if (keyState == InputDevice::STATE_PRESS && screenState == 0 ) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFuncKey: KEY_TYPE_FUNC press");
- // 在非对话模式下按下FUNC键时,预先初始化音频(需要WebSocket已连接)
- // if (!isDialogueing && ((currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW)
- // || (currentView == THUNDERBIRD_GUIDEVIEW))) {
- // // 检查WebSocket连接状态
- // int wsState = ln_ws_get_connection_state();
- // bool wsConnected = (wsState == 2); // WS_STATE_CONNECTED = 2
- // if (wsConnected) {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "非对话模式下FUNC键按下,WebSocket已连接,预先初始化音频");
- // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
- // } else {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "非对话模式下FUNC键按下,WebSocket未连接,不预初始化音频 (wsState=%d)", wsState);
- // }
- // }
-
if(currentView == THUNDERBIRD_LULLABYVIEW && currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_3)
{
// HandleLullabyFunction(currentView, currentSubView);
// ln_ws_start_audio_chat(LN_AUDIO_CHAT_CHOOSE_STORY_REQUEST);
// ThunderBirdLullabyView::GetInstance()->listenAnimator->Start();
}
- else if(isDialogueing == true)
+ else if(currentView == THUNDERBIRD_DIALOGUEVIEW &&
+ (currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING || currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING))
{
// 处理对话功能
HandleDialogueFunction(currentView, currentSubView);
}
// FUNC键松开时,如果没有进入对话模式则关闭音频初始化
- if (keyState == InputDevice::STATE_RELEASE && screenState == 0 && !isDialogueing && currentView != THUNDERBIRD_LULLABYVIEW) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FUNC键松开,未进入对话模式,关闭音频初始化");
- do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
- }
+ // if (keyState == InputDevice::STATE_RELEASE && screenState == 0 && !isDialogueing && currentView != THUNDERBIRD_LULLABYVIEW) {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FUNC键松开,未进入对话模式,关闭音频初始化");
+ // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+ // }
return true;
}
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HandleDialogueViewNavigation: 取消退出对话定时器");
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleDialogueFunction: currentView=%d, currentSubView=%d", currentView, currentSubView);
- //bool flag = ThunderBirdModel::GetInstance()->Get_is_all_services_ready();
- // if(flag == false)
- // {
- // return;
- // }
- /*if(DialogueingFlag == false)
- {
- ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
- ThunderBirdDialogueView::GetInstance()->UpdateDialogueText("超认真聆听中");
- ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
- DialogueingFlag = true;
+ // 等待视频切换完成,避免在视频切换过程中触发状态切换导致资源冲突
+ if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::IsSwitchingVideo()) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HandleDialogueFunction: 等待视频切换完成");
+ ThunderBirdMainView::WaitForVideoSwitchComplete(2000);
}
- else*/if (currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING ) {
+
+ if (currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING ) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "停止录音,跳转到思考状态");
// 停止录音并发送
- // 停止聆听超时定时器
- ThunderBirdModel::GetInstance()->StopCountUpTimer();
- ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING);
+ // 停止聆听超时定时
ln_ws_end_audio_chat();
//清空音频文本队列
ThunderBirdModel::GetInstance()->ClearAudioTextQueue();
+ ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING);
} else if(currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING) {
AI_ForceInterrupt();
ln_ws_end_audio_chat();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始录音,跳转到聆听状态");
// 开始录音
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
- // ThunderBirdDialogueView::GetInstance()->UpdateDialogueText("超认真聆听中");
ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
}
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "语音键处理完成");
}
/**
// WebSocket未连接,显示网络断开提醒
reminderView->Show(ThunderBirdReminderView::THUNDERBIRD_REMINDERVIEW_NETWORK_DISCONNECT);
reminderView->dialogue_unnetwork();
+
+ }
+ networkCount++;
+ if(networkCount > 2)
+ {
+ //关闭动画
+ ThunderBirdGuideView::GetInstance()->bandAnimator->Stop();
+ //重新连接网络
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_CAT1_RESTART, NULL, 0);
+ // 设置标志位:网络未连接
+ ThunderBirdModel::GetInstance()->m_networkConnectingReason = ThunderBirdModel::NetworkConnectingReason::NETWORK_DISCONNECT;
+ ThunderBirdModel::GetInstance()->m_networkConnectingTimeoutCount = 0;
+ ThunderBirdMainView::GetInstance()->ChangeView(THUNDERBIRD_GUIDEVIEW, THUNDERBIRD_ADJUSTVIEW, ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_NETWORK_CONNECTING);
+ networkCount = 0;
}
// 显示后再设置2秒定时器自动隐藏提示
} else {
ThunderBirdModel::GetInstance()->ota_update_boot();//绑定成功后获取ota升级任务
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
break;
- case ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_NETWORK_CONNECTING:
- ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_SHUTDOWNVIEW, 0);
- break;
+ // case ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_NETWORK_CONNECTING:
+ // // ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_SHUTDOWNVIEW, 0);
+ // break;
}
}
else if(keyType == KEY_TYPE_VENDOR_DOWN)
networkCount++;
if(networkCount > 2)
{
- //重新连接网络
+ //重新连接网络
do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_CAT1_RESTART, NULL, 0);
+ // 设置标志位:网络未连接
+ ThunderBirdModel::GetInstance()->m_networkConnectingReason = ThunderBirdModel::NetworkConnectingReason::NETWORK_DISCONNECT;
+ ThunderBirdModel::GetInstance()->m_networkConnectingTimeoutCount = 0;
+ ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_ADJUSTVIEW, ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_NETWORK_CONNECTING);
networkCount = 0;
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WebSocket未连接,不进入对话模式");
cat1_gettime();
//重新vad认证
do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_VAD_AUTH, NULL, 0);
+ // 设置标志位:VAD认证失败
+ ThunderBirdModel::GetInstance()->m_networkConnectingReason = ThunderBirdModel::NetworkConnectingReason::VAD_AUTH_FAILED;
+ ThunderBirdModel::GetInstance()->m_networkConnectingTimeoutCount = 0;
+ ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_ADJUSTVIEW, ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_NETWORK_CONNECTING);
vadAuthCount = 0;
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "vad认证不成功,不进入对话模式");