168 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|  * @author Rémi Heredero
 | |
|  * @version 1.0.0
 | |
|  * @date July 2023
 | |
|  * @file blinker.h
 | |
|  */
 | |
| #ifndef BLINKER_H
 | |
| #define BLINKER_H
 | |
| 
 | |
| #include "../xf/xf.h"
 | |
| 
 | |
| typedef enum {
 | |
|     STBL_INIT,
 | |
|     STBL_WAIT,
 | |
|     STBL_ON,
 | |
|     STBL_OFF
 | |
| } BLINKER_STATES;
 | |
| 
 | |
| typedef enum {
 | |
|     evBLinit = 200,
 | |
|     evBLblink,
 | |
|     evBLblinkN,
 | |
|     evBLtimer
 | |
| } BLINKER_EVENTS;
 | |
| 
 | |
| typedef void (*BLINKER_CALLBACK_FUNCTION)(void*);
 | |
| typedef struct {
 | |
|     BLINKER_CALLBACK_FUNCTION f; // function
 | |
|     void* p; // param(s)
 | |
| } BLINKER_CALLBACK;
 | |
| 
 | |
| typedef struct {
 | |
|     BLINKER_STATES state; //Actual state
 | |
|     uint16_t timeOn; // Time on
 | |
|     uint16_t timeOff; // Time off
 | |
|     uint8_t numberOfBlink; // Number of blink for this blinker when start with blinkN
 | |
|     bool nBlinkIsOn; // If the nBlink way is enable
 | |
|     uint8_t remainBlinks; // Actual remain blink
 | |
|     BLINKER_CALLBACK wait;
 | |
|     BLINKER_CALLBACK on;
 | |
|     BLINKER_CALLBACK off;
 | |
|     BLINKER_CALLBACK finished;
 | |
| } BLINKER;
 | |
| 
 | |
| /**
 | |
|  * Initialize the BLINKER
 | |
|  * @param me the BLINKER itself
 | |
|  */
 | |
| void BLINKER_init(BLINKER* me);
 | |
| 
 | |
| /**
 | |
|  * Start the BLINKER state machine
 | |
|  * @param me the BLINKER itself
 | |
|  */
 | |
| void BLINKER_startBehaviour(BLINKER* me);
 | |
| 
 | |
| /**
 | |
|  * Process the event
 | |
|  * @param ev the event to process
 | |
|  * @return true if the event is processed
 | |
|  */
 | |
| bool BLINKER_processEvent(Event* ev);
 | |
| 
 | |
| /*************
 | |
|  * Callbacks *
 | |
|  *************/
 | |
| 
 | |
| /**
 | |
|  * Set the callback function to call when the BLINKER is entering state wait
 | |
|  * @param me the BLINKER itself
 | |
|  * @param f the function to call
 | |
|  * @param p the param(s) to pass to the function
 | |
|  */
 | |
| void BLINKER_onWait(BLINKER* me, BLINKER_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /**
 | |
|  * Set the callback function to call when the BLINKER is entering state on
 | |
|  * @param me the BLINKER itself
 | |
|  * @param f the function to call
 | |
|  * @param p the param(s) to pass to the function
 | |
|  */
 | |
| void BLINKER_onOn(BLINKER* me, BLINKER_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /**
 | |
|  * Set the callback function to call when the BLINKER is entering state off
 | |
|  * @param me the BLINKER itself
 | |
|  * @param f the function to call
 | |
|  * @param p the param(s) to pass to the function
 | |
|  */
 | |
| void BLINKER_onOff(BLINKER* me, BLINKER_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /**
 | |
|  * Set the callabck function to call when the BLINKER is entering state finished
 | |
|  * @param me the BLINKER itself
 | |
|  * @param f the function to call
 | |
|  * @param t the param(s) to pass to the function
 | |
|  */
 | |
| void BLINKER_onFinished(BLINKER* me, BLINKER_CALLBACK_FUNCTION f, void* p);
 | |
| 
 | |
| /************
 | |
|  * EMITTERS *
 | |
|  ************/
 | |
| 
 | |
| /**
 | |
|  * Emit the blink event
 | |
|  * @param me the BLINKER itself
 | |
|  * @param t time to wait in ms before triggering event
 | |
|  */void BLINKER_emitBlink(BLINKER* me, uint16_t t);
 | |
| 
 | |
| /**
 | |
|  * Emit the blinkn event
 | |
|  * @param me the BLINKER itself
 | |
|  * @param t time to wait in ms before triggering event
 | |
|  */void BLINKER_emitBlinkN(BLINKER* me, uint16_t t);
 | |
| 
 | |
| /**
 | |
|  * Emit the timer event
 | |
|  * @param me the BLINKER itself
 | |
|  * @param t time to wait in ms before triggering event
 | |
|  */void BLINKER_emitTimer(BLINKER* me, uint16_t t);
 | |
| 
 | |
| /***********
 | |
|  * SETTERS *
 | |
|  ***********/
 | |
| 
 | |
| /**
 | |
|  * Set the time on
 | |
|  * @param me the BLINKER itself
 | |
|  * @param v the value to set
 | |
|  */
 | |
| void BLINKER_setTimeOn(BLINKER* me, uint16_t v);
 | |
| 
 | |
| /**
 | |
|  * Set the time off
 | |
|  * @param me the BLINKER itself
 | |
|  * @param v the value to set
 | |
|  */
 | |
| void BLINKER_setTimeOff(BLINKER* me, uint16_t v);
 | |
| 
 | |
| /**
 | |
|  * Set the number of blink
 | |
|  * @param me the BLINKER itself
 | |
|  * @param v the value to set
 | |
|  */
 | |
| void BLINKER_setNumberOfBlink(BLINKER* me, uint8_t v);
 | |
| 
 | |
| /**
 | |
|  * Set the nBlinkIsOn
 | |
|  * @param me the BLINKER itself
 | |
|  * @param v the value to set
 | |
|  */
 | |
| void BLINKER_setNBlinkIsOn(BLINKER* me, bool v);
 | |
| 
 | |
| /**
 | |
|  * Set the remain blink(s)
 | |
|  * @param me the BLINKER itself
 | |
|  * @param v the value to set
 | |
|  */
 | |
| void BLINKER_setRemainBlinks(BLINKER* me, uint8_t v);
 | |
| 
 | |
| /**
 | |
|  * Stop to blink if it was indefinitely blinking
 | |
|  * @param me the blinker itself
 | |
|  */
 | |
| void BLINKER_endBlink(BLINKER* me);
 | |
| 
 | |
| #endif
 |