55 lines
1.3 KiB
C
55 lines
1.3 KiB
C
#ifndef _CAN_H
|
|
#define _CAN_H
|
|
|
|
enum can_bitrate {
|
|
CAN_BITRATE_10K = 0,
|
|
CAN_BITRATE_20K,
|
|
CAN_BITRATE_50K,
|
|
CAN_BITRATE_100K,
|
|
CAN_BITRATE_125K,
|
|
CAN_BITRATE_250K,
|
|
CAN_BITRATE_500K,
|
|
CAN_BITRATE_750K,
|
|
CAN_BITRATE_1000K,
|
|
|
|
CAN_BITRATE_INVALID,
|
|
};
|
|
|
|
typedef enum can_bus_state {
|
|
OFF_BUS = 0,
|
|
ON_BUS = 1,
|
|
} can_bus_state_t;
|
|
|
|
|
|
// CAN transmit buffering
|
|
#define TXQUEUE_LEN 28 // Number of buffers allocated
|
|
#define TXQUEUE_DATALEN 8 // CAN DLC length of data buffers
|
|
|
|
typedef struct cantxbuf_
|
|
{
|
|
uint8_t data[TXQUEUE_LEN][TXQUEUE_DATALEN]; // Data buffer
|
|
CAN_TxHeaderTypeDef header[TXQUEUE_LEN]; // Header buffer
|
|
uint8_t head; // Head pointer
|
|
uint8_t tail; // Tail pointer
|
|
uint8_t full; // TODO: Set this when we are full, clear when the tail moves one.
|
|
} can_txbuf_t;
|
|
|
|
|
|
// Prototypes
|
|
void can_init(void);
|
|
void can_enable(void);
|
|
void can_disable(void);
|
|
void can_set_bitrate(enum can_bitrate bitrate);
|
|
void can_set_silent(uint8_t silent);
|
|
void can_set_autoretransmit(uint8_t autoretransmit);
|
|
uint32_t can_tx(CAN_TxHeaderTypeDef *tx_msg_header, uint8_t *tx_msg_data);
|
|
uint32_t can_rx(CAN_RxHeaderTypeDef *rx_msg_header, uint8_t *rx_msg_data);
|
|
|
|
|
|
void can_process(void);
|
|
|
|
uint8_t is_can_msg_pending(uint8_t fifo);
|
|
CAN_HandleTypeDef* can_gethandle(void);
|
|
|
|
#endif // _CAN_H
|