鸿蒙开发设备管理:【@ohos.usb (USB管理)】

USB管理

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

说明:

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

导入模块

import usb from "@ohos.usb";

usb.getDevices

getDevices(): Array<Readonly>

获取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

打开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厂商。

USBRequestDirection

请求方向。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaScript脚本宇宙】优化你的Web色彩:精选JavaScript颜色工具对比

万能色彩助手&#xff1a;详解最受欢迎的JavaScript颜色库 前言 在现代Web开发中&#xff0c;颜色处理和转换是一个不可忽视的环节。无论是网站设计、数据可视化还是用户界面开发&#xff0c;都离不开对颜色的精确控制和转换。为了满足这一需求&#xff0c;众多JavaScript库应…

Toocaa Studio已开发的功能

2024年07月01日 Toocaa Studio 一个激光切割雕刻机的上位机&#xff0c; 未来会对标Xtool的xTool Creative Space和LightBurn&#xff0c;同时它也是一款图形编辑器&#xff0c;矢量图形编辑器。 工具类 鼠标画矩形或正方形 鼠标画椭圆或画圆 鼠标画直线或轨迹路径 往画布中…

你的机器人购物新体验——安全、高效、无忧

如果你跟我一样&#xff0c;对找到那些“恰到好处”的商品充满渴望&#xff0c;那么&#xff0c;让我来告诉你为什么BFT会成为你的下一个购物“心头好”。 BFT的优势 高效安全的支付体系&#xff1a;BFT交易系统保障了交易的安全性和透明性&#xff0c;让你的每一笔消费都安全…

Build a Large Language Model (From Scratch)附录B(gpt-4o翻译版)

来源&#xff1a;https://github.com/rasbt/LLMs-from-scratch?tabreadme-ov-file https://www.manning.com/books/build-a-large-language-model-from-scratch

《More Effective C++》《杂项讨论——34、如何在同一个程序中结合C++和C》

文章目录 1、Terms34:如何在同一个程序中结合C和C1.1 名称重整1.2 statics的初始化1.3 动态内存的分配1.4 数据结构的兼容性 2、总结3、参考 1、Terms34:如何在同一个程序中结合C和C 在大型项目中一般都用C进行开发&#xff0c;但是不可避免会用一些C语言进行底层的调用。在确…

【宠粉赠书】UML 2.5基础、建模与设计实践

为了回馈粉丝们的厚爱&#xff0c;今天小智给大家送上一套系统建模学习的必备书籍——《UML 2.5基础、建模与设计实践》。下面我会详细给大家介绍这本书&#xff0c;文末留有领取方式。 图书介绍 《UML 2.5基础、建模与设计实践》以实战为主旨&#xff0c;结合draw.io免费软件…

匿名内部类

下面代码中&#xff0c;Person24 是一个抽象类&#xff0c;这意味着它不能被直接实例化&#xff0c;只能通过继承它的子类来实现其抽象方法。代码片段中展示了如何使用匿名内部类来实现一个抽象类的实例。 package chapter04;public class Java24_Object_匿名内部类 {public s…

verilog行为建模(三):块语句

目录 1.块语句2.延迟赋值语句 微信公众号获取更多FPGA相关源码&#xff1a; 1.块语句 块语句用来将多个语句组织在一起&#xff0c;使得他们在语法上如同一个语句。 块语句分为两类&#xff1a; 顺序块&#xff1a;语句置于关键字begin和end之间&#xff0c;块中的语句以顺…

鸿蒙‘ohpm‘ 不是内部或外部命令,也不是可运行的程序-解决方案

&#x1f525; 博客主页&#xff1a; 小韩本韩&#xff01; ❤️ 感谢大家点赞&#x1f44d;收藏⭐评论✍️ 在鸿蒙的DevEco Studio的终端下输入 onpm -v 或者 你需要下载第三方ohpm包的时候提示‘ohpm‘ 不是内部或外部命令&#xff0c;也不是可运行的程序- 主要是因为我们…

学习测试1

计算机基础 1、计算机范式&#xff1a;冯诺依曼机 2、存储单元 bit、byte、KB、MB、GB3、网络 ip、域名、ping 域名、 ipconfig测试工作的流程 ------------------------------------------------------------------------------------------- 一 编写测试大纲 罗列测试…

