1# DeviceProfile子系统<a name="ZH-CN_TOPIC_0000001128264105"></a> 2 3- [简介](#section11660541593) 4- [目录](#section1464106163817) 5- [约束](#section1718733212019) 6- [使用](#section10729231131110) 7- [相关仓](#section176111311166) 8 9## 简介<a name="section11660541593"></a> 10 11DeviceProfile是设备硬件能力和系统软件特征的管理器,典型的Profile有设备类型、设备名称、设备OS类型、OS版本号等。 12 13DeviceProfile提供快速访问本地和远端设备Profile的能力,是发起分布式业务的基础。主要功能如下: 14 15- 本地设备Profile的查询、插入、删除。 16- 远程设备Profile的查询。 17- 跨设备同步Profile。 18- 订阅远程Profile变化的通知。 19 20DeviceProfile模块组成如下图所示: 21 22## 系统架构<a name="section13587185873516"></a> 23 24**图 1** DeviceProfile组件架构图<a name="fig4460722185514"></a> 25 26![](figures/dp-architecture_zh.png) 27 28## 目录<a name="section1464106163817"></a> 29 30DeviceProfile主要代码目录结构如下: 31 32``` 33├── interfaces 34│ └── innerkits 35│ └── distributeddeviceprofile // innerkits接口 36├── ohos.build 37├── sa_profile // said声明文件 38│ ├── 6001.xml 39│ └── BUILD.gn 40└── services 41 └── distributeddeviceprofile 42 ├── BUILD.gn 43 ├── include 44 │ ├── authority // 权限校验 45 │ ├── contentsensor // CS数据采集头文件 46 │ ├── dbstorage // 数据库操作头文件 47 │ ├── devicemanager // 设备管理头文件 48 │ └── subscribemanager // 订阅管理头文件 49 ├── src 50 │ ├── authority // 权限校验 51 │ ├── contentsensor // CS数据采集实现 52 │ ├── dbstorage // 数据库操作实现 53 │ ├── devicemanager // 设备管理实现 54 │ └── subscribemanager // 订阅管理实现 55 └── test // 测试用例 56``` 57 58## 约束<a name="section1718733212019"></a> 59 60- 组网设备需在同一局域网中。 61- 组网之前,需先完成设备绑定,绑定流程参见安全子系统中说明。 62 63## 使用<a name="section10729231131110"></a> 64 65### 查询Profile信息 66 67* GetDeviceProfile参数描述 68 69| 名称 | 类型 | 必填 | 描述 | 70| --------- | ---------------------------- | ---- | ----------------------------------- | 71| deviceId | std::string | 是 | 查询指定设备的profile,空值表示查询本地 | 72| serviceId | std::string | 是 | 查询的service id(数据记录的ID标识) | 73| profile | ServiceCharacteristicProfile | 是 | 返回值 | 74 75* 代码示例 76 77```c++ 78// 声明返回值 79ServiceCharacteristicProfile profile; 80// 执行查询接口GetDeviceProfile 81DistributedDeviceProfileClient::GetInstance().GetDeviceProfile(deviceId, serviceId, profile); 82std::string jsonData = profile.GetCharacteristicProfileJson(); 83result.append("jsonData:" + jsonData + "\n"); 84``` 85 86### 插入Profile信息 87 88* PutDeviceProfile参数描述 89 90| 名称 | 类型 | 必填 | 描述 | 91| --------- | ---------------------------- | ---- | ----------------------------------- | 92| profile | ServiceCharacteristicProfile | 是 | 需要插入的profile信息 | 93 94* 代码示例 95 96```c++ 97// 声明并填充插入数据 98ServiceCharacteristicProfile profile; 99profile.SetServiceId(serviceId); 100profile.SetServiceType(serviceType); 101nlohmann::json j; 102j["testVersion"] = "3.0.0"; 103j["testApiLevel"] = API_LEVEL; 104profile.SetCharacteristicProfileJson(j.dump()); 105// 执行插入接口PutDeviceProfile 106DistributedDeviceProfileClient::GetInstance().PutDeviceProfile(profile); 107``` 108 109### 删除Profile信息 110 111* DeleteDeviceProfile参数描述 112 113| 名称 | 类型 | 必填 | 描述 | 114| --------- | ---------------------------- | ---- | ----------------------------------- | 115| serviceId | std::string | 是 | 删除特定serviceid的记录 | 116 117* 代码示例 118 119```c++ 120// 声明并填充插入数据 121std::string serviceId = "test"; 122// DeleteDeviceProfile 123DistributedDeviceProfileClient::GetInstance().DeleteDeviceProfile(serviceId); 124``` 125 126### 同步Profile信息 127 128* SyncDeviceProfile参数描述 129 130| 名称 | 类型 | 必填 | 描述 | 131| --------- | ---------------------------- | ---- | ----------------------------------- | 132| syncOption| SyncOption | 是 | 指定同步范围和模式 | 133| syncCb | IProfileEventCallback | 是 | 同步结果回调 | 134 135* 代码示例 136 137```c++ 138// 定义同步模式和范围 139SyncOptions syncOption; 140syncOption.SetSyncMode((OHOS::DistributedKv::SyncMode)atoi(mode.c_str())); 141for (const auto& deviceId : deviceIds) { 142 syncOption.AddDevice(deviceId); 143} 144// 执行同步接口 145DistributedDeviceProfileClient::GetInstance().SyncDeviceProfile(syncOption, 146 std::make_shared<ProfileEventCallback>()); 147``` 148 149### 订阅Profile事件(同步、变更事件) 150 151* SubscribeProfileEvents参数描述 152 153| 名称 | 类型 | 必填 | 描述 | 154| -------------- | ---------------------------- | ---- | ----------------------------------- | 155| subscribeInfos | SubscribeInfo | 是 | 指定订阅的事件类型 | 156| eventCb | IProfileEventCallback | 是 | 订阅事件回调 | 157| failedEvents | ProfileEvent | 是 | 失败事件 | 158 159* 代码示例 160 161```c++ 162auto callback = std::make_shared<ProfileEventCallback>(); 163std::list<SubscribeInfo> subscribeInfos; 164ExtraInfo extraInfo; 165extraInfo["deviceId"] = deviceId; 166extraInfo["serviceIds"] = serviceIds; 167 168// 订阅EVENT_PROFILE_CHANGED事件 169SubscribeInfo info1; 170info1.profileEvent = ProfileEvent::EVENT_PROFILE_CHANGED; 171info1.extraInfo = std::move(extraInfo); 172subscribeInfos.emplace_back(info1); 173 174// 订阅EVENT_SYNC_COMPLETED事件 175SubscribeInfo info2; 176info2.profileEvent = ProfileEvent::EVENT_SYNC_COMPLETED; 177info2.extraInfo = std::move(extraInfo); 178subscribeInfos.emplace_back(info2); 179 180std::list<ProfileEvent> failedEvents; 181// 执行订阅接口 182DistributedDeviceProfileClient::GetInstance().SubscribeProfileEvents(subscribeInfos, callback, failedEvents); 183sleep(SUBSCRIBE_SLEEP_TIME); 184std::list<ProfileEvent> profileEvents; 185profileEvents.emplace_back(ProfileEvent::EVENT_PROFILE_CHANGED); 186failedEvents.clear(); 187// 解除订阅 188DistributedDeviceProfileClient::GetInstance().UnsubscribeProfileEvents(profileEvents, callback, failedEvents); 189``` 190 191## 相关仓<a name="section176111311166"></a> 192 193**DeviceProfile子系统** 194 195[device\_info\_manager](https://gitee.com/openharmony/deviceprofile_device_info_manager)