From d9199203eecb1d425ec64c19edac218b27ca14f1 Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Mon, 20 Apr 2026 17:12:15 +0800 Subject: [PATCH] =?utf8?q?application/wearable/ohos=5Fdeps=20=E5=92=8Cappl?= =?utf8?q?ication/wearable/service=20=E6=96=87=E4=BB=B6=E5=A4=B91201patch?= =?utf8?q?=E5=90=88=E5=B9=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../broadcast/include/broadcast_feature.h | 2 +- .../n9/service/device_msg/CMakeLists.txt | 6 +- .../n9/service/device_msg/device_msg.cpp | 40 +-- .../service/device_msg/msg_center_device.cpp | 283 ++++++------------ .../n9/service/device_msg/msg_center_device.h | 94 +++--- .../brandy-auto-ota-cli/libmsg_center.a | Bin 147266 -> 147574 bytes .../brandy-auto-ota-ser/libmsg_center.a | Bin 147266 -> 147574 bytes .../brandy-native-js/libmsg_center.a | Bin 147266 -> 147574 bytes .../msg_center/brandy-xts/libmsg_center.a | Bin 147266 -> 147574 bytes .../include/notify/calendar_notification.h | 73 +++++ .../include/notify/phone_msg_notification.h | 13 +- .../src/common/msg_center_utils.cpp | 12 +- .../src/notify/phone_msg_notification.cpp | 167 +++++++---- .../n9/service/remote_msg/phone_contacts.cpp | 32 ++ .../n9/service/remote_msg/phone_contacts.h | 23 ++ .../n9/service/remote_msg/remote_msg.cpp | 51 +++- .../n9/service/remote_msg/remote_msg.h | 4 + .../wearable/ohos_deps/wearable_log.h | 122 ++++++++ 18 files changed, 590 insertions(+), 332 deletions(-) create mode 100644 code/sdk/application/wearable/n9/service/msg_center/include/notify/calendar_notification.h create mode 100644 code/sdk/application/wearable/n9/service/remote_msg/phone_contacts.cpp create mode 100644 code/sdk/application/wearable/n9/service/remote_msg/phone_contacts.h create mode 100644 code/sdk/application/wearable/wearable/ohos_deps/wearable_log.h diff --git a/code/sdk/application/wearable/n9/service/broadcast/include/broadcast_feature.h b/code/sdk/application/wearable/n9/service/broadcast/include/broadcast_feature.h index 42f1f9241..5872c1652 100644 --- a/code/sdk/application/wearable/n9/service/broadcast/include/broadcast_feature.h +++ b/code/sdk/application/wearable/n9/service/broadcast/include/broadcast_feature.h @@ -49,7 +49,7 @@ typedef enum { TOPIC_EVENT_HFP_WATCH_TO_PHONE, TOPIC_EVENT_BLOODOXYGEN_UPDATA, TOPIC_EVENT_SPORT_DISTANCE, - TOPIC_EVENT_LOCATION, + TOPIC_EVENT_CALENDAR_NOTIFY, TOPIC_EVENT_HFP_HINT, #ifdef SUPPORT_CYWEE_SERVICE // TOPIC_EVENT_ACTIVITY_UPDATE, diff --git a/code/sdk/application/wearable/n9/service/device_msg/CMakeLists.txt b/code/sdk/application/wearable/n9/service/device_msg/CMakeLists.txt index 972f58f50..c3de1d51d 100644 --- a/code/sdk/application/wearable/n9/service/device_msg/CMakeLists.txt +++ b/code/sdk/application/wearable/n9/service/device_msg/CMakeLists.txt @@ -9,22 +9,26 @@ set(PRIVATE_HEADER ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/ui/innerkits + ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/ui/frameworks ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits ${ROOT_DIR}/middleware/services/media/foundation/audiomanager/interfaces/kits/audiomanager ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks ${ROOT_DIR}/middleware/services/gui/uikit/surface/interfaces/kits ${ROOT_DIR}/middleware/chips/brandy/nv/include ${ROOT_DIR}/middleware/chips/brandy/nv/nv_config + ${ROOT_DIR}/application/wearable/nativeapp/nativeui/include ${ROOT_DIR}/open_source/openharmony/drivers/peripheral/display/interfaces/include ${ROOT_DIR}/open_source/openharmony/base/sensors/location/interfaces/kits/include ${ROOT_DIR}/middleware/utils/dfx/diag/ + ${ROOT_DIR}/open_source/openharmony/third_party/cJSON + ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/utils/innerkits + ${ROOT_DIR}/application/wearable/nativeapp/nativeui/ ) set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/device_msg.cpp ${CMAKE_CURRENT_SOURCE_DIR}/device_proxy.cpp ${CMAKE_CURRENT_SOURCE_DIR}/msg_center_device.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/device_location.cpp ) set(COMPONENT_PUBLIC_CCFLAGS diff --git a/code/sdk/application/wearable/n9/service/device_msg/device_msg.cpp b/code/sdk/application/wearable/n9/service/device_msg/device_msg.cpp index 3f54b45ab..79f0fc25a 100644 --- a/code/sdk/application/wearable/n9/service/device_msg/device_msg.cpp +++ b/code/sdk/application/wearable/n9/service/device_msg/device_msg.cpp @@ -1,9 +1,9 @@ /* - * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved. - * Description: Breath Ease - * Author: wangle - * Create: 2025-4-23 + * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2025-2025. All rights reserved. + * Description: Device Msg + * Create: 2025-06-06 */ + #include "msg_center_protocol.h" #include "msg_center_cmd.h" #include "ohos_init.h" @@ -14,8 +14,6 @@ #include "graphic_timer.h" #include "broadcast_feature.h" #include "ohos_timer.h" -#include "heartrate/HeartModel.h" -#include "device_location.h" #endif namespace OHOS { @@ -31,14 +29,7 @@ extern "C" { #define HEARTRATE_RANGE 60 static uint8_t g_rotation_publish = 0; static GraphicTimer *g_publishTestDataHandle = nullptr; -enum publishDataType { - PUBLISH_SETP = 0, - PUBLISH_DISTANCE, - PUBLISH_HEARTRATE, - PUBLISH_BLOODOXYGEN, - PUBLISH_TYPE_MAX -}; - +enum publishDataType { PUBLISH_SETP = 0, PUBLISH_DISTANCE, PUBLISH_HEARTRATE, PUBLISH_BLOODOXYGEN, PUBLISH_TYPE_MAX }; static void PublishTopicTestDataEvent(uint16_t topic, const void *data, size_t len) { int32_t ret; @@ -115,7 +106,7 @@ static void PublishTestDataCallback(void *) } } -void PublishTestData() +static void PublishTestData() { uint32 tick = GetOSTick(5000); // 5秒发布一次测试数据 if (g_publishTestDataHandle == nullptr) { @@ -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}, {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_GET_PRODUCT_INFO, msg_center_get_product_info}, {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_GET_LANGUAGE_ID, msg_center_get_language_id}, - {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_GET_VOLUME_INFO, msg_center_get_volume_info}, {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SET_LANGUAGE_ID, msg_center_set_language_id}, - {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SET_VOLUME_INFO, msg_center_set_volume_info}, {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_DEVICE_HEARTRATE, msg_center_device_heartrate}, {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_DEVICE_STEPDATA, msg_center_device_stepdata}, {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_DEVICE_BLOODOXYGEN, msg_center_device_bloodoxygen}, {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_OFFLINE_LOG_SWITCH, msg_center_offline_log_switch}, - {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_LOCATION_GET_INFO, msg_center_location_get_info}, - {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_LOCATION_START, msg_center_location_start}, - {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_LOCATION_STOP, msg_center_location_stop}, {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SPORT_ACTION, msg_center_sport_action}, - {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SPORT_GET_DATA, msg_center_sport_get_data}, - {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SPORT_REPORT_DATA, msg_center_sport_report_data}, + {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SPORT_GET_RECORD, msg_center_sport_get_record}, #if (CONFIG_ONLINE_LOG == 1) {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SET_ONLINELOG_CHANNEL, msg_center_set_online_log_channel}, {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SET_ONLINELOG_LEVEL, msg_center_set_online_log_level}, #endif {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_OTA_INIT, msg_center_ota_init}, {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_OTA_UPDATE, msg_center_ota_update}, - {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_OFF_FIND_PHONE, msg_center_device_findphone}, - {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_CAMERA_WATCH_EXIT, msg_center_camera_exit}, - {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_CAMERA_CONNECT_PHONE_SUCCESS, msg_center_camera_online}, + {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_STOP_FIND_PHONE, msg_center_device_findphone}, + {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_WATCH_EXIT_CAMERA, msg_center_camera_exit}, + {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_CAMERA_CONNECTED_PHONE, msg_center_camera_online}, + {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SYNC_WEATHER_REC, msg_center_device_sync_weather_rec}, + {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_SYNC_DATE_REC, msg_center_device_sync_date_rec}, }; errcode_t msg_center_device_type_dispatch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) @@ -182,6 +169,9 @@ errcode_t msg_center_device_type_dispatch(uint8_t cmd_id, uint8_t type, void *us void device_init(void) { msg_center_register_cmd(MSGCENTER_CMD_DEVICE, msg_center_device_type_dispatch); +#ifdef PUBLISH_TEST_DATA + PublishTestData(); +#endif } APP_FEATURE_INIT_PRI(device_init, LAYER_INIT_LEVEL_4); diff --git a/code/sdk/application/wearable/n9/service/device_msg/msg_center_device.cpp b/code/sdk/application/wearable/n9/service/device_msg/msg_center_device.cpp index 5ef6fe6c3..80255a34d 100644 --- a/code/sdk/application/wearable/n9/service/device_msg/msg_center_device.cpp +++ b/code/sdk/application/wearable/n9/service/device_msg/msg_center_device.cpp @@ -1,19 +1,21 @@ /* - * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved. - * Description: Breath Ease - * Author: wangle - * Create: 2025-4-23 + * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2025-2025. All rights reserved. + * Description: MsgCenter Device + * Create: 2025-06-06 */ -#include "msg_center_protocol.h" + #include "msg_center_device.h" +#include "msg_center_protocol.h" #include "device_proxy.h" #include "wearable_log.h" -#include "device_location.h" #include "AppViewIDs.h" #include "NativeAbility.h" -// #include "sports/SportsModel.h" -// #include "findphone/FindPhoneMainPage.h" -// #include "camera/CameraMainPage.h" +#include "sport/SportView.h" +#include "sport/SportModel.h" +#include "findphone/FindPhoneMainPage.h" +#include "camera/CameraMainPage.h" +#include "weather/WeatherMainPage.h" +#include "date/DateMainPage.h" #ifdef __cplusplus extern "C" { @@ -22,10 +24,9 @@ extern "C" { #include "diag_ind_src.h" uint8_t g_bloodoxygen = 0; -uint16_t g_heartrate = 0; +uint8_t g_heartrate = 0; uint32_t g_stepdata = 0; uint32_t g_distance = 0; -extern LocationInfo_t g_locationInfo; // 获取电量 errcode_t msg_center_get_battery_level(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) { @@ -100,29 +101,6 @@ errcode_t msg_center_get_language_id(uint8_t cmd_id, uint8_t type, void *usr_dat } return ERRCODE_SUCC; } -// 获取音量 -errcode_t msg_center_get_volume_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) -{ - WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "get_volume_info"); - uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data); - void *v_data = msg_center_get_tlv_payload(usr_data); - uint8_t v_len = usr_len - tl_len; - - uint8_t vol_type = 0; - if (v_len == sizeof(uint8_t)) { - vol_type = *(uint8_t *)v_data; - } - - std::vector vol_info; - OHOS::device_proxy::get_volume_info(vol_type, vol_info); - - errcode_t ret = msg_center_send_data(cmd_id, type, &vol_info[0], vol_info.size() * sizeof(OHOS::volume_info)); - if (ret != ERRCODE_SUCC) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send get_volume_info_ack fail, ret = %d", ret); - return ERRCODE_FAIL; - } - return ERRCODE_SUCC; -} // 设置语言 errcode_t msg_center_set_language_id(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) { @@ -147,30 +125,6 @@ errcode_t msg_center_set_language_id(uint8_t cmd_id, uint8_t type, void *usr_dat } return ERRCODE_SUCC; } -// 设置音量 -errcode_t msg_center_set_volume_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) -{ - WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "set_volume_info"); - uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data); - void *v_data = msg_center_get_tlv_payload(usr_data); - uint8_t v_len = usr_len - tl_len; - - OHOS::volume_info info; - if (v_len != sizeof(OHOS::volume_info)) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "v_len check error, v_len=%u, need=%u", v_len, sizeof(uint8_t)); - return ERRCODE_FAIL; - } - - memcpy_s(&info, sizeof(OHOS::volume_info), v_data, v_len); - OHOS::device_proxy::set_volume_info(info); - - errcode_t ret = msg_center_send_data(cmd_id, type, &info, sizeof(OHOS::volume_info)); - if (ret != ERRCODE_SUCC) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send set_volume_info_ack fail, ret = %d", ret); - return ERRCODE_FAIL; - } - return ERRCODE_SUCC; -} // ota初始化 errcode_t msg_center_ota_init(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) { @@ -218,7 +172,7 @@ errcode_t msg_center_ota_update(uint8_t cmd_id, uint8_t type, void *usr_data, ui return ERRCODE_FAIL; } WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send ret = %d", ret); - OHOS::device_proxy::call_ui_ota_update(); + OHOS::device_proxy::call_ui_ota_update(); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send ui over"); return ERRCODE_SUCC; @@ -274,89 +228,6 @@ errcode_t msg_center_device_bloodoxygen(uint8_t cmd_id, uint8_t type, void *usr_ return ERRCODE_SUCC; } - -/* LOCATION */ -errcode_t msg_center_location_get_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) -{ - uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data); - uint16_t payload_len = usr_len - tl_len; - uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data); - errcode_t ret = ERRCODE_SUCC; - - ret = msg_center_send_data(cmd_id, type, &g_locationInfo, sizeof(g_locationInfo)); - if (ret != ERRCODE_SUCC) { - return ERRCODE_FAIL; - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_get_info latitude_:%d,longitude_:%d\n", - g_locationInfo.latitude_, g_locationInfo.longitude_); - /* notify UI or call UI load */ - - return ERRCODE_SUCC; -} - -errcode_t msg_center_location_start(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) -{ - uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data); - uint16_t payload_len = usr_len - tl_len; - uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data); - errcode_t ret = ERRCODE_SUCC; - uint8_t ack = 1; - - WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_start finish\r\n"); - ret = deviceLocationStartLocating(); - if (ret != ERRCODE_SUCC) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_start fail\r\n"); - ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack)); - if (ret != ERRCODE_SUCC) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_start send msg fail\r\n"); - return ERRCODE_FAIL; - } - } else { - ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack)); - if (ret != ERRCODE_SUCC) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_start send msg fail\r\n"); - return ERRCODE_FAIL; - } - } - - WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_start finish\r\n"); - /* notify UI or call UI load */ - - return ERRCODE_SUCC; -} - -errcode_t msg_center_location_stop(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) -{ - uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data); - uint16_t payload_len = usr_len - tl_len; - uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data); - errcode_t ret = ERRCODE_SUCC; - uint8_t ack = 1; - - WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_stop\r\n"); - ret = deviceLocationStopLocating(); - ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack)); - if (ret != ERRCODE_SUCC) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_stop fail\r\n"); - ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack)); - if (ret != ERRCODE_SUCC) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_stop send msg fail\r\n"); - return ERRCODE_FAIL; - } - } else { - ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack)); - if (ret != ERRCODE_SUCC) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_stop send msg fail\r\n"); - return ERRCODE_FAIL; - } - } - - WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_location_stop\r\n"); - /* notify UI or call UI load */ - - return ERRCODE_SUCC; -} - /* SPORT */ errcode_t msg_center_sport_action(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) { @@ -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); errcode_t ret = ERRCODE_SUCC; uint8_t ack = 1; - sport_action_t action = (sport_action_t)*tlv_payload; - - WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_action : %d\r\n", action); - - #ifdef FD230_650_0723 - switch (action) { - case SPORT_ACTION_START: - OHOS::NativeAbility::GetInstance().ChangeSlice(VIEW_SPORTS); - OHOS::SportsModel::GetInstance()->ResetSportsData(); - if (!OHOS::SportsModel::GetInstance()->StartSportsTimer()) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_start StartSportsTimer failed\r\n"); - ret = ERRCODE_FAIL; - } + OHOS::sport_control_t *sport = (OHOS::sport_control_t *)tlv_payload; + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_action=%d, type=%d", sport->action, sport->type); + + switch (sport->action) { + case OHOS::SPORT_ACTION_START: + OHOS::SportModel::GetInstance().SetSportType(static_cast(sport->type)); + OHOS::SportModel::GetInstance().StartSport(false); + OHOS::NativeAbility::GetInstance().SwitchSlice(VIEW_SPORT, OHOS::SportPages::SPORT_PAGE_DATA); break; - case SPORT_ACTION_PAUSE: - OHOS::SportsModel::GetInstance()->StopSportsTimer(false); + case OHOS::SPORT_ACTION_PAUSE: + OHOS::SportModel::GetInstance().PauseAndReport(false); + OHOS::NativeAbility::GetInstance().SwitchSlice(VIEW_SPORT, OHOS::SportPages::SPORT_PAGE_PAUSE); break; - case SPORT_ACTION_RESUME: - if (!OHOS::SportsModel::GetInstance()->StartSportsTimer()) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_resume StartSportsTimer failed\r\n"); - ret = ERRCODE_FAIL; - } + case OHOS::SPORT_ACTION_RESUME: + OHOS::SportModel::GetInstance().ResumeAndReport(false); + OHOS::NativeAbility::GetInstance().SwitchSlice(VIEW_SPORT, OHOS::SportPages::SPORT_PAGE_DATA); break; - case SPORT_ACTION_STOP: - OHOS::SportsModel::GetInstance()->StopSportsTimer(false); - OHOS::NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN); + case OHOS::SPORT_ACTION_STOP: + OHOS::SportModel::GetInstance().StopAndReport(false); + OHOS::NativeAbility::GetInstance().SwitchSlice(VIEW_SPORT, OHOS::SportPages::SPORT_PAGE_MENU); break; default: ret = ERRCODE_FAIL; break; } - #endif ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack)); if (ret != ERRCODE_SUCC) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_resume send data failed\r\n"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_action send data failed\r\n"); return ERRCODE_FAIL; } return ERRCODE_SUCC; } -errcode_t msg_center_sport_get_data(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) +errcode_t msg_center_sport_get_record(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) { uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data); uint16_t payload_len = usr_len - tl_len; uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data); errcode_t ret = ERRCODE_SUCC; - WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_get_data\r\n"); - #ifdef FD230_650_0723 - OHOS::sport_data_t *sportData = OHOS::SportsModel::GetInstance()->GetSportsData(); - ret = msg_center_send_data(cmd_id, type, sportData, sizeof(OHOS::sport_data_t)); - if (ret != ERRCODE_SUCC) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_get_data end data failed\r\n"); + auto record = OHOS::SportModel::GetInstance().GetRecord(); + uint16_t num = record.size(); + uint16_t size = sizeof(uint16_t) + num * sizeof(OHOS::sport_data_t); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_get_record record num=%d, malloc szie=%d\r\n", num, + size); + uint8_t *data = (uint8_t *)malloc(size); + if (data == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_get_record malloc data failed\r\n"); return ERRCODE_FAIL; } - #endif - return ERRCODE_SUCC; -} + uint8_t *data_addr = data; + + memcpy_s(data, sizeof(uint16_t), &num, sizeof(uint16_t)); + data += sizeof(uint16_t); + + for (int i = 0; i < num; i++) { + memcpy_s(data, sizeof(OHOS::sport_data_t), &record[i], sizeof(OHOS::sport_data_t)); + data += sizeof(OHOS::sport_data_t); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "========record[%d]=============", i); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "type:%d", record[i].type); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "heartRate:%d", record[i].heartRate); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "calorie:%d", record[i].calorie); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "altitude:%d", record[i].altitude); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "ascent:%d", record[i].ascent); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "descent:%d", record[i].descent); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "distance:%d", record[i].distance); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "lap:%d", record[i].lap); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "startTime:%d", record[i].startTime); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "endTime:%d", record[i].endTime); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "elapsedTime:%d", record[i].elapsedTime); + } -errcode_t msg_center_sport_report_data(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) -{ + ret = msg_center_send_data(cmd_id, type, data_addr, size); + free(data_addr); + if (ret != ERRCODE_SUCC) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_sport_get_record send data failed\r\n"); + return ERRCODE_FAIL; + } + OHOS::SportModel::GetInstance().ClearRecord(); return ERRCODE_SUCC; } errcode_t msg_center_camera_exit(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "recv exit camera from phone"); - OHOS::NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); + OHOS::NativeAbility::GetInstance().ChangeSliceToApplist(); return ERRCODE_SUCC; } errcode_t msg_center_camera_online(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "recv connect success from phone"); - #ifdef FD230_650_0723 if (OHOS::CameraMainPage::GetInstance() != nullptr) { OHOS::CameraMainPage::GetInstance()->Refresh_page(); return ERRCODE_SUCC; @@ -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"); return ERRCODE_FAIL; } - #endif - return ERRCODE_SUCC; } errcode_t msg_center_offline_log_switch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) @@ -508,22 +395,38 @@ errcode_t msg_center_set_online_log_level(uint8_t cmd_id, uint8_t type, void *us errcode_t msg_center_device_findphone(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) { - uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data); - uint16_t payload_len = usr_len - tl_len; - uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data); bool ret = true; - #ifdef FD230_650_0723 - if ( OHOS::FindPhoneMainPage::GetInstance() != nullptr) { + if (OHOS::FindPhoneMainPage::GetInstance() != nullptr) { ret = OHOS::FindPhoneMainPage::GetInstance()->StopFindPhone(); } else { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "FindphonePage not exist\r\n"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "FindphonePage not exist\r\n"); } if (!ret) { return ERRCODE_FAIL; } - #endif return ERRCODE_SUCC; } + +errcode_t msg_center_device_sync_weather_rec(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) +{ + if (OHOS::WeatherMainPage::GetInstance() != nullptr) { + OHOS::WeatherMainPage::GetInstance()->ReloadPage(); + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "WeatherMainPage not exist\r\n"); + } + return ERRCODE_SUCC; +} + +errcode_t msg_center_device_sync_date_rec(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) +{ + if (OHOS::DateMainPage::GetInstance() != nullptr) { + OHOS::DateMainPage::GetInstance()->ReloadPage(); + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "DateMainPage not exist\r\n"); + } + return ERRCODE_SUCC; +} + #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/code/sdk/application/wearable/n9/service/device_msg/msg_center_device.h b/code/sdk/application/wearable/n9/service/device_msg/msg_center_device.h index 02f3c2583..57a66e464 100644 --- a/code/sdk/application/wearable/n9/service/device_msg/msg_center_device.h +++ b/code/sdk/application/wearable/n9/service/device_msg/msg_center_device.h @@ -1,9 +1,9 @@ /* - * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved. - * Description: Breath Ease - * Author: wangle - * Create: 2025-4-23 + * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2025-2025. All rights reserved. + * Description: MsgCenter Device + * Create: 2025-06-06 */ + #ifndef MSG_CENTER_DEVICE_H #define MSG_CENTER_DEVICE_H @@ -14,45 +14,37 @@ extern "C" { #endif -typedef enum sport_action { - SPORT_ACTION_START = 1, - SPORT_ACTION_PAUSE = 2, - SPORT_ACTION_RESUME = 3, - SPORT_ACTION_STOP = 4, -} sport_action_t; - typedef enum msg_center_device_type_id { - MSGCENTER_TYPE_ID_GET_BATTERY_LEVEL = 0x1, - MSGCENTER_TYPE_ID_GET_STORAGE_INFO = 0x2, - MSGCENTER_TYPE_ID_GET_PRODUCT_INFO = 0x3, - MSGCENTER_TYPE_ID_GET_LANGUAGE_ID = 0x4, - MSGCENTER_TYPE_ID_GET_VOLUME_INFO = 0x5, - MSGCENTER_TYPE_ID_SET_LANGUAGE_ID = 0x6, - MSGCENTER_TYPE_ID_SET_VOLUME_INFO = 0x7, - MSGCENTER_TYPE_ID_DEVICE_HEARTRATE = 0x8, - MSGCENTER_TYPE_ID_DEVICE_STEPDATA = 0x9, - MSGCENTER_TYPE_ID_DEVICE_BLOODOXYGEN = 0xa, - MSGCENTER_TYPE_ID_OFFLINE_LOG_SWITCH = 0xb, - MSGCENTER_TYPE_ID_LOCATION_GET_INFO = 0x20, - MSGCENTER_TYPE_ID_LOCATION_START = 0x21, - MSGCENTER_TYPE_ID_LOCATION_STOP = 0x22, - MSGCENTER_TYPE_ID_LOCATION_REPORT = 0x23, - MSGCENTER_TYPE_ID_SPORT_ACTION = 0x27, - MSGCENTER_TYPE_ID_SPORT_GET_DATA = 0x28, - MSGCENTER_TYPE_ID_SPORT_REPORT_DATA = 0x29, - MSGCENTER_TYPE_ID_SET_ONLINELOG_CHANNEL = 0x30, - MSGCENTER_TYPE_ID_SET_ONLINELOG_LEVEL = 0x31, - MSGCENTER_TYPE_ID_ONLINELOG_REPORT = 0x33, - MSGCENTER_TYPE_ID_OTA_INIT = 0x34, - MSGCENTER_TYPE_ID_OTA_UPDATE = 0x35, - MSGCENTER_TYPE_ID_ON_FIND_PHONE = 0x36, - MSGCENTER_TYPE_ID_OFF_FIND_PHONE = 0x37, - MSGCENTER_TYPE_ID_SLEEP_DATA = 0x38, - MSGCENTER_TYPE_ID_ON_CAMERA = 0x39, - MSGCENTER_TYPE_ID_CAMERA_WATCH_EXIT = 0x40, - MSGCENTER_TYPE_ID_CAMERA_PHONE_EXIT = 0x41, - MSGCENTER_TYPE_ID_CAMERA_CONNECT_PHONE = 0x42, - MSGCENTER_TYPE_ID_CAMERA_CONNECT_PHONE_SUCCESS = 0x43, + MSGCENTER_TYPE_ID_GET_BATTERY_LEVEL = 0x01, + MSGCENTER_TYPE_ID_GET_STORAGE_INFO = 0x02, + MSGCENTER_TYPE_ID_GET_PRODUCT_INFO = 0x03, + MSGCENTER_TYPE_ID_GET_LANGUAGE_ID = 0x04, + MSGCENTER_TYPE_ID_SET_LANGUAGE_ID = 0x05, + MSGCENTER_TYPE_ID_DEVICE_HEARTRATE = 0x06, + MSGCENTER_TYPE_ID_DEVICE_STEPDATA = 0x07, + MSGCENTER_TYPE_ID_DEVICE_BLOODOXYGEN = 0x08, + MSGCENTER_TYPE_ID_SPORT_ACTION = 0x09, + MSGCENTER_TYPE_ID_SPORT_REPORT_ACTION = 0x0a, + MSGCENTER_TYPE_ID_SPORT_REPORT_DATA = 0x0b, + MSGCENTER_TYPE_ID_SPORT_GET_RECORD = 0x0c, + MSGCENTER_TYPE_ID_SET_ONLINELOG_CHANNEL = 0x0d, + MSGCENTER_TYPE_ID_SET_ONLINELOG_LEVEL = 0x0e, + MSGCENTER_TYPE_ID_OFFLINE_LOG_SWITCH = 0x0f, + MSGCENTER_TYPE_ID_ONLINELOG_REPORT = 0x10, + MSGCENTER_TYPE_ID_START_FIND_PHONE = 0x11, + MSGCENTER_TYPE_ID_STOP_FIND_PHONE = 0x12, + MSGCENTER_TYPE_ID_SLEEP_DATA = 0x13, + MSGCENTER_TYPE_ID_ON_CAMERA = 0x14, + MSGCENTER_TYPE_ID_WATCH_EXIT_CAMERA = 0x15, + MSGCENTER_TYPE_ID_PHONE_EXIT_CAMERA = 0x16, + MSGCENTER_TYPE_ID_CAMERA_CONNECTING_PHONE = 0x17, + MSGCENTER_TYPE_ID_CAMERA_CONNECTED_PHONE = 0x18, + MSGCENTER_TYPE_ID_OTA_INIT = 0x19, + MSGCENTER_TYPE_ID_OTA_UPDATE = 0x1a, + MSGCENTER_TYPE_ID_SYNC_WEATHER_REQ = 0x1b, + MSGCENTER_TYPE_ID_SYNC_WEATHER_REC = 0x1c, + MSGCENTER_TYPE_ID_SYNC_DATE_REQ = 0x1d, + MSGCENTER_TYPE_ID_SYNC_DATE_REC = 0x1e, } msg_center_device_type_id_t; // 获取电量 @@ -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); // 获取语言 errcode_t msg_center_get_language_id(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); -// 获取音量 -errcode_t msg_center_get_volume_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); // 设置语言 errcode_t msg_center_set_language_id(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); -// 设置音量 -errcode_t msg_center_set_volume_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); // ota初始化 errcode_t msg_center_ota_init(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); // ota检测和本地升级 @@ -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); errcode_t msg_center_device_bloodoxygen(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); -/* LOCATION */ -errcode_t msg_center_location_get_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); -errcode_t msg_center_location_start(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); -errcode_t msg_center_location_stop(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); - /* SPORT */ errcode_t msg_center_sport_action(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); -errcode_t msg_center_sport_get_data(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); -errcode_t msg_center_sport_report_data(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); +errcode_t msg_center_sport_get_record(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); /* 离线日志开关 */ errcode_t msg_center_offline_log_switch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); @@ -94,6 +76,12 @@ errcode_t msg_center_offline_log_switch(uint8_t cmd_id, uint8_t type, void *usr_ /* 查找手机 */ errcode_t msg_center_device_findphone(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); +/* 天气 */ +errcode_t msg_center_device_sync_weather_rec(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); + +/* 日历 */ +errcode_t msg_center_device_sync_date_rec(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); + /* CAMERA */ errcode_t msg_center_camera_exit(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); errcode_t msg_center_camera_online(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); diff --git a/code/sdk/application/wearable/n9/service/msg_center/brandy-auto-ota-cli/libmsg_center.a b/code/sdk/application/wearable/n9/service/msg_center/brandy-auto-ota-cli/libmsg_center.a index c6b588af40311fc7db1cf3e70d2f76cdbdef0c06..f787fb87649a4834e982571e1255c1358dd6d2a5 100644 GIT binary patch delta 7272 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 delta 6917 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 delta 6917 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 diff --git a/code/sdk/application/wearable/n9/service/msg_center/brandy-native-js/libmsg_center.a b/code/sdk/application/wearable/n9/service/msg_center/brandy-native-js/libmsg_center.a index b1e105a9cc75ad88d729fd204dc0ae272780a222..7e69f1c2ac4f37e42073f609c37fb72afc095b63 100644 GIT binary patch delta 7271 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 BD9-=@ delta 6917 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 diff --git a/code/sdk/application/wearable/n9/service/msg_center/brandy-xts/libmsg_center.a b/code/sdk/application/wearable/n9/service/msg_center/brandy-xts/libmsg_center.a index 7f842a9c972b66c06ec3fe9343c9f081e8d1006c..26ab44fdcf29be3c9965effb482d0321802a6b46 100644 GIT binary patch delta 7272 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 delta 6917 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 #include "components/ui_view_group.h" #include "components/ui_view_group.h" #include "components/ui_label.h" +#include "components/ui_image_view.h" #include "components/ui_label_button_ext.h" +#include "components/ui_scroll_view.h" #include "graphic_timer.h" -#include struct PhoneMsg { std::string appName; @@ -29,11 +31,14 @@ public: static void UpDatePhoneMsg(std::string appName, std::string titile, std::string content); static void StartPhoneMsgTimer(int32_t interval); static void DisablePhoneMsgTimer(); + static void ShowDateMsg(std::string appName, std::string title, std::string content); + static void SetControl(); static const uint32_t notifyTime = 5000; private: - static UIViewGroup *phoneMsgView_; + static UIScrollView *phoneMsgView_; static UILabel *appNameLabel_; + static UIImageView *appIcon_; static UILabel *titleLabel_; static UILabel *contentLabel_; static GraphicTimer *phoneMsgNotifyStop_; diff --git a/code/sdk/application/wearable/n9/service/msg_center/src/common/msg_center_utils.cpp b/code/sdk/application/wearable/n9/service/msg_center/src/common/msg_center_utils.cpp index 56f8f9e11..6647df929 100644 --- a/code/sdk/application/wearable/n9/service/msg_center/src/common/msg_center_utils.cpp +++ b/code/sdk/application/wearable/n9/service/msg_center/src/common/msg_center_utils.cpp @@ -14,6 +14,7 @@ #include "element_name.h" #include "abilityms_slite_client.h" #include +#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; } diff --git a/code/sdk/application/wearable/n9/service/msg_center/src/notify/phone_msg_notification.cpp b/code/sdk/application/wearable/n9/service/msg_center/src/notify/phone_msg_notification.cpp index 73000e332..9000a1d69 100644 --- a/code/sdk/application/wearable/n9/service/msg_center/src/notify/phone_msg_notification.cpp +++ b/code/sdk/application/wearable/n9/service/msg_center/src/notify/phone_msg_notification.cpp @@ -8,42 +8,46 @@ #include "ohos_timer.h" #include "wearable_log.h" #include -#include "message/include/MessageModel.h" +#include "main/MessageModel.h" +#include "ui_resource_message.h" +#include "common/image_cache_manager.h" +#include "main/LoadImg.h" namespace OHOS { // 三方应用名 -static const uint32_t APP_NAME_POS_X = 180; -static const uint32_t APP_NAME_POS_Y = 82; -static const uint32_t APP_NAME_WIDTH = 200; -static const uint32_t APP_NAME_HEIGHT = 60; +static const uint32_t APP_NAME_POS_X = 170; +static const uint32_t APP_NAME_POS_Y = 40; +static const uint32_t APP_NAME_WIDTH = 160; +static const uint32_t APP_NAME_HEIGHT = 53; // 三方消息主题 -static const uint32_t MSG_TITLE_POS_X = 81; -static const uint32_t MSG_TITLE_POS_Y = 122; -static const uint32_t MSG_TITLE_WIDTH = 409; -static const uint32_t MSG_TITLE_HEIGHT = 83; +static const uint32_t MSG_TITLE_POS_X = 15; +static const uint32_t MSG_TITLE_POS_Y = 138; +static const uint32_t MSG_TITLE_WIDTH = 370; +static const uint32_t MSG_TITLE_HEIGHT = 50; // 三方消息内容 -static const uint32_t MSG_CONTENT_POS_X = 78; -static const uint32_t MSG_CONTENT_POS_Y = 176; -static const uint32_t MSG_CONTENT_WIDTH = 457; -static const uint32_t MSG_CONTENT_HEIGHT = 269; -// 取消通知 -static const uint32_t CANCEL_BUTTON_POS_X = 150; -static const uint32_t CANCEL_BUTTON_POS_Y = 323; -static const uint32_t CANCEL_BUTTON_WIDTH = 165; -static const uint32_t CANCEL_BUTTON_HEIGHT = 44; +static const uint32_t MSG_CONTENT_POS_X = 15; +static const uint32_t MSG_CONTENT_POS_Y = 201; +static const uint32_t MSG_CONTENT_WIDTH = 370; +static const uint32_t MSG_CONTENT_HEIGHT = 200; +// 通知图标 +static const uint32_t MSG_ICON_POS_X = 130; +static const uint32_t MSG_ICON_POS_Y = 50; +static const uint32_t MSG_ICON_WIDTH = 40; +static const uint32_t MSG_ICON_HEIGHT = 40; +static const uint32_t MSG_PAGE_WIDTH = 454; // 设置字体大小 -static const uint32_t APP_NAME_FONT_SIZE = 20; -static const uint32_t MSG_TITLE_FONT_SIZE = 20; -static const uint32_t MSG_CONTENT_FONT_SIZE = 40; +static const uint32_t APP_NAME_FONT_SIZE = 38; +static const uint32_t MSG_TITLE_FONT_SIZE = 36; +static const uint32_t MSG_CONTENT_FONT_SIZE = 36; -UIViewGroup *PhoneMsgView::phoneMsgView_ = nullptr; +UIScrollView *PhoneMsgView::phoneMsgView_ = nullptr; UILabel *PhoneMsgView::appNameLabel_ = nullptr; +UIImageView *PhoneMsgView::appIcon_ = nullptr; UILabel *PhoneMsgView::titleLabel_ = nullptr; UILabel *PhoneMsgView::contentLabel_ = nullptr; GraphicTimer *PhoneMsgView::phoneMsgNotifyStop_ = nullptr; PhoneMsg PhoneMsgView::phoneMsg_; -UILabelButtonExt *PhoneMsgView::cancelButton_ = nullptr; void PhoneMsgStopNotifyCallback(void *data) { @@ -71,9 +75,11 @@ void PhoneMsgView::DisablePhoneMsgTimer() UIViewGroup *PhoneMsgView::CreatePhoneMsgView() { if (phoneMsgView_ == nullptr) { - phoneMsgView_ = new UIViewGroup(); - phoneMsgView_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); + phoneMsgView_ = new UIScrollView(); + phoneMsgView_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); phoneMsgView_->SetViewId("phoneMsgView"); + phoneMsgView_->SetThrowDrag(true); + phoneMsgView_->SetScrollBlankSize(40); } if (appNameLabel_ == nullptr) { @@ -83,20 +89,22 @@ UIViewGroup *PhoneMsgView::CreatePhoneMsgView() appNameLabel_->SetText(phoneMsg_.appName.c_str()); appNameLabel_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, APP_NAME_FONT_SIZE); appNameLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - // Add to rootView phoneMsgView_->Add(appNameLabel_); - appNameLabel_->SetVisible(true); + + if (appIcon_ == nullptr) { + appIcon_ = new UIImageView(); + } + appIcon_->SetPosition(MSG_ICON_POS_X, MSG_ICON_POS_Y, MSG_ICON_WIDTH, MSG_ICON_HEIGHT); + phoneMsgView_->Add(appIcon_); + appIcon_->SetVisible(true); if (titleLabel_ == nullptr) { titleLabel_ = new UILabel(); } titleLabel_->SetPosition(MSG_TITLE_POS_X, MSG_TITLE_POS_Y, MSG_TITLE_WIDTH, MSG_TITLE_HEIGHT); - titleLabel_->SetText(phoneMsg_.msgTitle.c_str()); titleLabel_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, MSG_TITLE_FONT_SIZE); titleLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - // Add to rootView phoneMsgView_->Add(titleLabel_); - titleLabel_->SetVisible(true); if (contentLabel_ == nullptr) { contentLabel_ = new UILabel(); @@ -105,21 +113,11 @@ UIViewGroup *PhoneMsgView::CreatePhoneMsgView() contentLabel_->SetText(phoneMsg_.msgContent.c_str()); contentLabel_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, MSG_CONTENT_FONT_SIZE); contentLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - // Add to rootView + contentLabel_->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); phoneMsgView_->Add(contentLabel_); - contentLabel_->SetVisible(true); - - if (cancelButton_ == nullptr) { - cancelButton_ = new UILabelButtonExt(); - } - cancelButton_->SetPosition(CANCEL_BUTTON_POS_X, CANCEL_BUTTON_POS_Y, CANCEL_BUTTON_WIDTH, CANCEL_BUTTON_HEIGHT); - cancelButton_->SetViewId("cancelButton"); - cancelButton_->SetText("取消通知"); - cancelButton_->SetTouchable(true); - cancelButton_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, APP_NAME_FONT_SIZE); - // Add to rootView - phoneMsgView_->Add(cancelButton_); + SetControl(); + phoneMsgView_->Invalidate(); phoneMsgView_->SetDraggable(true); phoneMsgView_->SetTouchable(true); UIView::OnDragListener *dragListener = @@ -128,29 +126,78 @@ UIViewGroup *PhoneMsgView::CreatePhoneMsgView() static_cast(PhoneMsgViewEventListener::GetInstance()); phoneMsgView_->SetOnDragListener(dragListener); phoneMsgView_->SetOnClickListener(clickListener); - cancelButton_->SetOnClickListener(clickListener); StartPhoneMsgTimer(PhoneMsgView::notifyTime); NotificationManager::GetInstance()->RegisterNotifyCleanupFunction(FreePhoneMsgView); return phoneMsgView_; } +void PhoneMsgView::SetControl() +{ + if (strcmp(phoneMsg_.appName.c_str(), "微信") == 0) { + LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_WX); + } else if (strcmp(phoneMsg_.appName.c_str(), "QQ") == 0) { + LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_QQ); + } else if (strcmp(phoneMsg_.appName.c_str(), "抖音") == 0) { + LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_DY); + } else if (strcmp(phoneMsg_.appName.c_str(), "日历") == 0) { + LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_CALENDAR); + } else if (strcmp(phoneMsg_.appName.c_str(), "信息") == 0) { + LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_DUANXIN); + } else if (strcmp(phoneMsg_.appName.c_str(), "短信") == 0) { + LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_DUANXIN); + } else if (strcmp(phoneMsg_.appName.c_str(), "今日头条") == 0) { + LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_TOUTIAO); + } else if (strcmp(phoneMsg_.appName.c_str(), "微博") == 0) { + LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_WB); + } else if (strcmp(phoneMsg_.appName.c_str(), "小红书") == 0) { + LOADIMG::LoadImageViewImg(appIcon_, MESSAGE_IMAGE, IMAGE_MESSAGE_XHS); + } + int controlOffset = 10; + int cut = 2; + int posX = (MSG_PAGE_WIDTH - appNameLabel_->GetTextWidth() - appIcon_->GetWidth() - controlOffset) / cut; + appIcon_->SetX(posX); + appNameLabel_->SetWidth(appNameLabel_->GetTextWidth()); + appNameLabel_->SetX(posX + appIcon_->GetWidth() + controlOffset); + + titleLabel_->SetText(phoneMsg_.msgTitle.c_str()); + if (titleLabel_->GetTextWidth() > MSG_TITLE_WIDTH) { + titleLabel_->SetWidth(MSG_TITLE_WIDTH); + } else { + titleLabel_->SetWidth(titleLabel_->GetTextWidth()); + } + titleLabel_->SetX((MSG_PAGE_WIDTH - titleLabel_->GetWidth()) / cut); + + int height = contentLabel_->GetTextHeight(); + contentLabel_->SetHeight(height); + posX = (MSG_PAGE_WIDTH - contentLabel_->GetWidth()) / cut; + contentLabel_->SetX(posX); +} + void PhoneMsgView::FreePhoneMsgView(void) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FreePhoneMsgView"); if (phoneMsgView_ != nullptr) { DisablePhoneMsgTimer(); phoneMsgView_->RemoveAll(); + RootView::GetInstance()->Remove(phoneMsgView_); + delete phoneMsgView_; + phoneMsgView_ = nullptr; + } + if (appNameLabel_ != nullptr) { delete appNameLabel_; appNameLabel_ = nullptr; + } + if (appIcon_ != nullptr) { + delete appIcon_; + appIcon_ = nullptr; + } + if (titleLabel_ != nullptr) { delete titleLabel_; titleLabel_ = nullptr; + } + if (contentLabel_ != nullptr) { delete contentLabel_; contentLabel_ = nullptr; - delete cancelButton_; - cancelButton_ = nullptr; - RootView::GetInstance()->Remove(phoneMsgView_); - delete phoneMsgView_; - phoneMsgView_ = nullptr; } } @@ -159,9 +206,23 @@ void PhoneMsgView::UpDatePhoneMsg(std::string appName, std::string titile, std:: phoneMsg_.appName = appName; phoneMsg_.msgTitle = titile; phoneMsg_.msgContent = content; - #ifdef FD230_650_0723 - MessageModel::GetInstance().GetMessageInfo(appName, titile, content); - #endif + MessageModel::GetInstance().SaveMsgToModel(appName, titile, content); + MessageModel::GetInstance().SetMsgListItems(); +} + +static OHOS::UIViewGroup* ShowMsgNotify(void) +{ + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "ShowMsgNotify"); + return OHOS::PhoneMsgView::CreatePhoneMsgView(); +} + +void PhoneMsgView::ShowDateMsg(std::string appName, std::string title, std::string content) +{ + const uint16_t TOPIC_DEMO_ALL_MSG = 10001; + UpDatePhoneMsg(appName, title, content); + int prio = 2; + NotificationManager::GetInstance()->SetNotifyPriority(prio); + NotificationManager::GetInstance()->ShowNotify(ShowMsgNotify, static_cast(TOPIC_DEMO_ALL_MSG), true); } PhoneMsgViewEventListener::PhoneMsgViewEventListener() @@ -190,7 +251,7 @@ bool PhoneMsgViewEventListener::OnDragEnd(UIView &view, const DragEvent &event) std::string viewId = view.GetViewId(); WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PhoneMsgViewEventListener OnDragEnd %s", viewId.c_str()); if (viewId == "phoneMsgView") { - NotificationManager::GetInstance()->StopNotify(); + // NotificationManager::GetInstance()->StopNotify(); } return true; } 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 index 000000000..b55356a22 --- /dev/null +++ b/code/sdk/application/wearable/n9/service/remote_msg/phone_contacts.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2025-2025. All rights reserved. + * Description: PhoneContacts + * Create: 2025-07-12 + */ + +#include "wearable_log.h" +#include "message.h" +#include "PhoneMenuSync.h" +#include "phone_contacts.h" + +#ifdef __cplusplus +extern "C" { +#endif +uint8_t updata_contacts(Request *request) +{ + std::string content((char *)request->data, request->len); + uint8_t ret = OHOS::PhoneMenuSync::ParseContactsMsg(content); + if (ret != OHOS::OK) { + return ret; + } + OHOS::PhoneMenuSync::WriteFileContact(OHOS::CONTACTS_FILE_PATH, content); + return 0; +} + +uint8_t lookup_contacts(std::string &lookupContacts) +{ + return OHOS::PhoneMenuSync::LookContacts(lookupContacts); +} +#ifdef __cplusplus +} +#endif 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 index 000000000..8e517a3f8 --- /dev/null +++ b/code/sdk/application/wearable/n9/service/remote_msg/phone_contacts.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2025-2025. All rights reserved. + * Description: PhoneContacts + * Create: 2025-07-12 + */ + +#ifndef PHONE_CONTACTS_H +#define PHONE_CONTACTS_H +#include +#include "message.h" +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif +uint8_t updata_contacts(Request *request); // 同步手机侧联系人到表侧 +uint8_t lookup_contacts(std::string &lookupContacts); // 查询表侧联系人到手机 +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif +#endif /* PHONE_CONTACTS_H */ \ No newline at end of file diff --git a/code/sdk/application/wearable/n9/service/remote_msg/remote_msg.cpp b/code/sdk/application/wearable/n9/service/remote_msg/remote_msg.cpp index a33965430..5f8a4509f 100644 --- a/code/sdk/application/wearable/n9/service/remote_msg/remote_msg.cpp +++ b/code/sdk/application/wearable/n9/service/remote_msg/remote_msg.cpp @@ -1,8 +1,9 @@ /* - * Copyright (c) CompanyNameMagicTag 2023-2023. All rights reserved. + * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2025-2025. All rights reserved. * Description: ota upgrade handle. * This file should be changed only infrequently and with great care. */ + #include #include "securec.h" #include "msg_center.h" @@ -13,7 +14,9 @@ #include "msg_center.h" #include "msg_center_common.h" #include "ohos_init.h" +#include "phone_contacts.h" #include "remote_msg.h" + #ifdef __cplusplus extern "C" { #endif @@ -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}, {MSGCENTER_CMD_PHONE_MSG, MSGCENTER_TYPE_ID_MSG_SMS, msg_center_phone_msg_rec}, {MSGCENTER_CMD_PHONE_MSG, MSGCENTER_TYPE_ID_MSG_PHONE, msg_center_phone_msg_rec}, + {MSGCENTER_CMD_PHONE_MSG, MSGCENTER_TYPE_ID_UPDATE_CONTACTS, msg_center_update_contacts}, + {MSGCENTER_CMD_PHONE_MSG, MSGCENTER_TYPE_ID_LOOKUP_CONTACTS, msg_center_lookup_contacts}, }; errcode_t msg_center_phone_msg_rec(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) @@ -45,6 +50,50 @@ errcode_t msg_center_phone_msg_rec(uint8_t cmd_id, uint8_t type, void *usr_data, return ERRCODE_SUCC; } +errcode_t msg_center_update_contacts(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) +{ + uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data); + uint16_t payload_len = usr_len - tl_len; + uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data); + errcode_t ret = ERRCODE_SUCC; + uint8_t msg_result = 0; + WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "update_contacts, cmd_id = %d, type = %d\r\n", cmd_id, type); + Request request; + request.msgId = type; + request.len = payload_len; + request.data = tlv_payload; + updata_contacts(&request); + ret = msg_center_send_data(cmd_id, type, &msg_result, sizeof(msg_result)); + if (ret != ERRCODE_SUCC) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_update_contacts fail, ret = %d\r\n", ret); + return ERRCODE_FAIL; + } + return ERRCODE_SUCC; +} + +errcode_t msg_center_lookup_contacts(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) +{ + uint8_t tl_len = msg_center_get_tlv_tl_len(usr_data); + uint16_t payload_len = usr_len - tl_len; + uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data); + errcode_t ret = ERRCODE_SUCC; + uint8_t msg_result = 0; + WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "lookup_contacts, cmd_id = %d, type = %d\r\n", cmd_id, type); + std::string lookupContacts; + uint8_t result = lookup_contacts(lookupContacts); + if (!result) { + ret = msg_center_send_data(cmd_id, type, (void *)lookupContacts.c_str(), lookupContacts.size()); + } else { + ret = msg_center_send_data(cmd_id, type, (void *)&result, 1); + } + if (ret != ERRCODE_SUCC) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_lookup_contacts fail, ret = %d\r\n", ret); + return ERRCODE_FAIL; + } + return ERRCODE_SUCC; +} + + errcode_t msg_center_phone_msg_type_dispatch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len) { WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_phone_msg_type_dispatch, cmd_id = %d, type = %d\r\n", diff --git a/code/sdk/application/wearable/n9/service/remote_msg/remote_msg.h b/code/sdk/application/wearable/n9/service/remote_msg/remote_msg.h index 2787377ff..e974e4c31 100644 --- a/code/sdk/application/wearable/n9/service/remote_msg/remote_msg.h +++ b/code/sdk/application/wearable/n9/service/remote_msg/remote_msg.h @@ -20,10 +20,14 @@ typedef enum msg_center_phone_msg_type_id { MSGCENTER_TYPE_ID_MSG_THIRD_APP = 0x1, // 三方应用消息 MSGCENTER_TYPE_ID_MSG_SMS, // 短信 MSGCENTER_TYPE_ID_MSG_PHONE, // 电话 + MSGCENTER_TYPE_ID_UPDATE_CONTACTS, + MSGCENTER_TYPE_ID_LOOKUP_CONTACTS, MSGCENTER_TYPE_ID_MSG_MAX, } msg_center_msg_notify_type_id_t; errcode_t msg_center_phone_msg_rec(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); +errcode_t msg_center_update_contacts(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); +errcode_t msg_center_lookup_contacts(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len); #ifdef __cplusplus #if __cplusplus 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 index 000000000..c2945d201 --- /dev/null +++ b/code/sdk/application/wearable/wearable/ohos_deps/wearable_log.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) CompanyNameMagicTag 2023-2023. All rights reserved. + * Description: Wearable log header file. + * Author: + * Create: + */ + +#ifndef WEARABLE_LOG_H +#define WEARABLE_LOG_H + +#if !defined(SW_UART_DEBUG) && !defined(SW_RTT_DEBUG) +#include "soc_diag_util.h" +#include "log_oam_logger.h" +#include "log_def.h" +#else +#include "debug_print.h" +#endif +#include "wearable_onlinelog.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif + +/** + * @brief Enumerates logging module types. + * + * The module type must be globally unique. A maximum of 64 module types can be defined. + * + * @since 1.0 + * @version 1.0 + */ +typedef enum { + /** applications */ + WEARABLE_LOG_MODULE_APP = 0, + /** Launcher Framework */ + WEARABLE_LOG_MODULE_LAUNCHER_FWK, + /** Main Service */ + WEARABLE_LOG_MODULE_MAIN_SERVICE, + /** Broadcast Service */ + WEARABLE_LOG_MODULE_BROADCASE_SERVICE, + /** Atomic Ability Framework */ + WEARABLE_LOG_MODULE_AAFWK, + /** smart voice */ + WEARABLE_LOG_MODULE_SMART_VOICE, + /* UI SERVICE */ + WEARABLE_LOG_MODULE_UI_SERVICE, + /* msg_center */ + WEARABLE_LOG_MODULE_MSG_CENTER, + + WEARABLE_LOG_MODULE_MAX +} WearableLogModuleType; + +#if !defined(SW_UART_DEBUG) && !defined(SW_RTT_DEBUG) && !defined(CONFIG_ONLINE_LOG) +#define WEARABLE_LOGE(mod, fmt, arg...) uapi_diag_error_log(0, fmt, ##arg) +#define WEARABLE_LOGW(mod, fmt, arg...) uapi_diag_warning_log(0, fmt, ##arg) +#define WEARABLE_LOGI(mod, fmt, arg...) uapi_diag_info_log(0, fmt, ##arg) +#ifdef WEARABLE_LOG_DEBUG +#define WEARABLE_LOGD(mod, fmt, arg...) uapi_diag_debug_log(0, fmt, ##arg) +#else +#define WEARABLE_LOGD(mod, fmt, arg...) +#endif +#elif (CONFIG_ONLINE_LOG == 1) && !defined(_WIN32) +#define WEARABLE_LOGE(mod, fmt, arg...) ONLINE_PRINT(ONLINE_ERROR, fmt "\n", ##arg) +#define WEARABLE_LOGW(mod, fmt, arg...) ONLINE_PRINT(ONLINE_WARN, fmt "\n", ##arg) +#define WEARABLE_LOGI(mod, fmt, arg...) ONLINE_PRINT(ONLINE_INFO, fmt "\n", ##arg) +#ifdef WEARABLE_LOG_DEBUG +#define WEARABLE_LOGD(mod, fmt, arg...) ONLINE_PRINT(ONLINE_DEBUG, fmt "\n", ##arg) +#else +#define WEARABLE_LOGD(mod, fmt, arg...) +#endif +#else +#define WEARABLE_LOGE(mod, fmt, arg...) PRINT("[WEARABLE E/] " fmt "\n", ##arg) +#define WEARABLE_LOGW(mod, fmt, arg...) PRINT("[WEARABLE W/] " fmt "\n", ##arg) +#define WEARABLE_LOGI(mod, fmt, arg...) PRINT("[WEARABLE I/] " fmt "\n", ##arg) +#ifdef WEARABLE_LOG_DEBUG +#define WEARABLE_LOGD(mod, fmt, arg...) PRINT("[WEARABLE D/] " fmt "\n", ##arg) +#else +#define WEARABLE_LOGD(mod, fmt, arg...) +#endif +#endif + +#define CHECK_NULL_AND_RETURN(pointer, mod, fmt) \ + do { \ + if ((pointer) == nullptr) { \ + WEARABLE_LOGE((mod), (fmt)); \ + return; \ + } \ + } while (0) + +#define CHECK_NULL_AND_RETURN_NULL(pointer, mod, fmt) \ + do { \ + if ((pointer) == nullptr) { \ + WEARABLE_LOGE((mod), (fmt)); \ + return nullptr; \ + } \ + } while (0) + +#define CHECK_NULL_AND_RETURN_CODE(pointer, mod, fmt, code) \ + do { \ + if ((pointer) == nullptr) { \ + WEARABLE_LOGE((mod), (fmt)); \ + return (code); \ + } \ + } while (0) + +#define DELETE_IF_NOT_NULL(pointer) \ + do { \ + if ((pointer) != nullptr) { \ + delete (pointer); \ + (pointer) = nullptr; \ + } \ + } while (0) + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif + +#endif -- 2.17.1