440 lines
21 KiB
C
440 lines
21 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.
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
*
|
|
* FUTURE TECHNOLOGY DEVICES INTERNATIONAL CLASS
|
|
*
|
|
* Filename : usbh_ftdi.h
|
|
* Version : V3.42.01
|
|
* Note(s) : (1) The reference document "API for FTxxxx Devices Application Note AN_115" can be
|
|
* requested from FTDI after signing a Non-Disclosure Agreement (NDA).
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* MODULE
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#ifndef USBH_FTDI_MODULE_PRESENT
|
|
#define USBH_FTDI_MODULE_PRESENT
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* INCLUDE FILES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#include "../../Source/usbh_class.h"
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* EXTERNS
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#ifdef USBH_FTDI_MODULE
|
|
#define USBH_FTDI_EXT
|
|
#else
|
|
#define USBH_FTDI_EXT extern
|
|
#endif
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* DEFINES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define USBH_FTDI_SERIAL_STATUS_LEN 2u
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* FTDI_RESET CONTROL
|
|
*
|
|
* Note(s) : (1) See "API for FTxxxx Devices Application Note AN_115", April 04 2011, Version 1.1,
|
|
* section 3.1.
|
|
*
|
|
* (2) The control value is defined as follow:
|
|
*
|
|
* USBH_FTDI_RESET_CTRL_SIO Reset SIO (Resets both RX and TX buffer)
|
|
* USBH_FTDI_RESET_CTRL_RX Purge RX buffer
|
|
* USBH_FTDI_RESET_CTRL_TX Purge TX buffer
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define USBH_FTDI_RESET_CTRL_SIO DEF_BIT_NONE
|
|
#define USBH_FTDI_RESET_CTRL_RX DEF_BIT_00
|
|
#define USBH_FTDI_RESET_CTRL_TX DEF_BIT_01
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* FTDI_MODEM CONTROL
|
|
*
|
|
* Note(s) : (1) See "API for FTxxxx Devices Application Note AN_115", April 04 2011, Version 1.1,
|
|
* section 3.2.
|
|
*
|
|
* (2) The control value is defined as follow:
|
|
*
|
|
* USBH_FTDI_MODEM_CTRL_DTR_SET Set DTR state
|
|
* USBH_FTDI_MODEM_CTRL_DTR_RESET Reset DTR state
|
|
* USBH_FTDI_MODEM_CTRL_DTR_ENABLED Use DTR state
|
|
* USBH_FTDI_MODEM_CTRL_DTR_DISABLED Disable DTR state
|
|
* USBH_FTDI_MODEM_CTRL_RTS_SET Set RTS state
|
|
* USBH_FTDI_MODEM_CTRL_RTS_RESET Reset RTS state
|
|
* USBH_FTDI_MODEM_CTRL_RTS_ENABLED Use RTS state
|
|
* USBH_FTDI_MODEM_CTRL_RTS_DISABLED Disable RTS state
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define USBH_FTDI_MODEM_CTRL_DTR_SET DEF_BIT_00
|
|
#define USBH_FTDI_MODEM_CTRL_DTR_RESET DEF_BIT_NONE
|
|
#define USBH_FTDI_MODEM_CTRL_DTR_ENABLED DEF_BIT_08
|
|
#define USBH_FTDI_MODEM_CTRL_DTR_DISABLED DEF_BIT_NONE
|
|
#define USBH_FTDI_MODEM_CTRL_RTS_SET DEF_BIT_01
|
|
#define USBH_FTDI_MODEM_CTRL_RTS_RESET DEF_BIT_NONE
|
|
#define USBH_FTDI_MODEM_CTRL_RTS_ENABLED DEF_BIT_09
|
|
#define USBH_FTDI_MODEM_CTRL_RTS_DISABLED DEF_BIT_NONE
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* FTDI_SET_FLOW PROTOCOL
|
|
*
|
|
* Note(s) : (1) See "API for FTxxxx Devices Application Note AN_115", April 04 2011, Version 1.1,
|
|
* section 3.3.
|
|
*
|
|
* (2) The control value is defined as follow:
|
|
*
|
|
* USBH_FTDI_PROTOCOL_RTS_CTS Enable output handshaking using RTS/CTS
|
|
* USBH_FTDI_PROTOCOL_DTR_DSR Enable output handshaking using DTR/DSR
|
|
* USBH_FTDI_PROTOCOL_XON_XOFF Enable Xon/Xoff handshaking
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define USBH_FTDI_PROTOCOL_RTS_CTS DEF_BIT_00
|
|
#define USBH_FTDI_PROTOCOL_DTR_DSR DEF_BIT_01
|
|
#define USBH_FTDI_PROTOCOL_XON_XOFF DEF_BIT_02
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* FTDI_SET_BAUD_RATE
|
|
*
|
|
* Note(s) : (1) See "API for FTxxxx Devices Application Note AN_115", April 04 2011, Version 1.1,
|
|
* section 3.4.
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define USBH_FTDI_BAUD_RATE_300 0x2710u
|
|
#define USBH_FTDI_BAUD_RATE_600 0x1388u
|
|
#define USBH_FTDI_BAUD_RATE_1200 0x09C4u
|
|
#define USBH_FTDI_BAUD_RATE_2400 0x04E2u
|
|
#define USBH_FTDI_BAUD_RATE_4800 0x0271u
|
|
#define USBH_FTDI_BAUD_RATE_9600 0x4138u
|
|
#define USBH_FTDI_BAUD_RATE_19200 0x809Cu
|
|
#define USBH_FTDI_BAUD_RATE_38400 0xC04Eu
|
|
#define USBH_FTDI_BAUD_RATE_57600 0x0034u
|
|
#define USBH_FTDI_BAUD_RATE_115200 0x001Au
|
|
#define USBH_FTDI_BAUD_RATE_230400 0x000Du
|
|
#define USBH_FTDI_BAUD_RATE_460800 0x4006u
|
|
#define USBH_FTDI_BAUD_RATE_921600 0x8003u
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* FTDI_SET_DATA CHARACTERISTICS
|
|
*
|
|
* Note(s) : (1) See "API for FTxxxx Devices Application Note AN_115", April 04 2011, Version 1.1,
|
|
* section 3.5.
|
|
*
|
|
* (2) The control value is defined as follow:
|
|
*
|
|
* USBH_FTDI_DATA_PARITY_NONE Do not use the parity bit
|
|
* USBH_FTDI_DATA_PARITY_ODD Use odd parity bit
|
|
* USBH_FTDI_DATA_PARITY_EVEN Use even parity bit
|
|
* USBH_FTDI_DATA_PARITY_MARK Use mark parity bit
|
|
* USBH_FTDI_DATA_PARITY_SPACE Use space parity bit
|
|
*
|
|
* USBH_FTDI_DATA_STOP_BITS_1 Use 1 stop bit
|
|
* USBH_FTDI_DATA_STOP_BITS_2 Use 2 stop bit
|
|
*
|
|
* USBH_FTDI_DATA_BREAK_ENABLED Send break
|
|
* USBH_FTDI_DATA_BREAK_DISABLED Stop break
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define USBH_FTDI_DATA_PARITY_NONE 0x00u
|
|
#define USBH_FTDI_DATA_PARITY_ODD 0x01u
|
|
#define USBH_FTDI_DATA_PARITY_EVEN 0x02u
|
|
#define USBH_FTDI_DATA_PARITY_MARK 0x03u
|
|
#define USBH_FTDI_DATA_PARITY_SPACE 0x04u
|
|
|
|
#define USBH_FTDI_DATA_STOP_BITS_1 0x00u
|
|
#define USBH_FTDI_DATA_STOP_BITS_2 0x08u
|
|
|
|
#define USBH_FTDI_DATA_BREAK_ENABLED 0x40u
|
|
#define USBH_FTDI_DATA_BREAK_DISABLED 0x00u
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* FTDI SERIAL STATUS
|
|
*
|
|
* Note(s) : (1) See "API for FTxxxx Devices Application Note AN_115", April 04 2011, Version 1.1,
|
|
* section 4.
|
|
*
|
|
* (2) These defines may be used as a mask to determine whether a field of the modem status or
|
|
* the line status is enabled or not.
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define USBH_FTDI_MODEM_STATUS_FS DEF_BIT_00
|
|
#define USBH_FTDI_MODEM_STATUS_HS DEF_BIT_01
|
|
#define USBH_FTDI_MODEM_STATUS_CLEAR_TO_SEND DEF_BIT_04
|
|
#define USBH_FTDI_MODEM_STATUS_DATA_SET_READY DEF_BIT_05
|
|
#define USBH_FTDI_MODEM_STATUS_RING_INDICATOR DEF_BIT_06
|
|
#define USBH_FTDI_MODEM_STATUS_DATA_CARRIER_DETECT DEF_BIT_07
|
|
|
|
#define USBH_FTDI_LINE_STATUS_RX_OVERFLOW_ERROR DEF_BIT_01
|
|
#define USBH_FTDI_LINE_STATUS_PARITY_ERROR DEF_BIT_02
|
|
#define USBH_FTDI_LINE_STATUS_FRAMING_ERROR DEF_BIT_03
|
|
#define USBH_FTDI_LINE_STATUS_BREAK_INTERRUPT DEF_BIT_04
|
|
#define USBH_FTDI_LINE_STATUS_TX_REGISTER_EMPTY DEF_BIT_05
|
|
#define USBH_FTDI_LINE_STATUS_TX_EMPTY DEF_BIT_06
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* DATA TYPES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
typedef CPU_INT08U USBH_FTDI_HANDLE;
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* USBH_FTDI_SERIAL_STATUS
|
|
*
|
|
* Note(s) : (1) The serial status is defined as follow:
|
|
*
|
|
* OFFSET MODEM STATUS MASK
|
|
* --------------------------------------------------------------------------------------------------
|
|
* Bit 0 Full-speed 64 bytes max packet USBH_FTDI_MODEM_STATUS_FS
|
|
* Bit 1 High-speed 512 bytes max packet USBH_FTDI_MODEM_STATUS_HS
|
|
* Bit 4 Clear to Send (CTS) USBH_FTDI_MODEM_STATUS_CLEAR_TO_SEND
|
|
* Bit 5 Data Set Ready (DSR) USBH_FTDI_MODEM_STATUS_DATA_SET_READY
|
|
* Bit 6 Ring Indicator (RI) USBH_FTDI_MODEM_STATUS_RING_INDICATOR
|
|
* Bit 7 Receive Line Signal Detect (RLSD) USBH_FTDI_MODEM_STATUS_DATA_CARRIER_DETECT
|
|
* --------------------------------------------------------------------------------------------------
|
|
*
|
|
* OFFSET LINE STATUS MASK
|
|
* --------------------------------------------------------------------------------------------------
|
|
* Bit 1 Overrun Error (OE) USBH_FTDI_LINE_STATUS_RX_OVERFLOW_ERROR
|
|
* Bit 2 Parity Error (PE) USBH_FTDI_LINE_STATUS_PARITY_ERROR
|
|
* Bit 3 Framing Error (FE) USBH_FTDI_LINE_STATUS_FRAMING_ERROR
|
|
* Bit 4 Break Interrupt (BI) USBH_FTDI_LINE_STATUS_BREAK_INTERRUPT
|
|
* Bit 5 Transmitter Holding Register (THRE) USBH_FTDI_LINE_STATUS_TX_REGISTER_EMPTY
|
|
* Bit 6 Transmitter Empty (TEMT) USBH_FTDI_LINE_STATUS_TX_EMPTY
|
|
* --------------------------------------------------------------------------------------------------
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
typedef struct usbh_ftdi_serial_status {
|
|
CPU_INT08U ModemStatus;
|
|
CPU_INT08U LineStatus;
|
|
} USBH_FTDI_SERIAL_STATUS;
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* USBH_FTDI_RXCB_FNCT
|
|
*
|
|
* Note(s) : (1) Application RX function callback.
|
|
*
|
|
* (2) The arguments are defined as follow:
|
|
*
|
|
* ftdi_handle Handle on FTDI device.
|
|
* p_arg Pointer to argument.
|
|
* p_buf Pointer to received data buffer.
|
|
* xfer_len Number of octets received.
|
|
* p_serial_status Pointer to USBH_FTDI_SERIAL_STATUS structure that will be filled.
|
|
* err Variable that will receive the return error code.
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
typedef void (*USBH_FTDI_ASYNC_RX_FNCT) (USBH_FTDI_HANDLE ftdi_handle,
|
|
void *p_arg,
|
|
void *p_buf,
|
|
CPU_INT32U xfer_len,
|
|
USBH_FTDI_SERIAL_STATUS *p_serial_status,
|
|
USBH_ERR err);
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* USBH_FTDI_TXCB_FNCT
|
|
*
|
|
* Note(s) : (1) Application TX function callback.
|
|
*
|
|
* (2) The arguments are defined as follow:
|
|
*
|
|
* ftdi_handle Handle on FTDI device.
|
|
* p_arg Pointer to argument.
|
|
* p_buf Pointer to transmitted data buffer.
|
|
* xfer_len Number of octets transmitted.
|
|
* err Variable that will receive the return error code.
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
typedef void (*USBH_FTDI_ASYNC_TX_FNCT) (USBH_FTDI_HANDLE ftdi_handle,
|
|
void *p_arg,
|
|
void *p_buf,
|
|
CPU_INT32U xfer_len,
|
|
USBH_ERR err);
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* USBH_FTDI_CALLBACKS
|
|
*
|
|
* Note(s) : (1) Callback function pointers structure.
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
typedef const struct usbh_ftdi_callbacks {
|
|
void (*ConnNotifyPtr) (USBH_FTDI_HANDLE ftdi_handle); /* Ptr to conn fnct callback. */
|
|
void (*DisconnNotifyPtr) (USBH_FTDI_HANDLE ftdi_handle); /* Ptr to disconn fnct callback. */
|
|
} USBH_FTDI_CALLBACKS;
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* GLOBAL VARIABLES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* MACROS
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* FUNCTION PROTOTYPES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
void USBH_FTDI_Init (USBH_FTDI_CALLBACKS *p_ftdi_fnct,
|
|
USBH_ERR *p_err);
|
|
|
|
void USBH_FTDI_Reset (USBH_FTDI_HANDLE ftdi_handle,
|
|
CPU_INT16U reset_ctrl,
|
|
USBH_ERR *p_err);
|
|
|
|
void USBH_FTDI_ModemCtrlSet (USBH_FTDI_HANDLE ftdi_handle,
|
|
CPU_INT16U modem_ctrl,
|
|
USBH_ERR *p_err);
|
|
|
|
void USBH_FTDI_FlowCtrlSet (USBH_FTDI_HANDLE ftdi_handle,
|
|
CPU_INT08U protocol,
|
|
CPU_INT08U xon_char,
|
|
CPU_INT08U xoff_char,
|
|
USBH_ERR *p_err);
|
|
|
|
void USBH_FTDI_BaudRateSet (USBH_FTDI_HANDLE ftdi_handle,
|
|
CPU_INT16U baud_rate,
|
|
USBH_ERR *p_err);
|
|
|
|
void USBH_FTDI_DataSet (USBH_FTDI_HANDLE ftdi_handle,
|
|
CPU_INT08U data_size,
|
|
CPU_INT08U parity,
|
|
CPU_INT08U stop_bits,
|
|
CPU_INT08U break_bit,
|
|
USBH_ERR *p_err);
|
|
|
|
void USBH_FTDI_ModemStatusGet(USBH_FTDI_HANDLE ftdi_handle,
|
|
USBH_FTDI_SERIAL_STATUS *p_serial_status,
|
|
USBH_ERR *p_err);
|
|
|
|
CPU_INT32U USBH_FTDI_Tx (USBH_FTDI_HANDLE ftdi_handle,
|
|
void *p_buf,
|
|
CPU_INT32U buf_len,
|
|
CPU_INT16U timeout,
|
|
USBH_ERR *p_err);
|
|
|
|
void USBH_FTDI_TxAsync (USBH_FTDI_HANDLE ftdi_handle,
|
|
void *p_buf,
|
|
CPU_INT32U buf_len,
|
|
USBH_FTDI_ASYNC_TX_FNCT tx_cmpl_notify,
|
|
void *p_arg,
|
|
USBH_ERR *p_err);
|
|
|
|
CPU_INT32U USBH_FTDI_Rx (USBH_FTDI_HANDLE ftdi_handle,
|
|
void *p_buf,
|
|
CPU_INT32U buf_len,
|
|
CPU_INT16U timeout,
|
|
USBH_FTDI_SERIAL_STATUS *p_serial_status,
|
|
USBH_ERR *p_err);
|
|
|
|
void USBH_FTDI_RxAsync (USBH_FTDI_HANDLE ftdi_handle,
|
|
void *p_buf,
|
|
CPU_INT32U buf_len,
|
|
USBH_FTDI_SERIAL_STATUS *p_serial_status,
|
|
USBH_FTDI_ASYNC_RX_FNCT rx_cmpl_notify,
|
|
void *p_arg,
|
|
USBH_ERR *p_err);
|
|
|
|
USBH_DEV *USBH_FTDI_DevGet (USBH_FTDI_HANDLE ftdi_handle,
|
|
USBH_ERR *p_err);
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* CONFIGURATION ERRORS
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* MODULE END
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#endif
|