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