USB管理
本模塊主要提供管理USB設(shè)備的相關(guān)功能,包括查詢USB設(shè)備列表、批量數(shù)據(jù)傳輸、控制命令傳輸、權(quán)限控制等。
說明:
開發(fā)前請(qǐng)熟悉鴻蒙開發(fā)指導(dǎo)文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]
本模塊首批接口從API version 8開始支持。后續(xù)版本的新增接口,采用上角標(biāo)單獨(dú)標(biāo)記接口的起始版本。
導(dǎo)入模塊
import usb from "@ohos.usb";
usb.getDevices
getDevices(): Array>
獲取USB設(shè)備列表。
系統(tǒng)能力: SystemCapability.USB.USBManager
返回值:
| 類型 | 說明 |
|---|---|
| Array> | 設(shè)備信息列表。 |
示例:
let devicesList = usb.getDevices();
console.log(`devicesList = ${JSON.stringify(devicesList)}`);
//devicesList 返回的數(shù)據(jù)結(jié)構(gòu)
//此處提供一個(gè)簡(jiǎn)單的示例,如下
[
{
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,
},
],
},
],
},
],
},
]
usb.connectDevice
connectDevice(device: USBDevice): Readonly
打開USB設(shè)備。
需要調(diào)用[usb.getDevices]獲取設(shè)備信息以及device;再調(diào)用[usb.requestRight]獲取設(shè)備請(qǐng)求權(quán)限。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
| 參數(shù)名 | 類型 | 必填 | 說明 |
|---|---|---|---|
| device | [USBDevice] | 是 | USB設(shè)備信息。 |
返回值:
| 類型 | 說明 |
|---|---|
| Readonly<[USBDevicePipe]> | 指定的傳輸通道對(duì)象。 |
示例:
let devicepipe= usb.connectDevice(device);
console.log(`devicepipe = ${JSON.stringify(devicepipe)}`);
usb.hasRight
hasRight(deviceName: string): boolean
判斷是否有權(quán)訪問該設(shè)備。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
| 參數(shù)名 | 類型 | 必填 | 說明 |
|---|---|---|---|
| deviceName | string | 是 | 設(shè)備名稱。 |
返回值:
| 類型 | 說明 |
|---|---|
| boolean | true表示有訪問設(shè)備的權(quán)限,false表示沒有訪問設(shè)備的權(quán)限。 |
示例:
let devicesName="1-1";
let bool = usb.hasRight(devicesName);
console.log(bool);
usb.requestRight
requestRight(deviceName: string): Promise
請(qǐng)求軟件包的臨時(shí)權(quán)限以訪問設(shè)備。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
| 參數(shù)名 | 類型 | 必填 | 說明 |
|---|---|---|---|
| deviceName | string | 是 | 設(shè)備名稱。 |
返回值:
| 類型 | 說明 |
|---|---|
| Promise | 獲取到true則表示軟件包的臨時(shí)權(quán)限已訪問成功, 獲取到false則表示軟件包的臨時(shí)權(quán)限已訪問失敗。 |
示例:
let devicesName="1-1";
usb.requestRight(devicesName).then((ret) = > {
console.log(`requestRight = ${JSON.stringify(ret)}`);
});
usb.claimInterface
claimInterface(pipe: USBDevicePipe, iface: USBInterface, force?: boolean): number
注冊(cè)通信接口。
需要調(diào)用[usb.getDevices]獲取設(shè)備信息以及interfaces;調(diào)用[usb.requestRight]獲取設(shè)備請(qǐng)求權(quán)限;調(diào)用[usb.connectDevice]接口得到devicepipe作為參數(shù)。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
| 參數(shù)名 | 類型 | 必填 | 說明 |
|---|---|---|---|
| pipe | [USBDevicePipe] | 是 | 用于確定總線號(hào)和設(shè)備地址。 |
| iface | [USBInterface] | 是 | 用于確定需要獲取接口的索引。 |
| force | boolean | 否 | 可選參數(shù),是否強(qiáng)制獲取。默認(rèn)值false ,表示不強(qiáng)制獲取。 |
返回值:
| 類型 | 說明 |
|---|---|
| number | 注冊(cè)通信接口成功返回0;注冊(cè)通信接口失敗返回其他錯(cuò)誤碼。 |
示例:
let ret = usb.claimInterface(devicepipe, interfaces);
console.log(`claimInterface = ${ret}`);
usb.releaseInterface
releaseInterface(pipe: USBDevicePipe, iface: USBInterface): number
釋放注冊(cè)過的通信接口。
需要調(diào)用[usb.claimInterface]先獲取接口,才能使用此方法釋放接口。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
| 參數(shù)名 | 類型 | 必填 | 說明 |
|---|---|---|---|
| pipe | [USBDevicePipe] | 是 | 用于確定總線號(hào)和設(shè)備地址。 |
| iface | [USBInterface] | 是 | 用于確定需要釋放接口的索引。 |
返回值:
| 類型 | 說明 |
|---|---|
| number | 釋放接口成功返回0;釋放接口失敗返回其他錯(cuò)誤碼。 |
示例:
let ret = usb.releaseInterface(devicepipe, interfaces);
console.log(`releaseInterface = ${ret}`);
usb.setConfiguration
setConfiguration(pipe: USBDevicePipe, config: USBConfig): number
設(shè)置設(shè)備配置。
需要調(diào)用[usb.getDevices]獲取設(shè)備信息以及config;調(diào)用[usb.requestRight]獲取設(shè)備請(qǐng)求權(quán)限;調(diào)用[usb.connectDevice]得到devicepipe作為參數(shù)。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
| 參數(shù)名 | 類型 | 必填 | 說明 |
|---|---|---|---|
| pipe | [USBDevicePipe] | 是 | 用于確定總線號(hào)和設(shè)備地址。 |
| config | [USBConfig] | 是 | 用于確定需要設(shè)置的配置。 |
返回值:
| 類型 | 說明 |
|---|---|
| number | 設(shè)置設(shè)備配置成功返回0;設(shè)置設(shè)備配置失敗返回其他錯(cuò)誤碼。 |
示例:
let ret = usb.setConfiguration(devicepipe, config);
console.log(`setConfiguration = ${ret}`);
usb.setInterface
setInterface(pipe: USBDevicePipe, iface: USBInterface): number
設(shè)置設(shè)備接口。
需要調(diào)用[usb.getDevices]獲取設(shè)備列表以及interfaces;調(diào)用[usb.requestRight]獲取設(shè)備請(qǐng)求權(quán)限;調(diào)用[usb.connectDevice]得到devicepipe作為參數(shù);調(diào)用[usb.claimInterface]注冊(cè)通信接口。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
| 參數(shù)名 | 類型 | 必填 | 說明 |
|---|---|---|---|
| pipe | [USBDevicePipe] | 是 | 用于確定總線號(hào)和設(shè)備地址。 |
| iface | [USBInterface] | 是 | 用于確定需要設(shè)置的接口。 |
返回值:
| 類型 | 說明 |
|---|---|
| number | 設(shè)置設(shè)備接口成功返回0;設(shè)置設(shè)備接口失敗返回其他錯(cuò)誤碼。 |
示例:
let ret = usb.setInterface(devicepipe, interfaces);
console.log(`setInterface = ${ret}`);
usb.getRawDescriptor
getRawDescriptor(pipe: USBDevicePipe): Uint8Array
獲取原始的USB描述符。
需要調(diào)用[usb.getDevices]獲取設(shè)備列表;調(diào)用[usb.requestRight]獲取設(shè)備請(qǐng)求權(quán)限;調(diào)用[usb.connectDevice]接口得到devicepipe作為參數(shù)。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
| 參數(shù)名 | 類型 | 必填 | 說明 |
|---|---|---|---|
| pipe | [USBDevicePipe] | 是 | 用于確定總線號(hào)和設(shè)備地址。 |
返回值:
| 類型 | 說明 |
|---|---|
| Uint8Array | 返回獲取的原始數(shù)據(jù);失敗返回undefined。 |
示例:
let ret = usb.getRawDescriptor(devicepipe);
usb.getFileDescriptor
getFileDescriptor(pipe: USBDevicePipe): number
獲取文件描述符。
需要調(diào)用[usb.getDevices]獲取設(shè)備列表;調(diào)用[usb.requestRight]獲取設(shè)備請(qǐng)求權(quán)限;調(diào)用[usb.connectDevice]接口得到devicepipe作為參數(shù)。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
| 參數(shù)名 | 類型 | 必填 | 說明 |
|---|---|---|---|
| pipe | [USBDevicePipe] | 是 | 用于確定總線號(hào)和設(shè)備地址。 |
返回值:
| 類型 | 說明 |
|---|---|
| number | 返回設(shè)備對(duì)應(yīng)的文件描述符;失敗返回-1。 |
示例:
let ret = usb.getFileDescriptor(devicepipe);
usb.controlTransfer
controlTransfer(pipe: USBDevicePipe, contrlparam: USBControlParams, timeout?: number): Promise
控制傳輸。
需要調(diào)用[usb.getDevices]獲取設(shè)備列表;調(diào)用[usb.requestRight]獲取設(shè)備請(qǐng)求權(quán)限;調(diào)用[usb.connectDevice]接口得到devicepipe作為參數(shù)。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
| 參數(shù)名 | 類型 | 必填 | 說明 |
|---|---|---|---|
| pipe | [USBDevicePipe] | 是 | 用于確定設(shè)備。 |
| contrlparam | [USBControlParams] | 是 | 控制傳輸參數(shù)。 |
| timeout | number | 否 | 超時(shí)時(shí)間,可選參數(shù),默認(rèn)為0不超時(shí)。 |
返回值:
| 類型 | 說明 |
|---|---|
| Promise | 獲取傳輸或接收到的數(shù)據(jù)塊大小, 獲取到-1則表示異常。 |
示例:
usb.controlTransfer(devicepipe, USBControlParams).then((ret) = > {
console.log(`controlTransfer = ${JSON.stringify(ret)}`);
})
usb.bulkTransfer
bulkTransfer(pipe: USBDevicePipe, endpoint: USBEndpoint, buffer: Uint8Array, timeout?: number): Promise
批量傳輸。
需要調(diào)用[usb.getDevices]獲取設(shè)備信息列表以及endpoint;再調(diào)用[usb.requestRight]獲取設(shè)備請(qǐng)求權(quán)限;然后調(diào)用[usb.connectDevice]接口得到返回?cái)?shù)據(jù)devicepipe之后,再次獲取接口[usb.claimInterface];再調(diào)用usb.bulkTransfer接口。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
| 參數(shù)名 | 類型 | 必填 | 說明 |
|---|---|---|---|
| pipe | [USBDevicePipe] | 是 | 用于確定設(shè)備。 |
| endpoint | [USBEndpoint] | 是 | 用于確定傳輸?shù)?a target="_blank">端口。 |
| buffer | Uint8Array | 是 | 用于寫入或讀取的緩沖區(qū)。 |
| timeout | number | 否 | 超時(shí)時(shí)間,可選參數(shù),默認(rèn)為0不超時(shí)。 |
返回值:
| 類型 | 說明 |
|---|---|
| Promise | 獲取傳輸或接收到的數(shù)據(jù)塊大小, 獲取到-1則表示異常。 |
示例:
//usb.getDevices 接口返回?cái)?shù)據(jù)集合,取其中一個(gè)設(shè)備對(duì)象,并獲取權(quán)限 。
//把獲取到的設(shè)備對(duì)象作為參數(shù)傳入usb.connectDevice;當(dāng)usb.connectDevice接口成功返回之后;
//才可以調(diào)用第三個(gè)接口usb.claimInterface.當(dāng)usb.claimInterface 調(diào)用成功以后,再調(diào)用該接口。
usb.bulkTransfer(devicepipe, endpoint, buffer).then((ret) = > {
console.log(`bulkTransfer = ${JSON.stringify(ret)}`);
});
usb.closePipe
closePipe(pipe: USBDevicePipe): number
關(guān)閉設(shè)備消息控制通道。
需要調(diào)用[usb.getDevices]獲取設(shè)備列表;調(diào)用[usb.requestRight]獲取設(shè)備請(qǐng)求權(quán)限;調(diào)用[usb.connectDevice]得到devicepipe作為參數(shù)。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
| 參數(shù)名 | 類型 | 必填 | 說明 |
|---|---|---|---|
| pipe | [USBDevicePipe] | 是 | 用于確定USB設(shè)備消息控制通道。 |
返回值:
| 類型 | 說明 |
|---|---|
| number | 關(guān)閉設(shè)備消息控制通道成功返回0;關(guān)閉設(shè)備消息控制通道失敗返回其他錯(cuò)誤碼。 |
示例:
let ret = usb.closePipe(devicepipe);
console.log(`closePipe = ${ret}`);
USBEndpoint
通過USB發(fā)送和接收數(shù)據(jù)的端口。通過[USBInterface]獲取。
系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為 SystemCapability.USB.USBManager。
| 名稱 | 參數(shù)類型 | 說明 |
|---|---|---|
| address | number | 端點(diǎn)地址。 |
| attributes | number | 端點(diǎn)屬性。 |
| interval | number | 端點(diǎn)間隔。 |
| maxPacketSize | number | 端點(diǎn)最大數(shù)據(jù)包大小。 |
| direction | [USBRequestDirection] | 端點(diǎn)的方向。 |
| number | number | 端點(diǎn)號(hào)。 |
| type | number | 端點(diǎn)類型。 |
| interfaceId | number | 端點(diǎn)所屬的接口的唯一標(biāo)識(shí)。 |
USBInterface
一個(gè)[USBConfig]中可以含有多個(gè)USBInterface,每個(gè)USBInterface提供一個(gè)功能。
系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為 SystemCapability.USB.USBManager。
| 名稱 | 參數(shù)類型 | 說明 |
|---|---|---|
| id | number | 接口的唯一標(biāo)識(shí)。 |
| protocol | number | 接口的協(xié)議。 |
| clazz | number | 設(shè)備類型。 |
| subClass | number | 設(shè)備子類。 |
| alternateSetting | number | 在同一個(gè)接口中的多個(gè)描述符中進(jìn)行切換設(shè)置。 |
| name | string | 接口名稱。 |
| endpoints | Array<[USBEndpoint]> | 當(dāng)前接口所包含的端點(diǎn)。 |
USBConfig
USB配置,一個(gè)[USBDevice]中可以含有多個(gè)配置。
系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為 SystemCapability.USB.USBManager。
| 名稱 | 參數(shù)類型 | 說明 |
|---|---|---|
| id | number | 配置的唯一標(biāo)識(shí)。 |
| attributes | number | 配置的屬性。 |
| maxPower | number | 最大功耗,以毫安為單位。 |
| name | string | 配置的名稱,可以為空。 |
| isRemoteWakeup | boolean | 檢查當(dāng)前配置是否支持遠(yuǎn)程喚醒。 |
| isSelfPowered | boolean | 檢查當(dāng)前配置是否支持獨(dú)立電源。 |
| interfaces | Array <[USBInterface]> | 配置支持的接口屬性。 |
USBDevice
USB設(shè)備信息。
系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為 SystemCapability.USB.USBManager。
| 名稱 | 參數(shù)類型 | 說明 |
|---|---|---|
| busNum | number | 總線地址。 |
| devAddress | number | 設(shè)備地址。 |
| serial | string | 序列號(hào)。 |
| name | string | 設(shè)備名字。 |
| manufacturerName | string | 產(chǎn)商信息。 |
| productName | string | 產(chǎn)品信息。 |
| version | string | 版本。 |
| vendorId | number | 廠商ID。 |
| productId | number | 產(chǎn)品ID。 |
| clazz | number | 設(shè)備類。 |
| subClass | number | 設(shè)備子類。 |
| protocol | number | 設(shè)備協(xié)議碼。 |
| configs | Array<[USBConfig]> | 設(shè)備配置描述符信息。 |
USBDevicePipe
USB設(shè)備消息傳輸通道,用于確定設(shè)備。
系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為 SystemCapability.USB.USBManager。
| 名稱 | 參數(shù)類型 | 說明 |
|---|---|---|
| busNum | number | 總線地址。 |
| devAddress | number | 設(shè)備地址。 |
USBControlParams
控制傳輸參數(shù)。
系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為 SystemCapability.USB.USBManager。
| 名稱 | 參數(shù)類型 | 說明 |
|---|---|---|
| request | number | 請(qǐng)求類型。 |
| target | [USBRequestTargetType] | 請(qǐng)求目標(biāo)類型。 |
| reqType | [USBControlRequestType] | 請(qǐng)求控制類型。 |
| value | number | 請(qǐng)求參數(shù)。 |
| index | number | 請(qǐng)求參數(shù)value對(duì)應(yīng)的索引值。 |
| data | Uint8Array | 用于寫入或讀取的緩沖區(qū)。 |
USBRequestTargetType
請(qǐng)求目標(biāo)類型。
系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為 SystemCapability.USB.USBManager。
| 名稱 | 默認(rèn)值 | 說明 |
|---|---|---|
| USB_REQUEST_TARGET_DEVICE | 0 | 設(shè)備。 |
| USB_REQUEST_TARGET_INTERFACE | 1 | 接口。 |
| USB_REQUEST_TARGET_ENDPOINT | 2 | 端點(diǎn)。 |
| USB_REQUEST_TARGET_OTHER | 3 | 其他。 |
USBControlRequestType
控制請(qǐng)求類型。
系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為 SystemCapability.USB.USBManager。
| 名稱 | 默認(rèn)值 | 說明 |
|---|---|---|
| USB_REQUEST_TYPE_STANDARD | 0 | 標(biāo)準(zhǔn)。 |
| USB_REQUEST_TYPE_CLASS | 1 | 類。 |
| USB_REQUEST_TYPE_VENDOR | 2 | 廠商。HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿 |

