188 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|  * @author Rémi Heredero
 | |
|  * @version 1.0.0
 | |
|  * @date August 2023
 | |
|  * @file alive.h
 | |
|  */
 | |
| #ifndef ALIVE_H
 | |
| #define ALIVE_H
 | |
| 
 | |
| #include "../xf/xf.h"
 | |
| 
 | |
| typedef enum {
 | |
|     STAL_INIT = 20,
 | |
|     STAL_SETUP,
 | |
|     STAL_BORN,
 | |
|     STAL_WAIT,
 | |
|     STAL_DEAD,
 | |
|     STAL_ALIVE,
 | |
|     STAL_BREAK
 | |
| } ALIVE_STATES;
 | |
| 
 | |
| typedef enum {
 | |
|     evALinitChecker = 20,
 | |
|     evALinitSender,
 | |
|     evALborn,
 | |
|     evALready,
 | |
|     evALpoll,
 | |
|     evALstart,
 | |
|     evALresurrect
 | |
| } ALIVE_EVENTS;
 | |
| 
 | |
| typedef void (*ALIVE_CALLBACK_FUNCTION)(void*);
 | |
| typedef struct {
 | |
|     ALIVE_CALLBACK_FUNCTION f; // function
 | |
|     void* p; // param(s)
 | |
| } ALIVE_CALLBACK;
 | |
| 
 | |
| typedef struct {
 | |
|     ALIVE_STATES state;
 | |
|     bool isAlive;
 | |
|     bool checker;
 | |
|     bool sender;
 | |
|     bool haveBreak;
 | |
|     uint8_t aliveTime;
 | |
|     ALIVE_CALLBACK setup;
 | |
|     ALIVE_CALLBACK born;
 | |
|     ALIVE_CALLBACK wait;
 | |
|     ALIVE_CALLBACK dead;
 | |
|     ALIVE_CALLBACK alive;
 | |
|     ALIVE_CALLBACK break_cb;
 | |
| } ALIVE;
 | |
| 
 | |
| /**
 | |
|  * Initialize the ALIVE
 | |
|  * @param me the ALIVE itself
 | |
|  */
 | |
| void ALIVE_init(ALIVE* me);
 | |
| 
 | |
| /**
 | |
|  * Start the ALIVE state machine for checker part
 | |
|  * @param me the ALIVE itself
 | |
|  */
 | |
| void ALIVE_startBehaviourChecker(ALIVE* me);
 | |
| 
 | |
| /**
 | |
|  * Start the ALIVE state machine for sender part
 | |
|  * @param me the ALIVE itself
 | |
|  */
 | |
| void ALIVE_startBehaviourSender(ALIVE* me);
 | |
| 
 | |
| /**
 | |
|  * Process the event
 | |
|  * @param ev the event to process
 | |
|  * @return true if the event is processed
 | |
|  */
 | |
| bool ALIVE_processEvent(Event* ev);
 | |
| 
 | |
| /*************
 | |
|  * Callbacks *
 | |
|  *************/
 | |
| 
 | |
| /**
 | |
|  * Set the callback function to call when the ALIVE is entering state setup
 | |
|  * @param me the ALIVE itself
 | |
|  * @param f the function to call
 | |
|  * @param p the param(s) to pass to the function
 | |
|  */
 | |
| void ALIVE_onSetup(ALIVE* me, ALIVE_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /**
 | |
|  * Set the callback function to call when the ALIVE is entering state born
 | |
|  * @param me the ALIVE itself
 | |
|  * @param f the function to call
 | |
|  * @param p the param(s) to pass to the function
 | |
|  */
 | |
| void ALIVE_onBorn(ALIVE* me, ALIVE_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /**
 | |
|  * Set the callback function to call when the ALIVE is entering state wait
 | |
|  * @param me the ALIVE itself
 | |
|  * @param f the function to call
 | |
|  * @param p the param(s) to pass to the function
 | |
|  */
 | |
| void ALIVE_onWait(ALIVE* me, ALIVE_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /**
 | |
|  * Set the callback function to call when the ALIVE is entering state dead
 | |
|  * @param me the ALIVE itself
 | |
|  * @param f the function to call
 | |
|  * @param p the param(s) to pass to the function
 | |
|  */
 | |
| void ALIVE_onDead(ALIVE* me, ALIVE_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /**
 | |
|  * Set the callback function to call when the ALIVE is entering state alive
 | |
|  * @param me the ALIVE itself
 | |
|  * @param f the function to call
 | |
|  * @param p the param(s) to pass to the function
 | |
|  */
 | |
| void ALIVE_onAlive(ALIVE* me, ALIVE_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /**
 | |
|  * Set the callback function to call when the ALIVE is entering state break
 | |
|  * @param me the ALIVE itself
 | |
|  * @param f the function to call
 | |
|  * @param p the param(s) to pass to the function
 | |
|  */
 | |
| void ALIVE_onBreak(ALIVE* me, ALIVE_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /************
 | |
|  * EMITTERS *
 | |
|  ************/
 | |
| 
 | |
| /**
 | |
|  * Emit the born event
 | |
|  * @param me the ALIVE itself
 | |
|  * @param t time to wait in ms before triggering event
 | |
|  * @param data data to put on the event for XF
 | |
|  */
 | |
| void ALIVE_emitBorn(ALIVE* me, uint16_t t, int64_t data);
 | |
| 
 | |
| /**
 | |
|  * Emit the ready event
 | |
|  * @param me the ALIVE itself
 | |
|  * @param t time to wait in ms before triggering event
 | |
|  * @param data data to put on the event for XF
 | |
|  */
 | |
| void ALIVE_emitReady(ALIVE* me, uint16_t t, int64_t data);
 | |
| 
 | |
| /**
 | |
|  * Emit the poll event
 | |
|  * @param me the ALIVE itself
 | |
|  * @param t time to wait in ms before triggering event
 | |
|  * @param data data to put on the event for XF
 | |
|  */
 | |
| void ALIVE_emitPoll(ALIVE* me, uint16_t t, int64_t data);
 | |
| 
 | |
| /**
 | |
|  * Emit the start event
 | |
|  * @param me the ALIVE itself
 | |
|  * @param t time to wait in ms before triggering event
 | |
|  * @param data data to put on the event for XF
 | |
|  */
 | |
| void ALIVE_emitStart(ALIVE* me, uint16_t t, int64_t data);
 | |
| 
 | |
| /**
 | |
|  * Emit the resurrect event
 | |
|  * @param me the ALIVE itself
 | |
|  * @param t time to wait in ms before triggering event
 | |
|  * @param data data to put on the event for XF
 | |
|  */
 | |
| void ALIVE_emitResurrect(ALIVE* me, uint16_t t, int64_t data);
 | |
| 
 | |
| 
 | |
| /***********
 | |
|  * SETTERS *
 | |
|  ***********/
 | |
| 
 | |
| void ALIVE_setIsAlive(ALIVE* me, bool v);
 | |
| 
 | |
| void ALIVE_setHaveBreak(ALIVE* me, bool v);
 | |
| 
 | |
| void ALIVE_setAliveTime(ALIVE* me, uint8_t v);
 | |
| 
 | |
| void ALIVE_ISALIVE(ALIVE* me);
 | |
| 
 | |
| #endif
 |