add_subdirectory_if_exist(xiaodu_voice)
add_subdirectory_if_exist(xiaodu_navi_vector)
add_subdirectory_if_exist(hc_demo_msg)
+add_subdirectory_if_exist(device_msg)
+add_subdirectory_if_exist(remote_msg)
add_subdirectory_if_exist(auto_ota_msg)
add_subdirectory_if_exist(alipay_msg)
add_subdirectory_if_exist(app_store)
${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/innerkits
${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits
${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits/gfx_utils
- ${ROOT_DIR}/application/wearable/nativeapp/nativeui/uiservice/include
)
set(SOURCES
for (int32_t i = 0; i < count; i++) {
(void)strncpy_s((char*)unitInfo[i].pkgName, PKG_NAME_MAX_LENGTH,
bundleInfos[i].bundleName, strlen(bundleInfos[i].bundleName));
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AppStoreGetPkgList pkgName[%d] = %s", i, unitInfo[i].pkgName);
+ (void)strncpy_s((char*)unitInfo[i].versionName, VERSION_NAME_MAX_LENGTH,
+ bundleInfos[i].versionName, strlen(bundleInfos[i].versionName));
+ (void)strncpy_s((char*)unitInfo[i].labelName, LABEL_NAME_MAX_LENGTH,
+ bundleInfos[i].label, strlen(bundleInfos[i].label));
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AppStoreGetPkgList pkgName[%d] = %s, versionName[%d] = %s,\
+ labeName[%d] = %s", i, unitInfo[i].pkgName, i, unitInfo[i].versionName, i,
+ unitInfo[i].labelName);
unitInfo[i].versionCode = bundleInfos[i].versionCode;
}
ret = msg_center_send_data(MSGCENTER_CMD_APP_STORE, type, infoList, len);
}
return ret;
}
+
+errcode_t AppStoreGetBundleInfo(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)
+{
+ BundleInfo bundleInfo;
+ int32_t ret = ERRCODE_FAIL;
+
+ 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);
+ char *bundleName = (char *)malloc(payload_len + 1);
+ (void)memcpy_s(bundleName, payload_len, tlv_payload, payload_len);
+ bundleName[payload_len] = '\0';
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bundleName = %s", bundleName);
+
+ uint8_t bundleRet = OHOS::BundleMsClient::GetInstance().GetBundleInfo(bundleName, 0, &bundleInfo);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "get bundleInfo, ret = %d", bundleRet);
+
+ int32_t len = sizeof(PkgUnitInfo);
+ PkgUnitInfo *info = (PkgUnitInfo *)malloc(len);
+ if (info != nullptr) {
+ memset_s(info, len, 0, len);
+ (void)strncpy_s((char*)info->pkgName, PKG_NAME_MAX_LENGTH, bundleInfo.bundleName,
+ strlen(bundleInfo.bundleName));
+ (void)strncpy_s((char*)info->versionName, VERSION_NAME_MAX_LENGTH, bundleInfo.versionName,
+ strlen(bundleInfo.versionName));
+ (void)strncpy_s((char*)info->labelName, LABEL_NAME_MAX_LENGTH, bundleInfo.label, strlen(bundleInfo.label));
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AppStoreGetBundleInfo pkgName = %s, versionName = %s, labeName = %s",
+ info->pkgName, info->versionName, info->labelName);
+ info->versionCode = bundleInfo.versionCode;
+ ret = msg_center_send_data(cmd_id, type, info, len);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "AppStoreGetBundleInfo send data ret = 0x%x", ret);
+ free(info);
+ free(bundleName);
+ }
+
+ return ret;
+}
///////////////////////////////////////////////////////////////////////////////////
#endif
#define PKG_NAME_MAX_LENGTH 128
+#define VERSION_NAME_MAX_LENGTH 128
+#define LABEL_NAME_MAX_LENGTH 256
#define FS_DIR_APP_STORE "/user/app_store/"
typedef enum {
APP_STORE_OPERATION = 0x01,
APP_STORE_NOTIFY_PROGRESS = 0x02,
APP_STORE_GET_PKG_LIST = 0x03,
+ APP_STORE_GET_BUNDLEINFO = 0x04,
} AppStoreType;
typedef enum {
typedef struct {
uint8_t pkgName[PKG_NAME_MAX_LENGTH];
int32_t versionCode;
+ uint8_t versionName[VERSION_NAME_MAX_LENGTH];
+ uint8_t labelName[LABEL_NAME_MAX_LENGTH];
} PkgUnitInfo;
errcode_t AppStorePkgOperation(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);
errcode_t AppStoreGetPkgList(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);
+errcode_t AppStoreGetBundleInfo(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);
#ifdef BLE_INSTRUCT
void ble_app_store_init(void);
static const msg_center_cmd_map_t g_appStoreTbl[] = {
{ MSGCENTER_CMD_APP_STORE, APP_STORE_OPERATION, AppStorePkgOperation },
{ MSGCENTER_CMD_APP_STORE, APP_STORE_GET_PKG_LIST, AppStoreGetPkgList },
+ { MSGCENTER_CMD_APP_STORE, APP_STORE_GET_BUNDLEINFO, AppStoreGetBundleInfo },
};
errcode_t AppStoreTypeDispatch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)
TOPIC_EVENT_HFP_FINISHED,\r
TOPIC_EVENT_HFP_PHONE_TO_WATCH,\r
TOPIC_EVENT_HFP_WATCH_TO_PHONE,\r
+ TOPIC_EVENT_BLOODOXYGEN_UPDATA,\r
+ TOPIC_EVENT_SPORT_DISTANCE,\r
+ TOPIC_EVENT_LOCATION,\r
TOPIC_EVENT_HFP_HINT,\r
// #ifdef SUPPORT_CYWEE_SERVICE\r
TOPIC_EVENT_ACTIVITY_UPDATE,\r
{TOPIC_EVENT_HFP_FINISHED, A_CORE_MASK, 1},
{TOPIC_EVENT_HFP_PHONE_TO_WATCH, A_CORE_MASK, 1},
{TOPIC_EVENT_HFP_WATCH_TO_PHONE, A_CORE_MASK, 1},
+ {TOPIC_EVENT_BLOODOXYGEN_UPDATA, A_CORE_MASK, 1},
+ {TOPIC_EVENT_SPORT_DISTANCE, A_CORE_MASK, 1},
+ {TOPIC_EVENT_LOCATION, A_CORE_MASK, 1},
{TOPIC_EVENT_DEVICE_BIND, A_CORE_MASK, 1},
{TOPIC_EVENT_BLE_TRANSMIT, A_CORE_MASK, 1},
{TOPIC_EVENT_CHARGE_PLUG, A_CORE_MASK, 1},
--- /dev/null
+set(COMPONENT_NAME "device_msg")\r
+\r
+set(PUBLIC_HEADER\r
+)\r
+\r
+set(PRIVATE_HEADER\r
+ ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/innerkits\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/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}/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
+)\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
+\r
+set(COMPONENT_CCFLAGS\r
+ -std=c++11\r
+ -Wno-missing-field-initializers\r
+)\r
+\r
+set(WHOLE_LINK\r
+ true\r
+)\r
+\r
+set(PUBLIC_DEFINES\r
+)\r
+\r
+set(PRIVATE_DEFINES\r
+ APP_PLATFORM_WATCHGT\r
+ CONFIG_ACELITE_ENABLE\r
+)\r
+\r
+build_component()\r
+\r
+\r
--- /dev/null
+/*\r
+ * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.\r
+ */\r
+#include "device_location.h"\r
+#include "wearable_log.h"\r
+#include "locator.h"\r
+\r
+using namespace OHOS::Location;\r
+\r
+LocationInfo_t g_locationInfo = {0};\r
+\r
+class GnssStatusCallback : public IGnssStatusCallback {\r
+public:\r
+ GnssStatusCallback() {}\r
+ ~GnssStatusCallback() {}\r
+\r
+ void OnStatusChange(const std::shared_ptr<SatelliteStatus> &statusInfo) override\r
+ {\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "OnStatusChange, num:%d\n", statusInfo->GetSatellitesNumber());\r
+ for (int32_t satIdx = 0; satIdx < statusInfo->GetSatellitesNumber(); satIdx++) {\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "sat index:%d svid:%d ele:%.3f az:%.3f cnr:%.3f \n", satIdx,\r
+ statusInfo->GetSatelliteIds()[satIdx], statusInfo->GetAltitudes()[satIdx],\r
+ statusInfo->GetAzimuths()[satIdx], statusInfo->GetCarrierToNoiseDensitys()[satIdx]);\r
+ }\r
+ }\r
+\r
+private:\r
+};\r
+\r
+class NmeaMessageCallback : public INmeaMessageCallback {\r
+public:\r
+ NmeaMessageCallback() {}\r
+ ~NmeaMessageCallback() {}\r
+\r
+ void OnMessageChange(int64_t timestamp, const std::string msg) override\r
+ {\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "OnMessageChange timestamp :%lld msg:%s\n", timestamp, msg.c_str());\r
+ }\r
+\r
+private:\r
+};\r
+\r
+class LocatorCallback : public ILocatorCallback {\r
+public:\r
+ LocatorCallback() {}\r
+\r
+ ~LocatorCallback() {}\r
+\r
+ void OnLocationReport(const std::shared_ptr<Location> &location) override\r
+ {\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "OnLocationReport Lat:%.3f Long:%.3f Alt:%.3f Speed:%.3f dir:%.3f\n",\r
+ location->GetLatitude(), location->GetLongitude(), location->GetAltitude(), location->GetSpeed(),\r
+ location->GetDirection());\r
+ }\r
+\r
+ void OnErrorReport(const int errorCode) override\r
+ {\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "error code:%d\n", errorCode);\r
+ }\r
+\r
+ void OnLocatingStatusChange(const int status) override\r
+ {\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "OnLocatingStatusChange status:%d\n", status);\r
+ }\r
+\r
+private:\r
+};\r
+\r
+typedef struct {\r
+ Locator *locator;\r
+ bool isStarted;\r
+ LocatorCallback locatorCallback;\r
+ GnssStatusCallback gnssStatusCallback;\r
+ NmeaMessageCallback nmeaMessageCallback;\r
+} LocationSampleContext;\r
+\r
+static LocationSampleContext g_locationContext = {\r
+ .locator = nullptr,\r
+ .isStarted = false,\r
+};\r
+\r
+int32_t deviceLocationStartLocating()\r
+{\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "LocationStartLocating\n");\r
+ if (g_locationContext.locator == nullptr) {\r
+ g_locationContext.locator = &Locator::GetInstance();\r
+ }\r
+ if (g_locationContext.locator == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "locator is nullptr\n");\r
+ return ERRCODE_FAILURE;\r
+ }\r
+\r
+ bool isEnabled = false;\r
+ LocationErrCode errCode = g_locationContext.locator->IsLocationEnabled(isEnabled);\r
+ if (errCode != ERRCODE_SUCCESS) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "locator IsLocationEnabled failed:%d\n", errCode);\r
+ return errCode;\r
+ }\r
+\r
+ if (!isEnabled) {\r
+ errCode = g_locationContext.locator->EnableAbility(true);\r
+ if (errCode != ERRCODE_SUCCESS) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "locator EnableAbility failed:%d\n", errCode);\r
+ return errCode;\r
+ }\r
+ }\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "RegisterGnssStatusCallback\n");\r
+ errCode = g_locationContext.locator->RegisterGnssStatusCallback(&g_locationContext.gnssStatusCallback);\r
+ if (errCode != ERRCODE_SUCCESS) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "locator RegisterGnssStatusCallback failed:%d\n", errCode);\r
+ return errCode;\r
+ }\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "RegisterNmeaMessageCallback\n");\r
+ errCode = g_locationContext.locator->RegisterNmeaMessageCallback(&g_locationContext.nmeaMessageCallback);\r
+ if (errCode != ERRCODE_SUCCESS) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "locator RegisterNmeaMessageCallback failed:%d\n", errCode);\r
+ return errCode;\r
+ }\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "StartLocating\n");\r
+ RequestConfig requestConfig;\r
+ requestConfig.SetPriority(PRIORITY_ACCURACY);\r
+ errCode = g_locationContext.locator->StartLocating(&requestConfig, &g_locationContext.locatorCallback);\r
+ if (errCode != ERRCODE_SUCCESS) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "locator StartLocating failed:%d\n", errCode);\r
+ return errCode;\r
+ }\r
+ g_locationContext.isStarted = true;\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "StartLocating end\n");\r
+ return ERRCODE_SUCCESS;\r
+}\r
+\r
+int32_t deviceLocationStopLocating()\r
+{\r
+ if (!g_locationContext.isStarted) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "locator is not started\n");\r
+ return ERRCODE_FAILURE;\r
+ }\r
+ LocationErrCode errCode =\r
+ g_locationContext.locator->UnregisterNmeaMessageCallback(&g_locationContext.nmeaMessageCallback);\r
+ if (errCode != ERRCODE_SUCCESS) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "locator UnregisterNmeaMessageCallback failed:%d\n", errCode);\r
+ return errCode;\r
+ }\r
+ errCode = g_locationContext.locator->UnregisterGnssStatusCallback(&g_locationContext.gnssStatusCallback);\r
+ if (errCode != ERRCODE_SUCCESS) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "locator RegisterGnssStatusCallback failed:%d\n", errCode);\r
+ return errCode;\r
+ }\r
+ errCode = g_locationContext.locator->StopLocating(&g_locationContext.locatorCallback);\r
+ if (errCode != ERRCODE_SUCCESS) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "locator StopLocating failed:%d\n", errCode);\r
+ return errCode;\r
+ }\r
+ g_locationContext.isStarted = false;\r
+\r
+ bool isEnabled = false;\r
+ errCode = g_locationContext.locator->IsLocationEnabled(isEnabled);\r
+ if (errCode != ERRCODE_SUCCESS) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "locator IsLocationEnabled failed:%d\n", errCode);\r
+ return errCode;\r
+ }\r
+ if (!isEnabled) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "locator Is not Enabled\n");\r
+ return ERRCODE_FAILURE;\r
+ }\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "EnableAbility false\n");\r
+ errCode = g_locationContext.locator->EnableAbility(false);\r
+ if (errCode != ERRCODE_SUCCESS) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "locator EnableAbility failed:%d\n", errCode);\r
+ return errCode;\r
+ }\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Disable end\n");\r
+ return ERRCODE_SUCCESS;\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.\r
+ */\r
+#ifndef DEVICE_LOCATION_H\r
+#define DEVICE_LOCATION_H\r
+#include <cinttypes>\r
+\r
+typedef struct LocationInfo {\r
+ int32_t latitude_;\r
+ int32_t longitude_;\r
+ uint16_t altitude_;\r
+ uint16_t accuracy_;\r
+ uint16_t speed_;\r
+ uint16_t direction_;\r
+ int64_t timeStamp_;\r
+} LocationInfo_t;\r
+\r
+int32_t deviceLocationStartLocating();\r
+int32_t deviceLocationStopLocating();\r
+#endif
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.\r
+ * Description: Breath Ease\r
+ * Author: wangle\r
+ * Create: 2025-4-23\r
+ */\r
+#include "msg_center_protocol.h"\r
+#include "msg_center_cmd.h"\r
+#include "ohos_init.h"\r
+#include "msg_center_device.h"\r
+#ifdef PUBLISH_TEST_DATA\r
+#include <cstdlib>\r
+#include <ctime>\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
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+#ifdef PUBLISH_TEST_DATA\r
+#define BLOODOXYGEN_LOWER 90\r
+#define BLOODOXYGEN_RANGE 10\r
+#define STEP_RANGE 5\r
+#define DISTANCE_RANGE 10\r
+#define HEARTRATE_LOWER 60\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
+static void PublishTopicTestDataEvent(uint16_t topic, const void *data, size_t len)\r
+{\r
+ int32_t ret;\r
+ uint16_t size = len;\r
+ BroadcastApi *broadcastApi = nullptr;\r
+ IUnknown *api = nullptr;\r
+\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PublishTopicTestDataEvent topic=%u!!", topic);\r
+\r
+ void *publishData = malloc(size);\r
+ if (publishData == nullptr) {\r
+ return;\r
+ }\r
+ ret = memcpy_s(publishData, size, data, size);\r
+ if (ret != EOK) {\r
+ free(publishData);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PublishTopicTestDataEvent memcpy_s fail! ret = %d", ret);\r
+ return;\r
+ }\r
+\r
+ Request request = {\r
+ .msgId = topic,\r
+ .len = size,\r
+ .msgValue = 0,\r
+ .data = publishData,\r
+ };\r
+\r
+ /* public request */\r
+ api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME);\r
+ if (api == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed");\r
+ free(publishData);\r
+ return;\r
+ }\r
+ ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);\r
+ if (ret != 0 || broadcastApi == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "QueryInterface failed");\r
+ free(publishData);\r
+ return;\r
+ }\r
+ broadcastApi->PublishTopic((IUnknown *)broadcastApi, &request);\r
+ broadcastApi->Release((IUnknown *)broadcastApi);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PublishTopicTestDataEvent end!!");\r
+\r
+ return;\r
+}\r
+\r
+static void PublishTestDataCallback(void *)\r
+{\r
+ switch (g_rotation_publish++ % PUBLISH_TYPE_MAX) {\r
+ case PUBLISH_BLOODOXYGEN: {\r
+ uint8_t blood_oxygen = BLOODOXYGEN_LOWER + rand() % BLOODOXYGEN_RANGE;\r
+ PublishTopicTestDataEvent(TOPIC_EVENT_BLOODOXYGEN_UPDATA, &blood_oxygen, sizeof(uint8_t));\r
+ break;\r
+ }\r
+ case PUBLISH_SETP: {\r
+ uint32_t step = rand() % STEP_RANGE;\r
+ PublishTopicTestDataEvent(TOPIC_EVENT_STEPDATA_UPDATE, &step, sizeof(uint32_t));\r
+ break;\r
+ }\r
+ case PUBLISH_HEARTRATE: {\r
+ HeartDatas heart_data = {0};\r
+ heart_data.perSec = HEARTRATE_LOWER + rand() % HEARTRATE_RANGE;\r
+ PublishTopicTestDataEvent(TOPIC_EVENT_HEARTRATE_UPDATA, &heart_data, sizeof(HeartDatas));\r
+ break;\r
+ }\r
+ case PUBLISH_DISTANCE: {\r
+ uint32_t distance = rand() % DISTANCE_RANGE;\r
+ PublishTopicTestDataEvent(TOPIC_EVENT_SPORT_DISTANCE, &distance, sizeof(uint32_t));\r
+ break;\r
+ }\r
+ default:\r
+ break;\r
+ }\r
+}\r
+\r
+void PublishTestData()\r
+{\r
+ uint32 tick = GetOSTick(5000); // 5秒发布一次测试数据\r
+ if (g_publishTestDataHandle == nullptr) {\r
+ g_publishTestDataHandle = new GraphicTimer(tick, PublishTestDataCallback, nullptr, true);\r
+ }\r
+ if (g_publishTestDataHandle == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PublishTestData new GraphicTimer failed!!");\r
+ return;\r
+ }\r
+ bool retTimer = g_publishTestDataHandle->Start();\r
+ if (!retTimer) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PublishTestData Start failed!!");\r
+ if (g_publishTestDataHandle != nullptr) {\r
+ delete g_publishTestDataHandle;\r
+ g_publishTestDataHandle = nullptr;\r
+ }\r
+ return;\r
+ }\r
+}\r
+#endif\r
+static const msg_center_cmd_map_t g_msg_center_device_tbl[] = {\r
+ {MSGCENTER_CMD_DEVICE, MSGCENTER_TYPE_ID_GET_BATTERY_LEVEL, msg_center_get_battery_level},\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
+#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
+};\r
+\r
+errcode_t msg_center_device_type_dispatch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
+{\r
+ uint8_t tbl_size = sizeof(g_msg_center_device_tbl) / sizeof(g_msg_center_device_tbl[0]);\r
+ uint8_t i;\r
+ for (i = 0; i < tbl_size; i++) {\r
+ msg_center_cmd_map_t *item = (msg_center_cmd_map_t *)&g_msg_center_device_tbl[i];\r
+ if ((item->type == type) && (item->handler != NULL)) {\r
+ item->handler(cmd_id, type, usr_data, usr_len);\r
+ return ERRCODE_SUCC;\r
+ }\r
+ }\r
+ return ERRCODE_NOT_SUPPORT;\r
+}\r
+\r
+void device_init(void)\r
+{\r
+ msg_center_register_cmd(MSGCENTER_CMD_DEVICE, msg_center_device_type_dispatch);\r
+}\r
+\r
+APP_FEATURE_INIT_PRI(device_init, LAYER_INIT_LEVEL_4);\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+} // namespace OHOS
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.\r
+ * Description: Breath Ease\r
+ * Author: wangle\r
+ * Create: 2025-4-23\r
+ */\r
+#include <cstdio>\r
+#include "device_proxy.h"\r
+#include "wearable_log.h"\r
+#include "common_def.h"\r
+#include "cpp/audio_manager.h"\r
+#include "uiservice/ui_service.h"\r
+#include "ui_resource_string.h"\r
+#include <sys/statfs.h>\r
+#include <algorithm>\r
+#include "key_id.h"\r
+#include "common.h"\r
+#include "nv.h"\r
+#include "upg.h"\r
+#include "upg_porting.h"\r
+\r
+namespace OHOS {\r
+static constexpr const char *MOUNT_POINT[] = {"/system", "/user", "/update", "/music"};\r
+static constexpr const uint16_t language_protocol[] = {(uint8_t)(0x0u << 8) | LANGUAGE_ID_ZH,\r
+ (uint8_t)(0x1u << 8) | LANGUAGE_ID_ZH,\r
+ (uint8_t)(0x2u << 8) | LANGUAGE_ID_EN};\r
+static constexpr const uint8_t language_mask_bits = 8;\r
+static constexpr const uint16_t language_key_mask = 0xFF00;\r
+static constexpr const uint16_t language_val_mask = 0x00FF;\r
+\r
+static constexpr const uint8_t percentage_scale = 100; // 百分比换算基数\r
+static constexpr const uint8_t percentage_max = 100;\r
+static constexpr const uint8_t percentage_min = 0;\r
+\r
+static constexpr const uint32_t adc_reference_ratio_numerator = 450U; // 18 * 1000\r
+static constexpr const uint32_t adc_reference_ratio_denominator = 1024U / 2U; // 40960 / (1000/18)/2U\r
+static constexpr const uint32_t millivolt_per_volt = 1000U;\r
+\r
+static constexpr const uint32_t def_samples_to_keep = 10;\r
+static constexpr const uint32_t def_samples_to_discard = 5;\r
+static constexpr const uint32_t def_adc_max_range_mv = 380;\r
+static constexpr const uint32_t def_adc_min_range_mv = 0;\r
+\r
+template <typename T>\r
+T clamp(const T &value, const T &min_val, const T &max_val)\r
+{\r
+ return (value < min_val) ? (min_val) : (value > max_val ? max_val : value);\r
+}\r
+\r
+void device_proxy::get_storage_info(storage_info &info)\r
+{\r
+ memset_s(&info, sizeof(storage_info), 0, sizeof(storage_info));\r
+ for (size_t i = 0; i < sizeof(MOUNT_POINT) / sizeof(MOUNT_POINT[0]); i++) {\r
+ struct statfs tmpStat = {0};\r
+ if (statfs(MOUNT_POINT[i], &tmpStat) != 0) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "无法获取%s的挂载点信息,%s", MOUNT_POINT[i], strerror(errno));\r
+ continue;\r
+ }\r
+\r
+ uint32_t total = static_cast<uint32_t>(tmpStat.f_blocks * tmpStat.f_bsize);\r
+ uint32_t used = static_cast<uint32_t>((tmpStat.f_blocks - tmpStat.f_bfree) * tmpStat.f_bsize);\r
+ uint32_t free = static_cast<uint32_t>(tmpStat.f_bfree * tmpStat.f_bsize);\r
+\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "挂载点%s信息, 总:%d(byte), 用:%d(byte), 剩:%d(byte)",\r
+ MOUNT_POINT[i], total, used, free);\r
+ info.total_size += total;\r
+ info.used_size += used;\r
+ info.free_size += free;\r
+ }\r
+}\r
+void device_proxy::get_language_id(uint8_t &id)\r
+{\r
+ sys_language_id_t lang_id = {0};\r
+ uint16_t nvsize = 0;\r
+\r
+ errcode_t ret = uapi_nv_read(NV_ID_SYS_LANGUAGE_ID, sizeof(sys_language_id_t), &nvsize, (uint8_t *)&lang_id);\r
+ if (ret != ERRCODE_SUCC) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "nv get language id error, ret=%u", ret);\r
+ return;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "language nvsize=%u id = %u", nvsize, lang_id.language_id);\r
+\r
+ for (auto key : language_protocol) {\r
+ if (lang_id.language_id == (uint8_t)(key & language_val_mask)) {\r
+ id = (uint8_t)((key & language_key_mask) >> language_mask_bits);\r
+ return;\r
+ }\r
+ }\r
+ id = LANGUAGE_ID_ZH;\r
+}\r
+void device_proxy::set_language_id(uint8_t id)\r
+{\r
+ sys_language_id_t lang_id = {.language_id = LANGUAGE_ID_ZH};\r
+\r
+ for (auto key : language_protocol) {\r
+ if (id == (uint8_t)((key & language_key_mask) >> language_mask_bits)) {\r
+ lang_id.language_id = (uint8_t)(key & 0xFF);\r
+ }\r
+ }\r
+\r
+ errcode_t ret = uapi_nv_write(NV_ID_SYS_LANGUAGE_ID, (uint8_t *)&lang_id, sizeof(sys_language_id_t));\r
+ if (ret != ERRCODE_SUCC) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "nv set language id error, ret=%u", ret);\r
+ return;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "set language id = %u", lang_id.language_id);\r
+ // 发送更新消息到uiservice\r
+ SendMsgToUIService(UI_UPDATE_LANGUAGE, 0, nullptr, 0);\r
+}\r
+void device_proxy::get_product_info(std::string &info_string)\r
+{\r
+ sys_product_info_t info = {0};\r
+ uint16_t nvsize = 0;\r
+ info_string.clear();\r
+\r
+ errcode_t ret = uapi_nv_read(NV_ID_SYS_PRODUCT_INFO, sizeof(sys_product_info_t), &nvsize, (uint8_t *)&info);\r
+ if (ret != ERRCODE_SUCC) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "nv get product info error, ret=%u", ret);\r
+ return;\r
+ }\r
+\r
+ if (nvsize < sizeof(sys_product_info_t) || info.size == 0) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "invalid product info size: nvsize=%u, info.size=%u", nvsize, info.size);\r
+ return;\r
+ }\r
+\r
+ info_string.assign((const char *)info.name, info.size);\r
+\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "product info: nvsize=%u, strlen=%zu, data=%.*s", nvsize, info_string.size(),\r
+ static_cast<int>(info_string.size()), info_string.c_str());\r
+}\r
+void device_proxy::get_volume_info(uint8_t vol_type, std::vector<volume_info> &vol_info)\r
+{\r
+ std::vector<AudioStreamType> audio_types;\r
+\r
+ if (vol_type == vol_type_all_idx || vol_type > vol_type_max_idx) {\r
+ for (uint8_t i = 0; i < vol_type_max_idx; i++) {\r
+ uint8_t max_perc = 0;\r
+ trans_type_to_audio_stream_type(i, audio_types);\r
+ for (auto types : audio_types) { // 每个类型也由多个音频类型组成, 取声音最大的\r
+ int32_t vol = Audio::AudioManager::GetInstance().GetVolume(types);\r
+ int32_t max_vol = Audio::AudioManager::GetInstance().GetMaxVolume(types);\r
+ int32_t min_vol = Audio::AudioManager::GetInstance().GetMinVolume(types);\r
+ uint8_t perc = calc_vol_percentage(min_vol, max_vol, vol);\r
+ max_perc = max_perc > perc ? max_perc : perc;\r
+ }\r
+ volume_info info;\r
+ info.type = i;\r
+ info.perc = max_perc;\r
+\r
+ vol_info.push_back(info);\r
+ }\r
+ } else {\r
+ uint8_t max_perc = 0;\r
+ trans_type_to_audio_stream_type(vol_type, audio_types);\r
+ for (auto types : audio_types) { // 每个类型也由多个音频类型组成, 取声音最大的\r
+ int32_t vol = Audio::AudioManager::GetInstance().GetVolume(types);\r
+ int32_t max_vol = Audio::AudioManager::GetInstance().GetMaxVolume(types);\r
+ int32_t min_vol = Audio::AudioManager::GetInstance().GetMinVolume(types);\r
+ uint8_t perc = calc_vol_percentage(min_vol, max_vol, vol);\r
+ max_perc = max_perc > perc ? max_perc : perc;\r
+ }\r
+ volume_info info;\r
+ info.type = vol_type;\r
+ info.perc = max_perc;\r
+\r
+ vol_info.push_back(info);\r
+ }\r
+}\r
+void device_proxy::set_volume_info(volume_info &vol_info)\r
+{\r
+ std::vector<AudioStreamType> audio_types;\r
+ trans_type_to_audio_stream_type(vol_info.type, audio_types);\r
+ for (auto types : audio_types) {\r
+ int32_t max_vol = Audio::AudioManager::GetInstance().GetMaxVolume(types);\r
+ int32_t min_vol = Audio::AudioManager::GetInstance().GetMinVolume(types);\r
+\r
+ int32_t vol = calc_vol_volume(min_vol, max_vol, vol_info.perc);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetVolume %08X, %d", types, vol);\r
+ Audio::AudioManager::GetInstance().SetVolume(types, vol);\r
+ }\r
+}\r
+OTA_ERR device_proxy::ota_init(ota_info &info)\r
+{\r
+ // 检查OTA的当前状态\r
+ upg_status status = uapi_upg_get_status();\r
+ if (status == UPG_STATUS_UPDATING) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OTAInit:The update module is being upgraded.");\r
+ return OTA_ERR::OTA_ERR_STATUS_UPDATING;\r
+ }\r
+ // 清理并检查升级区空间大小\r
+ delete_file_with_cleanup(upg_get_pkg_file_dir(), upg_get_pkg_file_path());\r
+ uint32_t total_size = uapi_upg_get_storage_size();\r
+ if (total_size == 0) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OTAInit:OTA check storage size error, total_size is 0");\r
+ return OTA_ERR::OTA_ERR_INVAILD_STORAGE;\r
+ }\r
+ if (info.package_size >= total_size) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OTAInit:check size error, total size:%u, need size:%u", total_size,\r
+ info.package_size);\r
+ return OTA_ERR::OTA_ERR_INSUFFICIENT_STORAGE_SPACE;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OTAInit:check succ");\r
+ return OTA_ERR::OTA_SUCC;\r
+}\r
+OTA_ERR device_proxy::ota_update(ota_info &info)\r
+{\r
+ uint32_t total_size = 0;\r
+ do {\r
+ FILE *fp = fopen(upg_get_pkg_file_path(), "rb");\r
+ if (fp == nullptr) {\r
+ break;\r
+ }\r
+ fseek(fp, 0L, SEEK_END);\r
+ total_size = ftell(fp);\r
+ fclose(fp);\r
+ } while (false);\r
+ if (total_size == 0) {\r
+ return OTA_ERR::OTA_ERR_INVAILD_STORAGE;\r
+ }\r
+ if (total_size != info.package_size) {\r
+ return OTA_ERR::OTA_ERR_PACKAGE_SIZE_ERROR;\r
+ } \r
+ return OTA_ERR::OTA_SUCC;\r
+}\r
+\r
+void device_proxy::call_ui_ota_update()\r
+{\r
+ // 发送升级请求到uiservice\r
+ SendMsgToUIService(UI_OTA_UPDATE, 0, nullptr, 0);\r
+}\r
+\r
+int device_proxy::delete_file_with_cleanup(const char *ppath, const char *path)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "path:%s, ppath:%s", path, ppath);\r
+ // 1. 删除文件\r
+ if (unlink(path) == -1) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "unlink failed:%d", errno);\r
+ return 1;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "unlink succ");\r
+ // 2. 打开父目录文件描述符\r
+ int dir_fd = open(ppath, O_RDONLY);\r
+ if (dir_fd == -1) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "open parent dir failed:%d", errno);\r
+ return 1;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "open parent dir succ");\r
+ // 3. 同步父目录元数据到磁盘\r
+ if (fsync(dir_fd) == -1) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "fsync dir failed:%d", errno);\r
+ close(dir_fd);\r
+ return 1;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "fsync dir succ");\r
+ close(dir_fd);\r
+ return 0;\r
+}\r
+\r
+uint8_t device_proxy::calc_vol_percentage(int32_t min, int32_t max, int32_t curr)\r
+{\r
+ if (min >= max) {\r
+ return 0;\r
+ }\r
+ const int32_t clamped_curr = clamp(curr, min, max);\r
+ const int64_t range = static_cast<int64_t>(max) - min;\r
+\r
+ const int64_t scaled_value = (static_cast<int64_t>(clamped_curr - min) * percentage_scale);\r
+ return static_cast<uint8_t>(scaled_value / range);\r
+}\r
+int32_t device_proxy::calc_vol_volume(int32_t min, int32_t max, uint8_t percentage)\r
+{\r
+ if (min >= max) {\r
+ return min;\r
+ }\r
+ uint8_t clamped_percentage = clamp(percentage, percentage_min, percentage_max);\r
+\r
+ double range = static_cast<double>(max - min);\r
+ double percentage_ratio = static_cast<double>(clamped_percentage) / 100.0;\r
+ int32_t curr = static_cast<int32_t>(min + range * percentage_ratio);\r
+\r
+ return static_cast<int32_t>(clamp(curr, min, max));\r
+}\r
+void device_proxy::trans_type_to_audio_stream_type(uint8_t type, std::vector<AudioStreamType> &audio_types)\r
+{\r
+ audio_types.clear();\r
+ switch (type) {\r
+ case vol_type_alarm:\r
+ audio_types.push_back(AUDIO_STREAM_ALARM); // 通用报警音\r
+ audio_types.push_back(AUDIO_STREAM_ALARM_SYSTEM); // 设备报警\r
+ audio_types.push_back(AUDIO_STREAM_ALARM_CLOCK); // 闹钟报警\r
+ break;\r
+ case vol_type_ring:\r
+ audio_types.push_back(AUDIO_STREAM_RING); // 来电铃声\r
+ break;\r
+ case vol_type_call:\r
+ audio_types.push_back(AUDIO_STREAM_VOICE_CALL); // 普通语音通话\r
+ audio_types.push_back(AUDIO_STREAM_VOICE_CALL_VOIP); // 网络语音通话(如微信通话)\r
+ audio_types.push_back(AUDIO_STREAM_VOICE_CALL_BT_SCO); // 蓝牙语音通话\r
+ audio_types.push_back(AUDIO_STREAM_VOICE_CALL_VOLTE); // 4G VOLTE 高清语音通话\r
+ break;\r
+ case vol_type_assistant:\r
+ audio_types.push_back(AUDIO_STREAM_VOICE_ASSISTANT); // 语音助手(如 Siri、Google Assistant)\r
+ audio_types.push_back(AUDIO_STREAM_TTS); // 语音合成(如文本转语音)\r
+ break;\r
+ case vol_type_notification:\r
+ audio_types.push_back(AUDIO_STREAM_NOTIFICATION); // 通用提示音\r
+ audio_types.push_back(AUDIO_STREAM_NOTIFICATION_SYSTEM); // 设备提示音(如蓝牙连接/断开、低电量提示)\r
+ audio_types.push_back(AUDIO_STREAM_NOTIFICATION_PROMPT); // 运动健康提示音(如运动完成提醒)\r
+ break;\r
+ case vol_type_music:\r
+ audio_types.push_back(AUDIO_STREAM_MUSIC); // 本地音乐播放。\r
+ audio_types.push_back(AUDIO_STREAM_A2DP_MUSIC); // 蓝牙传输的媒体音(如从手机传输到蓝牙耳机的音乐)。\r
+ break;\r
+ case vol_type_video:\r
+ audio_types.push_back(AUDIO_STREAM_FITNESS_VIDEO); // 健身视频的指导音频。\r
+ break;\r
+ }\r
+}\r
+\r
+uint8_t battery_power::get_battery_percentage()\r
+{\r
+ battery_power *inst = get_instance();\r
+ if (inst == nullptr) {\r
+ return 0;\r
+ }\r
+ uint32_t voltage = 0;\r
+ // 从adc获取电压值\r
+ if (inst->adc_context_startup()) {\r
+ voltage = inst->calc_voltage();\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "calc_voltage:%u", voltage);\r
+ }\r
+ inst->adc_context_shutdown();\r
+ // 根据电压值计算电量百分比\r
+ return inst->calc_percentage(voltage);\r
+}\r
+\r
+battery_power *battery_power::get_instance()\r
+{\r
+ static battery_power *instance = nullptr;\r
+ if (instance == nullptr) {\r
+ battery_power *temp = new battery_power();\r
+ if (!temp->adc_context_init()) {\r
+ delete temp;\r
+ return nullptr;\r
+ }\r
+ instance = temp;\r
+ }\r
+ return instance;\r
+}\r
+\r
+battery_power::battery_power()\r
+{\r
+ // 数据由海思提供\r
+ channel = ADC_CHANNEL_3;\r
+ analog_pin = S_AGPIO_L27;\r
+ mode = PIN_MODE_0;\r
+ samples_to_keep = def_samples_to_keep;\r
+ samples_to_discard = def_samples_to_discard;\r
+ // 由测试检测而来, 测试中得到的数据应该是0.3744V(没有标注单位,猜测得到,未必准确)\r
+ // 因为要算百分比, 换算成毫伏更容易计算\r
+ adc_max_range_mv = def_adc_max_range_mv;\r
+ adc_min_range_mv = def_adc_min_range_mv;\r
+}\r
+\r
+battery_power::~battery_power()\r
+{\r
+ adc_context_shutdown();\r
+}\r
+\r
+bool battery_power::adc_context_init()\r
+{\r
+ // 初始化pin模块\r
+ uapi_pin_init();\r
+ // 初始化高精度计数器\r
+ errcode_t err = uapi_tcxo_init();\r
+ if (err != ERRCODE_SUCC) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_tcxo_init error %u", err);\r
+ return false;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_tcxo_init succ");\r
+ // 设置pin脚模式\r
+ err = uapi_pin_set_mode(analog_pin, mode);\r
+ if (err != ERRCODE_SUCC) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_pin_set_mode error %u", err);\r
+ return false;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_pin_set_mode succ");\r
+ return true;\r
+}\r
+\r
+bool battery_power::adc_context_startup()\r
+{\r
+ errcode_t err = uapi_adc_init(ADC_CLOCK_500KHZ); // 初始化adc\r
+ if (err != ERRCODE_SUCC) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_adc_init error %u", err);\r
+ return false;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_adc_init succ");\r
+ uapi_adc_power_en(AFE_SCAN_MODE_MAX_NUM, true);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_adc_power_en true");\r
+ err = uapi_adc_open_channel(channel);\r
+ if (err != ERRCODE_SUCC) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_adc_open_channel error %u", err);\r
+ return false;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_adc_open_channel succ");\r
+ return true;\r
+}\r
+void battery_power::adc_context_shutdown()\r
+{\r
+ errcode_t err = uapi_adc_close_channel(channel);\r
+ if (err != ERRCODE_SUCC) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_adc_close_channel error %u", err);\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_adc_close_channel succ");\r
+ uapi_adc_power_en(AFE_SCAN_MODE_MAX_NUM, false);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_adc_power_en false");\r
+ uapi_adc_deinit();\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_adc_deinit");\r
+}\r
+\r
+uint8_t battery_power::calc_percentage(uint32_t voltage)\r
+{\r
+ if (voltage >= adc_max_range_mv) {\r
+ return percentage_max;\r
+ }\r
+ if (voltage <= adc_min_range_mv) {\r
+ return percentage_min;\r
+ }\r
+\r
+ uint32_t voltage_range = adc_max_range_mv - adc_min_range_mv;\r
+ uint32_t rounding_term = voltage_range / 2;\r
+ uint32_t voltage_offset = voltage - adc_min_range_mv;\r
+ return static_cast<uint8_t>((voltage_offset * percentage_scale + rounding_term) / voltage_range);\r
+}\r
+\r
+uint32_t battery_power::calc_voltage()\r
+{\r
+ // 丢弃初始帧数据\r
+ for (uint32_t i = 0; i < samples_to_discard; i++) {\r
+ uapi_adc_manual_sample(ADC_CHANNEL_NONE);\r
+ uapi_tcxo_delay_ms((uint64_t)3); // 延迟3ms\r
+ }\r
+\r
+ uint32_t stick = 0;\r
+ uint32_t stick_count = 0;\r
+ // 采集样本数\r
+ for (uint32_t i = 0; i < samples_to_keep; i++) {\r
+ uint32_t irq_sts = osal_irq_lock();\r
+ uint32_t sample_result =\r
+ (uint32_t)uapi_adc_manual_sample(ADC_CHANNEL_NONE); // 每次读取CHANNEL_NONE? testsuit中是这样写的\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "sample result = %u", sample_result);\r
+ if (sample_result != 0) {\r
+ stick += sample_result;\r
+ stick_count++;\r
+ }\r
+ osal_irq_restore(irq_sts);\r
+ }\r
+\r
+ if (stick_count == 0) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "error, no result");\r
+ return 0;\r
+ }\r
+\r
+ uint32_t voltage = adc_trans_sytick_to_voltages(stick / stick_count);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "adc trans voltages:%u", voltage);\r
+ return voltage;\r
+}\r
+\r
+uint32_t battery_power::adc_trans_sytick_to_voltages(uint32_t sytick)\r
+{\r
+ // 整数运算公式:(sytick * numerator + denominator/2) / denominator\r
+ return (sytick * adc_reference_ratio_numerator + adc_reference_ratio_denominator) / adc_reference_ratio_denominator;\r
+}\r
+} // namespace OHOS
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.\r
+ * Description: Breath Ease\r
+ * Author: wangle\r
+ * Create: 2025-4-23\r
+ */\r
+#ifndef WATCH_SETTING_PROXY_H\r
+#define WATCH_SETTING_PROXY_H\r
+\r
+#include <vector>\r
+#include <string>\r
+#include "msg_center_protocol.h"\r
+#include "cpp/audio_manager.h"\r
+#include "adc.h"\r
+#include "tcxo.h"\r
+#include "pinctrl.h"\r
+#include "hal_adc.h"\r
+\r
+namespace OHOS {\r
+\r
+typedef struct storage_info {\r
+ uint32_t total_size; // 总大小\r
+ uint32_t used_size; // 已使用\r
+ uint32_t free_size; // 未使用\r
+} storage_info_t;\r
+\r
+typedef struct volume_info {\r
+ uint8_t type; // 类型\r
+ uint8_t perc; // 百分比\r
+} volume_info_t;\r
+\r
+typedef struct ota_info {\r
+ uint32_t package_size;\r
+} ota_info_t;\r
+\r
+enum class OTA_ERR : uint32_t {\r
+ OTA_SUCC = 0x00000000u, //"成功"\r
+ OTA_ERR_INVALID_PARAM = 0x00000001u, //"参数错误"\r
+ OTA_ERR_INITIALIZE_ERR = 0x00000002u, //"OTA初始化错误"\r
+ OTA_ERR_STATUS_UPDATING = 0x00000003u, //"OTA正在升级中"\r
+ OTA_ERR_INVAILD_STORAGE = 0x00000004u, //"获取升级区信息错误"\r
+ OTA_ERR_INSUFFICIENT_STORAGE_SPACE = 0x00000005u, //"升级区没有足够的空间"\r
+ OTA_ERR_PACKAGE_SIZE_ERROR = 0x00000006u, //"升级包大小不匹配"\r
+};\r
+\r
+static constexpr const uint8_t vol_type_all_idx = 0;\r
+static constexpr const uint8_t vol_type_max_idx = 7;\r
+static constexpr const uint8_t vol_type_alarm = 1; // 报警类\r
+static constexpr const uint8_t vol_type_ring = 2; // 来电铃声\r
+static constexpr const uint8_t vol_type_call = 3; // 语音通话\r
+static constexpr const uint8_t vol_type_assistant = 4; // 语音助手\r
+static constexpr const uint8_t vol_type_notification = 5; // 通用提示音\r
+static constexpr const uint8_t vol_type_music = 6; // 音乐\r
+static constexpr const uint8_t vol_type_video = 7; // 视频\r
+\r
+\r
+class device_proxy {\r
+public:\r
+ static void get_storage_info(storage_info &info);\r
+ static void get_language_id(uint8_t &lang_id);\r
+ static void set_language_id(uint8_t lang_id);\r
+ static void get_product_info(std::string &info_string);\r
+ static void get_volume_info(uint8_t vol_type, std::vector<volume_info> &vol_info);\r
+ static void set_volume_info(volume_info &vol_info);\r
+ static OTA_ERR ota_init(ota_info &info);\r
+ static OTA_ERR ota_update(ota_info &info);\r
+ static void call_ui_ota_update();\r
+public:\r
+ static uint32_t calc_stat_size(uint64_t size);\r
+ static uint8_t calc_vol_percentage(int32_t min, int32_t max, int32_t curr);\r
+ static int32_t calc_vol_volume(int32_t min, int32_t max, uint8_t percentage);\r
+ static void trans_type_to_audio_stream_type(uint8_t type, std::vector<AudioStreamType> &audio_types);\r
+ static int delete_file_with_cleanup(const char *ppath, const char *path);\r
+};\r
+\r
+class battery_power {\r
+public:\r
+ static uint8_t get_battery_percentage();\r
+\r
+protected:\r
+ static battery_power *get_instance();\r
+\r
+private:\r
+ battery_power();\r
+ ~battery_power();\r
+ bool adc_context_init();\r
+ bool adc_context_startup();\r
+ void adc_context_shutdown();\r
+ uint8_t calc_percentage(uint32_t voltage);\r
+ uint32_t calc_voltage();\r
+ uint32_t adc_trans_sytick_to_voltages(uint32_t sytick);\r
+\r
+private:\r
+ adc_channel_t channel; // ADC信道\r
+ pin_t analog_pin; // ADC输入引脚\r
+ pin_mode_t mode; // ADC管脚工作模式\r
+ uint32_t samples_to_keep; // 总采样次数\r
+ uint32_t samples_to_discard; // 丢弃的初始样本数\r
+ uint32_t adc_max_range_mv; // ADC原始值上限(单位:毫伏)\r
+ uint32_t adc_min_range_mv; // ADC原始值下限(单位:毫伏)\r
+};\r
+\r
+} // namespace OHOS\r
+#endif
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.\r
+ * Description: Breath Ease\r
+ * Author: wangle\r
+ * Create: 2025-4-23\r
+ */\r
+#include "msg_center_protocol.h"\r
+#include "msg_center_device.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
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+#include "diag_msg.h"\r
+#include "diag_ind_src.h"\r
+\r
+uint8_t g_bloodoxygen = 0;\r
+uint16_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
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "get_battery_level");\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 battery_level = OHOS::battery_power::get_battery_percentage();\r
+\r
+ errcode_t ret = msg_center_send_data(cmd_id, type, &battery_level, sizeof(battery_level));\r
+ if (ret != ERRCODE_SUCC) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send get_battery_level_ack fail, ret = %d", ret);\r
+ return ERRCODE_FAIL;\r
+ }\r
+ return ERRCODE_SUCC;\r
+}\r
+// 获取存储空间\r
+errcode_t msg_center_get_storage_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
+{\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "get_storage_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
+ uint8_t battery_level = 0;\r
+\r
+ OHOS::storage_info info;\r
+ OHOS::device_proxy::get_storage_info(info);\r
+\r
+ errcode_t ret = msg_center_send_data(cmd_id, type, &info, sizeof(OHOS::storage_info));\r
+ if (ret != ERRCODE_SUCC) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send get_storage_info_ack fail, ret = %d", ret);\r
+ return ERRCODE_FAIL;\r
+ }\r
+ return ERRCODE_SUCC;\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
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "get_product_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
+ uint8_t battery_level = 0;\r
+\r
+ std::string product_info;\r
+ OHOS::device_proxy::get_product_info(product_info);\r
+\r
+ errcode_t ret = msg_center_send_data(cmd_id, type, (void *)product_info.c_str(), product_info.length());\r
+ if (ret != ERRCODE_SUCC) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send get_product_info_ack fail, ret = %d", ret);\r
+ return ERRCODE_FAIL;\r
+ }\r
+ return ERRCODE_SUCC;\r
+}\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
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "get_language_id");\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
+ uint8_t battery_level = 0;\r
+\r
+ uint8_t language_id = 0;\r
+ OHOS::device_proxy::get_language_id(language_id);\r
+\r
+ errcode_t ret = msg_center_send_data(cmd_id, type, &language_id, sizeof(uint8_t));\r
+ if (ret != ERRCODE_SUCC) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send get_language_id_ack fail, ret = %d", ret);\r
+ return ERRCODE_FAIL;\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
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "set_language_id");\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 language_id = 0;\r
+ if (v_len != sizeof(uint8_t)) {\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
+ language_id = *(uint8_t *)v_data;\r
+ OHOS::device_proxy::set_language_id(language_id);\r
+\r
+ errcode_t ret = msg_center_send_data(cmd_id, type, &language_id, sizeof(uint8_t));\r
+ if (ret != ERRCODE_SUCC) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send set_language_id_ack fail, ret = %d", ret);\r
+ return ERRCODE_FAIL;\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
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "ota_init");\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::ota_info info;\r
+ if (v_len != sizeof(OHOS::ota_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::ota_info), v_data, v_len);\r
+ OHOS::OTA_ERR err = OHOS::device_proxy::ota_init(info);\r
+\r
+ errcode_t ret = msg_center_send_data(cmd_id, type, &err, sizeof(OHOS::OTA_ERR));\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_update(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
+{\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "ota_update");\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::ota_info info;\r
+ if (v_len != sizeof(OHOS::ota_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::ota_info), v_data, v_len);\r
+ OHOS::OTA_ERR err = OHOS::device_proxy::ota_update(info);\r
+\r
+ errcode_t ret = msg_center_send_data(cmd_id, type, &err, sizeof(OHOS::OTA_ERR));\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
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send ret = %d", ret);\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
+\r
+errcode_t msg_center_device_heartrate(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_heartrate, sizeof(g_heartrate));\r
+ if (ret != ERRCODE_SUCC) {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_device_heartrate:%d\r\n", g_heartrate);\r
+ /* notify UI or call UI load */\r
+\r
+ return ERRCODE_SUCC;\r
+}\r
+\r
+errcode_t msg_center_device_stepdata(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_stepdata, sizeof(g_stepdata));\r
+ if (ret != ERRCODE_SUCC) {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_device_stepdata:%d\r\n", g_stepdata);\r
+ /* notify UI or call UI load */\r
+\r
+ return ERRCODE_SUCC;\r
+}\r
+\r
+errcode_t msg_center_device_bloodoxygen(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_bloodoxygen, sizeof(g_bloodoxygen));\r
+ if (ret != ERRCODE_SUCC) {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_device_bloodoxygen:%d\r\n", g_bloodoxygen);\r
+ /* notify UI or call UI load */\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 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
+ 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
+ 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
+ break;\r
+ case SPORT_ACTION_PAUSE:\r
+ OHOS::SportsModel::GetInstance()->StopSportsTimer(false);\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
+ break;\r
+ case SPORT_ACTION_STOP:\r
+ OHOS::SportsModel::GetInstance()->StopSportsTimer(false);\r
+ OHOS::NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN_SAMPLE);\r
+ break;\r
+ default:\r
+ ret = ERRCODE_FAIL;\r
+ break;\r
+ }\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
+ 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
+{\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
+ 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
+ return ERRCODE_FAIL;\r
+ }\r
+ return ERRCODE_SUCC;\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
+ 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
+ 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
+ if (OHOS::CameraMainPage::GetInstance() != nullptr) {\r
+ OHOS::CameraMainPage::GetInstance()->Refresh_page();\r
+ return ERRCODE_SUCC;\r
+ } else {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_MSG_CENTER, "CameraMainPage not exist\r\n");\r
+ return ERRCODE_FAIL;\r
+ }\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
+ 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
+ uint8_t data = *tlv_payload;\r
+ errcode_t ret = ERRCODE_SUCC;\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_offline_log_switch, data = %d\r\n", data);\r
+ if (data) {\r
+ uapi_zdiag_set_offline_log_enable(true); /*open offline log*/\r
+ } else {\r
+ uapi_zdiag_set_offline_log_enable(false); /*close offline log*/\r
+ }\r
+ ret = msg_center_send_data(cmd_id, type, &data, sizeof(data));\r
+ if (ret != ERRCODE_SUCC) {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ return ERRCODE_SUCC;\r
+}\r
+\r
+#if (CONFIG_ONLINE_LOG == 1)\r
+errcode_t msg_center_set_online_log_channel(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
+ uint8_t data = *tlv_payload;\r
+ errcode_t ret = ERRCODE_SUCC;\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_set_online_log_channel, data = %d\r\n", data);\r
+ change_log_diag_channel(data);\r
+ ret = msg_center_send_data(cmd_id, type, &data, sizeof(data));\r
+ if (ret != ERRCODE_SUCC) {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ return ERRCODE_SUCC;\r
+}\r
+\r
+errcode_t msg_center_set_online_log_level(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
+ uint8_t data = *tlv_payload;\r
+ errcode_t ret = ERRCODE_SUCC;\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "msg_center_set_online_log_level, data = %d\r\n", data);\r
+ set_online_log_level(data);\r
+ ret = msg_center_send_data(cmd_id, type, &data, sizeof(data));\r
+ if (ret != ERRCODE_SUCC) {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ return ERRCODE_SUCC;\r
+}\r
+#endif\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
+ 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
+ }\r
+ if (!ret) {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ return ERRCODE_SUCC;\r
+}\r
+#ifdef __cplusplus\r
+}\r
+#endif
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.\r
+ * Description: Breath Ease\r
+ * Author: wangle\r
+ * Create: 2025-4-23\r
+ */\r
+#ifndef MSG_CENTER_DEVICE_H\r
+#define MSG_CENTER_DEVICE_H\r
+\r
+#include "msg_center_protocol.h"\r
+#include "wearable_log.h"\r
+\r
+#ifdef __cplusplus\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
+} msg_center_device_type_id_t;\r
+\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
+errcode_t msg_center_get_storage_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\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_ota_update(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
+\r
+errcode_t msg_center_device_heartrate(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\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
+\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
+/* 查找手机 */\r
+errcode_t msg_center_device_findphone(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
+\r
+#if (CONFIG_ONLINE_LOG == 1)\r
+/* 在线日志通道 */\r
+errcode_t msg_center_set_online_log_channel(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
+/* 在线日志级数 */\r
+errcode_t msg_center_set_online_log_level(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len);\r
+#endif\r
+\r
+#ifdef PUBLISH_TEST_DATA\r
+void PublishTestData();\r
+#endif\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+#endif /* MSG_CENTER_DEVICE_H */\r
${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits/gfx_utils
${ROOT_DIR}/open_source/openharmony/base/startup/syspara_lite/include
${ROOT_DIR}/open_source/openharmony/drivers/peripheral/format/interfaces/include
- ${ROOT_DIR}/application/wearable/nativeapp/nativeui/main/include/dial
)
set(SOURCES
--- /dev/null
+/*
+ * Copyright (c) CompanyNameMagicTag 2023-2023. All rights reserved.
+ * Description: ota upgrade handle.
+ * This file should be changed only infrequently and with great care.
+ */
+#include <stdio.h>
+#include "securec.h"
+#include "msg_center.h"
+#include "msg_center_protocol.h"
+#include "msg_center_cmd.h"
+#include "wearable_log.h"
+#include "common_def.h"
+#include "dial_market.h"
+#include "parameter.h"
+#include "main/dial/WatchInterface.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+errcode_t msg_center_dial_market_get_sys_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)
+{
+ errcode_t ret = ERRCODE_SUCC;
+ watch_sys_info sys;
+ bool op_ret = false;
+
+ /* 组装信息 */
+ strcpy_s(sys.chip_platform, MAX_CHIP_PLAT_LEN, "hisi");
+ strcpy_s(sys.chip_model, MAX_CHIP_MODEL_LEN, "3321");
+ char *os_version = GetOsName();
+ if (os_version == NULL) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "os_version is NULL\r\n");
+ return ERRCODE_FAIL;
+ }
+ strcpy_s(sys.os_version, MAX_OS_LEN, os_version); // "OpenHarmony-5.0.1.115"
+
+ char *api_level = GetSdkApiLevel();
+ if (api_level == NULL) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "api_level is NULL\r\n");
+ free(os_version);
+ return ERRCODE_FAIL;
+ }
+ strcpy_s(sys.api_level, MAX_API_LEVEL_LEN, api_level); // "13"
+
+ op_ret = GetWatchSystemInfo(&sys);
+ if (op_ret == false) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "GetWatchSystemInfo fail\r\n");
+ free(os_version);
+ free(api_level);
+ return ERRCODE_FAIL;
+ }
+
+ ret = msg_center_send_data(cmd_id, type, &sys, sizeof(watch_sys_info));
+ if (ret != ERRCODE_SUCC) {
+ free(os_version);
+ free(api_level);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "send data fail, ret = %d\r\n", ret);
+ return ERRCODE_FAIL;
+ }
+
+ free(os_version);
+ free(api_level);
+ return ERRCODE_SUCC;
+}
+
+errcode_t msg_center_dial_market_get_dev_cap(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)
+{
+ errcode_t ret = ERRCODE_SUCC;
+ watch_dev_cap_info cap;
+ bool op_ret = false;
+
+ op_ret = GetWatchCapability(&cap);
+ if (op_ret == false) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "GetWatchCapability fail\r\n");
+ return ERRCODE_FAIL;
+ }
+
+ ret = msg_center_send_data(cmd_id, type, &cap, sizeof(watch_dev_cap_info));
+ if (ret != ERRCODE_SUCC) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "send data fail, ret = %d\r\n", ret);
+ return ERRCODE_FAIL;
+ }
+
+ return ERRCODE_SUCC;
+}
+
+errcode_t msg_center_dial_market_get_one_watch_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)
+{
+ errcode_t ret = ERRCODE_SUCC;
+ uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data);
+ uint32_t uuid = *(uint32_t *)tlv_payload;
+ bool op_ret = false;
+ watch_dial_info info;
+
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "uuid = %d\r\n", uuid);
+ op_ret = GetWatchFaceInfo(uuid, &info);
+ if (op_ret == false) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "GetWatchFaceInfo fail\r\n");
+ (void)memset_s(&info, sizeof(watch_dial_info), 0, sizeof(watch_dial_info));
+ info.uuid = uuid;
+ (void)msg_center_send_data(cmd_id, type, &info, sizeof(watch_dial_info));
+ return ERRCODE_FAIL;
+ }
+
+ ret = msg_center_send_data(cmd_id, type, &info, sizeof(watch_dial_info));
+ if (ret != ERRCODE_SUCC) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "send data fail, ret = %d\r\n", ret);
+ return ERRCODE_FAIL;
+ }
+
+ return ERRCODE_SUCC;
+}
+
+errcode_t msg_center_dial_market_install_watch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)
+{
+ errcode_t ret = ERRCODE_SUCC;
+ uint32_t uuid = 0;
+ bool op_ret = false;
+ 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);
+
+ char *path = (char *)malloc(payload_len + 1);
+ if (path == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "malloc failed.\r\n");
+ return ERRCODE_FAIL;
+ }
+
+ (void)memcpy_s(path, payload_len, tlv_payload, payload_len);
+ path[payload_len] = '\0';
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "path = %s\r\n", path);
+
+ op_ret = GetUuidByPath(path, &uuid);
+ if (op_ret == false) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "install fail.\r\n");
+ free(path);
+ return ERRCODE_FAIL;
+ }
+
+ ret = msg_center_send_data(cmd_id, type, &uuid, sizeof(uint32_t));
+ if (ret != ERRCODE_SUCC) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "send data fail, ret = %d\r\n", ret);
+ free(path);
+ return ERRCODE_FAIL;
+ }
+
+ free(path);
+ return ERRCODE_SUCC;
+}
+
+errcode_t msg_center_dial_market_uninstall_watch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)
+{
+ errcode_t ret = ERRCODE_SUCC;
+ bool op_ret = false;
+ uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data);
+ uint32_t uuid = *(uint32_t *)tlv_payload;
+
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "uuid = %d\r\n", uuid);
+ op_ret = UninstallWatch(uuid);
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "uninstall ret : %d\r\n", op_ret);
+
+ ret = msg_center_send_data(cmd_id, type, &op_ret, sizeof(uint8_t));
+ if (ret != ERRCODE_SUCC) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "send data fail, ret = %d\r\n", ret);
+ return ERRCODE_FAIL;
+ }
+
+ return ERRCODE_SUCC;
+}
+
+errcode_t msg_center_dial_market_set_watch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)
+{
+ errcode_t ret = ERRCODE_SUCC;
+ bool op_ret = false;
+ uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data);
+ uint32_t uuid = *(uint32_t *)tlv_payload;
+
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "uuid = %d\r\n", uuid);
+ op_ret = SetCurrentWatchFace(uuid);
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "set_current_watch_face ret : %d\r\n", op_ret);
+
+ ret = msg_center_send_data(cmd_id, type, &op_ret, sizeof(uint8_t));
+ if (ret != ERRCODE_SUCC) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "send data fail, ret = %d\r\n", ret);
+ return ERRCODE_FAIL;
+ }
+
+ return ERRCODE_SUCC;
+}
+
+errcode_t msg_center_dial_market_get_all_watch_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)
+{
+ errcode_t ret = ERRCODE_SUCC;
+ watch_dial_info *info = nullptr;
+ uint8_t watch_num = 0;
+ bool op_ret = false;
+
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "get_all_watch_info\r\n");
+ op_ret = GetAllWatchFaceInfo(&info, &watch_num);
+ if (op_ret == false) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "GetAllWatchFaceInfo fail\r\n");
+ watch_num = 0;
+ (void)msg_center_send_data(cmd_id, type, info, sizeof(watch_dial_info) * watch_num);
+ return ERRCODE_FAIL;
+ }
+
+ ret = msg_center_send_data(cmd_id, type, info, sizeof(watch_dial_info) * watch_num);
+ if (ret != ERRCODE_SUCC) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "send data fail, ret = %d\r\n", ret);
+ free(info);
+ return ERRCODE_FAIL;
+ }
+
+ free(info);
+ return ERRCODE_SUCC;
+}
+
+errcode_t msg_center_dial_market_get_cur_watch_info(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)
+{
+ errcode_t ret = ERRCODE_SUCC;
+ bool op_ret = false;
+ watch_dial_info info;
+
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "get_cur_watch_info\r\n");
+ op_ret = GetCurrentWatchFaceInfo(&info);
+ if (op_ret == false) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "GetCurrentWatchFaceInfo fail\r\n");
+ (void)memset_s(&info, sizeof(watch_dial_info), 0, sizeof(watch_dial_info));
+ info.uuid = 0xFFFFFFFF; // 异常时用全F的uuid表示
+ (void)msg_center_send_data(cmd_id, type, &info, sizeof(watch_dial_info));
+ return ERRCODE_FAIL;
+ }
+
+ ret = msg_center_send_data(cmd_id, type, &info, sizeof(watch_dial_info));
+ if (ret != ERRCODE_SUCC) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "send data fail, ret = %d\r\n", ret);
+ return ERRCODE_FAIL;
+ }
+
+ return ERRCODE_SUCC;
+}
+#ifdef __cplusplus
+}
+#endif
\ No newline at end of file
--- /dev/null
+
+#include "msg_center_protocol.h"
+#include "msg_center_cmd.h"
+#include "ohos_init.h"
+#include "dial_market.h"
+
+namespace OHOS {
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static const msg_center_cmd_map_t g_msg_center_dial_market_tbl[] = {
+ { MSGCENTER_CMD_DIAL_MARKET, MSGCENTER_TYPE_ID_DM_GET_SYS_INFO, msg_center_dial_market_get_sys_info},
+ { MSGCENTER_CMD_DIAL_MARKET, MSGCENTER_TYPE_ID_DM_GET_DEV_CAP, msg_center_dial_market_get_dev_cap},
+ { MSGCENTER_CMD_DIAL_MARKET, MSGCENTER_TYPE_ID_DM_GET_ONE_WATCH_INFO, msg_center_dial_market_get_one_watch_info},
+ { MSGCENTER_CMD_DIAL_MARKET, MSGCENTER_TYPE_ID_DM_INSTALL_WATCH, msg_center_dial_market_install_watch},
+ { MSGCENTER_CMD_DIAL_MARKET, MSGCENTER_TYPE_ID_DM_UNINSTALL_WATCH, msg_center_dial_market_uninstall_watch},
+ { MSGCENTER_CMD_DIAL_MARKET, MSGCENTER_TYPE_ID_DM_SET_WATCH, msg_center_dial_market_set_watch},
+ { MSGCENTER_CMD_DIAL_MARKET, MSGCENTER_TYPE_ID_DM_GET_ALL_WATCH_INFO, msg_center_dial_market_get_all_watch_info},
+ { MSGCENTER_CMD_DIAL_MARKET, MSGCENTER_TYPE_ID_DM_GET_CUR_WATCH_INFO, msg_center_dial_market_get_cur_watch_info},
+};
+
+errcode_t msg_center_dial_market_dispatch(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)
+{
+ uint8_t tbl_size = sizeof(g_msg_center_dial_market_tbl) / sizeof(g_msg_center_dial_market_tbl[0]);
+ uint8_t i;
+ for (i = 0; i < tbl_size; i++) {
+ msg_center_cmd_map_t *item = (msg_center_cmd_map_t *)&g_msg_center_dial_market_tbl[i];
+ if ((item->type == type) && (item->handler != NULL)) {
+ item->handler(cmd_id, type, usr_data, usr_len);
+ return ERRCODE_SUCC;
+ }
+ }
+ return ERRCODE_NOT_SUPPORT;
+}
+
+void dial_market_init(void)
+{
+ msg_center_register_cmd(MSGCENTER_CMD_DIAL_MARKET, msg_center_dial_market_dispatch);
+}
+
+APP_FEATURE_INIT_PRI(dial_market_init, LAYER_INIT_LEVEL_4);
+#ifdef __cplusplus
+}
+#endif
+} // namespace OHOS
\ No newline at end of file
${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/ui/frameworks/components_ext
${ROOT_DIR}/open_source/openharmony/drivers/peripheral/display/interfaces/include
${ROOT_DIR}/application/wearable/service/xiaodu_voice
+ ${ROOT_DIR}/application/wearable/service/watch_setting_msg/include
${ROOT_DIR}/application/wearable/service/xiaodu_navi_vector
${ROOT_DIR}/application/wearable/service/xiaodu_navi_vector/libs
${ROOT_DIR}/application/wearable/service/msg_center/src/notify/ketinput/include
+ ${ROOT_DIR}/application/wearable/nativeapp/nativelauncher/include
+ ${ROOT_DIR}/application/wearable/nativeabilityfwk/include
+ ${ROOT_DIR}/open_source/openharmony/foundation/multimedia/player/interfaces/kits
)
set(SOURCES
${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits/gfx_utils
${ROOT_DIR}/middleware/services/gui/uikit/surface/interfaces/kits
${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks
- ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include/components
- ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/ui/frameworks/components/
+ ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/ui/frameworks/components_ext
${ROOT_DIR}/open_source/openharmony/foundation/multimedia/audio_player/interfaces/kits
${ROOT_DIR}/open_source/openharmony/foundation/multimedia/audiomanager/interfaces/kits/audiomanager
${ROOT_DIR}/open_source/openharmony/foundation/multimedia/audiomanager/interfaces/kits/audiocommon
${ROOT_DIR}/include/middleware/services/bts/common
${ROOT_DIR}/application/auto_ota
${ROOT_DIR}/application/wearable/service/xiaodu_navi_vector
+ ${ROOT_DIR}/open_source/openharmony/third_party/cJSON
+ ${ROOT_DIR}/application/wearable/service/device_msg
${ROOT_DIR}/application/wearable/service/msg_center/src/notify/ketinput/include
${ROOT_DIR}/application/wearable/nativeapp/nativelauncher/include
${ROOT_DIR}/application/wearable/nativeabilityfwk/include
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/makephone_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/common/msg_center_common.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/common/msg_center_utils.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/common/msg_center_self_cmd.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/ketinput/src/NotifyOnKeyListener.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/phone_msg_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/pairing_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/transmitting.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/charge_notification.cpp
set(SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/msg_center_customer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/msg_center_cmd.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/src/msg_center_self_cmd.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/alarm_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/makephone_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/ketinput/src/NotifyOnKeyListener.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/phone_msg_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/pairing_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/transmitting.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/charge_notification.cpp
MSGCENTER_CMD_WATCH_CONNECT = 0x8,\r
MSGCENTER_CMD_APP_STORE = 0x9,\r
MSGCENTER_CMD_DIAL_MARKET = 0xa,\r
+ MSGCENTER_CMD_PHONE_MSG = 0xb, // 增加消息通知;\r
+ MSGCENTER_CMD_DEVICE = 0xc,\r
MSGCENTER_CMD_MAX\r
} msg_center_cmd_id_t;\r
\r
#include "components/ui_view_group.h"
#include "alarm_notification.h"
#include "makephone_notification.h"
+#include "phone_msg_notification.h"
constexpr uint16_t HALF_SCREEN = 2;
constexpr int16_t NOTIFY_PRIORITY_DEFAULT = 4;
--- /dev/null
+/*\r
+ * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.\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 "components/ui_view_group.h"\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_label_button_ext.h"\r
+#include "graphic_timer.h"\r
+#include <unordered_map>\r
+\r
+struct PhoneMsg {\r
+ std::string appName;\r
+ std::string msgTitle;\r
+ std::string msgContent;\r
+};\r
+\r
+namespace OHOS {\r
+class PhoneMsgView {\r
+public:\r
+ static UIViewGroup *CreatePhoneMsgView();\r
+ static void FreePhoneMsgView(void);\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 const uint32_t notifyTime = 5000;\r
+\r
+private:\r
+ static UIViewGroup *phoneMsgView_;\r
+ static UILabel *appNameLabel_;\r
+ static UILabel *titleLabel_;\r
+ static UILabel *contentLabel_;\r
+ static GraphicTimer *phoneMsgNotifyStop_;\r
+ static PhoneMsg phoneMsg_;\r
+ static UILabelButtonExt *cancelButton_;\r
+};\r
+\r
+class PhoneMsgViewEventListener : public OHOS::UIView::OnClickListener,\r
+ public OHOS::UIView::OnLongPressListener,\r
+ public OHOS::UIView::OnTouchListener,\r
+ public OHOS::UIView::OnDragListener {\r
+public:\r
+ PhoneMsgViewEventListener();\r
+ virtual ~PhoneMsgViewEventListener();\r
+ static PhoneMsgViewEventListener *GetInstance(void);\r
+ bool OnDrag(UIView& view, const DragEvent& event) override;\r
+ bool OnDragEnd(OHOS::UIView& view, const OHOS::DragEvent& event) override;\r
+ bool OnClick(OHOS::UIView& view, const OHOS::ClickEvent& event) override;\r
+ bool OnPress(OHOS::UIView& view, const OHOS::PressEvent& event) override\r
+ {\r
+ return true;\r
+ }\r
+ bool OnLongPress(OHOS::UIView& view, const OHOS::LongPressEvent& event) override\r
+ {\r
+ return true;\r
+ }\r
+ bool OnRelease(OHOS::UIView& view, const OHOS::ReleaseEvent& event) override\r
+ {\r
+ return true;\r
+ }\r
+\r
+ bool OnDragStart(OHOS::UIView& view, const OHOS::DragEvent& event) override\r
+ {\r
+ return true;\r
+ }\r
+};\r
+}; // namespace OHOS\r
+\r
+#endif /* PHONE_MSG_NOTIFICATION_H */\r
--- /dev/null
+#include "msg_center_protocol.h"
+#include "msg_center_cmd.h"
+#include "ohos_init.h"
+#include "msg_center_common.h"
+namespace OHOS {
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static const msg_center_cmd_map_t g_msg_center_self_cmd_tbl[] = {
+#ifdef JS_ENABLE
+ { MSGCENTER_CMD_PING, MSGCENTER_TYPE_ID_PING_REC, msg_center_ping_rec},
+ { MSGCENTER_CMD_PING, MSGCENTER_TYPE_ID_PING_RSP, NULL},
+#endif
+};
+
+errcode_t msg_center_self_cmd_type(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)
+{
+ uint8_t tbl_size = sizeof(g_msg_center_self_cmd_tbl) / sizeof(g_msg_center_self_cmd_tbl[0]);
+ uint8_t i;
+ for (i = 0; i < tbl_size; i++) {
+ msg_center_cmd_map_t *item = (msg_center_cmd_map_t *)&g_msg_center_self_cmd_tbl[i];
+ if ((item->type == type) && (item->handler != NULL)) {
+ item->handler(cmd_id, type, usr_data, usr_len);
+ return ERRCODE_SUCC;
+ }
+ }
+ return ERRCODE_NOT_SUPPORT;
+}
+
+void xiaodu_self_cmd_init(void)
+{
+ msg_center_register_cmd(MSGCENTER_CMD_PING, msg_center_self_cmd_type);
+}
+
+#ifdef JS_ENABLE
+APP_FEATURE_INIT_PRI(xiaodu_self_cmd_init, LAYER_INIT_LEVEL_4);
+#endif
+#ifdef __cplusplus
+}
+#endif
+} // namespace OHOS
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.\r
+ * Description: phone message notification\r
+ * Create: 2025-04-25\r
+ */\r
+\r
+#include "notification_manager.h"\r
+#include "ohos_timer.h"\r
+#include "wearable_log.h"\r
+#include <string>\r
+#include "main/MessageModel.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
+// 三方消息主题\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
+// 三方消息内容\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
+\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
+\r
+UIViewGroup *PhoneMsgView::phoneMsgView_ = nullptr;\r
+UILabel *PhoneMsgView::appNameLabel_ = 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
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PhoneMsgStopNotifyCallback");\r
+ (void)data;\r
+ NotificationManager::GetInstance()->StopNotify();\r
+}\r
+\r
+void PhoneMsgView::StartPhoneMsgTimer(int32_t interval)\r
+{\r
+ uint32_t tick = GetOSTick(interval);\r
+ phoneMsgNotifyStop_ = new GraphicTimer(tick, PhoneMsgStopNotifyCallback, nullptr, true);\r
+ phoneMsgNotifyStop_->Start();\r
+}\r
+\r
+void PhoneMsgView::DisablePhoneMsgTimer()\r
+{\r
+ if (phoneMsgNotifyStop_ != nullptr) {\r
+ phoneMsgNotifyStop_->Stop();\r
+ delete phoneMsgNotifyStop_;\r
+ phoneMsgNotifyStop_ = nullptr;\r
+ }\r
+}\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_->SetViewId("phoneMsgView");\r
+ }\r
+\r
+ if (appNameLabel_ == nullptr) {\r
+ appNameLabel_ = new UILabel();\r
+ }\r
+ appNameLabel_->SetPosition(APP_NAME_POS_X, APP_NAME_POS_Y, APP_NAME_WIDTH, APP_NAME_HEIGHT);\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 (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
+ }\r
+ contentLabel_->SetPosition(MSG_CONTENT_POS_X, MSG_CONTENT_POS_Y, MSG_CONTENT_WIDTH, MSG_CONTENT_HEIGHT);\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
+ 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
+ phoneMsgView_->SetDraggable(true);\r
+ phoneMsgView_->SetTouchable(true);\r
+ UIView::OnDragListener *dragListener =\r
+ static_cast<UIView::OnDragListener *>(PhoneMsgViewEventListener::GetInstance());\r
+ UIView::OnClickListener *clickListener =\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::FreePhoneMsgView(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FreePhoneMsgView");\r
+ if (phoneMsgView_ != nullptr) {\r
+ DisablePhoneMsgTimer();\r
+ phoneMsgView_->RemoveAll();\r
+ delete appNameLabel_;\r
+ appNameLabel_ = nullptr;\r
+ delete titleLabel_;\r
+ titleLabel_ = 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
+void PhoneMsgView::UpDatePhoneMsg(std::string appName, std::string titile, std::string content)\r
+{\r
+ phoneMsg_.appName = appName;\r
+ phoneMsg_.msgTitle = titile;\r
+ phoneMsg_.msgContent = content;\r
+ MessageModel::GetInstance().GetMessageInfo(appName, titile, content);\r
+}\r
+\r
+PhoneMsgViewEventListener::PhoneMsgViewEventListener()\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PhoneMsgViewEventListener :%p", this);\r
+}\r
+\r
+PhoneMsgViewEventListener::~PhoneMsgViewEventListener()\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~PhoneMsgViewEventListener");\r
+}\r
+\r
+PhoneMsgViewEventListener *PhoneMsgViewEventListener::GetInstance(void)\r
+{\r
+ static PhoneMsgViewEventListener phoneMsgViewEventListener;\r
+ return &phoneMsgViewEventListener;\r
+}\r
+\r
+bool PhoneMsgViewEventListener::OnDrag(UIView &view, const DragEvent &event)\r
+{\r
+ return true;\r
+}\r
+\r
+bool PhoneMsgViewEventListener::OnDragEnd(UIView &view, const DragEvent &event)\r
+{\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
+ }\r
+ return true;\r
+}\r
+\r
+bool PhoneMsgViewEventListener::OnClick(UIView &view, const ClickEvent &event)\r
+{\r
+ UNUSED(event);\r
+ std::string viewId = view.GetViewId();\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PhoneMsgViewEventListener ClickListener %s", viewId.c_str());\r
+ if (viewId == "phoneMsgView") {\r
+ NotificationManager::GetInstance()->StopNotify();\r
+ }\r
+ return true;\r
+}\r
+} // namespace OHOS
\ No newline at end of file
#include "nandflash_to_os.h"\r
#endif\r
#ifdef SUPPORT_OHOSFWK\r
-#include "ui_screennotify.h"\r
+#include "screennotify/ui_screennotify.h"\r
#endif\r
#include "sys/time.h"\r
#include "touch_screen_def.h"\r
ac = TURN_OFF_SCREEN;\r
}\r
} else {\r
- ac = TURN_ON_SCREEN;\r
+ if (sc->enable_aod) {\r
+ if (sc->current_state == SCREEN_AMBIENT) {\r
+ // The driver needs to implement the logic for reporting these events.\r
+ if (event == MC_TP_SHORT_CLICK || event == MC_TP_DOUBLE_CLICK) {\r
+ ac = TURN_ON_SCREEN;\r
+ }\r
+ } else {\r
+ ac = TURN_ON_SCREEN;\r
+ }\r
+ } else {\r
+ ac = TURN_ON_SCREEN;\r
+ }\r
}\r
POWER_DISPLAY_PRINT_DEBUG(0, "filter_gui_execute_touch_event,ac:%u.", ac);\r
return ac;\r
--- /dev/null
+set(COMPONENT_NAME "remote_msg")\r
+\r
+set(PUBLIC_HEADER\r
+)\r
+\r
+set(PRIVATE_HEADER\r
+ ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/innerkits\r
+ ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits\r
+)\r
+\r
+set(SOURCES\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/remote_msg.cpp\r
+)\r
+\r
+set(COMPONENT_PUBLIC_CCFLAGS\r
+)\r
+\r
+set(COMPONENT_CCFLAGS\r
+ -std=c++11\r
+ -Wno-missing-field-initializers\r
+)\r
+\r
+set(WHOLE_LINK\r
+ true\r
+)\r
+\r
+set(PUBLIC_DEFINES\r
+)\r
+\r
+set(PRIVATE_DEFINES\r
+ APP_PLATFORM_WATCHGT\r
+ CONFIG_ACELITE_ENABLE\r
+)\r
+\r
+build_component()\r
+\r
+\r
--- /dev/null
+/*\r
+ * Copyright (c) CompanyNameMagicTag 2023-2023. All rights reserved.\r
+ * Description: ota upgrade handle.\r
+ * This file should be changed only infrequently and with great care.\r
+ */\r
+#include <stdio.h>\r
+#include "securec.h"\r
+#include "msg_center.h"\r
+#include "msg_center_protocol.h"\r
+#include "msg_center_cmd.h"\r
+#include "wearable_log.h"\r
+#include "securec.h"\r
+#include "msg_center.h"\r
+#include "msg_center_common.h"\r
+#include "ohos_init.h"\r
+#include "remote_msg.h"\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+static const msg_center_cmd_map_t g_msg_center_phone_msg_tbl[] = {\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
+};\r
+\r
+errcode_t msg_center_phone_msg_rec(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, "msg_center_phone_msg_rec, 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
+ MsgCenterNotifyProc(TOPIC_DEMO_ALL_MSG, &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, "phone msg_result fail, ret = %d\r\n", ret);\r
+ return ERRCODE_FAIL;\r
+ }\r
+ return ERRCODE_SUCC;\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
+ cmd_id, type);\r
+ uint8_t tbl_size = sizeof(g_msg_center_phone_msg_tbl) / sizeof(g_msg_center_phone_msg_tbl[0]);\r
+ uint8_t i;\r
+ for (i = 0; i < tbl_size; i++) {\r
+ msg_center_cmd_map_t *item = (msg_center_cmd_map_t *)&g_msg_center_phone_msg_tbl[i];\r
+ if ((item->type == type) && (item->handler != NULL)) {\r
+ item->handler(cmd_id, type, usr_data, usr_len);\r
+ return ERRCODE_SUCC;\r
+ }\r
+ }\r
+ return ERRCODE_NOT_SUPPORT;\r
+}\r
+\r
+void phone_msg_init(void)\r
+{\r
+ msg_center_register_cmd(MSGCENTER_CMD_PHONE_MSG, msg_center_phone_msg_type_dispatch);\r
+}\r
+\r
+APP_FEATURE_INIT_PRI(phone_msg_init, LAYER_INIT_LEVEL_4);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
+ * Description: third application message\r
+ * Author: CompanyName\r
+ * Create: 2021-11-11\r
+ */\r
+\r
+#ifndef REMOTE_MSG_H\r
+#define REMOTE_MSG_H\r
+\r
+#include "msg_center_protocol.h"\r
+\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+extern "C" {\r
+#endif\r
+#endif\r
+\r
+typedef enum msg_center_phone_msg_type_id {\r
+ MSGCENTER_TYPE_ID_MSG_THIRD_APP = 0x1, // 三方应用消息\r
+ MSGCENTER_TYPE_ID_MSG_SMS, // 短信\r
+ MSGCENTER_TYPE_ID_MSG_PHONE, // 电话\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
+\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+}\r
+#endif\r
+#endif\r
+#endif /* REMOTE_MSG_H */
\ No newline at end of file
#include "watchdog.h"\r
#include "js_ability.h"\r
#include "recording_module.h"\r
+#ifdef CONFIG_BRANDY_BLE_TRANS_OPTIMIZE\r
+#include "bluetooth/BluetoothChangeBle.h"\r
+#endif\r
\r
#ifdef __cplusplus\r
extern "C" {\r
return;\r
}\r
\r
+static errcode_t send_pcm_stream_data(pcm_stream_queue_msg msg)\r
+{\r
+ uint8_t retry_cnt = 100;\r
+ uint8_t msg_send_delay = 10;\r
+ errcode_t res;\r
+\r
+ while (retry_cnt--) {\r
+ if (msg.msg_id == MSGCENTER_TYPE_ID_XIAODU_SEND_PCM_STREAM) {\r
+ res = msg_center_xiaodu_send_pcm_stream(MSGCENTER_CMD_XIAODU, MSGCENTER_TYPE_ID_XIAODU_SEND_PCM_STREAM,\r
+ msg.data, msg.len);\r
+ } else if (msg.msg_id == MSGCENTER_TYPE_ID_XIAODU_END_RECORD) {\r
+ res = msg_center_xiaodu_send_end_record(MSGCENTER_CMD_XIAODU, MSGCENTER_TYPE_ID_XIAODU_END_RECORD, msg.data,\r
+ msg.len);\r
+#ifdef CONFIG_BRANDY_BLE_TRANS_OPTIMIZE\r
+ ChangeBleConnectToDefault();\r
+#endif\r
+ }\r
+\r
+ if (res != ERRCODE_SUCC) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "send stream fail, retry_cnt: %d, type = %d\n", retry_cnt,\r
+ msg.msg_id);\r
+ osDelay(msg_send_delay);\r
+ } else {\r
+ break;\r
+ }\r
+ }\r
+ free(msg.data);\r
+ msg.data = nullptr;\r
+ if (res != ERRCODE_SUCC) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "after retry, send stream still fail, retry_cnt: %d, type = %d\n",\r
+ retry_cnt, msg.msg_id);\r
+ pcm_stream_del_queue();\r
+ return ERRCODE_FAIL;\r
+ }\r
+ return ERRCODE_SUCC;\r
+}\r
+\r
static errcode_t pcm_stream_task_body(void *data)\r
{\r
UNUSED(data);\r
}\r
\r
g_pcm_stream_end_record_sended_flag = false;\r
+#ifdef CONFIG_BRANDY_BLE_TRANS_OPTIMIZE\r
+ ChangeBleConnectToMax();\r
+#endif\r
\r
for (;;) {\r
osStatus_t ret = osMessageQueueGet(g_pcm_stream_msg_queue_id, &msg, nullptr, osWaitForever);\r
if (ret != osOK) {\r
- msg.msg_id = MSGCENTER_TYPE_ID_XIAODU_END_RECORD;\r
- msg.data = nullptr;\r
+ continue;\r
}\r
- if (msg.msg_id == MSGCENTER_TYPE_ID_XIAODU_SEND_PCM_STREAM) {\r
- res = msg_center_xiaodu_send_pcm_stream(MSGCENTER_CMD_XIAODU, MSGCENTER_TYPE_ID_XIAODU_SEND_PCM_STREAM,\r
- msg.data, msg.len);\r
- free(msg.data);\r
- msg.data = nullptr;\r
- if (res != ERRCODE_SUCC) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "send pcm stream failed");\r
- pcm_stream_del_queue();\r
- return ERRCODE_FAIL;\r
- }\r
- } else if (msg.msg_id == MSGCENTER_TYPE_ID_XIAODU_END_RECORD) {\r
- res = msg_center_xiaodu_send_end_record(MSGCENTER_CMD_XIAODU, MSGCENTER_TYPE_ID_XIAODU_END_RECORD, msg.data,\r
- msg.len);\r
- free(msg.data);\r
- msg.data = nullptr;\r
- if (res != ERRCODE_SUCC) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "send pcm end failed");\r
- pcm_stream_del_queue();\r
- return ERRCODE_FAIL;\r
- }\r
- g_pcm_stream_end_record_sended_flag = true;\r
- return ERRCODE_SUCC;\r
+\r
+ /* pcm帧、end帧合并处理 */\r
+ res = send_pcm_stream_data(msg);\r
+ if (res == ERRCODE_FAIL || (res == ERRCODE_SUCC && msg.msg_id == MSGCENTER_TYPE_ID_XIAODU_END_RECORD)) {\r
+ return res;\r
}\r
}\r
-\r
- return ERRCODE_SUCC;\r
}\r
\r
/*\r
\r
errcode_t msg_center_xiaodu_start(uint8_t cmd_id, uint8_t type, void *usr_data, uint16_t usr_len)\r
{\r
- unused(usr_data);\r
uint8_t ack = 1;\r
errcode_t ret = ERRCODE_SUCC;\r
\r
}\r
display_api->set_screen_set_keepon_timeout(30000); // 30000ms\r
#endif\r
-#ifdef JS_ENABLE\r
- StartJsApp("com.vendor.voiceassistant");\r
-#endif\r
\r
/* ack */\r
ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack));\r
if (ret != ERRCODE_SUCC) {\r
return ERRCODE_FAIL;\r
}\r
+ uint8_t *tlv_payload = (uint8_t *)msg_center_get_tlv_payload(usr_data);\r
+#ifdef JS_ENABLE\r
+ if(tlv_payload[0] == 1) {\r
+ StartJsApp("com.vendor.Aidialogue");\r
+ } else {\r
+ StartJsApp("com.vendor.Aidial");\r
+ }\r
\r
+#endif\r
return ERRCODE_SUCC;\r
}\r
\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "send pcm stream end, usr_data = %d, usr_len = %d\r\n",\r
*(uint8_t *)usr_data, usr_len); /* usr_data参考协议msg_center_pcm_end_flag_t */\r
pcm_stream_del_queue();\r
+ g_pcm_stream_end_record_sended_flag = true;\r
return ERRCODE_SUCC;\r
}\r
\r
#include "msg_center_protocol.h"
#include "msg_center_cmd.h"
#include "ohos_init.h"
+#include "msg_center_common.h"
+#include "wearable_log.h"
+
namespace OHOS {
#ifdef __cplusplus