Files
base/middleware/usb/uC-USBH/Class/CDC/ACM/usbh_acm.h
2025-11-07 09:57:14 +08:00

266 lines
13 KiB
C

/*
*********************************************************************************************************
* 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