289 lines
14 KiB
C
289 lines
14 KiB
C
/*
|
|
*********************************************************************************************************
|
|
* uC/USB-Device
|
|
* The Embedded USB Device Stack
|
|
*
|
|
* Copyright 2004-2021 Silicon Laboratories Inc. www.silabs.com
|
|
*
|
|
* SPDX-License-Identifier: APACHE-2.0
|
|
*
|
|
* This software is subject to an open source license and is distributed by
|
|
* Silicon Laboratories Inc. pursuant to the terms of the Apache License,
|
|
* Version 2.0 available at www.apache.org/licenses/LICENSE-2.0.
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* NOTICE
|
|
*
|
|
* Semidrive modified this file to adapt it for ssdk platform.
|
|
* The modifications are only intended for use with Semidrive chips.
|
|
* Copyright of all the modifications belongs to Semidrive Semiconductor.
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
*
|
|
* USB COMMUNICATIONS DEVICE CLASS (CDC)
|
|
* ABSTRACT CONTROL MODEL (ACM)
|
|
* SERIAL EMULATION
|
|
*
|
|
* Filename : usbd_acm_serial.h
|
|
* Version : V4.06.01
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* MODULE
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#ifndef USBD_ACM_SERIAL_MODULE_PRESENT
|
|
#define USBD_ACM_SERIAL_MODULE_PRESENT
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* INCLUDE FILES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#include "../usbd_cdc.h"
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* DEFINES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define USBD_ACM_SERIAL_NBR_NONE DEF_INT_08U_MAX_VAL
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* PORT SETTINGS DEFINES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define USBD_ACM_SERIAL_PARITY_NONE 0u
|
|
#define USBD_ACM_SERIAL_PARITY_ODD 1u
|
|
#define USBD_ACM_SERIAL_PARITY_EVEN 2u
|
|
#define USBD_ACM_SERIAL_PARITY_MARK 3u
|
|
#define USBD_ACM_SERIAL_PARITY_SPACE 4u
|
|
|
|
|
|
#define USBD_ACM_SERIAL_STOP_BIT_1 0u
|
|
#define USBD_ACM_SERIAL_STOP_BIT_1_5 1u
|
|
#define USBD_ACM_SERIAL_STOP_BIT_2 2u
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* LINE EVENTS FLAGS DEFINES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define USBD_ACM_SERIAL_CTRL_BREAK DEF_BIT_00
|
|
#define USBD_ACM_SERIAL_CTRL_RTS DEF_BIT_01
|
|
#define USBD_ACM_SERIAL_CTRL_DTR DEF_BIT_02
|
|
|
|
#define USBD_ACM_SERIAL_STATE_DCD DEF_BIT_00
|
|
#define USBD_ACM_SERIAL_STATE_DSR DEF_BIT_01
|
|
#define USBD_ACM_SERIAL_STATE_BREAK DEF_BIT_02
|
|
#define USBD_ACM_SERIAL_STATE_RING DEF_BIT_03
|
|
#define USBD_ACM_SERIAL_STATE_FRAMING DEF_BIT_04
|
|
#define USBD_ACM_SERIAL_STATE_PARITY DEF_BIT_05
|
|
#define USBD_ACM_SERIAL_STATE_OVERUN DEF_BIT_06
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* CALL MANAGEMENT CAPABILITIES
|
|
*
|
|
* Note(s) : (1) See 'USB, Communications Class, Subclass Specification for PSTN Devices, Revision 1.2,
|
|
* February 9 2007', section '5.3.1 Call Management Functional Descriptor' for more details
|
|
* about the Call Management capabilities.
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define USBD_ACM_SERIAL_CALL_MGMT_DEV DEF_BIT_00
|
|
#define USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI DEF_BIT_01
|
|
#define USBD_ACM_SERIAL_CALL_MGMT_DATA_OVER_DCI (DEF_BIT_01 | DEF_BIT_00)
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* DATA TYPES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* LINE CODING DATA TYPE
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
typedef struct usbd_acm_serial_line_coding {
|
|
CPU_INT32U BaudRate;
|
|
CPU_INT08U Parity;
|
|
CPU_INT08U StopBits;
|
|
CPU_INT08U DataBits;
|
|
} USBD_ACM_SERIAL_LINE_CODING;
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* LINE CTRL CHANGE CALLBACK DATA TYPE
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
typedef void (*USBD_ACM_SERIAL_LINE_CTRL_CHNGD) (CPU_INT08U subclass_nbr,
|
|
CPU_INT08U event,
|
|
CPU_INT08U event_chngd,
|
|
void *p_arg);
|
|
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* LINE CODING CHANGE CALLBACK DATA TYPE
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
typedef CPU_BOOLEAN (*USBD_ACM_SERIAL_LINE_CODING_CHNGD) (CPU_INT08U subclass_nbr,
|
|
USBD_ACM_SERIAL_LINE_CODING *p_line_coding,
|
|
void *p_arg);
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* GLOBAL VARIABLES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* MACROS
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* FUNCTION PROTOTYPES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
void USBD_ACM_SerialInit (USBD_ERR *p_err);
|
|
|
|
CPU_INT08U USBD_ACM_SerialAdd (CPU_INT16U line_state_interval,
|
|
CPU_INT16U call_mgmt_capabilities,
|
|
USBD_ERR *p_err);
|
|
|
|
CPU_BOOLEAN USBD_ACM_SerialCfgAdd (CPU_INT08U subclass_nbr,
|
|
CPU_INT08U dev_nbr,
|
|
CPU_INT08U cfg_nbr,
|
|
USBD_ERR *p_err);
|
|
|
|
CPU_BOOLEAN USBD_ACM_SerialIsConn (CPU_INT08U subclass_nbr);
|
|
|
|
CPU_INT32U USBD_ACM_SerialRx (CPU_INT08U subclass_nbr,
|
|
CPU_INT08U *p_buf,
|
|
CPU_INT32U buf_len,
|
|
CPU_INT16U timeout,
|
|
USBD_ERR *p_err);
|
|
|
|
CPU_INT32U USBD_ACM_SerialTx (CPU_INT08U subclass_nbr,
|
|
CPU_INT08U *p_buf,
|
|
CPU_INT32U buf_len,
|
|
CPU_INT16U timeout,
|
|
USBD_ERR *p_err);
|
|
|
|
#if 1
|
|
void USBD_ACM_SerialRxAsync (CPU_INT08U subclass_nbr,
|
|
CPU_INT08U *p_buf,
|
|
CPU_INT32U buf_len,
|
|
USBD_ASYNC_FNCT async_fnct,
|
|
void *p_async_arg,
|
|
USBD_ERR *p_err);
|
|
|
|
void USBD_ACM_SerialTxAsync (CPU_INT08U subclass_nbr,
|
|
CPU_INT08U *p_buf,
|
|
CPU_INT32U buf_len,
|
|
USBD_ASYNC_FNCT async_fnct,
|
|
void *p_async_arg,
|
|
USBD_ERR *p_err);
|
|
#endif
|
|
|
|
CPU_INT08U USBD_ACM_SerialLineCtrlGet (CPU_INT08U subclass_nbr,
|
|
USBD_ERR *p_err);
|
|
|
|
void USBD_ACM_SerialLineCtrlReg (CPU_INT08U subclass_nbr,
|
|
USBD_ACM_SERIAL_LINE_CTRL_CHNGD line_ctrl_chngd,
|
|
void *p_arg,
|
|
USBD_ERR *p_err);
|
|
|
|
void USBD_ACM_SerialLineCodingGet(CPU_INT08U subclass_nbr,
|
|
USBD_ACM_SERIAL_LINE_CODING *p_line_coding,
|
|
USBD_ERR *p_err);
|
|
|
|
void USBD_ACM_SerialLineCodingSet(CPU_INT08U subclass_nbr,
|
|
USBD_ACM_SERIAL_LINE_CODING *p_line_coding,
|
|
USBD_ERR *p_err);
|
|
|
|
void USBD_ACM_SerialLineCodingReg(CPU_INT08U subclass_nbr,
|
|
USBD_ACM_SERIAL_LINE_CODING_CHNGD line_coding_chngd,
|
|
void *p_arg,
|
|
USBD_ERR *p_err);
|
|
|
|
void USBD_ACM_SerialLineStateSet (CPU_INT08U subclass_nbr,
|
|
CPU_INT08U events,
|
|
USBD_ERR *p_err);
|
|
|
|
void USBD_ACM_SerialLineStateClr (CPU_INT08U subclass_nbr,
|
|
CPU_INT08U events,
|
|
USBD_ERR *p_err);
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* FUNCTION PROTOTYPES
|
|
* DEFINED IN OS'S usbd_acm_serial_os.c
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* CONFIGURATION ERRORS
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#ifndef USBD_ACM_SERIAL_CFG_MAX_NBR_DEV
|
|
#error "USBD_ACM_SERIAL_CFG_MAX_NBR_DEV not #define'd in 'usbd_cfg.h' [MUST be >= 1]"
|
|
|
|
#elif (USBD_ACM_SERIAL_CFG_MAX_NBR_DEV < 1u)
|
|
#error "USBD_ACM_SERIAL_CFG_MAX_NBR_DEV illegally #define'd in 'usbd_cfg.h'[MUST be >= 1]"
|
|
|
|
#elif (USBD_ACM_SERIAL_CFG_MAX_NBR_DEV > USBD_CDC_CFG_MAX_NBR_DEV)
|
|
#error "USBD_ACM_SERIAL_CFG_MAX_NBR_DEV illegally #define'd in 'usbd_cfg.h' [MUST be <= USBD_CDC_CFG_MAX_NBR_DEV]"
|
|
#endif
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* MODULE END
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#endif
|