C++STL函数对象的应用

STL函数对象 文章目录 STL函数对象1.基本概念2.使用方法1. 简单函数对象示例2. 函数对象作为算法参数3. Lambda表达式作为函数对象 2.一元谓词和二元谓词1.一元谓词2.二元谓词3.总结 3.算术仿函数1.使用示例2.Lambda表达式的替代 4.关系仿函数5.逻辑仿函数 C中的函数对象&#…

文化创新与社交媒体:探索Facebook的足迹

在过去的十多年里&#xff0c;Facebook从一个简单的校园社交网络发展成为全球最大的社交媒体平台之一。它不仅改变了人们的沟通方式&#xff0c;更在许多方面推动了文化的创新和变革。本文将深入探索Facebook如何通过其平台的演进和功能创新&#xff0c;成为文化创新的重要推动…

Ubuntu / Debian安装FTP服务

本章教程,记录在Ubuntu中安装FTP服务的具体步骤。FTP默认端口:21 1、安装 pure-ftpd sudo apt-get install pure-ftpd2、修改默认配置 # 与 centos 不同,这里需要在 /etc/pure-ftpd/conf 文件夹下执行下列命令,增加对应配置文件: # 创建 /etc/pure-ftpd/conf/PureDB 文件…

【数据结构】(6.2)堆的应用——Top-K问题(C语言)

系列文章目录 文章目录 系列文章目录问题引入一、TopK 问题 是什么&#xff1f;二、TopK 问题解决思路2.1 TopK 思路2.2 随机产生数字2.2 完整代码2.3 验证结果 问题引入 TopK 问题 (在一堆数据里面找到前 K 个最大 / 最小的数)。 一、TopK 问题 是什么&#xff1f; 生活中也…

2024 最新docker仓库镜像,6月,7月

目前下面的docker仓库镜像源还能使用。 vi /etc/docker/daemon.json添加如下配置{"registry-mirrors": ["https://hub.uuuadc.top", "https://docker.anyhub.us.kg", "https://dockerhub.jobcher.com", "https://dockerhub.icu&…

船舶雷达与导航系统选择7/8防水插座的原因分析

概述 船舶雷达与导航系统在现代航海中扮演着至关重要的角色&#xff0c;它们为船舶提供准确的导航信息&#xff0c;确保航行的安全和效率。在这些系统中&#xff0c;7/8防水插座的使用尤为重要&#xff0c;因为它们能够在恶劣的海上环境中提供稳定的电力和信号连接。接下来&am…

python的os.walk()

os.walk() 是一个非常有用的函数&#xff0c;用于在Python中遍历文件夹树。它返回一个生成器&#xff0c;该生成器在每次迭代时返回一个包含三个元素的元组&#xff1a;(当前文件夹的路径&#xff0c;文件夹中的子文件夹的列表&#xff0c;文件夹中的文件的列表)。这个函数对于…

左耳听风_007_06_如何才能拥有技术领导力

你好&#xff0c;我是陈浩老明左耳朵house.那通过上节课呢&#xff0c;相信你现在已经理解了什么才是技术领导力。 那今天呢我就来跟你继续聊一聊怎样才能拥有技术领导力。 首先呢你需要吃透基础技术。 因为基础技术啊是各种上层技术共同的技术。 吃透基础技术是为了更好的…

Outlook发送大文件的问题是什么?怎么解决?

Outlook不仅是一款电子邮件客户端&#xff0c;还包括日历、任务、笔记、联系人等功能&#xff0c;同时与Microsoft Office套件中的其他应用程序&#xff08;如Word、Excel、PowerPoint等&#xff09;集成紧密&#xff0c;方便用户在不同应用程序之间切换&#xff0c;提高工作效…

LLM - 神经网络的组成

1. 一个神经元的结构&#xff1a;即接受多个输入X向量&#xff0c;在一个权重向量W和一个偏执标量b的作用下&#xff0c;经过激活函数后&#xff0c;产生一个输出。 2. 一层神经网络的结构&#xff1a;该层网络里的每个神经元并行计算&#xff0c;得到各自的输出;计算方式是输入…