1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci 16094332d3Sopenharmony_ci#include "usb_raw_api.h" 17094332d3Sopenharmony_ci#include "usb_raw_api_library.h" 18094332d3Sopenharmony_ci#include "usbd_wrapper.h" 19094332d3Sopenharmony_ci 20094332d3Sopenharmony_ci#define HDF_LOG_TAG USB_RAW_API 21094332d3Sopenharmony_ci 22094332d3Sopenharmony_ciint32_t UsbRawInit(struct UsbSession **session) 23094332d3Sopenharmony_ci{ 24094332d3Sopenharmony_ci return RawInit(session); 25094332d3Sopenharmony_ci} 26094332d3Sopenharmony_ci 27094332d3Sopenharmony_ciint32_t UsbRawExit(const struct UsbSession *session) 28094332d3Sopenharmony_ci{ 29094332d3Sopenharmony_ci return RawExit(session); 30094332d3Sopenharmony_ci} 31094332d3Sopenharmony_ci 32094332d3Sopenharmony_ciUsbRawHandle *UsbRawOpenDevice(const struct UsbSession *session, uint8_t busNum, uint8_t usbAddr) 33094332d3Sopenharmony_ci{ 34094332d3Sopenharmony_ci return (UsbRawHandle *)RawOpenDevice(session, busNum, usbAddr); 35094332d3Sopenharmony_ci} 36094332d3Sopenharmony_ci 37094332d3Sopenharmony_ciint32_t UsbRawCloseDevice(const UsbRawHandle *devHandle) 38094332d3Sopenharmony_ci{ 39094332d3Sopenharmony_ci if (devHandle == NULL) { 40094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d devHandle is NULL", __func__, __LINE__); 41094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 42094332d3Sopenharmony_ci } 43094332d3Sopenharmony_ci 44094332d3Sopenharmony_ci return RawCloseDevice((const struct UsbDeviceHandle *)devHandle); 45094332d3Sopenharmony_ci} 46094332d3Sopenharmony_ci 47094332d3Sopenharmony_ciint32_t UsbRawSendControlRequest( 48094332d3Sopenharmony_ci const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbControlRequestData *requestData) 49094332d3Sopenharmony_ci{ 50094332d3Sopenharmony_ci if ((request == NULL) || (devHandle == NULL) || (requestData == NULL)) { 51094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d invalid param", __func__, __LINE__); 52094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 53094332d3Sopenharmony_ci } 54094332d3Sopenharmony_ci 55094332d3Sopenharmony_ci return RawSendControlRequest( 56094332d3Sopenharmony_ci (struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle, requestData); 57094332d3Sopenharmony_ci} 58094332d3Sopenharmony_ci 59094332d3Sopenharmony_ciint32_t UsbRawSendBulkRequest( 60094332d3Sopenharmony_ci const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRequestData *requestData) 61094332d3Sopenharmony_ci{ 62094332d3Sopenharmony_ci if ((request == NULL) || (devHandle == NULL) || (requestData == NULL)) { 63094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d invalid param", __func__, __LINE__); 64094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 65094332d3Sopenharmony_ci } 66094332d3Sopenharmony_ci 67094332d3Sopenharmony_ci return RawSendBulkRequest( 68094332d3Sopenharmony_ci (const struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle, requestData); 69094332d3Sopenharmony_ci} 70094332d3Sopenharmony_ci 71094332d3Sopenharmony_ciint32_t UsbRawSendInterruptRequest( 72094332d3Sopenharmony_ci const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRequestData *requestData) 73094332d3Sopenharmony_ci{ 74094332d3Sopenharmony_ci if ((request == NULL) || (devHandle == NULL) || (requestData == NULL)) { 75094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d invalid param", __func__, __LINE__); 76094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 77094332d3Sopenharmony_ci } 78094332d3Sopenharmony_ci 79094332d3Sopenharmony_ci return RawSendInterruptRequest( 80094332d3Sopenharmony_ci (const struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle, requestData); 81094332d3Sopenharmony_ci} 82094332d3Sopenharmony_ci 83094332d3Sopenharmony_ciint32_t UsbRawGetConfigDescriptor( 84094332d3Sopenharmony_ci const UsbRawDevice *rawDev, uint8_t configIndex, struct UsbRawConfigDescriptor ** const config) 85094332d3Sopenharmony_ci{ 86094332d3Sopenharmony_ci if ((rawDev == NULL) || (config == NULL)) { 87094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d rawDev or config is NULL", __func__, __LINE__); 88094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 89094332d3Sopenharmony_ci } 90094332d3Sopenharmony_ci 91094332d3Sopenharmony_ci return RawGetConfigDescriptor((const struct UsbDevice *)rawDev, configIndex, config); 92094332d3Sopenharmony_ci} 93094332d3Sopenharmony_ci 94094332d3Sopenharmony_civoid UsbRawFreeConfigDescriptor(const struct UsbRawConfigDescriptor *config) 95094332d3Sopenharmony_ci{ 96094332d3Sopenharmony_ci if (config == NULL) { 97094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d config is NULL", __func__, __LINE__); 98094332d3Sopenharmony_ci return; 99094332d3Sopenharmony_ci } 100094332d3Sopenharmony_ci 101094332d3Sopenharmony_ci RawClearConfiguration((struct UsbRawConfigDescriptor *)config); 102094332d3Sopenharmony_ci RawUsbMemFree((void *)config); 103094332d3Sopenharmony_ci} 104094332d3Sopenharmony_ci 105094332d3Sopenharmony_ciint32_t UsbRawGetConfiguration(const UsbRawHandle * const devHandle, int32_t *config) 106094332d3Sopenharmony_ci{ 107094332d3Sopenharmony_ci if ((devHandle == NULL) || (config == NULL)) { 108094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d dev or config is NULL", __func__, __LINE__); 109094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 110094332d3Sopenharmony_ci } 111094332d3Sopenharmony_ci 112094332d3Sopenharmony_ci return RawGetConfiguration((const struct UsbDeviceHandle *)devHandle, config); 113094332d3Sopenharmony_ci} 114094332d3Sopenharmony_ci 115094332d3Sopenharmony_ciint32_t UsbRawSetConfiguration(const UsbRawHandle *devHandle, int32_t config) 116094332d3Sopenharmony_ci{ 117094332d3Sopenharmony_ci if (devHandle == NULL) { 118094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d dev is NULL", __func__, __LINE__); 119094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 120094332d3Sopenharmony_ci } 121094332d3Sopenharmony_ci 122094332d3Sopenharmony_ci return RawSetConfiguration((const struct UsbDeviceHandle *)devHandle, config); 123094332d3Sopenharmony_ci} 124094332d3Sopenharmony_ci 125094332d3Sopenharmony_ciint32_t UsbRawControlMsg(const UsbRawHandle * const devHandle, struct UsbControlRequestData *ctrlData) 126094332d3Sopenharmony_ci{ 127094332d3Sopenharmony_ci if ((devHandle == NULL) || (ctrlData == NULL)) { 128094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d dev or config is NULL", __func__, __LINE__); 129094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 130094332d3Sopenharmony_ci } 131094332d3Sopenharmony_ci 132094332d3Sopenharmony_ci return RawUsbControlMsg((const struct UsbDeviceHandle *)devHandle, ctrlData); 133094332d3Sopenharmony_ci} 134094332d3Sopenharmony_ci 135094332d3Sopenharmony_ciint32_t UsbRawGetUsbSpeed(const UsbRawHandle * const devHandle) 136094332d3Sopenharmony_ci{ 137094332d3Sopenharmony_ci if ((devHandle == NULL)) { 138094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d dev or config is NULL", __func__, __LINE__); 139094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 140094332d3Sopenharmony_ci } 141094332d3Sopenharmony_ci return RawUsbGetUsbSpeed((const struct UsbDeviceHandle *)devHandle); 142094332d3Sopenharmony_ci} 143094332d3Sopenharmony_ci 144094332d3Sopenharmony_ciint32_t UsbRawGetDescriptor(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, 145094332d3Sopenharmony_ci const struct UsbRawDescriptorParam *param, const unsigned char *data) 146094332d3Sopenharmony_ci{ 147094332d3Sopenharmony_ci if ((request == NULL) || (devHandle == NULL) || (param == NULL) || (data == NULL)) { 148094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d request or devHandle is NULL", __func__, __LINE__); 149094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 150094332d3Sopenharmony_ci } 151094332d3Sopenharmony_ci 152094332d3Sopenharmony_ci return RawGetDescriptor( 153094332d3Sopenharmony_ci (const struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle, param, data); 154094332d3Sopenharmony_ci} 155094332d3Sopenharmony_ci 156094332d3Sopenharmony_ciUsbRawDevice *UsbRawGetDevice(const UsbRawHandle * const devHandle) 157094332d3Sopenharmony_ci{ 158094332d3Sopenharmony_ci if (devHandle == NULL) { 159094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d devHandle is NULL ", __func__, __LINE__); 160094332d3Sopenharmony_ci return NULL; 161094332d3Sopenharmony_ci } 162094332d3Sopenharmony_ci 163094332d3Sopenharmony_ci return (UsbRawDevice *)RawGetDevice((const struct UsbDeviceHandle *)devHandle); 164094332d3Sopenharmony_ci} 165094332d3Sopenharmony_ci 166094332d3Sopenharmony_ciint32_t UsbRawGetDeviceDescriptor(const UsbRawDevice *rawDev, struct UsbDeviceDescriptor *desc) 167094332d3Sopenharmony_ci{ 168094332d3Sopenharmony_ci if ((rawDev == NULL) || (desc == NULL)) { 169094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d rawDev or desc is NULL", __func__, __LINE__); 170094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 171094332d3Sopenharmony_ci } 172094332d3Sopenharmony_ci 173094332d3Sopenharmony_ci return RawGetDeviceDescriptor((const struct UsbDevice *)rawDev, desc); 174094332d3Sopenharmony_ci} 175094332d3Sopenharmony_ci 176094332d3Sopenharmony_ciint32_t UsbRawClaimInterface(const UsbRawHandle *devHandle, int32_t interfaceNumber) 177094332d3Sopenharmony_ci{ 178094332d3Sopenharmony_ci if (devHandle == NULL) { 179094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d devHandle is NULL", __func__, __LINE__); 180094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 181094332d3Sopenharmony_ci } 182094332d3Sopenharmony_ci 183094332d3Sopenharmony_ci return RawClaimInterface((struct UsbDeviceHandle *)devHandle, interfaceNumber); 184094332d3Sopenharmony_ci} 185094332d3Sopenharmony_ci 186094332d3Sopenharmony_ciint32_t UsbRawReleaseInterface(const UsbRawHandle *devHandle, int32_t interfaceNumber) 187094332d3Sopenharmony_ci{ 188094332d3Sopenharmony_ci if (devHandle == NULL) { 189094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d devHandle is NULL", __func__, __LINE__); 190094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 191094332d3Sopenharmony_ci } 192094332d3Sopenharmony_ci 193094332d3Sopenharmony_ci return RawReleaseInterface((struct UsbDeviceHandle *)devHandle, interfaceNumber); 194094332d3Sopenharmony_ci} 195094332d3Sopenharmony_ci 196094332d3Sopenharmony_ciint32_t UsbRawResetDevice(const UsbRawHandle *devHandle) 197094332d3Sopenharmony_ci{ 198094332d3Sopenharmony_ci if (devHandle == NULL) { 199094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d devHandle is NULL", __func__, __LINE__); 200094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 201094332d3Sopenharmony_ci } 202094332d3Sopenharmony_ci 203094332d3Sopenharmony_ci return RawResetDevice((const struct UsbDeviceHandle *)devHandle); 204094332d3Sopenharmony_ci} 205094332d3Sopenharmony_ci 206094332d3Sopenharmony_cistruct UsbRawRequest *UsbRawAllocRequest(const UsbRawHandle *devHandle, int32_t isoPackets, int32_t length) 207094332d3Sopenharmony_ci{ 208094332d3Sopenharmony_ci if (devHandle == NULL) { 209094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d devHandle is NULL", __func__, __LINE__); 210094332d3Sopenharmony_ci return NULL; 211094332d3Sopenharmony_ci } 212094332d3Sopenharmony_ci 213094332d3Sopenharmony_ci return (struct UsbRawRequest *)RawAllocRequest((const struct UsbDeviceHandle *)devHandle, isoPackets, length); 214094332d3Sopenharmony_ci} 215094332d3Sopenharmony_ci 216094332d3Sopenharmony_ciint32_t UsbRawFreeRequest(const struct UsbRawRequest *request) 217094332d3Sopenharmony_ci{ 218094332d3Sopenharmony_ci if (request == NULL) { 219094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d request is NULL", __func__, __LINE__); 220094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 221094332d3Sopenharmony_ci } 222094332d3Sopenharmony_ci 223094332d3Sopenharmony_ci return RawFreeRequest((const struct UsbHostRequest *)request); 224094332d3Sopenharmony_ci} 225094332d3Sopenharmony_ci 226094332d3Sopenharmony_ciint32_t UsbRawFillBulkRequest( 227094332d3Sopenharmony_ci const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawFillRequestData *fillData) 228094332d3Sopenharmony_ci{ 229094332d3Sopenharmony_ci if ((request == NULL) || (devHandle == NULL) || (fillData == NULL)) { 230094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d invalid param", __func__, __LINE__); 231094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 232094332d3Sopenharmony_ci } 233094332d3Sopenharmony_ci 234094332d3Sopenharmony_ci return RawFillBulkRequest((struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle, 235094332d3Sopenharmony_ci (const struct UsbFillRequestData *)fillData); 236094332d3Sopenharmony_ci} 237094332d3Sopenharmony_ci 238094332d3Sopenharmony_ciint32_t UsbRawFillControlSetup(const unsigned char *setup, const struct UsbControlRequestData *requestData) 239094332d3Sopenharmony_ci{ 240094332d3Sopenharmony_ci if ((setup == NULL) || (requestData == NULL)) { 241094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d setup or requestData is NULL", __func__, __LINE__); 242094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 243094332d3Sopenharmony_ci } 244094332d3Sopenharmony_ci 245094332d3Sopenharmony_ci return RawFillControlSetup(setup, requestData); 246094332d3Sopenharmony_ci} 247094332d3Sopenharmony_ci 248094332d3Sopenharmony_ciint32_t UsbRawFillControlRequest( 249094332d3Sopenharmony_ci const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawFillRequestData *fillData) 250094332d3Sopenharmony_ci{ 251094332d3Sopenharmony_ci if ((request == NULL) || (devHandle == NULL) || (fillData == NULL)) { 252094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d invalid param", __func__, __LINE__); 253094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 254094332d3Sopenharmony_ci } 255094332d3Sopenharmony_ci 256094332d3Sopenharmony_ci return RawFillControlRequest((struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle, 257094332d3Sopenharmony_ci (const struct UsbFillRequestData *)fillData); 258094332d3Sopenharmony_ci} 259094332d3Sopenharmony_ci 260094332d3Sopenharmony_ciint32_t UsbRawFillInterruptRequest( 261094332d3Sopenharmony_ci const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawFillRequestData *fillData) 262094332d3Sopenharmony_ci{ 263094332d3Sopenharmony_ci if ((request == NULL) || (devHandle == NULL) || (fillData == NULL)) { 264094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d invalid param", __func__, __LINE__); 265094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 266094332d3Sopenharmony_ci } 267094332d3Sopenharmony_ci 268094332d3Sopenharmony_ci return RawFillInterruptRequest((struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle, 269094332d3Sopenharmony_ci (const struct UsbFillRequestData *)fillData); 270094332d3Sopenharmony_ci} 271094332d3Sopenharmony_ci 272094332d3Sopenharmony_ciint32_t UsbRawFillIsoRequest( 273094332d3Sopenharmony_ci const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawFillRequestData *fillData) 274094332d3Sopenharmony_ci{ 275094332d3Sopenharmony_ci if ((request == NULL) || (devHandle == NULL) || (fillData == NULL)) { 276094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d invalid param", __func__, __LINE__); 277094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 278094332d3Sopenharmony_ci } 279094332d3Sopenharmony_ci 280094332d3Sopenharmony_ci return RawFillIsoRequest((struct UsbHostRequest *)request, (const struct UsbDeviceHandle *)devHandle, 281094332d3Sopenharmony_ci (const struct UsbFillRequestData *)fillData); 282094332d3Sopenharmony_ci} 283094332d3Sopenharmony_ci 284094332d3Sopenharmony_ciint32_t UsbRawSubmitRequest(const struct UsbRawRequest *request) 285094332d3Sopenharmony_ci{ 286094332d3Sopenharmony_ci if (request == NULL) { 287094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d request is NULL", __func__, __LINE__); 288094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 289094332d3Sopenharmony_ci } 290094332d3Sopenharmony_ci 291094332d3Sopenharmony_ci return RawSubmitRequest((const struct UsbHostRequest *)request); 292094332d3Sopenharmony_ci} 293094332d3Sopenharmony_ci 294094332d3Sopenharmony_ciint32_t UsbRawCancelRequest(const struct UsbRawRequest *request) 295094332d3Sopenharmony_ci{ 296094332d3Sopenharmony_ci if (request == NULL) { 297094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d request is NULL", __func__, __LINE__); 298094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 299094332d3Sopenharmony_ci } 300094332d3Sopenharmony_ci 301094332d3Sopenharmony_ci return RawCancelRequest((const struct UsbHostRequest *)request); 302094332d3Sopenharmony_ci} 303094332d3Sopenharmony_ci 304094332d3Sopenharmony_ciint32_t UsbRawHandleRequests(const UsbRawHandle *devHandle) 305094332d3Sopenharmony_ci{ 306094332d3Sopenharmony_ci if (devHandle == NULL) { 307094332d3Sopenharmony_ci HDF_LOGE("%{public}s:%{public}d devHandle is NULL", __func__, __LINE__); 308094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 309094332d3Sopenharmony_ci } 310094332d3Sopenharmony_ci 311094332d3Sopenharmony_ci return RawHandleRequest((const struct UsbDeviceHandle *)devHandle); 312094332d3Sopenharmony_ci} 313