/***********************************************************************
 * Copyright (c)  2017 - 2022, Unicmicro Co.,Ltd .
 * All rights reserved.
 * Filename    : can_protocol.h
 * Description : can protocol header file
 * Author(s)   : Mason
 * version     : V1.0
 * Modify date : 2022-08-05
 ***********************************************************************/
#ifndef __CAN_PROTOCAL_H__
#define __CAN_PROTOCAL_H__

#include  "um321xF.h"

typedef struct
{
	uint32_t std_id;				// 报文ID		
	uint32_t ext_id;				// 扩展ID 
	uint8_t ide;     				// 报文ID类型 
	uint8_t rtr;     				// 消息类型 
	uint8_t len;     				// 指定将要使用的帧的长度传输。此参数可以是介于0到8 
	uint8_t data[8]; 				// 数据 
}S_Can_Tx_Msg;

typedef struct
{
	uint32_t std_id;				// 报文ID 			
	uint32_t ext_id;				// 扩展ID 
	uint8_t ide;     				// 报文ID类型 
	uint8_t rtr;     				// 消息类型 
	uint8_t len;     				// 指定将要使用的帧的长度传输。此参数可以是介于0到8 
	uint8_t data[8]; 				// 数据 
}S_Can_Rx_Msg;

typedef struct
{
	uint32_t std_id1;				// 报文ID1  filter1  
	uint32_t std_id2;				// 报文ID2  filter2
	uint32_t ext_id1;				// 扩展ID1  filter1
	uint32_t ext_id2;				// 扩展ID2  filter2
	uint8_t ide;     				// 报文ID类型 
	uint8_t rtr;     				// 消息类型 

}S_Can_Filter_Msg;


/************************************************************************
 * Function     : can_filter_value
 * Description  : can filter value,获取不同配置的过滤值
 * Input        : uint32_t *filter_value：filter value
 *                uint8_t filter_mode：single filter or double filter
 *                uint8_t data_mode：standard frame or extended frame
 * Return       : none
 ************************************************************************/
void can_filter_value(uint32_t *filter_value, uint8_t filter_mode, uint8_t data_mode);

/************************************************************************
 * Function     : can_data_frame
 * Description  : can data frame,帧组包 
 * Input        : uint32_t *buff：tx buff data
 *                uint8_t mode：standard frame or extended frame
 *                uint8_t rtr：data frame or remote frame
 *                uint8_t len：data length
 * Return       : none
 ************************************************************************/
void can_data_frame(uint32_t *buff, uint8_t ide, uint8_t rtr, uint8_t len);

/************************************************************************
 * Function     : can_read_data_pro
 * Description  : nanlyze the receive data frame
 * Input        : uint32_t *buff: receive data
 * Return       : none
 ************************************************************************/
void can_read_data_pro(uint32_t *buff);

#endif

