一、硬件资源池理念发生背景

跟着智能设备的发展和普及,越来越多的智能设备现已深化人们的日子,比方手机,PC,平板,各类穿戴设备等。当时单个设备的外设资源现已十分丰富,硬件才能也很强壮。像咱们的手机、PC、平板都有相机,音频,屏幕,键鼠等各种外设资源;可是这些硬件外设是归于各个设备本身的,假如触及到跨设备的协同操作就会比较繁琐。

比方用户正在 PC 上修改文档,需要从平板复制一段文字,或许运用手机拍照照片,然后插入文档作为素材,需要用户在各个设备上分别操作,然后发送文字或许图片到 PC,然后再回到 PC 进行修改,十分繁琐。假如运用开发者从运用层完成设备间硬件才能同享,对于运用开发者工作量和难度十分大,而且各个运用之间需要重复开发,才能难以复用和承继。

分布式体系硬件资源池原理和接入实践

图 1单设备硬件孤立难以同享

为此,鸿蒙体系提出了硬件资源池的理念,打破了各个设备硬件的孤立状态,能够做到设备间硬件外设全局同享。咱们把各个设备的硬件外设笼统为外设信息单元,外设信息在各个可信设备之间主动同步,如此,完成了外设信息的全局可见;结合分布式硬件虚拟化技能,完成任意设备之间的硬件外设才能跨设备调用;分布式硬件资源池作为体系才能下沉体系底层,北向开发者不感知资源池的存在;跨设备硬件和本地硬件运用同一套 API,开发者调用跨设备硬件体会和本地硬件共同,如此显着的便利了开发者调用跨设备硬件,开发者无需重视硬件底层细节,专注于事务立异。

分布式体系硬件资源池原理和接入实践

图 2硬件资源池打破硬件边界,全局同享

二、鸿蒙体系硬件资源池支撑场景

鸿蒙体系采用硬件资源池的理念,能够结合多个设备的优势硬件为用户提供更优的体会,同时支撑了顾客和开发者的多种立异体会。

2.1 顾客场景

在顾客层面,华为分布式硬件支撑才智办公,才智出行等多种立异场景。例如才智办公场景中,运用一套 PC 键鼠即可和周边平板等设备跨设备操作,运用到键鼠外设的跨设备操控才能;多屏协同场景中,手机屏幕显现到平板,手机视频通话能够运用平板的麦克风和摄像头,用户在平板上即可同时操作手机平板两台设备,避免设备间来回切换,操作便利,这个场景运用到了麦克风,扬声器,摄像头和屏幕等硬件的跨设备分布式才能。

在才智出行场景中,用户在手机上听音乐或许视频通话,进入座舱后,手机上的音乐和通话能够主动接续到车机,运用车机的音频外设播音和拾音,运用车机的摄像头进行视频通话,愈加契合用户在座舱中的运用习气;手机导航接续到车机后,车机的 GPS 信号能够同享给手机,结合手机 GPS 信号提供更高精度的定位数据;能够看到,在才智出行场景中,能够经过分布式硬件资源池结合手机和车机的优势硬件,为用户提供更好的服务体会。

分布式体系硬件资源池原理和接入实践

图 3鸿蒙硬件资源池支撑各类顾客场景

2.2 开发者场景

对于开发者来说,因为分布式硬件资源池将跨设备硬件调用的复杂度都封装在了体系底层,跨设备硬件复用本地硬件的 API,开发者学习和适配难度能够做到最低。

以分布式相机为例,相机接口能够同时查询到本地相机和跨设备相机外设,本地相机和跨设备相机经过 ConnectionType.CAMERA_CONNECTION_REMOTE 属性相区别,开发者经过该属性过滤出分布式相机后,其他操作和本地相机完全共同。无需为运用跨设备硬件学习一套独立的 API,很大程度上的简化了开发者开发难度。

分布式体系硬件资源池原理和接入实践

图 4分布式硬件开发者运用示例

三、硬件资源池原理

以相机和音频为例,假定设备 A 和设备 B 都有各自的相机和音频外设,驱动层有对应的本地相机和本地音频驱动。

分布式体系硬件资源池原理和接入实践

图 5分布式硬件资源池原理示意

分布式硬件从各自设备本地收集相机和音频驱动信息,存入分布式数据库。假如 AB 两个设备建立了可信联系而且经过软总线组网上线成功,分布式数据库会在 AB 两个设备之间主动同步各自的本地外设数据信息,这样,设备 A 分布式硬件能够拿到设备 B 的相机和音频外设标准数据,相同,设备 B 也能够拿到设备 A 的相机和音频外设标准数据。

以设备 A 的流程为例,分布式硬件收到对端设备 B 的硬件标准数据后,在驱动层注册对应的虚拟相机和虚拟音频驱动,虚拟驱动相当于对端设备物理硬件在本地的署理;虚拟驱动完成和本地硬件驱动相同的 HDI 接口,区别在于,本地硬件驱动操作本地物理硬件,虚拟硬件驱动控制和数据传输经过软总线作用于对端分布式硬件。

因为和本地硬件完成相同的 HDI 接口,设备 B 相机和音频对应的虚拟硬件能够被相机服务和音频服务发现并办理,包含外设的查询,相机的预览拍照录像,音频的播映,声响的录制等功能。

对称的,在设备 B 上会履行相同的进程,为设备 A 相机和音频外设注册对应虚拟驱动,然后完成设备 B 上对设备 A 硬件外设的查询和运用。

