• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)