return true; // 异步调用,返回 true 表示调用已提交
}
+ //接收到哄睡模式开始请求
void ThunderBirdModel::HandleSleepModeStart(const char* theme, int is_intention_result)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeStart");
//若为意图识别结果,则跳转到4,否则跳转到2
if(is_intention_result == 0)
{
- do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT_VAD_DISABLE, NULL, 0);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeStart: 非意图识别结果,跳转到4");
// 重置故事模式finished标志,确保每次进入故事模式时标志位是干净的
m_storyModeFinished = false;
// 进入对话模式时记录当前表情
void ThunderBirdModel::OnEnterDialogueMode()
{
+ // 记录进入对话模式前的时间线表情(用于退出时恢复)
+ m_dialogueExpression = "winking";
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnEnterDialogueMode: 记录时间线表情: %s", m_currentExpression.c_str());
// 重置对话模式finished标志
m_dialogueModeFinished = false;
//如果本来就是眨眼的表情直接返回
if (m_currentExpression == "winking" || m_currentExpression.empty() == true) {
return;
}
- // 记录进入对话模式前的时间线表情(用于退出时恢复)
- m_dialogueExpression = "winking";
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnEnterDialogueMode: 记录时间线表情: %s", m_currentExpression.c_str());
-
+
// 应用音量(如果在STATUS_SHOW界面调节过音量,此时应用)
auto *reminderView = ThunderBirdReminderView::GetInstance();
if (reminderView && reminderView->IsVolumeViewVisible()) {
// 进入哄睡模式时记录当前表情(进入THUNDERBIRD_LULLABYVIEW_4时调用)
void ThunderBirdModel::OnEnterLullabyMode()
{
+ // 记录进入哄睡模式前的时间线表情(用于退出时恢复)
+ m_lullabyExpression = "winking";
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnEnterLullabyMode: 记录时间线表情: %s", m_currentExpression.c_str());
//如果本来就是眨眼的表情直接返回
if (m_currentExpression == "winking" || m_currentExpression.empty() == true) {
return;
}
- // 记录进入哄睡模式前的时间线表情(用于退出时恢复)
- m_lullabyExpression = "winking";
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnEnterLullabyMode: 记录时间线表情: %s", m_currentExpression.c_str());
-
// 应用音量(如果在STATUS_SHOW界面调节过音量,此时应用)
auto *reminderView = ThunderBirdReminderView::GetInstance();
if (reminderView && reminderView->IsVolumeViewVisible()) {
isDialogueing = true;
//未绑定状态,联网隐藏网络断开提醒
// 开始对话
- do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT_VAD_ENABLE, NULL, 0);
// ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
break;
case ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_3:
{
// 进入哄睡模式时切换为眨眼表情
- ln_ws_audio_init();//功耗优化
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT_VAD_DISABLE, NULL, 0);
ThunderBirdModel::GetInstance()->OnEnterLullabyMode();
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_LULLABYVIEW, ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4);
// ln_ws_start_audio_chat(LN_AUDIO_CHAT_CHOOSE_STORY_REQUEST);
if((currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW)
|| (currentView == THUNDERBIRD_GUIDEVIEW))
{
- do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
// 检查WebSocket连接状态
int wsState = ln_ws_get_connection_state();
bool wsConnected = (wsState == 2); // WS_STATE_CONNECTED = 2
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "vad认证不成功,不进入对话模式");
return;
}
-
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT_VAD_ENABLE, NULL, 0);
// 条件满足,进入对话模式
ThunderBirdModel::GetInstance()->LowFrequence();//减低视频帧率
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "进入对话模式");
printf("[LN][WS_AUDIO_INIT] Initializing WebSocket audio...\n");
- ln_ws_audio_init();
+ ln_ws_audio_init(true);
printf("[LN][WS_AUDIO_INIT] WebSocket audio initialized successfully\n");
return ERRCODE_SUCC;
int ln_ws_enter_sleep(void);
int ln_ws_exit_sleep(void);
-void ln_ws_audio_init(void);
+void ln_ws_audio_init(bool is_vad_server_enabled);
void ln_ws_audio_deinit(void);
/* 解析哄睡模式开始:提取data.storyTheme并触发随机故事 */
void ln_parse_sleep_mode_start(const char *json_str, int json_len)
{
- if(g_sleep_mode_active)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] sleep mode already active\n");
- return;
- }
+ // if(g_sleep_mode_active)
+ // {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] sleep mode already active\n");
+ // return;
+ // }
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] parse json\n");
(void)json_len;
if (json_str == NULL) {
}
-void ln_ws_audio_init(void)
+void ln_ws_audio_init(bool is_vad_server_enabled)
{
// 检查是否已经初始化
if (g_audio_initialized) {
LN_WS_INFO("Audio initialization completed successfully\n");
#if ENABLE_VAD_SERVER
- // 如果 VAD 服务器已启用,则初始化 VAD 服务器
- ln_ws_enable_vad_server();
-
- if (g_vad_server_enabled && !g_vad_server_initialized) {
- LN_WS_INFO("Initializing VAD server...\n");
- errcode_t ret = vad_server_init(vad_status_callback_ln_ws); // 使用 NULL 回调,也可以传入自定义回调
- if (ret == ERRCODE_SUCC) {
- g_vad_server_initialized = true;
- LN_WS_INFO("VAD server initialized successfully\n");
- // 通知 UI VAD 服务器初始化完成,取消等待提醒
- if (g_ws_message_callback != NULL) {
- g_ws_message_callback(NULL, WS_CMD_VAD_INITIALIZED);
+ if (is_vad_server_enabled) {
+ // 如果 VAD 服务器已启用,则初始化 VAD 服务器
+ ln_ws_enable_vad_server();
+
+ if (g_vad_server_enabled && !g_vad_server_initialized) {
+ LN_WS_INFO("Initializing VAD server...\n");
+ errcode_t ret = vad_server_init(vad_status_callback_ln_ws); // 使用 NULL 回调,也可以传入自定义回调
+ if (ret == ERRCODE_SUCC) {
+ g_vad_server_initialized = true;
+ LN_WS_INFO("VAD server initialized successfully\n");
+ // 通知 UI VAD 服务器初始化完成,取消等待提醒
+ if (g_ws_message_callback != NULL) {
+ g_ws_message_callback(NULL, WS_CMD_VAD_INITIALIZED);
+ }
+ } else {
+ LN_WS_ERROR("Failed to initialize VAD server: %d\n", ret);
}
- } else {
- LN_WS_ERROR("Failed to initialize VAD server: %d\n", ret);
}
- }
+ }
#endif
}
#endif
break;
#ifdef BOARD_LEINIAO
- case CUSTOM_CMD_MSG_AUDIO_INIT:
- PRINT("Audio init via custom cmd\n");
- //osDelay(1000);
- ln_ws_audio_init();
+ case CUSTOM_CMD_MSG_AUDIO_INIT_VAD_ENABLE:
+ PRINT("Audio init via custom cmd (VAD enabled)\n");
+ ln_ws_audio_init(true);
+ break;
+ case CUSTOM_CMD_MSG_AUDIO_INIT_VAD_DISABLE:
+ PRINT("Audio init via custom cmd (VAD disabled)\n");
+ ln_ws_audio_init(false);
break;
case CUSTOM_CMD_MSG_AUDIO_DEINIT:
PRINT("Audio deinit via custom cmd\n");
#define CUSTOM_CMD_MSG_AUDIO_DEINIT 0x26
-#define CUSTOM_CMD_MSG_AUDIO_INIT 0x27
+#define CUSTOM_CMD_MSG_AUDIO_INIT_VAD_ENABLE 0x27
+#define CUSTOM_CMD_MSG_AUDIO_INIT_VAD_DISABLE 0x28
-#define CUSTOM_CMD_MSG_VAD_AUTH 0x28
+#define CUSTOM_CMD_MSG_VAD_AUTH 0x29
-#define CUSTOM_CMD_MSG_ROTARY_OPEN 0x29
+#define CUSTOM_CMD_MSG_ROTARY_OPEN 0x2A
-#define CUSTOM_CMD_MSG_START_SECOND_STREAM_IN 0x30
+#define CUSTOM_CMD_MSG_START_SECOND_STREAM_IN 0x2B
-#define CUSTOM_CMD_MSG_STOP_SECOND_STREAM_IN 0x31
+#define CUSTOM_CMD_MSG_STOP_SECOND_STREAM_IN 0x2C
typedef enum {