application/wearable/ohos_deps 和application/wearable/service 文件夹1201patch合并提交
authorluozheng <1732036298@qq.com>
Mon, 20 Apr 2026 09:12:15 +0000 (17:12 +0800)
committerluozheng <1732036298@qq.com>
Mon, 20 Apr 2026 09:12:15 +0000 (17:12 +0800)
18 files changed:
code/sdk/application/wearable/n9/service/broadcast/include/broadcast_feature.h
code/sdk/application/wearable/n9/service/device_msg/CMakeLists.txt
code/sdk/application/wearable/n9/service/device_msg/device_msg.cpp
code/sdk/application/wearable/n9/service/device_msg/msg_center_device.cpp
code/sdk/application/wearable/n9/service/device_msg/msg_center_device.h
code/sdk/application/wearable/n9/service/msg_center/brandy-auto-ota-cli/libmsg_center.a
code/sdk/application/wearable/n9/service/msg_center/brandy-auto-ota-ser/libmsg_center.a
code/sdk/application/wearable/n9/service/msg_center/brandy-native-js/libmsg_center.a
code/sdk/application/wearable/n9/service/msg_center/brandy-xts/libmsg_center.a
code/sdk/application/wearable/n9/service/msg_center/include/notify/calendar_notification.h [new file with mode: 0644]
code/sdk/application/wearable/n9/service/msg_center/include/notify/phone_msg_notification.h
code/sdk/application/wearable/n9/service/msg_center/src/common/msg_center_utils.cpp
code/sdk/application/wearable/n9/service/msg_center/src/notify/phone_msg_notification.cpp
code/sdk/application/wearable/n9/service/remote_msg/phone_contacts.cpp [new file with mode: 0644]
code/sdk/application/wearable/n9/service/remote_msg/phone_contacts.h [new file with mode: 0644]
code/sdk/application/wearable/n9/service/remote_msg/remote_msg.cpp
code/sdk/application/wearable/n9/service/remote_msg/remote_msg.h
code/sdk/application/wearable/wearable/ohos_deps/wearable_log.h [new file with mode: 0644]

index 42f1f92..5872c16 100644 (file)
@@ -49,7 +49,7 @@ typedef enum {
     TOPIC_EVENT_HFP_WATCH_TO_PHONE,\r
        TOPIC_EVENT_BLOODOXYGEN_UPDATA,\r
     TOPIC_EVENT_SPORT_DISTANCE,\r
-    TOPIC_EVENT_LOCATION,\r
+    TOPIC_EVENT_CALENDAR_NOTIFY,\r
     TOPIC_EVENT_HFP_HINT,\r
 #ifdef SUPPORT_CYWEE_SERVICE\r
     // TOPIC_EVENT_ACTIVITY_UPDATE,\r
index 972f58f..c3de1d5 100644 (file)
@@ -9,22 +9,26 @@ set(PRIVATE_HEADER
     ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits\r
     ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include\r
     ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/ui/innerkits\r
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/ui/frameworks\r
     ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits\r
     ${ROOT_DIR}/middleware/services/media/foundation/audiomanager/interfaces/kits/audiomanager\r
     ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks\r
     ${ROOT_DIR}/middleware/services/gui/uikit/surface/interfaces/kits\r
     ${ROOT_DIR}/middleware/chips/brandy/nv/include\r
     ${ROOT_DIR}/middleware/chips/brandy/nv/nv_config\r
+    ${ROOT_DIR}/application/wearable/nativeapp/nativeui/include\r
     ${ROOT_DIR}/open_source/openharmony/drivers/peripheral/display/interfaces/include\r
     ${ROOT_DIR}/open_source/openharmony/base/sensors/location/interfaces/kits/include\r
     ${ROOT_DIR}/middleware/utils/dfx/diag/\r
+    ${ROOT_DIR}/open_source/openharmony/third_party/cJSON\r
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/utils/innerkits\r
+    ${ROOT_DIR}/application/wearable/nativeapp/nativeui/\r
 )\r
 \r
 set(SOURCES\r
     ${CMAKE_CURRENT_SOURCE_DIR}/device_msg.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/device_proxy.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/msg_center_device.cpp\r
-    ${CMAKE_CURRENT_SOURCE_DIR}/device_location.cpp\r
 )\r
 \r
 set(COMPONENT_PUBLIC_CCFLAGS\r
index 3f54b45..79f0fc2 100644 (file)
@@ -1,9 +1,9 @@
 /*\r
- * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.\r
- * Description: Breath Ease\r
- * Author: wangle\r
- * Create: 2025-4-23\r
+ * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2025-2025. All rights reserved.\r
+ * Description: Device Msg\r
+ * Create: 2025-06-06\r
  */\r
+\r
 #include "msg_center_protocol.h"\r
 #include "msg_center_cmd.h"\r
 #include "ohos_init.h"\r
@@ -14,8 +14,6 @@
 #include "graphic_timer.h"\r
 #include "broadcast_feature.h"\r
 #include "ohos_timer.h"\r
-#include "heartrate/HeartModel.h"\r
-#include "device_location.h"\r
 #endif\r
 namespace OHOS {\r
 \r
@@ -31,14 +29,7 @@ extern "C" {
 #define HEARTRATE_RANGE 60\r
 static uint8_t g_rotation_publish = 0;\r
 static GraphicTimer *g_publishTestDataHandle = nullptr;\r
-enum publishDataType {\r
-    PUBLISH_SETP = 0,\r
-    PUBLISH_DISTANCE,\r
-    PUBLISH_HEARTRATE,\r
-    PUBLISH_BLOODOXYGEN,\r
-    PUBLISH_TYPE_MAX\r
-};\r
-\r
+enum publishDataType { PUBLISH_SETP = 0, PUBLISH_DISTANCE, PUBLISH_HEARTRATE, PUBLISH_BLOODOXYGEN, PUBLISH_TYPE_MAX };\r
 static void PublishTopicTestDataEvent(uint16_t topic, const void *data, size_t len)\r
 {\r
     int32_t ret;\r
@@ -115,7 +106,7 @@ static void PublishTestDataCallback(void *)
     }\r
 }\r
 \r
-void PublishTestData()\r
+static void PublishTestData()\r
 {\r
     uint32 tick = GetOSTick(5000);  // 5秒发布一次测试数据\r
     if (g_publishTestDataHandle == nullptr) {\r
@@ -141,28 +132,24 @@ static const msg_center_cmd_map_t g_msg_center_device_tbl[] = {
     {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_GET_STORAGE_INFO, msg_center_get_storage_info},\r
     {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_GET_PRODUCT_INFO, msg_center_get_product_info},\r
     {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_GET_LANGUAGE_ID, msg_center_get_language_id},\r
-    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_GET_VOLUME_INFO, msg_center_get_volume_info},\r
     {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SET_LANGUAGE_ID, msg_center_set_language_id},\r
-    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SET_VOLUME_INFO, msg_center_set_volume_info},\r
     {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_DEVICE_HEARTRATE, msg_center_device_heartrate},\r
     {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_DEVICE_STEPDATA, msg_center_device_stepdata},\r
     {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_DEVICE_BLOODOXYGEN, msg_center_device_bloodoxygen},\r
     {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_OFFLINE_LOG_SWITCH, msg_center_offline_log_switch},\r
-    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_LOCATION_GET_INFO, msg_center_location_get_info},\r
-    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_LOCATION_START, msg_center_location_start},\r
-    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_LOCATION_STOP, msg_center_location_stop},\r
     {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SPORT_ACTION, msg_center_sport_action},\r
-    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SPORT_GET_DATA, msg_center_sport_get_data},\r
-    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SPORT_REPORT_DATA, msg_center_sport_report_data},\r
+    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SPORT_GET_RECORD, msg_center_sport_get_record},\r
 #if (CONFIG_ONLINE_LOG == 1)\r
     {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SET_ONLINELOG_CHANNEL, msg_center_set_online_log_channel},\r
     {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SET_ONLINELOG_LEVEL, msg_center_set_online_log_level},\r
 #endif\r
     {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_OTA_INIT, msg_center_ota_init},\r
     {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_OTA_UPDATE, msg_center_ota_update},\r
-    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_OFF_FIND_PHONE, msg_center_device_findphone},\r
-    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_CAMERA_WATCH_EXIT, msg_center_camera_exit},\r
-    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_CAMERA_CONNECT_PHONE_SUCCESS, msg_center_camera_online},\r
+    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_STOP_FIND_PHONE, msg_center_device_findphone},\r
+    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_WATCH_EXIT_CAMERA, msg_center_camera_exit},\r
+    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_CAMERA_CONNECTED_PHONE, msg_center_camera_online},\r
+    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SYNC_WEATHER_REC, msg_center_device_sync_weather_rec},\r
+    {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SYNC_DATE_REC, msg_center_device_sync_date_rec},\r
 };\r
 \r
 errcode_t msg_center_device_type_dispatch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
