DeviceProfile子系统
简介
DeviceProfile是设备硬件能力和系统软件特征的管理器,典型的Profile有设备类型、设备名称、设备OS类型、OS版本号等。DeviceProfile提供快速访问本地和远端设备Profile的能力,是发起分布式业务的基础。主要功能如下:
- 本地设备Profile的查询、插入、删除。
- 远程设备Profile的查询。
- 跨设备同步Profile。
- 订阅远程Profile变化的通知。
DeviceProfile模块组成如下图所示:
系统架构
图 1 DeviceProfile组件架构图
![](figures/dp-architecture_zh.png)
目录
DeviceProfile主要代码目录结构如下:
├── interfaces
│ └── innerkits
│ └── distributeddeviceprofile
├── ohos.build
├── sa_profile
│ ├── 6001.xml
│ └── BUILD.gn
├── services
│ └── distributeddeviceprofile
│ ├── BUILD.gn
│ ├── include
│ │ ├── contentsensor
│ │ ├── dbstorage
│ │ ├── devicemanager
│ │ └── subscribemanager
│ ├── src
│ │ ├── contentsensor
│ │ ├── dbstorage
│ │ ├── devicemanager
│ │ ├── subscribemanager
│ └── test
└── tools
└── dp
约束
- 组网设备需在同一局域网中。
- 组网之前,需先完成设备绑定,绑定流程参见安全子系统中说明。
使用
查询Profile信息
名称 |
类型 |
必填 |
描述 |
deviceId |
std::string |
是 |
查询指定设备的profile,空值表示查询本地 |
serviceId |
std::string |
是 |
查询的service id(数据记录的ID标识) |
profile |
ServiceCharacteristicProfile |
是 |
返回值 |
ServiceCharacteristicProfile profile;
DistributedDeviceProfileClient::GetInstance().GetDeviceProfile(deviceId, serviceId, profile);
std::string jsonData = profile.GetCharacteristicProfileJson();
result.append("jsonData:" + jsonData + "\n");
插入Profile信息
名称 |
类型 |
必填 |
描述 |
profile |
ServiceCharacteristicProfile |
是 |
需要插入的profile信息 |
ServiceCharacteristicProfile profile;
profile.SetServiceId(serviceId);
profile.SetServiceType(serviceType);
nlohmann::json j;
j["testVersion"] = "3.0.0";
j["testApiLevel"] = API_LEVEL;
profile.SetCharacteristicProfileJson(j.dump());
DistributedDeviceProfileClient::GetInstance().PutDeviceProfile(profile);
删除Profile信息
名称 |
类型 |
必填 |
描述 |
serviceId |
std::string |
是 |
删除特定serviceid的记录 |
std::string serviceId = "test";
DistributedDeviceProfileClient::GetInstance().DeleteDeviceProfile(serviceId);
同步Profile信息
名称 |
类型 |
必填 |
描述 |
syncOption |
SyncOption |
是 |
指定同步范围和模式 |
syncCb |
IProfileEventCallback |
是 |
同步结果回调 |
SyncOptions syncOption;
syncOption.SetSyncMode((OHOS::DistributedKv::SyncMode)atoi(mode.c_str()));
for (const auto& deviceId : deviceIds) {
syncOption.AddDevice(deviceId);
}
DistributedDeviceProfileClient::GetInstance().SyncDeviceProfile(syncOption,
std::make_shared<ProfileEventCallback>());
订阅Profile事件(同步、变更事件)
- SubscribeProfileEvents参数描述
名称 |
类型 |
必填 |
描述 |
subscribeInfos |
SubscribeInfo |
是 |
指定订阅的事件类型 |
eventCb |
IProfileEventCallback |
是 |
订阅事件回调 |
failedEvents |
ProfileEvent |
是 |
失败事件 |
auto callback = std::make_shared<ProfileEventCallback>();
std::list<SubscribeInfo> subscribeInfos;
ExtraInfo extraInfo;
extraInfo["deviceId"] = deviceId;
extraInfo["serviceIds"] = serviceIds;
SubscribeInfo info1;
info1.profileEvent = ProfileEvent::EVENT_PROFILE_CHANGED;
info1.extraInfo = std::move(extraInfo);
subscribeInfos.emplace_back(info1);
SubscribeInfo info2;
info2.profileEvent = ProfileEvent::EVENT_SYNC_COMPLETED;
info2.extraInfo = std::move(extraInfo);
subscribeInfos.emplace_back(info2);
std::list<ProfileEvent> failedEvents;
DistributedDeviceProfileClient::GetInstance().SubscribeProfileEvents(subscribeInfos,
callback, failedEvents);
sleep(SUBSCRIBE_SLEEP_TIME);
std::list<ProfileEvent> profileEvents;
profileEvents.emplace_back(ProfileEvent::EVENT_PROFILE_CHANGED);
failedEvents.clear();
DistributedDeviceProfileClient::GetInstance().UnsubscribeProfileEvents(profileEvents,
callback, failedEvents);
涉及仓
DeviceProfile子系统
device_profile_core