mirror of
https://github.com/openharmony/drivers_peripheral.git
synced 2026-08-25 02:23:31 -04:00
e25455e453
Signed-off-by: yanghaizhou <yanghaizhou1@huawei.com>
130 lines
3.9 KiB
C
130 lines
3.9 KiB
C
/*
|
|
* Copyright (c) 2021 Huawei Device Co., Ltd.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef HDF_USB_CDCACM_H
|
|
#define HDF_USB_CDCACM_H
|
|
|
|
#include "data_fifo.h"
|
|
#include "hdf_base.h"
|
|
#include "hdf_device_desc.h"
|
|
#include "osal_atomic.h"
|
|
#include "osal_mutex.h"
|
|
#include "usbfn_request.h"
|
|
#include "usb_ddk.h"
|
|
#include "usb_object.h"
|
|
|
|
#define USB_MAX_PACKET_SIZE 0x40
|
|
|
|
enum UsbSerialCmd {
|
|
USB_SERIAL_OPEN = 0,
|
|
USB_SERIAL_CLOSE,
|
|
USB_SERIAL_READ,
|
|
USB_SERIAL_WRITE,
|
|
USB_SERIAL_GET_BAUDRATE,
|
|
USB_SERIAL_SET_BAUDRATE,
|
|
USB_SERIAL_SET_PROP,
|
|
USB_SERIAL_GET_PROP,
|
|
USB_SERIAL_REGIST_PROP,
|
|
USB_SERIAL_WRITE_SPEED,
|
|
USB_SERIAL_WRITE_GET_TEMP_SPEED,
|
|
USB_SERIAL_WRITE_SPEED_DONE,
|
|
USB_SERIAL_WRITE_GET_TEMP_SPEED_UINT32,
|
|
USB_SERIAL_READ_SPEED,
|
|
USB_SERIAL_READ_GET_TEMP_SPEED,
|
|
USB_SERIAL_READ_SPEED_DONE,
|
|
USB_SERIAL_READ_GET_TEMP_SPEED_UINT32,
|
|
USB_SERIAL_INIT = 100,
|
|
USB_SERIAL_RELEASE = 101,
|
|
};
|
|
|
|
struct UsbSerial {
|
|
struct UsbAcmDevice *acm;
|
|
struct UsbCdcLineCoding lineCoding;
|
|
struct OsalMutex lock;
|
|
|
|
struct DListHead readPool;
|
|
struct DListHead readQueue;
|
|
int32_t readStarted;
|
|
int32_t readAllocated;
|
|
struct DataFifo readFifo;
|
|
struct DListHead writePool;
|
|
int32_t writeStarted;
|
|
int32_t writeAllocated;
|
|
struct DataFifo writeFifo;
|
|
bool writeBusy;
|
|
|
|
bool suspended;
|
|
bool startDelayed;
|
|
int32_t refCount;
|
|
};
|
|
|
|
struct AcmNotifyMethod {
|
|
void (*Connect)(struct UsbAcmDevice *acm);
|
|
void (*Disconnect)(struct UsbAcmDevice *acm);
|
|
int32_t (*SendBreak)(struct UsbAcmDevice *acm, int32_t duration);
|
|
};
|
|
|
|
struct UsbAcmPipe {
|
|
uint8_t id;
|
|
uint16_t maxPacketSize;
|
|
struct UsbFnInterface *ctrlIface;
|
|
};
|
|
|
|
struct UsbAcmInterface {
|
|
struct UsbFnInterface *fn;
|
|
UsbFnInterfaceHandle handle;
|
|
};
|
|
|
|
struct UsbAcmDevice {
|
|
struct IDeviceIoService service;
|
|
struct HdfDeviceObject *device;
|
|
struct UsbFnDevice *fnDev;
|
|
struct UsbAcmInterface ctrlIface;
|
|
struct UsbAcmInterface dataIface;
|
|
struct UsbAcmPipe notifyPipe;
|
|
struct UsbAcmPipe dataInPipe;
|
|
struct UsbAcmPipe dataOutPipe;
|
|
|
|
struct DListHead ctrlPool;
|
|
int32_t ctrlReqNum;
|
|
struct UsbFnRequest *notifyReq;
|
|
struct OsalMutex lock;
|
|
bool pending;
|
|
bool initFlag;
|
|
uint32_t enableEvtCnt;
|
|
char *udcName;
|
|
struct UsbSerial *port;
|
|
struct UsbCdcLineCoding lineCoding;
|
|
uint16_t serialState;
|
|
#define SERIAL_STATE_DCD (1 << 0)
|
|
#define SERIAL_STATE_DSR (1 << 1)
|
|
#define SERIAL_STATE_BREAK (1 << 2)
|
|
#define SERIAL_STATE_RING (1 << 3)
|
|
#define SERIAL_STATE_FRAMING (1 << 4)
|
|
#define SERIAL_STATE_PARITY (1 << 5)
|
|
#define SERIAL_STATE_OVERRUN (1 << 6)
|
|
|
|
uint16_t handshakeBits;
|
|
/* notification callbacks */
|
|
struct AcmNotifyMethod *notify;
|
|
};
|
|
|
|
struct CtrlInfo {
|
|
uint8_t request;
|
|
struct UsbAcmDevice *acm;
|
|
};
|
|
|
|
#endif /* HDF_USB_CDCACM_H */
|