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

    文章

    8265

    浏览量

    274880
  • 鸿蒙
    +关注

    关注

    60

    文章

    2656

    浏览量

    44355
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    K230设备管理器里面没有COM是怎么回事?

    我的K230连接电脑后,设备管理器里面没有新的USB串行设备(COMx),电脑也没有弹出CanMV设备,我看设备管理器里面只有一个“其他
    发表于 08-04 08:04

    3014 USB驱动程序无法检测到USB设备是怎么回事?

    计数会少于 1,但是 Windows 计算机的设备管理已经找到该USB设备,导致我们无法下载固件到USB 3014。
    发表于 05-09 06:11

    设备管理系统的功能架构与核心价值

    设备管理系统作为现代企业资产管理的重要组成部分,通过信息化手段实现对各类设备的全生命周期管理。该系统整合物联网、大数据分析等技术,构建起覆盖设备
    的头像 发表于 05-06 15:46 ?361次阅读

    设备管理系统新范式:区块链存证+动态权限管理

    企业面对数字化转型挑战,设备管理面临安全与灵活性问题。传统设备管理方案漏洞频出,数据易遭篡改,权限管理僵化。企业需构建区块链存证+动态权限管理方案,提升
    的头像 发表于 03-13 10:41 ?599次阅读
    <b class='flag-5'>设备管理</b>系统新范式:区块链存证+动态权限<b class='flag-5'>管理</b>

    设备管理系统,终结设备管理难题

    设备管理系统已突破传统工具定位,进化为企业资产管理的数字神经中枢。通过"物联感知-智能分析-决策优化"的闭环体系,实现设备管理从被动响应到主动预防、从经验驱动到数据驱动的根本转变。
    的头像 发表于 03-04 10:51 ?579次阅读
    <b class='flag-5'>设备管理</b>系统,终结<b class='flag-5'>设备管理</b>难题

    物联网 + 设备管理,让管理触手可及

    物联网技术快速发展,设备管理面临三大挑战:分散、数据孤岛、安全隐患。中设智控采用分层架构和智能维护模式,提高设备管理效率和安全性。物联网设备管理“三板斧”包括分布式管理、智能维护和数据
    的头像 发表于 02-28 10:08 ?802次阅读
    物联网 + <b class='flag-5'>设备管理</b>,让<b class='flag-5'>管理</b>触手可及

    传统 VS 智能,这款设备管理系统让管理大不同

    本文探讨了传统设备管理与智能设备管理的对比及中设智控的实践案例,揭示了设备管理系统的未来图景。智能设备管理通过实时监控与预测性维护、全生命周期闭环
    的头像 发表于 02-26 10:56 ?532次阅读
    传统 VS 智能,这款<b class='flag-5'>设备管理</b>系统让<b class='flag-5'>管理</b>大不同

    数字化领航:打造设备管理新生态

    本文深入剖析了数字化设备管理系统的进化逻辑与实践路径,提出传统设备管理的三重困局和数字化重构的三个核心能力升级。
    的头像 发表于 02-20 10:24 ?510次阅读
    数字化领航:打造<b class='flag-5'>设备管理</b>新生态

    设备管理体系实施指南

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

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

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

    基于物联网的设备管理

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

    设备管理流程优化的优势

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

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

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

    企业设备管理的创新与优化之道

    企业设备管理在提高生产效率、保证产品质量、降低运营成本方面发挥着关键作用。设备管理常见挑战包括设备老化、维修困难。企业应优化设备选型、采购规划和维护策略,以提高
    的头像 发表于 08-27 10:06 ?747次阅读
    企业<b class='flag-5'>设备管理</b>的创新与优化之道

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

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