/* ********************************************************************************************************* * uC/USB-Host * The Embedded USB Host 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. * ********************************************************************************************************* */ /* ********************************************************************************************************* * * COMMUNICATIONS DEVICE CLASS (CDC) * ABSTRACT CONTROL MODEL (ACM) * * Filename : usbh_acm.h * Version : V3.42.01 ********************************************************************************************************* */ /* ********************************************************************************************************* * MODULE ********************************************************************************************************* */ #ifndef USBH_CDC_ACM_MODULE_PRESENT #define USBH_CDC_ACM_MODULE_PRESENT /* ********************************************************************************************************* * INCLUDE FILES ********************************************************************************************************* */ #include "../usbh_cdc.h" /* ********************************************************************************************************* * EXTERNS ********************************************************************************************************* */ #ifdef USBH_CDC_ACM_MODULE #define USBH_CDC_ACM_EXT #else #define USBH_CDC_ACM_EXT extern #endif /* ********************************************************************************************************* * DEFINES ********************************************************************************************************* */ #define USBH_CDC_ACM_DTR_SET 0x01u /* RS-232 signal Data Terminal Ready */ #define USBH_CDC_ACM_RTS_SET 0x01u /* RS-232 signal Request To Send */ #define USBH_CDC_ACM_DTR_CLR 0x00u /* RS-232 signal Data Terminal Ready */ #define USBH_CDC_ACM_RTS_CLR 0x00u /* RS-232 signal Request To Send */ #define USBH_CDC_ACM_SER_DCD 0x01u /* RS-232 signal Data Carrier Detection */ #define USBH_CDC_ACM_SER_DSR 0x02u /* RS-232 signal Data Set Ready */ #define USBH_CDC_ACM_SER_BRK 0x04u /* RS-232 signal Break */ #define USBH_CDC_ACM_SER_RING_INDC 0x08u /* RS-232 signal Ring Indicator */ #define USBH_CDC_ACM_SER_FRAME_ERR 0x10u /* RS-232 signal Frame Error */ #define USBH_CDC_ACM_SER_PARITY_ERR 0x20u /* RS-232 signal Parity Error */ #define USBH_CDC_ACM_SER_OVER_RUN 0x40u /* RS-232 signal Buffer Over Run Error */ /* ********************************************************************************************************* * SET/GET LINE CODING VALUES * * Note(s) : (1) See "Universal Serial Bus Communications Class Subclass Specification for PSTN Devices", * version 1.2, February 9, 2007. Section 6.3.11 Table 17 ********************************************************************************************************* */ #define USBH_CDC_ACM_LINE_CODING_BAUDRATE_110 110u #define USBH_CDC_ACM_LINE_CODING_BAUDRATE_300 300u #define USBH_CDC_ACM_LINE_CODING_BAUDRATE_1200 1200u #define USBH_CDC_ACM_LINE_CODING_BAUDRATE_2400 2400u #define USBH_CDC_ACM_LINE_CODING_BAUDRATE_4800 4800u #define USBH_CDC_ACM_LINE_CODING_BAUDRATE_9600 9600u #define USBH_CDC_ACM_LINE_CODING_BAUDRATE_19200 19200u #define USBH_CDC_ACM_LINE_CODING_BAUDRATE_38400 38400u #define USBH_CDC_ACM_LINE_CODING_BAUDRATE_56700 56700u #define USBH_CDC_ACM_LINE_CODING_BAUDRATE_115200 115200u #define USBH_CDC_ACM_LINE_CODING_BAUDRATE_230400 230400u #define USBH_CDC_ACM_LINE_CODING_BAUDRATE_460800 460800u #define USBH_CDC_ACM_LINE_CODING_BAUDRATE_921600 921600u #define USBH_CDC_ACM_LINE_CODING_STOP_BIT_1 0u #define USBH_CDC_ACM_LINE_CODING_STOP_BIT_1_5 1u #define USBH_CDC_ACM_LINE_CODING_STOP_BIT_2 2u #define USBH_CDC_ACM_LINE_CODING_PARITY_NONE 0u #define USBH_CDC_ACM_LINE_CODING_PARITY_ODD 1u #define USBH_CDC_ACM_LINE_CODING_PARITY_EVEN 2u #define USBH_CDC_ACM_LINE_CODING_PARITY_MARK 3u #define USBH_CDC_ACM_LINE_CODING_PARITY_SPACE 4u #define USBH_CDC_ACM_LINE_CODING_DATA_BITS_5 5u #define USBH_CDC_ACM_LINE_CODING_DATA_BITS_6 6u #define USBH_CDC_ACM_LINE_CODING_DATA_BITS_7 7u #define USBH_CDC_ACM_LINE_CODING_DATA_BITS_8 8u /* ********************************************************************************************************* * DATA TYPES ********************************************************************************************************* */ typedef struct usbh_cdc_serial_state { CPU_BOOLEAN RxCarrier; CPU_BOOLEAN TxCarrier; CPU_BOOLEAN Break; CPU_BOOLEAN RingSignal; CPU_BOOLEAN Framing; CPU_BOOLEAN Parity; CPU_BOOLEAN OverRun; } USBH_CDC_SERIAL_STATE; typedef struct usbh_cdc_acm_notifications { CPU_BOOLEAN NetworkConnection; CPU_BOOLEAN SerialState; } USBH_CDC_ACM_NOTIFICATIONS; typedef struct usbh_cdc_acm_requests { CPU_BOOLEAN SetCommFeature; CPU_BOOLEAN GetCommFeature; CPU_BOOLEAN ClrCommFeature; CPU_BOOLEAN SetLineCoding; CPU_BOOLEAN GetLineCoding; CPU_BOOLEAN SetControlLineState; CPU_BOOLEAN SendBreak; } USBH_CDC_ACM_REQUESTS; typedef void (*USBH_CDC_SERIAL_STATE_NOTIFY) (USBH_CDC_SERIAL_STATE serial_sate); typedef void (*USBH_CDC_DATA_NOTIFY) (void *p_data, CPU_INT08U *p_buf, CPU_INT32U xfer_len, USBH_ERR err); typedef struct usbh_cdc_acm_dev { USBH_CDC_DEV *CDC_DevPtr; USBH_CDC_ACM_NOTIFICATIONS SupportedEvents; USBH_CDC_ACM_REQUESTS SupportedRequests; CPU_INT08U LineCodingBuf[10]; USBH_CDC_SERIAL_STATE_NOTIFY EvtSerialStateNotifyPtr; USBH_CDC_DATA_NOTIFY DataTxNotifyPtr; void *DataTxArgPtr; USBH_CDC_DATA_NOTIFY DataRxNotifyPtr; void *DataRxArgPtr; } USBH_CDC_ACM_DEV; /* ********************************************************************************************************* * GLOBAL VARIABLES ********************************************************************************************************* */ USBH_CDC_ACM_EXT USBH_CLASS_DRV USBH_CDC_ACM_ClassDrv; /* ********************************************************************************************************* * MACRO'S ********************************************************************************************************* */ /* ********************************************************************************************************* * FUNCTION PROTOTYPES ********************************************************************************************************* */ USBH_ERR USBH_CDC_ACM_GlobalInit (void); void USBH_CDC_ACM_EventRxNotifyReg(USBH_CDC_ACM_DEV *p_cdc_acm_dev, USBH_CDC_SERIAL_STATE_NOTIFY p_serial_state_notify); USBH_CDC_ACM_DEV *USBH_CDC_ACM_Add (USBH_CDC_DEV *p_cdc_dev, USBH_ERR *p_err); USBH_ERR USBH_CDC_ACM_Remove (USBH_CDC_ACM_DEV *p_cdc_acm_dev); USBH_ERR USBH_CDC_ACM_LineCodingSet (USBH_CDC_ACM_DEV *p_cdc_acm_dev, CPU_INT32U baud_rate, CPU_INT08U stop_bits, CPU_INT08U parity_val, CPU_INT08U data_bits); USBH_ERR USBH_CDC_ACM_LineCodingGet (USBH_CDC_ACM_DEV *p_cdc_acm_dev, CPU_INT32U *p_baud_rate, CPU_INT08U *p_stop_bits, CPU_INT08U *p_parity_val, CPU_INT08U *p_data_bits); USBH_ERR USBH_CDC_ACM_LineStateSet (USBH_CDC_ACM_DEV *p_cdc_acm_dev, CPU_INT08U dtr_bit, CPU_INT08U rts_bit); USBH_ERR USBH_CDC_ACM_BreakSend (USBH_CDC_ACM_DEV *p_cdc_acm_dev, CPU_INT16U break_time); USBH_ERR USBH_CDC_ACM_CmdSend (USBH_CDC_ACM_DEV *p_cdc_acm_dev, CPU_INT08U *p_buf, CPU_INT32U buf_len); USBH_ERR USBH_CDC_ACM_RespRx (USBH_CDC_ACM_DEV *p_cdc_acm_dev, CPU_INT08U *p_buf, CPU_INT32U buf_len); CPU_INT32U USBH_CDC_ACM_DataTx (USBH_CDC_ACM_DEV *p_cdc_acm_dev, void *p_buf, CPU_INT32U buf_len, USBH_ERR *p_err); CPU_INT32U USBH_CDC_ACM_DataRx (USBH_CDC_ACM_DEV *p_cdc_acm_dev, void *p_buf, CPU_INT32U buf_len, USBH_ERR *p_err); USBH_ERR USBH_CDC_ACM_DataTxAsync (USBH_CDC_ACM_DEV *p_cdc_acm_dev, void *p_buf, CPU_INT32U buf_len, USBH_CDC_DATA_NOTIFY tx_cmpl_notify, void *p_tx_cmpl_arg); USBH_ERR USBH_CDC_ACM_DataRxAsync (USBH_CDC_ACM_DEV *p_cdc_acm_dev, void *p_buf, CPU_INT32U buf_len, USBH_CDC_DATA_NOTIFY rx_cmpl_notify, void *p_rx_cmpl_arg); /* ********************************************************************************************************* * CONFIGURATION ERRORS ********************************************************************************************************* */ /* ********************************************************************************************************* * END ********************************************************************************************************* */ #endif