Hardware Abstraction Layer for FreeRTOS
can.h File Reference
#include <stdint.h>
#include <stdbool.h>
#include <system.h>
#include <FreeRTOS.h>
#include <semphr.h>
#include <hal.h>
#include <gpio.h>
Include dependency graph for can.h:

Go to the source code of this file.

Data Structures

struct  can_filter
 
struct  can_msg
 
struct  can_generic
 

Macros

#define CAN_MAX_LENGTH   8
 
#define CAN_EFF_FLAG   BIT(31) /* EFF/SFF is set in the MSB */
 
#define CAN_RTR_FLAG   BIT(30) /* remote transmission request */
 
#define CAN_SFF_MASK   0x000007FFUL /* standard frame format (SFF) */
 
#define CAN_EFF_MASK   0x1FFFFFFFUL /* extended frame format (EFF) */
 
#define CAN_ERR_CRTL   BIT64(0)
 
#define CAN_ERR_CTRL_OFFSET   0
 
#define CAN_ERR_CRTL_UNSPEC   BIT64(CAN_ERR_CTRL_OFFSET + 0)
 
#define CAN_ERR_CRTL_RX_OVERFLOW   BIT64(CAN_ERR_CTRL_OFFSET + 1)
 
#define CAN_ERR_CRTL_TX_OVERFLOW   BIT64(CAN_ERR_CTRL_OFFSET + 2)
 
#define CAN_ERR_CRTL_RX_WARNING   BIT64(CAN_ERR_CTRL_OFFSET + 3)
 
#define CAN_ERR_CRTL_TX_WARNING   BIT64(CAN_ERR_CTRL_OFFSET + 4)
 
#define CAN_ERR_CRTL_RX_PASSIVE   BIT64(CAN_ERR_CTRL_OFFSET + 5)
 
#define CAN_ERR_CRTL_TX_PASSIVE   BIT64(CAN_ERR_CTRL_OFFSET + 6)
 
#define CAN_ERR_CRTL_ACTIVE   BIT64(CAN_ERR_CTRL_OFFSET + 7)
 
#define CAN_ERR_PROT   BIT64(1)
 
#define CAN_ERR_PROT_OFFSET   8
 
#define CAN_ERR_PROT_UNSPEC   BIT64(CAN_ERR_PROT_OFFSET + 0)
 
#define CAN_ERR_PROT_BIT   BIT64(CAN_ERR_PROT_OFFSET + 1)
 
#define CAN_ERR_PROT_FORM   BIT64(CAN_ERR_PROT_OFFSET + 2)
 
#define CAN_ERR_PROT_STUFF   BIT64(CAN_ERR_PROT_OFFSET + 3)
 
#define CAN_ERR_PROT_BIT0   BIT64(CAN_ERR_PROT_OFFSET + 4)
 
#define CAN_ERR_PROT_BIT1   BIT64(CAN_ERR_PROT_OFFSET + 5)
 
#define CAN_ERR_PROT_OVERLOAD   BIT64(CAN_ERR_PROT_OFFSET + 6)
 
#define CAN_ERR_PROT_ACTIVE   BIT64(CAN_ERR_PROT_OFFSET + 7)
 
#define CAN_ERR_PROT_TX   BIT64(CAN_ERR_PROT_OFFSET + 8)
 
#define CAN_ERR_PROT_LOC_OFFSET   24
 
#define CAN_ERR_PROT_LOC_UNSPEC   BIT64(CAN_ERR_PROT_LOC_OFFSET + 0)
 
#define CAN_ERR_PROT_LOC_SOF   BIT64(CAN_ERR_PROT_LOC_OFFSET + 1)
 
#define CAN_ERR_PROT_LOC_ID28_21   BIT64(CAN_ERR_PROT_LOC_OFFSET + 2)
 
#define CAN_ERR_PROT_LOC_ID20_18   BIT64(CAN_ERR_PROT_LOC_OFFSET + 3)
 
#define CAN_ERR_PROT_LOC_SRTR   BIT64(CAN_ERR_PROT_LOC_OFFSET + 4)
 
#define CAN_ERR_PROT_LOC_IDE   BIT64(CAN_ERR_PROT_LOC_OFFSET + 5)
 
#define CAN_ERR_PROT_LOC_ID17_13   BIT64(CAN_ERR_PROT_LOC_OFFSET + 6)
 
#define CAN_ERR_PROT_LOC_ID12_05   BIT64(CAN_ERR_PROT_LOC_OFFSET + 7)
 
#define CAN_ERR_PROT_LOC_ID04_00   BIT64(CAN_ERR_PROT_LOC_OFFSET + 8)
 
