• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "usb_host_impl.h"
17 
18 #include <cerrno>
19 #include <climits>
20 #include <hdf_base.h>
21 #include <hdf_log.h>
22 #include <sys/mman.h>
23 #include <sys/types.h>
24 #include <unistd.h>
25 #include <vector>
26 
27 #include "hitrace_meter.h"
28 #include "libusb_adapter.h"
29 #include "parameter.h"
30 #include "parameters.h"
31 #include "usb_transfer_callback.h"
32 #include "usbd_wrapper.h"
33 
34 #define HDF_LOG_TAG UsbHostImpl
35 namespace OHOS {
36 namespace HDI {
37 namespace Usb {
38 namespace V2_0 {
39 constexpr uint8_t MAX_DEVICE_ADDRESS = 255;
40 constexpr uint8_t MAX_DEVICE_BUSNUM = 255;
41 constexpr uint8_t MAX_ENDPOINT_ID = 158;
42 constexpr uint8_t MAX_CANCEL_ENDPOINT_ID = 255;
43 constexpr uint8_t MAX_INTERFACE_ID = 255;
44 constexpr uint8_t LIBUSB_INTERFACE_ID = 0x80;
45 bool UsbHostImpl::isGadgetConnected_ = false;
UsbHostInterfaceImplGetInstance(void)46 extern "C" IUsbHostInterface *UsbHostInterfaceImplGetInstance(void)
47 {
48     using OHOS::HDI::Usb::V2_0::UsbHostImpl;
49     UsbHostImpl *service = new (std::nothrow) UsbHostImpl();
50     if (service == nullptr) {
51         return nullptr;
52     }
53     return service;
54 }
55 
UsbHostImpl()56 UsbHostImpl::UsbHostImpl() {}
57 
~UsbHostImpl()58 UsbHostImpl::~UsbHostImpl() {}
59 
OpenDevice(const UsbDev & dev)60 int32_t UsbHostImpl::OpenDevice(const UsbDev &dev)
61 {
62     HDF_LOGI("%{public}s: enter", __func__);
63     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
64     return V1_2::LibusbAdapter::GetInstance()->OpenDevice(usbDev_);
65 }
66 
CloseDevice(const UsbDev & dev)67 int32_t UsbHostImpl::CloseDevice(const UsbDev &dev)
68 {
69     HDF_LOGI("%{public}s: enter", __func__);
70     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
71     return V1_2::LibusbAdapter::GetInstance()->CloseDevice(usbDev_);
72 }
73 
GetStringDescriptor(const UsbDev & dev,uint8_t descId,std::vector<uint8_t> & descriptor)74 int32_t UsbHostImpl::GetStringDescriptor(const UsbDev &dev, uint8_t descId, std::vector<uint8_t> &descriptor)
75 {
76     HDF_LOGI("%{public}s: enter", __func__);
77     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
78     return V1_2::LibusbAdapter::GetInstance()->GetStringDescriptor(usbDev_, descId, descriptor);
79 }
80 
GetRawDescriptor(const UsbDev & dev,std::vector<uint8_t> & descriptor)81 int32_t UsbHostImpl::GetRawDescriptor(const UsbDev &dev, std::vector<uint8_t> &descriptor)
82 {
83     HDF_LOGI("%{public}s: enter", __func__);
84     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
85     return V1_2::LibusbAdapter::GetInstance()->GetRawDescriptor(usbDev_, descriptor);
86 }
87 
SetConfig(const UsbDev & dev,uint8_t configIndex)88 int32_t UsbHostImpl::SetConfig(const UsbDev &dev, uint8_t configIndex)
89 {
90     HDF_LOGI("%{public}s: enter", __func__);
91     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
92     return V1_2::LibusbAdapter::GetInstance()->SetConfig(usbDev_, configIndex);
93 }
94 
GetConfig(const UsbDev & dev,uint8_t & configIndex)95 int32_t UsbHostImpl::GetConfig(const UsbDev &dev, uint8_t &configIndex)
96 {
97     HDF_LOGI("%{public}s: enter", __func__);
98     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
99     return V1_2::LibusbAdapter::GetInstance()->GetConfig(usbDev_, configIndex);
100 }
101 
ClaimInterface(const UsbDev & dev,uint8_t interfaceId,uint8_t force)102 int32_t UsbHostImpl::ClaimInterface(const UsbDev &dev, uint8_t interfaceId, uint8_t force)
103 {
104     HDF_LOGI("%{public}s: enter", __func__);
105     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
106     return V1_2::LibusbAdapter::GetInstance()->ClaimInterface(usbDev_, interfaceId, force);
107 }
108 
ManageInterface(const UsbDev & dev,uint8_t interfaceId,bool disable)109 int32_t UsbHostImpl::ManageInterface(const UsbDev &dev, uint8_t interfaceId, bool disable)
110 {
111     HDF_LOGI("%{public}s: enter", __func__);
112     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
113     return V1_2::LibusbAdapter::GetInstance()->ManageInterface(usbDev_, interfaceId, disable);
114 }
115 
ReleaseInterface(const UsbDev & dev,uint8_t interfaceId)116 int32_t UsbHostImpl::ReleaseInterface(const UsbDev &dev, uint8_t interfaceId)
117 {
118     HDF_LOGI("%{public}s: enter", __func__);
119     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
120     return V1_2::LibusbAdapter::GetInstance()->ReleaseInterface(usbDev_, interfaceId);
121 }
122 
SetInterface(const UsbDev & dev,uint8_t interfaceId,uint8_t altIndex)123 int32_t UsbHostImpl::SetInterface(const UsbDev &dev, uint8_t interfaceId, uint8_t altIndex)
124 {
125     HDF_LOGI("%{public}s: enter", __func__);
126     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
127     return V1_2::LibusbAdapter::GetInstance()->SetInterface(usbDev_, interfaceId, altIndex);
128 }
129 
BulkTransferRead(const UsbDev & dev,const UsbPipe & pipe,int32_t timeout,std::vector<uint8_t> & data)130 int32_t UsbHostImpl::BulkTransferRead(
131     const UsbDev &dev, const UsbPipe &pipe, int32_t timeout, std::vector<uint8_t> &data)
132 {
133     HDF_LOGI("%{public}s: enter", __func__);
134     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
135     const V1_2::UsbPipe &usbPipe_ = reinterpret_cast<const V1_2::UsbPipe &>(pipe);
136     return V1_2::LibusbAdapter::GetInstance()->BulkTransferRead(usbDev_, usbPipe_, timeout, data);
137 }
138 
BulkTransferWrite(const UsbDev & dev,const UsbPipe & pipe,int32_t timeout,const std::vector<uint8_t> & data)139 int32_t UsbHostImpl::BulkTransferWrite(const UsbDev &dev,
140     const UsbPipe &pipe, int32_t timeout, const std::vector<uint8_t> &data)
141 {
142     HDF_LOGI("%{public}s: enter", __func__);
143     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
144     const V1_2::UsbPipe &usbPipe_ = reinterpret_cast<const V1_2::UsbPipe &>(pipe);
145     return V1_2::LibusbAdapter::GetInstance()->BulkTransferWrite(usbDev_, usbPipe_, timeout, data);
146 }
147 
ControlTransferRead(const UsbDev & dev,const UsbCtrlTransfer & ctrl,std::vector<uint8_t> & data)148 int32_t UsbHostImpl::ControlTransferRead(const UsbDev &dev, const UsbCtrlTransfer &ctrl, std::vector<uint8_t> &data)
149 {
150     HDF_LOGI("%{public}s: enter", __func__);
151     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
152     const V1_2::UsbCtrlTransfer &usbCtrl_ = reinterpret_cast<const V1_2::UsbCtrlTransfer &>(ctrl);
153     return V1_2::LibusbAdapter::GetInstance()->ControlTransferRead(usbDev_, usbCtrl_, data);
154 }
155 
ControlTransferWrite(const UsbDev & dev,const UsbCtrlTransfer & ctrl,const std::vector<uint8_t> & data)156 int32_t UsbHostImpl::ControlTransferWrite(
157     const UsbDev &dev, const UsbCtrlTransfer &ctrl, const std::vector<uint8_t> &data)
158 {
159     HDF_LOGI("%{public}s: enter", __func__);
160     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
161     const V1_2::UsbCtrlTransfer &usbCtrl_ = reinterpret_cast<const V1_2::UsbCtrlTransfer &>(ctrl);
162     return V1_2::LibusbAdapter::GetInstance()->ControlTransferWrite(usbDev_, usbCtrl_, data);
163 }
164 
GetInterfaceActiveStatus(const UsbDev & dev,uint8_t interfaceId,bool & unactivated)165 int32_t UsbHostImpl::GetInterfaceActiveStatus(const UsbDev &dev, uint8_t interfaceId, bool &unactivated)
166 {
167     HDF_LOGI("%{public}s: enter", __func__);
168     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
169     return V1_2::LibusbAdapter::GetInstance()->GetInterfaceActiveStatus(usbDev_, interfaceId, unactivated);
170 }
171 
GetDeviceSpeed(const UsbDev & dev,uint8_t & speed)172 int32_t UsbHostImpl::GetDeviceSpeed(const UsbDev &dev, uint8_t &speed)
173 {
174     HDF_LOGI("%{public}s: enter", __func__);
175     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
176     return V1_2::LibusbAdapter::GetInstance()->GetDeviceSpeed(usbDev_, speed);
177 }
178 
BulkTransferReadwithLength(const UsbDev & dev,const UsbPipe & pipe,int32_t timeout,int32_t length,std::vector<uint8_t> & data)179 int32_t UsbHostImpl::BulkTransferReadwithLength(
180     const UsbDev &dev, const UsbPipe &pipe, int32_t timeout, int32_t length, std::vector<uint8_t> &data)
181 {
182     HDF_LOGI("%{public}s: enter", __func__);
183     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
184     const V1_2::UsbPipe &usbPipe_ = reinterpret_cast<const V1_2::UsbPipe &>(pipe);
185     return V1_2::LibusbAdapter::GetInstance()->BulkTransferReadwithLength(usbDev_, usbPipe_, timeout, length, data);
186 }
187 
GetDeviceFileDescriptor(const UsbDev & dev,int32_t & fd)188 int32_t UsbHostImpl::GetDeviceFileDescriptor(const UsbDev &dev, int32_t &fd)
189 {
190     HDF_LOGI("%{public}s: enter", __func__);
191     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
192     return V1_2::LibusbAdapter::GetInstance()->GetDeviceFileDescriptor(usbDev_, fd);
193 }
194 
ClearHalt(const UsbDev & dev,const UsbPipe & pipe)195 int32_t UsbHostImpl::ClearHalt(const UsbDev &dev, const UsbPipe &pipe)
196 {
197     HDF_LOGI("%{public}s: enter", __func__);
198     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
199     const V1_2::UsbPipe &usbPipe_ = reinterpret_cast<const V1_2::UsbPipe &>(pipe);
200     return V1_2::LibusbAdapter::GetInstance()->ClearHalt(usbDev_, usbPipe_);
201 }
202 
ControlTransferReadwithLength(const UsbDev & dev,const UsbCtrlTransferParams & ctrlParams,std::vector<uint8_t> & data)203 int32_t UsbHostImpl::ControlTransferReadwithLength(
204     const UsbDev &dev, const UsbCtrlTransferParams &ctrlParams, std::vector<uint8_t> &data)
205 {
206     HDF_LOGI("%{public}s: enter", __func__);
207     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
208     const V1_2::UsbCtrlTransferParams &usbCtrlParams_ =
209         reinterpret_cast<const V1_2::UsbCtrlTransferParams &>(ctrlParams);
210     return V1_2::LibusbAdapter::GetInstance()->ControlTransferReadwithLength(usbDev_, usbCtrlParams_, data);
211 }
212 
ResetDevice(const UsbDev & dev)213 int32_t UsbHostImpl::ResetDevice(const UsbDev &dev)
214 {
215     HDF_LOGI("%{public}s: enter", __func__);
216     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
217     return V1_2::LibusbAdapter::GetInstance()->ResetDevice(usbDev_);
218 }
219 
GetDeviceDescriptor(const UsbDev & dev,std::vector<uint8_t> & descriptor)220 int32_t UsbHostImpl::GetDeviceDescriptor(const UsbDev &dev, std::vector<uint8_t> &descriptor)
221 {
222     HDF_LOGI("%{public}s: enter", __func__);
223     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
224     return V1_2::LibusbAdapter::GetInstance()->GetDeviceDescriptor(usbDev_, descriptor);
225 }
226 
GetConfigDescriptor(const UsbDev & dev,uint8_t descId,std::vector<uint8_t> & descriptor)227 int32_t UsbHostImpl::GetConfigDescriptor(const UsbDev &dev, uint8_t descId, std::vector<uint8_t> &descriptor)
228 {
229     HDF_LOGI("%{public}s: enter", __func__);
230     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
231     return V1_2::LibusbAdapter::GetInstance()->GetConfigDescriptor(usbDev_, descId, descriptor);
232 }
233 
GetFileDescriptor(const UsbDev & dev,int32_t & fd)234 int32_t UsbHostImpl::GetFileDescriptor(const UsbDev &dev, int32_t &fd)
235 {
236     HDF_LOGI("%{public}s: enter", __func__);
237     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
238     return V1_2::LibusbAdapter::GetInstance()->GetFileDescriptor(usbDev_, fd);
239 }
240 
InterruptTransferRead(const UsbDev & dev,const UsbPipe & pipe,int32_t timeout,std::vector<uint8_t> & data)241 int32_t UsbHostImpl::InterruptTransferRead(
242     const UsbDev &dev, const UsbPipe &pipe, int32_t timeout, std::vector<uint8_t> &data)
243 {
244     HDF_LOGI("%{public}s: enter", __func__);
245     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
246     const V1_2::UsbPipe &usbPipe_ = reinterpret_cast<const V1_2::UsbPipe &>(pipe);
247     return V1_2::LibusbAdapter::GetInstance()->InterruptTransferRead(usbDev_, usbPipe_, timeout, data);
248 }
249 
InterruptTransferWrite(const UsbDev & dev,const UsbPipe & pipe,int32_t timeout,const std::vector<uint8_t> & data)250 int32_t UsbHostImpl::InterruptTransferWrite(
251     const UsbDev &dev, const UsbPipe &pipe, int32_t timeout, const std::vector<uint8_t> &data)
252 {
253     HDF_LOGI("%{public}s: enter", __func__);
254     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
255     const V1_2::UsbPipe &usbPipe_ = reinterpret_cast<const V1_2::UsbPipe &>(pipe);
256     return V1_2::LibusbAdapter::GetInstance()->InterruptTransferWrite(usbDev_, usbPipe_, timeout, data);
257 }
258 
IsoTransferRead(const UsbDev & dev,const UsbPipe & pipe,int32_t timeout,std::vector<uint8_t> & data)259 int32_t UsbHostImpl::IsoTransferRead(
260     const UsbDev &dev, const UsbPipe &pipe, int32_t timeout, std::vector<uint8_t> &data)
261 {
262     HDF_LOGI("%{public}s: enter", __func__);
263     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
264     const V1_2::UsbPipe &usbPipe_ = reinterpret_cast<const V1_2::UsbPipe &>(pipe);
265     return V1_2::LibusbAdapter::GetInstance()->IsoTransferRead(usbDev_, usbPipe_, timeout, data);
266 }
267 
IsoTransferWrite(const UsbDev & dev,const UsbPipe & pipe,int32_t timeout,const std::vector<uint8_t> & data)268 int32_t UsbHostImpl::IsoTransferWrite(
269     const UsbDev &dev, const UsbPipe &pipe, int32_t timeout, const std::vector<uint8_t> &data)
270 {
271     HDF_LOGI("%{public}s: enter", __func__);
272     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
273     const V1_2::UsbPipe &usbPipe_ = reinterpret_cast<const V1_2::UsbPipe &>(pipe);
274     return V1_2::LibusbAdapter::GetInstance()->IsoTransferWrite(usbDev_, usbPipe_, timeout, data);
275 }
276 
RegBulkCallback(const UsbDev & dev,const UsbPipe & pipe,const sptr<IUsbdBulkCallback> & cb)277 int32_t UsbHostImpl::RegBulkCallback(
278     const UsbDev &dev, const UsbPipe &pipe, const sptr<IUsbdBulkCallback> &cb)
279 {
280     HDF_LOGI("%{public}s: enter", __func__);
281     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
282     const V1_2::UsbPipe &usbPipe_ = reinterpret_cast<const V1_2::UsbPipe &>(pipe);
283     return V1_2::LibusbAdapter::GetInstance()->RegBulkCallback(usbDev_, usbPipe_, cb);
284 }
285 
UnRegBulkCallback(const UsbDev & dev,const UsbPipe & pipe)286 int32_t UsbHostImpl::UnRegBulkCallback(const UsbDev &dev, const UsbPipe &pipe)
287 {
288     HDF_LOGI("%{public}s: enter", __func__);
289     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
290     const V1_2::UsbPipe &usbPipe_ = reinterpret_cast<const V1_2::UsbPipe &>(pipe);
291     return V1_2::LibusbAdapter::GetInstance()->UnRegBulkCallback(usbDev_, usbPipe_);
292 }
293 
BulkRead(const UsbDev & dev,const UsbPipe & pipe,const sptr<Ashmem> & ashmem)294 int32_t UsbHostImpl::BulkRead(const UsbDev &dev, const UsbPipe &pipe, const sptr<Ashmem> &ashmem)
295 {
296     HDF_LOGI("%{public}s: enter", __func__);
297     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
298     const V1_2::UsbPipe &usbPipe_ = reinterpret_cast<const V1_2::UsbPipe &>(pipe);
299     return V1_2::LibusbAdapter::GetInstance()->BulkRead(usbDev_, usbPipe_, ashmem);
300 }
301 
BulkWrite(const UsbDev & dev,const UsbPipe & pipe,const sptr<Ashmem> & ashmem)302 int32_t UsbHostImpl::BulkWrite(const UsbDev &dev, const UsbPipe &pipe, const sptr<Ashmem> &ashmem)
303 {
304     HDF_LOGI("%{public}s: enter", __func__);
305     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
306     const V1_2::UsbPipe &usbPipe_ = reinterpret_cast<const V1_2::UsbPipe &>(pipe);
307     return V1_2::LibusbAdapter::GetInstance()->BulkWrite(usbDev_, usbPipe_, ashmem);
308 }
309 
BulkCancel(const UsbDev & dev,const UsbPipe & pipe)310 int32_t UsbHostImpl::BulkCancel(const UsbDev &dev, const UsbPipe &pipe)
311 {
312     HDF_LOGI("%{public}s: enter", __func__);
313     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
314     const V1_2::UsbPipe &usbPipe_ = reinterpret_cast<const V1_2::UsbPipe &>(pipe);
315     return V1_2::LibusbAdapter::GetInstance()->BulkCancel(usbDev_, usbPipe_);
316 }
317 
UsbSubmitTransfer(const UsbDev & dev,const USBTransferInfo & info,const sptr<IUsbdTransferCallback> & cb,const sptr<Ashmem> & ashmem)318 int32_t UsbHostImpl::UsbSubmitTransfer(const UsbDev &dev, const USBTransferInfo &info,
319     const sptr<IUsbdTransferCallback> &cb, const sptr<Ashmem> &ashmem)
320 {
321     HDF_LOGI("%{public}s: enter", __func__);
322     if (cb == nullptr) {
323         HDF_LOGE("%{public}s: cb is nullptr", __func__);
324         return HDF_FAILURE;
325     }
326     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
327     const V1_2::USBTransferInfo &usbTransferInfo_ = reinterpret_cast<const V1_2::USBTransferInfo &>(info);
328     sptr<UsbTransferCb> usbTransferCb_ = new UsbTransferCb(cb);
329     if (usbTransferCb_ == nullptr) {
330         HDF_LOGE("%{public}s: usbTransferCb_ is nullptr", __func__);
331         return HDF_FAILURE;
332     }
333     return V1_2::LibusbAdapter::GetInstance()->AsyncSubmitTransfer(usbDev_, usbTransferInfo_, usbTransferCb_, ashmem);
334 }
335 
UsbCancelTransfer(const UsbDev & dev,const int32_t endpoint)336 int32_t UsbHostImpl::UsbCancelTransfer(const UsbDev &dev, const int32_t endpoint)
337 {
338     HDF_LOGI("%{public}s: enter", __func__);
339     const V1_2::UsbDev &usbDev_ = reinterpret_cast<const V1_2::UsbDev &>(dev);
340     return V1_2::LibusbAdapter::GetInstance()->AsyncCancelTransfer(usbDev_, endpoint);
341 }
342 
RequestQueue(const UsbDev & dev,const UsbPipe & pipe,const std::vector<uint8_t> & clientData,const std::vector<uint8_t> & buffer)343 int32_t UsbHostImpl::RequestQueue(const UsbDev &dev, const UsbPipe &pipe,
344     const std::vector<uint8_t> &clientData, const std::vector<uint8_t> &buffer)
345 {
346     if ((dev.devAddr >= MAX_DEVICE_ADDRESS) || (dev.busNum >= MAX_DEVICE_BUSNUM) ||
347         (pipe.endpointId >= MAX_ENDPOINT_ID) || (pipe.intfId >= LIBUSB_INTERFACE_ID)) {
348         HDF_LOGE("%{public}s:Invalid parameter", __func__);
349         return HDF_ERR_INVALID_PARAM;
350     }
351     return HDF_SUCCESS;
352 }
353 
RequestWait(const UsbDev & dev,std::vector<uint8_t> & clientData,std::vector<uint8_t> & buffer,int32_t timeout)354 int32_t UsbHostImpl::RequestWait(
355     const UsbDev &dev, std::vector<uint8_t> &clientData, std::vector<uint8_t> &buffer, int32_t timeout)
356 {
357     if ((dev.devAddr >= MAX_DEVICE_ADDRESS) || (dev.busNum >= MAX_DEVICE_BUSNUM)) {
358         HDF_LOGE("%{public}s:Invalid parameter", __func__);
359         return HDF_ERR_INVALID_PARAM;
360     }
361     return HDF_SUCCESS;
362 }
363 
RequestCancel(const UsbDev & dev,const UsbPipe & pipe)364 int32_t UsbHostImpl::RequestCancel(const UsbDev &dev, const UsbPipe &pipe)
365 {
366     if ((dev.devAddr == MAX_DEVICE_ADDRESS) && (dev.busNum == MAX_DEVICE_BUSNUM) &&
367         (pipe.endpointId == MAX_CANCEL_ENDPOINT_ID) && (pipe.intfId == MAX_INTERFACE_ID)) {
368         HDF_LOGE("%{public}s:Invalid parameter", __func__);
369         return HDF_ERR_INVALID_PARAM;
370     }
371     if (pipe.intfId == MAX_INTERFACE_ID && pipe.endpointId == MAX_ENDPOINT_ID) {
372         HDF_LOGW("%{public}s: intfId = %{public}d, endpointId = %{public}d", __func__,
373             pipe.intfId, pipe.endpointId);
374         return HDF_SUCCESS;
375     }
376     if ((dev.devAddr >= MAX_DEVICE_ADDRESS) || (dev.busNum >= MAX_DEVICE_BUSNUM) ||
377         (pipe.endpointId > MAX_CANCEL_ENDPOINT_ID) || (pipe.intfId > LIBUSB_INTERFACE_ID)) {
378         HDF_LOGE("%{public}s:Invalid parameter", __func__);
379         return HDF_ERR_INVALID_PARAM;
380     }
381     return HDF_SUCCESS;
382 }
383 
BindUsbdHostSubscriber(const sptr<IUsbdSubscriber> & subscriber)384 int32_t UsbHostImpl::BindUsbdHostSubscriber(const sptr<IUsbdSubscriber> &subscriber)
385 {
386     HDF_LOGI("%{public}s: enter", __func__);
387     return V1_2::LibusbAdapter::GetInstance()->SetSubscriber(subscriber);
388 }
389 
UnbindUsbdHostSubscriber(const sptr<IUsbdSubscriber> & subscriber)390 int32_t UsbHostImpl::UnbindUsbdHostSubscriber(const sptr<IUsbdSubscriber> &subscriber)
391 {
392     HDF_LOGI("%{public}s: enter", __func__);
393     return V1_2::LibusbAdapter::GetInstance()->RemoveSubscriber(subscriber);
394 }
395 } // namespace V2_0
396 } // namespace Usb
397 } // namespace HDI
398 } // namespace OHOS