1 /*
2 * Copyright (c) 2021 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_raw_api.h"
17 #include "usb_raw_api_library.h"
18
19 #define HDF_LOG_TAG USB_RAW_API
20
UsbRawInit(struct UsbSession ** session)21 int UsbRawInit(struct UsbSession **session)
22 {
23 return RawInit(session);
24 }
25
UsbRawExit(const struct UsbSession * session)26 int UsbRawExit(const struct UsbSession *session)
27 {
28 return RawExit(session);
29 }
30
UsbRawOpenDevice(const struct UsbSession * session,uint8_t busNum,uint8_t usbAddr)31 UsbRawHandle *UsbRawOpenDevice(const struct UsbSession *session, uint8_t busNum, uint8_t usbAddr)
32 {
33 return (UsbRawHandle *)RawOpenDevice(session, busNum, usbAddr);
34 }
35
UsbRawCloseDevice(const UsbRawHandle * devHandle)36 int UsbRawCloseDevice(const UsbRawHandle *devHandle)
37 {
38 if (devHandle == NULL) {
39 HDF_LOGE("%s:%d devHandle is NULL", __func__, __LINE__);
40 return HDF_ERR_INVALID_PARAM;
41 }
42
43 return RawCloseDevice((const struct UsbDeviceHandle *)devHandle);
44 }
45
UsbRawSendControlRequest(const struct UsbRawRequest * request,const UsbRawHandle * devHandle,const struct UsbControlRequestData * requestData)46 int UsbRawSendControlRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle,
47 const struct UsbControlRequestData *requestData)
48 {
49 if ((request == NULL) || (devHandle == NULL) || (requestData == NULL)) {
50 HDF_LOGE("%s:%d invalid param", __func__, __LINE__);
51 return HDF_ERR_INVALID_PARAM;
52 }
53
54 return RawSendControlRequest((struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle,
55 requestData);
56 }
57
UsbRawSendBulkRequest(const struct UsbRawRequest * request,const UsbRawHandle * devHandle,const struct UsbRequestData * requestData)58 int UsbRawSendBulkRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle,
59 const struct UsbRequestData *requestData)
60 {
61 if ((request == NULL) || (devHandle == NULL) || (requestData == NULL)) {
62 HDF_LOGE("%s:%d invalid param", __func__, __LINE__);
63 return HDF_ERR_INVALID_PARAM;
64 }
65
66 return RawSendBulkRequest((const struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle,
67 requestData);
68 }
69
UsbRawSendInterruptRequest(const struct UsbRawRequest * request,const UsbRawHandle * devHandle,const struct UsbRequestData * requestData)70 int UsbRawSendInterruptRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle,
71 const struct UsbRequestData *requestData)
72 {
73 if ((request == NULL) || (devHandle == NULL) || (requestData == NULL)) {
74 HDF_LOGE("%s:%d invalid param", __func__, __LINE__);
75 return HDF_ERR_INVALID_PARAM;
76 }
77
78 return RawSendInterruptRequest((const struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle,
79 requestData);
80 }
81
UsbRawGetConfigDescriptor(const UsbRawDevice * rawDev,uint8_t configIndex,struct UsbRawConfigDescriptor ** config)82 int UsbRawGetConfigDescriptor(const UsbRawDevice *rawDev, uint8_t configIndex,
83 struct UsbRawConfigDescriptor **config)
84 {
85 if ((rawDev == NULL) || (config == NULL)) {
86 HDF_LOGE("%s:%d rawDev or config is NULL", __func__, __LINE__);
87 return HDF_ERR_INVALID_PARAM;
88 }
89
90 return RawGetConfigDescriptor((const struct UsbDevice *)rawDev, configIndex, config);
91 }
92
UsbRawFreeConfigDescriptor(const struct UsbRawConfigDescriptor * config)93 void UsbRawFreeConfigDescriptor(const struct UsbRawConfigDescriptor *config)
94 {
95 if (config == NULL) {
96 HDF_LOGE("%s:%d config is NULL", __func__, __LINE__);
97 return;
98 }
99
100 RawClearConfiguration((struct UsbRawConfigDescriptor *)config);
101 RawUsbMemFree((void *)config);
102 config = NULL;
103 }
104
UsbRawGetConfiguration(const UsbRawHandle * devHandle,int * config)105 int UsbRawGetConfiguration(const UsbRawHandle *devHandle, int *config)
106 {
107 if ((devHandle == NULL) || (config == NULL)) {
108 HDF_LOGE("%s:%d dev or config is NULL", __func__, __LINE__);
109 return HDF_ERR_INVALID_PARAM;
110 }
111
112 return RawGetConfiguration((const struct UsbDeviceHandle *)devHandle, config);
113 }
114
UsbRawSetConfiguration(const UsbRawHandle * devHandle,int config)115 int UsbRawSetConfiguration(const UsbRawHandle *devHandle, int config)
116 {
117 if (devHandle == NULL) {
118 HDF_LOGE("%s:%d dev is NULL", __func__, __LINE__);
119 return HDF_ERR_INVALID_PARAM;
120 }
121
122 return RawSetConfiguration((const struct UsbDeviceHandle *)devHandle, config);
123 }
124
UsbRawGetDescriptor(const struct UsbRawRequest * request,const UsbRawHandle * devHandle,const struct UsbRawDescriptorParam * param,const unsigned char * data)125 int UsbRawGetDescriptor(const struct UsbRawRequest *request, const UsbRawHandle *devHandle,
126 const struct UsbRawDescriptorParam *param, const unsigned char *data)
127 {
128 if ((request == NULL) || (devHandle == NULL) || (param == NULL) || (data == NULL)) {
129 HDF_LOGE("%s:%d request or devHandle is NULL", __func__, __LINE__);
130 return HDF_ERR_INVALID_PARAM;
131 }
132
133 return RawGetDescriptor((const struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle,
134 param, data);
135 }
136
UsbRawGetDevice(const UsbRawHandle * devHandle)137 UsbRawDevice *UsbRawGetDevice(const UsbRawHandle *devHandle)
138 {
139 if (devHandle == NULL) {
140 HDF_LOGE("%s:%d devHandle is NULL ", __func__, __LINE__);
141 return NULL;
142 }
143
144 return (UsbRawDevice *)RawGetDevice((const struct UsbDeviceHandle *)devHandle);
145 }
146
UsbRawGetDeviceDescriptor(const UsbRawDevice * rawDev,struct UsbDeviceDescriptor * desc)147 int UsbRawGetDeviceDescriptor(const UsbRawDevice *rawDev, struct UsbDeviceDescriptor *desc)
148 {
149 if ((rawDev == NULL) || (desc == NULL)) {
150 HDF_LOGE("%s:%d rawDev or desc is NULL", __func__, __LINE__);
151 return HDF_ERR_INVALID_PARAM;
152 }
153
154 return RawGetDeviceDescriptor((const struct UsbDevice *)rawDev, desc);
155 }
156
UsbRawClaimInterface(const UsbRawHandle * devHandle,int interfaceNumber)157 int UsbRawClaimInterface(const UsbRawHandle *devHandle, int interfaceNumber)
158 {
159 if (devHandle == NULL) {
160 HDF_LOGE("%s:%d devHandle is NULL", __func__, __LINE__);
161 return HDF_ERR_INVALID_PARAM;
162 }
163
164 return RawClaimInterface((struct UsbDeviceHandle *)devHandle, interfaceNumber);
165 }
166
UsbRawReleaseInterface(const UsbRawHandle * devHandle,int interfaceNumber)167 int UsbRawReleaseInterface(const UsbRawHandle *devHandle, int interfaceNumber)
168 {
169 if (devHandle == NULL) {
170 HDF_LOGE("%s:%d devHandle is NULL", __func__, __LINE__);
171 return HDF_ERR_INVALID_PARAM;
172 }
173
174 return RawReleaseInterface((struct UsbDeviceHandle *)devHandle, interfaceNumber);
175 }
176
UsbRawResetDevice(const UsbRawHandle * devHandle)177 int UsbRawResetDevice(const UsbRawHandle *devHandle)
178 {
179 if (devHandle == NULL) {
180 HDF_LOGE("%s:%d devHandle is NULL", __func__, __LINE__);
181 return HDF_ERR_INVALID_PARAM;
182 }
183
184 return RawResetDevice((const struct UsbDeviceHandle *)devHandle);
185 }
186
UsbRawAllocRequest(const UsbRawHandle * devHandle,int isoPackets,int length)187 struct UsbRawRequest *UsbRawAllocRequest(const UsbRawHandle *devHandle, int isoPackets, int length)
188 {
189 if (devHandle == NULL) {
190 HDF_LOGE("%s:%d devHandle is NULL", __func__, __LINE__);
191 return NULL;
192 }
193
194 return (struct UsbRawRequest *)RawAllocRequest((const struct UsbDeviceHandle *)devHandle, isoPackets, length);
195 }
196
UsbRawFreeRequest(const struct UsbRawRequest * request)197 int UsbRawFreeRequest(const struct UsbRawRequest *request)
198 {
199 if (request == NULL) {
200 HDF_LOGE("%s:%d request is NULL", __func__, __LINE__);
201 return HDF_ERR_INVALID_PARAM;
202 }
203
204 return RawFreeRequest((const struct UsbHostRequest *)request);
205 }
206
UsbRawFillBulkRequest(const struct UsbRawRequest * request,const UsbRawHandle * devHandle,const struct UsbRawFillRequestData * fillData)207 int UsbRawFillBulkRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle,
208 const struct UsbRawFillRequestData *fillData)
209 {
210 if ((request == NULL) || (devHandle == NULL) || (fillData == NULL)) {
211 HDF_LOGE("%s:%d invalid param", __func__, __LINE__);
212 return HDF_ERR_INVALID_PARAM;
213 }
214
215 return RawFillBulkRequest((struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle,
216 (const struct UsbFillRequestData *)fillData);
217 }
218
UsbRawFillControlSetup(const unsigned char * setup,const struct UsbControlRequestData * requestData)219 int UsbRawFillControlSetup(const unsigned char *setup, const struct UsbControlRequestData *requestData)
220 {
221 if ((setup == NULL) || (requestData == NULL)) {
222 HDF_LOGE("%s:%d setup or requestData is NULL", __func__, __LINE__);
223 return HDF_ERR_INVALID_PARAM;
224 }
225
226 return RawFillControlSetup(setup, requestData);
227 }
228
UsbRawFillControlRequest(const struct UsbRawRequest * request,const UsbRawHandle * devHandle,const struct UsbRawFillRequestData * fillData)229 int UsbRawFillControlRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle,
230 const struct UsbRawFillRequestData *fillData)
231 {
232 if ((request == NULL) || (devHandle == NULL) || (fillData == NULL)) {
233 HDF_LOGE("%s:%d invalid param", __func__, __LINE__);
234 return HDF_ERR_INVALID_PARAM;
235 }
236
237 return RawFillControlRequest((struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle,
238 (const struct UsbFillRequestData *)fillData);
239 }
240
UsbRawFillInterruptRequest(const struct UsbRawRequest * request,const UsbRawHandle * devHandle,const struct UsbRawFillRequestData * fillData)241 int UsbRawFillInterruptRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle,
242 const struct UsbRawFillRequestData *fillData)
243 {
244 if ((request == NULL) || (devHandle == NULL) || (fillData == NULL)) {
245 HDF_LOGE("%s:%d invalid param", __func__, __LINE__);
246 return HDF_ERR_INVALID_PARAM;
247 }
248
249 return RawFillInterruptRequest((struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle,
250 (const struct UsbFillRequestData *)fillData);
251 }
252
UsbRawFillIsoRequest(const struct UsbRawRequest * request,const UsbRawHandle * devHandle,const struct UsbRawFillRequestData * fillData)253 int UsbRawFillIsoRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle,
254 const struct UsbRawFillRequestData *fillData)
255 {
256 if ((request == NULL) || (devHandle == NULL) || (fillData == NULL)) {
257 HDF_LOGE("%s:%d invalid param", __func__, __LINE__);
258 return HDF_ERR_INVALID_PARAM;
259 }
260
261 return RawFillIsoRequest((struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle,
262 (const struct UsbFillRequestData *)fillData);
263 }
264
UsbRawSubmitRequest(const struct UsbRawRequest * request)265 int UsbRawSubmitRequest(const struct UsbRawRequest *request)
266 {
267 if (request == NULL) {
268 HDF_LOGE("%s:%d request is NULL", __func__, __LINE__);
269 return HDF_ERR_INVALID_PARAM;
270 }
271
272 return RawSubmitRequest((const struct UsbHostRequest *)request);
273 }
274
UsbRawCancelRequest(const struct UsbRawRequest * request)275 int UsbRawCancelRequest(const struct UsbRawRequest *request)
276 {
277 if (request == NULL) {
278 HDF_LOGE("%s:%d request is NULL", __func__, __LINE__);
279 return HDF_ERR_INVALID_PARAM;
280 }
281
282 return RawCancelRequest((const struct UsbHostRequest *)request);
283 }
284
UsbRawHandleRequests(const UsbRawHandle * devHandle)285 int UsbRawHandleRequests(const UsbRawHandle *devHandle)
286 {
287 if (devHandle == NULL) {
288 HDF_LOGE("%s:%d devHandle is NULL", __func__, __LINE__);
289 return HDF_ERR_INVALID_PARAM;
290 }
291
292 return RawHandleRequest((const struct UsbDeviceHandle *)devHandle);
293 }
294