隨著智能設備的發展和普及,越來越多的智能設備已經深入人們的生活,比如手機,PC,平板,各類穿戴設備等。目前單個設備的外設資源已經非常豐富,硬件能力也很強大。但像是手機、PC、平板等設備都有的相機、音頻、屏幕、鍵盤鼠標等外設資源都屬于各個設備自身,如果涉及跨設備協同操作就會比較繁瑣。
比如當我們日常在PC端進行文檔編輯時,若需要從平板復制一段文字,或者使用手機拍攝照片然后分別將素材插入文檔時,就需要我們分別在不同的設備上操作,然后將物料再行匯總發送至PC端口進行編輯,過程十分麻煩。如果應用開發者從應用層面實現設備間硬件能力共享,不但開發者工作量和難度非常大,各個應用之間也需要重復開發,能力難以復用和繼承。
為此,HarmonyOS NEXT提出了硬件資源池的理念,把各個設備的硬件外設抽象為外設信息單元,外設信息在各個可信設備之間自動同步,打破各個設備硬件的孤立狀態,讓設備間硬件外設全局共享。這樣就實現了外設信息的全局可見,再結合分布式硬件虛擬化技術,實現任意設備之間的硬件外設能力跨設備調用;
分布式硬件資源池作為系統能力下沉系統底層,北向開發者并不會感知資源池的存在;跨設備硬件和本地硬件使用同一套API,開發者調用跨設備硬件體驗和本地硬件一致,如此更加開發者調用跨設備硬件,開發者也無需再關注硬件底層細節,可將更多時間專注于業務創新。
HarmonyOS NEXT采用硬件資源池的理念,結合多個設備優勢硬件為用戶提供更優體驗的同時,還能支持消費者和開發者多種創新體驗。
NO.1 消費者場景
從消費者層面來看,華為分布式硬件可支持智慧辦公、智慧出行等多種創新場景。
例如在智慧辦公場景中,使用一套PC鍵盤鼠標即可和周邊平板等設備跨設備操作;在多屏協同時,手機屏幕可直接顯示到平板,手機視頻通話也可以使用平板的麥克風和攝像頭,用戶在平板上即可同時操作手機平板兩臺設備,無需在設備間來回切換。
在智慧出行場景中,當用戶進入座艙,手機上的音樂和通話就可自動接續到車機,使用車機的音頻外設播音和拾音功能,以及使用車機的攝像頭進行視頻通話;當手機導航接續到車機后,車機的GPS信號也可以共享給手機,結合手機GPS信號提供更高精度的定位數據。
結合以上兩種場景可知,在智慧辦公和智慧出行場景中,用戶都可以通過分布式硬件資源池,為用戶提供更好的服務體驗。
開發者場景
對于開發者來說,因為分布式硬件資源池將跨設備硬件調用的復雜度都封裝在了系統底層,跨設備硬件可復用本地硬件的API,因此開發者學習和適配難度可以做到最低。
以分布式相機為例,相機接口可以同時查詢到本地相機和跨設備相機外設,接著本地相機和跨設備相機就可通過ConnectionType.CAMERA_CONNECTION_REMOTE屬性相互區分,開發者通過該屬性過濾出分布式相機后,其他操作和本地相機完全一致,開發者無需為使用跨設備硬件學習一套獨立的API,有效簡化開發者開發難度。
很多開發者可能會問,硬件資源池是怎樣的開發原理,我們可用相機和音頻為例進行講解。
假設設備A和設備B都有各自的相機和音頻外設,驅動層有對應的本地相機和本地音頻驅動。
分布式硬件從各自設備本地采集相機和音頻驅動信息,存入分布式數據庫。如果AB兩個設備建立了可信關系并且通過軟總線組網上線成功,分布式數據庫會在AB兩個設備之間自動同步各自的本地外設數據信息,這樣,設備A分布式硬件可以拿到設備B的相機和音頻外設規格數據,同樣,設備B也可以拿到設備A的相機和音頻外設規格數據。
以設備A的流程為例,分布式硬件收到對端設備B的硬件規格數據后,在驅動層注冊對應的虛擬相機和虛擬音頻驅動,虛擬驅動相當于對端設備物理硬件在本地的代理;虛擬驅動實現和本地硬件驅動相同的HDI接口。他們的區別在于,本地硬件驅動操作本地物理硬件,虛擬硬件驅動控制和數據傳輸通過軟總線作用于對端分布式硬件。由于和本地硬件實現同樣的HDI接口,設備B相機和音頻對應的虛擬硬件可以被相機服務和音頻服務發現并管理,包括外設的查詢,相機的預覽拍照錄像,音頻的播放,聲音的錄制等功能。
對稱的,在設備B上會執行同樣的過程,為設備A相機和音頻外設注冊對應虛擬驅動,從而實現設備B上對設備A硬件外設的查詢和使用。
如此就實現了外設信息在設備間互通共享,信息感知自動注冊虛擬硬件,注冊后即可用,成為一個無中心對稱的分布式硬件外設管理系統。同時,分布式硬件框架定義了外設熱插拔,虛擬硬件保活等機制,保證業務可靠性。在運行時,各個硬件外設的業務運行于獨立進程中,在進程層面保證不同硬件的虛擬化業務互相隔離,提高了業務可靠性。
基于上述分析,開發者可以看到分布式硬件與南向硬件的交互涉及"硬件信息采集"和"驅動注冊"兩類業務,與此對應,分布式硬件針對南向硬件接入定義了兩類接口。一類是硬件規格采集接口,一類是驅動注冊與準備接口。
在硬件規格采集接口中,直接定義了規格信息的采集以及外設熱插拔事件監聽等功能;由于我們是跨設備硬件調用,涉及雙端設備的硬件,因此我們定義使用周邊其他設備硬件外設的一端為Source端,共享本地硬件給其他設備調用的一端為Sink端,驅動注冊與準備接口包括Source和Sink兩端。
Source端包括初始化,釋放以及虛擬驅動注冊/去注冊等功能;Sink端主要是初始化和釋放接口,用于響應Source端的控制指令,比如播放聲音或者采集視頻畫面。在設備組網上線后,分布式硬件框架調用各個硬件類型的南向接口實現,分別初始化各類硬件的Source和Sink端業務進程,為后續的硬件跨設備調用做好準備。
由于分布式硬件良好的南向接入解耦設計,如果有新硬件外設接入,只需要如下三步即可,以分布式相機配置為例,開發者可以基于下方實例進行參考:
Step 1:定義硬件外設類型枚舉值CAMERA
Step 2:實現分布式硬件框架定義的南向接入接口,分別實現為三個so
實現分布式硬件框架定義的硬件規格采集接口IHardwareHandler,并編譯獲得接口實現libdistributed_camera_handler.z.so
實現Source側接入接口IDistributedHardwareSource,并編譯獲得接口實現libdistributed_camera_source_sdk.z.so
實現Sink側接入接口IDistributedHardwareSink,并編譯獲得接口實現libdistributed_camera_sink_sdk.z.so
Step 3:在分布式硬件子部件配置文件中,添加新硬件外設相關配置,包括外設類型,南向接口實現的so名稱,版本號,以及Source和Sink端服務分配的服務Id
注意:該配置由產品定義確定,不同的產品可能使用不同的分布式能力。以RK3568開發板為例,配置如下:
三個接口的so實現后,開發者可將編譯打包到系統庫路徑下,同時配置到分布式硬件部件配置文件中,設備組網上線后,就能看到分布式相機的dcamera進程已經成功啟動,表明相機外設已經納入資源池管理,成為分布式相機。
從下述截圖也可以看到分布式硬件其他相關進程,dhardware就是分布式硬件資源池管理框架進程,顧名思義,dcamera是分布式相機進程,dinput是分布式鍵鼠輸入進程,dscreen是分布式屏幕進程。
當前在OpenHarmony開源社區,已經開源了硬件資源池管理框架,分布式相機,分布式音頻,分布式屏幕,分布式輸入的代碼倉,開放了相機,音頻,屏幕和鍵鼠輸入外設的跨設備控制源碼,關于硬件資源池的詳細實現,可以參考我們的開源代碼倉,更多參考代碼,可關注HarmonyOS開發者官方微信。
審核編輯 黃宇
-
分布式系統
+關注
關注
0文章
146瀏覽量
19227 -
HarmonyOS
+關注
關注
79文章
1975瀏覽量
30194
發布評論請先 登錄
相關推薦
評論