From c3a56381de12e94382d1e4c2b8084a0e148ae11d Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Wed, 24 Sep 2025 11:10:24 +0800 Subject: [PATCH] =?utf8?q?=E6=B7=BB=E5=8A=A0=E6=97=A5=E7=A8=8B=E6=8F=90?= =?utf8?q?=E9=86=92at=E6=B5=8B=E8=AF=95=E6=8C=87=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativeui/uiservice/src/ui_service.cpp | 2 +- .../zhihui/leiniao/imsl_ln/leiniao_api_at.c | 61 +++++++++++++++++++ .../zhihui/leiniao/imsl_ln/ln_api_schedule.c | 7 ++- .../leiniao/ln_api_cpp/ln_api_interface.cpp | 5 +- 4 files changed, 67 insertions(+), 8 deletions(-) diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp index 187791100..c1a4d4add 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp @@ -301,7 +301,7 @@ void HandleJumpOtaView(Request *request) void HandScheduleReminderNotify(Request *request) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandleJumpOtaView msg_id = %d",request->msgId); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandScheduleReminderNotify msg_id = %d",request->msgId); int status = *(int *)request->data; } /* -------------------------------------------------------------------------- */ diff --git a/code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c b/code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c index 3c73c4962..967a40887 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c @@ -12,6 +12,7 @@ #include "media_thread_adapt.h" #include "ln_api.h" #include "ln_api_interface.h" +#include "cJSON.h" #define ARRAY_COUNT(array) (sizeof(array) / sizeof(array[0])) #define VAD_MAX_ARGC 8 @@ -1045,6 +1046,65 @@ static uint32_t ln_ui_ota_progress_at(uint8_t *para, uint32_t paraLen, char *str return ERRCODE_SUCC; } + +/* AT^LN_SCHEDULE_REMINDER[=scheduleName,reminderContent] */ +// AT^LN_SCHEDULE_REMINDER +// AT^LN_SCHEDULE_REMINDER=开会提醒 +// AT^LN_SCHEDULE_REMINDER=开会提醒,您有一个会议即将开始 +static uint32_t ln_schedule_reminder_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd) +{ + VAD_UNUSED(strCommonCmd); + const char *defaultName = "日程提醒"; + const char *defaultContent = "您有一个提醒"; + const char *name = defaultName; + const char *content = defaultContent; + + const char *rawId = uapi_ln_get_device_id(); + const char *id = (rawId && rawId[0]) ? rawId : "DEVICE_LOCAL"; + + if (para != NULL && paraLen > 0) { + uint8_t argv[LN_MAX_ARGC][LN_MAX_ARGV_LEN] = {0}; + uint32_t argc = 0; + (void)ConvertCmdToParam(para, paraLen, argv, &argc); + if (argc >= 1) { name = (const char*)argv[0]; } + if (argc >= 2) { content = (const char*)argv[1]; } + } + + /* 在函数内部拼 JSON,避免 AT 长度限制 */ + char *json = (char*)malloc(1024); + if (json == NULL) { + printf("[LN][SCHEDULE_REMINDER] OOM\n"); + return ERRCODE_FAIL; + } + int n = snprintf(json, 1024, + "{\n" + " \"deviceId\": \"%s\",\n" + " \"timestamp\": %u,\n" + " \"messageId\": \"at_msg\",\n" + " \"command\": \"ScheduleReminder\",\n" + " \"data\": {\n" + " \"scheduleId\": %u,\n" + " \"deviceId\": \"%s\",\n" + " \"scheduleName\": \"%s\",\n" + " \"reminderContent\": \"%s\",\n" + " \"reminderAudioUrl\": \"https://example.com/reminder/reminder_001.mp3\",\n" + " \"enableVoice\": 1,\n" + " \"enableVibration\": 1\n" + " }\n" + "}\n", + id,0U, 999U, id, name, content); + if (n <= 0 || n >= 1024) { + free(json); + printf("[LN][SCHEDULE_REMINDER] build json failed\n"); + return ERRCODE_FAIL; + } + + ln_parse_schedule_reminder(json, n); + + free(json); + return ERRCODE_SUCC; +} + static const at_cmd_table_t g_ln_api_cmd[] = { /* ----------------------------------- VAD ---------------------------------- */ {(char *)"AT^VAD_INIT", vad_init, (char *)"初始化 VAD"}, @@ -1095,6 +1155,7 @@ static const at_cmd_table_t g_ln_api_cmd[] = { /* UI相关at */ {(char *)"AT^LN_UI_OTA_STATUS", ln_ui_ota_status_at, (char *)"推送OTA升级状态: AT^LN_UI_OTA_STATUS=0、1、2、3、4"}, {(char *)"AT^LN_UI_OTA_PROGRESS", ln_ui_ota_progress_at, (char *)"推送OTA升级进度: AT^LN_UI_OTA_PROGRESS=100"}, + {(char *)"AT^LN_SCHEDULE_REMINDER", ln_schedule_reminder_at, (char *)"测试解析日程提醒JSON: AT^LN_SCHEDULE_REMINDER[=scheduleName,reminderContent] "}, }; diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_schedule.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_schedule.c index 5b4fe5cd5..0099500fd 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_schedule.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_schedule.c @@ -158,10 +158,11 @@ void ln_parse_schedule_reminder(const char *json_buf, int json_len) WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[JSON_PARSE] vibration:不执行震动\n"); } - // 下载音频并播放 - if (g_schedule_reminder.reminderAudioUrl) + //是否启用语音 + if (g_schedule_reminder.enableVoice) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[JSON_PARSE] download audio:执行下载\n"); + // 目前是立即提醒的所以直接下载并播放 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[JSON_PARSE] download audio:执行下载并播放\n"); } else { diff --git a/code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.cpp b/code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.cpp index 60592dd72..9363f0b88 100644 --- a/code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.cpp +++ b/code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.cpp @@ -64,13 +64,10 @@ void do_restore_factory_setting(void) // 推送日程提醒通知 void push_schedule_reminder_notification(const char *title, const char *content) { - // 打开屏幕,避免通知被遮挡(如需要) - ScreenTurnOn(5); - // 组装简易数据载荷:标题+内容(若 UI 端需要更复杂结构,可定义专用 struct) // 这里直接传两段以'\n'拼接的字符串给 UI,UI 再自行拆分。 char payload[384] = {0}; - printf("title:%s,content%s",title,content); + printf("title:%s,content%s\r\n",title,content); snprintf(payload, sizeof(payload) - 1, "%s\n%s", title, content); SendMsgToUIService(HAND_SCHEDULE_REMINDER_NOTIFY, 0,(void *)payload, (int32_t)strlen(payload)); } -- 2.17.1