52 lines
1.3 KiB
C
52 lines
1.3 KiB
C
// can_handler.h - CAN FD Handler for MCP2518FD
|
|
|
|
#ifndef CAN_HANDLER_H
|
|
#define CAN_HANDLER_H
|
|
|
|
#include <Arduino.h>
|
|
#include <ACAN2517FD.h>
|
|
#include <SPI.h>
|
|
|
|
#include "config.h"
|
|
#include "types.h"
|
|
|
|
// CAN Controller instance
|
|
extern ACAN2517FD canController;
|
|
|
|
// CAN status flags
|
|
extern volatile bool canInitialized;
|
|
extern volatile uint32_t canRxCount;
|
|
extern volatile uint32_t canTxCount;
|
|
extern volatile uint32_t canErrorCount;
|
|
extern volatile uint32_t canOverflowCount;
|
|
|
|
// Initialize CAN FD controller
|
|
bool initCAN();
|
|
|
|
// Set CAN mode (0=Normal, 1=ListenOnly, 2=Loopback, 3=ListenOnlyLoopback)
|
|
bool setCANMode(uint8_t mode);
|
|
|
|
// Get current CAN mode
|
|
uint8_t getCANMode();
|
|
|
|
// CAN RX Task (runs on Core 0)
|
|
void canRxTask(void *pvParameters);
|
|
|
|
// CAN TX Task (runs on Core 0)
|
|
void canTxTask(void *pvParameters);
|
|
|
|
// Send CAN frame
|
|
bool sendCANFrame(uint32_t id, uint8_t* data, uint8_t len, bool isFD = true);
|
|
|
|
// Set CAN baudrates
|
|
bool setCANBaudrate(uint32_t arbitrationBaud, uint32_t dataBaud);
|
|
|
|
bool setCANBaudrateAndMode(uint32_t arbitrationBaud, uint32_t dataBaud, uint8_t mode, bool enableFD = true);
|
|
|
|
void getCANStats(uint32_t& rx, uint32_t& tx, uint32_t& errors);
|
|
|
|
// Interrupt service routine (forward declaration)
|
|
void IRAM_ATTR onCANInterrupt();
|
|
|
|
#endif // CAN_HANDLER_H
|