From fee588a62592b637caddae5a8354712a7efb9780 Mon Sep 17 00:00:00 2001 From: litiangang4 Date: Sun, 8 Oct 2023 16:35:16 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9B=B7=E8=BE=BE=E6=89=93=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: litiangang4 --- dfx_utils/BUILD.gn | 1 + dfx_utils/include/dinput_radar_helper.h | 81 ++++++ dfx_utils/src/dinput_radar_helper.cpp | 209 +++++++++++++++ distributedinput.gni | 4 + .../src/distributed_input_sink_manager.cpp | 13 + services/source/sourcemanager/BUILD.gn | 4 + .../src/distributed_input_source_manager.cpp | 243 +++++++++++++++++- sinkhandler/BUILD.gn | 4 + .../src/distributed_input_sink_handler.cpp | 13 + .../src/load_d_input_sink_callback.cpp | 25 ++ sourcehandler/BUILD.gn | 4 + .../src/distributed_input_source_handler.cpp | 37 +++ .../src/load_d_input_source_callback.cpp | 25 ++ 13 files changed, 661 insertions(+), 2 deletions(-) create mode 100644 dfx_utils/include/dinput_radar_helper.h create mode 100644 dfx_utils/src/dinput_radar_helper.cpp diff --git a/dfx_utils/BUILD.gn b/dfx_utils/BUILD.gn index e0f85e6..2a6c21e 100755 --- a/dfx_utils/BUILD.gn +++ b/dfx_utils/BUILD.gn @@ -29,6 +29,7 @@ ohos_shared_library("libdinput_dfx_utils") { sources = [ "${utils_path}/src/dinput_log.cpp", + "src/dinput_radar_helper.cpp", "src/hidumper.cpp", "src/hisysevent_util.cpp", ] diff --git a/dfx_utils/include/dinput_radar_helper.h b/dfx_utils/include/dinput_radar_helper.h new file mode 100644 index 0000000..ced0563 --- /dev/null +++ b/dfx_utils/include/dinput_radar_helper.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_RADAR_HELPER_H +#define OHOS_RADAR_HELPER_H + +#include +#include +#include + +#include "single_instance.h" + +namespace OHOS { +namespace DistributedHardware { +constexpr int32_t PROCESS_FAIL = -1; +constexpr int32_t PROCESS_SUCCESS = 0; +constexpr std::string HOSTPKGNAME = "distributed.hardware.dinput"; + +enum class SAStage : int32_t { + Load_SA_START = 0x0, + Load_SA_END = 0x1, + Release_SA_END = 0x2 +}; +enum class DinputCrossStage : int32_t { + REGISTER_START = 0x0, + REGISTER_END = 0x1, + UNREGISTER_START = 0x2, + UNREGISTER_END = 0x3, + PREPARE_START = 0x4, + PREPARE_END = 0x5, + UNPREPARE_START = 0x6, + UNPREPARE_END = 0x7, + START_START = 0x8, + START_END = 0x9, + STOP_START = 0x10, + STOP_END = 0x11, +}; + +struct RadarInfo { + int32_t formID; + int32_t stage; + int32_t result; + int32_t errCode; + int32_t module; +}; + +enum class Module : int32_t { + DISTRIBUTED_INPUT = 0x0, +}; + +class DinputRadarHelper { + DECLARE_SINGLE_INSTANCE_BASE(DinputRadarHelper); +public: + bool ReportLoadSAProcess(struct RadarInfo info); + bool ReportUnloadSAProcess(struct RadarInfo info); + bool ReportRegisterProcess(struct RadarInfo info, std::string devId, std::string dhId); + bool ReportUnregisterProcess(struct RadarInfo info, std::string devId, std::string dhId); + bool ReportPrepareProcess(struct RadarInfo info, std::string srcId, std::string sinkId); + bool ReportUnprepareProcess(struct RadarInfo info, std::string srcId, std::string sinkId); + bool ReportStartProcess(struct RadarInfo info, std::string srcId, std::string sinkId); + bool ReportStopProcess(struct RadarInfo info, std::string srcId, std::string sinkId); + +private: + int32_t GetErrorCode(int32_t errCode, int32_t module); + int32_t GetCurrentTime(); +}; +} // namespace DistributedHardware +} // namespace OHOS +#endif // OHOS_RADAR_HELPER_H \ No newline at end of file diff --git a/dfx_utils/src/dinput_radar_helper.cpp b/dfx_utils/src/dinput_radar_helper.cpp new file mode 100644 index 0000000..233ca49 --- /dev/null +++ b/dfx_utils/src/dinput_radar_helper.cpp @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "dinput_radar_helper.h" + +#include +#include +#include + +namespace OHOS { +namespace DistributedHardware { +IMPLEMENT_SINGLE_INSTANCE(DinputRadarHelper); +bool DinputRadarHelper::ReportLoadSAProcess(struct RadarInfo info) +{ + cJSON* loadSA = cJSON_CreateObject(); + if (loadSA == nullptr) { + LOGE("cjson create object loadSA failed."); + return false; + } + cJSON_AddStringToObject(loadSA, "hostpkgname", HOSTPKGNAME.c_str()); + cJSON_AddNumberToObject(loadSA, "formID", info.formID); + cJSON_AddNumberToObject(loadSA, "time", GetCurrentTime()); + cJSON_AddNumberToObject(loadSA, "stage", info.stage); + cJSON_AddNumberToObject(loadSA, "result", info.result); + if (info.result != PROCESS_SUCC) { + cJSON_AddNumberToObject(loadSA, "errCode", GetErrorCode(info.errCode, info.module)); + } + CommunicationRadar::getInstance().ReportProcessInfoToCommRadar(loadSA, nullptr); + cJSON_Delete(loadSA); + return true; +} + +bool DinputRadarHelper::ReportUnloadSAProcess(struct RadarInfo info) +{ + cJSON* unloadSA = cJSON_CreateObject(); + if (unloadSA == nullptr) { + LOGE("cjson create object unloadSA failed."); + return false; + } + cJSON_AddStringToObject(unloadSA, "hostpkgname", HOSTPKGNAME.c_str()); + cJSON_AddNumberToObject(unloadSA, "formID", info.formID); + cJSON_AddNumberToObject(unloadSA, "time", GetCurrentTime()); + cJSON_AddNumberToObject(unloadSA, "stage", info.stage); + cJSON_AddNumberToObject(unloadSA, "result", info.result); + if (info.result != PROCESS_SUCC) { + cJSON_AddNumberToObject(unloadSA, "errCode", GetErrorCode(info.errCode, info.module)); + } + CommunicationRadar::getInstance().ReportProcessInfoToCommRadar(unloadSA, nullptr); + cJSON_Delete(unloadSA); + return true; +} + +bool DinputRadarHelper::ReportRegisterProcess(struct RadarInfo info, std::string devId, std::string dhId) +{ + cJSON* register = cJSON_CreateObject(); + if (register == nullptr) { + LOGE("cjson create object register failed."); + return false; + } + cJSON_AddStringToObject(register, "hostpkgname", HOSTPKGNAME.c_str()); + cJSON_AddNumberToObject(register, "formID", info.formID); + cJSON_AddNumberToObject(register, "time", GetCurrentTime()); + cJSON_AddNumberToObject(register, "stage", info.stage); + cJSON_AddNumberToObject(register, "result", info.result); + cJSON_AddStringToObject(register, "devId", devId); + cJSON_AddStringToObject(register, "dhId", dhId); + if (info.result != PROCESS_SUCC) { + cJSON_AddNumberToObject(register, "errCode", GetErrorCode(info.errCode, info.module)); + } + CommunicationRadar::getInstance().ReportProcessInfoToCommRadar(register, nullptr); + cJSON_Delete(register); + return true; +} + +bool DinputRadarHelper::ReportUnregisterProcess(struct RadarInfo info, std::string devId, std::string dhId) +{ + cJSON* unregister = cJSON_CreateObject(); + if (unregister == nullptr) { + LOGE("cjson create object unregister failed."); + return false; + } + cJSON_AddStringToObject(unregister, "hostpkgname", HOSTPKGNAME.c_str()); + cJSON_AddNumberToObject(unregister, "formID", info.formID); + cJSON_AddNumberToObject(unregister, "time", GetCurrentTime()); + cJSON_AddNumberToObject(unregister, "stage", info.stage); + cJSON_AddNumberToObject(unregister, "result", info.result); + cJSON_AddStringToObject(unregister, "devId", devId); + cJSON_AddStringToObject(unregister, "dhId", dhId); + if (info.result != PROCESS_SUCC) { + cJSON_AddNumberToObject(unregister, "errCode", GetErrorCode(info.errCode, info.module)); + } + CommunicationRadar::getInstance().ReportProcessInfoToCommRadar(unregister, nullptr); + cJSON_Delete(unregister); + return true; +} + +bool DinputRadarHelper::ReportPrepareProcess(struct RadarInfo info, std::string srcId, std::string sinkId) +{ + cJSON* prepare = cJSON_CreateObject(); + if (prepare == nullptr) { + LOGE("cjson create object prepare failed."); + return false; + } + cJSON_AddStringToObject(prepare, "hostpkgname", HOSTPKGNAME.c_str()); + cJSON_AddNumberToObject(prepare, "formID", info.formID); + cJSON_AddNumberToObject(prepare, "time", GetCurrentTime()); + cJSON_AddNumberToObject(prepare, "stage", info.stage); + cJSON_AddNumberToObject(prepare, "result", info.result); + cJSON_AddStringToObject(prepare, "srcId", srcId); + cJSON_AddStringToObject(prepare, "sinkId", sinkId); + if (info.result != PROCESS_SUCC) { + cJSON_AddNumberToObject(prepare, "errCode", GetErrorCode(info.errCode, info.module)); + } + CommunicationRadar::getInstance().ReportProcessInfoToCommRadar(prepare, nullptr); + cJSON_Delete(prepare); + return true; +} + +bool DinputRadarHelper::ReportUnprepareProcess(struct RadarInfo info, std::string srcId, std::string sinkId) +{ + cJSON* unprepare = cJSON_CreateObject(); + if (unprepare == nullptr) { + LOGE("cjson create object unprepare failed."); + return false; + } + cJSON_AddStringToObject(unprepare, "hostpkgname", HOSTPKGNAME.c_str()); + cJSON_AddNumberToObject(unprepare, "formID", info.formID); + cJSON_AddNumberToObject(unprepare, "time", GetCurrentTime()); + cJSON_AddNumberToObject(unprepare, "stage", info.stage); + cJSON_AddNumberToObject(unprepare, "result", info.result); + cJSON_AddStringToObject(unprepare, "srcId", srcId); + cJSON_AddStringToObject(unprepare, "sinkId", sinkId); + if (info.result != PROCESS_SUCC) { + cJSON_AddNumberToObject(unprepare, "errCode", GetErrorCode(info.errCode, info.module)); + } + CommunicationRadar::getInstance().ReportProcessInfoToCommRadar(unprepare, nullptr); + cJSON_Delete(unprepare); + return true; +} + +bool DinputRadarHelper::ReportStartProcess(struct RadarInfo info, std::string srcId, std::string sinkId) +{ + cJSON* start = cJSON_CreateObject(); + if (start == nullptr) { + LOGE("cjson create object start failed."); + return false; + } + cJSON_AddStringToObject(start, "hostpkgname", HOSTPKGNAME.c_str()); + cJSON_AddNumberToObject(start, "formID", info.formID); + cJSON_AddNumberToObject(start, "time", GetCurrentTime()); + cJSON_AddNumberToObject(start, "stage", info.stage); + cJSON_AddNumberToObject(start, "result", info.result); + cJSON_AddStringToObject(start, "srcId", srcId); + cJSON_AddStringToObject(start, "sinkId", sinkId); + if (info.result != PROCESS_SUCC) { + cJSON_AddNumberToObject(start, "errCode", GetErrorCode(info.errCode, info.module)); + } + CommunicationRadar::getInstance().ReportProcessInfoToCommRadar(start, nullptr); + cJSON_Delete(start); + return true; +} + +bool DinputRadarHelper::ReportStopProcess(struct RadarInfo info, std::string srcId, std::string sinkId) +{ + cJSON* stop = cJSON_CreateObject(); + if (stop == nullptr) { + LOGE("cjson create object stop failed."); + return false; + } + cJSON_AddStringToObject(stop, "hostpkgname", HOSTPKGNAME.c_str()); + cJSON_AddNumberToObject(stop, "formID", info.formID); + cJSON_AddNumberToObject(stop, "time", GetCurrentTime()); + cJSON_AddNumberToObject(stop, "stage", info.stage); + cJSON_AddNumberToObject(stop, "result", info.result); + cJSON_AddStringToObject(stop, "srcId", srcId); + cJSON_AddStringToObject(stop, "sinkId", sinkId); + if (info.result != PROCESS_SUCC) { + cJSON_AddNumberToObject(stop, "errCode", GetErrorCode(info.errCode, info.module)); + } + CommunicationRadar::getInstance().ReportProcessInfoToCommRadar(stop, nullptr); + cJSON_Delete(stop); + return true; +} + +int32_t DinputRadarHelper::GetErrorCode(int32_t errCode, int32_t module) +{ + return ErrCodeOffset(SUBSYS_DISTRIBUTEDHARDWARE, module) + errCode; +} + +int32_t DinputRadarHelper::GetCurrentTime() +{ + time_t curTime; + time(&curTime); + return curTime; +} +} // namespace DistributedHardware +} // namespace OHOS \ No newline at end of file diff --git a/distributedinput.gni b/distributedinput.gni index 9493eec..3e726a8 100644 --- a/distributedinput.gni +++ b/distributedinput.gni @@ -43,3 +43,7 @@ fwk_interfaces_path = "${distributedhardwarefwk_path}/interfaces/inner_kits" av_transport_path = "${distributedhardwarefwk_path}/av_transport" distributedinput_ldflags = [ "-lpthread" ] + +declare_args() { + dinput_radar = false +} diff --git a/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp b/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp index 27bd793..a9ce75f 100644 --- a/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp +++ b/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp @@ -38,6 +38,7 @@ #include "dinput_errcode.h" #include "dinput_log.h" #include "dinput_utils_tool.h" +#include "dinput_radar_helper.h" #include "hidumper.h" #include "hisysevent_util.h" #include "white_list_util.h" @@ -686,6 +687,18 @@ int32_t DistributedInputSinkManager::Release() } HisyseventUtil::GetInstance().SysEventWriteBehavior(DINPUT_EXIT, "dinput sink sa exit success."); +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20501001, + .stage = SAStage::Release_SA_END, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportUnloadSAProcess(info)) { + DHLOGE("Report release sink sa failed."); + } +#endif auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (systemAbilityMgr == nullptr) { DHLOGE("Failed to get SystemAbilityManager."); diff --git a/services/source/sourcemanager/BUILD.gn b/services/source/sourcemanager/BUILD.gn index fc1defb..6d366d3 100644 --- a/services/source/sourcemanager/BUILD.gn +++ b/services/source/sourcemanager/BUILD.gn @@ -114,6 +114,10 @@ ohos_shared_library("libdinput_source") { "samgr:samgr_proxy", ] + if (dinput_radar) { + defines += [ "DINPUT_RADAR" ] + } + cflags_cc = [ "-DHILOG_ENABLE" ] subsystem_name = "distributedhardware" diff --git a/services/source/sourcemanager/src/distributed_input_source_manager.cpp b/services/source/sourcemanager/src/distributed_input_source_manager.cpp index 4cfaeb4..ad07487 100644 --- a/services/source/sourcemanager/src/distributed_input_source_manager.cpp +++ b/services/source/sourcemanager/src/distributed_input_source_manager.cpp @@ -36,6 +36,7 @@ #include "distributed_input_source_transport.h" #include "distributed_input_transport_base.h" #include "dinput_softbus_define.h" +#include "dinput_radar_helper.h" #include "hisysevent_util.h" #include "hidumper.h" #include "input_check_param.h" @@ -197,6 +198,18 @@ int32_t DistributedInputSourceManager::Release() UnregisterDHFwkPublisher(); HisyseventUtil::GetInstance().SysEventWriteBehavior(DINPUT_EXIT, "dinput source sa exit success."); +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20502001, + .stage = SAStage::Release_SA_END, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportUnloadSAProcess(info)) { + DHLOGE("Report release source sa failed."); + } +#endif auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (systemAbilityMgr == nullptr) { DHLOGE("Failed to get SystemAbilityManager."); @@ -283,7 +296,18 @@ int32_t DistributedInputSourceManager::RegisterDistributedHardware(const std::st HisyseventUtil::GetInstance().SysEventWriteFault(DINPUT_REGISTER_FAIL, devId, dhId, ERR_DH_INPUT_SERVER_SOURCE_MANAGER_REGISTER_FAIL, "Dinputregister failed in create input node."); DHLOGE("RegisterDistributedHardware called, create node fail."); - +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20503003, + .stage = DinputCrossStage::END, + .result = (ret == DH_SUCCESS) ? PROCESS_SUCCESS : PROCESS_FAIL + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportRegisterProcess(info, devId, dhId)) { + DHLOGE("Report register dh failed."); + } +#endif for (auto iter = regCallbacks_.begin(); iter != regCallbacks_.end(); ++iter) { if (iter->devId == devId && iter->dhId == dhId) { iter->callback->OnResult(iter->devId, iter->dhId, ERR_DH_INPUT_SERVER_SOURCE_MANAGER_REGISTER_FAIL); @@ -301,7 +325,18 @@ int32_t DistributedInputSourceManager::RegisterDistributedHardware(const std::st // 4.notify source distributedfwk register hardware success callback->OnResult(devId, dhId, DH_SUCCESS); - +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20503002, + .stage = DinputCrossStage::END, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportRegisterProcess(info, devId, dhId)) { + DHLOGE("Report register dh failed."); + } +#endif // 5. notify remote side that this side is registerd remote dhid sptr cli = DInputSourceSACliMgr::GetInstance().GetRemoteCli(devId); if (cli == nullptr) { @@ -393,6 +428,18 @@ int32_t DistributedInputSourceManager::CheckDeviceIsExists(const std::string &de if (it == inputDevice_.end()) { DHLOGE("CheckDevice called, deviceId: %s is not exist.", GetAnonyString(devId).c_str()); +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20504003, + .stage = DinputCrossStage::UNREGISTER_END, + .result = PROCESS_FAIL, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportUnregisterProcess(info, devId, dhId)) { + DHLOGE("Report unregister dh failed."); + } +#endif if (UnregCallbackNotify(devId, dhId) != DH_SUCCESS) { return ERR_DH_INPUT_SERVER_SOURCE_MANAGER_UNREGISTER_FAIL; } @@ -407,6 +454,18 @@ int32_t DistributedInputSourceManager::DeleteInputDeviceNodeInfo(const std::stri int32_t ret = DistributedInputInject::GetInstance().UnregisterDistributedHardware(devId, dhId); if (ret != DH_SUCCESS) { DHLOGE("RemoveInputNode called, remove node fail."); +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20504004, + .stage = DinputCrossStage::UNREGISTER_END, + .result = PROCESS_FAIL, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportUnregisterProcess(info, devId, dhId)) { + DHLOGE("Report unregister dh failed."); + } +#endif if (UnregCallbackNotify(devId, dhId) != DH_SUCCESS) { return ERR_DH_INPUT_SERVER_SOURCE_MANAGER_UNREGISTER_FAIL; } @@ -468,6 +527,18 @@ int32_t DistributedInputSourceManager::UnregisterDistributedHardware(const std:: // isstart callback handleStartServerCallback(devId); +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20504002, + .stage = DinputCrossStage::UNREGISTER_END, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportUnregisterProcess(info, devId, dhId)) { + DHLOGE("Report unregister dh failed."); + } +#endif return DH_SUCCESS; } @@ -819,6 +890,18 @@ int32_t DistributedInputSourceManager::RelayStopRemoteInputByType( int32_t DistributedInputSourceManager::PrepareRemoteInput(const std::string &srcId, const std::string &sinkId, sptr callback) { +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20505001, + .stage = DinputCrossStage::PREPARE_START, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportPrepareProcess(info, srcId, sinkId)) { + DHLOGE("Report prepare remote failed."); + } +#endif if (!DInputCheckParam::GetInstance().CheckParam(srcId, sinkId, callback)) { HisyseventUtil::GetInstance().SysEventWriteFault(DINPUT_OPT_FAIL, sinkId, ERR_DH_INPUT_SERVER_SOURCE_MANAGER_PREPARE_FAIL, "Dinput prepare param is failed."); @@ -849,6 +932,18 @@ int32_t DistributedInputSourceManager::PrepareRemoteInput(const std::string &src ret = DistributedInputSourceTransport::GetInstance().PrepareRemoteInput(sinkId); if (ret != DH_SUCCESS) { +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20505003, + .stage = DinputCrossStage::PREPARE_END, + .result = (ret == DH_SUCCESS) ? PROCESS_SUCCESS : PROCESS_FAIL, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportPrepareProcess(info, srcId, sinkId)) { + DHLOGE("Report prepare remote failed."); + } +#endif DHLOGE("Can not send message by softbus, prepare fail."); for (auto iter = preCallbacks_.begin(); iter != preCallbacks_.end(); ++iter) { if (iter->devId == sinkId) { @@ -858,12 +953,36 @@ int32_t DistributedInputSourceManager::PrepareRemoteInput(const std::string &src } return ERR_DH_INPUT_SERVER_SOURCE_MANAGER_PREPARE_FAIL; } +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20505002, + .stage = DinputCrossStage::PREPARE_END, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportPrepareProcess(info, srcId, sinkId)) { + DHLOGE("Report prepare remote failed."); + } +#endif return DH_SUCCESS; } int32_t DistributedInputSourceManager::UnprepareRemoteInput(const std::string &srcId, const std::string &sinkId, sptr callback) { +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20506001, + .stage = DinputCrossStage::UNPREPARE_START, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportUnprepareProcess(info, srcId, sinkId)) { + DHLOGE("Report unprepare remote failed."); + } +#endif if (!DInputCheckParam::GetInstance().CheckParam(srcId, sinkId, callback)) { HisyseventUtil::GetInstance().SysEventWriteFault(DINPUT_OPT_FAIL, sinkId, ERR_DH_INPUT_SERVER_SOURCE_MANAGER_UNPREPARE_FAIL, "Dinput unprepare param is failed."); @@ -890,6 +1009,18 @@ int32_t DistributedInputSourceManager::UnprepareRemoteInput(const std::string &s unpreCallbacks_.push_back(info); int32_t ret = DistributedInputSourceTransport::GetInstance().UnprepareRemoteInput(sinkId); if (ret != DH_SUCCESS) { +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20506003, + .stage = DinputCrossStage::UNPREPARE_END, + .result = (ret == DH_SUCCESS) ? PROCESS_SUCCESS : PROCESS_FAIL, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportUnprepareProcess(info, srcId, sinkId)) { + DHLOGE("Report unprepare remote failed."); + } +#endif DHLOGE("Can not send message by softbus, unprepare fail."); for (auto iter = unpreCallbacks_.begin(); iter != unpreCallbacks_.end(); ++iter) { if (iter->devId == sinkId) { @@ -899,6 +1030,18 @@ int32_t DistributedInputSourceManager::UnprepareRemoteInput(const std::string &s } return ERR_DH_INPUT_SERVER_SOURCE_MANAGER_UNPREPARE_FAIL; } +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20506002, + .stage = DinputCrossStage::UNPREPARE_END, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportUnprepareProcess(info, srcId, sinkId)) { + DHLOGE("Report unprepare remote failed."); + } +#endif return DH_SUCCESS; } @@ -1023,6 +1166,18 @@ int32_t DistributedInputSourceManager::StopRemoteInput(const std::string &sinkId int32_t DistributedInputSourceManager::StartRemoteInput(const std::string &srcId, const std::string &sinkId, const std::vector &dhIds, sptr callback) { +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20507001, + .stage = DinputCrossStage::START_START, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportStartProcess(info, srcId, sinkId)) { + DHLOGE("Report start remote failed."); + } +#endif StartAsyncTrace(DINPUT_HITRACE_LABEL, DINPUT_START_START, DINPUT_START_TASK); HisyseventUtil::GetInstance().SysEventWriteBehavior(DINPUT_START_USE, sinkId, "Dinput start use call."); if (!DInputCheckParam::GetInstance().CheckParam(srcId, sinkId, dhIds, callback)) { @@ -1047,6 +1202,18 @@ int32_t DistributedInputSourceManager::StartRemoteInput(const std::string &srcId HisyseventUtil::GetInstance().SysEventWriteFault(DINPUT_OPT_FAIL, sinkId, ERR_DH_INPUT_SERVER_SOURCE_MANAGER_START_FAIL, "Dinput start use failed in already start."); FinishAsyncTrace(DINPUT_HITRACE_LABEL, DINPUT_START_START, DINPUT_START_TASK); +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20507003, + .stage = DinputCrossStage::START_END, + .result = PROCESS_FAIL, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportStartProcess(info, srcId, sinkId)) { + DHLOGE("Report start remote failed."); + } +#endif DHLOGE("sinkId: %s, repeat call.", GetAnonyString(sinkId).c_str()); return ERR_DH_INPUT_SERVER_SOURCE_MANAGER_START_FAIL; } @@ -1057,6 +1224,18 @@ int32_t DistributedInputSourceManager::StartRemoteInput(const std::string &srcId DeviceMap_[sinkId] = DINPUT_SOURCE_SWITCH_OFF; int32_t ret = DistributedInputSourceTransport::GetInstance().StartRemoteInput(sinkId, dhIds); if (ret != DH_SUCCESS) { +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20507004, + .stage = DinputCrossStage::START_END, + .result = (ret == DH_SUCCESS) ? PROCESS_SUCCESS : PROCESS_FAIL, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportStartProcess(info, srcId, sinkId)) { + DHLOGE("Report start remote failed."); + } +#endif HisyseventUtil::GetInstance().SysEventWriteFault(DINPUT_OPT_FAIL, sinkId, ERR_DH_INPUT_SERVER_SOURCE_MANAGER_START_FAIL, "Dinput start use failed in transport start."); FinishAsyncTrace(DINPUT_HITRACE_LABEL, DINPUT_START_START, DINPUT_START_TASK); @@ -1069,12 +1248,36 @@ int32_t DistributedInputSourceManager::StartRemoteInput(const std::string &srcId } return ERR_DH_INPUT_SERVER_SOURCE_MANAGER_START_FAIL; } +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20507002, + .stage = DinputCrossStage::START_END, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportStartProcess(info, srcId, sinkId)) { + DHLOGE("Report start remote failed."); + } +#endif return DH_SUCCESS; } int32_t DistributedInputSourceManager::StopRemoteInput(const std::string &srcId, const std::string &sinkId, const std::vector &dhIds, sptr callback) { +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20508001, + .stage = DinputCrossStage::STOP_START, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportStopProcess(info, srcId, sinkId)) { + DHLOGE("Report stop remote failed."); + } +#endif StartAsyncTrace(DINPUT_HITRACE_LABEL, DINPUT_STOP_START, DINPUT_STOP_TASK); HisyseventUtil::GetInstance().SysEventWriteBehavior(DINPUT_STOP_USE, sinkId, "Dinput stop use call."); if (!DInputCheckParam::GetInstance().CheckParam(srcId, sinkId, dhIds, callback)) { @@ -1100,6 +1303,18 @@ int32_t DistributedInputSourceManager::StopRemoteInput(const std::string &srcId, HisyseventUtil::GetInstance().SysEventWriteFault(DINPUT_OPT_FAIL, sinkId, ERR_DH_INPUT_SERVER_SOURCE_MANAGER_STOP_FAIL, "Dinput stop use failed in already stop."); FinishAsyncTrace(DINPUT_HITRACE_LABEL, DINPUT_STOP_START, DINPUT_STOP_TASK); +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20508003, + .stage = DinputCrossStage::STOP_END, + .result = PROCESS_FAIL, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportStopProcess(info, srcId, sinkId)) { + DHLOGE("Report stop remote failed."); + } +#endif DHLOGE("sinkId: %s, repeat call.", GetAnonyString(sinkId).c_str()); return ERR_DH_INPUT_SERVER_SOURCE_MANAGER_STOP_FAIL; } @@ -1109,6 +1324,18 @@ int32_t DistributedInputSourceManager::StopRemoteInput(const std::string &srcId, stpStringCallbacks_.push_back(info); int32_t ret = DistributedInputSourceTransport::GetInstance().StopRemoteInput(sinkId, dhIds); if (ret != DH_SUCCESS) { +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20508004, + .stage = DinputCrossStage::STOP_END, + .result = (ret == DH_SUCCESS) ? PROCESS_SUCCESS : PROCESS_FAIL, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportStopProcess(info, srcId, sinkId)) { + DHLOGE("Report stop remote failed."); + } +#endif HisyseventUtil::GetInstance().SysEventWriteFault(DINPUT_OPT_FAIL, sinkId, ERR_DH_INPUT_SERVER_SOURCE_MANAGER_STOP_FAIL, "Dinput stop use failed in transport stop."); FinishAsyncTrace(DINPUT_HITRACE_LABEL, DINPUT_STOP_START, DINPUT_STOP_TASK); @@ -1121,6 +1348,18 @@ int32_t DistributedInputSourceManager::StopRemoteInput(const std::string &srcId, } return ERR_DH_INPUT_SERVER_SOURCE_MANAGER_STOP_FAIL; } +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20508002, + .stage = DinputCrossStage::STOP_END, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportStopProcess(info, srcId, sinkId)) { + DHLOGE("Report stop remote failed."); + } +#endif return DH_SUCCESS; } diff --git a/sinkhandler/BUILD.gn b/sinkhandler/BUILD.gn index 7a7c2f5..1179f7f 100644 --- a/sinkhandler/BUILD.gn +++ b/sinkhandler/BUILD.gn @@ -60,6 +60,10 @@ ohos_shared_library("libdinput_sink_handler") { "samgr:samgr_proxy", ] + if (dinput_radar) { + defines += [ "DINPUT_RADAR" ] + } + cflags_cc = [ "-DHILOG_ENABLE" ] subsystem_name = "distributedhardware" diff --git a/sinkhandler/src/distributed_input_sink_handler.cpp b/sinkhandler/src/distributed_input_sink_handler.cpp index a6a49f5..a82458e 100644 --- a/sinkhandler/src/distributed_input_sink_handler.cpp +++ b/sinkhandler/src/distributed_input_sink_handler.cpp @@ -17,6 +17,7 @@ #include "dinput_errcode.h" #include "dinput_log.h" +#include "dinput_radar_helper.h" #include "hisysevent_util.h" #include "i_distributed_sink_input.h" #include "load_d_input_sink_callback.h" @@ -45,6 +46,18 @@ int32_t DistributedInputSinkHandler::InitSink(const std::string ¶ms) HisyseventUtil::GetInstance().SysEventWriteBehavior(DINPUT_INIT, "dinput sink LoadSystemAbility call"); int32_t ret = samgr->LoadSystemAbility(DISTRIBUTED_HARDWARE_INPUT_SINK_SA_ID, loadCallback); +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20500001, + .stage = SAStage::Load_SA_START, + .result = (ret == ERR_OK) ? PROCESS_SUCCESS : PROCESS_FAIL, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportLoadSAProcess(info)) { + DHLOGE("Report load sink sa failed."); + } +#endif if (ret != ERR_OK) { DHLOGE("Failed to Load systemAbility, systemAbilityId:%d, ret code:%d", DISTRIBUTED_HARDWARE_INPUT_SINK_SA_ID, ret); diff --git a/sinkhandler/src/load_d_input_sink_callback.cpp b/sinkhandler/src/load_d_input_sink_callback.cpp index dd61e7d..52ef03d 100644 --- a/sinkhandler/src/load_d_input_sink_callback.cpp +++ b/sinkhandler/src/load_d_input_sink_callback.cpp @@ -17,6 +17,7 @@ #include "dinput_log.h" #include "distributed_input_sink_handler.h" +#include "dinput_radar_helper.h" #include "hisysevent_util.h" namespace OHOS { @@ -33,6 +34,18 @@ void LoadDInputSinkCallback::OnLoadSystemAbilitySuccess( DHLOGE("remoteObject is nullptr"); return; } +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20500002, + .stage = SAStage::Load_SA_END, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportLoadSAProcess(info)) { + DHLOGE("Report load sink sa failed."); + } +#endif DistributedInputSinkHandler::GetInstance().FinishStartSA(params_, remoteObject); } @@ -40,6 +53,18 @@ void LoadDInputSinkCallback::OnLoadSystemAbilityFail(int32_t systemAbilityId) { HisyseventUtil::GetInstance().SysEventWriteFault(DINPUT_INIT_FAIL, "dinput sink LoadSystemAbility call failed."); +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20500003, + .stage = SAStage::Load_SA_END, + .result = PROCESS_FAIL, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportLoadSAProcess(info)) { + DHLOGE("Report load sink sa failed."); + } +#endif DHLOGE("load dinput SA failed, systemAbilityId:%d", systemAbilityId); } } // namespace DistributedInput diff --git a/sourcehandler/BUILD.gn b/sourcehandler/BUILD.gn index 2cf11d7..842acd0 100644 --- a/sourcehandler/BUILD.gn +++ b/sourcehandler/BUILD.gn @@ -63,6 +63,10 @@ ohos_shared_library("libdinput_source_handler") { "samgr:samgr_proxy", ] + if (dinput_radar) { + defines += [ "DINPUT_RADAR" ] + } + cflags_cc = [ "-DHILOG_ENABLE" ] subsystem_name = "distributedhardware" diff --git a/sourcehandler/src/distributed_input_source_handler.cpp b/sourcehandler/src/distributed_input_source_handler.cpp index 55267c8..9970de9 100644 --- a/sourcehandler/src/distributed_input_source_handler.cpp +++ b/sourcehandler/src/distributed_input_source_handler.cpp @@ -17,6 +17,7 @@ #include "dinput_errcode.h" #include "dinput_log.h" +#include "dinput_radar_helper.h" #include "hisysevent_util.h" #include "i_distributed_source_input.h" #include "load_d_input_source_callback.h" @@ -44,6 +45,18 @@ int32_t DistributedInputSourceHandler::InitSource(const std::string ¶ms) HisyseventUtil::GetInstance().SysEventWriteBehavior(DINPUT_INIT, "dinput init source sa start."); int32_t ret = samgr->LoadSystemAbility(DISTRIBUTED_HARDWARE_INPUT_SOURCE_SA_ID, loadCallback); +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20500004, + .stage = SAStage::Load_SA_START, + .result = (ret == ERR_OK) ? PROCESS_SUCCESS : PROCESS_FAIL, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportLoadSAProcess(info)) { + DHLOGE("Report load source sa failed."); + } +#endif if (ret != ERR_OK) { DHLOGE("Failed to Load systemAbility, systemAbilityId:%d, ret code:%d", DISTRIBUTED_HARDWARE_INPUT_SOURCE_SA_ID, ret); @@ -78,12 +91,36 @@ int32_t DistributedInputSourceHandler::ReleaseSource() int32_t DistributedInputSourceHandler::RegisterDistributedHardware(const std::string &devId, const std::string &dhId, const EnableParam ¶m, std::shared_ptr callback) { +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20503001, + .stage = DinputCrossStage::REGISTER_START, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportRegisterProcess(info, devId, dhId)) { + DHLOGE("Report register dh failed."); + } +#endif return DistributedInputClient::GetInstance().RegisterDistributedHardware(devId, dhId, param.attrs, callback); } int32_t DistributedInputSourceHandler::UnregisterDistributedHardware(const std::string &devId, const std::string &dhId, std::shared_ptr callback) { +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20504001, + .stage = DinputCrossStage::UNREGISTER_START, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportUnregisterProcess(info, devId, dhId)) { + DHLOGE("Report unregister dh failed."); + } +#endif return DistributedInputClient::GetInstance().UnregisterDistributedHardware(devId, dhId, callback); } diff --git a/sourcehandler/src/load_d_input_source_callback.cpp b/sourcehandler/src/load_d_input_source_callback.cpp index 1cb5df4..1d72da0 100644 --- a/sourcehandler/src/load_d_input_source_callback.cpp +++ b/sourcehandler/src/load_d_input_source_callback.cpp @@ -17,6 +17,7 @@ #include "dinput_log.h" #include "distributed_input_source_handler.h" +#include "dinput_radar_helper.h" #include "hisysevent_util.h" namespace OHOS { @@ -33,6 +34,18 @@ void LoadDInputSourceCallback::OnLoadSystemAbilitySuccess( DHLOGE("remoteObject is nullptr"); return; } +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20500005, + .stage = SAStage::Load_SA_END, + .result = PROCESS_SUCCESS, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportLoadSAProcess(info)) { + DHLOGE("Report load source sa failed."); + } +#endif DistributedInputSourceHandler::GetInstance().FinishStartSA(params_, remoteObject); } @@ -41,6 +54,18 @@ void LoadDInputSourceCallback::OnLoadSystemAbilityFail(int32_t systemAbilityId) DHLOGE("load dinput SA failed, systemAbilityId:%d", systemAbilityId); HisyseventUtil::GetInstance().SysEventWriteFault(DINPUT_INIT_FAIL, "dinput source LoadSystemAbility call failed."); +#ifdef DINPUT_RADAR + struct RadarInfo info = { + .formID = 20500006, + .stage = SAStage::Load_SA_END, + .result = PROCESS_FAIL, + .errCode = 0, + .module = Module::DISTRIBUTED_INPUT, + }; + if (!DinputRadarHelper::GetInstance().ReportLoadSAProcess(info)) { + DHLOGE("Report load source sa failed."); + } +#endif } } // namespace DistributedInput } // namespace DistributedHardware -- Gitee