添加日程提醒at测试指令 2378/2 2378/head 2380/target/1
authorluozheng <1732036298@qq.com>
Wed, 24 Sep 2025 03:10:24 +0000 (11:10 +0800)
committerluozheng <1732036298@qq.com>
Wed, 24 Sep 2025 03:10:24 +0000 (11:10 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp
code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c
code/sdk/zhihui/leiniao/imsl_ln/ln_api_schedule.c
code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.cpp

index 1877911..c1a4d4a 100644 (file)
@@ -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;
 }
 /* -------------------------------------------------------------------------- */
index 3c73c49..967a408 100644 (file)
@@ -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] "},
 };
 
 
index 5b4fe5c..0099500 100644 (file)
@@ -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
     {
index 60592dd..9363f0b 100644 (file)
@@ -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));
 }