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
|