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#ifndef HDF_USB_SERIAL_RAWAPI_H 17094332d3Sopenharmony_ci#define HDF_USB_SERIAL_RAWAPI_H 18094332d3Sopenharmony_ci 19094332d3Sopenharmony_ci#include "data_fifo.h" 20094332d3Sopenharmony_ci#include "hdf_device_desc.h" 21094332d3Sopenharmony_ci#include "usb_raw_api.h" 22094332d3Sopenharmony_ci 23094332d3Sopenharmony_ci#define USB_MAX_INTERFACES 32 24094332d3Sopenharmony_ci#define DATARATE 9600 25094332d3Sopenharmony_ci#define DATA_BITS_LENGTH 8 26094332d3Sopenharmony_ci#define ACM_NW 16 27094332d3Sopenharmony_ci#define ACM_NR 16 28094332d3Sopenharmony_ci#define READ_BUF_SIZE 8192 29094332d3Sopenharmony_ci#define USB_CTRL_SET_TIMEOUT 5000 30094332d3Sopenharmony_ci#define USB_PIPE_DIR_OFFSET 7 31094332d3Sopenharmony_ci 32094332d3Sopenharmony_citypedef enum { 33094332d3Sopenharmony_ci CMD_OPEN_PARM = 0, 34094332d3Sopenharmony_ci CMD_CLOSE_PARM, 35094332d3Sopenharmony_ci CMD_WRITE_PARM, 36094332d3Sopenharmony_ci CMD_READ_PARM, 37094332d3Sopenharmony_ci CMD_GET_BAUDRATE, 38094332d3Sopenharmony_ci CMD_SET_BAUDRATE, 39094332d3Sopenharmony_ci CMD_WRITE_DATA_SYNC, 40094332d3Sopenharmony_ci CMD_READ_DATA_SYNC, 41094332d3Sopenharmony_ci CMD_CLASS_CTRL_SYNC, 42094332d3Sopenharmony_ci CMD_STD_CTRL_GET_DESCRIPTOR_CMD, 43094332d3Sopenharmony_ci CMD_STD_CTRL_GET_STATUS_CMD, 44094332d3Sopenharmony_ci CMD_STD_CTRL_GET_CONFIGURATION, 45094332d3Sopenharmony_ci CMD_STD_CTRL_GET_INTERFACE, 46094332d3Sopenharmony_ci CMD_STD_CTRL_GET_DESCRIPTOR_ASYNC, 47094332d3Sopenharmony_ci CMD_ADD_INTERFACE, 48094332d3Sopenharmony_ci CMD_REMOVE_INTERFACE, 49094332d3Sopenharmony_ci} SerialOPCmd; 50094332d3Sopenharmony_ci 51094332d3Sopenharmony_citypedef enum { 52094332d3Sopenharmony_ci HOST_ACM_SYNC_READ = 1, 53094332d3Sopenharmony_ci HOST_ACM_SYNC_WRITE, 54094332d3Sopenharmony_ci HOST_ACM_ASYNC_READ, 55094332d3Sopenharmony_ci HOST_ACM_ASYNC_WRITE, 56094332d3Sopenharmony_ci HOST_ACM_CTRL_READ, 57094332d3Sopenharmony_ci HOST_ACM_CTRL_WRITE, 58094332d3Sopenharmony_ci HOST_ACM_CTRL_CLASS_SYNC, 59094332d3Sopenharmony_ci HOST_ACM_CTRL_GET_STATUS, 60094332d3Sopenharmony_ci HOST_ACM_CTRL_SYNC_DESCRIPTOR, 61094332d3Sopenharmony_ci HOST_ACM_CTRL_ASYNC_DESCRIPTOR, 62094332d3Sopenharmony_ci HOST_ACM_CTRL_GET_CONFIGURATION, 63094332d3Sopenharmony_ci HOST_ACM_CTRL_GET_INTERFACE, 64094332d3Sopenharmony_ci HOST_ACM_SPEED_TEST, 65094332d3Sopenharmony_ci HOST_ACM_SET_BAUDRATE, 66094332d3Sopenharmony_ci HOST_ACM_GET_BAUDRATE, 67094332d3Sopenharmony_ci HOST_ACM_ADD_INTERFACE, 68094332d3Sopenharmony_ci HOST_ACM_REMOVE_INTERFACE, 69094332d3Sopenharmony_ci} AcmModuleTestCmdType; 70094332d3Sopenharmony_ci 71094332d3Sopenharmony_citypedef enum { 72094332d3Sopenharmony_ci USB_RAW_IO_PROCESS_RUNNING, 73094332d3Sopenharmony_ci USB_RAW_IO_PROCESS_STOP, 74094332d3Sopenharmony_ci USB_RAW_IO_PROCESS_STOPED 75094332d3Sopenharmony_ci} UsbRawIoProcessStatusType; 76094332d3Sopenharmony_ci 77094332d3Sopenharmony_cistruct AcmDevice; 78094332d3Sopenharmony_cistruct AcmWb { 79094332d3Sopenharmony_ci struct UsbRawRequest *request; 80094332d3Sopenharmony_ci struct AcmDevice *instance; 81094332d3Sopenharmony_ci uint8_t *buf; 82094332d3Sopenharmony_ci uint32_t len; 83094332d3Sopenharmony_ci int32_t use; 84094332d3Sopenharmony_ci}; 85094332d3Sopenharmony_ci 86094332d3Sopenharmony_cistruct AcmRb { 87094332d3Sopenharmony_ci uint8_t *base; 88094332d3Sopenharmony_ci int32_t size; 89094332d3Sopenharmony_ci int32_t index; 90094332d3Sopenharmony_ci int32_t use; 91094332d3Sopenharmony_ci struct AcmDevice *instance; 92094332d3Sopenharmony_ci}; 93094332d3Sopenharmony_ci 94094332d3Sopenharmony_cistruct SerialDevice { 95094332d3Sopenharmony_ci struct AcmDevice *acm; 96094332d3Sopenharmony_ci struct UsbCdcLineCoding lineCoding; 97094332d3Sopenharmony_ci struct OsalMutex lock; 98094332d3Sopenharmony_ci struct DataFifo readFifo; 99094332d3Sopenharmony_ci}; 100094332d3Sopenharmony_ci 101094332d3Sopenharmony_cistruct UsbEndpoint { 102094332d3Sopenharmony_ci uint8_t addr; 103094332d3Sopenharmony_ci uint8_t interval; 104094332d3Sopenharmony_ci uint16_t maxPacketSize; 105094332d3Sopenharmony_ci}; 106094332d3Sopenharmony_ci 107094332d3Sopenharmony_cistruct AcmDevice { 108094332d3Sopenharmony_ci struct IDeviceIoService service; 109094332d3Sopenharmony_ci struct HdfDeviceObject *device; 110094332d3Sopenharmony_ci uint8_t ctrlIface; 111094332d3Sopenharmony_ci uint8_t dataIface; 112094332d3Sopenharmony_ci struct UsbEndpoint *notifyEp; 113094332d3Sopenharmony_ci struct UsbEndpoint *dataInEp; 114094332d3Sopenharmony_ci struct UsbEndpoint *dataOutEp; 115094332d3Sopenharmony_ci struct UsbRawConfigDescriptor *config; 116094332d3Sopenharmony_ci struct AcmWb wb[ACM_NW]; 117094332d3Sopenharmony_ci struct AcmRb rb[ACM_NR]; 118094332d3Sopenharmony_ci struct OsalMutex writeLock; 119094332d3Sopenharmony_ci struct OsalMutex readLock; 120094332d3Sopenharmony_ci struct UsbRawRequest *notifyReq; 121094332d3Sopenharmony_ci struct UsbRawRequest *readReq[ACM_NR]; 122094332d3Sopenharmony_ci struct UsbRawRequest *writeReq; 123094332d3Sopenharmony_ci struct UsbRawRequest *ctrlReq; 124094332d3Sopenharmony_ci struct OsalMutex lock; 125094332d3Sopenharmony_ci UsbRawHandle *devHandle; 126094332d3Sopenharmony_ci struct UsbSession *session; 127094332d3Sopenharmony_ci struct SerialDevice *port; 128094332d3Sopenharmony_ci uint32_t nbIndex; 129094332d3Sopenharmony_ci uint32_t nbSize; 130094332d3Sopenharmony_ci int32_t transmitting; 131094332d3Sopenharmony_ci uint8_t busNum; 132094332d3Sopenharmony_ci uint8_t devAddr; 133094332d3Sopenharmony_ci uint8_t interfaceCnt; 134094332d3Sopenharmony_ci uint8_t *notificationBuffer; 135094332d3Sopenharmony_ci uint8_t interfaceIndex[USB_MAX_INTERFACES]; 136094332d3Sopenharmony_ci struct UsbCdcLineCoding lineCoding; 137094332d3Sopenharmony_ci struct OsalThread ioThread; 138094332d3Sopenharmony_ci bool initFlag; 139094332d3Sopenharmony_ci}; 140094332d3Sopenharmony_ci 141094332d3Sopenharmony_ci#endif /* HDF_USB_SERIAL_RAWAPI_H */ 142