ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_LULLABYVIEW, ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4);
//清空文本队列
ClearAudioTextQueue();
- ln_ws_audio_init();//功耗优化
- ln_ws_send_random_story_request("随机故事");
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
+ // 故事请求已在协议解析阶段处理(ln_parse_sleep_mode_start),此处不再发送
}
else//意图识别结果
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeStart: 意图识别结果,跳转到2");
//看后续是否需要
ln_ws_end_audio_chat();//结束对话
- g_sleep_mode_active = true;
+ // g_sleep_mode_active = true;
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeStart: 睡眠模式已开始");
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_LULLABYVIEW, ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_2);
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 故事模式finished且音频播放结束,结束故事模式");
// 重置标志
m_storyModeFinished = false;
- g_sleep_mode_active = false;
+ // g_sleep_mode_active = false;
// 结束故事模式
HandleSleepModeEnd();
return;
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
+// 睡眠模式状态标志位:true表示睡眠模式已开始,false表示未开始或已结束
+static bool g_sleep_mode_active = false;
+
+#ifdef SUPPORT_CAT1_SERVICE
+#include "custom_runtime.h" // 用于获取网络状态
+#endif
+#include "soc_osal.h" // 用于LOS_Msleep
uint32_t ln_story_random_http(const char *device_id,
const char *device_token,
}
cJSON_Delete(root);
}
+void uapi_set_sleep_mode_active(bool active)
+{
+ g_sleep_mode_active = active;
+}
/* 解析哄睡模式开始:提取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;
+ }
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] parse json\n");
(void)json_len;
if (json_str == NULL) {
}
}
}
-
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] storyTheme=%s\n", theme);
// 该接口不需要任何参数,系统会自动生成随机主题的故事
// storyTheme=随机
theme = "随机";
}
push_sleep_mode_start_notification(theme, 0);//0小程序直接发起,不是意图识别结果
- //通知websocket发送随机故事请求
- ln_ws_send_random_story_request(theme);
+ g_sleep_mode_active = true;
+
+ // 等待音频初始化完成后再发送随机故事请求
+ // 等待音频初始化超时时间:5秒,每100ms检查一次
+ #define MAX_AUDIO_WAIT_COUNT 50 // 5秒
+ #define WAIT_INTERVAL_MS 100
+ int audio_wait_count = 0;
+ int audio_ready = 0;
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] Waiting for audio initialization...\n");
+
+ while (audio_wait_count < MAX_AUDIO_WAIT_COUNT) {
+ if (ln_ws_is_audio_initialized()) {
+ audio_ready = 1;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] Audio initialized after %d ms\n",
+ audio_wait_count * WAIT_INTERVAL_MS);
+ break;
+ }
+
+ // 每1秒打印一次状态(减少日志噪音)
+ if (audio_wait_count % 10 == 0 && audio_wait_count > 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] Waiting for audio initialization... (elapsed:%d ms)\n",
+ audio_wait_count * WAIT_INTERVAL_MS);
+ }
+
+ LOS_Msleep(WAIT_INTERVAL_MS);
+ audio_wait_count++;
+ }
+
+ if (audio_ready) {
+ // 音频已初始化,发送随机故事请求
+ ln_ws_send_random_story_request(theme);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] send story request success\n");
+ } else {
+ // 音频初始化超时,记录日志但不发送请求
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] Audio initialization timeout after %d ms, skipping story request\n",
+ audio_wait_count * WAIT_INTERVAL_MS);
+ }
ln_ws_send_sleep_mode_start_ack(true, "哄睡模式开始");
if (root) cJSON_Delete(root);
}
ln_voice_chat_interrupt("哄睡模式结束");
push_sleep_mode_end_notification();
ln_ws_send_sleep_mode_end_ack(true, "哄睡模式结束");
+
+ // 清除睡眠模式已开始标志
+ g_sleep_mode_active = false;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_END] sleep mode flag cleared\n");
}