@@ -182,6 +169,9 @@ errcode_t msg_center_device_type_dispatch(uint8_t cmd_id, uint8_t type, void *us
 void device_init(void)\r
 {\r
     msg_center_register_cmd(MSGCENTER_CMD_DEVICE, msg_center_device_type_dispatch);\r
+#ifdef PUBLISH_TEST_DATA\r
+    PublishTestData();\r
+#endif\r
 }\r
 \r
 APP_FEATURE_INIT_PRI(device_init, LAYER_INIT_LEVEL_4);\r
index 5ef6fe6..80255a3 100644 (file)
@@ -1,19 +1,21 @@
 /*\r
- * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.\r
- * Description: Breath Ease\r
- * Author: wangle\r
- * Create: 2025-4-23\r
+ * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2025-2025. All rights reserved.\r
+ * Description: MsgCenter Device\r
+ * Create: 2025-06-06\r
  */\r
-#include "msg_center_protocol.h"\r
+\r
 #include "msg_center_device.h"\r
+#include "msg_center_protocol.h"\r
 #include "device_proxy.h"\r
 #include "wearable_log.h"\r
-#include "device_location.h"\r
 #include "AppViewIDs.h"\r
 #include "NativeAbility.h"\r
-// #include "sports/SportsModel.h"\r
-// #include "findphone/FindPhoneMainPage.h"\r
-// #include "camera/CameraMainPage.h"\r
+#include "sport/SportView.h"\r
+#include "sport/SportModel.h"\r
+#include "findphone/FindPhoneMainPage.h"\r
+#include "camera/CameraMainPage.h"\r
+#include "weather/WeatherMainPage.h"\r
+#include "date/DateMainPage.h"\r
 \r
 #ifdef __cplusplus\r
 extern "C" {\r
@@ -22,10 +24,9 @@ extern "C" {
 #include "diag_ind_src.h"\r
 \r
 uint8_t g_bloodoxygen = 0;\r
-uint16_t g_heartrate = 0;\r
+uint8_t g_heartrate = 0;\r
 uint32_t g_stepdata = 0;\r
 uint32_t g_distance = 0;\r
-extern LocationInfo_t g_locationInfo;\r
 // 获取电量\r
 errcode_t msg_center_get_battery_level(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
 {\r
@@ -100,29 +101,6 @@ errcode_t msg_center_get_language_id(uint8_t cmd_id, uint8_t type, void *usr_dat
     }\r
     return ERRCODE_SUCC;\r
 }\r
-// 获取音量\r
-errcode_t msg_center_get_volume_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
-{\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "get_volume_info");\r
-    uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data);\r
-    void *v_data = msg_center_get_tlv_payload(usr_data);\r
-    uint8_t v_len = usr_len - tl_len;\r
-\r
-    uint8_t vol_type = 0;\r
-    if (v_len == sizeof(uint8_t)) {\r
-        vol_type = *(uint8_t *)v_data;\r
-    }\r
-\r
-    std::vector<OHOS::volume_info> vol_info;\r
-    OHOS::device_proxy::get_volume_info(vol_type, vol_info);\r
-\r
-    errcode_t ret = msg_center_send_data(cmd_id, type, &vol_info[0], vol_info.size() * sizeof(OHOS::volume_info));\r
-    if (ret != ERRCODE_SUCC) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send get_volume_info_ack fail, ret = %d", ret);\r
-        return ERRCODE_FAIL;\r
-    }\r
-    return ERRCODE_SUCC;\r
-}\r
 // 设置语言\r
 errcode_t msg_center_set_language_id(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
 {\r
@@ -147,30 +125,6 @@ errcode_t msg_center_set_language_id(uint8_t cmd_id, uint8_t type, void *usr_dat
     }\r
     return ERRCODE_SUCC;\r
 }\r
-// 设置音量\r
-errcode_t msg_center_set_volume_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
-{\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "set_volume_info");\r
-    uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data);\r
-    void *v_data = msg_center_get_tlv_payload(usr_data);\r
-    uint8_t v_len = usr_len - tl_len;\r
-\r
-    OHOS::volume_info info;\r
-    if (v_len != sizeof(OHOS::volume_info)) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "v_len check error, v_len=%u, need=%u", v_len, sizeof(uint8_t));\r
-        return ERRCODE_FAIL;\r
-    }\r
-\r
-    memcpy_s(&info, sizeof(OHOS::volume_info), v_data, v_len);\r
-    OHOS::device_proxy::set_volume_info(info);\r
-\r
-    errcode_t ret = msg_center_send_data(cmd_id, type, &info, sizeof(OHOS::volume_info));\r
-    if (ret != ERRCODE_SUCC) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send set_volume_info_ack fail, ret = %d", ret);\r
-        return ERRCODE_FAIL;\r
-    }\r
-    return ERRCODE_SUCC;\r
-}\r
 // ota初始化\r
 errcode_t msg_center_ota_init(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
 {\r
@@ -218,7 +172,7 @@ errcode_t msg_center_ota_update(uint8_t cmd_id, uint8_t type, void *usr_data, ui
         return ERRCODE_FAIL;\r
     }\r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send ret = %d", ret);\r
-    OHOS::device_proxy::call_ui_ota_update();    \r
+    OHOS::device_proxy::call_ui_ota_update();\r
 \r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send ui over");\r
     return ERRCODE_SUCC;\r
@@ -274,89 +228,6 @@ errcode_t msg_center_device_bloodoxygen(uint8_t cmd_id, uint8_t type, void *usr_
 \r
     return ERRCODE_SUCC;\r
 }\r
-\r
-/* LOCATION */\r
-errcode_t msg_center_location_get_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
-{\r
-    uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data);\r
-    uint16_t payload_len = usr_len - tl_len;\r
-    uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data);\r
-    errcode_t ret = ERRCODE_SUCC;\r
-\r
-    ret = msg_center_send_data(cmd_id, type, &g_locationInfo, sizeof(g_locationInfo));\r
-    if (ret != ERRCODE_SUCC) {\r
-        return ERRCODE_FAIL;\r
-    }\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_get_info latitude_:%d,longitude_:%d\n",\r
-                  g_locationInfo.latitude_, g_locationInfo.longitude_);\r
-    /* notify UI or call UI load */\r
-\r
-    return ERRCODE_SUCC;\r
-}\r
-\r
-errcode_t msg_center_location_start(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
-{\r
-    uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data);\r
-    uint16_t payload_len = usr_len - tl_len;\r
-    uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data);\r
-    errcode_t ret = ERRCODE_SUCC;\r
-    uint8_t ack = 1;\r
-\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_start finish\r\n");\r
-    ret = deviceLocationStartLocating();\r
-    if (ret != ERRCODE_SUCC) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_start fail\r\n");\r
-        ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack));\r
-        if (ret != ERRCODE_SUCC) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_start send msg fail\r\n");\r
-            return ERRCODE_FAIL;\r
-        }\r
-    } else {\r
-        ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack));\r
-        if (ret != ERRCODE_SUCC) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_start send msg fail\r\n");\r
-            return ERRCODE_FAIL;\r
-        }\r
-    }\r
-\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_start finish\r\n");\r
-    /* notify UI or call UI load */\r
-\r
-    return ERRCODE_SUCC;\r
-}\r
-\r
-errcode_t msg_center_location_stop(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
-{\r
-    uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data);\r
-    uint16_t payload_len = usr_len - tl_len;\r
-    uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data);\r
-    errcode_t ret = ERRCODE_SUCC;\r
-    uint8_t ack = 1;\r
-\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_stop\r\n");\r
-    ret = deviceLocationStopLocating();\r
-    ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack));\r
-    if (ret != ERRCODE_SUCC) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_stop fail\r\n");\r
-        ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack));\r
-        if (ret != ERRCODE_SUCC) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_stop send msg fail\r\n");\r
-            return ERRCODE_FAIL;\r
-        }\r
-    } else {\r
-        ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack));\r
-        if (ret != ERRCODE_SUCC) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_stop send msg fail\r\n");\r
-            return ERRCODE_FAIL;\r
-        }\r
-    }\r
-\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_stop\r\n");\r
-    /* notify UI or call UI load */\r
-\r
-    return ERRCODE_SUCC;\r
-}\r
-\r
 /* SPORT */\r
 errcode_t msg_center_sport_action(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
 {\r
@@ -365,82 +236,100 @@ errcode_t msg_center_sport_action(uint8_t cmd_id, uint8_t type, void *usr_data,
     uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data);\r
     errcode_t ret = ERRCODE_SUCC;\r
     uint8_t ack = 1;\r
-    sport_action_t action = (sport_action_t)*tlv_payload;\r
-\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_action : %d\r\n", action);\r
-\r
-    #ifdef FD230_650_0723\r
-    switch (action) {\r
-        case SPORT_ACTION_START:\r
-            OHOS::NativeAbility::GetInstance().ChangeSlice(VIEW_SPORTS);\r
-            OHOS::SportsModel::GetInstance()->ResetSportsData();\r
-            if (!OHOS::SportsModel::GetInstance()->StartSportsTimer()) {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_start StartSportsTimer failed\r\n");\r
-                ret = ERRCODE_FAIL;\r
-            }\r
+    OHOS::sport_control_t *sport = (OHOS::sport_control_t *)tlv_payload;\r
+\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_action=%d, type=%d", sport->action, sport->type);\r
+\r
+    switch (sport->action) {\r
+        case OHOS::SPORT_ACTION_START:\r
+            OHOS::SportModel::GetInstance().SetSportType(static_cast<OHOS::SportType>(sport->type));\r
+            OHOS::SportModel::GetInstance().StartSport(false);\r
+            OHOS::NativeAbility::GetInstance().SwitchSlice(VIEW_SPORT, OHOS::SportPages::SPORT_PAGE_DATA);\r
             break;\r
-        case SPORT_ACTION_PAUSE:\r
-            OHOS::SportsModel::GetInstance()->StopSportsTimer(false);\r
+        case OHOS::SPORT_ACTION_PAUSE:\r
+            OHOS::SportModel::GetInstance().PauseAndReport(false);\r
+            OHOS::NativeAbility::GetInstance().SwitchSlice(VIEW_SPORT, OHOS::SportPages::SPORT_PAGE_PAUSE);\r
             break;\r
-        case SPORT_ACTION_RESUME:\r
-            if (!OHOS::SportsModel::GetInstance()->StartSportsTimer()) {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_resume StartSportsTimer failed\r\n");\r
-                ret = ERRCODE_FAIL;\r
-            }\r
+        case OHOS::SPORT_ACTION_RESUME:\r
+            OHOS::SportModel::GetInstance().ResumeAndReport(false);\r
+            OHOS::NativeAbility::GetInstance().SwitchSlice(VIEW_SPORT, OHOS::SportPages::SPORT_PAGE_DATA);\r
             break;\r
-        case SPORT_ACTION_STOP:\r
-            OHOS::SportsModel::GetInstance()->StopSportsTimer(false);\r
-            OHOS::NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);\r
+        case OHOS::SPORT_ACTION_STOP:\r
+            OHOS::SportModel::GetInstance().StopAndReport(false);\r
+            OHOS::NativeAbility::GetInstance().SwitchSlice(VIEW_SPORT, OHOS::SportPages::SPORT_PAGE_MENU);\r
             break;\r
         default:\r
             ret = ERRCODE_FAIL;\r
             break;\r
     }\r
-    #endif\r
 \r
     ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack));\r
     if (ret != ERRCODE_SUCC) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_resume send data failed\r\n");\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_action send data failed\r\n");\r
         return ERRCODE_FAIL;\r
     }\r
     return ERRCODE_SUCC;\r
 }\r
 \r
