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