diff --git "a/zh-cn/readme/DeviceProfile\345\255\220\347\263\273\347\273\237.md" "b/zh-cn/readme/DeviceProfile\345\255\220\347\263\273\347\273\237.md" new file mode 100755 index 0000000000000000000000000000000000000000..bd0af552224974919cd785e8b8bb3d5a8387969b --- /dev/null +++ "b/zh-cn/readme/DeviceProfile\345\255\220\347\263\273\347\273\237.md" @@ -0,0 +1,195 @@ +# DeviceProfile子系统 + +- [简介](#section11660541593) +- [目录](#section1464106163817) +- [约束](#section1718733212019) +- [使用](#section10729231131110) +- [涉及仓](#section176111311166) + +## 简介 + +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 // said声明文件 +│   ├── 6001.xml +│   └── BUILD.gn +├── services +│   └── distributeddeviceprofile +│   ├── BUILD.gn +│   ├── include +│   │   ├── contentsensor // CS数据采集头文件 +│   │   ├── dbstorage // 数据库操作头文件 +│   │   ├── devicemanager // 设备管理头文件 +│   │   └── subscribemanager // 订阅管理头文件 +│   ├── src +│   │   ├── contentsensor // CS数据采集实现 +│   │   ├── dbstorage // 数据库操作实现 +│   │   ├── devicemanager // 设备管理实现 +│   │   ├── subscribemanager // 订阅管理实现 +│   └── test // 测试用例 +└── tools + └── dp // 辅助测试工具 +``` + +## 约束 + +- 组网设备需在同一局域网中。 +- 组网之前,需先完成设备绑定,绑定流程参见安全子系统中说明。 + +## 使用 + +### 查询Profile信息 + +* GetDeviceProfile参数描述 + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ---------------------------- | ---- | ----------------------------------- | +| deviceId | std::string | 是 | 查询指定设备的profile,空值表示查询本地 | +| serviceId | std::string | 是 | 查询的service id(数据记录的ID标识) | +| profile | ServiceCharacteristicProfile | 是 | 返回值 | + +* 代码示例 + +```c++ +// 声明返回值 +ServiceCharacteristicProfile profile; +// 执行查询接口GetDeviceProfile +DistributedDeviceProfileClient::GetInstance().GetDeviceProfile(deviceId, serviceId, profile); +std::string jsonData = profile.GetCharacteristicProfileJson(); +result.append("jsonData:" + jsonData + "\n"); +``` + +### 插入Profile信息 + +* PutDeviceProfile参数描述 + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ---------------------------- | ---- | ----------------------------------- | +| profile | ServiceCharacteristicProfile | 是 | 需要插入的profile信息 | + +* 代码示例 + +```c++ +// 声明并填充插入数据 +ServiceCharacteristicProfile profile; +profile.SetServiceId(serviceId); +profile.SetServiceType(serviceType); +nlohmann::json j; +j["testVersion"] = "3.0.0"; +j["testApiLevel"] = API_LEVEL; +profile.SetCharacteristicProfileJson(j.dump()); +// 执行插入接口PutDeviceProfile +DistributedDeviceProfileClient::GetInstance().PutDeviceProfile(profile); +``` + +### 删除Profile信息 + +* DeleteDeviceProfile参数描述 + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ---------------------------- | ---- | ----------------------------------- | +| serviceId | std::string | 是 | 删除特定serviceid的记录 | + +* 代码示例 + +```c++ +// 声明并填充插入数据 +std::string serviceId = "test"; +// DeleteDeviceProfile +DistributedDeviceProfileClient::GetInstance().DeleteDeviceProfile(serviceId); +``` + +### 同步Profile信息 + +* SyncDeviceProfile参数描述 + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ---------------------------- | ---- | ----------------------------------- | +| syncOption| SyncOption | 是 | 指定同步范围和模式 | +| syncCb | IProfileEventCallback | 是 | 同步结果回调 | + +* 代码示例 + +```c++ +// 定义同步模式和范围 +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()); +``` + +### 订阅Profile事件(同步、变更事件) + +* SubscribeProfileEvents参数描述 + +| 名称 | 类型 | 必填 | 描述 | +| -------------- | ---------------------------- | ---- | ----------------------------------- | +| subscribeInfos | SubscribeInfo | 是 | 指定订阅的事件类型 | +| eventCb | IProfileEventCallback | 是 | 订阅事件回调 | +| failedEvents | ProfileEvent | 是 | 失败事件 | + +* 代码示例 + +```c++ +auto callback = std::make_shared(); +std::list subscribeInfos; +ExtraInfo extraInfo; +extraInfo["deviceId"] = deviceId; +extraInfo["serviceIds"] = serviceIds; + +// 订阅EVENT_PROFILE_CHANGED事件 +SubscribeInfo info1; +info1.profileEvent = ProfileEvent::EVENT_PROFILE_CHANGED; +info1.extraInfo = std::move(extraInfo); +subscribeInfos.emplace_back(info1); + +// 订阅EVENT_SYNC_COMPLETED事件 +SubscribeInfo info2; +info2.profileEvent = ProfileEvent::EVENT_SYNC_COMPLETED; +info2.extraInfo = std::move(extraInfo); +subscribeInfos.emplace_back(info2); + +std::list failedEvents; +// 执行订阅接口 +DistributedDeviceProfileClient::GetInstance().SubscribeProfileEvents(subscribeInfos, + callback, failedEvents); +sleep(SUBSCRIBE_SLEEP_TIME); +std::list profileEvents; +profileEvents.emplace_back(ProfileEvent::EVENT_PROFILE_CHANGED); +failedEvents.clear(); +// 解除订阅 +DistributedDeviceProfileClient::GetInstance().UnsubscribeProfileEvents(profileEvents, + callback, failedEvents); +``` + +## 涉及仓 + +**DeviceProfile子系统** + +[device\_profile\_core](https://gitee.com/openharmony/device_profile_core) \ No newline at end of file diff --git a/zh-cn/readme/figures/dp-architecture_zh.png b/zh-cn/readme/figures/dp-architecture_zh.png new file mode 100755 index 0000000000000000000000000000000000000000..58009df7a4cbee4664985e24a0f0f00ed60f88ed Binary files /dev/null and b/zh-cn/readme/figures/dp-architecture_zh.png differ