# USB Usage The following uses bulk transfer as an example. ## Procedure 1. Obtain a USB service instance. ``` static OHOS::USB::UsbSrvClient &g_usbClient = OHOS::USB::UsbSrvClient::GetInstance(); ``` 2. Obtain the USB device list. ``` std::vector deviceList; int32_t ret = g_usbClient.GetDevices(deviceList); ``` 3. Apply for device access permissions. ``` int32_t ret = g_usbClient.RequestRight(device.GetName()); ``` 4. Opens a device. ``` USBDevicePipe pip; int32_t et = g_usbClient.OpenDevice(device, pip); ``` 5. Configure the USB interface. ``` ret = g_usbClient.ClaimInterface(pip, interface, true); **interface** indicates an interface of the USB device in **deviceList**. ``` 6. Perform data transfer. ``` srvClient.BulkTransfer(pipe, endpoint, vdata, timeout); ``` - **pipe** indicates the pipe for data transfer of the USB device opened. - **endpoint** indicates the endpoint for data transfer on the USB device. - **vdata** indicates the binary data block to be transferred or read. - **timeout** indicates the timeout duration of data transfer. 7. Close the USB device. ``` ret = g_usbClient.Close(pip); ```