135 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|  * @author Rémi Heredero
 | |
|  * @version 1.0.0
 | |
|  * @date August 2023
 | |
|  * @file alive_checker.h
 | |
|  */
 | |
| #ifndef ALIVE_CHECKER_H
 | |
| #define ALIVE_CHECKER_H
 | |
| 
 | |
| #include "../xf/xf.h"
 | |
| 
 | |
| typedef enum {
 | |
|     STAC_INIT,
 | |
|     STAC_SETUP,
 | |
|     STAC_BORN,
 | |
|     STAC_WAIT,
 | |
|     STAC_DEAD
 | |
| } ALIVE_CHECKER_STATES;
 | |
| 
 | |
| typedef enum {
 | |
|     evACinit = 15,
 | |
|     evACborn,
 | |
|     evACready,
 | |
|     evACpoll
 | |
| } ALIVE_CHECKER_EVENTS;
 | |
| 
 | |
| typedef void (*ALIVE_CHECKER_CALLBACK_FUNCTION)(void*);
 | |
| typedef struct {
 | |
|     ALIVE_CHECKER_CALLBACK_FUNCTION f; // function
 | |
|     void* p; // param(s)
 | |
| } ALIVE_CHECKER_CALLBACK;
 | |
| 
 | |
| typedef struct {
 | |
|     ALIVE_CHECKER_STATES state;
 | |
|     bool isAlive;
 | |
|     uint8_t aliveTime;
 | |
|     ALIVE_CHECKER_CALLBACK setup;
 | |
|     ALIVE_CHECKER_CALLBACK born;
 | |
|     ALIVE_CHECKER_CALLBACK wait;
 | |
|     ALIVE_CHECKER_CALLBACK dead;
 | |
| } ALIVE_CHECKER;
 | |
| 
 | |
| /**
 | |
|  * Initialize the ALIVE_CHECKER
 | |
|  * @param me the ALIVE_CHECKER itself
 | |
|  */
 | |
| void ALIVE_CHECKER_init(ALIVE_CHECKER* me);
 | |
| 
 | |
| /**
 | |
|  * Start the ALIVE_CHECKER state machine
 | |
|  * @param me the ALIVE_CHECKER itself
 | |
|  */
 | |
| void ALIVE_CHECKER_startBehaviour(ALIVE_CHECKER* me);
 | |
| 
 | |
| /**
 | |
|  * Process the event
 | |
|  * @param ev the event to process
 | |
|  * @return true if the event is processed
 | |
|  */
 | |
| bool ALIVE_CHECKER_processEvent(Event* ev);
 | |
| 
 | |
| /*************
 | |
|  * Callbacks *
 | |
|  *************/
 | |
| 
 | |
| /**
 | |
|  * Set the callback function to call when the ALIVE_CHECKER is entering state setup
 | |
|  * @param me the ALIVE_CHECKER itself
 | |
|  * @param f the function to call
 | |
|  * @param p the param(s) to pass to the function
 | |
|  */
 | |
| void ALIVE_CHECKER_onSetup(ALIVE_CHECKER* me, ALIVE_CHECKER_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /**
 | |
|  * Set the callback function to call when the ALIVE_CHECKER is entering state born
 | |
|  * @param me the ALIVE_CHECKER itself
 | |
|  * @param f the function to call
 | |
|  * @param p the param(s) to pass to the function
 | |
|  */
 | |
| void ALIVE_CHECKER_onBorn(ALIVE_CHECKER* me, ALIVE_CHECKER_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /**
 | |
|  * Set the callback function to call when the ALIVE_CHECKER is entering state wait
 | |
|  * @param me the ALIVE_CHECKER itself
 | |
|  * @param f the function to call
 | |
|  * @param p the param(s) to pass to the function
 | |
|  */
 | |
| void ALIVE_CHECKER_onWait(ALIVE_CHECKER* me, ALIVE_CHECKER_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /**
 | |
|  * Set the callback function to call when the ALIVE_CHECKER is entering state dead
 | |
|  * @param me the ALIVE_CHECKER itself
 | |
|  * @param f the function to call
 | |
|  * @param p the param(s) to pass to the function
 | |
|  */
 | |
| void ALIVE_CHECKER_onDead(ALIVE_CHECKER* me, ALIVE_CHECKER_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /************
 | |
|  * EMITTERS *
 | |
|  ************/
 | |
| 
 | |
| /**
 | |
|  * Emit the born event
 | |
|  * @param me the ALIVE_CHECKER itself
 | |
|  * @param t time to wait in ms before triggering event
 | |
|  * @param data data to put on the event for XF
 | |
|  */
 | |
| void ALIVE_CHECKER_emitBorn(ALIVE_CHECKER* me, uint16_t t, int64_t data);
 | |
| 
 | |
| /**
 | |
|  * Emit the ready event
 | |
|  * @param me the ALIVE_CHECKER itself
 | |
|  * @param t time to wait in ms before triggering event
 | |
|  * @param data data to put on the event for XF
 | |
|  */
 | |
| void ALIVE_CHECKER_emitReady(ALIVE_CHECKER* me, uint16_t t, int64_t data);
 | |
| 
 | |
| /**
 | |
|  * Emit the poll event
 | |
|  * @param me the ALIVE_CHECKER itself
 | |
|  * @param t time to wait in ms before triggering event
 | |
|  * @param data data to put on the event for XF
 | |
|  */
 | |
| void ALIVE_CHECKER_emitPoll(ALIVE_CHECKER* me, uint16_t t, int64_t data);
 | |
| 
 | |
| /***********
 | |
|  * SETTERS *
 | |
|  ***********/
 | |
| 
 | |
| void ALIVE_CHECKER_setAliveTime(ALIVE_CHECKER* me, uint8_t v);
 | |
| void ALIVE_CHECKER_setIsAlive(ALIVE_CHECKER* me, bool v);
 | |
| void ALIVE_CHECKER_ISALIVE(ALIVE_CHECKER* me); // Use this one when you receive CAN message
 | |
| 
 | |
| #endif
 |