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