diff --git a/bundle.json b/bundle.json index dce07b821405036303ffcc5e34cd2aa96c496b1f..39000b9189c71b40803aea3b4146f4e6cfa95ebe 100644 --- a/bundle.json +++ b/bundle.json @@ -42,7 +42,8 @@ "//foundation/distributedhardware/distributedhardwarefwk/utils:distributedhardwareutils", "//foundation/distributedhardware/distributedhardwarefwk/services/distributedhardwarefwkservice:distributedhardwarefwksvr", "//foundation/distributedhardware/distributedhardwarefwk/services/distributedhardwarefwkserviceimpl:distributedhardwarefwksvr_impl", - "//foundation/distributedhardware/distributedhardwarefwk/sa_profile:dhfwk_sa_profile" + "//foundation/distributedhardware/distributedhardwarefwk/sa_profile:dhfwk_sa_profile", + "//foundation/distributedhardware/distributedhardwarefwk/sa_profile:dhardware.cfg" ], "test": [ "//foundation/distributedhardware/distributedhardwarefwk/utils/test/unittest:utils_test", diff --git a/sa_profile/4801.xml b/sa_profile/4801.xml index 1c5961fa37ee97d01aa959cb1ed8b57acb3223d1..236e5282e2aee729b893c83cd0f0545f40724150 100644 --- a/sa_profile/4801.xml +++ b/sa_profile/4801.xml @@ -18,9 +18,9 @@ 4801 libdistributedhardwarefwksvr.z.so - 4802 - 60000 - true + + + false true 1 diff --git a/sa_profile/BUILD.gn b/sa_profile/BUILD.gn index 4f5fbabd8055252f85f907aa585c02bdbde9420d..f30568c3209fe5ddf3c08f863870c5a7a06084d0 100644 --- a/sa_profile/BUILD.gn +++ b/sa_profile/BUILD.gn @@ -11,10 +11,17 @@ # See the License for the specific language governing permissions and # limitations under the License. -import("//build/ohos/sa_profile/sa_profile.gni") +import("//build/ohos.gni") ohos_sa_profile("dhfwk_sa_profile") { sources = [ "4801.xml" ] part_name = "distributed_hardware_fwk" } + +ohos_prebuilt_etc("dhardware.cfg") { + relative_install_dir = "init" + source = "dhardware.cfg" + part_name = "distributed_hardware_fwk" + subsystem_name = "distributedhardware" +} diff --git a/services/distributedhardwarefwkservice/distributedhardware_fwk.cfg b/sa_profile/dhardware.cfg similarity index 37% rename from services/distributedhardwarefwkservice/distributedhardware_fwk.cfg rename to sa_profile/dhardware.cfg index 22b7ee41dfa9397c1127a40d34b64651c6ba0a97..f521718de2f0dfba17858fefcfdde795409d16b1 100644 --- a/services/distributedhardwarefwkservice/distributedhardware_fwk.cfg +++ b/sa_profile/dhardware.cfg @@ -1,15 +1,9 @@ { - "jobs" : [{ - "name" : "post-fs-data", - "cmds" : [ - "start distributedhardware_fwk" - ] - } - ], "services" : [{ - "name" : "distributedhardware_fwk", + "name" : "dhardware", "path" : ["/system/bin/sa_main", "/system/profile/dhardware.xml"], "uid" : "system", - "gid" : ["system"] + "gid" : ["system"], + "ondemand" : true }] } \ No newline at end of file diff --git a/services/distributedhardwarefwkservice/BUILD.gn b/services/distributedhardwarefwkservice/BUILD.gn index 982d8793d3876c1874656edf5b8a04a5c33d115f..312f5b4bce6cdfe17c3c62eb5bf3c5dc548572ba 100644 --- a/services/distributedhardwarefwkservice/BUILD.gn +++ b/services/distributedhardwarefwkservice/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") { include_dirs = [ @@ -31,26 +32,25 @@ ohos_shared_library("distributedhardwarefwksvr") { ] sources = [ + "src/accessmanager/access_manager.cpp", + "src/distributed_hardware_manager_factory.cpp", "src/distributed_hardware_service.cpp", "src/distributed_hardware_stub.cpp", - "src/distributed_hardware_manager_factory.cpp", - "src/accessmanager/access_manager.cpp", ] deps = [ + "${services_path}/distributedhardwarefwkserviceimpl:distributedhardwarefwksvr_impl", "${utils_path}:distributedhardwareutils", "//foundation/aafwk/standard/interfaces/innerkits/ability_manager:ability_manager", "//foundation/aafwk/standard/services/abilitymgr:abilityms", - "//utils/native/base:utils", "//foundation/distributedhardware/devicemanager/interfaces/inner_kits/native_cpp:devicemanagersdk", - ":distributedhardware_fwk.cfg", - "${services_path}/distributedhardwarefwkserviceimpl:distributedhardwarefwksvr_impl" + "//utils/native/base:utils", ] defines = [ - "HI_LOG_ENABLE", - "DH_LOG_TAG=\"dhfwksvr\"", - "LOG_DOMAIN=0xD004100", + "HI_LOG_ENABLE", + "DH_LOG_TAG=\"dhfwksvr\"", + "LOG_DOMAIN=0xD004100", ] external_deps = [ @@ -74,4 +74,4 @@ ohos_prebuilt_etc("distributedhardware_fwk.cfg") { source = "distributedhardware_fwk.cfg" part_name = "distributed_hardware_fwk" subsystem_name = "distributedhardware" -} \ No newline at end of file +} diff --git a/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h b/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h index 7c9ba448d1a9b0029cee8396964cfe814c8378cd..6fbaae81c694775599e4520d5b9a0ea103c36992 100644 --- a/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h +++ b/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h @@ -37,6 +37,7 @@ private: void UnInit(); int32_t LoadLibrary(); void CloseLibrary(); + void CheckExitSAOrNot(); private: void *handler_ { nullptr }; diff --git a/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp b/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp index afa23a979cd7c0f76c015a5f85459a50a671e163..59312f05fa13201112fbcd2febfd437ac6207dd0 100644 --- a/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp +++ b/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp @@ -18,6 +18,10 @@ #include #include +#include "anonymous_string.h" +#include "constants.h" +#include "device_manager.h" +#include "dh_utils_tool.h" #include "distributed_hardware_errno.h" #include "distributed_hardware_log.h" @@ -61,7 +65,27 @@ void DistributedHardwareManagerFactory::UnInit() distributedHardwareMgrPtr_->Release(); CloseLibrary(); - DHLOGD("success"); + CheckExitSAOrNot(); +} + +void DistributedHardwareManagerFactory::CheckExitSAOrNot() +{ + std::vector deviceList; + DeviceManager::GetInstance().GetTrustedDeviceList(DH_FWK_PKG_NAME, "", deviceList); + if (deviceList.size() == 0) { + DHLOGI("DM report devices offline, exit sa process"); + exit(0); + } + + DHLOGI("After uninit, DM report devices online, reinit"); + Init(); + for (const auto &deviceInfo : deviceList) { + const auto networkId = std::string(deviceInfo.deviceId); + const auto uuid = GetUUIDBySoftBus(networkId); + DHLOGI("Send trusted device online, networkId = %s, uuid = %s", GetAnonyString(networkId).c_str(), + GetAnonyString(uuid).c_str()); + SendOnLineEvent(networkId, uuid, deviceInfo.deviceTypeId); + } } bool DistributedHardwareManagerFactory::IsInit() diff --git a/services/distributedhardwarefwkservice/test/unittest/common/accessmanager/access_manager_test.cpp b/services/distributedhardwarefwkservice/test/unittest/common/accessmanager/access_manager_test.cpp index 15db9dbd24ecea944c5320beee3836ef5adf7761..a42e67448454fc74fdc693868ff09798aeb6c4cc 100644 --- a/services/distributedhardwarefwkservice/test/unittest/common/accessmanager/access_manager_test.cpp +++ b/services/distributedhardwarefwkservice/test/unittest/common/accessmanager/access_manager_test.cpp @@ -54,7 +54,13 @@ public: std::mutex testAccessMutex_; }; -void AccessManagerTest::SetUp() {} +void AccessManagerTest::SetUp() +{ + // at last one device online, ensure sa not exit + std::string networkId = "00000000000000000000000000000000"; + std::string uuid = "99999999999999999999999999999999"; + DistributedHardwareManagerFactory::GetInstance().SendOnLineEvent(networkId, uuid, TEST_DEV_TYPE_PAD); +} void AccessManagerTest::TearDown() { @@ -76,7 +82,7 @@ void AccessManagerTest::TearDownTestCase() {} */ HWTEST_F(AccessManagerTest, SendOnLineEvent_001, TestSize.Level1) { - ASSERT_FALSE(DistributedHardwareManagerFactory::GetInstance().IsInit()); + ASSERT_TRUE(DistributedHardwareManagerFactory::GetInstance().IsInit()); for (const auto &dev : TEST_DEVICES) { auto ret = @@ -94,17 +100,17 @@ HWTEST_F(AccessManagerTest, SendOnLineEvent_001, TestSize.Level1) */ HWTEST_F(AccessManagerTest, SendOnLineEvent_002, TestSize.Level1) { - ASSERT_FALSE(DistributedHardwareManagerFactory::GetInstance().IsInit()); + ASSERT_TRUE(DistributedHardwareManagerFactory::GetInstance().IsInit()); auto ret = DistributedHardwareManagerFactory::GetInstance().SendOnLineEvent("", TEST_DEVICES[0].second, TEST_DEV_TYPE_PAD); ASSERT_EQ(ERR_DH_FWK_REMOTE_NETWORK_ID_IS_EMPTY, ret); - ASSERT_FALSE(DistributedHardwareManagerFactory::GetInstance().IsInit()); + ASSERT_TRUE(DistributedHardwareManagerFactory::GetInstance().IsInit()); ret = DistributedHardwareManagerFactory::GetInstance().SendOnLineEvent(TEST_DEVICES[0].first, "", TEST_DEV_TYPE_PAD); ASSERT_EQ(ERR_DH_FWK_REMOTE_DEVICE_ID_IS_EMPTY, ret); - ASSERT_FALSE(DistributedHardwareManagerFactory::GetInstance().IsInit()); + ASSERT_TRUE(DistributedHardwareManagerFactory::GetInstance().IsInit()); } /** @@ -129,7 +135,7 @@ HWTEST_F(AccessManagerTest, SendOffLineEvent_001, TestSize.Level1) DistributedHardwareManagerFactory::GetInstance().SendOffLineEvent(dev.first, dev.second, TEST_DEV_TYPE_PAD); ASSERT_EQ(DH_FWK_SUCCESS, ret); } - ASSERT_FALSE(DistributedHardwareManagerFactory::GetInstance().IsInit()); + ASSERT_TRUE(DistributedHardwareManagerFactory::GetInstance().IsInit()); } /**