#define CAN_ERR_PROT_LOC_RTR   BIT64(CAN_ERR_PROT_LOC_OFFSET + 9)
 
#define CAN_ERR_PROT_LOC_RES1   BIT64(CAN_ERR_PROT_LOC_OFFSET + 10)
 
#define CAN_ERR_PROT_LOC_RES0   BIT64(CAN_ERR_PROT_LOC_OFFSET + 11)
 
#define CAN_ERR_PROT_LOC_DLC   BIT64(CAN_ERR_PROT_LOC_OFFSET + 12)
 
#define CAN_ERR_PROT_LOC_DATA   BIT64(CAN_ERR_PROT_LOC_OFFSET + 13)
 
#define CAN_ERR_PROT_LOC_CRC_SEQ   BIT64(CAN_ERR_PROT_LOC_OFFSET + 14)
 
#define CAN_ERR_PROT_LOC_CRC_DEL   BIT64(CAN_ERR_PROT_LOC_OFFSET + 15)
 
#define CAN_ERR_PROT_LOC_ACK   BIT64(CAN_ERR_PROT_LOC_OFFSET + 16)
 
#define CAN_ERR_PROT_LOC_ACK_DEL   BIT64(CAN_ERR_PROT_LOC_OFFSET + 17)
 
#define CAN_ERR_PROT_LOC_EOF   BIT64(CAN_ERR_PROT_LOC_OFFSET + 18)
 
#define CAN_ERR_PROT_LOC_INTERM   BIT64(CAN_ERR_PROT_LOC_OFFSET + 19)
 
#define CAN_ERR_TRX   BIT64(2)
 
#define CAN_ERR_TRX_OFFSET   48
 
#define CAN_ERR_TRX_UNSPEC   BIT64(CAN_ERR_TRX_OFFSET + 0)
 
#define CAN_ERR_TRX_CANH_NO_WIRE   BIT64(CAN_ERR_TRX_OFFSET + 1)
 
#define CAN_ERR_TRX_CANH_SHORT_TO_BAT   BIT64(CAN_ERR_TRX_OFFSET + 2)
 
#define CAN_ERR_TRX_CANH_SHORT_TO_VCC   BIT64(CAN_ERR_TRX_OFFSET + 3)
 
#define CAN_ERR_TRX_CANH_SHORT_TO_GND   BIT64(CAN_ERR_TRX_OFFSET + 4)
 
#define CAN_ERR_TRX_CANL_NO_WIRE   BIT64(CAN_ERR_TRX_OFFSET + 5)
 
#define CAN_ERR_TRX_CANL_SHORT_TO_BAT   BIT64(CAN_ERR_TRX_OFFSET + 6)
 
#define CAN_ERR_TRX_CANL_SHORT_TO_VCC   BIT64(CAN_ERR_TRX_OFFSET + 7)
 
#define CAN_ERR_TRX_CANL_SHORT_TO_GND   BIT64(CAN_ERR_TRX_OFFSET + 8)
 
#define CAN_ERR_TRX_CANL_SHORT_TO_CANH   BIT64(CAN_ERR_TRX_OFFSET + 9)
 
#define CAN_ERR_ACK   BIT64(3)
 
#define CAN_ERR_BUSOFF   BIT64(4)
 
#define CAN_ERR_BUSERROR   BIT64(5)
 
#define CAN_ERR_RESTARTED   BIT64(6)
 

Typedefs

typedef uint32_t can_error_t
 
typedef uint64_t can_errorData_t
 

Functions

struct can * can_init (uint32_t index, uint32_t bitrate, struct gpio_pin *pin, bool pinHigh, bool(*callback)(struct can *can, can_error_t error, can_errorData_t data, void *userData), void *data)
 
int32_t can_deinit (struct can *can)
 
int32_t can_setCallback (struct can *can, int32_t filterID, bool(*callback)(struct can *can, struct can_msg *msg, void *data), void *data)
 
int32_t can_registerFilter (struct can *can, struct can_filter *filter)
 
int32_t can_deregisterFilter (struct can *can, int32_t filterID)
 
int32_t can_send (struct can *can, struct can_msg *msg, TickType_t waittime)
 
int32_t can_recv (struct can *can, int32_t filterID, struct can_msg *msg, TickType_t waittime)
 
int32_t can_sendISR (struct can *can, struct can_msg *msg)
 
int32_t can_recvISR (struct can *can, int32_t filterID, struct can_msg *msg)
 
int32_t can_up (struct can *can)
 
int32_t can_down (struct can *can)