OpenAtom OpenHarmony(以下简称“OpenHarmony”)作为面向全场景、全连接、全智能时代的分布式操作系统,通过将各类不同终端设备的能力进行整合,实现硬件互助、资源共享,为用户提供流畅的全场景体验。本期,我们通过介绍 OpenHarmony 的硬件资源池化模型,为大家揭晓 OpenHarmony 是如何实现多设备协同的。
1.硬件资源访问的演进
硬件资源访问是多设备进行协同的关键。OpenHarmony 发展至今,硬件资源访问经历了从“一对一”到“多对多”的演进过程。
1.1 一对一
在设计初期,为解决两台设备间的协同问题,我们通过 OpenHarmony 提供的分布式设备虚拟化能力将两台设备的硬件资源进行融合,实现了“一对一”的硬件资源访问。这便是硬件资源池化模型的雏形。
图1 “一对一”的硬件资源访问
1.2 多对多
随着全场景智慧生活的不断深入,“一对一”的设备硬件资源访问方式已不能满足某些复杂场景的业务需求。OpenHarmony 对分布式技术不断探索与创新,通过增强原来的分布式设备虚拟化能力,将多台设备的各种硬件资源,如屏幕、相机、扩音器、键盘、传感器及存储器等予以抽象,形成“超级虚拟终端”内的统一硬件资源池,并支持硬件资源的按需分配和重新组合,真正实现了硬件资源的全局调用。组成“超级虚拟终端”的多个设备,能访问硬件资源池内的多种硬件资源,这便是“多对多”的硬件资源访问。
图2 硬件资源池化(多对多)
基于“硬件资源池化”,开发者可以根据不同的业务场景,在硬件资源池内选择并匹配合适的能力模块,充分发挥不同设备的能力优势,从而构建全新的用户体验。
2.硬件资源池化模型
基于“硬件资源池化”的创新理念,OpenHarmony 融合硬件虚拟化、硬件资源管理及硬件数据管理等能力,构建了硬件资源池化模型,对外提供了统一的硬件能力开放接口,让开发者轻松实现高效开发。
如图3所示,硬件资源池化模型将各类设备的硬件资源进行抽象,为北向应用提供各种分布式服务,比如分布式相机、分布式屏幕、分布式音频和分布式输入等,同时提供统一的设备管理和分布式硬件框架。
图3 硬件资源池化模型
下面为大家一一介绍硬件资源池化模型的各个组成部分。
2.1 设备管理
设备管理(即 DeviceManager)服务,提供设备发现、认证管理、可信设备管理和设备状态管理等能力。
图4 设备管理(DeviceManager)
OpenHarmony 为开发者提供了一套设备管理接口,用于分布式设备间监听、发现和认证,如图 5 所示。
图5 设备管理接口
设备管理接口的使用示例代码如下:
// 创建DeviceManager实例:
deviceManager.createDeviceManager('com.ohos.xxxx', (err, dm) => {
this.log("createDeviceManager err:" + JSON.stringify(err) + ' --success:' + JSON.stringify(dm))
if (err) return;
dmClass = dm;
dmClass.on('serviceDie', data => this.log("serviceDie on:" + JSON.stringify(data)))
});
// 查询可信设备列表
var array = dmClass.getTrustedDeviceListSync();
// 获取本地设备信息
var localDeviceInfo = dmClass.getLocalDeviceInfoSync();
// 开始设备发现(发现周边不可信设备)
var subscribeId = 0;
dmClass.on('deviceFound', (data) => {
if (data == null) {
this.log("deviceFound error data=null")
return;
}
this.logList.push("deviceFound:" + JSON.stringify(data));
});
dmClass.on('discoverFail', (data) => {
this.log("discoverFail on:" + JSON.stringify(data));
});
subscribeId = Math.floor(Math.random() * 10000 + 1000)
var info = {
"subscribeId": subscribeId,
"mode": 0xAA,
"medium": 0,
"freq": 2,
"isSameAccount": false,
"isWakeRemote": true,
"capability": 0
};
dmClass.startDeviceDiscovery(info);
// 停止设备发现(需要和startDeviceDiscovery接口配对使用)
dmClass.stopDeviceDiscovery(subscribeId);
// 设备认证
var deviceInfo ={
"deviceId": "XXXXXXXX",
"deviceName": "",
deviceType: 0
};
let extraInfo = {
"appIcon": new Uint8Array(), // app图标,可选参数,可不填
"appThumbnail": new Uint8Array(), // app缩略图,可选参数,可不填
"appName": "xxxxxxxx", // 对端设备应用名称
"appDescription": "xxxxxxxx", // app描述
"business": '0',
"displayOwner": 0,
}
// 设备取消认证
dmClass.unAuthenticateDevice(this.deviceInfo);
DeviceManager 的更多详情,请参考以下代码仓:
https://gitee.com/openharmony/device_manager
2.2 分布式硬件框架
分布式硬件框架为硬件资源池化模型提供了接入管理、能力查询、状态管理、权限管理以及版本管理等硬件资源管理能力,如图6所示:
图6 分布式硬件框架
分布式硬件框架的各模块说明如下:
图9 分布式相机的模块说明
分布式相机的更多详情,请参考分布式相机代码仓:
https://gitee.com/openharmony/distributed_camera
2.4 分布式屏幕
分布式屏幕提供了屏幕设备的硬件资源软件抽象能力,为 OpenHarmony 系统框架提供系统投屏、屏幕镜像、屏幕分割等能力的实现。分布式屏幕的框架图如下所示:
图10 分布式屏幕
分布式屏幕的各模块说明如下:
图11 分布式屏幕的模块说明
分布式屏幕的更多详情,请参考以下代码仓:
https://gitee.com/openharmony/distributed_screen
3.结束语
除了分布式相机和分布式屏幕外,硬件资源池化模型在后续版本还将提供分布式音频和分布式输入能力。分布式音频将提供对麦克风、喇叭、听筒等音频设备的硬件资源池化能力,通过音频服务提供给应用开发者,使得开发者能够自由选择、切换、组合音频设备,提升用户的使用体验。分布式输入将提供对键盘、鼠标等输入设备的硬件资源池化能力,通过输入服务让应用开发者能跨设备调用输入能力,实现多设备协同。
硬件资源池化模型仍在建设中,期待广大开发者共同加入我们,共同见证万物互联时代的无限可能!
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !