/** * @author Rémi Heredero * @version 1.0.0 * @date August 2023 * @file can_sender.h */ #ifndef CAN_SENDER_H #define CAN_SENDER_H #include "../../xf/xf.h" typedef enum { STCS_INIT, STCS_WAIT, STCS_SEND } CAN_SENDER_STATES; typedef enum { evCSinit = 15, // TODO change this number (< 256) evCSsend, evCSdone } CAN_SENDER_EVENTS; typedef void (*CAN_SENDER_CALLBACK_FUNCTION)(void*); typedef struct { CAN_SENDER_CALLBACK_FUNCTION f; // function void* p; // param(s) } CAN_SENDER_CALLBACK; typedef struct { CAN_SENDER_STATES state; uint8_t sendingTime; CAN_SENDER_CALLBACK wait; CAN_SENDER_CALLBACK send; } CAN_SENDER; /** * Initialize the CAN_SENDER * @param me the CAN_SENDER itself */ void CAN_SENDER_init(CAN_SENDER* me); /** * Start the CAN_SENDER state machine * @param me the CAN_SENDER itself */ void CAN_SENDER_startBehaviour(CAN_SENDER* me); /** * Process the event * @param ev the event to process * @return true if the event is processed */ bool CAN_SENDER_processEvent(Event* ev); /************* * Callbacks * *************/ /** * Set the callback function to call when the CAN_SENDER is entering state wait * @param me the CAN_SENDER itself * @param f the function to call * @param p the param(s) to pass to the function */ void CAN_SENDER_onWait(CAN_SENDER* me, CAN_SENDER_CALLBACK_FUNCTION f, void* p); /** * Set the callback function to call when the CAN_SENDER is entering state send * @param me the CAN_SENDER itself * @param f the function to call * @param p the param(s) to pass to the function */ void CAN_SENDER_onSend(CAN_SENDER* me, CAN_SENDER_CALLBACK_FUNCTION f, void* p); /************ * EMITTERS * ************/ /** * Emit the send event * @param me the CAN_SENDER itself * @param t time to wait in ms before triggering event */ void CAN_SENDER_emitSend(CAN_SENDER* me, uint16_t t); /** * Emit the done event * @param me the CAN_SENDER itself * @param t time to wait in ms before triggering event */ void CAN_SENDER_emitDone(CAN_SENDER* me, uint16_t t); /*********** * SETTERS * ***********/ /** * * @param me * @param v */ void CAN_SENDER_setSendingTime(CAN_SENDER* me, uint8_t v); #endif