HarmonyOS 設備管理開發:USB 服務開發指導

基本概念

USB 服務是應用訪問底層的一種設備抽象概念。開發者根據提供的 USB?API,可以獲取設備列表、控制設備訪問權限、以及與連接的設備進行數據傳輸、控制命令傳輸等。

運作機制

USB 服務系統包含 USB?API、USB?Service、USB?HAL。

圖 1?USB 服務運作機制

●?USB?API:提供 USB 的基礎 API,主要包含查詢 USB 設備列表、批量數據傳輸、控制命令傳輸、權限控制等。

●?USB?Service:主要實現 HAL 層數據的接收、解析、分發以及對設備的管理等。

●?USB?HAL 層:提供給用戶態可直接調用的驅動能力接口。

場景介紹

Host 模式下,可以獲取到已經連接的 USB 設備列表,并根據需要打開和關閉設備、控制設備權限、進行數據傳輸等。

接口說明

USB 服務主要提供的功能有:查詢 USB 設備列表、批量數據傳輸、控制命令傳輸、權限控制等。

USB 類開放能力如下,具體請查閱API參考文檔。

表 1?USB 類的開放能力接口

開發步驟

USB 設備可作為 Host 設備連接 Device 設備進行數據傳輸。開發示例如下:

1.? 獲取設備列表。

```ts// 導入USB接口api包。import usb from '@ohos.usbManager';// 獲取設備列表。let deviceList : Array<usb.USBDevice> = usb.getDevices();/deviceList結構示例[  {    name: "1-1",    serial: "",    manufacturerName: "",    productName: "",    version: "",    vendorId: 7531,    productId: 2,    clazz: 9,    subClass: 0,    protocol: 1,    devAddress: 1,    busNum: 1,    configs: [      {        id: 1,        attributes: 224,        isRemoteWakeup: true,        isSelfPowered: true,        maxPower: 0,        name: "1-1",        interfaces: [          {            id: 0,            protocol: 0,            clazz: 9,            subClass: 0,            alternateSetting: 0,            name: "1-1",            endpoints: [              {                address: 129,                attributes: 3,                interval: 12,                maxPacketSize: 4,                direction: 128,                number: 1,                type: 3,                interfaceId: 0,              }            ]          }        ]      }    ]  }]/

2.? 獲取設備操作權限。

```ts import usb from '@ohos.usbManager'; import { BusinessError } from '@ohos.base'; let deviceName : string = deviceList[0].name;// 申請操作指定的device的操作權限。usb.requestRight(deviceName).then((hasRight : boolean) => {  console.info("usb device request right result: " + hasRight);}).catch((error : BusinessError)=> {  console.info("usb device request right failed : " + error);});```

3.? 打開 Device 設備。