USBRequestDirection
請(qǐng)求方向。
系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為 SystemCapability.USB.USBManager。
| 名稱 | 默認(rèn)值 | 說明 |
|---|---|---|
| USB_REQUEST_DIR_TO_DEVICE | 0 | 寫數(shù)據(jù),主設(shè)備往從設(shè)備。 |
| USB_REQUEST_DIR_FROM_DEVICE | 0x80 | 讀數(shù)據(jù),從設(shè)備往主設(shè)備。 |
審核編輯 黃宇
-
usb
+關(guān)注
關(guān)注
60文章
8438瀏覽量
284444 -
鴻蒙
+關(guān)注
關(guān)注
60文章
2963瀏覽量
45883
發(fā)布評(píng)論請(qǐng)先 登錄
LTC4410 USB 電源管理器:高效電源管理解決方案
2025開放原子開發(fā)者大會(huì)開源算力設(shè)備管理軟件分論壇即將啟幕
觸覺智能RK3576開發(fā)板OpenHarmony開源鴻蒙系統(tǒng)USB控制傳輸功能示例
不止 IoT 聯(lián)網(wǎng):設(shè)備管理系統(tǒng)現(xiàn)在還能做這些事
別讓設(shè)備 “拖后腿”!這款設(shè)備管理系統(tǒng),幫制造企業(yè)省心又增效
用勤哲Excel服務(wù)器自主開發(fā)軟件促進(jìn)設(shè)備管理工作數(shù)字化
重構(gòu)工業(yè)設(shè)備管理新范式:解析設(shè)備遠(yuǎn)程運(yùn)維管理系統(tǒng)的變革邏輯
K230設(shè)備管理器里面沒有COM是怎么回事?
工業(yè)設(shè)備管理平物聯(lián)網(wǎng)臺(tái)有哪些內(nèi)容
使用CYUSB3014作為USB3.0數(shù)據(jù)傳輸方案,USB3.0無法識(shí)別是什么原因?
CYUSBS234無法使用USB串口怎么解決?
3014 USB驅(qū)動(dòng)程序無法檢測(cè)到USB設(shè)備是怎么回事?
在USBBulkSourceSink示例中,F(xiàn)X3強(qiáng)制全速并在設(shè)備管理器上顯示黃色感嘆號(hào),怎么解決?
設(shè)備管理系統(tǒng)的功能架構(gòu)與核心價(jià)值
設(shè)備管理系統(tǒng)新范式:區(qū)塊鏈存證+動(dòng)態(tài)權(quán)限管理
鴻蒙開發(fā)設(shè)備管理:ohos.usb USB管理
評(píng)論