W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
本模塊主要提供管理USB設(shè)備的相關(guān)功能,包括主設(shè)備上查詢USB設(shè)備列表、批量數(shù)據(jù)傳輸、控制命令傳輸、權(quán)限控制等;從設(shè)備上端口管理、功能切換及查詢等。
本模塊首批接口從API version 9開始支持。后續(xù)版本的新增接口,采用上角標(biāo)單獨(dú)標(biāo)記接口的起始版本。
getDevices(): Array<Readonly<USBDevice>>
獲取接入主設(shè)備的USB設(shè)備列表。如果沒有設(shè)備接入,那么將會(huì)返回一個(gè)空的列表。
系統(tǒng)能力: SystemCapability.USB.USBManager
返回值:
類型 | 說明 |
---|---|
Array<Readonly<USBDevice>> | 設(shè)備信息列表。 |
示例:
- ```ts
- let devicesList: Array<usb.USBDevice> = usb.getDevices();
- console.log(`devicesList = ${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,
- },
- ],
- },
- ],
- },
- ],
- },
- ]
- */
connectDevice(device: USBDevice): Readonly<USBDevicePipe>
根據(jù)getDevices()返回的設(shè)備信息打開USB設(shè)備。
需要調(diào)用usb.getDevices獲取設(shè)備信息以及device,再調(diào)用usb.requestRight請(qǐng)求使用該設(shè)備的權(quán)限。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
參數(shù)名 | 類型 | 必填 | 說明 |
---|---|---|---|
device | 是 | USB設(shè)備信息。 |
返回值:
類型 | 說明 |
---|---|
Readonly<USBDevicePipe> | 指定的傳輸通道對(duì)象。 |
錯(cuò)誤碼:
以下錯(cuò)誤碼的詳細(xì)介紹參見USB錯(cuò)誤碼。
錯(cuò)誤碼ID | 錯(cuò)誤信息 |
---|---|
14400001 | Permission denied. Need call requestRight to get permission. |
示例:
- ```ts
- let devicesList: Array<usb.USBDevice> = usb.getDevices();
- if (devicesList.length == 0) {
- console.log(`device list is empty`);
- }
- let device: USBDevice = devicesList[0];
- usb.requestRight(device.name);
- let devicepipe: USBDevicePipe = usb.connectDevice(device);
- console.log(`devicepipe = ${devicepipe}`);
hasRight(deviceName: string): boolean
判斷是否有權(quán)訪問該設(shè)備。
如果“使用者”(如各種App或系統(tǒng))有權(quán)訪問設(shè)備則返回true;無權(quán)訪問設(shè)備則返回false。
系統(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}`);
requestRight(deviceName: string): Promise<boolean>
請(qǐng)求軟件包的臨時(shí)權(quán)限以訪問設(shè)備。使用Promise異步回調(diào)。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
參數(shù)名 | 類型 | 必填 | 說明 |
---|---|---|---|
deviceName | string | 是 | 設(shè)備名稱。 |
返回值:
類型 | 說明 |
---|---|
Promise<boolean> | Promise對(duì)象,返回臨時(shí)權(quán)限的申請(qǐng)結(jié)果。返回true表示臨時(shí)權(quán)限申請(qǐng)成功;返回false則表示臨時(shí)權(quán)限申請(qǐng)失敗。 |
示例:
- ```ts
- let devicesName: string = "1-1";
- usb.requestRight(devicesName:).then((ret: number) => {
- console.log(`requestRight = ${ret}`);
- });
removeRight(deviceName: string): boolean
移除軟件包訪問設(shè)備的權(quán)限。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
參數(shù)名 | 類型 | 必填 | 說明 |
---|---|---|---|
deviceName | string | 是 | 設(shè)備名稱。 |
返回值:
類型 | 說明 |
---|---|
boolean | 返回權(quán)限移除結(jié)果。返回true表示權(quán)限移除成功;返回false則表示權(quán)限移除失敗。 |
示例:
- let devicesName="1-1";
- if (usb.removeRight(devicesName)) {
- console.log(`Succeed in removing right`);
- }
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 | 是 | 用于確定總線號(hào)和設(shè)備地址。 | |
iface | 是 | 用于確定需要獲取接口的索引。 | |
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}`);
releaseInterface(pipe: USBDevicePipe, iface: USBInterface): number
釋放注冊(cè)過的通信接口。
需要調(diào)用usb.claimInterface先獲取接口,才能使用此方法釋放接口。
系統(tǒng)能力: SystemCapability.USB.USBManager
參數(shù):
參數(shù)名 | 類型 | 必填 | 說明 |
---|---|---|---|
pipe | 是 | 用于確定總線號(hào)和設(shè)備地址。 | |
iface | 是 | 用于確定需要釋放接口的索引。 |
返回值:
類型 | 說明 |
---|---|
number | 釋放接口成功返回0;釋放接口失敗返回其他錯(cuò)誤碼。 |
示例:
- let ret = usb.releaseInterface(devicepipe, interfaces);
- console.log(`releaseInterface = ${ret}`);
setConfiguration(pipe: USBDevicePipe, config: USBConfiguration): 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 | 是 | 用于確定總線號(hào)和設(shè)備地址。 | |
config | 是 | 用于確定需要設(shè)置的配置。 |
返回值:
類型 | 說明 |
---|---|
number | 設(shè)置設(shè)備配置成功返回0;設(shè)置設(shè)備配置失敗返回其他錯(cuò)誤碼。 |
示例:
- let ret = usb.setConfiguration(devicepipe, config);
- console.log(`setConfiguration = ${ret}`);
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 | 是 | 用于確定總線號(hào)和設(shè)備地址。 | |
iface | 是 | 用于確定需要設(shè)置的接口。 |
返回值:
類型 | 說明 |
---|---|
number | 設(shè)置設(shè)備接口成功返回0;設(shè)置設(shè)備接口失敗返回其他錯(cuò)誤碼。 |
示例:
- let ret = usb.setInterface(devicepipe, interfaces);
- console.log(`setInterface = ${ret}`);
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 | 是 | 用于確定總線號(hào)和設(shè)備地址。 |
返回值:
類型 | 說明 |
---|---|
Uint8Array | 返回獲取的原始數(shù)據(jù);失敗返回undefined。 |
示例:
- let ret = usb.getRawDescriptor(devicepipe);
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 | 是 | 用于確定總線號(hào)和設(shè)備地址。 |
返回值:
類型 | 說明 |
---|---|
number | 返回設(shè)備對(duì)應(yīng)的文件描述符;失敗返回-1。 |
示例:
- let ret = usb.getFileDescriptor(devicepipe);
controlTransfer(pipe: USBDevicePipe, controlparam: USBControlParams, timeout ?: number): Promise<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 | 是 | 用于確定設(shè)備。 | |
controlparam | 是 | 控制傳輸參數(shù)。 | |
timeout | number | 否 | 超時(shí)時(shí)間(單位:ms),可選參數(shù),默認(rèn)為0不超時(shí)。 |
返回值:
類型 | 說明 |
---|---|
Promise<number> | Promise對(duì)象,獲取傳輸或接收到的數(shù)據(jù)塊大小。失敗返回-1。 |
示例:
- let param = {
- request: 0,
- reqType: 0,
- target:0,
- value: 0,
- index: 0,
- data: null
- };
- usb.controlTransfer(devicepipe, param).then((ret) => {
- console.log(`controlTransfer = ${ret}`);
- })
bulkTransfer(pipe: USBDevicePipe, endpoint: USBEndpoint, buffer: Uint8Array, timeout ?: number): Promise<number>
批量傳輸。
需要調(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 | 是 | 用于確定設(shè)備。 | |
endpoint | 是 | 用于確定傳輸?shù)亩丝凇?/p> | |
buffer | Uint8Array | 是 | 用于寫入或讀取的緩沖區(qū)。 |
timeout | number | 否 | 超時(shí)時(shí)間(單位:ms),可選參數(shù),默認(rèn)為0不超時(shí)。 |
返回值:
類型 | 說明 |
---|---|
Promise<number> | Promise對(duì)象,獲取傳輸或接收到的數(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 = ${ret}`);
- });
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 | 是 | 用于確定USB設(shè)備消息控制通道。 |
返回值:
類型 | 說明 |
---|---|
number | 關(guān)閉設(shè)備消息控制通道成功返回0;關(guān)閉設(shè)備消息控制通道失敗返回其他錯(cuò)誤碼。 |
示例:
- let ret = usb.closePipe(devicepipe);
- console.log(`closePipe = ${ret}`);
通過USB發(fā)送和接收數(shù)據(jù)的端口。通過USBInterface獲取。
系統(tǒng)能力: SystemCapability.USB.USBManager
名稱 | 類型 | 必填 | 說明 |
---|---|---|---|
address | number | 是 | 端點(diǎn)地址。 |
attributes | number | 是 | 端點(diǎn)屬性。 |
interval | number | 是 | 端點(diǎn)間隔。 |
maxPacketSize | number | 是 | 端點(diǎn)最大數(shù)據(jù)包大小。 |
direction | 是 | 端點(diǎn)的方向。 | |
number | number | 是 | 端點(diǎn)號(hào)。 |
type | number | 是 | 端點(diǎn)類型。 |
interfaceId | number | 是 | 端點(diǎn)所屬的接口的唯一標(biāo)識(shí)。 |
一個(gè)USBConfiguration中可以含有多個(gè)USBInterface,每個(gè)USBInterface提供一個(gè)功能。
系統(tǒng)能力: SystemCapability.USB.USBManager
名稱 | 類型 | 必填 | 說明 |
---|---|---|---|
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)。 |
USB配置,一個(gè)USBDevice中可以含有多個(gè)配置。
系統(tǒng)能力: SystemCapability.USB.USBManager
名稱 | 類型 | 必填 | 說明 |
---|---|---|---|
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> | 是 | 配置支持的接口屬性。 |
USB設(shè)備信息。
系統(tǒng)能力: SystemCapability.USB.USBManager
名稱 | 類型 | 必填 | 說明 |
---|---|---|---|
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<USBConfiguration> | 是 | 設(shè)備配置描述符信息。 |
USB設(shè)備消息傳輸通道,用于確定設(shè)備。
系統(tǒng)能力: SystemCapability.USB.USBManager
名稱 | 類型 | 必填 | 說明 |
---|---|---|---|
busNum | number | 是 | 總線地址。 |
devAddress | number | 是 | 設(shè)備地址。 |
控制傳輸參數(shù)。
系統(tǒng)能力: SystemCapability.USB.USBManager
名稱 | 類型 | 必填 | 說明 |
---|---|---|---|
request | number | 是 | 請(qǐng)求類型。 |
target | 是 | 請(qǐng)求目標(biāo)類型。 | |
reqType | 是 | 請(qǐng)求控制類型。 | |
value | number | 是 | 請(qǐng)求參數(shù)。 |
index | number | 是 | 請(qǐng)求參數(shù)value對(duì)應(yīng)的索引值。 |
data | Uint8Array | 是 | 用于寫入或讀取的緩沖區(qū)。 |
請(qǐng)求目標(biāo)類型。
系統(tǒng)能力: SystemCapability.USB.USBManager
名稱 | 值 | 說明 |
---|---|---|
USB_REQUEST_TARGET_DEVICE | 0 | 設(shè)備。 |
USB_REQUEST_TARGET_INTERFACE | 1 | 接口。 |
USB_REQUEST_TARGET_ENDPOINT | 2 | 端點(diǎn)。 |
USB_REQUEST_TARGET_OTHER | 3 | 其他。 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: