From 65ba389643306e95a9aab9eca6033d049a0c6672 Mon Sep 17 00:00:00 2001 From: zjucx Date: Thu, 16 Dec 2021 15:37:17 +0800 Subject: [PATCH 1/2] add deviceprofile readme Signed-off-by: zjucx --- ...le\345\255\220\347\263\273\347\273\237.md" | 195 ++++++++++++++++++ zh-cn/readme/figures/dp-architecture_zh.png | Bin 0 -> 46048 bytes 2 files changed, 195 insertions(+) create mode 100755 "zh-cn/readme/DeviceProfile\345\255\220\347\263\273\347\273\237.md" create mode 100755 zh-cn/readme/figures/dp-architecture_zh.png 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 00000000000..0a40745e6b0 --- /dev/null +++ "b/zh-cn/readme/DeviceProfile\345\255\220\347\263\273\347\273\237.md" @@ -0,0 +1,195 @@ +# 介绍 + +- [简介](#section11660541593) +- [目录](#section1464106163817) +- [约束](#section1718733212019) +- [使用](#section10729231131110) +- [涉及仓](#section176111311166) + +## 简介 + +DeviceProfile是设备硬件能力和系统软件特征的管理器,典型的Profile有设备类型、设备名称、设备OS类型、OS版本号等。DeviceProfile提供快速访问本地和远端设备Profile的能力,是发起分布式业务的基础。主要功能如下: + +- 本地设备Profile的插入、删除、查询。 +- 远程设备Profile的查询。 +- 订阅远程Profile变化的通知。 +- 跨设备同步Profile。 + +DeviceProfile模块组成如下图所示: + +## 系统架构 + +![](figures/dp-architecture_zh.png) + +**图 1** DeviceProfile组件架构图 + +## 目录 + +DeviceProfile主要代码目录结构如下: + +``` +├── interfaces +│   └── innerkits +│   └── distributeddeviceprofile // innerkits接口 +├── 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 | +| 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 \ 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 GIT binary patch literal 46048 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𝔖bZ7oCV(fC{| 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 literal 0 HcmV?d00001 -- Gitee From 6ba9e2559ebe6ab0e5fded5f7ff55098ea637b6d Mon Sep 17 00:00:00 2001 From: zjucx Date: Fri, 24 Dec 2021 17:13:38 +0800 Subject: [PATCH 2/2] modify readme Signed-off-by: zjucx --- ...ofile\345\255\220\347\263\273\347\273\237.md" | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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" index 0a40745e6b0..bd0af552224 100755 --- "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" @@ -1,4 +1,4 @@ -# 介绍 +# DeviceProfile子系统 - [简介](#section11660541593) - [目录](#section1464106163817) @@ -10,19 +10,19 @@ DeviceProfile是设备硬件能力和系统软件特征的管理器,典型的Profile有设备类型、设备名称、设备OS类型、OS版本号等。DeviceProfile提供快速访问本地和远端设备Profile的能力,是发起分布式业务的基础。主要功能如下: -- 本地设备Profile的插入、删除、查询。 +- 本地设备Profile的查询、插入、删除。 - 远程设备Profile的查询。 -- 订阅远程Profile变化的通知。 - 跨设备同步Profile。 +- 订阅远程Profile变化的通知。 DeviceProfile模块组成如下图所示: ## 系统架构 -![](figures/dp-architecture_zh.png) - **图 1** DeviceProfile组件架构图 +![](figures/dp-architecture_zh.png) + ## 目录 DeviceProfile主要代码目录结构如下: @@ -30,7 +30,7 @@ DeviceProfile主要代码目录结构如下: ``` ├── interfaces │   └── innerkits -│   └── distributeddeviceprofile // innerkits接口 +│   └── distributeddeviceprofile // 系统内部接口 ├── ohos.build ├── sa_profile // said声明文件 │   ├── 6001.xml @@ -67,7 +67,7 @@ DeviceProfile主要代码目录结构如下: | 名称 | 类型 | 必填 | 描述 | | --------- | ---------------------------- | ---- | ----------------------------------- | | deviceId | std::string | 是 | 查询指定设备的profile,空值表示查询本地 | -| serviceId | std::string | 是 | 查询的service id | +| serviceId | std::string | 是 | 查询的service id(数据记录的ID标识) | | profile | ServiceCharacteristicProfile | 是 | 返回值 | * 代码示例 @@ -192,4 +192,4 @@ DistributedDeviceProfileClient::GetInstance().UnsubscribeProfileEvents(profileEv **DeviceProfile子系统** -device\_profile\_core \ No newline at end of file +[device\_profile\_core](https://gitee.com/openharmony/device_profile_core) \ No newline at end of file -- Gitee