harmony 鸿蒙@ohos.usbV9 (USB管理)

2022-08-09 浏览 (1002)

@ohos.usbV9 (USB管理)

本模块主要提供管理USB设备的相关功能,包括主设备上查询USB设备列表、批量数据传输、控制命令传输、权限控制等;从设备上端口管理、功能切换及查询等。

说明:

本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

从API version 9开始,该接口不再维护,推荐使用新接口@ohos.usbManager

导入模块

import usb from "@ohos.usbV9";

usb.getDevices

getDevices(): Array<Readonly<USBDevice>>

获取接入主设备的USB设备列表。如果没有设备接入,那么将会返回一个空的列表。

系统能力: SystemCapability.USB.USBManager

返回值:

类型说明
Array<Readonly<USBDevice>>设备信息列表。

示例:

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<USBDevicePipe>

根据getDevices()返回的设备信息打开USB设备。

需要调用usb.getDevices获取设备信息以及device,再调用usb.requestRight请求使用该设备的权限。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
deviceUSBDeviceUSB设备信息。

返回值:

类型说明
Readonly<USBDevicePipe>指定的传输通道对象。

错误码:

以下错误码的详细介绍参见USB错误码

错误码ID错误信息
14400001Permission denied. Need call requestRight to get permission.

示例:

let devicesList = usb.getDevices();
if (devicesList.length == 0) {
  console.log(`device list is empty`);
  return;
}

let device = devicesList[0];
usb.requestRight(device.name);
let devicepipe = usb.connectDevice(device);
console.log(`devicepipe = ${JSON.stringify(devicepipe)}`);

usb.hasRight

hasRight(deviceName: string): boolean

判断是否有权访问该设备。

如果“使用者”(如各种App或系统)有权访问设备则返回true;无权访问设备则返回false。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
deviceNamestring设备名称。

返回值:

类型说明
booleantrue表示有访问设备的权限,false表示没有访问设备的权限。

示例:

let devicesName="1-1";
let bool = usb.hasRight(devicesName);
console.log(bool);

usb.requestRight

requestRight(deviceName: string): Promise<boolean>

请求软件包的临时权限以访问设备。使用Promise异步回调。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
deviceNamestring设备名称。

返回值:

类型说明
Promise<boolean>Promise对象,返回临时权限的申请结果。返回true表示临时权限申请成功;返回false则表示临时权限申请失败。

示例:

let devicesName="1-1";
usb.requestRight(devicesName).then((ret) => {
  console.log(`requestRight = ${JSON.stringify(ret)}`);
});

usb.removeRight

removeRight(deviceName: string): boolean

移除软件包访问设备的权限。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
deviceNamestring设备名称。

返回值:

类型说明
boolean返回权限移除结果。返回true表示权限移除成功;返回false则表示权限移除失败。

示例:

