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
${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
/*\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
#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
#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
}\r
}\r
\r
-void PublishTestData()\r
+static void PublishTestData()\r
{\r
uint32 tick = GetOSTick(5000); // 5秒发布一次测试数据\r
if (g_publishTestDataHandle == nullptr) {\r
{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
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
/*\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
#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
}\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
}\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
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
\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
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
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
\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
/*\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
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
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
/* 查找手机 */\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
--- /dev/null
+/*
+ * 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
/*\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
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
#include "element_name.h"
#include "abilityms_slite_client.h"
#include <string.h>
+#include "appexecfwk_errors.h"
#ifdef __cplusplus
extern "C" {
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;
}
#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
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
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
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
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
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
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
--- /dev/null
+/*\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
--- /dev/null
+/*\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
/*\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
#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
{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
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
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
--- /dev/null
+/*\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