-errcode_t msg_center_sport_get_data(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
+errcode_t msg_center_sport_get_record(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
 {\r
     uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data);\r
     uint16_t payload_len = usr_len - tl_len;\r
     uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data);\r
     errcode_t ret = ERRCODE_SUCC;\r
 \r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_get_data\r\n");\r
-    #ifdef FD230_650_0723\r
-    OHOS::sport_data_t *sportData = OHOS::SportsModel::GetInstance()->GetSportsData();\r
-    ret = msg_center_send_data(cmd_id, type, sportData, sizeof(OHOS::sport_data_t));\r
-    if (ret != ERRCODE_SUCC) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_get_data end data failed\r\n");\r
+    auto record = OHOS::SportModel::GetInstance().GetRecord();\r
+    uint16_t num = record.size();\r
+    uint16_t size = sizeof(uint16_t) + num * sizeof(OHOS::sport_data_t);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_get_record record num=%d, malloc szie=%d\r\n", num,\r
+                  size);\r
+    uint8_t *data = (uint8_t *)malloc(size);\r
+    if (data == nullptr) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_get_record malloc data failed\r\n");\r
         return ERRCODE_FAIL;\r
     }\r
-    #endif\r
-    return ERRCODE_SUCC;\r
-}\r
+    uint8_t *data_addr = data;\r
+\r
+    memcpy_s(data, sizeof(uint16_t), &num, sizeof(uint16_t));\r
+    data += sizeof(uint16_t);\r
+\r
+    for (int i = 0; i < num; i++) {\r
+        memcpy_s(data, sizeof(OHOS::sport_data_t), &record[i], sizeof(OHOS::sport_data_t));\r
+        data += sizeof(OHOS::sport_data_t);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "========record[%d]=============", i);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "type:%d", record[i].type);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "heartRate:%d", record[i].heartRate);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "calorie:%d", record[i].calorie);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "altitude:%d", record[i].altitude);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "ascent:%d", record[i].ascent);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "descent:%d", record[i].descent);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "distance:%d", record[i].distance);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "lap:%d", record[i].lap);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "startTime:%d", record[i].startTime);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "endTime:%d", record[i].endTime);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "elapsedTime:%d", record[i].elapsedTime);\r
+    }\r
 \r
-errcode_t msg_center_sport_report_data(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
-{\r
+    ret = msg_center_send_data(cmd_id, type, data_addr, size);\r
+    free(data_addr);\r
+    if (ret != ERRCODE_SUCC) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_get_record send data failed\r\n");\r
+        return ERRCODE_FAIL;\r
+    }\r
+    OHOS::SportModel::GetInstance().ClearRecord();\r
     return ERRCODE_SUCC;\r
 }\r
 \r
 errcode_t msg_center_camera_exit(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "recv exit camera from phone");\r
-    OHOS::NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);\r
+    OHOS::NativeAbility::GetInstance().ChangeSliceToApplist();\r
     return ERRCODE_SUCC;\r
 }\r
 \r
 errcode_t msg_center_camera_online(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "recv connect success from phone");\r
-    #ifdef FD230_650_0723\r
     if (OHOS::CameraMainPage::GetInstance() != nullptr) {\r
         OHOS::CameraMainPage::GetInstance()->Refresh_page();\r
         return ERRCODE_SUCC;\r
@@ -448,8 +337,6 @@ errcode_t msg_center_camera_online(uint8_t cmd_id, uint8_t type, void *usr_data,
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "CameraMainPage not exist\r\n");\r
         return ERRCODE_FAIL;\r
     }\r
-    #endif\r
-    return ERRCODE_SUCC;\r
 }\r
 \r
 errcode_t msg_center_offline_log_switch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
@@ -508,22 +395,38 @@ errcode_t msg_center_set_online_log_level(uint8_t cmd_id, uint8_t type, void *us
 \r
 errcode_t msg_center_device_findphone(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
 {\r
-    uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data);\r
-    uint16_t payload_len = usr_len - tl_len;\r
-    uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data);\r
     bool ret = true;\r
-    #ifdef FD230_650_0723\r
-    if ( OHOS::FindPhoneMainPage::GetInstance() != nullptr) {\r
+    if (OHOS::FindPhoneMainPage::GetInstance() != nullptr) {\r
         ret = OHOS::FindPhoneMainPage::GetInstance()->StopFindPhone();\r
     } else {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "FindphonePage not exist\r\n");\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "FindphonePage not exist\r\n");\r
     }\r
     if (!ret) {\r
         return ERRCODE_FAIL;\r
     }\r
-    #endif\r
     return ERRCODE_SUCC;\r
 }\r
+\r
+errcode_t msg_center_device_sync_weather_rec(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
+{\r
+    if (OHOS::WeatherMainPage::GetInstance() != nullptr) {\r
+        OHOS::WeatherMainPage::GetInstance()->ReloadPage();\r
+    } else {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "WeatherMainPage not exist\r\n");\r
+    }\r
+    return ERRCODE_SUCC;\r
+}\r
+\r
+errcode_t msg_center_device_sync_date_rec(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
+{\r
+    if (OHOS::DateMainPage::GetInstance() != nullptr) {\r
+        OHOS::DateMainPage::GetInstance()->ReloadPage();\r
+    } else {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "DateMainPage not exist\r\n");\r
+    }\r
+    return ERRCODE_SUCC;\r
+}\r
+\r
 #ifdef __cplusplus\r
 }\r
 #endif
