0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙开发设备管理:ohos.usb USB管理

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-07-05 17:34 次阅读

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

参数:

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

返回值:

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

示例:

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

usb.requestRight

requestRight(deviceName: string): Promise

请求软件包的临时权限以访问设备。

系统能力: SystemCapability.USB.USBManager

参数:

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

返回值:

类型说明
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]用于确定需要获取接口的索引
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

参数:

参数名类型必填说明
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]控制传输参数。
timeoutnumber超时时间,可选参数,默认为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]用于确定传输的端口
bufferUint8Array用于写入或读取的缓冲区。
timeoutnumber超时时间,可选参数,默认为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。

名称参数类型说明
addressnumber端点地址。
attributesnumber端点属性。
intervalnumber端点间隔。
maxPacketSizenumber端点最大数据包大小。
direction[USBRequestDirection]端点的方向。
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请求类型。
target[USBRequestTargetType]请求目标类型。
reqType[USBControlRequestType]请求控制类型。
valuenumber请求参数。
indexnumber请求参数value对应的索引值。
dataUint8Array用于写入或读取的缓冲区。

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厂商。HarmonyOSOpenHarmony鸿蒙文档籽料:mau123789是v直接拿

搜狗高速浏览器截图20240326151450.png

USBRequestDirection

请求方向。

系统能力 :以下各项对应的系统能力均为 SystemCapability.USB.USBManager。

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

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    60

    文章

    7936

    浏览量

    264453
  • 鸿蒙
    +关注

    关注

    57

    文章

    2339

    浏览量

    42804
收藏 人收藏

    评论

    相关推荐

    设备管理体系实施指南

    设备管理体系在保障生产运营基石、搭建交流学习平台以及助力打造标杆典范等方面具有重要意义。组织应全面实施设备管理体系,提高设备管理效率和效果。
    的头像 发表于 12-18 10:38 87次阅读
    <b class='flag-5'>设备管理</b>体系实施指南

    TSW14J56EVM无论是上电后,还是上电前将usb线与电脑连接,设备管理器都无法找到该设备,为什么?

    TSW14J56EVM无论是上电后,还是上电前将usb线与电脑连接,设备管理器都无法找到该设备,打开HSDC软件显示没有设备。但是换成新采购的同样的
    发表于 12-13 06:42

    基于物联网的设备管理

    物联网设备管理的重要性日益凸显,设备数量激增带来数据泄露风险。加强设备安全性、软件升级与修复、身份验证和互操作性是关键。物联网设备管理需要跨异构设备
    的头像 发表于 09-10 11:04 635次阅读
    基于物联网的<b class='flag-5'>设备管理</b>

    设备管理流程优化的优势

    设备管理对企业生产效率、产品质量、成本控制和安全生产起着关键作用。但设备管理面临挑战,如种类繁多、数量庞大、位置分散等。因此,企业应采用科学的设备管理方法,建立设备管理系统,跟踪
    的头像 发表于 09-05 10:34 321次阅读
    <b class='flag-5'>设备管理</b>流程优化的优势

    设备管理——先进的工业设备管理模式与策略

    设备老化、故障率高、零部件供应不及时等问题中,先进的设备管理模式与策略被广泛应用。化工企业在设备管理方面采取优化措施,提高了维修效率和质量。
    的头像 发表于 08-28 09:36 341次阅读
    <b class='flag-5'>设备管理</b>——先进的工业<b class='flag-5'>设备管理</b>模式与策略

    设备管理:优化策略与未来展望

    设备管理在现代企业中占据着至关重要的地位,对生产效率和产品质量起着决定性作用。然而,当前的设备管理状况仍存在一些问题,如管理理念偏差、维护手段滞后等。
    的头像 发表于 08-23 10:35 293次阅读
    <b class='flag-5'>设备管理</b>:优化策略与未来展望

    设备管理系统:是什么、谁需要、推荐设备管理系统

    设备管理系统(EMS)在企业管理中愈发重要。中设智控设备管理系统以全生命周期管理为主,涵盖预算、采购、维护等功能,支持移动端应用,降低备件储备,提高
    的头像 发表于 08-01 11:23 784次阅读
    <b class='flag-5'>设备管理</b>系统:是什么、谁需要、推荐<b class='flag-5'>设备管理</b>系统

    鸿蒙开发设备管理ohos.thermal 热管理

    该模块提供热管理相关的接口,包括热档位查询及注册回调等功能。
    的头像 发表于 07-05 09:53 343次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b><b class='flag-5'>设备管理</b>:<b class='flag-5'>ohos</b>.thermal 热<b class='flag-5'>管理</b>

    鸿蒙开发设备管理ohos.deviceInfo 设备信息

    面向特定开发者发布的早期预览版本,不承诺API稳定性。 - Beta:面向开发者公开发布的Beta版本,不承诺API稳定性。
    的头像 发表于 07-01 16:33 541次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b><b class='flag-5'>设备管理</b>:<b class='flag-5'>ohos</b>.deviceInfo <b class='flag-5'>设备</b>信息

    鸿蒙开发设备管理ohos.multimodalInput.inputDevice 输入设备

    输入设备管理模块,用于监听输入设备连接、断开和变化,并查看输入设备相关信息。比如监听鼠标插拔,并获取鼠标的id、name和指针移动速度等信息。
    的头像 发表于 07-01 09:19 405次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b><b class='flag-5'>设备管理</b>:<b class='flag-5'>ohos</b>.multimodalInput.inputDevice 输入<b class='flag-5'>设备</b>

    鸿蒙原生应用元服务开发-设备管理USB服务开发概览

    基本概念 USB服务是应用访问底层的一种设备抽象概念。开发者根据提供的USB API,可以获取设备列表、控制
    发表于 06-11 10:26

    鸿蒙原生应用元服务开发-设备管理USB服务开发场景与接口

    场景介绍 Host模式下,可以获取到已经连接的USB设备列表,并根据需要打开和关闭设备、控制设备权限、进行数据传输等。 接口说明 USB服务
    发表于 06-07 14:40

    鸿蒙原生应用元服务开发-设备管理USB服务开发步骤

    开发步骤 USB设备可作为Host设备连接Device设备进行数据传输。开发示例如下: 1.获取
    发表于 06-06 15:50

    鸿蒙开发接口定制管理:【@ohos.enterpriseDeviceManager (企业设备管理)】

    以异步方法根据给定的包名和类名激活设备管理员应用,使用Callback形式返回是否激活成功。
    的头像 发表于 06-05 09:24 543次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>接口定制<b class='flag-5'>管理</b>:【@<b class='flag-5'>ohos</b>.enterpriseDeviceManager (企业<b class='flag-5'>设备管理</b>)】

    FX3无法启动启动,电脑设备管理器不能识别产品

    电脑连接产品,设备管理器和USB Control Center都无法识别产品, 无法进行FX3->SPI flash,产品FX3不能启动与FPGA有关系吗?谢谢。
    发表于 04-15 17:00