• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# usb_ddk_api.h
2<!--Kit: Driver Development Kit-->
3<!--Subsystem: Driver-->
4<!--Owner: @lixinsheng2-->
5<!--Designer: @w00373942-->
6<!--Tester: @dong-dongzhen-->
7<!--Adviser: @w_Machine_cc-->
8
9## 概述
10
11声明用于主机侧访问设备的USB DDK接口。
12
13**引用文件:** <usb/usb_ddk_api.h>
14
15**库:** libusb_ndk.z.so
16
17**系统能力:** SystemCapability.Driver.USB.Extension
18
19**起始版本:** 10
20
21**相关模块:** [UsbDDK](capi-usbddk.md)
22
23## 汇总
24
25### 函数
26
27| 名称 | 描述 |
28| -- | -- |
29| [int32_t OH_Usb_Init(void)](#oh_usb_init) | 初始化DDK。 |
30| [void OH_Usb_Release(void)](#oh_usb_release) | 释放DDK。 |
31| [int32_t OH_Usb_ReleaseResource(void)](#oh_usb_releaseresource) | 释放DDK。 |
32| [int32_t OH_Usb_GetDeviceDescriptor(uint64_t deviceId, struct UsbDeviceDescriptor *desc)](#oh_usb_getdevicedescriptor) | 获取设备描述符。 |
33| [int32_t OH_Usb_GetConfigDescriptor(uint64_t deviceId, uint8_t configIndex, struct UsbDdkConfigDescriptor ** const config)](#oh_usb_getconfigdescriptor) | 获取配置描述符。请在描述符使用完后使用[OH_Usb_FreeConfigDescriptor](capi-usb-ddk-api-h.md#oh_usb_freeconfigdescriptor)释放描述符,否则会造成内存泄露。 |
34| [void OH_Usb_FreeConfigDescriptor(const struct UsbDdkConfigDescriptor * const config)](#oh_usb_freeconfigdescriptor) | 释放配置描述符,请在描述符使用完后释放描述符,否则会造成内存泄露。 |
35| [int32_t OH_Usb_ClaimInterface(uint64_t deviceId, uint8_t interfaceIndex, uint64_t *interfaceHandle)](#oh_usb_claiminterface) | 声明接口。 |
36| [int32_t OH_Usb_ReleaseInterface(uint64_t interfaceHandle)](#oh_usb_releaseinterface) | 释放接口。 |
37| [int32_t OH_Usb_SelectInterfaceSetting(uint64_t interfaceHandle, uint8_t settingIndex)](#oh_usb_selectinterfacesetting) | 激活接口的备用设置。 |
38| [int32_t OH_Usb_GetCurrentInterfaceSetting(uint64_t interfaceHandle, uint8_t *settingIndex)](#oh_usb_getcurrentinterfacesetting) | 获取接口当前激活的备用设置。 |
39| [int32_t OH_Usb_SendControlReadRequest(uint64_t interfaceHandle, const struct UsbControlRequestSetup *setup,uint32_t timeout, uint8_t *data, uint32_t *dataLen)](#oh_usb_sendcontrolreadrequest) | 发送控制读请求,该接口为同步接口。 |
40| [int32_t OH_Usb_SendControlWriteRequest(uint64_t interfaceHandle, const struct UsbControlRequestSetup *setup,uint32_t timeout, const uint8_t *data, uint32_t dataLen)](#oh_usb_sendcontrolwriterequest) | 发送控制写请求,该接口为同步接口。 |
41| [int32_t OH_Usb_SendPipeRequest(const struct UsbRequestPipe *pipe, UsbDeviceMemMap *devMmap)](#oh_usb_sendpiperequest) | 发送管道请求,该接口为同步接口。中断传输和批量传输都使用该接口发送请求。 |
42| [int32_t OH_Usb_SendPipeRequestWithAshmem(const struct UsbRequestPipe *pipe, DDK_Ashmem *ashmem)](#oh_usb_sendpiperequestwithashmem) | 发送管道请求,该接口为同步接口。中断传输和批量传输都使用该接口发送请求。 |
43| [int32_t OH_Usb_CreateDeviceMemMap(uint64_t deviceId, size_t size, UsbDeviceMemMap **devMmap)](#oh_usb_createdevicememmap) | 创建缓冲区。请在缓冲区使用完后,调用[OH_Usb_DestroyDeviceMemMap](capi-usb-ddk-api-h.md#oh_usb_destroydevicememmap)销毁缓冲区,否则会造成资源泄露。 |
44| [void OH_Usb_DestroyDeviceMemMap(UsbDeviceMemMap *devMmap)](#oh_usb_destroydevicememmap) | 销毁缓冲区。请在缓冲区使用完后及时销毁缓冲区,否则会造成资源泄露。 |
45| [int32_t OH_Usb_GetDevices(struct Usb_DeviceArray *devices)](#oh_usb_getdevices) | 获取USB设备ID列表。请保证传入的指针参数是有效的,申请设备的数量不要超过128个,在使用完结构之后,释放成员内存,否则造成资源泄露。获取到的USB设备ID,已通过驱动配置信息中的vid进行筛选过滤。 |
46
47## 函数说明
48
49### OH_Usb_Init()
50
51```
52int32_t OH_Usb_Init(void)
53```
54
55**描述**
56
57初始化DDK。
58
59**需要权限:** ohos.permission.ACCESS_DDK_USB
60
61**起始版本:** 10
62
63**返回:**
64
65| 类型 | 说明 |
66| -- | -- |
67| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode) 调用接口成功。<br>         [USB_DDK_INVALID_OPERATION](capi-usb-ddk-types-h.md#usbddkerrcode) 连接 USB DDK 服务失败或内部错误。<br>         [USB_DDK_NO_PERM](capi-usb-ddk-types-h.md#usbddkerrcode) 权限检查失败。<br>         [USB_DDK_MEMORY_ERROR](capi-usb-ddk-types-h.md#usbddkerrcode) 内存分配失败。 |
68
69### OH_Usb_Release()
70
71```
72void OH_Usb_Release(void)
73```
74
75**描述**
76
77释放DDK。
78
79**需要权限:** ohos.permission.ACCESS_DDK_USB
80
81**起始版本:** 10
82
83### OH_Usb_ReleaseResource()
84
85```
86int32_t OH_Usb_ReleaseResource(void)
87```
88
89**描述**
90
91释放DDK。
92
93**需要权限:** ohos.permission.ACCESS_DDK_USB
94
95**起始版本:** 18
96
97**返回:**
98
99| 类型 | 说明 |
100| -- | -- |
101| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode) 调用接口成功。<br>         [USB_DDK_NO_PERM](capi-usb-ddk-types-h.md#usbddkerrcode) 权限检查失败。<br>         [USB_DDK_INVALID_OPERATION](capi-usb-ddk-types-h.md#usbddkerrcode) 连接 USB DDK 服务失败。 |
102
103### OH_Usb_GetDeviceDescriptor()
104
105```
106int32_t OH_Usb_GetDeviceDescriptor(uint64_t deviceId, struct UsbDeviceDescriptor *desc)
107```
108
109**描述**
110
111获取设备描述符。
112
113**需要权限:** ohos.permission.ACCESS_DDK_USB
114
115**起始版本:** 10
116
117
118**参数:**
119
120| 参数项 | 描述 |
121| -- | -- |
122| uint64_t deviceId | 设备ID,代表要获取描述符的设备。 |
123| [struct UsbDeviceDescriptor](capi-usbddk-usbdevicedescriptor.md) *desc | 设备描述符,详细定义请参考[UsbDeviceDescriptor](capi-usbddk-usbdevicedescriptor.md)。 |
124
125**返回:**
126
127| 类型 | 说明 |
128| -- | -- |
129| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode) 调用接口成功。<br>         [USB_DDK_NO_PERM](capi-usb-ddk-types-h.md#usbddkerrcode) 权限检查失败。<br>         [USB_DDK_INVALID_OPERATION](capi-usb-ddk-types-h.md#usbddkerrcode) 连接usb_ddk服务失败。<br>         [USB_DDK_INVALID_PARAMETER](capi-usb-ddk-types-h.md#usbddkerrcode) 入参desc为空指针。 |
130
131### OH_Usb_GetConfigDescriptor()
132
133```
134int32_t OH_Usb_GetConfigDescriptor(uint64_t deviceId, uint8_t configIndex, struct UsbDdkConfigDescriptor ** const config)
135```
136
137**描述**
138
139获取配置描述符。请在描述符使用完后使用[OH_Usb_FreeConfigDescriptor](capi-usb-ddk-api-h.md#oh_usb_freeconfigdescriptor)释放描述符,否则会造成内存泄露。
140
141**需要权限:** ohos.permission.ACCESS_DDK_USB
142
143**起始版本:** 10
144
145
146**参数:**
147
148| 参数项                                               | 描述 |
149|---------------------------------------------------| -- |
150| uint64_t deviceId                                 | 设备ID,代表要获取配置描述符的设备。 |
151| uint8_t configIndex                               | 配置id,对应USB协议中的{@link bConfigurationValue}。 |
152| struct [UsbDdkConfigDescriptor](capi-usbddk-usbddkconfigdescriptor.md) ** const config | 配置描述符,包含USB协议中定义的标准配置描述符,以及与其关联的接口描述符和端点描述符。 |
153
154**返回:**
155
156| 类型 | 说明 |
157| -- | -- |
158| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode) 调用接口成功。<br>         [USB_DDK_NO_PERM](capi-usb-ddk-types-h.md#usbddkerrcode) 权限检查失败。<br>         [USB_DDK_INVALID_OPERATION](capi-usb-ddk-types-h.md#usbddkerrcode) 连接USB DDK服务失败。<br>         [USB_DDK_INVALID_PARAMETER](capi-usb-ddk-types-h.md#usbddkerrcode) 入参config为空指针。<br>         [USB_DDK_IO_FAILED](capi-usb-ddk-types-h.md#usbddkerrcode) 数据IO异常。<br>         [USB_DDK_MEMORY_ERROR](capi-usb-ddk-types-h.md#usbddkerrcode) 内存分配失败。 |
159
160### OH_Usb_FreeConfigDescriptor()
161
162```
163void OH_Usb_FreeConfigDescriptor(const struct UsbDdkConfigDescriptor * const config)
164```
165
166**描述**
167
168释放配置描述符,请在描述符使用完后释放描述符,否则会造成内存泄露。
169
170**需要权限:** ohos.permission.ACCESS_DDK_USB
171
172**起始版本:** 10
173
174
175**参数:**
176
177| 参数项 | 描述 |
178| -- | -- |
179| const struct [UsbDdkConfigDescriptor](capi-usbddk-usbddkconfigdescriptor.md) * const config | 配置描述符,通过[OH_Usb_GetConfigDescriptor](capi-usb-ddk-api-h.md#oh_usb_getconfigdescriptor)获得的配置描述符。 |
180
181### OH_Usb_ClaimInterface()
182
183```
184int32_t OH_Usb_ClaimInterface(uint64_t deviceId, uint8_t interfaceIndex, uint64_t *interfaceHandle)
185```
186
187**描述**
188
189声明接口。
190
191**需要权限:** ohos.permission.ACCESS_DDK_USB
192
193**起始版本:** 10
194
195
196**参数:**
197
198| 参数项 | 描述 |
199| -- | -- |
200| uint64_t deviceId | 设备ID,代表要操作的设备。 |
201| uint8_t interfaceIndex | 接口索引,对应USB协议中的[bInterfaceNumber](capi-usbddk-usbinterfacedescriptor.md)。 |
202| uint64_t *interfaceHandle | 接口操作句柄,接口声明成功后,该参数将会被赋值。 |
203
204**返回:**
205
206| 类型 | 说明 |
207| -- | -- |
208| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode) 调用接口成功。<br>         [USB_DDK_NO_PERM](capi-usb-ddk-types-h.md#usbddkerrcode) 权限检查失败。<br>         [USB_DDK_INVALID_OPERATION](capi-usb-ddk-types-h.md#usbddkerrcode) 连接USB DDK服务失败。<br>         [USB_DDK_INVALID_PARAMETER](capi-usb-ddk-types-h.md#usbddkerrcode) 入参interfaceHandle为空指针。<br>         [USB_DDK_MEMORY_ERROR](capi-usb-ddk-types-h.md#usbddkerrcode) 内存超出限制。 |
209
210### OH_Usb_ReleaseInterface()
211
212```
213int32_t OH_Usb_ReleaseInterface(uint64_t interfaceHandle)
214```
215
216**描述**
217
218释放接口。
219
220**需要权限:** ohos.permission.ACCESS_DDK_USB
221
222**起始版本:** 10
223
224
225**参数:**
226
227| 参数项 | 描述 |
228| -- | -- |
229| uint64_t interfaceHandle | 接口操作句柄,代表要释放的接口。 |
230
231**返回:**
232
233| 类型 | 说明 |
234| -- | -- |
235| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode) 调用接口成功。<br>         [USB_DDK_NO_PERM](capi-usb-ddk-types-h.md#usbddkerrcode) 权限检查失败。<br>         [USB_DDK_INVALID_OPERATION](capi-usb-ddk-types-h.md#usbddkerrcode) 连接USB DDK服务失败。<br>         [USB_DDK_INVALID_PARAMETER](capi-usb-ddk-types-h.md#usbddkerrcode) 参数错误。 |
236
237### OH_Usb_SelectInterfaceSetting()
238
239```
240int32_t OH_Usb_SelectInterfaceSetting(uint64_t interfaceHandle, uint8_t settingIndex)
241```
242
243**描述**
244
245激活接口的备用设置。
246
247**需要权限:** ohos.permission.ACCESS_DDK_USB
248
249**起始版本:** 10
250
251
252**参数:**
253
254| 参数项 | 描述 |
255| -- | -- |
256| uint64_t interfaceHandle | 接口操作句柄,代表要操作的接口。 |
257| uint8_t settingIndex | 备用设置索引,对应USB协议中的{@link bAlternateSetting}。 |
258
259**返回:**
260
261| 类型 | 说明 |
262| -- | -- |
263| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode) 调用接口成功。<br>         [USB_DDK_NO_PERM](capi-usb-ddk-types-h.md#usbddkerrcode) 权限检查失败。<br>         [USB_DDK_INVALID_OPERATION](capi-usb-ddk-types-h.md#usbddkerrcode) 连接USB DDK服务失败。<br>         [USB_DDK_INVALID_PARAMETER](capi-usb-ddk-types-h.md#usbddkerrcode) 参数错误。 |
264
265### OH_Usb_GetCurrentInterfaceSetting()
266
267```
268int32_t OH_Usb_GetCurrentInterfaceSetting(uint64_t interfaceHandle, uint8_t *settingIndex)
269```
270
271**描述**
272
273获取接口当前激活的备用设置。
274
275**需要权限:** ohos.permission.ACCESS_DDK_USB
276
277**起始版本:** 10
278
279
280**参数:**
281
282| 参数项 | 描述 |
283| -- | -- |
284| uint64_t interfaceHandle | 接口操作句柄,代表要操作的接口。 |
285| uint8_t *settingIndex | 备用设置索引,对应USB协议中的{@link bAlternateSetting}。 |
286
287**返回:**
288
289| 类型 | 说明 |
290| -- | -- |
291| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode) 调用接口成功。<br>         [USB_DDK_NO_PERM](capi-usb-ddk-types-h.md#usbddkerrcode) 权限检查失败。<br>         [USB_DDK_INVALID_OPERATION](capi-usb-ddk-types-h.md#usbddkerrcode) 连接USB DDK服务失败。<br>         [USB_DDK_INVALID_PARAMETER](capi-usb-ddk-types-h.md#usbddkerrcode) 入参settingIndex为空指针。 |
292
293### OH_Usb_SendControlReadRequest()
294
295```
296int32_t OH_Usb_SendControlReadRequest(uint64_t interfaceHandle, const struct UsbControlRequestSetup *setup,uint32_t timeout, uint8_t *data, uint32_t *dataLen)
297```
298
299**描述**
300
301发送控制读请求,该接口为同步接口。
302
303**需要权限:** ohos.permission.ACCESS_DDK_USB
304
305**起始版本:** 10
306
307
308**参数:**
309
310| 参数项 | 描述 |
311| -- | -- |
312| uint64_t interfaceHandle | 接口操作句柄,代表要操作的接口。 |
313| [const struct UsbControlRequestSetup](capi-usbddk-usbcontrolrequestsetup.md) *setup | 请求相关的参数,详细定义请参考[UsbControlRequestSetup](capi-usbddk-usbcontrolrequestsetup.md)。 |
314| uint32_t timeout | 超时时间,单位为毫秒。 |
315| uint8_t *data | 要传输的数据。 |
316| uint32_t *dataLen | 表示data的数据长度,在函数返回后,表示实际读取到的数据的长度。 |
317
318**返回:**
319
320| 类型 | 说明 |
321| -- | -- |
322| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode) 调用接口成功。<br>         [USB_DDK_FAILED](capi-usb-ddk-types-h.md#usbddkerrcode) 权限校验失败。<br>         [USB_DDK_INVALID_OPERATION](capi-usb-ddk-types-h.md#usbddkerrcode) 连接USB DDK服务失败。<br>         [USB_DDK_INVALID_PARAMETER](capi-usb-ddk-types-h.md#usbddkerrcode) 入参setup或者data或者dataLen为空指针,或者datalen小于读取到的数据长度。<br>         [USB_DDK_MEMORY_ERROR](capi-usb-ddk-types-h.md#usbddkerrcode) 拷贝读取数据的内存失败。<br>         [USB_DDK_IO_FAILED](capi-usb-ddk-types-h.md#usbddkerrcode) 数据IO异常。<br>         [USB_DDK_TIMEOUT](capi-usb-ddk-types-h.md#usbddkerrcode) 接口调用超时。 |
323
324### OH_Usb_SendControlWriteRequest()
325
326```
327int32_t OH_Usb_SendControlWriteRequest(uint64_t interfaceHandle, const struct UsbControlRequestSetup *setup,uint32_t timeout, const uint8_t *data, uint32_t dataLen)
328```
329
330**描述**
331
332发送控制写请求,该接口为同步接口。
333
334**需要权限:** ohos.permission.ACCESS_DDK_USB
335
336**起始版本:** 10
337
338
339**参数:**
340
341| 参数项 | 描述 |
342| -- | -- |
343| uint64_t interfaceHandle | 接口操作句柄,代表要操作的接口。 |
344| [const struct UsbControlRequestSetup](capi-usbddk-usbcontrolrequestsetup.md) *setup | 请求相关的参数,详细定义请参考[UsbControlRequestSetup](capi-usbddk-usbcontrolrequestsetup.md)。 |
345| uint32_t timeout | 超时时间,单位为毫秒。 |
346| const uint8_t *data | 要传输的数据。 |
347| uint32_t dataLen | 表示data数据长度。 |
348
349**返回:**
350
351| 类型 | 说明 |
352| -- | -- |
353| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode) 调用接口成功。<br>         [USB_DDK_FAILED](capi-usb-ddk-types-h.md#usbddkerrcode) 权限校验失败。<br>         [USB_DDK_INVALID_OPERATION](capi-usb-ddk-types-h.md#usbddkerrcode) 连接USB DDK服务失败。<br>         [USB_DDK_INVALID_PARAMETER](capi-usb-ddk-types-h.md#usbddkerrcode) 入参setup或者data为空指针。<br>         [USB_DDK_MEMORY_ERROR](capi-usb-ddk-types-h.md#usbddkerrcode) 内存拷贝失败。<br>         [USB_DDK_IO_FAILED](capi-usb-ddk-types-h.md#usbddkerrcode) 数据IO异常。<br>         [USB_DDK_TIMEOUT](capi-usb-ddk-types-h.md#usbddkerrcode) 接口调用超时。 |
354
355### OH_Usb_SendPipeRequest()
356
357```
358int32_t OH_Usb_SendPipeRequest(const struct UsbRequestPipe *pipe, UsbDeviceMemMap *devMmap)
359```
360
361**描述**
362
363发送管道请求,该接口为同步接口。中断传输和批量传输都使用该接口发送请求。
364
365**需要权限:** ohos.permission.ACCESS_DDK_USB
366
367**起始版本:** 10
368
369
370**参数:**
371
372| 参数项 | 描述 |
373| -- | -- |
374| [const struct UsbRequestPipe](capi-usbddk-usbrequestpipe.md) *pipe | 要传输数据的管道信息。 |
375| [UsbDeviceMemMap](capi-usbddk-usbdevicememmap.md) *devMmap | 数据缓冲区,可以通过[OH_Usb_CreateDeviceMemMap](capi-usb-ddk-api-h.md#oh_usb_createdevicememmap)获得。 |
376
377**返回:**
378
379| 类型 | 说明 |
380| -- | -- |
381| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode) 调用接口成功。<br>         [USB_DDK_NO_PERM](capi-usb-ddk-types-h.md#usbddkerrcode) 权限检查失败。<br>         [USB_DDK_INVALID_OPERATION](capi-usb-ddk-types-h.md#usbddkerrcode) 连接USB DDK服务失败。<br>         [USB_DDK_INVALID_PARAMETER](capi-usb-ddk-types-h.md#usbddkerrcode) 入参pipe为空指针或devMmap为空指针或devMmap的地址为空。<br>         [USB_DDK_MEMORY_ERROR](capi-usb-ddk-types-h.md#usbddkerrcode) 读取数据的内存拷贝失败。<br>         [USB_DDK_IO_FAILED](capi-usb-ddk-types-h.md#usbddkerrcode) 数据 IO 异常。<br>         [USB_DDK_TIMEOUT](capi-usb-ddk-types-h.md#usbddkerrcode) 接口超时。 |
382
383### OH_Usb_SendPipeRequestWithAshmem()
384
385```
386int32_t OH_Usb_SendPipeRequestWithAshmem(const struct UsbRequestPipe *pipe, DDK_Ashmem *ashmem)
387```
388
389**描述**
390
391发送管道请求,该接口为同步接口。中断传输和批量传输都使用该接口发送请求。
392
393**需要权限:** ohos.permission.ACCESS_DDK_USB
394
395**起始版本:** 12
396
397
398**参数:**
399
400| 参数项                                                         | 描述 |
401|-------------------------------------------------------------| -- |
402| [const struct UsbRequestPipe](capi-usbddk-usbrequestpipe.md) *pipe | 要传输数据的管道信息。 |
403| [DDK_Ashmem](capi-baseddk-ddk-ashmem.md) *ashmem            | 共享内存,可以通过[OH_DDK_CreateAshmem](capi-ddk-api-h.md#oh_ddk_createashmem)获得。 |
404
405**返回:**
406
407| 类型 | 说明 |
408| -- | -- |
409| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode) 调用接口成功。<br>         [USB_DDK_NO_PERM](capi-usb-ddk-types-h.md#usbddkerrcode) 权限检查失败。<br>         [USB_DDK_INVALID_OPERATION](capi-usb-ddk-types-h.md#usbddkerrcode) 连接USB DDK服务失败。<br>         [USB_DDK_INVALID_PARAMETER](capi-usb-ddk-types-h.md#usbddkerrcode)入参pipe为空指针或ashmem为空指针或ashmem的地址为空。<br>         [USB_DDK_MEMORY_ERROR](capi-usb-ddk-types-h.md#usbddkerrcode) 读取数据的内存拷贝失败。<br>         [USB_DDK_IO_FAILED](capi-usb-ddk-types-h.md#usbddkerrcode) 数据 IO 异常。<br>         [USB_DDK_TIMEOUT](capi-usb-ddk-types-h.md#usbddkerrcode) 接口超时。 |
410
411### OH_Usb_CreateDeviceMemMap()
412
413```
414int32_t OH_Usb_CreateDeviceMemMap(uint64_t deviceId, size_t size, UsbDeviceMemMap **devMmap)
415```
416
417**描述**
418
419创建缓冲区。请在缓冲区使用完后,调用[OH_Usb_DestroyDeviceMemMap](capi-usb-ddk-api-h.md#oh_usb_destroydevicememmap)销毁缓冲区,否则会造成资源泄露。
420
421**需要权限:** ohos.permission.ACCESS_DDK_USB
422
423**起始版本:** 10
424
425
426**参数:**
427
428| 参数项 | 描述 |
429| -- | -- |
430| uint64_t deviceId | 设备ID,代表要创建缓冲区的设备。 |
431| size_t size | 缓冲区的大小。 |
432| [UsbDeviceMemMap](capi-usbddk-usbdevicememmap.md) **devMmap | 创建的缓冲区通过该参数返回给调用者。 |
433
434**返回:**
435
436| 类型 | 说明 |
437| -- | -- |
438| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode)调用接口成功。<br>         [USB_DDK_NO_PERM](capi-usb-ddk-types-h.md#usbddkerrcode) 权限检查失败。<br>         [USB_DDK_INVALID_PARAMETER](capi-usb-ddk-types-h.md#usbddkerrcode) 入参devMmap为空指针。<br>         [USB_DDK_MEMORY_ERROR](capi-usb-ddk-types-h.md#usbddkerrcode) 内存映射失败或devMmap的内存分配失败。 |
439
440### OH_Usb_DestroyDeviceMemMap()
441
442```
443void OH_Usb_DestroyDeviceMemMap(UsbDeviceMemMap *devMmap)
444```
445
446**描述**
447
448销毁缓冲区。请在缓冲区使用完后及时销毁缓冲区,否则会造成资源泄露。
449
450**需要权限:** ohos.permission.ACCESS_DDK_USB
451
452**起始版本:** 10
453
454
455**参数:**
456
457| 参数项 | 描述 |
458| -- | -- |
459| [UsbDeviceMemMap](capi-usbddk-usbdevicememmap.md) *devMmap | 销毁由[OH_Usb_CreateDeviceMemMap](capi-usb-ddk-api-h.md#oh_usb_createdevicememmap)创建的缓冲区。 |
460
461### OH_Usb_GetDevices()
462
463```
464int32_t OH_Usb_GetDevices(struct Usb_DeviceArray *devices)
465```
466
467**描述**
468
469获取USB设备ID列表。请保证传入的指针参数是有效的,申请设备的数量不要超过128个,在使用完结构之后,释放成员内存,否则造成资源泄露。获取到的USB设备ID,已通过驱动配置信息中的vid进行筛选过滤。
470
471**需要权限:** ohos.permission.ACCESS_DDK_USB
472
473**起始版本:** 18
474
475
476**参数:**
477
478| 参数项 | 描述 |
479| -- | -- |
480| [struct Usb_DeviceArray](capi-usbddk-usb-devicearray.md) *devices | 已申请好的设备内存地址,用于存放获取到的设备ID列表及数量。 |
481
482**返回:**
483
484| 类型 | 说明 |
485| -- | -- |
486| int32_t | [USB_DDK_SUCCESS](capi-usb-ddk-types-h.md#usbddkerrcode) 调用接口成功。<br>         [USB_DDK_NO_PERM](capi-usb-ddk-types-h.md#usbddkerrcode) 权限检查失败。<br>         [USB_DDK_INVALID_OPERATION](capi-usb-ddk-types-h.md#usbddkerrcode) 连接USB DDK服务失败。<br>         [USB_DDK_INVALID_PARAMETER](capi-usb-ddk-types-h.md#usbddkerrcode) 入参devices为空指针。 |
487
488
489