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());
}
/**