• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.usbManager (USB管理)
2
3<!--Kit: Basic Services Kit-->
4<!--Subsystem: USB-->
5<!--Owner: @hwymlgitcode-->
6<!--Designer: @w00373942-->
7<!--Tester: @dong-dongzhen-->
8<!--Adviser: @w_Machine_cc-->
9
10本模块主要提供管理USB设备的相关功能,包括主设备上查询USB设备列表、批量数据传输、控制命令传输、权限控制等;从设备上端口管理、功能切换及查询等。
11
12> **说明:**
13>
14> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
15
16## 导入模块
17
18```ts
19import { usbManager } from '@kit.BasicServicesKit';
20```
21
22## 使用说明
23
24凡是参数类型为[USBDevicePipe](#usbdevicepipe)的接口,都需要执行如下操作:
25
26**在使用接口前:**
27
281. 调用[usbManager.getDevices](#usbmanagergetdevices)获取设备列表。
29
302. 调用[usbManager.requestRight](#usbmanagerrequestright)获取请求权限。
31
323. 调用[usbManager.connectDevice](#usbmanagerconnectdevice)得到USBDevicePipe作为参数。
33
34**在使用接口后:**
35
36调用[usbManager.closePipe](#usbmanagerclosepipe)关闭设备消息控制通道。
37
38## usbManager.getDevices
39
40getDevices(): Array&lt;Readonly&lt;USBDevice&gt;&gt;
41
42获取接入主设备的USB设备列表。
43
44> **说明:**
45>
46> 当USB服务正常运行但无设备接入时,那么将会返回一个空的列表,这是正常情况,表示调用成功但当前没有连接的USB设备。
47>
48> 在USB主机模式未开启、USB服务未正确初始化、USB服务连接失败(如开发者模式关闭)、权限不足或其他系统错误时,接口会返回`undefined`,注意需要对接口返回值做判空处理。
49
50**系统能力:**  SystemCapability.USB.USBManager
51
52**返回值:**
53
54| 类型                                                   | 说明      |
55| ---------------------------------------------------- | ------- |
56| Array&lt;Readonly&lt;[USBDevice](#usbdevice)&gt;&gt; | 设备信息列表。 |
57
58**错误码:**
59
60以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
61
62| 错误码ID | 错误信息                  |
63| -------- | ------------------------- |
64| 801      | Capability not supported. |
65
66**示例:**
67
68```ts
69let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
70console.log(`devicesList = ${devicesList}`);
71/*
72devicesList 返回的数据结构,此处提供一个简单的示例,如下
73[
74  {
75    name: "1-1",
76    serial: "",
77    manufacturerName: "",
78    productName: "",
79    version: "",
80    vendorId: 7531,
81    productId: 2,
82    clazz: 9,
83    subClass: 0,
84    protocol: 1,
85    devAddress: 1,
86    busNum: 1,
87    configs: [
88      {
89        id: 1,
90        attributes: 224,
91        isRemoteWakeup: true,
92        isSelfPowered: true,
93        maxPower: 0,
94        name: "1-1",
95        interfaces: [
96          {
97            id: 0,
98            protocol: 0,
99            clazz: 9,
100            subClass: 0,
101            alternateSetting: 0,
102            name: "1-1",
103            endpoints: [
104              {
105                address: 129,
106                attributes: 3,
107                interval: 12,
108                maxPacketSize: 4,
109                direction: 128,
110                number: 1,
111                type: 3,
112                interfaceId: 0,
113              },
114            ],
115          },
116        ],
117      },
118    ],
119  },
120]
121*/
122```
123
124## usbManager.connectDevice
125
126connectDevice(device: USBDevice): Readonly&lt;USBDevicePipe&gt;
127
128根据getDevices()返回的设备信息打开USB设备。如果USB服务异常,可能返回`undefined`,注意需要对接口返回值做判空处理。
129
1301. 需要调用[usbManager.getDevices](#usbmanagergetdevices)获取设备信息以及device;
1312. 调用[usbManager.requestRight](#usbmanagerrequestright)请求使用该设备的权限。
132
133**系统能力:**  SystemCapability.USB.USBManager
134
135**参数:**
136
137| 参数名 | 类型 | 必填 | 说明 |
138| -------- | -------- | -------- | ---------------- |
139| device | [USBDevice](#usbdevice) | 是 | USB设备信息,用getDevices获取的busNum和devAddress确定设备,当前其他属性不做处理。 |
140
141**返回值:**
142
143| 类型 | 说明 |
144| -------- | -------- |
145| Readonly&lt;[USBDevicePipe](#usbdevicepipe)&gt; | 指定的传输通道对象。 |
146
147**错误码:**
148
149以下错误码的详细介绍参见[USB服务错误码](errorcode-usb.md)。
150
151| 错误码ID | 错误信息                                                     |
152| -------- | ------------------------------------------------------------ |
153| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
154| 801      | Capability not supported.                                    |
155| 14400001 | Access right denied. Call requestRight to get the USBDevicePipe access right first.|
156
157**示例:**
158
159```ts
160let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
161if (!devicesList || devicesList.length == 0) {
162  console.log(`device list is empty`);
163  return;
164}
165
166let device: usbManager.USBDevice = devicesList[0];
167usbManager.requestRight(device.name);
168let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device);
169console.log(`devicepipe = ${devicepipe}`);
170```
171
172## usbManager.hasRight
173
174hasRight(deviceName: string): boolean
175
176判断是否有权访问该设备。
177
178如果“使用者”(如各种App或系统)有权访问设备则返回true;无权访问设备则返回false。
179
180**系统能力:**  SystemCapability.USB.USBManager
181
182**参数:**
183
184| 参数名 | 类型 | 必填 | 说明 |
185| -------- | -------- | -------- | -------- |
186| deviceName | string | 是 | 设备名称,来自getDevices获取的设备列表。 |
187
188**返回值:**
189
190| 类型 | 说明 |
191| -------- | -------- |
192| boolean | true表示有访问设备的权限,false表示没有访问设备的权限。调用失败返回其他错误码如下:<br>- 88080385:接口未初始化。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发送错误。|
193
194**错误码:**
195
196以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
197
198| 错误码ID | 错误信息                                                     |
199| -------- | ------------------------------------------------------------ |
200| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
201| 801      | Capability not supported.                                    |
202
203**示例:**
204
205```ts
206let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
207if (!devicesList || devicesList.length == 0) {
208  console.log(`device list is empty`);
209  return;
210}
211
212let device: usbManager.USBDevice = devicesList[0];
213usbManager.requestRight(device.name);
214let right: boolean = usbManager.hasRight(device.name);
215console.log(`${right}`);
216```
217
218## usbManager.requestRight
219
220requestRight(deviceName: string): Promise&lt;boolean&gt;
221
222请求软件包的临时权限以访问设备。使用Promise异步回调。系统应用默认拥有访问设备权限,无需调用此接口申请。
223
224**系统能力:**  SystemCapability.USB.USBManager
225
226**参数:**
227
228| 参数名 | 类型 | 必填 | 说明 |
229| -------- | -------- | -------- | -------- |
230| deviceName | string | 是 | 设备名称,来自getDevices获取的设备列表。|
231
232**返回值:**
233
234| 类型 | 说明 |
235| -------- | -------- |
236| Promise&lt;boolean&gt; | Promise对象,返回临时权限的申请结果。返回true表示临时权限申请成功;返回false则表示临时权限申请失败。|
237
238**错误码:**
239
240以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
241
242| 错误码ID | 错误信息                                                     |
243| -------- | ------------------------------------------------------------ |
244| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
245| 801      | Capability not supported.                                    |
246
247**示例:**
248
249```ts
250let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
251if (!devicesList || devicesList.length == 0) {
252  console.log(`device list is empty`);
253  return;
254}
255
256let device: usbManager.USBDevice = devicesList[0];
257usbManager.requestRight(device.name).then(ret => {
258  console.log(`requestRight = ${ret}`);
259});
260```
261
262## usbManager.removeRight
263
264removeRight(deviceName: string): boolean
265
266移除软件包访问设备的权限。系统应用默认拥有访问设备权限,调用此接口不会产生影响。
267
268**系统能力:**  SystemCapability.USB.USBManager
269
270**参数:**
271
272| 参数名 | 类型 | 必填 | 说明 |
273| -------- | -------- | -------- | -------- |
274| deviceName | string | 是 | 设备名称,来自getDevices获取的设备列表。|
275
276**返回值:**
277
278| 类型 | 说明 |
279| -------- | -------- |
280| boolean | 返回权限移除结果。返回true表示权限移除成功;返回false则表示权限移除失败。调用失败返回其他错误码如下:<br>- 88080382:接口操作过程中遇到无效值或参数。<br>- 88080385:接口未初始化。<br>- 88080392:写入接口数据包过程发生错误。<br>- 88080393:读取接口数据包过程发送错误。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。|
281
282**错误码:**
283
284以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
285
286| 错误码ID | 错误信息                                                     |
287| -------- | ------------------------------------------------------------ |
288| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
289| 801      | Capability not supported.                                    |
290
291**示例:**
292
293```ts
294let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
295if (!devicesList || devicesList.length == 0) {
296  console.log(`device list is empty`);
297  return;
298}
299
300let device: usbManager.USBDevice = devicesList[0];
301if (usbManager.removeRight(device.name)) {
302  console.log(`Succeed in removing right`);
303}
304```
305
306## usbManager.claimInterface
307
308claimInterface(pipe: USBDevicePipe, iface: USBInterface, force ?: boolean): number
309
310声明对USB设备某个接口的控制权。
311
312> **说明:**
313>
314> 在USB编程中,claim interface是一个常见操作,指的是应用程序请求操作系统将某个USB接口从内核驱动中释放并交由用户空间程序控制。<br>
315> 下面用到的claim通信接口都表示claim interface操作。
316
317**系统能力:**  SystemCapability.USB.USBManager
318
319**参数:**
320
321| 参数名 | 类型 | 必填 | 说明 |
322| -------- | -------- | -------- | -------- |
323| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。|
324| iface | [USBInterface](#usbinterface) | 是 | 用于确定需要获取接口的索引,需要调用getDevices获取设备信息并通过id确定唯一接口。|
325| force | boolean | 否 | 可选参数,是否强制获取。默认值为false&nbsp;,表示不强制获取,用户按需选择。|
326
327**返回值:**
328
329| 类型 | 说明 |
330| -------- | -------- |
331| number | claim通信接口成功返回0;claim通信接口失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。|
332
333**错误码:**
334
335以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
336
337| 错误码ID | 错误信息                                                     |
338| -------- | ------------------------------------------------------------ |
339| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
340| 801      | Capability not supported.                                    |
341
342**示例:**
343
344```ts
345let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
346if (!devicesList || devicesList.length == 0) {
347  console.log(`device list is empty`);
348  return;
349}
350
351let device: usbManager.USBDevice = devicesList[0];
352usbManager.requestRight(device.name);
353let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device);
354let interfaces: usbManager.USBInterface = device.configs[0].interfaces[0];
355let ret: number= usbManager.claimInterface(devicepipe, interfaces);
356console.log(`claimInterface = ${ret}`);
357```
358
359## usbManager.releaseInterface
360
361releaseInterface(pipe: USBDevicePipe, iface: USBInterface): number
362
363释放claim过的通信接口。
364
365> **说明:**
366>
367> 在调用该接口前需要通过[usbManager.claimInterface](#usbmanagerclaiminterface)claim通信接口。
368
369**系统能力:**  SystemCapability.USB.USBManager
370
371**参数:**
372
373| 参数名 | 类型 | 必填 | 说明 |
374| -------- | -------- | -------- | -------- |
375| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。|
376| iface | [USBInterface](#usbinterface) | 是 | 用于确定需要释放接口的索引,需要调用getDevices获取设备信息并通过id确定唯一接口。|
377
378**返回值:**
379
380| 类型 | 说明 |
381| -------- | -------- |
382| number | 释放接口成功返回0;释放接口失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080381:无效的接口操作。<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。|
383
384**错误码:**
385
386以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
387
388| 错误码ID | 错误信息                                                     |
389| -------- | ------------------------------------------------------------ |
390| 401      | Parameter error.Possible causes:1.Mandatory parameters are left unspecified.2.Incorrect parameter types. |
391| 801      | Capability not supported.                                    |
392
393**示例:**
394
395```ts
396let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
397if (!devicesList || devicesList.length == 0) {
398  console.log(`device list is empty`);
399  return;
400}
401
402let device: usbManager.USBDevice = devicesList[0];
403usbManager.requestRight(device.name);
404let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device);
405let interfaces: usbManager.USBInterface = device.configs[0].interfaces[0];
406let ret: number = usbManager.claimInterface(devicepipe, interfaces);
407ret = usbManager.releaseInterface(devicepipe, interfaces);
408console.log(`releaseInterface = ${ret}`);
409```
410
411## usbManager.setConfiguration
412
413setConfiguration(pipe: USBDevicePipe, config: USBConfiguration): number
414
415设置设备配置。
416
417**系统能力:**  SystemCapability.USB.USBManager
418
419**参数:**
420
421| 参数名 | 类型 | 必填 | 说明 |
422| -------- | -------- | -------- | -------- |
423| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。|
424| config | [USBConfiguration](#usbconfiguration) | 是 | 用于确定需要设置的配置,需要调用getDevices获取设备信息并通过id用于确定唯一设置。|
425
426**返回值:**
427
428| 类型 | 说明 |
429| -------- | -------- |
430| number | 设置设备配置成功返回0;设置设备配置失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。<br>- -17:I/O失败。|
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| 801      | Capability not supported.                                    |
440
441**示例:**
442
443```ts
444let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
445if (!devicesList || devicesList.length == 0) {
446  console.log(`device list is empty`);
447  return;
448}
449
450let device: usbManager.USBDevice = devicesList[0];
451usbManager.requestRight(device.name);
452let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device);
453let config: usbManager.USBConfiguration = device.configs[0];
454let ret: number= usbManager.setConfiguration(devicepipe, config);
455console.log(`setConfiguration = ${ret}`);
456```
457
458## usbManager.setInterface
459
460setInterface(pipe: USBDevicePipe, iface: USBInterface): number
461
462设置设备接口。
463
464> **说明:**
465>
466> 一个USB接口可能存在多重选择模式,支持动态切换。使用的场景:数据传输时,通过该接口可重新设置端点,使端点与传输类型匹配。
467>
468> 在调用该接口前需要通过[usbManager.claimInterface](#usbmanagerclaiminterface)claim通信接口。
469
470**系统能力:**  SystemCapability.USB.USBManager
471
472**参数:**
473
474| 参数名 | 类型 | 必填 | 说明 |
475| -------- | -------- | -------- | -------- |
476| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。|
477| iface | [USBInterface](#usbinterface)   | 是 | 用于确定需要设置的接口,需要调用getDevices获取设备信息并通过id和alternateSetting确定唯一接口。|
478
479**返回值:**
480
481| 类型 | 说明 |
482| -------- | -------- |
483| number | 设置设备接口成功返回0;设置设备接口失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。|
484
485**错误码:**
486
487以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
488
489| 错误码ID | 错误信息                                                     |
490| -------- | ------------------------------------------------------------ |
491| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
492| 801      | Capability not supported.                                    |
493
494**示例:**
495
496```ts
497let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
498if (!devicesList || devicesList.length == 0) {
499  console.log(`device list is empty`);
500  return;
501}
502
503let device: usbManager.USBDevice = devicesList[0];
504usbManager.requestRight(device.name);
505let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device);
506let interfaces: usbManager.USBInterface = device.configs[0].interfaces[0];
507let ret: number = usbManager.claimInterface(devicepipe, interfaces);
508ret = usbManager.setInterface(devicepipe, interfaces);
509console.log(`setInterface = ${ret}`);
510```
511
512## usbManager.getRawDescriptor
513
514getRawDescriptor(pipe: USBDevicePipe): Uint8Array
515
516获取原始的USB描述符。如果USB服务异常,可能返回`undefined`,注意需要对接口返回值做判空处理。
517
518**系统能力:**  SystemCapability.USB.USBManager
519
520**参数:**
521
522| 参数名 | 类型 | 必填 | 说明 |
523| -------- | -------- | -------- | -------- |
524| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。|
525
526**返回值:**
527
528| 类型 | 说明 |
529| -------- | -------- |
530| Uint8Array | 返回获取的原始数据;失败返回undefined。 |
531
532**错误码:**
533
534以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
535
536| 错误码ID | 错误信息                                                     |
537| -------- | ------------------------------------------------------------ |
538| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
539| 801      | Capability not supported.                                    |
540
541**示例:**
542
543```ts
544let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
545if (!devicesList || devicesList.length == 0) {
546  console.log(`device list is empty`);
547  return;
548}
549
550usbManager.requestRight(devicesList[0].name);
551let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(devicesList[0]);
552let ret: Uint8Array = usbManager.getRawDescriptor(devicepipe);
553```
554
555## usbManager.getFileDescriptor
556
557getFileDescriptor(pipe: USBDevicePipe): number
558
559获取文件描述符。
560
561**系统能力:**  SystemCapability.USB.USBManager
562
563**参数:**
564
565| 参数名 | 类型 | 必填 | 说明 |
566| -------- | -------- | -------- | -------- |
567| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。|
568
569**返回值:**
570
571| 类型     | 说明                   |
572| ------ | -------------------- |
573| number | 返回设备对应的文件描述符;失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。|
574
575**错误码:**
576
577以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
578
579| 错误码ID | 错误信息                                                     |
580| -------- | ------------------------------------------------------------ |
581| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
582| 801      | Capability not supported.                                    |
583
584**示例:**
585
586```ts
587let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
588if (!devicesList || devicesList.length == 0) {
589  console.log(`device list is empty`);
590  return;
591}
592
593usbManager.requestRight(devicesList[0].name);
594let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(devicesList[0]);
595let ret: number = usbManager.getFileDescriptor(devicepipe);
596console.log(`getFileDescriptor = ${ret}`);
597let closeRet: number = usbManager.closePipe(devicepipe);
598console.log(`closePipe = ${closeRet}`);
599```
600
601## usbManager.controlTransfer<sup>(deprecated)</sup>
602
603controlTransfer(pipe: USBDevicePipe, controlparam: USBControlParams, timeout ?: number): Promise&lt;number&gt;
604
605控制传输。
606
607> **说明:**
608>
609> 从 API version 9开始支持,从API version 12开始废弃。建议使用 [usbControlTransfer](#usbmanagerusbcontroltransfer12) 替代。
610
611**系统能力:**  SystemCapability.USB.USBManager
612
613**参数:**
614
615| 参数名 | 类型 | 必填 | 说明 |
616| -------- | -------- | -------- | -------- |
617| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定设备,需要调用connectDevice获取。|
618| controlparam | [USBControlParams](#usbcontrolparamsdeprecated) | 是 | 控制传输参数,按需设置参数,参数传参类型请参考USB协议。|
619| timeout | number | 否 | 超时时间(单位:ms),可选参数,默认为0不超时,用户按需选择。 |
620
621**返回值:**
622
623| 类型 | 说明 |
624| -------- | -------- |
625| Promise&lt;number&gt; | Promise对象,获取传输或接收到的数据块大小。失败返回其他错误码如下:<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。|
626
627**错误码:**
628
629以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
630
631| 错误码ID | 错误信息                                                     |
632| -------- | ------------------------------------------------------------ |
633| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
634
635**示例:**
636
637```ts
638class PARA {
639  request: number = 0
640  reqType: usbManager.USBControlRequestType = 0
641  target: usbManager.USBRequestTargetType = 0
642  value: number = 0
643  index: number = 0
644  data: Uint8Array = new Uint8Array()
645}
646
647let param: PARA = {
648  request: 0x06,
649  reqType: 0x80,
650  target:0,
651  value: 0x01 << 8 | 0,
652  index: 0,
653  data: new Uint8Array(18)
654};
655
656let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
657if (!devicesList || devicesList.length == 0) {
658  console.log(`device list is empty`);
659  return;
660}
661
662usbManager.requestRight(devicesList[0].name);
663let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(devicesList[0]);
664usbManager.controlTransfer(devicepipe, param).then((ret: number) => {
665console.log(`controlTransfer = ${ret}`);
666})
667```
668
669## usbManager.usbControlTransfer<sup>12+</sup>
670
671usbControlTransfer(pipe: USBDevicePipe, requestparam: USBDeviceRequestParams, timeout ?: number): Promise&lt;number&gt;
672
673控制传输。
674
675**系统能力:**  SystemCapability.USB.USBManager
676
677**参数:**
678
679| 参数名 | 类型 | 必填 | 说明 |
680| -------- | -------- | -------- | -------- |
681| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定设备。 |
682| requestparam | [USBDeviceRequestParams](#usbdevicerequestparams12) | 是 | 控制传输参数,按需设置参数,参数传参类型请参考USB协议。 |
683| timeout | number | 否 | 超时时间(单位:ms),可选参数,默认为0不超时。 |
684
685**返回值:**
686
687| 类型 | 说明 |
688| -------- | -------- |
689| Promise&lt;number&gt; | Promise对象,获取传输或接收到的数据块大小。失败返回其他错误码如下:<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。|
690
691**错误码:**
692
693以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
694
695| 错误码ID | 错误信息                                                     |
696| -------- | ------------------------------------------------------------ |
697| 401      | Parameter error.Possible causes:1.Mandatory parameters are left unspecified.2.Incorrect parameter types. |
698| 801      | Capability not supported.                                    |
699
700**示例:**
701
702```ts
703class PARA {
704  bmRequestType: number = 0
705  bRequest: number = 0
706  wValue: number = 0
707  wIndex: number = 0
708  wLength: number = 0
709  data: Uint8Array = new Uint8Array()
710}
711
712let param: PARA = {
713  bmRequestType: 0x80,
714  bRequest: 0x06,
715
716  wValue:0x01 << 8 | 0,
717  wIndex: 0,
718  wLength: 18,
719  data: new Uint8Array(18)
720};
721
722let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
723if (!devicesList || devicesList.length == 0) {
724  console.log(`device list is empty`);
725  return;
726}
727
728usbManager.requestRight(devicesList[0].name);
729let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(devicesList[0]);
730usbManager.usbControlTransfer(devicepipe, param).then((ret: number) => {
731console.log(`usbControlTransfer = ${ret}`);
732})
733```
734
735## usbManager.bulkTransfer
736
737bulkTransfer(pipe: USBDevicePipe, endpoint: USBEndpoint, buffer: Uint8Array, timeout ?: number): Promise&lt;number&gt;
738
739批量传输。
740
741> **说明:**
742>
743> 单次批量传输的传输数据总量(包括pipe、endpoint、buffer、timeout)请控制在200KB以下。
744>
745> 在调用接口前需要通过[usbManager.claimInterface](#usbmanagerclaiminterface)claim通信接口。
746
747**系统能力:**  SystemCapability.USB.USBManager
748
749**参数:**
750
751| 参数名 | 类型 | 必填 | 说明 |
752| -------- | -------- | -------- | -------- |
753| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定设备,需要调用connectDevice获取。|
754| endpoint | [USBEndpoint](#usbendpoint) | 是 | 用于确定传输的端口,需要调用getDevices获取设备信息列表以及endpoint,address用于确定端点地址,direction用于确定端点的方向,interfaceId用于确定所属接口,当前其他属性不做处理。|
755| buffer | Uint8Array | 是 | 用于写入或读取数据的缓冲区。 |
756| timeout | number | 否 | 超时时间(单位:ms),可选参数,默认为0不超时,用户按需选择。 |
757
758**返回值:**
759
760| 类型 | 说明 |
761| -------- | -------- |
762| Promise&lt;number&gt; | Promise对象,获取传输或接收到的数据块大小。失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080385:接口未初始化。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080492:写入服务数据包过程发生错误。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。<br>- -3:参数无效。<br>- -202:设备未找到。|
763
764**错误码:**
765
766以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
767
768| 错误码ID | 错误信息                                                     |
769| -------- | ------------------------------------------------------------ |
770| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
771| 801      | Capability not supported.                                    |
772
773**示例:**
774
775> **说明:**
776>
777> 以下示例代码只是调用bulkTransfer接口的必要流程,实际调用时,设备开发者需要遵循设备相关协议进行调用,确保数据的正确传输和设备的兼容性。
778
779```ts
780//usbManager.getDevices 接口返回数据集合,取其中一个设备对象,并获取权限。
781//把获取到的设备对象作为参数传入usbManager.connectDevice;当usbManager.connectDevice接口成功返回之后;
782//才可以调用第三个接口usbManager.claimInterface.usbManager.claimInterface 调用成功以后,再调用该接口。
783let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
784if (!devicesList || devicesList.length == 0) {
785  console.log(`device list is empty`);
786  return;
787}
788
789let device: usbManager.USBDevice = devicesList[0];
790usbManager.requestRight(device.name);
791
792let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device);
793for (let i = 0; i < device.configs[0].interfaces.length; i++) {
794  if (device.configs[0].interfaces[i].endpoints[0].attributes == 2) {
795    let endpoint: usbManager.USBEndpoint = device.configs[0].interfaces[i].endpoints[0];
796    let interfaces: usbManager.USBInterface = device.configs[0].interfaces[i];
797    let ret: number = usbManager.claimInterface(devicepipe, interfaces);
798    let buffer =  new Uint8Array(128);
799    usbManager.bulkTransfer(devicepipe, endpoint, buffer).then((ret: number) => {
800      console.log(`bulkTransfer = ${ret}`);
801    });
802  }
803}
804```
805
806## usbManager.usbSubmitTransfer<sup>18+</sup>
807
808usbSubmitTransfer(transfer: UsbDataTransferParams): void
809
810提交异步传输请求。
811
812> **说明:**
813>
814> 本接口为异步接口,调用后立刻返回,实际读写操作的结果以回调的方式返回。
815>
816> 在调用该接口前需要通过[usbManager.claimInterface](#usbmanagerclaiminterface)claim通信接口。
817
818**系统能力:**  SystemCapability.USB.USBManager
819
820**参数:**
821
822| 参数名 | 类型 | 必填 | 说明 |
823| -------- | -------- | -------- | -------- |
824| transfer | [UsbDataTransferParams](#usbdatatransferparams18) | 是 | 作为通用USB数据传输接口,客户端需要填充这个对象中的参数,用以发起传输请求。|
825
826**错误码:**
827
828以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
829
830| 错误码ID | 错误信息                                                     |
831| -------- | ------------------------------------------------------------ |
832| 801 | Capability not supported. |
833| 14400001 | Access right denied. Call requestRight to get the USBDevicePipe access right first. |
834| 14400007 | Resource busy. Possible causes: 1. The transfer has already been submitted. 2. The interface is claimed by another program or driver.|
835| 14400008 | No such device (it may have been disconnected). |
836| 14400009 | Insufficient memory. Possible causes: 1. Memory allocation failed. |
837| 14400012 | Transmission I/O error. |
838
839**示例:**
840
841> **说明:**
842>
843> 以下示例代码需要放入具体的方法中执行,只是调用usbSubmitTransfer接口的必要流程,实际调用时,设备开发者需要遵循设备相关协议进行调用,确保数据的正确传输和设备的兼容性。
844
845<!--code_no_check-->
846```ts
847//usbManager.getDevices 接口返回数据集合,取其中一个设备对象,并获取权限。
848//把获取到的设备对象作为参数传入usbManager.connectDevice;当usbManager.connectDevice接口成功返回之后;
849//才可以调用第三个接口usbManager.claimInterface.usbManager.claimInterface 调用成功以后,再调用该接口。
850let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
851if (!devicesList || devicesList.length == 0) {
852  console.log(`device list is empty`);
853  return;
854}
855let device: usbManager.USBDevice = devicesList[0];
856usbManager.requestRight(device.name);
857let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device);
858//获取endpoint端点地址。
859let endpoint = device.configs[0].interfaces[0]?.endpoints.find((value) => {
860  return value.direction === 0 && value.type === 2
861})
862//获取设备的第一个id。
863let ret: number = usbManager.claimInterface(devicepipe, device.configs[0].interfaces[0], true);
864
865let transferParams: usbManager.UsbDataTransferParams = {
866  devPipe: devicepipe,
867  flags: usbManager.UsbTransferFlags.USB_TRANSFER_SHORT_NOT_OK,
868  endpoint: 1,
869  type: usbManager.UsbEndpointTransferType.TRANSFER_TYPE_BULK,
870  timeout: 2000,
871  length: 10,
872  callback: () => {},
873  userData: new Uint8Array(10),
874  buffer: new Uint8Array(10),
875  isoPacketCount: 0,
876};
877try {
878  transferParams.endpoint=endpoint?.address as number;
879  transferParams.callback=(err, callBackData: usbManager.SubmitTransferCallback)=>{
880    console.info('callBackData =' +JSON.stringify(callBackData));
881  }
882  usbManager.usbSubmitTransfer(transferParams);
883  console.info('USB transfer request submitted.');
884} catch (error) {
885  console.error('USB transfer failed:', error);
886}
887```
888
889## usbManager.usbCancelTransfer<sup>18+</sup>
890
891usbCancelTransfer(transfer: UsbDataTransferParams): void
892
893取消异步传输请求。
894
895> **说明:**
896>
897> 该接口的主要作用是主动取消尚未完成的USB数据传输请求(如usbSubmitTransfer提交的传输)。<br>
898> 在调用该接口前需要通过[usbManager.claimInterface](#usbmanagerclaiminterface)claim通信接口。
899
900**系统能力:**  SystemCapability.USB.USBManager
901
902**参数:**
903
904| 参数名 | 类型 | 必填 | 说明 |
905| -------- | -------- | -------- | -------- |
906| transfer | [UsbDataTransferParams](#usbdatatransferparams18) | 是 | 在取消传输的接口中,只需要填充USBDevicePipe和endpoint即可。|
907
908**错误码:**
909
910以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
911
912| 错误码ID | 错误信息                                                     |
913| -------- | ------------------------------------------------------------ |
914| 801 | Capability not supported. |
915| 14400001 | Access right denied. Call requestRight to get the USBDevicePipe access right first. |
916| 14400008 | No such device (it may have been disconnected). |
917| 14400010 | Other USB error. Possible causes:<br>1.Unrecognized discard error code. |
918| 14400011 | The transfer is not in progress, or is already complete or cancelled.|
919
920**示例:**
921
922> **说明:**
923>
924> 以下示例代码需要放入具体的方法中执行,只是调用usbCancelTransfer接口的必要流程,实际调用时,设备开发者需要遵循设备相关协议进行调用,确保数据的正确传输和设备的兼容性。
925
926<!--code_no_check-->
927```ts
928//usbManager.getDevices 接口返回数据集合,取其中一个设备对象,并获取权限。
929//把获取到的设备对象作为参数传入usbManager.connectDevice;当usbManager.connectDevice接口成功返回之后;
930//才可以调用第三个接口usbManager.claimInterface.usbManager.claimInterface 调用成功以后,再调用该接口。
931let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
932if (!devicesList || devicesList.length == 0) {
933  console.log(`device list is empty`);
934  return;
935}
936let device: usbManager.USBDevice = devicesList[0];
937usbManager.requestRight(device.name);
938let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(device);
939//获取endpoint端点地址。
940let endpoint = device.configs[0].interfaces[0]?.endpoints.find((value) => {
941  return value.direction === 0 && value.type === 2
942})
943//获取设备的第一个id。
944let ret: number = usbManager.claimInterface(devicepipe, device.configs[0].interfaces[0], true);
945let transferParams: usbManager.UsbDataTransferParams = {
946  devPipe: devicepipe,
947  flags: usbManager.UsbTransferFlags.USB_TRANSFER_SHORT_NOT_OK,
948  endpoint: 1,
949  type: usbManager.UsbEndpointTransferType.TRANSFER_TYPE_BULK,
950  timeout: 2000,
951  length: 10,
952  callback: () => {},
953  userData: new Uint8Array(10),
954  buffer: new Uint8Array(10),
955  isoPacketCount: 0,
956};
957try {
958  transferParams.endpoint=endpoint?.address as number;
959  transferParams.callback=(err, callBackData: usbManager.SubmitTransferCallback)=>{
960    console.info('callBackData =' +JSON.stringify(callBackData));
961  }
962  usbManager.usbSubmitTransfer(transferParams);
963  usbManager.usbCancelTransfer(transferParams);
964  console.info('USB transfer request submitted.');
965} catch (error) {
966  console.error('USB transfer failed:', error);
967}
968```
969
970## usbManager.closePipe
971
972closePipe(pipe: USBDevicePipe): number
973
974关闭设备消息控制通道。
975
9761. 需要调用[usbManager.getDevices](#usbmanagergetdevices)获取设备列表;
9772. 调用[usbManager.requestRight](#usbmanagerrequestright)获取设备请求权限;
9783. 调用[usbManager.connectDevice](#usbmanagerconnectdevice)得到devicepipe作为参数。
979
980**系统能力:**  SystemCapability.USB.USBManager
981
982**参数:**
983
984| 参数名 | 类型 | 必填 | 说明 |
985| -------- | -------- | -------- | -------- |
986| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定USB设备消息控制通道,需要调用connectDevice获取。|
987
988**返回值:**
989
990| 类型 | 说明 |
991| -------- | -------- |
992| number | 关闭设备消息控制通道成功返回0;关闭设备消息控制通道失败返回其他错误码如下:<br>- 63:数据量超过预期的最大值。<br>- 88080393:读取接口数据包过程发生错误。<br>- 88080482:服务过程中遇到无效值或参数。<br>- 88080484:没有权限。<br>- 88080493:读取服务数据包过程发生错误。<br>- 88080497:服务内部逻辑执行发生错误。<br>- -1:调用底层接口失败。 |
993
994**错误码:**
995
996以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
997
998| 错误码ID | 错误信息                                                     |
999| -------- | ------------------------------------------------------------ |
1000| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
1001| 801      | Capability not supported.                                    |
1002
1003**示例:**
1004
1005```ts
1006let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
1007if (!devicesList || devicesList.length == 0) {
1008  console.log(`device list is empty`);
1009  return;
1010}
1011
1012usbManager.requestRight(devicesList[0].name);
1013let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(devicesList[0]);
1014let ret: number = usbManager.closePipe(devicepipe);
1015console.log(`closePipe = ${ret}`);
1016```
1017
1018## usbManager.hasAccessoryRight<sup>14+</sup>
1019
1020hasAccessoryRight(accessory: USBAccessory): boolean
1021
1022检查应用程序是否有权访问USB配件。
1023
1024需要调用[usbManager.getAccessoryList](#usbmanagergetaccessorylist14)获取配件列表,得到[USBAccessory](#usbaccessory14)作为参数。
1025
1026**系统能力:**  SystemCapability.USB.USBManager
1027
1028**参数:**
1029
1030| 参数名    | 类型         | 必填 | 说明                                  |
1031| --------- | ------------ | ---- | ------------------------------------- |
1032| accessory | [USBAccessory](#usbaccessory14) | 是   | USB配件,需要通过[getAccessoryList](#usbmanagergetaccessorylist14)获取。 |
1033
1034**返回值:**
1035
1036| 类型    | 说明                          |
1037| ------- | ----------------------------- |
1038| boolean | true表示应用程序有权访问USB配件,false表示应用程序无权访问USB配件。 |
1039
1040**错误码:**
1041
1042以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
1043
1044| 错误码ID | 错误信息                                                     |
1045| -------- | ------------------------------------------------------------ |
1046| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
1047| 801      | Capability not supported.                                    |
1048| 14400004 | Service exception. Possible causes: 1. No accessory is plugged in. |
1049| 14400005 | Database operation exception.                                |
1050| 14401001 | The target USBAccessory not matched.                         |
1051
1052**示例:**
1053
1054```ts
1055import { hilog } from '@kit.PerformanceAnalysisKit';
1056try {
1057  let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList()
1058  let flag = usbManager.hasAccessoryRight(accList[0])
1059  hilog.info(0, 'testTag ui', `hasAccessoryRight success, ret:${flag}`)
1060} catch (error) {
1061  hilog.info(0, 'testTag ui', `hasAccessoryRight error ${error.code}, message is ${error.message}`)
1062}
1063```
1064
1065## usbManager.requestAccessoryRight<sup>14+</sup>
1066
1067requestAccessoryRight(accessory: USBAccessory): Promise&lt;boolean&gt;
1068
1069为指定应用程序申请访问USB配件的访问权限。
1070
1071需要调用[usbManager.getAccessoryList](#usbmanagergetaccessorylist14)获取配件列表,得到[USBAccessory](#usbaccessory14)作为参数。
1072
1073**系统能力:**  SystemCapability.USB.USBManager
1074
1075**参数:**
1076
1077| 参数名    | 类型         | 必填 | 说明                                  |
1078| --------- | ------------ | ---- | ------------------------------------- |
1079| accessory | [USBAccessory](#usbaccessory14) | 是   | USB配件,需要通过[getAccessoryList](#usbmanagergetaccessorylist14)获取。 |
1080
1081**返回值:**
1082
1083| 类型             | 说明                          |
1084| ---------------- | ----------------------------- |
1085| Promise&lt;boolean&gt; | Promise对象,返回应用程序访问配件权限的申请结果。返回true表示权限申请成功;返回false表示权限申请失败。 |
1086
1087**错误码:**
1088
1089以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
1090
1091| 错误码ID | 错误信息                                                     |
1092| -------- | ------------------------------------------------------------ |
1093| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
1094| 801      | Capability not supported.                                    |
1095| 14400004 | Service exception. Possible causes: 1. No accessory is plugged in. |
1096| 14400005 | Database operation exception.                                |
1097| 14401001 | The target USBAccessory not matched.                         |
1098
1099**示例:**
1100
1101```ts
1102import { hilog } from '@kit.PerformanceAnalysisKit';
1103try {
1104  let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList()
1105  let flag = usbManager.requestAccessoryRight(accList[0])
1106  hilog.info(0, 'testTag ui', `requestAccessoryRight success, ret:${flag}`)
1107} catch (error) {
1108  hilog.info(0, 'testTag ui', `requestAccessoryRight error ${error.code}, message is ${error.message}`)
1109}
1110```
1111
1112## usbManager.cancelAccessoryRight<sup>14+</sup>
1113
1114cancelAccessoryRight(accessory: USBAccessory): void
1115
1116取消当前应用程序访问USB配件的权限。
1117
1118需要调用[usbManager.getAccessoryList](#usbmanagergetaccessorylist14)获取配件列表,得到[USBAccessory](#usbaccessory14)作为参数。
1119
1120**系统能力:**  SystemCapability.USB.USBManager
1121
1122**参数:**
1123
1124| 参数名    | 类型         | 必填 | 说明                                  |
1125| --------- | ------------ | ---- | ------------------------------------- |
1126| accessory | [USBAccessory](#usbaccessory14) | 是   | USB配件,需要通过[getAccessoryList](#usbmanagergetaccessorylist14)获取。 |
1127
1128**错误码:**
1129
1130以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
1131
1132| 错误码ID | 错误信息                                                     |
1133| -------- | ------------------------------------------------------------ |
1134| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
1135| 801      | Capability not supported.                                    |
1136| 14400004 | Service exception. Possible causes: 1. No accessory is plugged in. |
1137| 14400005 | Database operation exception.                                |
1138| 14401001 | The target USBAccessory not matched.                         |
1139
1140**示例:**
1141
1142```ts
1143import { hilog } from '@kit.PerformanceAnalysisKit';
1144try {
1145  let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList()
1146  let flag = usbManager.requestAccessoryRight(accList[0])
1147  usbManager.cancelAccessoryRight(accList[0])
1148  hilog.info(0, 'testTag ui', `cancelAccessoryRight success`)
1149} catch (error) {
1150  hilog.info(0, 'testTag ui', `cancelAccessoryRight error ${error.code}, message is ${error.message}`)
1151}
1152```
1153
1154## usbManager.getAccessoryList<sup>14+</sup>
1155
1156getAccessoryList(): Array<Readonly&lt;USBAccessory&gt;>
1157
1158获取当前已接入主机的USB配件列表。
1159
1160**系统能力:**  SystemCapability.USB.USBManager
1161
1162**返回值:**
1163
1164| 类型                          | 说明                                               |
1165| ----------------------------- | -------------------------------------------------- |
1166| Array<Readonly&lt;USBAccessory&gt;> | 只读的USB配件列表。当前仅支持列表中包含1个USB配件。 |
1167
1168**错误码:**
1169
1170以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
1171
1172| 错误码ID | 错误信息                                                     |
1173| -------- | ------------------------------------------------------------ |
1174| 801      | Capability not supported.                                    |
1175| 14400004 | Service exception. Possible causes: 1. No accessory is plugged in. |
1176
1177**示例:**
1178
1179```ts
1180import { hilog } from '@kit.PerformanceAnalysisKit';
1181try {
1182  let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList()
1183  hilog.info(0, 'testTag ui', `getAccessoryList success, accList: ${JSON.stringify(accList)}`)
1184} catch (error) {
1185  hilog.info(0, 'testTag ui', `getAccessoryList error ${error.code}, message is ${error.message}`)
1186}
1187```
1188
1189## usbManager.openAccessory<sup>14+</sup>
1190
1191openAccessory(accessory: USBAccessory): USBAccessoryHandle
1192
1193获取配件句柄并打开配件文件描述符。之后可以通过CoreFileKit提供的read/write接口和配件进行通信。
1194
1195需要调用[usbManager.getAccessoryList](#usbmanagergetaccessorylist14)获取配件列表,得到[USBAccessory](#usbaccessory14)作为参数。
1196
1197**系统能力:**  SystemCapability.USB.USBManager
1198
1199**参数:**
1200
1201| 参数名    | 类型         | 必填 | 说明                                  |
1202| --------- | ------------ | ---- | ------------------------------------- |
1203| accessory | [USBAccessory](#usbaccessory14) | 是   | USB配件,需要通过[getAccessoryList](#usbmanagergetaccessorylist14)获取。 |
1204
1205**返回值:**
1206
1207| 类型               | 说明        |
1208| ------------------ | ----------- |
1209| [USBAccessoryHandle](#usbaccessoryhandle14) | USB配件句柄。 |
1210
1211**错误码:**
1212
1213以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
1214
1215| 错误码ID | 错误信息                                                     |
1216| -------- | ------------------------------------------------------------ |
1217| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
1218| 801      | Capability not supported.                                    |
1219| 14400001 | Access right denied. Call requestRight to get the USBDevicePipe access right first. |
1220| 14400004 | Service exception. Possible causes: 1. No accessory is plugged in. |
1221| 14401001 | The target USBAccessory not matched.                         |
1222| 14401002 | Failed to open the native accessory node.                    |
1223| 14401003 | Cannot reopen the accessory.                                 |
1224
1225**示例:**
1226
1227```ts
1228import { hilog } from '@kit.PerformanceAnalysisKit';
1229import { fileIo as fs } from '@kit.CoreFileKit';
1230try {
1231  let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList()
1232  let flag = usbManager.requestAccessoryRight(accList[0])
1233  let handle = usbManager.openAccessory(accList[0])
1234  hilog.info(0, 'testTag ui', `openAccessory success`)
1235  let arrayBuffer = new ArrayBuffer(4096);
1236  let readLength = fs.readSync(handle.accessoryFd, arrayBuffer, {offset: 0, length: 4096});
1237  hilog.info(0, 'testTag ui', 'readSync ret: ' + readLength.toString(10));
1238} catch (error) {
1239  hilog.info(0, 'testTag ui', `openAccessory error ${error.code}, message is ${error.message}`)
1240}
1241```
1242
1243## usbManager.closeAccessory<sup>14+</sup>
1244
1245closeAccessory(accessoryHandle: USBAccessoryHandle): void
1246
1247关闭配件文件描述符。
1248
1249需要调用[usbManager.openAccessory](#usbmanageropenaccessory14)获取配件列表,得到[USBAccessoryHandle](#usbaccessoryhandle14)作为参数。
1250
1251**系统能力:**  SystemCapability.USB.USBManager
1252
1253**参数:**
1254
1255| 参数名          | 类型               | 必填 | 说明                                   |
1256| --------------- | ------------------ | ---- | -------------------------------------- |
1257| accessoryHandle | [USBAccessoryHandle](#usbaccessoryhandle14) | 是   | USB配件句柄。需要通过[openAccessory](#usbmanageropenaccessory14)获取。 |
1258
1259**错误码:**
1260
1261以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
1262
1263| 错误码ID | 错误信息                                                     |
1264| -------- | ------------------------------------------------------------ |
1265| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
1266| 801      | Capability not supported.                                    |
1267| 14400004 | Service exception. Possible causes: 1. No accessory is plugged in. |
1268
1269**示例:**
1270
1271```ts
1272import { hilog } from '@kit.PerformanceAnalysisKit';
1273try {
1274  let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList()
1275  let flag = usbManager.requestAccessoryRight(accList[0])
1276  let handle = usbManager.openAccessory(accList[0])
1277  usbManager.closeAccessory(handle)
1278  hilog.info(0, 'testTag ui', `closeAccessory success`)
1279} catch (error) {
1280  hilog.info(0, 'testTag ui', `closeAccessory error ${error.code}, message is ${error.message}`)
1281}
1282```
1283
1284## usbManager.resetUsbDevice<sup>20+</sup>
1285
1286resetUsbDevice(pipe: USBDevicePipe): boolean
1287
1288重置USB外设。
1289
1290> **说明:**
1291>
1292> 本接口调用后会重置此前设置的配置和替换接口,请在调用之前确认相关业务已结束。
1293
1294**系统能力:**  SystemCapability.USB.USBManager
1295
1296**参数:**
1297
1298| 参数名 | 类型 | 必填 | 说明 |
1299| -------- | -------- | -------- | -------- |
1300| pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。|
1301
1302**返回值:**
1303
1304| 类型 | 说明 |
1305| -------- | -------- |
1306| boolean | true表示重置设备成功,false表示重置设备失败。 |
1307
1308**错误码:**
1309
1310以下错误码的详细介绍请参见[USB服务错误码](errorcode-usb.md)。
1311
1312| 错误码ID | 错误信息                                                     |
1313| -------- | ------------------------------------------------------------ |
1314| 801 | Capability not supported. |
1315| 14400001 | Access right denied. Call requestRight to get the USBDevicePipe access right first.|
1316| 14400004 | Service exception. Possible causes: 1. No accessory is plugged in. |
1317| 14400008 | No such device (it may have been disconnected). |
1318| 14400010 | Other USB error. Possible causes:<br>1.Unrecognized discard error code. |
1319| 14400013 | The USBDevicePipe validity check failed. Possible causes:<br>1. The input parameters fail the validation check.<br>2. The call chain used to obtain the input parameters is not reasonable. |
1320
1321**示例:**
1322
1323```ts
1324let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
1325if (!devicesList || devicesList.length == 0) {
1326  console.error(`device list is empty`);
1327  return;
1328}
1329
1330usbManager.requestRight(devicesList[0].name);
1331let devicepipe: usbManager.USBDevicePipe = usbManager.connectDevice(devicesList[0]);
1332try {
1333  let ret: boolean = usbManager.resetUsbDevice(devicepipe);
1334  console.info(`resetUsbDevice  = ${ret}`);
1335} catch (err) {
1336  console.error(`resetUsbDevice failed: ` + err);
1337}
1338```
1339
1340## USBEndpoint
1341
1342通过USB发送和接收数据的端口。通过[USBInterface](#usbinterface)获取。
1343
1344>**说明:**
1345>
1346> 主机控制器按照Endpoint类型调度。
1347>
1348> 协议层打包时依赖type决定传输特性。
1349
1350**系统能力:** SystemCapability.USB.USBManager
1351
1352| 名称            | 类型                                        | 必填            |说明            |
1353| ------------- | ------------------------------------------- | ------------- |------------- |
1354| address       | number                                      | 是 |端点地址。         |
1355| attributes    | number                                      | 是 |端点属性。         |
1356| interval      | number                                      | 是 |端点间隔。         |
1357| maxPacketSize | number                                      | 是 |端点最大数据包大小。    |
1358| direction     | [USBRequestDirection](#usbrequestdirection) | 是 |端点的方向。        |
1359| number        | number                                      | 是 |端点号。          |
1360| type          | number                                      | 是 |端点类型。取值见[UsbEndpointTransferType](#usbendpointtransfertype18)         |
1361| interfaceId   | number                                      | 是 |端点所属的接口的唯一标识。 |
1362
1363## USBInterface
1364
1365一个[USBConfiguration](#usbconfiguration)中可以含有多个USBInterface,每个USBInterface提供一个功能。
1366
1367**系统能力:** SystemCapability.USB.USBManager
1368
1369| 名称               | 类型                                     | 必填            |说明                    |
1370| ---------------- | ---------------------------------------- | ------------- |--------------------- |
1371| id               | number                                   | 是 |接口的唯一标识。              |
1372| protocol         | number                                   | 是 |接口的协议。                |
1373| clazz            | number                                   | 是 |设备类型。                 |
1374| subClass         | number                                   | 是 |设备子类。                 |
1375| alternateSetting | number                                   | 是 |在同一个接口中的多个描述符中进行切换设置。值的大小表示支持可选模式个数,其中0表示不支持可选模式。 |
1376| name             | string                                   | 是 |接口名称。                 |
1377| endpoints        | Array&lt;[USBEndpoint](#usbendpoint)&gt; | 是 |当前接口所包含的端点。           |
1378
1379## USBConfiguration
1380
1381USB配置,一个[USBDevice](#usbdevice)中可以含有多个配置。
1382
1383**系统能力:** SystemCapability.USB.USBManager
1384
1385| 名称             | 类型                                             | 必填  |说明              |
1386| -------------- | ------------------------------------------------ | --------------- |--------------- |
1387| id             | number                                           | 是 |配置的唯一标识。        |
1388| attributes     | number                                           | 是 |配置的属性。          |
1389| maxPower       | number                                           | 是 |最大功耗,以毫安为单位。    |
1390| name           | string                                           | 是 |配置的名称,可以为空。     |
1391| isRemoteWakeup | boolean                                          | 是 |检查当前配置是否支持远程唤醒。 |
1392| isSelfPowered  | boolean                                          | 是 | 检查当前配置是否支持独立电源。 |
1393| interfaces     | Array&nbsp;&lt;[USBInterface](#usbinterface)&gt; | 是 |配置支持的接口属性。      |
1394
1395## USBDevice
1396
1397USB设备信息。
1398
1399**系统能力:** SystemCapability.USB.USBManager
1400
1401| 名称               | 类型                                 | 必填         |说明         |
1402| ---------------- | ------------------------------------ | ---------- |---------- |
1403| busNum           | number                               | 是 |总线地址。      |
1404| devAddress       | number                               | 是 |设备地址。      |
1405| serial           | string                               | 是 |序列号。       |
1406| name             | string                               | 是 |设备名字。      |
1407| manufacturerName | string                               | 是 | 产商信息。      |
1408| productName      | string                               | 是 |产品信息。      |
1409| version          | string                               | 是 |版本。        |
1410| vendorId         | number                               | 是 |厂商ID。      |
1411| productId        | number                               | 是 |产品ID。      |
1412| clazz            | number                               | 是 |设备类。       |
1413| subClass         | number                               | 是 |设备子类。      |
1414| protocol         | number                               | 是 |设备协议码。     |
1415| configs          | Array&lt;[USBConfiguration](#usbconfiguration)&gt; | 是 |设备配置描述符信息。 |
1416
1417## USBDevicePipe
1418
1419USB设备消息传输通道,用于确定设备。
1420
1421**系统能力:** SystemCapability.USB.USBManager
1422
1423| 名称         | 类型   | 必填    |说明    |
1424| ---------- | ------ | ----- |----- |
1425| busNum     | number |是 | 总线地址。 |
1426| devAddress | number |是 | 设备地址。 |
1427
1428## USBControlParams<sup>(deprecated)</sup>
1429
1430控制传输参数。
1431
1432>**说明:**
1433>
1434> 从 API version 9开始支持,从API version 18开始废弃。建议使用 [USBDeviceRequestParams](#usbdevicerequestparams12) 替代。
1435
1436**系统能力:** SystemCapability.USB.USBManager
1437
1438| 名称      | 类型                                            | 必填               |说明               |
1439| ------- | ----------------------------------------------- | ---------------- |---------------- |
1440| request | number                                          | 是   |请求类型。            |
1441| target  | [USBRequestTargetType](#usbrequesttargettype)   | 是   |请求目标类型。          |
1442| reqType | [USBControlRequestType](#usbcontrolrequesttype) | 是   |请求控制类型。          |
1443| value   | number                                          | 是   |请求参数。            |
1444| index   | number                                          | 是   |请求参数value对应的索引值。 |
1445| data    | Uint8Array                                      | 是   |用于写入或读取的缓冲区。     |
1446
1447## USBDeviceRequestParams<sup>12+</sup>
1448
1449控制传输参数。
1450
1451**系统能力:** SystemCapability.USB.USBManager
1452
1453| 名称      | 类型                                            | 必填               |说明               |
1454| ------- | ----------------------------------------------- | ---------------- |---------------- |
1455| bmRequestType | number                                    | 是   |请求控制类型。            |
1456| bRequest  | number                                        | 是   |请求类型。          |
1457| wValue | number                                           | 是   |请求参数。          |
1458| wIndex   | number                                         | 是   |请求参数value对应的索引值。            |
1459| wLength   | number                                        | 是   |请求数据的长度。 |
1460| data    | Uint8Array                                      | 是   |用于写入或读取的缓冲区。     |
1461
1462## USBRequestTargetType
1463
1464请求目标类型。
1465
1466**系统能力:** SystemCapability.USB.USBManager
1467
1468| 名称                         | 值   | 说明   |
1469| ---------------------------- | ---- | ------ |
1470| USB_REQUEST_TARGET_DEVICE    | 0    | 设备。 |
1471| USB_REQUEST_TARGET_INTERFACE | 1    | 接口。 |
1472| USB_REQUEST_TARGET_ENDPOINT  | 2    | 端点。 |
1473| USB_REQUEST_TARGET_OTHER     | 3    | 其他。 |
1474
1475## USBControlRequestType
1476
1477控制请求类型。
1478
1479**系统能力:** SystemCapability.USB.USBManager
1480
1481| 名称                      | 值   | 说明   |
1482| ------------------------- | ---- | ------ |
1483| USB_REQUEST_TYPE_STANDARD | 0    | 标准。 |
1484| USB_REQUEST_TYPE_CLASS    | 1    | 类。   |
1485| USB_REQUEST_TYPE_VENDOR   | 2    | 厂商。 |
1486
1487## USBRequestDirection
1488
1489请求方向。
1490
1491**系统能力:** SystemCapability.USB.USBManager
1492
1493| 名称                        | 值   | 说明                     |
1494| --------------------------- | ---- | ------------------------ |
1495| USB_REQUEST_DIR_TO_DEVICE   | 0    | 写数据,主设备往从设备。 |
1496| USB_REQUEST_DIR_FROM_DEVICE | 0x80 | 读数据,从设备往主设备。 |
1497
1498## USBAccessory<sup>14+</sup>
1499
1500USB配件信息。
1501
1502**系统能力:** SystemCapability.USB.USBManager
1503
1504| 名称         | 类型   | 必填 | 说明             |
1505| ------------ | ------ | ---- | ---------------- |
1506| manufacturer | string | 是   | 配件的生产厂商。 |
1507| product      | string | 是   | 配件的产品类型。 |
1508| description  | string | 是   | 配件的描述。     |
1509| version      | string | 是   | 配件的版本。     |
1510| serialNumber | string | 是   | 配件的SN号。     |
1511
1512## USBAccessoryHandle<sup>14+</sup>
1513
1514USB配件句柄。
1515
1516**系统能力:** SystemCapability.USB.USBManager
1517
1518| 名称        | 类型   | 必填 | 说明                                      |
1519| ----------- | ------ | ---- | ----------------------------------------- |
1520| accessoryFd | number | 是   | 配件文件描述符。合法的accessoryFd是正整数。 |
1521
1522## UsbDataTransferParams<sup>18+</sup>
1523
1524作为通用USB数据传输接口,客户端需要填充这个对象中的参数,用以发起传输请求。
1525
1526**系统能力:** SystemCapability.USB.USBManager
1527
1528| 名称         | 类型   | 必填    |说明    |
1529| ---------- | ------ | ----- |----- |
1530| devPipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址,需要调用connectDevice获取。 |
1531| flags | [UsbTransferFlags](#usbtransferflags18) |是 | USB传输标志。 |
1532| endpoint | number | 是 | 端点地址,正整数。 |
1533| type | [UsbEndpointTransferType](#usbendpointtransfertype18) |是 | 传输类型。 |
1534| timeout | number | 是 | 超时时间,单位为毫秒。 |
1535| length | number |是 | 数据缓冲区的长度,必须是非负数(期望长度),单位为字节。 |
1536| callback | AsyncCallback<[SubmitTransferCallback](#submittransfercallback18)> |是 | 传输完成时的回调信息。|
1537| userData | Uint8Array | 是 | 用户上下文数据。 |
1538| buffer | Uint8Array | 是 | 用于存储读或者写请求时的数据。 |
1539| isoPacketCount | number | 是 | 实时传输时数据包的数量,仅用于具有实时传输端点的I/O。必须是非负数,单位为个数。 |
1540
1541## UsbTransferFlags<sup>18+</sup>
1542
1543USB传输标志。
1544
1545**系统能力:** SystemCapability.USB.USBManager
1546
1547| 名称                         | 值   | 说明   |
1548| ---------------------------- | ---- | ------ |
1549| USB_TRANSFER_SHORT_NOT_OK    | 0    | 将短帧报告为错误。 |
1550| USB_TRANSFER_FREE_BUFFER | 1    | 自动释放传输缓冲区。 |
1551| USB_TRANSFER_FREE_TRANSFER  | 2    | 完成回调后自动传输。 |
1552| USB_TRANSFER_ADD_ZERO_PACKET     | 3    | 传输将增加一个额外的数据包。 |
1553
1554## UsbEndpointTransferType<sup>18+</sup>
1555
1556Usb传输类型。
1557
1558**系统能力:** SystemCapability.USB.USBManager
1559
1560| 名称                         | 值   | 说明   |
1561| ---------------------------- | ---- | ------ |
1562| TRANSFER_TYPE_ISOCHRONOUS | 0x1    | 实时传输。 |
1563| TRANSFER_TYPE_BULK  | 0x2    | 批量传输。 |
1564| TRANSFER_TYPE_INTERRUPT     | 0x3    | 中断传输。|
1565
1566## SubmitTransferCallback<sup>18+</sup>
1567
1568Usb异步传输回调。
1569
1570**系统能力:** SystemCapability.USB.USBManager
1571
1572| 名称        | 类型 | 必填   | 说明    |
1573| ---------- | ------ | ----- | ------ |
1574| actualLength | number |  是 |读写操作的实际长度值,单位为字节。 |
1575| status | [UsbTransferStatus](#usbtransferstatus18) | 是 |读写操作完成的状态。 |
1576| isoPacketDescs | Array<Readonly<[UsbIsoPacketDescriptor](#usbisopacketdescriptor18)>> | 是 |实时传输的分包信息。 |
1577
1578## UsbTransferStatus<sup>18+</sup>
1579
1580数据处理完成后通过回调返回的状态码。
1581
1582**系统能力:** SystemCapability.USB.USBManager
1583
1584| 名称                         | 值   | 说明   |
1585| ---------------------------- | ---- | ------ |
1586| TRANSFER_COMPLETED    | 0    | 传输完成。|
1587| TRANSFER_ERROR | 1    | 传输失败。 |
1588| TRANSFER_TIMED_OUT  | 2    | 传输超时。 |
1589| TRANSFER_CANCELED     | 3    |传输已被取消。 |
1590| TRANSFER_STALL  | 4    | 检测到暂停(批量/中断端点)。|
1591| TRANSFER_NO_DEVICE     | 5    | 设备已断开。|
1592| TRANSFER_OVERFLOW     | 6    | 设备发送的数据比请求的多。|
1593
1594## UsbIsoPacketDescriptor<sup>18+</sup>
1595
1596实时传输模式回调返回的分包信息。
1597
1598**系统能力:** SystemCapability.USB.USBManager
1599
1600| 名称         | 类型 | 必填 | 说明    |
1601| ---------- | ------ | ----- | ------ |
1602| length | number | 是 |读写操作的期望长度值,单位为字节。 |
1603| actualLength | number| 是 |读写操作的实际长度值,单位为字节。 |
1604| status | [UsbTransferStatus](#usbtransferstatus18) | 是 |实时传输分包的状态码。 |
1605