1# @ohos.usbManager (USB管理) 2 3本模块主要提供管理USB设备的相关功能,包括主设备上查询USB设备列表、批量数据传输、控制命令传输、权限控制等;从设备上端口管理、功能切换及查询等。 4 5> **说明:** 6> 7> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8 9## 导入模块 10 11```ts 12import { usbManager } from '@kit.BasicServicesKit'; 13``` 14 15## usbManager.getDevices 16 17getDevices(): Array<Readonly<USBDevice>> 18 19获取接入主设备的USB设备列表。如果没有设备接入,那么将会返回一个空的列表。开发者模式关闭时,如果没有设备接入,接口可能返回`undefined`,注意需要对接口返回值做判空处理。 20 21**系统能力:** SystemCapability.USB.USBManager 22 23**返回值:** 24 25| 类型 | 说明 | 26| ---------------------------------------------------- | ------- | 27| Array<Readonly<[USBDevice](#usbdevice)>> | 设备信息列表。 | 28 29**示例:** 30 31```ts 32let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 33console.log(`devicesList = ${devicesList}`); 34/* 35devicesList 返回的数据结构,此处提供一个简单的示例,如下 36[ 37 { 38 name: "1-1", 39 serial: "", 40 manufacturerName: "", 41 productName: "", 42 version: "", 43 vendorId: 7531, 44 productId: 2, 45 clazz: 9, 46 subClass: 0, 47 protocol: 1, 48 devAddress: 1, 49 busNum: 1, 50 configs: [ 51 { 52 id: 1, 53 attributes: 224, 54 isRemoteWakeup: true, 55 isSelfPowered: true, 56 maxPower: 0, 57 name: "1-1", 58 interfaces: [ 59 { 60 id: 0, 61 protocol: 0, 62 clazz: 9, 63 subClass: 0, 64 alternateSetting: 0, 65 name: "1-1", 66 endpoints: [ 67 { 68 address: 129, 69 attributes: 3, 70 interval: 12, 71 maxPacketSize: 4, 72 direction: 128, 73 number: 1, 74 type: 3, 75 interfaceId: 0, 76 }, 77 ], 78 }, 79 ], 80 }, 81 ], 82 }, 83] 84*/ 85``` 86 87## usbManager.connectDevice 88 89connectDevice(device: USBDevice): Readonly<USBDevicePipe> 90 91根据getDevices()返回的设备信息打开USB设备。如果USB服务异常,可能返回`undefined`,注意需要对接口返回值做判空处理。 92 931. 需要调用[usbManager.getDevices](#usbmanagergetdevices)获取设备信息以及device; 942. 调用[usbManager.requestRight](#usbmanagerrequestright)请求使用该设备的权限。 95 96> **说明:** 97> 98> 单次批量传输的传输数据总量(包括pipe、endpoint、buffer、timeout)请控制在200KB以下。 99 100**系统能力:** SystemCapability.USB.USBManager 101 102**参数:** 103 104| 参数名 | 类型 | 必填 | 说明 | 105| -------- | -------- | -------- | ---------------- | 106| device | [USBDevice](#usbdevice) | 是 | USB设备信息,用getDevices获取的busNum和devAddress确定设备,当前其他属性不做处理。 | 107 108**返回值:** 109 110| 类型 | 说明 | 111| -------- | -------- | 112| Readonly<[USBDevicePipe](#usbdevicepipe)> | 指定的传输通道对象。 | 113 114**错误码:** 115 116以下错误码的详细介绍参见[USB服务错误码](errorcode-usb.md)。 117 118| 错误码ID | 错误信息 | 119| -------- | ------------------------------------------------------------ | 120| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 121| 14400001 | Permission denied. Call requestRight to get the permission first. | 122 123**示例:** 124 125```ts 126let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 127if (devicesList.length == 0) { 128 console.log(`device list is empty`); 129} 130 131let device: usbManager.USBDevice = devicesList[0]; 132usbManager.requestRight(device.name); 133let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device); 134console.log(`devicepipe = ${devicepipe}`); 135``` 136 137## usbManager.hasRight 138 139hasRight(deviceName: string): boolean 140 141判断是否有权访问该设备。 142 143如果“使用者”(如各种App或系统)有权访问设备则返回true;无权访问设备则返回false。 144 145**系统能力:** SystemCapability.USB.USBManager 146 147**参数:** 148 149| 参数名 | 类型 | 必填 | 说明 | 150| -------- | -------- | -------- | -------- | 151| deviceName | string | 是 | 设备名称,来自getDevices获取的设备列表。 | 152 153**错误码:** 154 155以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 156 157| 错误码ID | 错误信息 | 158| -------- | ------------------------------------------------------------ | 159| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 160 161**返回值:** 162 163| 类型 | 说明 | 164| -------- | -------- | 165| boolean | true表示有访问设备的权限,false表示没有访问设备的权限。调用失败返回其他错误码如下:<br>- 88080385:接口未初始化。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发送错误。| 166 167**示例:** 168 169```ts 170let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 171if (devicesList.length == 0) { 172 console.log(`device list is empty`); 173} 174 175let device: usbManager.USBDevice = devicesList[0]; 176usbManager.requestRight(device.name); 177let right: boolean = usbManager.hasRight(device.name); 178console.log(`${right}`); 179``` 180 181## usbManager.requestRight 182 183requestRight(deviceName: string): Promise<boolean> 184 185请求软件包的临时权限以访问设备。使用Promise异步回调。系统应用默认拥有访问设备权限,无需调用此接口申请。 186 187**系统能力:** SystemCapability.USB.USBManager 188 189**参数:** 190 191| 参数名 | 类型 | 必填 | 说明 | 192| -------- | -------- | -------- | -------- | 193| deviceName | string | 是 | 设备名称,来自getDevices获取的设备列表。| 194 195**错误码:** 196 197以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 198 199| 错误码ID | 错误信息 | 200| -------- | ------------------------------------------------------------ | 201| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 202 203**返回值:** 204 205| 类型 | 说明 | 206| -------- | -------- | 207| Promise<boolean> | Promise对象,返回临时权限的申请结果。返回true表示临时权限申请成功;返回false则表示临时权限申请失败。调用失败返回其他错误码如下:<br>- 88080385:接口未初始化。<br>- 88080392:写入接口数据包过程发生错误。<br>- 88080393:读取接口数据包过程发送错误。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。| 208 209**示例:** 210 211```ts 212let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 213if (devicesList.length == 0) { 214 console.log(`device list is empty`); 215} 216 217let device: usbManager.USBDevice = devicesList[0]; 218usbManager.requestRight(device.name).then(ret => { 219 console.log(`requestRight = ${ret}`); 220}); 221``` 222 223## usbManager.removeRight 224 225removeRight(deviceName: string): boolean 226 227移除软件包访问设备的权限。系统应用默认拥有访问设备权限,调用此接口不会产生影响。 228 229**系统能力:** SystemCapability.USB.USBManager 230 231**参数:** 232 233| 参数名 | 类型 | 必填 | 说明 | 234| -------- | -------- | -------- | -------- | 235| deviceName | string | 是 | 设备名称,来自getDevices获取的设备列表。| 236 237**错误码:** 238 239以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 240 241| 错误码ID | 错误信息 | 242| -------- | ------------------------------------------------------------ | 243| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 244 245**返回值:** 246 247| 类型 | 说明 | 248| -------- | -------- | 249| boolean | 返回权限移除结果。返回true表示权限移除成功;返回false则表示权限移除失败。调用失败返回其他错误码如下:<br>- 88080382:接口操作过程中遇到无效值或参数。<br>- 88080385:接口未初始化。<br>- 88080392:写入接口数据包过程发生错误。<br>- 88080393:读取接口数据包过程发送错误。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。| 250 251**示例:** 252 253```ts 254let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 255if (devicesList.length == 0) { 256 console.log(`device list is empty`); 257} 258 259let device: usbManager.USBDevice = devicesList[0]; 260if (usbManager.removeRight(device.name)) { 261 console.log(`Succeed in removing right`); 262} 263``` 264 265## usbManager.claimInterface 266 267claimInterface(pipe: USBDevicePipe, iface: USBInterface, force ?: boolean): number 268 269注册通信接口。 270 2711. 需要调用[usbManager.getDevices](#usbmanagergetdevices)获取设备信息以及interfaces; 2722. 调用[usbManager.requestRight](#usbmanagerrequestright)获取设备请求权限; 2733. 调用[usbManager.connectDevice](#usbmanagerconnectdevice)接口得到devicepipe作为参数。 274 275**系统能力:** SystemCapability.USB.USBManager 276 277**参数:** 278 279| 参数名 | 类型 | 必填 | 说明 | 280| -------- | -------- | -------- | -------- | 281| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。| 282| iface | [USBInterface](#usbinterface) | 是 | 用于确定需要获取接口的索引,需要调用getDevices获取设备信息并通过id确定唯一接口。| 283| force | boolean | 否 | 可选参数,是否强制获取。默认值为false ,表示不强制获取,用户按需选择。| 284 285**错误码:** 286 287以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 288 289| 错误码ID | 错误信息 | 290| -------- | ------------------------------------------------------------ | 291| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 292 293**返回值:** 294 295| 类型 | 说明 | 296| -------- | -------- | 297| number | 注册通信接口成功返回0;注册通信接口失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。| 298 299**示例:** 300 301```ts 302let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 303if (devicesList.length == 0) { 304 console.log(`device list is empty`); 305} 306 307let device: usbManager.USBDevice = devicesList[0]; 308usbManager.requestRight(device.name); 309let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device); 310let interfaces: usbManager.USBInterface = device.configs[0].interfaces[0]; 311let ret: number= usbManager.claimInterface(devicepipe, interfaces); 312console.log(`claimInterface = ${ret}`); 313``` 314 315## usbManager.releaseInterface 316 317releaseInterface(pipe: USBDevicePipe, iface: USBInterface): number 318 319释放注册过的通信接口。 320 321需要调用[usbManager.claimInterface](#usbmanagerclaiminterface)先获取接口,才能使用此方法释放接口。 322 323**系统能力:** SystemCapability.USB.USBManager 324 325**参数:** 326 327| 参数名 | 类型 | 必填 | 说明 | 328| -------- | -------- | -------- | -------- | 329| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。| 330| iface | [USBInterface](#usbinterface) | 是 | 用于确定需要释放接口的索引,需要调用getDevices获取设备信息并通过id确定唯一接口。| 331 332**错误码:** 333 334以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 335 336| 错误码ID | 错误信息 | 337| -------- | ------------------------------------------------------------ | 338| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified.2.Incorrect parameter types. | 339 340**返回值:** 341 342| 类型 | 说明 | 343| -------- | -------- | 344| number | 释放接口成功返回0;释放接口失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080381:无效的接口操作。<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。| 345 346**示例:** 347 348```ts 349let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 350if (devicesList.length == 0) { 351 console.log(`device list is empty`); 352} 353 354let device: usbManager.USBDevice = devicesList[0]; 355usbManager.requestRight(device.name); 356let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device); 357let interfaces: usbManager.USBInterface = device.configs[0].interfaces[0]; 358let ret: number = usbManager.claimInterface(devicepipe, interfaces); 359ret = usbManager.releaseInterface(devicepipe, interfaces); 360console.log(`releaseInterface = ${ret}`); 361``` 362 363## usbManager.setConfiguration 364 365setConfiguration(pipe: USBDevicePipe, config: USBConfiguration): number 366 367设置设备配置。 368 3691. 需要调用[usbManager.getDevices](#usbmanagergetdevices)获取设备信息以及config; 3702. 调用[usbManager.requestRight](#usbmanagerrequestright)获取设备请求权限; 3713. 调用[usbManager.connectDevice](#usbmanagerconnectdevice)得到devicepipe作为参数。 372 373**系统能力:** SystemCapability.USB.USBManager 374 375**参数:** 376 377| 参数名 | 类型 | 必填 | 说明 | 378| -------- | -------- | -------- | -------- | 379| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。| 380| config | [USBConfiguration](#usbconfiguration) | 是 | 用于确定需要设置的配置,需要调用getDevices获取设备信息并通过id用于确定唯一设置。| 381 382**错误码:** 383 384以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 385 386| 错误码ID | 错误信息 | 387| -------- | ------------------------------------------------------------ | 388| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 389 390**返回值:** 391 392| 类型 | 说明 | 393| -------- | -------- | 394| number | 设置设备配置成功返回0;设置设备配置失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。<br>- -17:I/O失败。| 395 396**示例:** 397 398```ts 399let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 400if (devicesList.length == 0) { 401 console.log(`device list is empty`); 402} 403 404let device: usbManager.USBDevice = devicesList[0]; 405usbManager.requestRight(device.name); 406let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device); 407let config: usbManager.USBConfiguration = device.configs[0]; 408let ret: number= usbManager.setConfiguration(devicepipe, config); 409console.log(`setConfiguration = ${ret}`); 410``` 411 412## usbManager.setInterface 413 414setInterface(pipe: USBDevicePipe, iface: USBInterface): number 415 416设置设备接口。 417 4181. 需要调用[usbManager.getDevices](#usbmanagergetdevices)获取设备列表以及interfaces; 4192. 调用[usbManager.requestRight](#usbmanagerrequestright)获取设备请求权限; 4203. 调用[usbManager.connectDevice](#usbmanagerconnectdevice)得到devicepipe作为参数; 4214. 调用[usbManager.claimInterface](#usbmanagerclaiminterface)注册通信接口。 422 423**系统能力:** SystemCapability.USB.USBManager 424 425**参数:** 426 427| 参数名 | 类型 | 必填 | 说明 | 428| -------- | -------- | -------- | -------- | 429| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。| 430| iface | [USBInterface](#usbinterface) | 是 | 用于确定需要设置的接口,需要调用getDevices获取设备信息并通过id和alternateSetting确定唯一接口。| 431 432**错误码:** 433 434以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 435 436| 错误码ID | 错误信息 | 437| -------- | ------------------------------------------------------------ | 438| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 439 440**返回值:** 441 442| 类型 | 说明 | 443| -------- | -------- | 444| number | 设置设备接口成功返回0;设置设备接口失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。| 445 446**示例:** 447 448```ts 449let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 450if (devicesList.length == 0) { 451 console.log(`device list is empty`); 452} 453 454let device: usbManager.USBDevice = devicesList[0]; 455usbManager.requestRight(device.name); 456let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device); 457let interfaces: usbManager.USBInterface = device.configs[0].interfaces[0]; 458let ret: number = usbManager.claimInterface(devicepipe, interfaces); 459ret = usbManager.setInterface(devicepipe, interfaces); 460console.log(`setInterface = ${ret}`); 461``` 462 463## usbManager.getRawDescriptor 464 465getRawDescriptor(pipe: USBDevicePipe): Uint8Array 466 467获取原始的USB描述符。如果USB服务异常,可能返回`undefined`,注意需要对接口返回值做判空处理。 468 4691. 需要调用[usbManager.getDevices](#usbmanagergetdevices)获取设备列表; 4702. 调用[usbManager.requestRight](#usbmanagerrequestright)获取设备请求权限; 4713. 调用[usbManager.connectDevice](#usbmanagerconnectdevice)接口得到devicepipe作为参数。 472 473**系统能力:** SystemCapability.USB.USBManager 474 475**参数:** 476 477| 参数名 | 类型 | 必填 | 说明 | 478| -------- | -------- | -------- | -------- | 479| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。| 480 481**错误码:** 482 483以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 484 485| 错误码ID | 错误信息 | 486| -------- | ------------------------------------------------------------ | 487| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 488 489**返回值:** 490 491| 类型 | 说明 | 492| -------- | -------- | 493| Uint8Array | 返回获取的原始数据;失败返回undefined。 | 494 495**示例:** 496 497```ts 498let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 499if (devicesList.length == 0) { 500 console.log(`device list is empty`); 501} 502 503usbManager.requestRight(devicesList[0].name); 504let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(devicesList[0]); 505let ret: Uint8Array = usbManager.getRawDescriptor(devicepipe); 506``` 507 508## usbManager.getFileDescriptor 509 510getFileDescriptor(pipe: USBDevicePipe): number 511 512获取文件描述符。 513 5141. 需要调用[usbManager.getDevices](#usbmanagergetdevices)获取设备列表; 5152. 调用[usbManager.requestRight](#usbmanagerrequestright)获取设备请求权限; 5163. 调用[usbManager.connectDevice](#usbmanagerconnectdevice)接口得到devicepipe作为参数。 517 518**系统能力:** SystemCapability.USB.USBManager 519 520**参数:** 521 522| 参数名 | 类型 | 必填 | 说明 | 523| -------- | -------- | -------- | -------- | 524| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。| 525 526**错误码:** 527 528以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 529 530| 错误码ID | 错误信息 | 531| -------- | ------------------------------------------------------------ | 532| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 533 534**返回值:** 535 536| 类型 | 说明 | 537| ------ | -------------------- | 538| number | 返回设备对应的文件描述符;失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。| 539 540**示例:** 541 542```ts 543let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 544if (devicesList.length == 0) { 545 console.log(`device list is empty`); 546} 547 548usbManager.requestRight(devicesList[0].name); 549let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(devicesList[0]); 550let ret: number = usbManager.getFileDescriptor(devicepipe); 551``` 552 553## usbManager.controlTransfer<sup>(deprecated)</sup> 554 555controlTransfer(pipe: USBDevicePipe, controlparam: USBControlParams, timeout ?: number): Promise<number> 556 557控制传输。 558 5591. 需要调用[usbManager.getDevices](#usbmanagergetdevices)获取设备列表; 5602. 调用[usbManager.requestRight](#usbmanagerrequestright)获取设备请求权限; 5613. 调用[usbManager.connectDevice](#usbmanagerconnectdevice)接口得到devicepipe作为参数。 562 563**说明:** 564 565> 从 API version 9开始支持,从API version 12开始废弃。建议使用 [usbControlTransfer](#usbmanagerusbcontroltransfer12) 替代。 566 567**系统能力:** SystemCapability.USB.USBManager 568 569**参数:** 570 571| 参数名 | 类型 | 必填 | 说明 | 572| -------- | -------- | -------- | -------- | 573| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定设备,需要调用connectDevice获取。| 574| controlparam | [USBControlParams](#usbcontrolparams) | 是 | 控制传输参数,按需设置参数,参数传参类型请参考USB协议。| 575| timeout | number | 否 | 超时时间(单位:ms),可选参数,默认为0不超时,用户按需选择。 | 576 577**错误码:** 578 579以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 580 581| 错误码ID | 错误信息 | 582| -------- | ------------------------------------------------------------ | 583| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 584 585**返回值:** 586 587| 类型 | 说明 | 588| -------- | -------- | 589| Promise<number> | Promise对象,获取传输或接收到的数据块大小。失败返回其他错误码如下:<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。| 590 591**示例:** 592 593```ts 594class PARA { 595 request: number = 0 596 reqType: usbManager.USBControlRequestType = 0 597 target: usbManager.USBRequestTargetType = 0 598 value: number = 0 599 index: number = 0 600 data: Uint8Array = new Uint8Array() 601} 602 603let param: PARA = { 604 request: 0x06, 605 reqType: 0x80, 606 target:0, 607 value: 0x01 << 8 | 0, 608 index: 0, 609 data: new Uint8Array(18) 610}; 611 612let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 613if (devicesList.length == 0) { 614 console.log(`device list is empty`); 615} 616 617usbManager.requestRight(devicesList[0].name); 618let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(devicesList[0]); 619usbManager.controlTransfer(devicepipe, param).then((ret: number) => { 620console.log(`controlTransfer = ${ret}`); 621}) 622``` 623 624## usbManager.usbControlTransfer<sup>12+</sup> 625 626usbControlTransfer(pipe: USBDevicePipe, requestparam: USBDeviceRequestParams, timeout ?: number): Promise<number> 627 628控制传输。 629 6301. 需要调用[usbManager.getDevices](#usbmanagergetdevices)获取设备列表; 6312. 调用[usbManager.requestRight](#usbmanagerrequestright)获取设备请求权限; 6323. 调用[usbManager.connectDevice](#usbmanagerconnectdevice)接口得到devicepipe作为参数。 633 634**系统能力:** SystemCapability.USB.USBManager 635 636**参数:** 637 638| 参数名 | 类型 | 必填 | 说明 | 639| -------- | -------- | -------- | -------- | 640| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定设备。 | 641| requestparam | [USBDeviceRequestParams](#usbdevicerequestparams12) | 是 | 控制传输参数,按需设置参数,参数传参类型请参考USB协议。 | 642| timeout | number | 否 | 超时时间(单位:ms),可选参数,默认为0不超时。 | 643 644**错误码:** 645 646以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 647 648| 错误码ID | 错误信息 | 649| -------- | ------------------------------------------------------------ | 650| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified.2.Incorrect parameter types. | 651 652**返回值:** 653 654| 类型 | 说明 | 655| -------- | -------- | 656| Promise<number> | Promise对象,获取传输或接收到的数据块大小。失败返回其他错误码如下:<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。| 657 658**示例:** 659 660```ts 661class PARA { 662 bmRequestType: number = 0 663 bRequest: number = 0 664 wValue: number = 0 665 wIndex: number = 0 666 wLength: number = 0 667 data: Uint8Array = new Uint8Array() 668} 669 670let param: PARA = { 671 bmRequestType: 0x80, 672 bRequest: 0x06, 673 674 wValue:0x01 << 8 | 0, 675 wIndex: 0, 676 wLength: 18, 677 data: new Uint8Array(18) 678}; 679 680let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 681if (devicesList.length == 0) { 682 console.log(`device list is empty`); 683} 684 685usbManager.requestRight(devicesList[0].name); 686let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(devicesList[0]); 687usbManager.usbControlTransfer(devicepipe, param).then((ret: number) => { 688console.log(`usbControlTransfer = ${ret}`); 689}) 690``` 691 692## usbManager.bulkTransfer 693 694bulkTransfer(pipe: USBDevicePipe, endpoint: USBEndpoint, buffer: Uint8Array, timeout ?: number): Promise<number> 695 696批量传输。 697 6981. 需要调用[usbManager.getDevices](#usbmanagergetdevices)获取设备信息列表以及endpoint; 6992. 调用[usbManager.requestRight](#usbmanagerrequestright)获取设备请求权限; 7003. 调用[usbManager.connectDevice](#usbmanagerconnectdevice)接口得到返回数据devicepipe之后, 7014. 再次获取接口[usbManager.claimInterface](#usbmanagerclaiminterface); 7025. 再调用usb.bulkTransfer接口。 703 704**系统能力:** SystemCapability.USB.USBManager 705 706**参数:** 707 708| 参数名 | 类型 | 必填 | 说明 | 709| -------- | -------- | -------- | -------- | 710| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定设备,需要调用connectDevice获取。| 711| endpoint | [USBEndpoint](#usbendpoint) | 是 | 用于确定传输的端口,需要调用getDevices获取设备信息列表以及endpoint,address用于确定端点地址,direction用于确定端点的方向,interfaceId用于确定所属接口,当前其他属性不做处理。| 712| buffer | Uint8Array | 是 | 用于写入或读取数据的缓冲区。 | 713| timeout | number | 否 | 超时时间(单位:ms),可选参数,默认为0不超时,用户按需选择。 | 714 715**错误码:** 716 717以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 718 719| 错误码ID | 错误信息 | 720| -------- | ------------------------------------------------------------ | 721| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 722 723**返回值:** 724 725| 类型 | 说明 | 726| -------- | -------- | 727| Promise<number> | Promise对象,获取传输或接收到的数据块大小。失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。<br>- -3:参数无效。<br>- -202:设备未找到。| 728 729**示例:** 730 731> **说明:** 732> 733> 以下示例代码只是调用bulkTransfer接口的必要流程,实际调用时,设备开发者需要遵循设备相关协议进行调用,确保数据的正确传输和设备的兼容性。 734 735```ts 736//usbManager.getDevices 接口返回数据集合,取其中一个设备对象,并获取权限。 737//把获取到的设备对象作为参数传入usbManager.connectDevice;当usbManager.connectDevice接口成功返回之后; 738//才可以调用第三个接口usbManager.claimInterface.当usbManager.claimInterface 调用成功以后,再调用该接口。 739let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 740if (devicesList.length == 0) { 741 console.log(`device list is empty`); 742} 743 744let device: usbManager.USBDevice = devicesList[0]; 745usbManager.requestRight(device.name); 746 747let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device); 748for (let i = 0; i < device.configs[0].interfaces.length; i++) { 749 if (device.configs[0].interfaces[i].endpoints[0].attributes == 2) { 750 let endpoint: usbManager.USBEndpoint = device.configs[0].interfaces[i].endpoints[0]; 751 let interfaces: usbManager.USBInterface = device.configs[0].interfaces[i]; 752 let ret: number = usbManager.claimInterface(devicepipe, interfaces); 753 let buffer = new Uint8Array(128); 754 usbManager.bulkTransfer(devicepipe, endpoint, buffer).then((ret: number) => { 755 console.log(`bulkTransfer = ${ret}`); 756 }); 757 } 758} 759``` 760 761## usbManager.closePipe 762 763closePipe(pipe: USBDevicePipe): number 764 765关闭设备消息控制通道。 766 7671. 需要调用[usbManager.getDevices](#usbmanagergetdevices)获取设备列表; 7682. 调用[usbManager.requestRight](#usbmanagerrequestright)获取设备请求权限; 7693. 调用[usbManager.connectDevice](#usbmanagerconnectdevice)得到devicepipe作为参数。 770 771**系统能力:** SystemCapability.USB.USBManager 772 773**参数:** 774 775| 参数名 | 类型 | 必填 | 说明 | 776| -------- | -------- | -------- | -------- | 777| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定USB设备消息控制通道,需要调用connectDevice获取。| 778 779**错误码:** 780 781以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 782 783| 错误码ID | 错误信息 | 784| -------- | ------------------------------------------------------------ | 785| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 786 787**返回值:** 788 789| 类型 | 说明 | 790| -------- | -------- | 791| number | 关闭设备消息控制通道成功返回0;关闭设备消息控制通道失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080393:读取接口数据包过程发生错误。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。 | 792 793**示例:** 794 795```ts 796let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices(); 797if (devicesList.length == 0) { 798 console.log(`device list is empty`); 799} 800 801usbManager.requestRight(devicesList[0].name); 802let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(devicesList[0]); 803let ret: number = usbManager.closePipe(devicepipe); 804console.log(`closePipe = ${ret}`); 805``` 806 807## usbManager.hasAccessoryRight<sup>14+</sup> 808 809hasAccessoryRight(accessory: USBAccessory): boolean 810 811检查应用程序是否有权访问USB配件。 812 813需要调用[usbManager.getAccessoryList](#usbmanagergetaccessorylist14)获取配件列表,得到[USBAccessory](#usbaccessory14)作为参数。 814 815**系统能力:** SystemCapability.USB.USBManager 816 817**参数:** 818 819| 参数名 | 类型 | 必填 | 说明 | 820| --------- | ------------ | ---- | ------------------------------------- | 821| accessory | [USBAccessory](#usbaccessory14) | 是 | USB配件,需要通过[getAccessoryList](#usbmanagergetaccessorylist14)获取。 | 822 823**错误码:** 824 825以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 826 827| 错误码ID | 错误信息 | 828| -------- | ------------------------------------------------------------ | 829| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 830| 14400004 | Service exception. Possible causes: 1. No accessory is plugged in. | 831| 14400005 | Database operation exception. | 832| 14401001 | The target USBAccessory not matched. | 833 834**返回值:** 835 836| 类型 | 说明 | 837| ------- | ----------------------------- | 838| boolean | true表示应用程序有权访问USB配件,false表示应用程序无权访问USB配件。 | 839 840**示例:** 841 842```ts 843import { hilog } from '@kit.PerformanceAnalysisKit'; 844try { 845 let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList() 846 let flag = usbManager.hasAccessoryRight(accList[0]) 847 hilog.info(0, 'testTag ui', `hasAccessoryRight success, ret:${flag}`) 848} catch (error) { 849 hilog.info(0, 'testTag ui', `hasAccessoryRight error ${error.code}, message is ${error.message}`) 850} 851``` 852 853## usbManager.requestAccessoryRight<sup>14+</sup> 854 855requestAccessoryRight(accessory: USBAccessory): Promise<boolean> 856 857为指定应用程序申请访问USB配件的访问权限。 858 859需要调用[usbManager.getAccessoryList](#usbmanagergetaccessorylist14)获取配件列表,得到[USBAccessory](#usbaccessory14)作为参数。 860 861**系统能力:** SystemCapability.USB.USBManager 862 863**参数:** 864 865| 参数名 | 类型 | 必填 | 说明 | 866| --------- | ------------ | ---- | ------------------------------------- | 867| accessory | [USBAccessory](#usbaccessory14) | 是 | USB配件,需要通过[getAccessoryList](#usbmanagergetaccessorylist14)获取。 | 868 869**错误码:** 870 871以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 872 873| 错误码ID | 错误信息 | 874| -------- | ------------------------------------------------------------ | 875| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 876| 14400004 | Service exception. Possible causes: 1. No accessory is plugged in. | 877| 14400005 | Database operation exception. | 878| 14401001 | The target USBAccessory not matched. | 879 880**返回值:** 881 882| 类型 | 说明 | 883| ---------------- | ----------------------------- | 884| Promise<boolean> | Promise对象,返回应用程序访问配件权限的申请结果。返回true表示权限申请成功;返回false表示权限申请失败。 | 885 886**示例:** 887 888```ts 889import { hilog } from '@kit.PerformanceAnalysisKit'; 890try { 891 let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList() 892 let flag = usbManager.requestAccessoryRight(accList[0]) 893 hilog.info(0, 'testTag ui', `requestAccessoryRight success, ret:${flag}`) 894} catch (error) { 895 hilog.info(0, 'testTag ui', `requestAccessoryRight error ${error.code}, message is ${error.message}`) 896} 897``` 898 899## usbManager.cancelAccessoryRight<sup>14+</sup> 900 901cancelAccessoryRight(accessory: USBAccessory): void; 902 903取消当前应用程序访问USB配件的权限。 904 905需要调用[usbManager.getAccessoryList](#usbmanagergetaccessorylist14)获取配件列表,得到[USBAccessory](#usbaccessory14)作为参数。 906 907**系统能力:** SystemCapability.USB.USBManager 908 909**参数:** 910 911| 参数名 | 类型 | 必填 | 说明 | 912| --------- | ------------ | ---- | ------------------------------------- | 913| accessory | [USBAccessory](#usbaccessory14) | 是 | USB配件,需要通过[getAccessoryList](#usbmanagergetaccessorylist14)获取。 | 914 915**错误码:** 916 917以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 918 919| 错误码ID | 错误信息 | 920| -------- | ------------------------------------------------------------ | 921| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 922| 14400004 | Service exception. Possible causes: 1. No accessory is plugged in. | 923| 14400005 | Database operation exception. | 924| 14401001 | The target USBAccessory not matched. | 925 926**示例:** 927 928```ts 929import { hilog } from '@kit.PerformanceAnalysisKit'; 930try { 931 let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList() 932 let flag = usbManager.requestAccessoryRight(accList[0]) 933 usbManager.cancelAccessoryRight(accList[0]) 934 hilog.info(0, 'testTag ui', `cancelAccessoryRight success`) 935} catch (error) { 936 hilog.info(0, 'testTag ui', `cancelAccessoryRight error ${error.code}, message is ${error.message}`) 937} 938``` 939 940## usbManager.getAccessoryList<sup>14+</sup> 941 942getAccessoryList(): Array<Readonly<USBAccessory>> 943 944获取当前已接入主机的USB配件列表。 945 946**系统能力:** SystemCapability.USB.USBManager 947 948**错误码:** 949 950以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 951 952| 错误码ID | 错误信息 | 953| -------- | ------------------------------------------------------------ | 954| 14400004 | Service exception. Possible causes: 1. No accessory is plugged in. | 955 956**返回值:** 957 958| 类型 | 说明 | 959| ----------------------------- | -------------------------------------------------- | 960| Array<Readonly<USBAccessory>> | 只读的USB配件列表。当前仅支持列表中包含1个USB配件。 | 961 962**示例:** 963 964```ts 965import { hilog } from '@kit.PerformanceAnalysisKit'; 966try { 967 let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList() 968 hilog.info(0, 'testTag ui', `getAccessoryList success, accList: ${JSON.stringify(accList)}`) 969} catch (error) { 970 hilog.info(0, 'testTag ui', `getAccessoryList error ${error.code}, message is ${error.message}`) 971} 972``` 973 974## usbManager.openAccessory<sup>14+</sup> 975 976openAccessory(accessory: USBAccessory): USBAccessoryHandle; 977 978获取配件句柄并打开配件文件描述符。 979 980需要调用[usbManager.getAccessoryList](#usbmanagergetaccessorylist14)获取配件列表,得到[USBAccessory](#usbaccessory14)作为参数。 981 982**系统能力:** SystemCapability.USB.USBManager 983 984**参数:** 985 986| 参数名 | 类型 | 必填 | 说明 | 987| --------- | ------------ | ---- | ------------------------------------- | 988| accessory | [USBAccessory](#usbaccessory14) | 是 | USB配件,需要通过[getAccessoryList](#usbmanagergetaccessorylist14)获取。 | 989 990**错误码:** 991 992以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 993 994| 错误码ID | 错误信息 | 995| -------- | ------------------------------------------------------------ | 996| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 997| 14400001 | Permission denied. Call requestAccessoryRight to get the right first. | 998| 14400004 | Service exception. Possible causes: 1. No accessory is plugged in. | 999| 14401001 | The target USBAccessory not matched. | 1000| 14401002 | Failed to open the native accessory node. | 1001| 14401003 | Cannot reopen the accessory. | 1002 1003**返回值:** 1004 1005| 类型 | 说明 | 1006| ------------------ | ----------- | 1007| [USBAccessoryHandle](#usbaccessoryhandle14) | USB配件句柄。 | 1008 1009**示例:** 1010 1011```ts 1012import { hilog } from '@kit.PerformanceAnalysisKit'; 1013try { 1014 let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList() 1015 let flag = usbManager.requestAccessoryRight(accList[0]) 1016 let handle = usbManager.openAccessory(accList[0]) 1017 hilog.info(0, 'testTag ui', `openAccessory success`) 1018} catch (error) { 1019 hilog.info(0, 'testTag ui', `openAccessory error ${error.code}, message is ${error.message}`) 1020} 1021``` 1022 1023## usbManager.closeAccessory<sup>14+</sup> 1024 1025closeAccessory(accessoryHandle: USBAccessoryHandle): void; 1026 1027关闭配件文件描述符。 1028 1029需要调用[usbManager.openAccessory](#usbmanageropenaccessory14)获取配件列表,得到[USBAccessoryHandle](#usbaccessoryhandle14)作为参数。 1030 1031**系统能力:** SystemCapability.USB.USBManager 1032 1033**参数:** 1034 1035| 参数名 | 类型 | 必填 | 说明 | 1036| --------------- | ------------------ | ---- | -------------------------------------- | 1037| accessoryHandle | [USBAccessoryHandle](#usbaccessoryhandle14) | 是 | USB配件句柄。需要通过[openAccessory](#usbmanageropenaccessory14)获取。 | 1038 1039**错误码:** 1040 1041以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。 1042 1043| 错误码ID | 错误信息 | 1044| -------- | ------------------------------------------------------------ | 1045| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 1046| 14400004 | Service exception. Possible causes: 1. No accessory is plugged in. | 1047 1048**示例:** 1049 1050```ts 1051import { hilog } from '@kit.PerformanceAnalysisKit'; 1052try { 1053 let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList() 1054 let flag = usbManager.requestAccessoryRight(accList[0]) 1055 let handle = usbManager.openAccessory(accList[0]) 1056 usbManager.closeAccessory(handle) 1057 hilog.info(0, 'testTag ui', `closeAccessory success`) 1058} catch (error) { 1059 hilog.info(0, 'testTag ui', `closeAccessory error ${error.code}, message is ${error.message}`) 1060} 1061``` 1062 1063## USBEndpoint 1064 1065通过USB发送和接收数据的端口。通过[USBInterface](#usbinterface)获取。 1066 1067**系统能力:** SystemCapability.USB.USBManager 1068 1069| 名称 | 类型 | 必填 |说明 | 1070| ------------- | ------------------------------------------- | ------------- |------------- | 1071| address | number | 是 |端点地址。 | 1072| attributes | number | 是 |端点属性。 | 1073| interval | number | 是 |端点间隔。 | 1074| maxPacketSize | number | 是 |端点最大数据包大小。 | 1075| direction | [USBRequestDirection](#usbrequestdirection) | 是 |端点的方向。 | 1076| number | number | 是 |端点号。 | 1077| type | number | 是 |端点类型。 | 1078| interfaceId | number | 是 |端点所属的接口的唯一标识。 | 1079 1080## USBInterface 1081 1082一个[USBConfiguration](#usbconfiguration)中可以含有多个USBInterface,每个USBInterface提供一个功能。 1083 1084**系统能力:** SystemCapability.USB.USBManager 1085 1086| 名称 | 类型 | 必填 |说明 | 1087| ---------------- | ---------------------------------------- | ------------- |--------------------- | 1088| id | number | 是 |接口的唯一标识。 | 1089| protocol | number | 是 |接口的协议。 | 1090| clazz | number | 是 |设备类型。 | 1091| subClass | number | 是 |设备子类。 | 1092| alternateSetting | number | 是 |在同一个接口中的多个描述符中进行切换设置。 | 1093| name | string | 是 |接口名称。 | 1094| endpoints | Array<[USBEndpoint](#usbendpoint)> | 是 |当前接口所包含的端点。 | 1095 1096## USBConfiguration 1097 1098USB配置,一个[USBDevice](#usbdevice)中可以含有多个配置。 1099 1100**系统能力:** SystemCapability.USB.USBManager 1101 1102| 名称 | 类型 | 必填 |说明 | 1103| -------------- | ------------------------------------------------ | --------------- |--------------- | 1104| id | number | 是 |配置的唯一标识。 | 1105| attributes | number | 是 |配置的属性。 | 1106| maxPower | number | 是 |最大功耗,以毫安为单位。 | 1107| name | string | 是 |配置的名称,可以为空。 | 1108| isRemoteWakeup | boolean | 是 |检查当前配置是否支持远程唤醒。 | 1109| isSelfPowered | boolean | 是 | 检查当前配置是否支持独立电源。 | 1110| interfaces | Array <[USBInterface](#usbinterface)> | 是 |配置支持的接口属性。 | 1111 1112## USBDevice 1113 1114USB设备信息。 1115 1116**系统能力:** SystemCapability.USB.USBManager 1117 1118| 名称 | 类型 | 必填 |说明 | 1119| ---------------- | ------------------------------------ | ---------- |---------- | 1120| busNum | number | 是 |总线地址。 | 1121| devAddress | number | 是 |设备地址。 | 1122| serial | string | 是 |序列号。 | 1123| name | string | 是 |设备名字。 | 1124| manufacturerName | string | 是 | 产商信息。 | 1125| productName | string | 是 |产品信息。 | 1126| version | string | 是 |版本。 | 1127| vendorId | number | 是 |厂商ID。 | 1128| productId | number | 是 |产品ID。 | 1129| clazz | number | 是 |设备类。 | 1130| subClass | number | 是 |设备子类。 | 1131| protocol | number | 是 |设备协议码。 | 1132| configs | Array<[USBConfiguration](#usbconfiguration)> | 是 |设备配置描述符信息。 | 1133 1134## USBDevicePipe 1135 1136USB设备消息传输通道,用于确定设备。 1137 1138**系统能力:** SystemCapability.USB.USBManager 1139 1140| 名称 | 类型 | 必填 |说明 | 1141| ---------- | ------ | ----- |----- | 1142| busNum | number |是 | 总线地址。 | 1143| devAddress | number |是 | 设备地址。 | 1144 1145## USBControlParams 1146 1147控制传输参数。 1148 1149**系统能力:** SystemCapability.USB.USBManager 1150 1151| 名称 | 类型 | 必填 |说明 | 1152| ------- | ----------------------------------------------- | ---------------- |---------------- | 1153| request | number | 是 |请求类型。 | 1154| target | [USBRequestTargetType](#usbrequesttargettype) | 是 |请求目标类型。 | 1155| reqType | [USBControlRequestType](#usbcontrolrequesttype) | 是 |请求控制类型。 | 1156| value | number | 是 |请求参数。 | 1157| index | number | 是 |请求参数value对应的索引值。 | 1158| data | Uint8Array | 是 |用于写入或读取的缓冲区。 | 1159 1160## USBDeviceRequestParams<sup>12+</sup> 1161 1162控制传输参数。 1163 1164**系统能力:** SystemCapability.USB.USBManager 1165 1166| 名称 | 类型 | 必填 |说明 | 1167| ------- | ----------------------------------------------- | ---------------- |---------------- | 1168| bmRequestType | number | 是 |请求控制类型。 | 1169| bRequest | number | 是 |请求类型。 | 1170| wValue | number | 是 |请求参数。 | 1171| wIndex | number | 是 |请求参数value对应的索引值。 | 1172| wLength | number | 是 |请求数据的长度。 | 1173| data | Uint8Array | 是 |用于写入或读取的缓冲区。 | 1174 1175## USBRequestTargetType 1176 1177请求目标类型。 1178 1179**系统能力:** SystemCapability.USB.USBManager 1180 1181| 名称 | 值 | 说明 | 1182| ---------------------------- | ---- | ------ | 1183| USB_REQUEST_TARGET_DEVICE | 0 | 设备。 | 1184| USB_REQUEST_TARGET_INTERFACE | 1 | 接口。 | 1185| USB_REQUEST_TARGET_ENDPOINT | 2 | 端点。 | 1186| USB_REQUEST_TARGET_OTHER | 3 | 其他。 | 1187 1188## USBControlRequestType 1189 1190控制请求类型。 1191 1192**系统能力:** SystemCapability.USB.USBManager 1193 1194| 名称 | 值 | 说明 | 1195| ------------------------- | ---- | ------ | 1196| USB_REQUEST_TYPE_STANDARD | 0 | 标准。 | 1197| USB_REQUEST_TYPE_CLASS | 1 | 类。 | 1198| USB_REQUEST_TYPE_VENDOR | 2 | 厂商。 | 1199 1200## USBRequestDirection 1201 1202请求方向。 1203 1204**系统能力:** SystemCapability.USB.USBManager 1205 1206| 名称 | 值 | 说明 | 1207| --------------------------- | ---- | ------------------------ | 1208| USB_REQUEST_DIR_TO_DEVICE | 0 | 写数据,主设备往从设备。 | 1209| USB_REQUEST_DIR_FROM_DEVICE | 0x80 | 读数据,从设备往主设备。 | 1210 1211## USBAccessory<sup>14+</sup> 1212 1213USB配件信息。 1214 1215**系统能力:** SystemCapability.USB.USBManager 1216 1217| 名称 | 类型 | 必填 | 说明 | 1218| ------------ | ------ | ---- | ---------------- | 1219| manufacturer | string | 是 | 配件的生产厂商。 | 1220| product | string | 是 | 配件的产品类型。 | 1221| description | string | 是 | 配件的描述。 | 1222| version | string | 是 | 配件的版本。 | 1223| serialNumber | string | 是 | 配件的SN号。 | 1224 1225## USBAccessoryHandle<sup>14+</sup> 1226 1227USB配件句柄。 1228 1229**系统能力:** SystemCapability.USB.USBManager 1230 1231| 名称 | 类型 | 必填 | 说明 | 1232| ----------- | ------ | ---- | ----------------------------------------- | 1233| accessoryFd | number | 是 | 配件文件描述符。合法的accessoryFd是正整数。 | 1234