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 #ifndef USB_HOST_SDK_IF_TEST_H 17 #define USB_HOST_SDK_IF_TEST_H 18 19 #include "data_fifo.h" 20 #include "hdf_base.h" 21 #include "hdf_device_desc.h" 22 #include "osal_atomic.h" 23 #include "usb_ddk.h" 24 #include "usb_ddk_interface.h" 25 #include "usb_session.h" 26 27 typedef enum { 28 CMD_OPEN_PARM = 0, 29 CMD_CLOSE_PARM, 30 CMD_WRITE_PARM, 31 CMD_READ_PARM, 32 CMD_GET_BAUDRATE, 33 CMD_SET_BAUDRATE, 34 CMD_WRITE_DATA_SYNC, 35 CMD_READ_DATA_SYNC, 36 CMD_CLASS_CTRL_SYNC, 37 CMD_STD_CTRL_GET_DESCRIPTOR_CMD, 38 CMD_STD_CTRL_GET_STATUS_CMD, 39 CMD_STD_CTRL_GET_CONFIGURATION, 40 CMD_STD_CTRL_GET_INTERFACE, 41 CMD_STD_CTRL_GET_DESCRIPTOR_ASYNC, 42 } SerialOPCmd; 43 44 #define DATARATE 9600 45 #define DATA_BITS_LENGTH 8 46 #define ACM_NW 16 47 #define ACM_NR 16 48 #define TARGET_MASK 0x3 49 #define REQUEST_TYPE_MASK 0x3 50 #define DIRECTION_MASK 0x1 51 #define USB_CTRL_SET_TIMEOUT 0 52 53 struct AcmDevice; 54 55 struct AcmWb { 56 struct UsbRequest *request; 57 struct AcmDevice *instance; 58 uint8_t *buf; 59 uint32_t len; 60 int32_t use; 61 }; 62 63 struct AcmRb { 64 uint8_t *base; 65 int32_t size; 66 int32_t index; 67 int32_t use; 68 struct AcmDevice *instance; 69 }; 70 71 struct SerialDevice { 72 struct AcmDevice *acm; 73 struct UsbCdcLineCoding lineCoding; 74 struct OsalMutex lock; 75 }; 76 77 struct AcmDevice { 78 struct IDeviceIoService service; 79 struct HdfDeviceObject *device; 80 struct UsbInterface *ctrIface; 81 struct UsbInterface *intIface; 82 struct UsbInterface *dataIface; 83 struct UsbPipeInfo *ctrPipe; 84 struct UsbPipeInfo *intPipe; 85 struct UsbPipeInfo *dataInPipe; 86 struct UsbPipeInfo *dataOutPipe; 87 struct AcmWb wb[ACM_NW]; 88 struct AcmRb rb[ACM_NR]; 89 struct UsbPipeInfo wPipeInfo; 90 struct OsalMutex writeLock; 91 struct OsalMutex readLock; 92 uint8_t *notificationBuffer; 93 struct UsbRequest *notifyReq; 94 struct UsbRequest *readReq[ACM_NR]; 95 struct UsbRequest *writeReq; 96 struct UsbRequest *ctrlReq; 97 struct OsalMutex lock; 98 struct UsbInterface *itface; 99 UsbInterfaceHandle *devHandle; 100 UsbInterfaceHandle *data_devHandle; 101 UsbInterfaceHandle *ctrl_devHandle; 102 UsbInterfaceHandle *int_devHandle; 103 struct UsbSession *session; 104 struct SerialDevice *port; 105 uint32_t nbIndex; 106 uint32_t nbSize; 107 int32_t transmitting; 108 int32_t ctrlReqNum; 109 uint8_t busNum; 110 uint8_t devAddr; 111 uint8_t interfaceIndex; 112 uint32_t ctrlSize; 113 uint32_t intSize; 114 uint32_t writeSize; 115 uint32_t readSize; 116 struct UsbCdcLineCoding lineCoding; 117 }; 118 119 struct TestControlMsgData { 120 uint8_t request; 121 uint8_t requestType; 122 uint16_t value; 123 uint16_t index; 124 void *data; 125 uint16_t size; 126 }; 127 128 #endif 129