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_API_SPEED_H 17 #define USB_HOST_SDK_API_SPEED_H 18 19 #include "hdf_base.h" 20 #include "hdf_device_desc.h" 21 #include "osal_atomic.h" 22 #include "usb_ddk.h" 23 #include "usb_ddk_interface.h" 24 #include "usb_session.h" 25 #include "data_fifo.h" 26 27 #define TEST_LENGTH 512 28 #define TEST_CYCLE 30 29 #define TEST_TIME 0xffffffff 30 #define TEST_PRINT_TIME 2 31 #define TEST_PRINT_TIME_UINT 1000 32 #define TEST_RECV_COUNT 10000 33 #define TEST_BYTE_COUNT 1024 34 #define TEST_FLOAT_COUNT (1.0) 35 #define TEST_SLEEP_TIME 10 36 37 #define TEST_WRITE true 38 #define TEST_READ false 39 #define USB_MAX_INTERFACES 32 40 #define DATARATE 9600 41 #define DATA_BITS_LENGTH 8 42 #define ACM_NW 30 43 #define ACM_NR 30 44 #define READ_BUF_SIZE 8192 45 #define DIRECTION_MASK 0x1 46 #define USB_CTRL_SET_TIMEOUT 0 47 #define USB_PIPE_DIR_OFFSET 7 48 49 typedef enum { 50 TEST_ZERO_TYPE = 0, 51 TEST_ONE_TYPE, 52 TEST_TWO_TYPE, 53 TEST_THREE_TYPE, 54 TEST_FOUR_TYPE, 55 TEST_FIVE_TYPE, 56 TEST_SIX_TYPE, 57 } TestCountType; 58 59 typedef enum { 60 CMD_OPEN_PARM = 0, 61 CMD_CLOSE_PARM, 62 CMD_WRITE_PARM, 63 CMD_READ_PARM, 64 CMD_GET_BAUDRATE, 65 CMD_SET_BAUDRATE, 66 CMD_WRITE_DATA_SYNC, 67 CMD_READ_DATA_SYNC, 68 CMD_CLASS_CTRL_SYNC, 69 CMD_STD_CTRL_GET_DESCRIPTOR_CMD, 70 CMD_STD_CTRL_GET_STATUS_CMD, 71 CMD_STD_CTRL_GET_CONFIGURATION, 72 CMD_STD_CTRL_GET_INTERFACE, 73 CMD_STD_CTRL_GET_DESCRIPTOR_ASYNC, 74 CMD_ADD_INTERFACE, 75 CMD_REMOVE_INTERFACE, 76 } SerialOPCmd; 77 78 struct AcmDevice; 79 struct AcmDb { 80 int32_t dbNum; 81 struct UsbRequest *request; 82 struct AcmDevice *instance; 83 uint8_t *buf; 84 int32_t len; 85 int32_t use; 86 }; 87 88 struct SerialDevice { 89 struct AcmDevice *acm; 90 struct UsbCdcLineCoding lineCoding; 91 struct OsalMutex lock; 92 struct DataFifo readFifo; 93 }; 94 95 struct AcmDevice { 96 struct IDeviceIoService service; 97 struct HdfDeviceObject *device; 98 struct UsbInterface *ctrIface; 99 struct UsbPipeInfo *ctrPipe; 100 struct UsbPipeInfo *intPipe; 101 struct UsbPipeInfo *dataInPipe; 102 struct UsbPipeInfo *dataOutPipe; 103 struct UsbPipeInfo *dataPipe; 104 struct AcmDb db[TEST_CYCLE]; 105 struct UsbPipeInfo wPipeInfo; 106 struct OsalMutex writeLock; 107 struct OsalMutex readLock; 108 struct UsbRequest *notifyReq; 109 struct UsbRequest *readReq[ACM_NR]; 110 struct UsbRequest *writeReq; 111 struct UsbRequest *ctrlReq; 112 struct OsalMutex lock; 113 struct UsbInterface *itface; 114 UsbInterfaceHandle *devHandle[USB_MAX_INTERFACES]; 115 UsbInterfaceHandle *ctrDevHandle; 116 struct UsbSession *session; 117 struct SerialDevice *port; 118 uint32_t nbIndex; 119 uint32_t nbSize; 120 int32_t transmitting; 121 int32_t ctrlReqNum; 122 uint8_t busNum; 123 uint8_t devAddr; 124 uint8_t interfaceCnt; 125 uint8_t *notificationBuffer; 126 uint8_t interfaceIndex[USB_MAX_INTERFACES]; 127 struct UsbInterface *iface[USB_MAX_INTERFACES]; 128 uint32_t ctrlSize; 129 uint32_t intSize; 130 uint32_t writeSize; 131 uint32_t readSize; 132 uint32_t dataSize; 133 struct UsbCdcLineCoding lineCoding; 134 }; 135 136 #endif /* USB_HOST_SDK_API_SPEED_H */ 137