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

物聯網 + 設備管理,讓管理觸手可及

TSW14J56EVM無論是上電后,還是上電前將usb線與電腦連接,設備管理器都無法找到該設備,為什么?
設備管理流程優化的優勢

鴻蒙開發設備管理:ohos.multimodalInput.inputDevice 輸入設備

評論