1 /* 2 * Copyright (c) 2020-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 #ifndef USB_RAW_API_H 17 #define USB_RAW_API_H 18 19 #include "usb_ddk.h" 20 #include "usb_session.h" 21 22 #define USB_MAXINTERFACES 32 23 24 typedef void *UsbRawDevice; 25 typedef void *UsbRawHandle; 26 typedef void (*UsbRawRequestCallback)(const void *requestArg); 27 28 struct UsbControlRequestData { 29 uint8_t requestType; 30 uint8_t requestCmd; 31 uint16_t value; 32 uint16_t index; 33 uint16_t length; 34 unsigned int timeout; 35 unsigned char *data; 36 }; 37 38 struct UsbRequestData { 39 unsigned char endPoint; 40 unsigned char *data; 41 int length; 42 int *requested; 43 unsigned int timeout; 44 }; 45 46 struct UsbRawDescriptorParam { 47 uint8_t descType; 48 uint8_t descIndex; 49 int length; 50 }; 51 52 struct UsbRawRequest { 53 unsigned char *buffer; 54 int length; 55 int actualLength; 56 UsbRequestStatus status; 57 void *userData; 58 }; 59 60 struct UsbRawFillRequestData { 61 unsigned char endPoint; 62 unsigned char *buffer; 63 int length; 64 int numIsoPackets; 65 UsbRawRequestCallback callback; 66 void *userData; 67 unsigned int timeout; 68 }; 69 70 struct UsbRawEndpointDescriptor { 71 struct UsbEndpointDescriptor endpointDescriptor; 72 const unsigned char *extra; /** Extra descriptors. */ 73 int extraLength; /** Length of the extra descriptors, in bytes. */ 74 }; 75 76 struct UsbRawInterfaceDescriptor { 77 struct UsbInterfaceDescriptor interfaceDescriptor; 78 const struct UsbRawEndpointDescriptor *endPoint; /** Array of endpoint descriptors. */ 79 const unsigned char *extra; /** Extra descriptors. */ 80 int extraLength; /* Length of the extra descriptors, in bytes. Must be non-negative. */ 81 }; 82 83 struct UsbRawInterface { 84 uint8_t numAltsetting; /* The number of alternate settings that belong to this interface. */ 85 /* Array of interface descriptors. */ 86 const struct UsbRawInterfaceDescriptor altsetting[]; 87 }; 88 89 struct UsbRawConfigDescriptor { 90 struct UsbConfigDescriptor configDescriptor; 91 const struct UsbRawInterface *interface[USB_MAXINTERFACES]; /** Array of interfaces supported by this configuration. */ 92 const unsigned char *extra; /** Extra descriptors. */ 93 int extraLength; /** Length of the extra descriptors, in bytes. Must be non-negative. */ 94 }; 95 96 int UsbRawInit(struct UsbSession **session); 97 int UsbRawExit(const struct UsbSession *session); 98 UsbRawHandle *UsbRawOpenDevice(const struct UsbSession *session, uint8_t busNum, uint8_t usbAddr); 99 int UsbRawCloseDevice(const UsbRawHandle *devHandle); 100 int UsbRawSendControlRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, 101 const struct UsbControlRequestData *requestData); 102 int UsbRawSendBulkRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, 103 const struct UsbRequestData *requestData); 104 int UsbRawSendInterruptRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, 105 const struct UsbRequestData *requestData); 106 int UsbRawGetConfigDescriptor(const UsbRawDevice *rawDev, uint8_t configIndex, struct UsbRawConfigDescriptor **config); 107 void UsbRawFreeConfigDescriptor(const struct UsbRawConfigDescriptor *config); 108 int UsbRawGetConfiguration(const UsbRawHandle *devHandle, int *config); 109 int UsbRawSetConfiguration(const UsbRawHandle *devHandle, int config); 110 int UsbRawGetDescriptor(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, 111 const struct UsbRawDescriptorParam *param, const unsigned char *data); 112 UsbRawDevice *UsbRawGetDevice(const UsbRawHandle *devHandle); 113 int UsbRawGetDeviceDescriptor(const UsbRawDevice *rawDev, struct UsbDeviceDescriptor *desc); 114 int UsbRawClaimInterface(const UsbRawHandle *devHandle, int interfaceNumber); 115 int UsbRawReleaseInterface(const UsbRawHandle *devHandle, int interfaceNumber); 116 int UsbRawResetDevice(const UsbRawHandle *devHandle); 117 struct UsbRawRequest *UsbRawAllocRequest(const UsbRawHandle *devHandle, int isoPackets, int length); 118 int UsbRawFreeRequest(const struct UsbRawRequest *request); 119 int UsbRawFillBulkRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, 120 const struct UsbRawFillRequestData *fillData); 121 int UsbRawFillControlSetup(const unsigned char *setup, const struct UsbControlRequestData *requestData); 122 int UsbRawFillControlRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, 123 const struct UsbRawFillRequestData *fillData); 124 int UsbRawFillInterruptRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, 125 const struct UsbRawFillRequestData *fillData); 126 int UsbRawFillIsoRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, 127 const struct UsbRawFillRequestData *fillData); 128 int UsbRawSubmitRequest(const struct UsbRawRequest *request); 129 int UsbRawCancelRequest(const struct UsbRawRequest *request); 130 int UsbRawHandleRequests(const UsbRawHandle *devHandle); 131 132 #endif /* USB_RAW_API_H */ 133