```ts// 打開設備,獲取數據傳輸通道。let interface1 = deviceList[0].configs[0].interfaces[0];let interface1 : number = deviceList[0].configs[0].interfaces[0];/ 打開對應接口,在設備信息(deviceList)中選取對應的interface。interface1為設備配置中的一個接口。/usb.claimInterface(pipe, interface1, true);

let?pipe?:?USBDevicePipe?=?usb.connectDevice(deviceList[0]);

4.? 數據傳輸。
?

import usb from '@ohos.usbManager'; 
import { BusinessError } from '@ohos.base';
/*讀取數據,在device信息中選取對應數據接收的endpoint來做數據傳輸
(endpoint.direction == 0x80);dataUint8Array是要讀取的數據,類型為Uint8Array。
*/
let inEndpoint : USBEndpoint = interface1.endpoints[2];
let outEndpoint : USBEndpoint = interface1.endpoints[1];
let dataUint8Array : Array<number> = new Uint8Array(1024);
usb.bulkTransfer(pipe, inEndpoint, dataUint8Array, 15000).then((dataLength : number) => {
if (dataLength >= 0) {console.info("usb readData result Length : " + dataLength);
} else {console.info("usb readData failed : " + dataLength);
}
}).catch((error : BusinessError) => {
console.info("usb readData error : " + JSON.stringify(error));
});
// 發送數據,在device信息中選取對應數據發送的endpoint來做數據傳輸。(endpoint.direction == 0)
usb.bulkTransfer(pipe, outEndpoint, dataUint8Array, 15000).then((dataLength : number) => {if (dataLength >= 0) {console.info("usb writeData result write length : " + dataLength);} else {console.info("writeData failed");}
}).catch((error : BusinessError) => {console.info("usb writeData error : " + JSON.stringify(error));
});

let?inEndpoint?:?USBEndpoint?=?interface1.endpoints[2];

5.? 釋放接口,關閉設備。

```tsusb.releaseInterface(pipe, interface1);usb.closePipe(pipe);```

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166823.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166823.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166823.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【SpringBoot3+Vue3】五【完】【實戰篇】-前端(配合后端)

目錄 一、環境準備 1、創建Vue工程 2、安裝依賴 2.1 安裝項目所需要的vue依賴 2.2 安裝element-plus依賴 2.2.1 安裝 2.2.2 項目導入element-plus 2.3 安裝axios依賴 2.4 安裝sass依賴 3、目錄調整 3.1 刪除部分默認目錄下文件 3.1.1 src/components下自動生成的…

JeecgBoot3.5漏洞升級—快速文檔

近幾年來&#xff0c;黑客攻擊行為呈現出日益復雜和隱蔽的趨勢&#xff0c;對個人和組織的安全造成了嚴重威脅。黑客們不斷尋找新的漏洞和安全漏洞&#xff0c;利用各種手段進行網絡攻擊&#xff0c;包括惡意軟件、網絡釣魚、勒索軟件等。因此&#xff0c;我們每個人都需要關注…

Windows系統下載并安裝 Windows PowerShell

PowerShell下載地址 一 windows7 版本 **若要確定您正在使用的 Microsoft PowerShelll 版本,請在 Windows 7 或 Windows Server 2008R2 或 Windows Server 2012 計算機上執行以下操作: 單擊“開始”,單擊“所有程序”,單擊“附件”,單擊“Windows PowerShell”,然后單擊…

渲染農場渲染一分鐘動畫需要多少錢?需要渲染多少時間?

現在很公司都開始使用渲染農場渲染動畫&#xff0c;但是還是有很多人不知道渲染農場渲染動畫需要多少錢&#xff0c;需要渲染多少時間。在這篇文章中我們將為你一一解答&#xff0c;為你提供一個清晰的參考。 渲染農場的收費通常是按照渲染的使用時間收費&#xff0c;渲染十分…

華大基因助力烏茲別克斯坦精準醫學發展,共筑健康絲綢之路

今年上半年&#xff0c;中國與中亞五國元首齊聚陜西西安&#xff0c;舉辦中國&#xff0d;中亞峰會。過去的20年里&#xff0c;中國已經成為中亞國家的主要投資來源國&#xff0c;總投資額接近400億美元。烏茲別克斯坦是中國&#xff0d;中亞合作機制的重要參與者&#xff0c;烏…

elasticsearch命令大全

1、查詢全部索引 GET /_cat/indices?v2、要按文檔數對所有索引進行降序排序 GET /_cat/indices?v&hindex,docs.count&sdocs.count:descv&#xff1a;參數用于顯示列標題 h&#xff1a;參數用于指定要顯示的列 s&#xff1a;參數用于指定按哪一列進行排序 desc&…

CAD隨機多面體_圓柱試件3D插件

插件介紹 CAD隨機多面體_圓柱試件3D插件可用于在AutoCAD軟件內生成隨機三維多面體及外側圓柱體試件。插件可確保多面體之間不發生干涉&#xff0c;且多面體與外側圓柱體試件之間保持適配關系&#xff0c;確保生成的模型導入有限元軟件后幾何合理有效。本插件主要可應用于三維混…

講概念談愿景AI Agent名不副實?看實在智能RPA Agent智能體如何落地!

OpenAI在首屆開發者大會上推出了GPTs和Assitant API&#xff0c;不僅改寫了AI Agent的構建范式&#xff0c;也把AI智能體的應用推向一個新高潮。GPTs和GPT商店&#xff0c;使得用戶無需編碼通過自然語言就能創建并擁有多個專屬私人助理&#xff0c;且可以如在蘋果應用商店一樣在…

開發教育APP的意義

開發教育APP的意義有以下幾點&#xff1a; 促進教育資源發揮效果&#xff1a;通過教育APP軟件開發&#xff0c;可以讓現代教育資源有效合理的進行利用&#xff0c;并且能夠更進一步的提升發揮功能&#xff0c;促進教育資源全面發揮其具體作用和效果&#xff0c;從而提升教育行…

3.3.1詳解linux內核鏈表list_head及其接口應用

文章目錄 1 list定義2 list接口2.1 list初始化方法1:定義并初始化鏈表方法2:先定義再初始化鏈表2.2 list_add2.3 list_del2.4 list_replace2.5 list_move2.6 list_splice3 list遍歷3.1 list_entry3.2 list_first_entry3.3 list_last_entry3.4 list_first_entry_or_null3.5 li…

Y-MODEM協議定制上位機

最近在使用N32G031和STM32F10X系列單片機進行IAP&#xff0c;使用的是Ymodem協議。單片機上的軟件已經完成了&#xff0c;一般是使用secureCRT這樣的工具作為上位機來進行測試&#xff0c;后來想做一個定制化的簡單的上位機。在網上找了下資料&#xff0c;以下這篇文章寫的使用…

淺談安科瑞無線測溫設備在挪威某項目的應用

摘要&#xff1a;安科瑞無線溫度設備裝置通過無線溫度收發器和各無線溫度傳感器直接進行溫度值的傳輸&#xff0c;并采用液晶顯示各無線溫度傳感器所測溫度。 Absrtact:Acre wireless temperature device directly transmits the temperature value through the wireless temp…

基于51單片機傾角MPU6050老人跌倒遠程GSM短信報警器+源程序

一、系統方案 1、本設計采用這51單片機作為主控器。 2、MPU6050角度值送到液晶1602顯示。 3、紅外傳感器檢測心率。 4、跌倒遠程GSM報警。 二、硬件設計 原理圖如下&#xff1a; 三、單片機軟件設計 1、首先是系統初始化 void LCD_Init() //初始化液晶時間顯示 { write_com…

yarn:無法加載文件 C:\Users\***\AppData\Roaming\npm\yarn.ps1,因為在此系統上禁止運行腳本

原因&#xff1a;PowerShell 腳本的執行有著嚴格的安全策略限制&#xff01; 解決方案&#xff1a;管理員身份啟動Windows PowerShell 在命令行中輸入set-ExecutionPolicy RemoteSigned 再使用yarn就可以了

SQL常見函數整理 _ LAG() 向上偏移

1. 用法 窗口函數&#xff0c;用于訪問窗口中當前行之前的行的數據。該函數可以根據需要計算當前行之前的值&#xff0c;使我們能夠輕松地比較不同行之間的差異和變化。 2. 基本語法 LAG(column, offset, default_value) OVER (ORDER BY column)column&#xff1a;代表在返回…

【UE5】資源(Asset)

了解UE游戲的基本構成 資源&#xff08;Asset&#xff09;: 在UE中&#xff0c;資源&#xff08;Asset&#xff09;是指游戲中使用到的各種素材&#xff0c;例如模型、紋理、材質、聲音、動畫、藍圖、數據表格、關卡等&#xff08;通常以uasset結尾&#xff09;&#xff0c;他…

Java shiro框架,切換身份后刷新subject的用戶屬性

/*** title 切換身份&#xff0c;登錄后&#xff0c;動態更改subject的用戶屬性* param principal* desc principal為用戶的認證信息*/ public static void reloadAuthorizing(User principal) throws Exception{Subject subject SecurityUtils.getSubject();String realmNam…

如何在springboot項目中使用minio上傳下載刪除文件

引入maven依賴 <!-- minio --> <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.2.2</version> </dependency>申請 bucket | access_key | secret_key 項目中配置相關參數 mini…

ROLLUP 的幾點說明(十七)

ROLLUP 最根本的作用是提高某些查詢的查詢效率&#xff08;無論是通過聚合來減少數據量&#xff0c;還是修改列順序以匹配前綴索引&#xff09;。因此 ROLLUP 的含義已經超出了“上卷”的范圍。這也是為什么在源代碼中&#xff0c;將其命名為 Materialized Index&#xff08;物…

土壤教學經典用圖30張

一、土壤分布 二、土壤形成與氣候 三、土壤形成與地形 四、土壤形成與成土母質 五、成土過程示意圖 六、土壤剖面實景圖 七、土壤剖面示意圖 八、土壤質地 以上圖片多來源于 人教、湘教、魯教、中圖、滬教 五套新教材及地圖冊