{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始哄睡\n");
push_sleep_mode_start_notification(NULL, 1); // 1意图识别结果
+ // 标记为开启哄睡(在通知之后设置,作为保护机制)
+ uapi_set_sleep_mode_active(true);
// ln_ws_send_random_story_request("随机故事");
}
else if(strcmp(intention_str, "EndSleepMode") == 0)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "结束哄睡\n");
push_sleep_mode_end_notification();
+ // 标记为结束哄睡(在通知之后清除,作为保护机制)
+ uapi_set_sleep_mode_active(false);
}
}
else
/* 解析哄睡模式开始:提取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(uapi_get_sleep_mode_active())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] sleep mode already active, return directly\n");
+ return;
+ }
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] parse json\n");
(void)json_len;
if (json_str == NULL) {
theme = "随机";
}
push_sleep_mode_start_notification(theme, 0);//0小程序直接发起,不是意图识别结果
- g_sleep_mode_active = true;
+ // 标记为开启哄睡(在通知之后设置,作为保护机制)
+ uapi_set_sleep_mode_active(true);
// 等待音频初始化完成后再发送随机故事请求
// 等待音频初始化超时时间:5秒,每100ms检查一次
/* 标记故事结束,供UI状态机使用 */
ln_voice_chat_interrupt("哄睡模式结束");
push_sleep_mode_end_notification();
+ // 标记为结束哄睡(在通知之后清除,作为保护机制)
+ uapi_set_sleep_mode_active(false);
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");
}