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

 

分布式设备管理初始化和上下线流程详见附件

相关文件下载
分布式设备管理初始化和设备上下线通知流程图附件.zip
29.67 KB
下载
Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