101 lines
2.2 KiB
C
101 lines
2.2 KiB
C
#include "transfer.h"
|
|
|
|
|
|
#if (DT_ENABLE_BROKEN_FRAME_DETECT)
|
|
static uint8_t timeo_frame = 0;
|
|
static struct drv_timer_t timerFrameBroken;
|
|
|
|
static void timerFrameBrokenCallback (void *user_data)
|
|
{
|
|
timeo_frame = 1;
|
|
//printf("frame detect clock time up!\r\n");
|
|
}
|
|
#endif
|
|
|
|
static uint8_t DT_Port_IsRecvData (struct transfer_t *xfer)
|
|
{
|
|
#if (DT_ENABLE_BROKEN_FRAME_DETECT)
|
|
if (timeo_frame) {
|
|
timeo_frame = 0;
|
|
|
|
return BSP_UART_ERR_OK;
|
|
} else if (BSP_UART_IsFrameEnd((BSP_UART_ID)xfer->if_id) == BSP_UART_ERR_OK) {
|
|
drv_timer_linkUserData(&timerFrameBroken, xfer);
|
|
drv_timer_restart(&timerFrameBroken);
|
|
return BSP_UART_ERR_NO_RECV_FRAME;
|
|
}
|
|
|
|
return BSP_UART_ERR_NO_RECV_FRAME;
|
|
#else
|
|
|
|
return BSP_UART_IsFrameEnd((BSP_UART_ID)xfer->if_id);
|
|
#endif
|
|
}
|
|
|
|
|
|
void DT_Send (struct transfer_t *xfer, uint8_t *data, uint32_t len)
|
|
{
|
|
BSP_UART_Send((BSP_UART_ID)xfer->if_id, data, len, 0xFFFF);
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief 检测是否接收到一帧数据的轮询接口
|
|
* @note
|
|
* @param[in] xfer: 传输控制块对象
|
|
* @retval exRESULT
|
|
*/
|
|
exRESULT DT_PollingReceive (struct transfer_t *xfer)
|
|
{
|
|
exRESULT state = X_RESULT_NO_DATA;
|
|
|
|
if (DT_Port_IsRecvData(xfer) == 0) {
|
|
state = X_RESULT_RECV_FRAME;
|
|
}
|
|
|
|
return state;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief 数据传输层初始化
|
|
* @note
|
|
* @param[in] xfer: 传输控制块对象
|
|
* @param[in] if_id: 传输接口 ID
|
|
* @param[in] buff: 用于接收数据的缓冲池,单位 byte
|
|
* @param[in] len: 指示接收到的数据长度,单位 byte
|
|
* @param[in] buff_size: 数据池最大容量,单位 byte
|
|
* @retval None
|
|
*/
|
|
void DT_Init (struct transfer_t *xfer, uint8_t if_id, uint8_t *buff, uint16_t *len, uint32_t buff_size)
|
|
{
|
|
ASSERT(xfer != NULL);
|
|
|
|
xfer->if_id = if_id;
|
|
xfer->rx_buff = buff;
|
|
xfer->rx_len = len;
|
|
xfer->rx_buff_size = buff_size;
|
|
|
|
|
|
BSP_UART_Init((BSP_UART_ID)xfer->if_id);
|
|
BSP_UART_LinkUserData((BSP_UART_ID)xfer->if_id, xfer);
|
|
BSP_UART_EnableReceive( (BSP_UART_ID)xfer->if_id,
|
|
xfer->rx_buff,
|
|
xfer->rx_len,
|
|
xfer->rx_buff_size);
|
|
|
|
#if (DT_ENABLE_BROKEN_FRAME_DETECT)
|
|
drv_timer_init(&timerFrameBroken,
|
|
timerFrameBrokenCallback,
|
|
BROKEN_FRAME_INTERVAL_TIME,
|
|
TIMER_RUN_ONE_SHOT);
|
|
#endif
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|