如此就完成了外设信息在设备间互通同享,信息感知主动注册虚拟硬件,注册后即可用,成为一个无中心对称的分布式硬件外设办理体系。同时,分布式硬件结构界说了外设热插拔,虚拟硬件保活等机制,保证事务可靠性。在运行时,各个硬件外设的事务运行于独立进程中,在进程层面保证不同硬件的虚拟化事务相互阻隔,提高了事务可靠性。

具体完成能够参阅分布硬件办理结构源码:gitee.com/openharmony…

四、硬件资源池接入实践

4.1 接口界说

经过前文剖析,能够看到分布式硬件与南向硬件的交互触及”硬件信息收集”和”驱动注册”两类事务,与此对应,分布式硬件针对南向硬件接入界说了两类接口。一类是硬件标准收集接口,一类是驱动注册与预备接口。

分布式体系硬件资源池原理和接入实践

图 6分布式硬件资源池接入接口

(1)硬件标准收集接口

硬件标准收集接口界说了标准信息的收集以及外设热插拔事情监听等功能。

接口链接:gitee.com/openharmony…

(2)驱动注册与预备接口

因为咱们是跨设备硬件调用,触及双端设备的硬件,咱们界说运用周边其他设备硬件外设的一端为 Source 端,同享本地硬件给其他设备调用的一端为 Sink 端。

驱动注册与预备接口包含 Source 和 Sink 两头。

Source 端包含初始化,开释以及虚拟驱动注册/去注册等功能;Sink 端主要是初始化和开释接口,用于响应 Source 端的控制指令,比方播映声响或许收集视频画面。在设备组网上线后,分布式硬件结构调用各个硬件类型的南向接口完成,分别初始化各类硬件的 Source 和 Sink 端事务进程,为后续的硬件跨设备调用做好预备。

Source 端接口链接:gitee.com/openharmony…

Sink 端接口链接:gitee.com/openharmony…

4.2 硬件接入实例

因为分布式硬件杰出的南向接入解耦设计,假如有新硬件外设接入,只需要如下三步即可,以分布式相机装备为例。

Step1:界说硬件外设类型****枚举值 CAMERA。

enumclassDHType:uint32_t{
UNKNOWN=0x0,//unknowndevice
CAMERA=0x01,//Camera
AUDIO=0x02,//Mic
SCREEN=0x08,//Display
GPS=0x10,//GPS
INPUT=0x20,//Keyboard
MAX_DH=0x80000000
};

文件链接:gitee.com/openharmony…

Step2:完成分布式硬件结构界说的南向接入接口,分别完成为三个 so。

1、完成分布式硬件结构界说的硬件标准收集接口 IHardwareHandler,并编译取得接口完成 libdistributed_camera_handler.z.so。

参阅代码:gitee.com/openharmony…

2、完成 Source 侧接入接口 IDistributedHardwareSource,并编译取得接口完成 libdistributed_camera_source_sdk.z.so。

参阅代码:gitee.com/openharmony…

3、完成 Sink 侧接入接口 IDistributedHardwareSink,并编译取得接口完成 libdistributed_camera_sink_sdk.z.so。

参阅代码:gitee.com/openharmony…

Step3:在分布式硬件子部件装备文件中,添加新硬件外设相关装备,包含外设类型,南向接口完成的 so 称号,版本号,以及 Source 和 Sink 端服务分配的服务 Id。

●该装备由产品界说确认,不同的产品可能运用不同的分布式才能。以 RK3568 开发板为例,装备如下:

{
"name":"distributed_camera",
"type":"CAMERA",
"comp_handler_loc":"libdistributed_camera_handler.z.so",
"comp_handler_version":"1.0",
"comp_source_loc":"libdistributed_camera_source_sdk.z.so",
"comp_source_version":"1.0",
"comp_source_sa_id":4803,
"comp_sink_loc":"libdistributed_camera_sink_sdk.z.so",
"comp_sink_version":"1.0",
"comp_sink_sa_id":4804
}

装备链接:gitee.com/openharmony…

三个接口的 so 完成后,编译打包到体系库路径下,同时装备到分布式硬件部件装备文件中,设备组网上线后,能够看到分布式相机的 dcamera 进程现已成功启动,标明相机外设现已归入资源池办理,成为分布式相机。

从下述截图也能够看到分布式硬件其他相关进程,dhardware 便是分布式硬件资源池办理结构进程,顾名思义,dcamera 是分布式相机进程,dinput 是分布式键鼠输入进程,dscreen 是分布式屏幕进程。

分布式体系硬件资源池原理和接入实践

图 7分布式硬件相关进程

五、社区已开源分布式硬件代码仓

当时在 OpenHarmony 开源社区,现已开源了硬件资源池办理结构,分布式相机,分布式音频,分布式屏幕,分布式输入的代码仓,开放了相机,音频,屏幕和键鼠输入外设的跨设备控制源码,关于硬件资源池的具体完成,能够参阅咱们的开源代码仓。

1、 分布式硬件结构(distributedhardware_distributed_hardware_fwk)gitee.com/openharmony…

2、分布式相机(distributedhardware_distributed_camera)

gitee.com/openharmony…

3、分布式音频(distributedhardware_distributed_audio)

gitee.com/openharmony…

4、分布式屏幕(distributedhardware_distributed_screen)

gitee.com/openharmony…

5、分布式输入(distributedhardware_distributed_input)gitee.com/openharmony…