OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)作為面向全場景、全連接、全智能時代的分布式操作系統(tǒng),通過將各類不同終端設(shè)備的能力進行整合,實現(xiàn)硬件互助、資源共享,為用戶提供流暢的全場景體驗。本期,我們通過介紹 OpenHarmony 的硬件資源池化模型,為大家揭曉 OpenHarmony 是如何實現(xiàn)多設(shè)備協(xié)同的。
1.硬件資源訪問的演進
硬件資源訪問是多設(shè)備進行協(xié)同的關(guān)鍵。OpenHarmony 發(fā)展至今,硬件資源訪問經(jīng)歷了從“一對一”到“多對多”的演進過程。
1.1 一對一
在設(shè)計初期,為解決兩臺設(shè)備間的協(xié)同問題,我們通過 OpenHarmony 提供的分布式設(shè)備虛擬化能力將兩臺設(shè)備的硬件資源進行融合,實現(xiàn)了“一對一”的硬件資源訪問。這便是硬件資源池化模型的雛形。
圖1 “一對一”的硬件資源訪問
1.2 多對多
隨著全場景智慧生活的不斷深入,“一對一”的設(shè)備硬件資源訪問方式已不能滿足某些復雜場景的業(yè)務需求。OpenHarmony 對分布式技術(shù)不斷探索與創(chuàng)新,通過增強原來的分布式設(shè)備虛擬化能力,將多臺設(shè)備的各種硬件資源,如屏幕、相機、擴音器、鍵盤、傳感器及存儲器等予以抽象,形成“超級虛擬終端”內(nèi)的統(tǒng)一硬件資源池,并支持硬件資源的按需分配和重新組合,真正實現(xiàn)了硬件資源的全局調(diào)用。組成“超級虛擬終端”的多個設(shè)備,能訪問硬件資源池內(nèi)的多種硬件資源,這便是“多對多”的硬件資源訪問。
圖2 硬件資源池化(多對多)
基于“硬件資源池化”,開發(fā)者可以根據(jù)不同的業(yè)務場景,在硬件資源池內(nèi)選擇并匹配合適的能力模塊,充分發(fā)揮不同設(shè)備的能力優(yōu)勢,從而構(gòu)建全新的用戶體驗。
2.硬件資源池化模型
基于“硬件資源池化”的創(chuàng)新理念,OpenHarmony 融合硬件虛擬化、硬件資源管理及硬件數(shù)據(jù)管理等能力,構(gòu)建了硬件資源池化模型,對外提供了統(tǒng)一的硬件能力開放接口,讓開發(fā)者輕松實現(xiàn)高效開發(fā)。
如圖3所示,硬件資源池化模型將各類設(shè)備的硬件資源進行抽象,為北向應用提供各種分布式服務,比如分布式相機、分布式屏幕、分布式音頻和分布式輸入等,同時提供統(tǒng)一的設(shè)備管理和分布式硬件框架。
圖3 硬件資源池化模型
下面為大家一一介紹硬件資源池化模型的各個組成部分。
2.1 設(shè)備管理
設(shè)備管理(即 DeviceManager)服務,提供設(shè)備發(fā)現(xiàn)、認證管理、可信設(shè)備管理和設(shè)備狀態(tài)管理等能力。
圖4 設(shè)備管理(DeviceManager)
OpenHarmony 為開發(fā)者提供了一套設(shè)備管理接口,用于分布式設(shè)備間監(jiān)聽、發(fā)現(xiàn)和認證,如圖 5 所示。
圖5 設(shè)備管理接口
設(shè)備管理接口的使用示例代碼如下:
// 創(chuàng)建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)))
});
// 查詢可信設(shè)備列表
var array = dmClass.getTrustedDeviceListSync();
// 獲取本地設(shè)備信息
var localDeviceInfo = dmClass.getLocalDeviceInfoSync();
// 開始設(shè)備發(fā)現(xiàn)(發(fā)現(xiàn)周邊不可信設(shè)備)
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);
// 停止設(shè)備發(fā)現(xiàn)(需要和startDeviceDiscovery接口配對使用)
dmClass.stopDeviceDiscovery(subscribeId);
// 設(shè)備認證
var deviceInfo ={
"deviceId": "XXXXXXXX",
"deviceName": "",
deviceType: 0
};
let extraInfo = {
"appIcon": new Uint8Array(), // app圖標,可選參數(shù),可不填
"appThumbnail": new Uint8Array(), // app縮略圖,可選參數(shù),可不填
"appName": "xxxxxxxx", // 對端設(shè)備應用名稱
"appDescription": "xxxxxxxx", // app描述
"business": '0',
"displayOwner": 0,
}
// 設(shè)備取消認證
dmClass.unAuthenticateDevice(this.deviceInfo);
DeviceManager 的更多詳情,請參考以下代碼倉:
https://gitee.com/openharmony/device_manager
2.2 分布式硬件框架
分布式硬件框架為硬件資源池化模型提供了接入管理、能力查詢、狀態(tài)管理、權(quán)限管理以及版本管理等硬件資源管理能力,如圖6所示:
圖6 分布式硬件框架
分布式硬件框架的各模塊說明如下:
圖9 分布式相機的模塊說明
分布式相機的更多詳情,請參考分布式相機代碼倉:
https://gitee.com/openharmony/distributed_camera
2.4 分布式屏幕
分布式屏幕提供了屏幕設(shè)備的硬件資源軟件抽象能力,為 OpenHarmony 系統(tǒng)框架提供系統(tǒng)投屏、屏幕鏡像、屏幕分割等能力的實現(xiàn)。分布式屏幕的框架圖如下所示:
圖10 分布式屏幕
分布式屏幕的各模塊說明如下:
圖11 分布式屏幕的模塊說明
分布式屏幕的更多詳情,請參考以下代碼倉:
https://gitee.com/openharmony/distributed_screen
3.結(jié)束語
除了分布式相機和分布式屏幕外,硬件資源池化模型在后續(xù)版本還將提供分布式音頻和分布式輸入能力。分布式音頻將提供對麥克風、喇叭、聽筒等音頻設(shè)備的硬件資源池化能力,通過音頻服務提供給應用開發(fā)者,使得開發(fā)者能夠自由選擇、切換、組合音頻設(shè)備,提升用戶的使用體驗。分布式輸入將提供對鍵盤、鼠標等輸入設(shè)備的硬件資源池化能力,通過輸入服務讓應用開發(fā)者能跨設(shè)備調(diào)用輸入能力,實現(xiàn)多設(shè)備協(xié)同。
硬件資源池化模型仍在建設(shè)中,期待廣大開發(fā)者共同加入我們,共同見證萬物互聯(lián)時代的無限可能!
審核編輯 :李倩
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6888瀏覽量
123593 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3744瀏覽量
16485
原文標題:OpenHarmony 3.1 Release版本關(guān)鍵特性解析——OpenHarmony硬件資源池化模型
文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論