102 lines
2.3 KiB
C
102 lines
2.3 KiB
C
|
/**
|
|||
|
* @author R<EFBFBD>mi Heredero
|
|||
|
* @version 1.0.0
|
|||
|
* @date August 2023
|
|||
|
* @file can_interface.h
|
|||
|
*/
|
|||
|
#ifndef CANINTERFACE_H
|
|||
|
#define CANINTERFACE_H
|
|||
|
|
|||
|
#include "../xf/xf.h"
|
|||
|
|
|||
|
typedef enum {
|
|||
|
STCA_INIT,
|
|||
|
STCA_WAIT,
|
|||
|
STCA_READ
|
|||
|
} CANINTERFACE_STATES;
|
|||
|
|
|||
|
typedef enum {
|
|||
|
evCAinit = 10, // TODO change this number (< 256)
|
|||
|
evCAnewMsg,
|
|||
|
evCAdone
|
|||
|
} CANINTERFACE_EVENTS;
|
|||
|
|
|||
|
typedef void (*CANINTERFACE_CALLBACK_FUNCTION)(void*);
|
|||
|
typedef void (*CANINTERFACE_CALLBACK_CAN)(uint32_t, uint32_t);
|
|||
|
typedef struct {
|
|||
|
CANINTERFACE_CALLBACK_FUNCTION f; // function
|
|||
|
void* p; // param(s)
|
|||
|
} CANINTERFACE_CALLBACK;
|
|||
|
|
|||
|
typedef struct {
|
|||
|
CANINTERFACE_STATES state;
|
|||
|
CANINTERFACE_CALLBACK wait;
|
|||
|
CANINTERFACE_CALLBACK read;
|
|||
|
CANINTERFACE_CALLBACK_CAN processCan;
|
|||
|
} CANINTERFACE;
|
|||
|
|
|||
|
CANINTERFACE CANINTERFACE_myself;
|
|||
|
|
|||
|
/**
|
|||
|
* Initialize the CANINTERFACE
|
|||
|
* @param me the CANINTERFACE itself
|
|||
|
*/
|
|||
|
void CANINTERFACE_init();
|
|||
|
|
|||
|
/**
|
|||
|
* Start the CANINTERFACE state machine
|
|||
|
* @param me the CANINTERFACE itself
|
|||
|
*/
|
|||
|
void CANINTERFACE_startBehaviour();
|
|||
|
|
|||
|
/**
|
|||
|
* Handler for receiving new can message during.
|
|||
|
* This function is done during interrupt
|
|||
|
*/
|
|||
|
void CANINTERFACE_newMsg();
|
|||
|
|
|||
|
/**
|
|||
|
* Process the event
|
|||
|
* @param ev the event to process
|
|||
|
* @return true if the event is processed
|
|||
|
*/
|
|||
|
bool CANINTERFACE_processEvent(Event* ev);
|
|||
|
|
|||
|
/*************
|
|||
|
* Callbacks *
|
|||
|
*************/
|
|||
|
|
|||
|
/**
|
|||
|
* Set the callback function to call when the CANINTERFACE is entering state wait
|
|||
|
* @param me the CANINTERFACE itself
|
|||
|
* @param f the function to call
|
|||
|
* @param p the param(s) to pass to the function
|
|||
|
*/
|
|||
|
void CANINTERFACE_onWait(CANINTERFACE_CALLBACK_FUNCTION f, void* p);
|
|||
|
|
|||
|
/**
|
|||
|
* Set the callback function to call when the CANINTERFACE is entering state read
|
|||
|
* @param me the CANINTERFACE itself
|
|||
|
* @param f the function to call
|
|||
|
* @param p the param(s) to pass to the function
|
|||
|
*/
|
|||
|
void CANINTERFACE_onRead(CANINTERFACE_CALLBACK_FUNCTION f, void* p);
|
|||
|
|
|||
|
/**
|
|||
|
* Set the callback function to call when the CANINTERFACE is entering state read
|
|||
|
* @param f the function to call
|
|||
|
*/
|
|||
|
void CANINTERFACE_onProcessCan(CANINTERFACE_CALLBACK_CAN f);
|
|||
|
|
|||
|
/************
|
|||
|
* EMITTERS *
|
|||
|
************/
|
|||
|
|
|||
|
/**
|
|||
|
* Emit the NewMsg event
|
|||
|
* @param me the CANINTERFACE itself
|
|||
|
* @param t time to wait in ms before triggering event
|
|||
|
*/void CANINTERFACE_emitNewMsg(uint16_t t);
|
|||
|
|
|||
|
#endif
|