From 716c8cf988c0833a6c4ef6c65e7c4dcd1328fee4 Mon Sep 17 00:00:00 2001 From: dl Date: Fri, 1 Apr 2022 19:01:02 +0800 Subject: [PATCH 1/4] add plugin listener Signed-off-by: dl --- common/utils/include/ihardware_handler.h | 1 + .../BUILD.gn | 1 + .../local_hardware_manager.h | 1 + .../plugin_listener_impl.h | 38 ++++++++++++++++ .../componentmanager/component_manager.cpp | 12 ++++- .../local_hardware_manager.cpp | 5 +++ .../plugin_listener_impl.cpp | 45 +++++++++++++++++++ 7 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/plugin_listener_impl.h create mode 100644 services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp diff --git a/common/utils/include/ihardware_handler.h b/common/utils/include/ihardware_handler.h index e98caf3c..3f6d8755 100644 --- a/common/utils/include/ihardware_handler.h +++ b/common/utils/include/ihardware_handler.h @@ -42,6 +42,7 @@ public: virtual std::map QueryExtraInfo() = 0; virtual bool IsSupportPlugin() = 0; virtual void RegisterPluginListener(std::shared_ptr listener) = 0; + virtual void UnRegisterPluginListener() = 0; }; extern "C" __attribute__((visibility("default"))) IHardwareHandler* GetHardwareHandler(); } // namespace DistributedHardware diff --git a/services/distributedhardwarefwkserviceimpl/BUILD.gn b/services/distributedhardwarefwkserviceimpl/BUILD.gn index 55ef0b73..a94aca8b 100644 --- a/services/distributedhardwarefwkserviceimpl/BUILD.gn +++ b/services/distributedhardwarefwkserviceimpl/BUILD.gn @@ -53,6 +53,7 @@ ohos_shared_library("distributedhardwarefwksvr_impl") { "src/componentmanager/component_enable.cpp", "src/componentmanager/component_disable.cpp", "src/localhardwaremanager/local_hardware_manager.cpp", + "src/localhardwaremanager/plugin_listener_impl.cpp", "src/resourcemanager/capability_info.cpp", "src/resourcemanager/capability_info_manager.cpp", "src/resourcemanager/db_adapter.cpp", diff --git a/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/local_hardware_manager.h b/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/local_hardware_manager.h index 0c90ba55..1d75f085 100644 --- a/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/local_hardware_manager.h +++ b/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/local_hardware_manager.h @@ -46,6 +46,7 @@ private: private: std::map compToolFuncsMap_; + std::map> pluginListenerMap_; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/plugin_listener_impl.h b/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/plugin_listener_impl.h new file mode 100644 index 00000000..c3a543d7 --- /dev/null +++ b/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/plugin_listener_impl.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2022 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_DISTRIBUTED_HARDWARE_PLUGIN_LISTENER_IMPL_H +#define OHOS_DISTRIBUTED_HARDWARE_PLUGIN_LISTENER_IMPL_H + +#include "device_type.h" +#include "ihardware_handler.h" + +namespace OHOS { +namespace DistributedHardware { +class PluginListenerImpl : public PluginListener +{ +public: + explicit PluginListenerImpl(const DHType type) : dhType_(type) {} + virtual ~PluginListenerImpl() = default; + + virtual void PluginHardware(std::string dhId, std::string attrs); + virtual void UnPluginHardware(std::string dhId); + +private: + DHType dhType_; +}; +} // namespace DistributedHardware +} // namespace OHOS +#endif \ No newline at end of file diff --git a/services/distributedhardwarefwkserviceimpl/src/componentmanager/component_manager.cpp b/services/distributedhardwarefwkserviceimpl/src/componentmanager/component_manager.cpp index c9956a69..84b6be70 100644 --- a/services/distributedhardwarefwkserviceimpl/src/componentmanager/component_manager.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/componentmanager/component_manager.cpp @@ -148,7 +148,17 @@ ComponentManager::ActionResult ComponentManager::StopSink() DHLOGI("start."); std::unordered_map> futures; for (const auto &item : compSink_) { - auto future = std::async(std::launch::async, [item]() { return item.second->ReleaseSink(); }); + auto future = std::async(std::launch::async, [item]() { + int32_t status = item.second->ReleaseSink(); + IHardwareHandler *hardwareHandler = nullptr; + status = ComponentLoader::GetInstance().GetHardwareHandler(item.first, hardwareHandler); + if (status != DH_FWK_SUCCESS || hardwareHandler == nullptr) { + DHLOGE("GetHardwareHandler %#X failed", item.first); + return status; + } + hardwareHandler->UnRegisterPluginListener(); + return status; }); + futures.emplace(item.first, future.share()); } return futures; diff --git a/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/local_hardware_manager.cpp b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/local_hardware_manager.cpp index 7b6f0f5d..42bc9bc0 100644 --- a/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/local_hardware_manager.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/local_hardware_manager.cpp @@ -22,6 +22,7 @@ #include "device_type.h" #include "dh_context.h" #include "distributed_hardware_errno.h" +#include "plugin_listener_impl.h" namespace OHOS { namespace DistributedHardware { @@ -54,6 +55,9 @@ void LocalHardwareManager::Init() hardwareHandler = nullptr; } else { compToolFuncsMap_[dhType] = hardwareHandler; + std::shared_ptr listener = std::make_shared(dhType); + pluginListenerMap_[dhType] = listener; + hardwareHandler->RegisterPluginListener(listener); } } } @@ -62,6 +66,7 @@ void LocalHardwareManager::UnInit() { DHLOGI("start"); compToolFuncsMap_.clear(); + pluginListenerMap_.clear(); } void LocalHardwareManager::QueryLocalHardware(const DHType dhType, IHardwareHandler *hardwareHandler) diff --git a/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp new file mode 100644 index 00000000..78f54f9d --- /dev/null +++ b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2022 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 "plugin_listener_impl.h" + +#include "capability_info_manager.h" +#include "dh_context.h" + +namespace OHOS { +namespace DistributedHardware { +#undef DH_LOG_TAG +#define DH_LOG_TAG "PluginListenerImpl" + +void PluginListenerImpl::PluginHardware(std::string dhId, std::string attrs) +{ + std::vector> capabilityInfos; + std::string deviceId = DHContext::GetInstance().GetDeviceInfo().deviceId; + std::string devName = DHContext::GetInstance().GetDeviceInfo().deviceName; + uint16_t devType = DHContext::GetInstance().GetDeviceInfo().deviceType; + std::shared_ptr dhCapabilityInfo = + std::make_shared(dhId, deviceId, devName, devType, dhType_, attrs); + capabilityInfos.push_back(dhCapabilityInfo); + + CapabilityInfoManager::GetInstance()->AddCapability(capabilityInfos); +} + +void PluginListenerImpl::UnPluginHardware(std::string dhId) +{ + std::string deviceId = DHContext::GetInstance().GetDeviceInfo().deviceId; + CapabilityInfoManager::GetInstance()->RemoveCapabilityInfoInMem(deviceId); +} +} // namespace DistributedHardware +} // namespace OHOS \ No newline at end of file -- Gitee From 47e7f8ef663d99bcae7dc2ec380aabdd3fef1632 Mon Sep 17 00:00:00 2001 From: dl Date: Wed, 6 Apr 2022 17:40:59 +0800 Subject: [PATCH 2/4] add add unregister plugin listener Signed-off-by: dl --- common/utils/include/ihardware_handler.h | 4 ++-- .../localhardwaremanager/plugin_listener_impl.h | 6 +++--- .../localhardwaremanager/plugin_listener_impl.cpp | 13 ++++++++++--- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/common/utils/include/ihardware_handler.h b/common/utils/include/ihardware_handler.h index 3f6d8755..5b8d55f4 100644 --- a/common/utils/include/ihardware_handler.h +++ b/common/utils/include/ihardware_handler.h @@ -31,8 +31,8 @@ struct DHItem { class PluginListener { public: - virtual void PluginHardware(std::string dhId, std::string attrs) = 0; - virtual void UnPluginHardware(std::string dhId) = 0; + virtual void PluginHardware(const std::string &dhId, const std::string &attrs) = 0; + virtual void UnPluginHardware(const std::string &dhId) = 0; }; class IHardwareHandler { diff --git a/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/plugin_listener_impl.h b/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/plugin_listener_impl.h index c3a543d7..a7f69833 100644 --- a/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/plugin_listener_impl.h +++ b/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/plugin_listener_impl.h @@ -27,12 +27,12 @@ public: explicit PluginListenerImpl(const DHType type) : dhType_(type) {} virtual ~PluginListenerImpl() = default; - virtual void PluginHardware(std::string dhId, std::string attrs); - virtual void UnPluginHardware(std::string dhId); + virtual void PluginHardware(const std::string &dhId, const std::string &attrs) override; + virtual void UnPluginHardware(const std::string &dhId) override; private: DHType dhType_; }; } // namespace DistributedHardware } // namespace OHOS -#endif \ No newline at end of file +#endif diff --git a/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp index 78f54f9d..d563a260 100644 --- a/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp @@ -17,13 +17,14 @@ #include "capability_info_manager.h" #include "dh_context.h" +#include "distributed_hardware_errno.h" namespace OHOS { namespace DistributedHardware { #undef DH_LOG_TAG #define DH_LOG_TAG "PluginListenerImpl" -void PluginListenerImpl::PluginHardware(std::string dhId, std::string attrs) +void PluginListenerImpl::PluginHardware(const std::string &dhId, const std::string &attrs) { std::vector> capabilityInfos; std::string deviceId = DHContext::GetInstance().GetDeviceInfo().deviceId; @@ -36,10 +37,16 @@ void PluginListenerImpl::PluginHardware(std::string dhId, std::string attrs) CapabilityInfoManager::GetInstance()->AddCapability(capabilityInfos); } -void PluginListenerImpl::UnPluginHardware(std::string dhId) +void PluginListenerImpl::UnPluginHardware(const std::string &dhId) { std::string deviceId = DHContext::GetInstance().GetDeviceInfo().deviceId; - CapabilityInfoManager::GetInstance()->RemoveCapabilityInfoInMem(deviceId); + std::shared_ptr capability = nullptr; + auto ret = CapabilityInfoManager::GetInstance()->GetCapability(deviceId, dhId, capability); + if ((ret != DH_FWK_SUCCESS) || (capability == nullptr)) { + DHLOGE("GetCapability failed, deviceId =%s, dhId = %s, errCode = %d", deviceId.c_str(), dhId.c_str(), ret); + return; + } + CapabilityInfoManager::GetInstance()->RemoveCapabilityInfoByKey(capability->GetKey()); } } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file -- Gitee From 5a1980f81794b9218d9c51a34bd9190aa84ae34a Mon Sep 17 00:00:00 2001 From: dl Date: Thu, 7 Apr 2022 11:39:28 +0800 Subject: [PATCH 3/4] format gn Signed-off-by: dl --- .../BUILD.gn | 31 ++++++++++--------- .../plugin_listener_impl.cpp | 5 +-- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/services/distributedhardwarefwkserviceimpl/BUILD.gn b/services/distributedhardwarefwkserviceimpl/BUILD.gn index a94aca8b..19efe651 100644 --- a/services/distributedhardwarefwkserviceimpl/BUILD.gn +++ b/services/distributedhardwarefwkserviceimpl/BUILD.gn @@ -13,7 +13,8 @@ import("//build/ohos.gni") import("//build/ohos_var.gni") -import("//foundation/distributedhardware/distributedhardwarefwk/distributedhardwarefwk.gni") +import( + "//foundation/distributedhardware/distributedhardwarefwk/distributedhardwarefwk.gni") ohos_shared_library("distributedhardwarefwksvr_impl") { include_dirs = [ @@ -36,35 +37,35 @@ ohos_shared_library("distributedhardwarefwksvr_impl") { ] sources = [ + "src/componentloader/component_loader.cpp", + "src/componentmanager/component_disable.cpp", + "src/componentmanager/component_enable.cpp", + "src/componentmanager/component_manager.cpp", "src/distributed_hardware_manager.cpp", "src/distributed_hardware_proxy.cpp", - "src/componentloader/component_loader.cpp", + "src/localhardwaremanager/local_hardware_manager.cpp", + "src/localhardwaremanager/plugin_listener_impl.cpp", + "src/resourcemanager/capability_info.cpp", + "src/resourcemanager/capability_info_manager.cpp", + "src/resourcemanager/capability_utils.cpp", + "src/resourcemanager/db_adapter.cpp", "src/task/disable_task.cpp", "src/task/enable_task.cpp", "src/task/offline_task.cpp", "src/task/online_task.cpp", + "src/task/task.cpp", "src/task/task_board.cpp", "src/task/task_executor.cpp", "src/task/task_factory.cpp", - "src/task/task.cpp", "src/utils/dh_context.cpp", "src/versionmanager/version_manager.cpp", - "src/componentmanager/component_manager.cpp", - "src/componentmanager/component_enable.cpp", - "src/componentmanager/component_disable.cpp", - "src/localhardwaremanager/local_hardware_manager.cpp", - "src/localhardwaremanager/plugin_listener_impl.cpp", - "src/resourcemanager/capability_info.cpp", - "src/resourcemanager/capability_info_manager.cpp", - "src/resourcemanager/db_adapter.cpp", - "src/resourcemanager/capability_utils.cpp" ] deps = [ "${utils_path}:distributedhardwareutils", - "//foundation/distributedschedule/safwk/interfaces/innerkits/safwk:system_ability_fwk", "//foundation/aafwk/standard/interfaces/innerkits/ability_manager:ability_manager", "//foundation/aafwk/standard/services/abilitymgr:abilityms", + "//foundation/distributedschedule/safwk/interfaces/innerkits/safwk:system_ability_fwk", "//utils/native/base:utils", ] @@ -77,9 +78,9 @@ ohos_shared_library("distributedhardwarefwksvr_impl") { external_deps = [ "bundle_framework:appexecfwk_base", "bundle_framework:appexecfwk_core", + "distributeddatamgr:distributeddata_inner", "eventhandler:libeventhandler", "hiviewdfx_hilog_native:libhilog", - "distributeddatamgr:distributeddata_inner", "ipc:ipc_core", "safwk:system_ability_fwk", "samgr_standard:samgr_proxy", @@ -89,4 +90,4 @@ ohos_shared_library("distributedhardwarefwksvr_impl") { subsystem_name = "distributedhardware" part_name = "distributed_hardware_fwk" -} \ No newline at end of file +} diff --git a/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp index d563a260..a21bcd91 100644 --- a/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp @@ -43,10 +43,11 @@ void PluginListenerImpl::UnPluginHardware(const std::string &dhId) std::shared_ptr capability = nullptr; auto ret = CapabilityInfoManager::GetInstance()->GetCapability(deviceId, dhId, capability); if ((ret != DH_FWK_SUCCESS) || (capability == nullptr)) { - DHLOGE("GetCapability failed, deviceId =%s, dhId = %s, errCode = %d", deviceId.c_str(), dhId.c_str(), ret); + DHLOGE("GetCapability failed, deviceId =%s, dhId = %s, errCode = %d", + GetAnonyString(deviceId).c_str(), GetAnonyString(dhId).c_str(), ret); return; } CapabilityInfoManager::GetInstance()->RemoveCapabilityInfoByKey(capability->GetKey()); } } // namespace DistributedHardware -} // namespace OHOS \ No newline at end of file +} // namespace OHOS -- Gitee From d6a9f8821ee61f49a1885144f986f9ca0d05be54 Mon Sep 17 00:00:00 2001 From: dl Date: Fri, 8 Apr 2022 09:22:29 +0800 Subject: [PATCH 4/4] add plugin listener Signed-off-by: dl --- .../localhardwaremanager/plugin_listener_impl.h | 3 +-- .../src/componentmanager/component_manager.cpp | 17 +++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/plugin_listener_impl.h b/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/plugin_listener_impl.h index a7f69833..1a06367a 100644 --- a/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/plugin_listener_impl.h +++ b/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/plugin_listener_impl.h @@ -21,8 +21,7 @@ namespace OHOS { namespace DistributedHardware { -class PluginListenerImpl : public PluginListener -{ +class PluginListenerImpl : public PluginListener { public: explicit PluginListenerImpl(const DHType type) : dhType_(type) {} virtual ~PluginListenerImpl() = default; diff --git a/services/distributedhardwarefwkserviceimpl/src/componentmanager/component_manager.cpp b/services/distributedhardwarefwkserviceimpl/src/componentmanager/component_manager.cpp index 84b6be70..0a3277b4 100644 --- a/services/distributedhardwarefwkserviceimpl/src/componentmanager/component_manager.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/componentmanager/component_manager.cpp @@ -149,15 +149,16 @@ ComponentManager::ActionResult ComponentManager::StopSink() std::unordered_map> futures; for (const auto &item : compSink_) { auto future = std::async(std::launch::async, [item]() { - int32_t status = item.second->ReleaseSink(); - IHardwareHandler *hardwareHandler = nullptr; - status = ComponentLoader::GetInstance().GetHardwareHandler(item.first, hardwareHandler); - if (status != DH_FWK_SUCCESS || hardwareHandler == nullptr) { - DHLOGE("GetHardwareHandler %#X failed", item.first); + int32_t status = item.second->ReleaseSink(); + IHardwareHandler *hardwareHandler = nullptr; + status = ComponentLoader::GetInstance().GetHardwareHandler(item.first, hardwareHandler); + if (status != DH_FWK_SUCCESS || hardwareHandler == nullptr) { + DHLOGE("GetHardwareHandler %#X failed", item.first); + return status; + } + hardwareHandler->UnRegisterPluginListener(); return status; - } - hardwareHandler->UnRegisterPluginListener(); - return status; }); + }); futures.emplace(item.first, future.share()); } -- Gitee