let devicesName="1-1";
if (usb.removeRight(devicesName) {
  console.log(`Succeed in removing right`);
}

usb.addRight

addRight(bundleName: string, deviceName: string): boolean

添加软件包访问设备的权限。

requestRight会触发弹框请求用户授权;addRight不会触发弹框,而是直接添加软件包访问设备的权限。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
deviceNamestring设备名称。
bundleNamestring软件包名称。

返回值:

类型说明
boolean返回权限添加结果。返回true表示权限添加成功;返回false则表示权限添加失败。

示例:

let devicesName = "1-1";
let bundleName = "com.example.hello";
if (usb.addRight(bundleName, devicesName) {
  console.log(`Succeed in adding right`);
}

usb.claimInterface

claimInterface(pipe: USBDevicePipe, iface: USBInterface, force ?: boolean): number

注册通信接口。

需要调用usb.getDevices获取设备信息以及interfaces;调用usb.requestRight获取设备请求权限;调用usb.connectDevice接口得到devicepipe作为参数。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
pipeUSBDevicePipe用于确定总线号和设备地址。
ifaceUSBInterface用于确定需要获取接口的索引。
forceboolean可选参数,是否强制获取。默认值为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

参数:

参数名类型必填说明
pipeUSBDevicePipe用于确定总线号和设备地址。
ifaceUSBInterface用于确定需要释放接口的索引。

返回值:

类型说明
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

参数:

参数名类型必填说明
pipeUSBDevicePipe用于确定总线号和设备地址。
configUSBConfig用于确定需要设置的配置。

返回值:

类型说明
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

参数:

参数名类型必填说明
pipeUSBDevicePipe用于确定总线号和设备地址。
ifaceUSBInterface用于确定需要设置的接口。

返回值:

类型说明
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

参数:

参数名类型必填说明
pipeUSBDevicePipe用于确定总线号和设备地址。

返回值:

类型说明
Uint8Array返回获取的原始数据;失败返回undefined。

示例:

let ret = usb.getRawDescriptor(devicepipe);

usb.getFileDescriptor

getFileDescriptor(pipe: USBDevicePipe): number

获取文件描述符。

需要调用usb.getDevices获取设备列表;调用usb.requestRight获取设备请求权限;调用usb.connectDevice接口得到devicepipe作为参数。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
pipeUSBDevicePipe用于确定总线号和设备地址。

返回值:

类型说明
number返回设备对应的文件描述符;失败返回-1。

示例:

let ret = usb.getFileDescriptor(devicepipe);

usb.controlTransfer

controlTransfer(pipe: USBDevicePipe, controlparam: USBControlParams, timeout ?: number): Promise<number>

控制传输。

需要调用usb.getDevices获取设备列表;调用usb.requestRight获取设备请求权限;调用usb.connectDevice接口得到devicepipe作为参数。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
pipeUSBDevicePipe用于确定设备。
controlparamUSBControlParams控制传输参数。
timeoutnumber超时时间(单位:ms),可选参数,默认为0不超时。

返回值:

类型说明
Promise<number>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<number>

批量传输。

需要调用usb.getDevices获取设备信息列表以及endpoint;再调用usb.requestRight获取设备请求权限;然后调用usb.connectDevice接口得到返回数据devicepipe之后,再次获取接口usb.claimInterface;再调用usb.bulkTransfer接口。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
pipeUSBDevicePipe用于确定设备。
endpointUSBEndpoint用于确定传输的端口。
bufferUint8Array用于写入或读取的缓冲区。
timeoutnumber超时时间(单位:ms),可选参数,默认为0不超时。

返回值:

类型说明
Promise<number>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

参数:

参数名类型必填说明
pipeUSBDevicePipe用于确定USB设备消息控制通道。

返回值:

类型说明
number关闭设备消息控制通道成功返回0;关闭设备消息控制通道失败返回其他错误码。

示例:

let ret = usb.closePipe(devicepipe);
console.log(`closePipe = ${ret}`);

usb.usbFunctionsFromString

usbFunctionsFromString(funcs: string): number

在设备模式下,将字符串形式的USB功能列表转化为数字掩码。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
funcsstring字符串形式的功能列表。

返回值:

类型说明
number转化后的数字掩码。

示例:

let funcs = "acm";
let ret = usb.usbFunctionsFromString(funcs);

usb.usbFunctionsToString

usbFunctionsToString(funcs: FunctionType): string

在设备模式下,将数字掩码形式的USB功能列表转化为字符串。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
funcsFunctionTypeUSB功能数字掩码。

返回值:

类型说明
string转化后的字符串形式的功能列表。

示例:

let funcs = ACM|ECM;
let ret = usb.usbFunctionsToString(funcs);

usb.setCurrentFunctions

setCurrentFunctions(funcs: FunctionType): Promise<void>

在设备模式下,设置当前的USB功能列表。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
funcsFunctionTypeUSB功能数字掩码。

返回值:

类型说明
Promise<void>Promise对象。

示例:

let funcs = HDC;
usb.setCurrentFunctions(funcs).then(() => {
    console.info('usb setCurrentFunctions successfully.');
}).catch(err => {
    console.error('usb setCurrentFunctions failed: ' + err.code + ' message: ' + err.message);
});

usb.getCurrentFunctions

getCurrentFunctions(): FunctionType

在设备模式下,获取当前的USB功能列表的数字组合掩码。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

返回值:

类型说明
FunctionType当前的USB功能列表的数字组合掩码。

示例:

let ret = usb.getCurrentFunctions();

usb.getPorts

getPorts(): Array<USBPort>

获取所有物理USB端口描述信息。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

返回值:

类型说明
Array<USBPort>USB端口描述信息列表。

示例:

let ret = usb.getPorts();

usb.getSupportedModes

getSupportedModes(portId: number): PortModeType

获取指定的端口支持的模式列表的组合掩码。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
portIdnumber端口号。

返回值:

类型说明
PortModeType支持的模式列表的组合掩码。

示例:

let ret = usb.getSupportedModes(0);

usb.setPortRoles

setPortRoles(portId: number, powerRole: PowerRoleType, dataRole: DataRoleType): Promise<void>

设置指定的端口支持的角色模式,包含充电角色、数据传输角色。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

参数:

参数名类型必填说明
portIdnumber端口号。
powerRolePowerRoleType充电的角色。
dataRoleDataRoleType数据传输的角色。

返回值:

类型说明
Promise<void>Promise对象。

示例:

let portId = 1;
usb.usb.setPortRoles(portId, usb.PowerRoleType.SOURCE, usb.DataRoleType.HOST).then(() => {
    console.info('usb setPortRoles successfully.');
}).catch(err => {
    console.error('usb setPortRoles failed: ' + err.code + ' message: ' + err.message);
});

USBEndpoint

通过USB发送和接收数据的端口。通过USBInterface获取。

系统能力: SystemCapability.USB.USBManager

名称类型必填说明
addressnumber端点地址。
attributesnumber端点属性。
intervalnumber端点间隔。
maxPacketSizenumber端点最大数据包大小。
directionUSBRequestDirection端点的方向。
numbernumber端点号。
typenumber端点类型。
interfaceIdnumber端点所属的接口的唯一标识。

USBInterface

一个USBConfig中可以含有多个USBInterface,每个USBInterface提供一个功能。

系统能力: SystemCapability.USB.USBManager

名称类型必填说明
idnumber接口的唯一标识。
protocolnumber接口的协议。
clazznumber设备类型。
subClassnumber设备子类。
alternateSettingnumber在同一个接口中的多个描述符中进行切换设置。
namestring接口名称。
endpointsArray<USBEndpoint>当前接口所包含的端点。

USBConfig

USB配置,一个USBDevice中可以含有多个配置。

系统能力: SystemCapability.USB.USBManager

名称类型必填说明
idnumber配置的唯一标识。
attributesnumber配置的属性。
maxPowernumber最大功耗,以毫安为单位。
namestring配置的名称,可以为空。
isRemoteWakeupboolean检查当前配置是否支持远程唤醒。
isSelfPoweredboolean检查当前配置是否支持独立电源。
interfacesArray <USBInterface>配置支持的接口属性。

USBDevice

USB设备信息。

系统能力: SystemCapability.USB.USBManager

名称类型必填说明
busNumnumber总线地址。
devAddressnumber设备地址。
serialstring序列号。
namestring设备名字。
manufacturerNamestring产商信息。
productNamestring产品信息。
versionstring版本。
vendorIdnumber厂商ID。
productIdnumber产品ID。
clazznumber设备类。
subClassnumber设备子类。
protocolnumber设备协议码。
configsArray<USBConfig>设备配置描述符信息。

USBDevicePipe

USB设备消息传输通道,用于确定设备。

系统能力: SystemCapability.USB.USBManager

名称类型必填说明
busNumnumber总线地址。
devAddressnumber设备地址。

USBControlParams

控制传输参数。

系统能力: SystemCapability.USB.USBManager

名称类型必填说明
requestnumber请求类型。
targetUSBRequestTargetType请求目标类型。
reqTypeUSBControlRequestType请求控制类型。
valuenumber请求参数。
indexnumber请求参数value对应的索引值。
dataUint8Array用于写入或读取的缓冲区。

USBPort

USB设备端口。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

名称类型必填说明
idnumberUSB端口唯一标识。
supportedModesPortModeTypeUSB端口所支持的模式的数字组合掩码。
statusUSBPortStatusUSB端口角色。

USBPortStatus

USB设备端口角色信息。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

名称类型必填说明
currentModenumber当前的USB模式。
currentPowerRolenumber当前设备充电模式。
currentDataRolenumber当前设备数据传输模式。

USBRequestTargetType

请求目标类型。

系统能力: SystemCapability.USB.USBManager

名称说明
USB_REQUEST_TARGET_DEVICE0设备。
USB_REQUEST_TARGET_INTERFACE1接口。
USB_REQUEST_TARGET_ENDPOINT2端点。
USB_REQUEST_TARGET_OTHER3其他。

USBControlRequestType

控制请求类型。

系统能力: SystemCapability.USB.USBManager

名称说明
USB_REQUEST_TYPE_STANDARD0标准。
USB_REQUEST_TYPE_CLASS1类。
USB_REQUEST_TYPE_VENDOR2厂商。

USBRequestDirection

请求方向。

系统能力: SystemCapability.USB.USBManager

名称说明
USB_REQUEST_DIR_TO_DEVICE0写数据,主设备往从设备。
USB_REQUEST_DIR_FROM_DEVICE0x80读数据,从设备往主设备。

FunctionType

USB设备侧功能。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

名称说明
NONE0没有功能。
ACM1acm功能。
ECM2ecm功能。
HDC4hdc功能。
MTP8暂不支持。
PTP16暂不支持。
RNDIS32暂不支持。
MIDI64暂不支持。
AUDIO_SOURCE128暂不支持。
NCM256暂不支持。

PortModeType

USB端口模式类型。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

名称说明
NONE0无。
UFP1数据上行,需要外部供电。
DFP2数据下行,对外提供电源。
DRP3既可以做DFP(Host),也可以做UFP(Device),当前不支持。
NUM_MODES4当前不支持。

PowerRoleType

电源角色类型。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

名称说明
NONE0无。
SOURCE1外部供电。
SINK2内部供电。

DataRoleType

数据角色类型。

系统接口: 此接口为系统接口。

系统能力: SystemCapability.USB.USBManager

名称说明
NONE0无。
HOST1主设备角色。
DEVICE2从设备角色。

你可能感兴趣的鸿蒙文章

harmony 鸿蒙接口

harmony 鸿蒙系统公共事件定义

harmony 鸿蒙系统公共事件定义

harmony 鸿蒙开发说明

harmony 鸿蒙BundleStatusCallback

harmony 鸿蒙@ohos.bundle.innerBundleManager (innerBundleManager模块)

harmony 鸿蒙@ohos.distributedBundle (分布式包管理)

harmony 鸿蒙@ohos.bundle (Bundle模块)

harmony 鸿蒙@ohos.enterprise.EnterpriseAdminExtensionAbility (EnterpriseAdminExtensionAbility)

harmony 鸿蒙@ohos.WorkSchedulerExtensionAbility (延迟任务调度回调)

  • 所属分类: 后端技术
  • 本文标签: 软件 鸿蒙
  • 版权声明: 本文链接 https://seaxiang.com/blog/86c1ad9c742e47c99d88652d030b9486