📄 serial.h
字号:
void (*TxStop) (SERIAL_DEV *pdev, /* Stop transmitter. */
SERIAL_ERR *perr);
void (*TxOctet) (SERIAL_DEV *pdev, /* Transmit octet with device. */
CPU_INT08U datum,
SERIAL_ERR *perr);
void (*ISR_Handler) (SERIAL_DEV *pdev, /* ISR handler. */
CPU_INT08U type);
} SERIAL_DRV_API;
/*
*********************************************************************************************************
* SERIAL INTERFACE DEVICE BSP API DATA TYPE
*********************************************************************************************************
*/
typedef const struct serial_bsp_api {
void (*ClkEn) (SERIAL_ERR *perr); /* En device/peripheral clk. */
void (*ClkDis) (SERIAL_ERR *perr); /* Dis device/peripheral clk. */
void (*CfgGPIO) (CPU_BOOLEAN flow_ctrl, /* Cfg device/peripheral GPIO. */
SERIAL_ERR *perr);
void (*CfgInt) (SERIAL_DEV *pdev, /* Cfg device/peripheral int ctrl. */
SERIAL_ERR *perr);
CPU_INT32U (*ClkFreqGet) (void); /* Get device/peripheral clk freq. */
} SERIAL_BSP_API;
/*
*********************************************************************************************************
* SERIAL INTERFACE DEVICE CONFIGURATION DATA TYPE
*********************************************************************************************************
*/
typedef struct serial_dev_cfg {
void *BaseAddr; /* Device registers' base address. */
SERIAL_DRV_API *Drv_API; /* Device driver API. */
SERIAL_BSP_API *BSP_API; /* Optional device BSP API. Dependent on device driver. */
} SERIAL_DEV_CFG;
/*
*********************************************************************************************************
* SERIAL INTERFACE LINE DRIVER API DATA TYPE
*********************************************************************************************************
*/
struct serial_line_drv_api {
void *(*Open) (SERIAL_DEV *pdev, /* Open line driver. */
SERIAL_ERR *perr);
void (*Close) (SERIAL_DEV *pdev, /* Close line driver. */
void *pline_data,
SERIAL_ERR *perr);
void (*RdOctet) (SERIAL_DEV *pdev, /* Rd octet from buf via protocol. */
SERIAL_BUF *pbuf,
CPU_INT08U *pdatum,
SERIAL_ERR *perr);
void (*WrOctet) (SERIAL_DEV *pdev, /* Wr octet into buf via protocol. */
SERIAL_BUF *pbuf,
CPU_INT08U datum,
SERIAL_ERR *perr);
};
/*
*********************************************************************************************************
* SERIAL INTERFACE DEVICE DATA TYPE
*********************************************************************************************************
*/
struct serial_dev {
SERIAL_IF_NBR IF_Nbr; /* IF nbr. */
SERIAL_DEV_CFG *Dev_Cfg; /* Device configuration. */
void *Drv_Data; /* Device driver internal data. */
SERIAL_LINE_DRV_API *LineDrv_API; /* Line Driver API. */
void *LineDrv_Data; /* Line Driver internal data. */
};
/*
*********************************************************************************************************
* SERIAL INTERFACE CONFIGURATION DATA TYPE
*********************************************************************************************************
*/
struct serial_if_cfg {
CPU_INT32U Baudrate;
CPU_INT08U DataBits;
CPU_INT08U StopBits;
CPU_INT08U Parity;
CPU_INT08U FlowCtrl;
};
/*
*********************************************************************************************************
* CALLBACK FUNCTION DATA TYPE
*********************************************************************************************************
*/
typedef void (SERIAL_CALLBACK_FNCT) (SERIAL_IF_NBR if_nbr,
void *parg,
void *pbuf,
CPU_SIZE_T len,
SERIAL_ERR err);
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
/* ---------------- INIT/CFG FUNCTIONS ---------------- */
/* Init module. */
SERIAL_ERR Serial_Init (void);
/* Add device driver. */
void Serial_DevDrvAdd (CPU_CHAR *pname,
SERIAL_DEV_CFG *pdev_cfg,
CPU_SIZE_T rd_buf_len,
CPU_SIZE_T wr_buf_len,
SERIAL_ERR *perr);
/* -------------- COMMUNICATION FUNCTIONS ------------- */
/* Open interface. */
SERIAL_IF_NBR Serial_Open (CPU_CHAR *pname,
SERIAL_IF_CFG *pcfg,
SERIAL_ERR *perr);
/* Close interface. */
void Serial_Close (SERIAL_IF_NBR if_nbr,
SERIAL_ERR *perr);
/* Set interface line drv. */
void Serial_SetLineDrv (SERIAL_IF_NBR if_nbr,
SERIAL_LINE_DRV_API *pline_api,
SERIAL_ERR *perr);
/* Read from interface. */
CPU_SIZE_T Serial_Rd (SERIAL_IF_NBR if_nbr,
void *pdest,
CPU_SIZE_T len,
CPU_INT32U timeout_ms,
SERIAL_ERR *perr);
/* Read from interface asynchronously. */
void Serial_RdAsync (SERIAL_IF_NBR if_nbr,
void *pdest,
CPU_SIZE_T len,
SERIAL_CALLBACK_FNCT *phandler,
void *parg,
SERIAL_ERR *perr);
/* Wait for octet array to arrive on interface. */
void Serial_WaitFor (SERIAL_IF_NBR if_nbr,
void *psrc,
CPU_SIZE_T len,
CPU_INT32U timeout_ms,
SERIAL_ERR *perr);
/* Write to interface. */
CPU_SIZE_T Serial_Wr (SERIAL_IF_NBR if_nbr,
void *psrc,
CPU_SIZE_T len,
CPU_INT32U timeout_ms,
SERIAL_ERR *perr);
/* Write to interface asynchronously. */
void Serial_WrAsync (SERIAL_IF_NBR if_nbr,
void *psrc,
CPU_SIZE_T len,
SERIAL_CALLBACK_FNCT *phandler,
void *parg,
SERIAL_ERR *perr);
/* --------- HANDLERS CALLED BY DEV DRV LAYER --------- */
/* Get device ptr. */
SERIAL_DEV *SerialIF_GetDevPtr(SERIAL_IF_NBR if_nbr,
SERIAL_ERR *perr);
/* Handle rx complete. */
void SerialIF_Rx (SERIAL_DEV *pdev,
CPU_INT08U datum);
/* Handle tx complete. */
void SerialIF_Tx (SERIAL_DEV *pdev);
#if (SERIAL_CFG_WR_BUF_EN == DEF_ENABLED) /* Handle tx echo. */
void SerialIF_TxWrBuf (SERIAL_DEV *pdev,
CPU_INT08U datum);
#endif
/*
*********************************************************************************************************
* CONFIGURATION ERRORS
*********************************************************************************************************
*/
#ifdef SERIAL_CFG_ARG_CHK_EXT_EN
#if ((SERIAL_CFG_ARG_CHK_EXT_EN != DEF_ENABLED ) && \
(SERIAL_CFG_ARG_CHK_EXT_EN != DEF_DISABLED))
#error "SERIAL_CFG_ARG_CHK_EXT_EN illegally #define'd in 'app_cfg.h'"
#error " [MUST be DEF_ENABLED ] "
#error " [ || DEF_DISABLED] "
#endif
#endif
#ifndef SERIAL_CFG_MAX_NBR_IF
#error "SERIAL_CFG_MAX_NBR_IF not #define'd in 'app_cfg.h'"
#error " [MUST be >= 1] "
#error " [ && < 255] "
#elif ((SERIAL_CFG_MAX_NBR_IF < 1) || \
(SERIAL_CFG_MAX_NBR_IF > SERIAL_IF_NBR_MAX))
#error "SERIAL_CFG_MAX_NBR_IF illegally #define'd in 'app_cfg.h'"
#error " [MUST be >= 1] "
#error " [ && < 255] "
#endif
#ifdef SERIAL_CFG_RD_BUF_EN
#if ((SERIAL_CFG_RD_BUF_EN != DEF_ENABLED ) && \
(SERIAL_CFG_RD_BUF_EN != DEF_DISABLED))
#error "SERIAL_CFG_RD_BUF_EN illegally #define'd in 'app_cfg.h'"
#error " [MUST be DEF_ENABLED ] "
#error " [ || DEF_DISABLED] "
#endif
#endif
#ifdef SERIAL_CFG_WR_BUF_EN
#if ((SERIAL_CFG_WR_BUF_EN != DEF_ENABLED ) && \
(SERIAL_CFG_WR_BUF_EN != DEF_DISABLED))
#error "SERIAL_CFG_WR_BUF_EN illegally #define'd in 'app_cfg.h'"
#error " [MUST be DEF_ENABLED ] "
#error " [ || DEF_DISABLED] "
#endif
#endif
#ifndef LIB_MEM_CFG_ALLOC_EN
#error "LIB_MEM_CFG_ALLOC_EN not #define'd in 'app_cfg.h'"
#error " [MUST be DEF_ENABLED ] "
#error " [ || DEF_DISABLED] "
#elif (LIB_MEM_CFG_ALLOC_EN != DEF_ENABLED)
#error "LIB_MEM_CFG_ALLOC_EN illegally #define'd in 'app_cfg.h'"
#error " [MUST be DEF_ENABLED] "
#endif
/*
*********************************************************************************************************
* MODULE END
*********************************************************************************************************
*/
#endif /* End of SERIAL module include. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -