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

    文章

    8480

    浏览量

    286057
  • 鸿蒙
    +关注

    关注

    60

    文章

    3031

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LTC4410 USB 电源管理器:高效电源管理解决方案

    LTC4410 USB 电源管理器:高效电源管理解决方案 在当今的便携式电子设备领域,高效且可靠的电源管理至关重要。Linear Techn
    的头像 发表于 02-10 11:05 472次阅读

    2025开放原子开发者大会开源算力设备管理软件分论坛即将启幕

    数字浪潮,奔涌向前。算力设备的智能化管理与开源技术的深度融合,正成为驱动行业变革的核心引擎。作为开源算力设备管理领域的新锐力量,openUBMC致力于通过开源模式,打造开放、易用的管理软件开发
    的头像 发表于 11-17 16:33 1037次阅读

    触觉智能RK3576开发板OpenHarmony开源鸿蒙系统USB控制传输功能示例

    OpenHarmony开源鸿蒙设备与外部USB设备之间的连接管理、数据收发及设备信息交互,支持对
    的头像 发表于 09-30 16:31 1838次阅读
    触觉智能RK3576<b class='flag-5'>开发</b>板OpenHarmony开源<b class='flag-5'>鸿蒙</b>系统<b class='flag-5'>USB</b>控制传输功能示例

    不止 IoT 联网:设备管理系统现在还能做这些事

    当下市场竞争激烈,提升设备管理水平是企业降本增效的关键。引入先进设备管理系统,不仅能减少故障损失、提高产效与质量,更能为数字化转型、可持续发展奠基。若企业正面临设备故障多、停机久、管理
    的头像 发表于 09-03 14:08 791次阅读
    不止 IoT 联网:<b class='flag-5'>设备管理</b>系统现在还能做这些事

    别让设备 “拖后腿”!这款设备管理系统,帮制造企业省心又增效

    现在越来越多制造企业都在靠设备管理系统 “提效降本”,毕竟在竞争越来越激烈的市场里,谁能把设备管得好、用得好,谁就能占得先机。 如果你家车间还在为设备管理头疼,不妨试试设备管理系统
    的头像 发表于 09-01 09:58 677次阅读
    别让<b class='flag-5'>设备</b> “拖后腿”!这款<b class='flag-5'>设备管理</b>系统,帮制造企业省心又增效

    用勤哲Excel服务器自主开发软件促进设备管理工作数字化

    和信息的处理交给计算机软件系统,设备管理部经过长期的摸索、试用,自主开发了一套设备管理软件系统。本篇论文介绍了设备管理软件开发中的难点问题,设备管理
    的头像 发表于 08-28 11:23 1197次阅读

    重构工业设备管理新范式:解析设备远程运维管理系统的变革逻辑

    设备管理的时空限制,实现了从 “被动维修” 到 “主动预防”、从 “经验判断” 到 “数据决策” 的转型,成为提升工业设备综合效率、降低运维成本的核心支撑。其在工业领域的深度应用,正重塑设备管理的全流程,为离散制造、流程工
    的头像 发表于 08-20 16:58 1064次阅读

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

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

    k230弹出windows资源管理器无法识别usb设备怎么解决?

    k230弹出windows资源管理器无法识别该usb设备
    发表于 07-31 08:28

    工业设备管理平物联网台有哪些内容

    工业设备管理平台是针对工业企业设备全生命周期管理需求开发的数字化系统,通过整合设备数据、流程管理
    的头像 发表于 07-04 16:09 863次阅读

    使用CYUSB3014作为USB3.0数据传输方案,USB3.0无法识别是什么原因?

    从I2C ROM加载固件后,在Windows设备管理器中可以看到对应的FX3设备,如下图 但是此时cypress control center中无法识别到USB接口,如下图。自开发
    发表于 05-29 06:48

    CYUSBS234无法使用USB串口怎么解决?

    串行 DK 设置。 然后,我的电脑上的设备管理中没有 com 端口。 此外,设备管理中没有 CypressUsbConsoleWindowsDriver。 我的操作系统是 Windows 11。 我需要找到解决这个问题的方法。
    发表于 05-16 07:27

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

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

    在USBBulkSourceSink示例中,FX3强制全速并在设备管理器上显示黄色感叹号,怎么解决?

    设备管理器中看到,但带有黄色标记。 并且USBtreeview可以找出问题:10(CM_PROB_FAILED_START)。 SDK 版本 1.3.3 和 1.3.5 也会发生同样的情况。 另外,如果你
    发表于 05-09 06:09

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

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