\ No newline at end of file
index 02f3c25..57a66e4 100644 (file)
@@ -1,9 +1,9 @@
 /*\r
- * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.\r
- * Description: Breath Ease\r
- * Author: wangle\r
- * Create: 2025-4-23\r
+ * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2025-2025. All rights reserved.\r
+ * Description: MsgCenter Device\r
+ * Create: 2025-06-06\r
  */\r
+\r
 #ifndef MSG_CENTER_DEVICE_H\r
 #define MSG_CENTER_DEVICE_H\r
 \r
 extern "C" {\r
 #endif\r
 \r
-typedef enum sport_action {\r
-    SPORT_ACTION_START = 1,\r
-    SPORT_ACTION_PAUSE = 2,\r
-    SPORT_ACTION_RESUME = 3,\r
-    SPORT_ACTION_STOP = 4,\r
-} sport_action_t;\r
-\r
 typedef enum msg_center_device_type_id {\r
-    MSGCENTER_TYPE_ID_GET_BATTERY_LEVEL = 0x1,\r
-    MSGCENTER_TYPE_ID_GET_STORAGE_INFO = 0x2,\r
-    MSGCENTER_TYPE_ID_GET_PRODUCT_INFO = 0x3,\r
-    MSGCENTER_TYPE_ID_GET_LANGUAGE_ID = 0x4,\r
-    MSGCENTER_TYPE_ID_GET_VOLUME_INFO = 0x5,\r
-    MSGCENTER_TYPE_ID_SET_LANGUAGE_ID = 0x6,\r
-    MSGCENTER_TYPE_ID_SET_VOLUME_INFO = 0x7,\r
-    MSGCENTER_TYPE_ID_DEVICE_HEARTRATE = 0x8,\r
-    MSGCENTER_TYPE_ID_DEVICE_STEPDATA = 0x9,\r
-    MSGCENTER_TYPE_ID_DEVICE_BLOODOXYGEN = 0xa,\r
-    MSGCENTER_TYPE_ID_OFFLINE_LOG_SWITCH = 0xb,\r
-    MSGCENTER_TYPE_ID_LOCATION_GET_INFO = 0x20,\r
-    MSGCENTER_TYPE_ID_LOCATION_START = 0x21,\r
-    MSGCENTER_TYPE_ID_LOCATION_STOP = 0x22,\r
-    MSGCENTER_TYPE_ID_LOCATION_REPORT = 0x23,\r
-    MSGCENTER_TYPE_ID_SPORT_ACTION = 0x27,\r
-    MSGCENTER_TYPE_ID_SPORT_GET_DATA = 0x28,\r
-    MSGCENTER_TYPE_ID_SPORT_REPORT_DATA = 0x29,\r
-    MSGCENTER_TYPE_ID_SET_ONLINELOG_CHANNEL = 0x30,\r
-    MSGCENTER_TYPE_ID_SET_ONLINELOG_LEVEL = 0x31,\r
-    MSGCENTER_TYPE_ID_ONLINELOG_REPORT = 0x33,\r
-    MSGCENTER_TYPE_ID_OTA_INIT = 0x34,\r
-    MSGCENTER_TYPE_ID_OTA_UPDATE = 0x35,\r
-    MSGCENTER_TYPE_ID_ON_FIND_PHONE = 0x36,\r
-    MSGCENTER_TYPE_ID_OFF_FIND_PHONE = 0x37,\r
-    MSGCENTER_TYPE_ID_SLEEP_DATA = 0x38,\r
-    MSGCENTER_TYPE_ID_ON_CAMERA = 0x39,\r
-    MSGCENTER_TYPE_ID_CAMERA_WATCH_EXIT = 0x40,\r
-    MSGCENTER_TYPE_ID_CAMERA_PHONE_EXIT = 0x41,\r
-    MSGCENTER_TYPE_ID_CAMERA_CONNECT_PHONE = 0x42,\r
-    MSGCENTER_TYPE_ID_CAMERA_CONNECT_PHONE_SUCCESS = 0x43,\r
+    MSGCENTER_TYPE_ID_GET_BATTERY_LEVEL = 0x01,\r
+    MSGCENTER_TYPE_ID_GET_STORAGE_INFO = 0x02,\r
+    MSGCENTER_TYPE_ID_GET_PRODUCT_INFO = 0x03,\r
+    MSGCENTER_TYPE_ID_GET_LANGUAGE_ID = 0x04,\r
+    MSGCENTER_TYPE_ID_SET_LANGUAGE_ID = 0x05,\r
+    MSGCENTER_TYPE_ID_DEVICE_HEARTRATE = 0x06,\r
+    MSGCENTER_TYPE_ID_DEVICE_STEPDATA = 0x07,\r
+    MSGCENTER_TYPE_ID_DEVICE_BLOODOXYGEN = 0x08,\r
+    MSGCENTER_TYPE_ID_SPORT_ACTION = 0x09,\r
+    MSGCENTER_TYPE_ID_SPORT_REPORT_ACTION = 0x0a,\r
+    MSGCENTER_TYPE_ID_SPORT_REPORT_DATA = 0x0b,\r
+    MSGCENTER_TYPE_ID_SPORT_GET_RECORD = 0x0c,\r
+    MSGCENTER_TYPE_ID_SET_ONLINELOG_CHANNEL = 0x0d,\r
+    MSGCENTER_TYPE_ID_SET_ONLINELOG_LEVEL = 0x0e,\r
+    MSGCENTER_TYPE_ID_OFFLINE_LOG_SWITCH = 0x0f,\r
+    MSGCENTER_TYPE_ID_ONLINELOG_REPORT = 0x10,\r
+    MSGCENTER_TYPE_ID_START_FIND_PHONE = 0x11,\r
+    MSGCENTER_TYPE_ID_STOP_FIND_PHONE = 0x12,\r
+    MSGCENTER_TYPE_ID_SLEEP_DATA = 0x13,\r
+    MSGCENTER_TYPE_ID_ON_CAMERA = 0x14,\r
+    MSGCENTER_TYPE_ID_WATCH_EXIT_CAMERA = 0x15,\r
+    MSGCENTER_TYPE_ID_PHONE_EXIT_CAMERA = 0x16,\r
+    MSGCENTER_TYPE_ID_CAMERA_CONNECTING_PHONE = 0x17,\r
+    MSGCENTER_TYPE_ID_CAMERA_CONNECTED_PHONE = 0x18,\r
+    MSGCENTER_TYPE_ID_OTA_INIT = 0x19,\r
+    MSGCENTER_TYPE_ID_OTA_UPDATE = 0x1a,\r
+    MSGCENTER_TYPE_ID_SYNC_WEATHER_REQ = 0x1b,\r
+    MSGCENTER_TYPE_ID_SYNC_WEATHER_REC = 0x1c,\r
+    MSGCENTER_TYPE_ID_SYNC_DATE_REQ = 0x1d,\r
+    MSGCENTER_TYPE_ID_SYNC_DATE_REC = 0x1e,\r
 } msg_center_device_type_id_t;\r
 \r
 // 获取电量\r
@@ -63,12 +55,8 @@ errcode_t msg_center_get_storage_info(uint8_t cmd_id, uint8_t type, void *usr_da
 errcode_t msg_center_get_product_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
 // 获取语言\r
 errcode_t msg_center_get_language_id(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
-// 获取音量\r
-errcode_t msg_center_get_volume_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
 // 设置语言\r
 errcode_t msg_center_set_language_id(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
-// 设置音量\r
-errcode_t msg_center_set_volume_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
 // ota初始化\r
 errcode_t msg_center_ota_init(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
 // ota检测和本地升级\r
@@ -78,15 +66,9 @@ errcode_t msg_center_device_heartrate(uint8_t cmd_id, uint8_t type, void *usr_da
 errcode_t msg_center_device_stepdata(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
 errcode_t msg_center_device_bloodoxygen(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
 \r
-/* LOCATION */\r
-errcode_t msg_center_location_get_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
-errcode_t msg_center_location_start(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
-errcode_t msg_center_location_stop(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
-\r
 /* SPORT */\r
 errcode_t msg_center_sport_action(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
-errcode_t msg_center_sport_get_data(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
-errcode_t msg_center_sport_report_data(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
+errcode_t msg_center_sport_get_record(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
 \r
 /* 离线日志开关 */\r
 errcode_t msg_center_offline_log_switch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
@@ -94,6 +76,12 @@ errcode_t msg_center_offline_log_switch(uint8_t cmd_id, uint8_t type, void *usr_
 /* 查找手机 */\r
 errcode_t msg_center_device_findphone(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
 \r
+/* 天气 */\r
+errcode_t msg_center_device_sync_weather_rec(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
+\r
+/* 日历 */\r
+errcode_t msg_center_device_sync_date_rec(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
+\r
 /* CAMERA */\r
 errcode_t msg_center_camera_exit(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
 errcode_t msg_center_camera_online(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
index c6b588a..f787fb8 100644 (file)
Binary files a/code/sdk/application/wearable/n9/service/msg_center/brandy-auto-ota-cli/libmsg_center.a and b/code/sdk/application/wearable/n9/service/msg_center/brandy-auto-ota-cli/libmsg_center.a differ
index 19e2cb5..59d450a 100644 (file)
Binary files a/code/sdk/application/wearable/n9/service/msg_center/brandy-auto-ota-ser/libmsg_center.a and b/code/sdk/application/wearable/n9/service/msg_center/brandy-auto-ota-ser/libmsg_center.a differ
index b1e105a..7e69f1c 100644 (file)
Binary files a/code/sdk/application/wearable/n9/service/msg_center/brandy-native-js/libmsg_center.a and b/code/sdk/application/wearable/n9/service/msg_center/brandy-native-js/libmsg_center.a differ
index 7f842a9..26ab44f 100644 (file)
Binary files a/code/sdk/application/wearable/n9/service/msg_center/brandy-xts/libmsg_center.a and b/code/sdk/application/wearable/n9/service/msg_center/brandy-xts/libmsg_center.a differ
diff --git a/code/sdk/application/wearable/n9/service/msg_center/include/notify/calendar_notification.h b/code/sdk/application/wearable/n9/service/msg_center/include/notify/calendar_notification.h
new file mode 100644 (file)
index 0000000..4f341bb
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) CompanyNameMagicTag 2025-2025. All rights reserved.
+ * Description: calendar notification api
+ * Author: CompanyName
+ * Create: 2025-10-23
+ */
+ 
+#ifndef CALENDAR_NOTIFICATION_H
+#define CALENDAR_NOTIFICATION_H
+ 
+static constexpr const char* CALENDAR_IMAGE_DELETE = "calendar_delete";
+static constexpr const char* CALENDAR_IMAGE_CLOCK = "calendar_clock";
+static constexpr const char* CALENDAR_VIEW_CLOSE = "calendar_close";
+static constexpr const char* CALENDAR_VIEW_DELAY = "calendar_delay";
+static constexpr const char* CALENDAR_VIEW_POPUP = "calendar_popup";
+ 
+enum class CalendarTimerType {
+    NOTIFY_CALENDAR_CLOSE = 0,
+    NOTIFY_CALENDAR_DELAY = 1,
+    NOTIFY_CALENDAR_RING = 2,
+    NOTIFY_CALENDAR_UNKNOWN = 10,
+};
+ 
+typedef struct {
+    int id;
+    int type;
+    int64_t startTime;
+    int64_t endTime;
+    bool isAllDay;
+    bool hasReminder;
+    bool isRepeat;
+    int64_t recurrenceFrequency;
+    char bundlename[64]; // 外部传入字符串,内部不负责释放
+    char eventContent[256];
+} CalendarEvent;
+ 
+ 
+namespace OHOS {
+UIViewGroup* CreateCalendarView(CalendarEvent *event);
+void FreeCalendarView(void);
+ 
+class CalendarViewEventListener : public OHOS::UIView::OnClickListener,
+                               public OHOS::UIView::OnLongPressListener,
+                               public OHOS::UIView::OnTouchListener,
+                               public OHOS::UIView::OnDragListener {
+public:
+    CalendarViewEventListener();
+    virtual ~CalendarViewEventListener();
+    static CalendarViewEventListener *GetInstance(void);
+    bool OnDrag(UIView& view, const DragEvent& event) override;
+    bool OnDragEnd(OHOS::UIView& view, const OHOS::DragEvent& event) override;
+    bool OnClick(OHOS::UIView& view, const OHOS::ClickEvent& event) override;
+    bool OnPress(OHOS::UIView& view, const OHOS::PressEvent& event) override
+    {
+        return true;
+    }
+    bool OnLongPress(OHOS::UIView& view, const OHOS::LongPressEvent& event) override
+    {
+        return true;
+    }
+    bool OnRelease(OHOS::UIView& view, const OHOS::ReleaseEvent& event) override
+    {
+        return true;
+    }
+ 
+    bool OnDragStart(OHOS::UIView& view, const OHOS::DragEvent& event) override
+    {
+        return true;
+    }
+};
+}; // namespace OHOS
+ 
+#endif /* CALENDAR_NOTIFICATION_H */
\ No newline at end of file
index 735c01e..8a4a341 100644 (file)
@@ -1,19 +1,21 @@
 /*\r
  * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.\r
- * Description: phone message notification \r
- * Author: \r
+ * Description: phone message notification\r
+ * Author:\r
  * Create: 2025-04-25\r
  */\r
 \r
 #ifndef PHONE_MSG_NOTIFICATION_H\r
 #define PHONE_MSG_NOTIFICATION_H\r
 \r
+#include <unordered_map>\r
 #include "components/ui_view_group.h"\r
 #include "components/ui_view_group.h"\r
 #include "components/ui_label.h"\r
+#include "components/ui_image_view.h"\r
 #include "components/ui_label_button_ext.h"\r
+#include "components/ui_scroll_view.h"\r
 #include "graphic_timer.h"\r
-#include <unordered_map>\r
 \r
 struct PhoneMsg {\r
     std::string appName;\r
@@ -29,11 +31,14 @@ public:
     static void UpDatePhoneMsg(std::string appName, std::string titile, std::string content);\r
     static void StartPhoneMsgTimer(int32_t interval);\r
     static void DisablePhoneMsgTimer();\r
+    static void ShowDateMsg(std::string appName, std::string title, std::string content);\r
+    static void SetControl();\r
     static const uint32_t notifyTime = 5000;\r
 \r
 private:\r
-    static UIViewGroup *phoneMsgView_;\r
+    static UIScrollView *phoneMsgView_;\r
     static UILabel *appNameLabel_;\r
+    static UIImageView *appIcon_;\r
     static UILabel *titleLabel_;\r
     static UILabel *contentLabel_;\r
     static GraphicTimer *phoneMsgNotifyStop_;\r
index 56f8f9e..6647df9 100644 (file)
@@ -14,6 +14,7 @@
 #include "element_name.h"
 #include "abilityms_slite_client.h"
 #include <string.h>
+#include "appexecfwk_errors.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -64,12 +65,15 @@ errcode_t msg_center_install_js_app(char *bundleName)
 
 bool msg_center_is_js_app_install(char *bundleName)
 {
-    InstallState installState;
-    uint8_t installProcess;
-    OHOS::BundleMsClient::GetInstance().GetInstallState(bundleName, &installState, &installProcess);
-    if (installState == BUNDLE_INSTALL_OK) {
+    if (bundleName == nullptr) {
+        return false;
+    }
+    BundleInfo bundleInfo;
+    uint8_t ret = OHOS::BundleMsClient::GetInstance().GetBundleInfo(bundleName, false, &bundleInfo);
+    if (ret == ERR_OK) {
         return true;
     }
+    
     return false;
 }
 
index 73000e3..9000a1d 100644 (file)
@@ -8,42 +8,46 @@
 #include "ohos_timer.h"\r
 #include "wearable_log.h"\r
 #include <string>\r
-#include "message/include/MessageModel.h"\r
+#include "main/MessageModel.h"\r
+#include "ui_resource_message.h"\r
+#include "common/image_cache_manager.h"\r
+#include "main/LoadImg.h"\r
 \r
 namespace OHOS {\r
 // 三方应用名\r
-static const uint32_t APP_NAME_POS_X = 180;\r
-static const uint32_t APP_NAME_POS_Y = 82;\r
-static const uint32_t APP_NAME_WIDTH = 200;\r
-static const uint32_t APP_NAME_HEIGHT = 60;\r
+static const uint32_t APP_NAME_POS_X = 170;\r
+static const uint32_t APP_NAME_POS_Y = 40;\r
+static const uint32_t APP_NAME_WIDTH = 160;\r
+static const uint32_t APP_NAME_HEIGHT = 53;\r
 // 三方消息主题\r
-static const uint32_t MSG_TITLE_POS_X = 81;\r
-static const uint32_t MSG_TITLE_POS_Y = 122;\r
-static const uint32_t MSG_TITLE_WIDTH = 409;\r
-static const uint32_t MSG_TITLE_HEIGHT = 83;\r
+static const uint32_t MSG_TITLE_POS_X = 15;\r
+static const uint32_t MSG_TITLE_POS_Y = 138;\r
+static const uint32_t MSG_TITLE_WIDTH = 370;\r
+static const uint32_t MSG_TITLE_HEIGHT = 50;\r
 // 三方消息内容\r
-static const uint32_t MSG_CONTENT_POS_X = 78;\r
-static const uint32_t MSG_CONTENT_POS_Y = 176;\r
-static const uint32_t MSG_CONTENT_WIDTH = 457;\r
-static const uint32_t MSG_CONTENT_HEIGHT = 269;\r
-// 取消通知\r
-static const uint32_t CANCEL_BUTTON_POS_X = 150;\r
-static const uint32_t CANCEL_BUTTON_POS_Y = 323;\r
-static const uint32_t CANCEL_BUTTON_WIDTH = 165;\r
-static const uint32_t CANCEL_BUTTON_HEIGHT = 44;\r
+static const uint32_t MSG_CONTENT_POS_X = 15;\r
+static const uint32_t MSG_CONTENT_POS_Y = 201;\r
+static const uint32_t MSG_CONTENT_WIDTH = 370;\r
+static const uint32_t MSG_CONTENT_HEIGHT = 200;\r
+// 通知图标\r
+static const uint32_t MSG_ICON_POS_X = 130;\r
+static const uint32_t MSG_ICON_POS_Y = 50;\r
+static const uint32_t MSG_ICON_WIDTH = 40;\r
+static const uint32_t MSG_ICON_HEIGHT = 40;\r
+static const uint32_t MSG_PAGE_WIDTH = 454;\r
 \r
 // 设置字体大小\r
-static const uint32_t APP_NAME_FONT_SIZE = 20;\r
-static const uint32_t MSG_TITLE_FONT_SIZE = 20;\r
-static const uint32_t MSG_CONTENT_FONT_SIZE = 40;\r
+static const uint32_t APP_NAME_FONT_SIZE = 38;\r
+static const uint32_t MSG_TITLE_FONT_SIZE = 36;\r
+static const uint32_t MSG_CONTENT_FONT_SIZE = 36;\r
 \r
-UIViewGroup *PhoneMsgView::phoneMsgView_ = nullptr;\r
+UIScrollView *PhoneMsgView::phoneMsgView_ = nullptr;\r
 UILabel *PhoneMsgView::appNameLabel_ = nullptr;\r
+UIImageView *PhoneMsgView::appIcon_ = nullptr;\r
 UILabel *PhoneMsgView::titleLabel_ = nullptr;\r
 UILabel *PhoneMsgView::contentLabel_ = nullptr;\r
 GraphicTimer *PhoneMsgView::phoneMsgNotifyStop_ = nullptr;\r
 PhoneMsg PhoneMsgView::phoneMsg_;\r
-UILabelButtonExt *PhoneMsgView::cancelButton_ = nullptr;\r
 \r
 void PhoneMsgStopNotifyCallback(void *data)\r
 {\r
@@ -71,9 +75,11 @@ void PhoneMsgView::DisablePhoneMsgTimer()
 UIViewGroup *PhoneMsgView::CreatePhoneMsgView()\r
 {\r
     if (phoneMsgView_ == nullptr) {\r
-        phoneMsgView_ = new UIViewGroup();\r
-        phoneMsgView_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        phoneMsgView_ = new UIScrollView();\r
+        phoneMsgView_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);\r
         phoneMsgView_->SetViewId("phoneMsgView");\r
+        phoneMsgView_->SetThrowDrag(true);\r
+        phoneMsgView_->SetScrollBlankSize(40);\r
     }\r
 \r
     if (appNameLabel_ == nullptr) {\r
@@ -83,20 +89,22 @@ UIViewGroup *PhoneMsgView::CreatePhoneMsgView()
     appNameLabel_->SetText(phoneMsg_.appName.c_str());\r
     appNameLabel_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, APP_NAME_FONT_SIZE);\r
     appNameLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-    // Add to rootView\r
     phoneMsgView_->Add(appNameLabel_);\r
-    appNameLabel_->SetVisible(true);\r
+\r
+    if (appIcon_ == nullptr) {\r
+        appIcon_ = new UIImageView();\r
+    }\r
+    appIcon_->SetPosition(MSG_ICON_POS_X, MSG_ICON_POS_Y, MSG_ICON_WIDTH, MSG_ICON_HEIGHT);\r
+    phoneMsgView_->Add(appIcon_);\r
+    appIcon_->SetVisible(true);\r
 \r
     if (titleLabel_ == nullptr) {\r
         titleLabel_ = new UILabel();\r
     }\r
     titleLabel_->SetPosition(MSG_TITLE_POS_X, MSG_TITLE_POS_Y, MSG_TITLE_WIDTH, MSG_TITLE_HEIGHT);\r
-    titleLabel_->SetText(phoneMsg_.msgTitle.c_str());\r
     titleLabel_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, MSG_TITLE_FONT_SIZE);\r
     titleLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-    // Add to rootView\r
     phoneMsgView_->Add(titleLabel_);\r
-    titleLabel_->SetVisible(true);\r
 \r
     if (contentLabel_ == nullptr) {\r
         contentLabel_ = new UILabel();\r
@@ -105,21 +113,11 @@ UIViewGroup *PhoneMsgView::CreatePhoneMsgView()
     contentLabel_->SetText(phoneMsg_.msgContent.c_str());\r
     contentLabel_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, MSG_CONTENT_FONT_SIZE);\r
     contentLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-    // Add to rootView\r
+    contentLabel_->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);\r
     phoneMsgView_->Add(contentLabel_);\r
-    contentLabel_->SetVisible(true);\r
-\r
-    if (cancelButton_ == nullptr) {\r
-        cancelButton_ = new UILabelButtonExt();\r
-    }\r
-    cancelButton_->SetPosition(CANCEL_BUTTON_POS_X, CANCEL_BUTTON_POS_Y, CANCEL_BUTTON_WIDTH, CANCEL_BUTTON_HEIGHT);\r
-    cancelButton_->SetViewId("cancelButton");\r
-    cancelButton_->SetText("取消通知");\r
-    cancelButton_->SetTouchable(true);\r
-    cancelButton_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, APP_NAME_FONT_SIZE);\r
-    // Add to rootView\r
-    phoneMsgView_->Add(cancelButton_);\r
 \r
+    SetControl();\r
+    phoneMsgView_->Invalidate();\r
     phoneMsgView_->SetDraggable(true);\r
     phoneMsgView_->SetTouchable(true);\r
     UIView::OnDragListener *dragListener =\r
@@ -128,29 +126,78 @@ UIViewGroup *PhoneMsgView::CreatePhoneMsgView()
         static_cast<UIView::OnClickListener *>(PhoneMsgViewEventListener::GetInstance());\r
     phoneMsgView_->SetOnDragListener(dragListener);\r
     phoneMsgView_->SetOnClickListener(clickListener);\r
-    cancelButton_->SetOnClickListener(clickListener);\r
     StartPhoneMsgTimer(PhoneMsgView::notifyTime);\r
     NotificationManager::GetInstance()->RegisterNotifyCleanupFunction(FreePhoneMsgView);\r
     return phoneMsgView_;\r
 }\r
 \r
+void PhoneMsgView::SetControl()\r
+{\r
+    if (strcmp(phoneMsg_.appName.c_str(), "微信") == 0) {\r
+            LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_WX);\r
+    } else if (strcmp(phoneMsg_.appName.c_str(), "QQ") == 0) {\r
+            LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_QQ);\r
+    } else if (strcmp(phoneMsg_.appName.c_str(), "抖音") == 0) {\r
+            LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_DY);\r
+    } else if (strcmp(phoneMsg_.appName.c_str(), "日历") == 0) {\r
+            LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_CALENDAR);\r
+    } else if (strcmp(phoneMsg_.appName.c_str(), "信息") == 0) {\r
+            LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_DUANXIN);\r
+    } else if (strcmp(phoneMsg_.appName.c_str(), "短信") == 0) {\r
+            LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_DUANXIN);\r
+    } else if (strcmp(phoneMsg_.appName.c_str(), "今日头条") == 0) {\r
+            LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_TOUTIAO);\r
+    } else if (strcmp(phoneMsg_.appName.c_str(), "微博") == 0) {\r
+            LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_WB);\r
+    } else if (strcmp(phoneMsg_.appName.c_str(), "小红书") == 0) {\r
+            LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_XHS);\r
+    }\r
+    int controlOffset = 10;\r
+    int cut = 2;\r
+    int posX = (MSG_PAGE_WIDTH - appNameLabel_->GetTextWidth() - appIcon_->GetWidth() - controlOffset) / cut;\r
+    appIcon_->SetX(posX);\r
+    appNameLabel_->SetWidth(appNameLabel_->GetTextWidth());\r
+    appNameLabel_->SetX(posX + appIcon_->GetWidth() + controlOffset);\r
+\r
+    titleLabel_->SetText(phoneMsg_.msgTitle.c_str());\r
+    if (titleLabel_->GetTextWidth() > MSG_TITLE_WIDTH) {\r
+        titleLabel_->SetWidth(MSG_TITLE_WIDTH);\r
+    } else {\r
+        titleLabel_->SetWidth(titleLabel_->GetTextWidth());\r
+    }\r
+    titleLabel_->SetX((MSG_PAGE_WIDTH - titleLabel_->GetWidth()) / cut);\r
+\r
+    int height = contentLabel_->GetTextHeight();\r
+    contentLabel_->SetHeight(height);\r
+    posX = (MSG_PAGE_WIDTH - contentLabel_->GetWidth()) / cut;\r
+    contentLabel_->SetX(posX);\r
+}\r
+\r
 void PhoneMsgView::FreePhoneMsgView(void)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FreePhoneMsgView");\r
     if (phoneMsgView_ != nullptr) {\r
         DisablePhoneMsgTimer();\r
         phoneMsgView_->RemoveAll();\r
+        RootView::GetInstance()->Remove(phoneMsgView_);\r
+        delete phoneMsgView_;\r
+        phoneMsgView_ = nullptr;\r
+    }\r
+    if (appNameLabel_ != nullptr) {\r
         delete appNameLabel_;\r
         appNameLabel_ = nullptr;\r
+    }\r
+    if (appIcon_ != nullptr) {\r
+        delete appIcon_;\r
+        appIcon_ = nullptr;\r
+    }\r
+    if (titleLabel_ != nullptr) {\r
         delete titleLabel_;\r
         titleLabel_ = nullptr;\r
+    }\r
+    if (contentLabel_ != nullptr) {\r
         delete contentLabel_;\r
         contentLabel_ = nullptr;\r
-        delete cancelButton_;\r
-        cancelButton_ = nullptr;\r
-        RootView::GetInstance()->Remove(phoneMsgView_);\r
-        delete phoneMsgView_;\r
-        phoneMsgView_ = nullptr;\r
     }\r
 }\r
 \r
@@ -159,9 +206,23 @@ void PhoneMsgView::UpDatePhoneMsg(std::string appName, std::string titile, std::
     phoneMsg_.appName = appName;\r
     phoneMsg_.msgTitle = titile;\r
     phoneMsg_.msgContent = content;\r
-    #ifdef FD230_650_0723\r
-    MessageModel::GetInstance().GetMessageInfo(appName, titile, content);\r
-    #endif\r
+    MessageModel::GetInstance().SaveMsgToModel(appName, titile, content);\r
+    MessageModel::GetInstance().SetMsgListItems();\r
+}\r
+\r
+static OHOS::UIViewGroup* ShowMsgNotify(void)\r
+{\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "ShowMsgNotify");\r
+    return OHOS::PhoneMsgView::CreatePhoneMsgView();\r
+}\r
+\r
+void PhoneMsgView::ShowDateMsg(std::string appName, std::string title, std::string content)\r
+{\r
+    const uint16_t TOPIC_DEMO_ALL_MSG = 10001;\r
+    UpDatePhoneMsg(appName, title, content);\r
+    int prio = 2;\r
+    NotificationManager::GetInstance()->SetNotifyPriority(prio);\r
+    NotificationManager::GetInstance()->ShowNotify(ShowMsgNotify, static_cast<uint16_t>(TOPIC_DEMO_ALL_MSG), true);\r
 }\r
 \r
 PhoneMsgViewEventListener::PhoneMsgViewEventListener()\r
@@ -190,7 +251,7 @@ bool PhoneMsgViewEventListener::OnDragEnd(UIView &view, const DragEvent &event)
     std::string viewId = view.GetViewId();\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PhoneMsgViewEventListener OnDragEnd %s", viewId.c_str());\r
     if (viewId == "phoneMsgView") {\r
-        NotificationManager::GetInstance()->StopNotify();\r
+        // NotificationManager::GetInstance()->StopNotify();\r
     }\r
     return true;\r
 }\r
diff --git a/code/sdk/application/wearable/n9/service/remote_msg/phone_contacts.cpp b/code/sdk/application/wearable/n9/service/remote_msg/phone_contacts.cpp
new file mode 100644 (file)
index 0000000..b55356a
--- /dev/null
@@ -0,0 +1,32 @@
+/*\r
+ * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2025-2025. All rights reserved.\r
+ * Description: PhoneContacts\r
+ * Create: 2025-07-12\r
+ */\r
+\r
+#include "wearable_log.h"\r
+#include "message.h"\r
+#include "PhoneMenuSync.h"\r
+#include "phone_contacts.h"\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+uint8_t updata_contacts(Request *request)\r
+{\r
+    std::string content((char *)request->data, request->len);\r
+    uint8_t ret = OHOS::PhoneMenuSync::ParseContactsMsg(content);\r
+    if (ret != OHOS::OK) {\r
+        return ret;\r
+    }\r
+    OHOS::PhoneMenuSync::WriteFileContact(OHOS::CONTACTS_FILE_PATH, content);\r
+    return 0;\r
+}\r
+\r
+uint8_t lookup_contacts(std::string &lookupContacts)\r
+{\r
+    return OHOS::PhoneMenuSync::LookContacts(lookupContacts);\r
+}\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
diff --git a/code/sdk/application/wearable/n9/service/remote_msg/phone_contacts.h b/code/sdk/application/wearable/n9/service/remote_msg/phone_contacts.h
new file mode 100644 (file)
index 0000000..8e517a3
--- /dev/null
@@ -0,0 +1,23 @@
+/*\r
+ * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2025-2025. All rights reserved.\r
+ * Description: PhoneContacts\r
+ * Create: 2025-07-12\r
+ */\r
+\r
+#ifndef PHONE_CONTACTS_H\r
+#define PHONE_CONTACTS_H\r
+#include <string>\r
+#include "message.h"\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+extern "C" {\r
+#endif\r
+#endif\r
+uint8_t updata_contacts(Request *request); // 同步手机侧联系人到表侧\r
+uint8_t lookup_contacts(std::string &lookupContacts); // 查询表侧联系人到手机\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+}\r
+#endif\r
+#endif\r
+#endif /* PHONE_CONTACTS_H */
\ No newline at end of file
index a339654..5f8a450 100644 (file)
@@ -1,8 +1,9 @@
 /*\r
- * Copyright (c) CompanyNameMagicTag 2023-2023. All rights reserved.\r
+ * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2025-2025. All rights reserved.\r
  * Description: ota upgrade handle.\r
  * This file should be changed only infrequently and with great care.\r
  */\r
+\r
 #include <stdio.h>\r
 #include "securec.h"\r
 #include "msg_center.h"\r
@@ -13,7 +14,9 @@
 #include "msg_center.h"\r
 #include "msg_center_common.h"\r
 #include "ohos_init.h"\r
+#include "phone_contacts.h"\r
 #include "remote_msg.h"\r
+\r
 #ifdef __cplusplus\r
 extern "C" {\r
 #endif\r
@@ -22,6 +25,8 @@ static const msg_center_cmd_map_t g_msg_center_phone_msg_tbl[] = {
     {MSGCENTER_CMD_PHONE_MSG, MSGCENTER_TYPE_ID_MSG_THIRD_APP, msg_center_phone_msg_rec},\r
     {MSGCENTER_CMD_PHONE_MSG, MSGCENTER_TYPE_ID_MSG_SMS, msg_center_phone_msg_rec},\r
     {MSGCENTER_CMD_PHONE_MSG, MSGCENTER_TYPE_ID_MSG_PHONE, msg_center_phone_msg_rec},\r
+    {MSGCENTER_CMD_PHONE_MSG, MSGCENTER_TYPE_ID_UPDATE_CONTACTS, msg_center_update_contacts},\r
+    {MSGCENTER_CMD_PHONE_MSG, MSGCENTER_TYPE_ID_LOOKUP_CONTACTS, msg_center_lookup_contacts},\r
 };\r
 \r
 errcode_t msg_center_phone_msg_rec(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
@@ -45,6 +50,50 @@ errcode_t msg_center_phone_msg_rec(uint8_t cmd_id, uint8_t type, void *usr_data,
     return ERRCODE_SUCC;\r
 }\r
 \r
+errcode_t msg_center_update_contacts(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
+{\r
+    uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data);\r
+    uint16_t payload_len = usr_len - tl_len;\r
+    uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data);\r
+    errcode_t ret = ERRCODE_SUCC;\r
+    uint8_t msg_result = 0;\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "update_contacts, cmd_id = %d, type = %d\r\n", cmd_id, type);\r
+    Request request;\r
+    request.msgId = type;\r
+    request.len = payload_len;\r
+    request.data = tlv_payload;\r
+    updata_contacts(&request);\r
+    ret = msg_center_send_data(cmd_id, type, &msg_result, sizeof(msg_result));\r
+    if (ret != ERRCODE_SUCC) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_update_contacts fail, ret = %d\r\n", ret);\r
+        return ERRCODE_FAIL;\r
+    }\r
+    return ERRCODE_SUCC;\r
+}\r
+\r
+errcode_t msg_center_lookup_contacts(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
+{\r
+    uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data);\r
+    uint16_t payload_len = usr_len - tl_len;\r
+    uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data);\r
+    errcode_t ret = ERRCODE_SUCC;\r
+    uint8_t msg_result = 0;\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "lookup_contacts, cmd_id = %d, type = %d\r\n", cmd_id, type);\r
+    std::string lookupContacts;\r
+    uint8_t result = lookup_contacts(lookupContacts);\r
+    if (!result) {\r
+        ret = msg_center_send_data(cmd_id, type, (void *)lookupContacts.c_str(), lookupContacts.size());\r
+    } else {\r
+        ret = msg_center_send_data(cmd_id, type, (void *)&result, 1);\r
+    }\r
+    if (ret != ERRCODE_SUCC) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_lookup_contacts fail, ret = %d\r\n", ret);\r
+        return ERRCODE_FAIL;\r
+    }\r
+    return ERRCODE_SUCC;\r
+}\r
+\r
+\r
 errcode_t msg_center_phone_msg_type_dispatch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
 {\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_phone_msg_type_dispatch, cmd_id = %d, type = %d\r\n",\r
index 2787377..e974e4c 100644 (file)
@@ -20,10 +20,14 @@ typedef enum msg_center_phone_msg_type_id {
     MSGCENTER_TYPE_ID_MSG_THIRD_APP = 0x1, // 三方应用消息\r
     MSGCENTER_TYPE_ID_MSG_SMS,             // 短信\r
     MSGCENTER_TYPE_ID_MSG_PHONE,           // 电话\r
+    MSGCENTER_TYPE_ID_UPDATE_CONTACTS,\r
+    MSGCENTER_TYPE_ID_LOOKUP_CONTACTS,\r
     MSGCENTER_TYPE_ID_MSG_MAX,\r
 } msg_center_msg_notify_type_id_t;\r
 \r
 errcode_t msg_center_phone_msg_rec(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
+errcode_t msg_center_update_contacts(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
+errcode_t msg_center_lookup_contacts(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
 \r
 #ifdef __cplusplus\r
 #if __cplusplus\r
diff --git a/code/sdk/application/wearable/wearable/ohos_deps/wearable_log.h b/code/sdk/application/wearable/wearable/ohos_deps/wearable_log.h
new file mode 100644 (file)
index 0000000..c2945d2
--- /dev/null
@@ -0,0 +1,122 @@
+/*\r
+ * Copyright (c) CompanyNameMagicTag 2023-2023. All rights reserved.\r
+ * Description: Wearable log header file.\r
+ * Author:\r
+ * Create:\r
+ */\r
+\r
+#ifndef WEARABLE_LOG_H\r
+#define WEARABLE_LOG_H\r
+\r
+#if !defined(SW_UART_DEBUG) && !defined(SW_RTT_DEBUG)\r
+#include "soc_diag_util.h"\r
+#include "log_oam_logger.h"\r
+#include "log_def.h"\r
+#else\r
+#include "debug_print.h"\r
+#endif\r
+#include "wearable_onlinelog.h"\r
+\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+extern "C" {\r
+#endif\r
+#endif\r
+\r
+/**\r
+ * @brief Enumerates logging module types.\r
+ *\r
+ * The module type must be globally unique. A maximum of 64 module types can be defined.\r
+ *\r
+ * @since 1.0\r
+ * @version 1.0\r
+ */\r
+typedef enum {\r
+    /** applications */\r
+    WEARABLE_LOG_MODULE_APP = 0,\r
+    /** Launcher Framework */\r
+    WEARABLE_LOG_MODULE_LAUNCHER_FWK,\r
+    /** Main Service */\r
+    WEARABLE_LOG_MODULE_MAIN_SERVICE,\r
+    /** Broadcast Service */\r
+    WEARABLE_LOG_MODULE_BROADCASE_SERVICE,\r
+    /** Atomic Ability Framework */\r
+    WEARABLE_LOG_MODULE_AAFWK,\r
+    /** smart voice */\r
+    WEARABLE_LOG_MODULE_SMART_VOICE,\r
+    /* UI SERVICE */\r
+    WEARABLE_LOG_MODULE_UI_SERVICE,\r
+    /* msg_center */\r
+    WEARABLE_LOG_MODULE_MSG_CENTER,\r
+\r
+    WEARABLE_LOG_MODULE_MAX\r
+} WearableLogModuleType;\r
+\r
+#if !defined(SW_UART_DEBUG) && !defined(SW_RTT_DEBUG) && !defined(CONFIG_ONLINE_LOG)\r
+#define WEARABLE_LOGE(mod, fmt, arg...) uapi_diag_error_log(0, fmt, ##arg)\r
+#define WEARABLE_LOGW(mod, fmt, arg...) uapi_diag_warning_log(0, fmt, ##arg)\r
+#define WEARABLE_LOGI(mod, fmt, arg...) uapi_diag_info_log(0, fmt, ##arg)\r
+#ifdef WEARABLE_LOG_DEBUG\r
+#define WEARABLE_LOGD(mod, fmt, arg...) uapi_diag_debug_log(0, fmt, ##arg)\r
+#else\r
+#define WEARABLE_LOGD(mod, fmt, arg...)\r
+#endif\r
+#elif (CONFIG_ONLINE_LOG == 1) && !defined(_WIN32)\r
+#define WEARABLE_LOGE(mod, fmt, arg...) ONLINE_PRINT(ONLINE_ERROR, fmt "\n", ##arg)\r
+#define WEARABLE_LOGW(mod, fmt, arg...) ONLINE_PRINT(ONLINE_WARN, fmt "\n", ##arg)\r
+#define WEARABLE_LOGI(mod, fmt, arg...) ONLINE_PRINT(ONLINE_INFO, fmt "\n", ##arg)\r
+#ifdef WEARABLE_LOG_DEBUG\r
+#define WEARABLE_LOGD(mod, fmt, arg...) ONLINE_PRINT(ONLINE_DEBUG, fmt "\n", ##arg)\r
+#else\r
+#define WEARABLE_LOGD(mod, fmt, arg...)\r
+#endif\r
+#else\r
+#define WEARABLE_LOGE(mod, fmt, arg...) PRINT("[WEARABLE E/] " fmt "\n", ##arg)\r
+#define WEARABLE_LOGW(mod, fmt, arg...) PRINT("[WEARABLE W/] " fmt "\n", ##arg)\r
+#define WEARABLE_LOGI(mod, fmt, arg...) PRINT("[WEARABLE I/] " fmt "\n", ##arg)\r
+#ifdef WEARABLE_LOG_DEBUG\r
+#define WEARABLE_LOGD(mod, fmt, arg...) PRINT("[WEARABLE D/] " fmt "\n", ##arg)\r
+#else\r
+#define WEARABLE_LOGD(mod, fmt, arg...)\r
+#endif\r
+#endif\r
+\r
+#define CHECK_NULL_AND_RETURN(pointer, mod, fmt) \\r
+    do {                                         \\r
+        if ((pointer) == nullptr) {              \\r
+            WEARABLE_LOGE((mod), (fmt));         \\r
+            return;                              \\r
+        }                                        \\r
+    } while (0)\r
+\r
+#define CHECK_NULL_AND_RETURN_NULL(pointer, mod, fmt) \\r
+    do {                                              \\r
+        if ((pointer) == nullptr) {                   \\r
+            WEARABLE_LOGE((mod), (fmt));              \\r
+            return nullptr;                           \\r
+        }                                             \\r
+    } while (0)\r
+\r
+#define CHECK_NULL_AND_RETURN_CODE(pointer, mod, fmt, code) \\r
+    do {                                                    \\r
+        if ((pointer) == nullptr) {                         \\r
+            WEARABLE_LOGE((mod), (fmt));                    \\r
+            return (code);                                  \\r
+        }                                                   \\r
+    } while (0)\r
+\r
+#define DELETE_IF_NOT_NULL(pointer) \\r
+    do {                            \\r
+        if ((pointer) != nullptr) { \\r
+            delete (pointer);       \\r
+            (pointer) = nullptr;    \\r
+        }                           \\r
+    } while (0)\r
+\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+}\r
+#endif\r
+#endif\r
+\r
+#endif\r