Openharmony分布式设备管理初始化和上下线流程
·

1:系统SA开机启动
ipc_server_stub.cpp SystemAbility (DISTRIBUTED_HARDWARE_DEVICEMANAGER_SA_ID 4802) 开机启动,生命周期 OnStart方法中初始化DM模快,并添加SOFTBUS_SERVER_SA_ID启动监听,在softbus 服务启动后,DM 模块初始化软总线模块的上下线监听。
代码位置:ipc_server_stub.cpp
void IpcServerStub::OnStart()
{
......
DeviceManagerService::GetInstance().InitDMServiceListener();
AddSystemAbilityListener(SOFTBUS_SERVER_SA_ID);
......
}
void IpcServerStub::OnAddSystemAbility(int32_t systemAbilityId, const std::string& deviceId)
{
if (systemAbilityId == SOFTBUS_SERVER_SA_ID) {
DeviceManagerService::GetInstance().InitSoftbusListener();
}
}
2:内部变量初始化
代码位置:device_manager_service.cpp
int32_t DeviceManagerService::InitSoftbusListener()
{
softbusListener_ = std::make_shared<SoftbusListener>();
return DM_OK;
}
int32_t DeviceManagerService::InitDMServiceListener()
{
listener_ = std::make_shared<DeviceManagerServiceListener>();
advertiseMgr_ = std::make_shared<AdvertiseManager>(softbusListener_);
discoveryMgr_ = std::make_shared<DiscoveryManager>(softbusListener_, listener_);
pinHolder_ = std::make_shared<PinHolder>(listener_);
return DM_OK;
}
3:注册软总线设备上下线监听,局域网内发布能力
代码位置:softbus_listener.cpp
int32_t SoftbusListener::InitSoftbusListener()
{
// softbus 注册软总线节点状态事件回调
RegNodeDeviceStateCb(DM_PKG_NAME, &softbusNodeStateCb_);
return InitSoftPublishLNN();
}
// 发布DM 模块对外发现的能力
int32_t SoftbusListener::InitSoftPublishLNN()
{
......
int32_t ret;
PublishInfo publishInfo;
publishInfo.publishId = DISTRIBUTED_HARDWARE_DEVICEMANAGER_SA_ID;
publishInfo.mode = DiscoverMode::DISCOVER_MODE_ACTIVE;
publishInfo.medium = ExchangeMedium::AUTO;
publishInfo.freq = ExchangeFreq::HIGH;
publishInfo.capability = DM_CAPABILITY_OSD;
publishInfo.ranging = false;
char discoverStatus[DISCOVER_STATUS_LEN + 1] = {0};
GetParameter(DISCOVER_STATUS_KEY, "not exist", discoverStatus, DISCOVER_STATUS_LEN);
ret = PublishLNN(DM_PKG_NAME, &publishInfo, &softbusPublishCallback_);
g_publishStatus = PulishStatus::ALLOW_BE_DISCOVERY;
ret = WatchParameter(DISCOVER_STATUS_KEY, &OnParameterChgCallback, nullptr);
.......
return ret;
}
void SoftbusListener::OnSoftbusDeviceOnline(NodeBasicInfo *info)
{
// 设备上线 事件分发出去
}
void SoftbusListener::OnSoftbusDeviceOffline(NodeBasicInfo *info)
{
// 设备下线 事件分发出去
}
void SoftbusListener::OnSoftbusDeviceInfoChanged(NodeBasicInfoType type, NodeBasicInfo *info)
{
// 设备状态回调 事件分发出去
}
4:对其他模块提供的参数化DeviceManager方法
device_manager_impl.cpp 文件中的 DeviceManagerImpl::InitDeviceManager 是DM 模块对外暴露的初始化方法,DM 模块对外暴露的方法均需要调用该方法初始化后使用单例模式调用。其他模块在调用InitDeviceManager方法后,传入对应的bundleName模块名,该bundleName会作为后续的标记key ,用来分发事件。
例如 DM NAPI模块在创建DM对象时,调用InitDeviceManager方法初始化。
napi_value DeviceManagerNapi::Init(napi_env env, napi_value exports)
{
......
napi_property_descriptor static_prop[] = {
DECLARE_NAPI_STATIC_FUNCTION("createDeviceManager", CreateDeviceManager),
};
......
return exports;
}
napi_value DeviceManagerNapi::CreateDeviceManager(napi_env env, napi_callback_info info)
{
......
int32_t ret = DeviceManager::GetInstance().InitDeviceManager(bundleName, initCallback);
......
return result;
}
分布式硬件管理框架调用InitDeviceManager方法进行初始化
int32_t AccessManager::InitDeviceManager()
{
// DH_FWK_PKG_NAME ohos.dhardware
return DeviceManager::GetInstance().InitDeviceManager(DH_FWK_PKG_NAME, shared_from_this());
}
分布式设备管理初始化和上下线流程详见附件
更多推荐
所有评论(0)