/* ********************************************************************************************************* * 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) * * Filename : usbd_cdc.h * Version : V4.06.01 ********************************************************************************************************* */ /* ********************************************************************************************************* * MODULE ********************************************************************************************************* */ #ifndef USBD_CDC_MODULE_PRESENT #define USBD_CDC_MODULE_PRESENT /* ********************************************************************************************************* * INCLUDE FILES ********************************************************************************************************* */ #include "../../Source/usbd_core.h" /* ********************************************************************************************************* * DEFINES ********************************************************************************************************* */ /* ********************************************************************************************************* * CDC INVALID INSTANCE NUMBERS DEFINES ********************************************************************************************************* */ #define USBD_CDC_NBR_NONE DEF_INT_08U_MAX_VAL #define USBD_CDC_DATA_IF_NBR_NONE DEF_INT_08U_MAX_VAL /* ********************************************************************************************************* * COMMUNICATIONS CLASS SUBCLASS CODES DEFINES * * Note(s) : (1) Communication class subclass codes are defined in table 4 from the CDC specification * revision 1.2. ********************************************************************************************************* */ #define USBD_CDC_SUBCLASS_RSVD 0x00u /* Reserved. */ #define USBD_CDC_SUBCLASS_DLCM 0x01u /* Direct line control model. */ #define USBD_CDC_SUBCLASS_ACM 0x02u /* Abstract control model. */ #define USBD_CDC_SUBCLASS_TCM 0x03u /* Telephone control model. */ #define USBD_CDC_SUBCLASS_MCCM 0x04u /* Multi-channel control model. */ #define USBD_CDC_SUBCLASS_CAPICM 0x05u /* CAPI control model. */ #define USBD_CDC_SUBCLASS_ENCM 0x06u /* Ethernet networking control model. */ #define USBD_CDC_SUBCLASS_ATM 0x07u /* ATM networking control model. */ #define USBD_CDC_SUBCLASS_WHCM 0x08u /* Wireless handset control model. */ #define USBD_CDC_SUBCLASS_DEV_MGMT 0x09u /* Device management. */ #define USBD_CDC_SUBCLASS_MDLM 0x0Au /* Mobile direct line model. */ #define USBD_CDC_SUBCLASS_OBEX 0x0Bu /* OBEX. */ #define USBD_CDC_SUBCLASS_EEM 0x0Cu /* Ethernet emulation model. */ #define USBD_CDC_SUBCLASS_NCM 0x0Du /* Network control model. */ #define USBD_CDC_SUBCLASS_VENDOR 0xFEu /* Vendor specific. */ /* ********************************************************************************************************* * COMMUNICATION CLASS PROTOCOL CODES DEFINES * * Note(s) : (1) Communication class protocol codes are defined in table 5 from the CDC specification * revision 1.2. ********************************************************************************************************* */ #define USBD_CDC_COMM_PROTOCOL_NONE 0x00u /* No class specific protocol required. */ #define USBD_CDC_COMM_PROTOCOL_AT_V250 0x01u /* AT Commands: V.250 etc. */ #define USBD_CDC_COMM_PROTOCOL_AT_PCCA_101 0x02u /* AT Commands defined by PCCA-101. */ #define USBD_CDC_COMM_PROTOCOL_AT_PCCA_101_ANNEX 0x03u /* AT Commands defined by PCCA-101 & Annex O. */ #define USBD_CDC_COMM_PROTOCOL_AT_GSM_7_07 0x04u /* AT Commands defined by GSM 07.07 */ #define USBD_CDC_COMM_PROTOCOL_AT_3GPP_27_07 0x05u /* AT Commands defined by 3GPP 27.007 */ #define USBD_CDC_COMM_PROTOCOL_AT_TIA_CDMA 0x06u /* AT Commands defined by TIA for CDMA */ #define USBD_CDC_COMM_PROTOCOL_EEM 0x07u /* Ethernet Emulation Model. */ #define USBD_CDC_COMM_PROTOCOL_EXT 0xFEu /* External Protocol: Commands defined by command ... */ /* ... set functional descriptor. */ #define USBD_CDC_COMM_PROTOCOL_VENDOR 0xFFu /* Vendor-specific. */ /* ********************************************************************************************************* * DATA INTERFACE CLASS PROTOCOL CODES DEFINES * * Note(s) : (1) Data interface class protocol codes are defined in table 7 from the CDC specification * revision 1.2. ********************************************************************************************************* */ #define USBD_CDC_DATA_PROTOCOL_NONE 0x00u /* No class specific protocol required. */ #define USBD_CDC_DATA_PROTOCOL_NTB 0x01u /* Network transfer block. */ #define USBD_CDC_DATA_PROTOCOL_PHY 0x30u /* Physical interface protocol for ISDN BRI. */ #define USBD_CDC_DATA_PROTOCOL_HDLC 0x31u /* Physical interface protocol for ISDN BRI. */ #define USBD_CDC_DATA_PROTOCOL_TRANS 0x32u /* Transparent. */ #define USBD_CDC_DATA_PROTOCOL_Q921M 0x50u /* Management protocol for Q.921 data link protocol. */ #define USBD_CDC_DATA_PROTOCOL_Q921 0x51u /* Data link protocol for Q.931. */ #define USBD_CDC_DATA_PROTOCOL_Q921TM 0x52u /* TEI-multiplexor for Q.921 data link protocol. */ #define USBD_CDC_DATA_PROTOCOL_COMPRES 0x90u /* Data compression procedures. */ #define USBD_CDC_DATA_PROTOCOL_Q9131 0x91u /* Q.931/Euro- ISDN Euro-ISDN protocol control. */ #define USBD_CDC_DATA_PROTOCOL_V24 0x92u /* V.24 rate adaptation to ISDN. */ #define USBD_CDC_DATA_PROTOCOL_CAPI 0x93u /* CAPI commands. */ #define USBD_CDC_DATA_PROTOCOL_HOST 0xFDu /* Host based drivers. */ #define USBD_CDC_DATA_PROTOCOL_CDC 0xFEu /* The protocol(s) are described using a protocol ... */ /* ... unit functional descriptors on communications... */ /* ... class. */ #define USBD_CDC_DATA_PROTOCOL_VENDOR 0xFFu /* Vendor-specific. */ /* ********************************************************************************************************* * MANAGEMENT ELEMENTS REQUESTS DEFINES * * Note(s) : (1) Management elements requests are defined in table 19 from the CDC specification * revision 1.2. ********************************************************************************************************* */ #define USBD_CDC_REQ_SEND_ENCAP_COMM 0x00u #define USBD_CDC_REQ_GET_ENCAP_RESP 0x01u #define USBD_CDC_REQ_SET_COMM_FEATURE 0x02u #define USBD_CDC_REQ_GET_COMM_FEATURE 0x03u #define USBD_CDC_REQ_CLR_COMM_FEATURE 0x04u #define USBD_CDC_REQ_SET_AUX_LINE_STATE 0x10u #define USBD_CDC_REQ_SET_HOOK_STATE 0x11u #define USBD_CDC_REQ_PULSE_SETUP 0x12u #define USBD_CDC_REQ_SEND_PULSE 0x13u #define USBD_CDC_REQ_SET_PULSE_TIME 0x14u #define USBD_CDC_REQ_RING_AUX_JACK 0x15u #define USBD_CDC_REQ_SET_LINE_CODING 0x20u #define USBD_CDC_REQ_GET_LINE_CODING 0x21u #define USBD_CDC_REQ_SET_CTRL_LINE_STATE 0x22u #define USBD_CDC_REQ_SEND_BREAK 0x23u #define USBD_CDC_REQ_SET_RINGER_PAARMS 0x30u #define USBD_CDC_REQ_GET_RINGER_PARAMS 0x31u #define USBD_CDC_REQ_SET_OPERATION_PARAMS 0x32u #define USBD_CDC_REQ_GET_OPERATION_PARAMS 0x33u #define USBD_CDC_REQ_SET_LINE_PARAMS 0x34u #define USBD_CDC_REQ_GET_LINE_PARAMS 0x35u #define USBD_CDC_REQ_DIAL_DIGITS 0x36u #define USBD_CDC_REQ_SET_UNIT_PARAM 0x37u #define USBD_CDC_REQ_GET_UNIT_PARAM 0x38u #define USBD_CDC_REQ_CLR_UNUT_PARAM 0x39u #define USBD_CDC_REQ_GET_PROFILE 0x3Au #define USBD_CDC_REQ_SET_ETHER_MULTI_FILTER 0x40u #define USBD_CDC_REQ_SET_ETHER_PWR_MGT_FILTER 0x41u #define USBD_CDC_REQ_GET_ETHER_PWR_MGT_FILTER 0x42u #define USBD_CDC_REQ_SET_ETHER_PKT_FILTER 0x43u #define USBD_CDC_REQ_GET_ETHER_STAT 0x44u #define USBD_CDC_REQ_SET_ATM_DATA_FMT 0x50u #define USBD_CDC_REQ_GET_ATM_DATA_FMT 0x51u #define USBD_CDC_REQ_GET_ATM_DEV_STAT 0x52u #define USBD_CDC_REQ_SET_ATM_DFLT_VC 0x53u #define USBD_CDC_REQ_GET_ATM_VC_STAT 0x54u #define USBD_CDC_REQ_GET_NTB_PARAM 0x80u #define USBD_CDC_REQ_GET_NET_ADDR 0x81u #define USBD_CDC_REQ_SET_NET_ADDR 0x82u #define USBD_CDC_REQ_GET_NTB_FMT 0x83u #define USBD_CDC_REQ_SET_NTB_FMT 0x84u #define USBD_CDC_REQ_GET_NTB_INPUT_SIZE 0x85u #define USBD_CDC_REQ_SET_NTB_INPUT_SIZE 0x86u #define USBD_CDC_REQ_GET_MAX_DATAGRAM_SIZE 0x87u #define USBD_CDC_REQ_SET_MAX_DATAGRAM_SIZE 0x88u #define USBD_CDC_REQ_GET_CRC_MODE 0x89u #define USBD_CDC_REQ_SET_CRC_MODE 0x8Au /* ********************************************************************************************************* * CDC FUNCTIONAL DESCRIPTOR TYPE DEFINES * * Note(s) : (1) Functional descriptors types are defined in table 12 from the CDC specification revision * 1.2. ********************************************************************************************************* */ #define USBD_CDC_DESC_TYPE_CS_IF 0x24u #define USBD_CDC_DESC_TYPE_CS_EP 0x25u /* ********************************************************************************************************* * CDC FUNCTIONAL DESCRIPTOR SUBTYPE DEFINES * * Note(s) : (1) Functional descriptors subtypes are defined in table 13 from the CDC specification * revision 1.2. ********************************************************************************************************* */ #define USBD_CDC_DESC_SUBTYPE_HEADER 0x00u /* Header functional descriptor, which marks the ... */ /* ... beginning of the concatenated set of ... */ /* ... functional descriptors for the interface. */ #define USBD_CDC_DESC_SUBTYPE_CALL_MGMT 0x01u /* Call management functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_ACM 0x02u /* Abstract control management functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_DLM 0x03u /* Direct line management functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_TEL_RINGER 0x04u /* Telephone Ringer functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_TEL_CALL_LINE 0x05u /* Telephone call and line state reporting ... */ /* ... capabilities functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_UNION 0x06u /* Union functional descriptor. */ #define USBD_CDC_DESC_SUBTYPE_COUNTRY_SEL 0x07u /* Country selection functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_TEL_OPERA 0x08u /* Telephone operational modes functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_USB_TERM 0x09u /* USB terminal functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_NET_CH_TERM 0x0Au /* Network channel terminal descriptor. */ #define USBD_CDC_DESC_SUBTYPE_PROTOCOL_UNIT 0x0Bu /* Protocol unit functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_EXT_UNIT 0x0Cu /* Extension unit functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_MULTI_CH_MGMT 0x0Du /* Multi-Channel management functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_CAPI_CTRL 0x0Eu /* CAPI control management functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_ETHER_NET 0x0Fu /* Ethernet networking functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_ATM_NET 0x10u /* ATM networking functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_WIRELESS_CTRL 0x11u /* Wireless handset control model functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_MOBILE DLM 0x12u /* Mobile Direct Line Model functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_DETAIL 0x13u /* MDLM Detail functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_DEV_MGMT 0x14u /* Device management model functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_OBEX 0x15u /* OBEX functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_CMD_SET 0x16u /* Command set functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_CMD_SET_DETAIL 0x17u /* Command set detail functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_TCM 0x18u /* Telephone control model functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_OBEX_SERV 0x19u /* OBEX service identifier functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_NCM 0x1Au /* NCM functional descriptor.*/ #define USBD_CDC_DESC_SUBTYPE_VENDOR 0xFEu /* Vendor specific. */ /* ********************************************************************************************************* * CDC NOTIFIACTION DEFINES * * Note(s) : (1) Refer to Table 20: Class-Specific Notification Codes in 6.3 Management Element * Notifications, CDC spec. ********************************************************************************************************* */ #define USBD_CDC_NOTIFICATION_HEADER 8u #define USBD_CDC_NTF_SPEED_DATA_LEN 8u #define USBD_CDC_NTF_NETWORK_CONNECTION 0x00u #define USBD_CDC_NTF_RESPONSE_AVAILABLE 0x01u #define USBD_CDC_NTF_SERIAL_STATE 0x20u #define USBD_CDC_NTF_SPEED_CHANGE 0x2Au /* ********************************************************************************************************* * DATA TYPES ********************************************************************************************************* */ /* ********************************************************************************************************* * CDC SUBCLASS DRIVER ********************************************************************************************************* */ typedef const struct usbd_cdc_subclass_drv { /* Callback to handle management requests. */ CPU_BOOLEAN (*MngmtReq) ( CPU_INT08U dev_nbr, const USBD_SETUP_REQ *p_setup_req, void *p_subclass_arg); /* Callback to handle notification completion. */ void (*NotifyCmpl) ( CPU_INT08U dev_nbr, void *p_subclass_arg); /* Callback to build functional desc. */ void (*FnctDesc) ( CPU_INT08U dev_nbr, void *p_subclass_arg, CPU_INT08U first_dci_if_nbr); /* Callback to get the size of the functional desc. */ CPU_INT16U (*FnctDescSizeGet)( CPU_INT08U dev_nbr, void *p_subclass_arg); /* Callback to handle alternate setting event. */ void (*DataAltSet) ( CPU_INT08U dev_nbr, void *p_subclass_arg, CPU_INT08U if_alt_nbr); #if (USBD_CFG_MS_OS_DESC_EN == DEF_ENABLED) /* Callback to get subclass MS ext properties. */ CPU_INT08U (*FnctMSExtPropertyTbl)( CPU_INT08U dev_nbr, void *p_subclass_arg, USBD_MS_OS_EXT_PROPERTY **pp_ext_property_tbl); #endif } USBD_CDC_SUBCLASS_DRV; /* ********************************************************************************************************* * GLOBAL VARIABLES ********************************************************************************************************* */ /* ********************************************************************************************************* * MACROS ********************************************************************************************************* */ /* ********************************************************************************************************* * FUNCTION PROTOTYPES ********************************************************************************************************* */ void USBD_CDC_Init (USBD_ERR *p_err); CPU_INT08U USBD_CDC_Add (CPU_INT08U subclass, USBD_CDC_SUBCLASS_DRV *p_subclass_drv, void *p_subclass_arg, CPU_INT08U protocol, CPU_BOOLEAN notify_en, CPU_INT16U notify_interval, USBD_ERR *p_err); CPU_BOOLEAN USBD_CDC_CfgAdd (CPU_INT08U class_nbr, CPU_INT08U dev_nbr, CPU_INT08U cfg_nbr, const CPU_CHAR *comm_name, const CPU_CHAR *data_name, const CPU_CHAR *grp_name, USBD_ERR *p_err); CPU_BOOLEAN USBD_CDC_IsConn (CPU_INT08U class_nbr); /* ---------- DATA INTERFACE CLASS FUNCTIONS ---------- */ CPU_INT08U USBD_CDC_DataIF_Add(CPU_INT08U class_nbr, CPU_BOOLEAN isoc_en, CPU_INT08U protocol, USBD_ERR *p_err); CPU_INT32U USBD_CDC_DataRx (CPU_INT08U class_nbr, CPU_INT08U data_if_nbr, CPU_INT08U *p_buf, CPU_INT32U buf_len, CPU_INT16U timeout, USBD_ERR *p_err); CPU_INT32U USBD_CDC_DataTx (CPU_INT08U class_nbr, CPU_INT08U data_if_nbr, CPU_INT08U *p_buf, CPU_INT32U buf_len, CPU_INT16U timeout, USBD_ERR *p_err); void USBD_CDC_DataRxAsync (CPU_INT08U class_nbr, CPU_INT08U data_if_nbr, CPU_INT08U *p_buf, CPU_INT32U buf_len, USBD_ASYNC_FNCT async_fnct, void *p_async_arg, USBD_ERR *p_err); void USBD_CDC_DataTxAsync (CPU_INT08U class_nbr, CPU_INT08U data_if_nbr, CPU_INT08U *p_buf, CPU_INT32U buf_len, USBD_ASYNC_FNCT async_fnct, void *p_async_arg, USBD_ERR *p_err); /* ------------- NOTIFICATION FUNCTIONS -------------- */ CPU_BOOLEAN USBD_CDC_Notify (CPU_INT08U class_nbr, CPU_INT08U notification, CPU_INT16U value, CPU_INT08U *p_buf, CPU_INT16U data_len, USBD_ERR *p_err); #if 0 void USBD_CDC_GrpCreate (CPU_INT08 class_nbr, USBD_ERR *p_err); void USBD_CDC_GrpAdd (CPU_INT08U class_nbr, CPU_INT08U nbr_slave, USBD_ERR *p_err); #endif /* ********************************************************************************************************* * CONFIGURATION ERRORS ********************************************************************************************************* */ #ifndef USBD_CDC_CFG_MAX_NBR_DEV #error "USBD_CDC_CFG_MAX_NBR_DEV not #define'd in 'usbd_cfg.h' [MUST be >= 1]" #elif ((USBD_CDC_CFG_MAX_NBR_DEV < 1u ) || \ (USBD_CDC_CFG_MAX_NBR_DEV >= USBD_IF_NBR_NONE)) #error "USBD_CDC_CFG_MAX_NBR_DEV illegally #define'd in 'usbd_cfg.h' [MUST be >= 1]" #endif #ifndef USBD_CDC_CFG_MAX_NBR_CFG #error "USBD_CDC_CFG_MAX_NBR_CFG not #define'd in 'usbd_cfg.h' [MUST be >= 1]" #elif ((USBD_CDC_CFG_MAX_NBR_CFG < 1u ) || \ (USBD_CDC_CFG_MAX_NBR_CFG >= USBD_CFG_NBR_NONE)) #error "USBD_CDC_CFG_MAX_NBR_CFG illegally #define'd in 'usbd_cfg.h' [MUST be >= 1]" #endif #ifndef USBD_CDC_CFG_MAX_NBR_DATA_IF #error "USBD_CDC_CFG_MAX_NBR_DATA_IF not #define'd in 'usbd_cfg.h' [MUST be >= 1]" #elif ((USBD_CDC_CFG_MAX_NBR_DATA_IF < 1u ) || \ (USBD_CDC_CFG_MAX_NBR_DATA_IF >= USBD_IF_NBR_NONE)) #error "USBD_CDC_CFG_MAX_NBR_DATA_IF illegally #define'd in 'usbd_cfg.h' [MUST be >= 1]" #endif /* ********************************************************************************************************** * MODULE END ********************************************************************************************************** */ #endif