add toggle on blinker

This commit is contained in:
Rémi Heredero 2023-06-15 22:20:47 +02:00
parent 1f091485ac
commit b428b0cd76
4 changed files with 56 additions and 20 deletions

View File

@ -62,8 +62,11 @@ CLICK_HANDLER* ch3() {
return &theFactory.ch3_;
}
BLINKER* blA() {
return &theFactory.blA_;
BLINKER* blL() {
return &theFactory.blL_;
}
BLINKER* blR() {
return &theFactory.blR_;
}
BLINKER* blB() {
return &theFactory.blB_;
@ -106,31 +109,44 @@ void Factory_init() {
CLICK_HANDLER_init(ch2(), b2());
CLICK_HANDLER_init(ch3(), b3());
BLINKER_init(blA());
BLINKER_init(blL());
BLINKER_init(blR());
BLINKER_init(blB());
}
void warningBlink(void* on_){
bool on = (bool)on_;
BLINKER_endBlink(blL());
BLINKER_endBlink(blR());
if(on) {
LED_on(l1());
LED_on(l10());
} else {
LED_off(l1());
LED_off(l10());
}
}
//connect objects if required
void Factory_build() {
BLINKER_defineNblink(blA(), 3);
BLINKER_defineNblink(blB(), 5);
BLINKER_setTimeOn(blA(), 20);
BLINKER_setTimeOff(blA(), 480);
BLINKER_setTurnOn(blA(), BLINKER_defineCallBack(&LED_on, l1()));
BLINKER_setTurnOff(blA(), BLINKER_defineCallBack(&LED_off, l1()));
BLINKER_setTurnOn(blB(), BLINKER_defineCallBack(&LED_on, l10()));
BLINKER_setTurnOff(blB(), BLINKER_defineCallBack(&LED_off, l10()));
BLINKER_setTurnOn(blL(), BLINKER_defineCallBack(&LED_on, l1()));
BLINKER_setTurnOff(blL(), BLINKER_defineCallBack(&LED_off, l1()));
BLINKER_setTurnOn(blR(), BLINKER_defineCallBack(&LED_on, l10()));
BLINKER_setTurnOff(blR(), BLINKER_defineCallBack(&LED_off, l10()));
BLINKER_setTurnOn(blB(), BLINKER_defineCallBack(&warningBlink, true));
BLINKER_setTurnOff(blB(), BLINKER_defineCallBack(&warningBlink, false));
CLICK_HANDLER_setSingleClickCallback(ch1(), CLICK_HANDLER_defineCallBack(&BLINKER_blink, blA()));
CLICK_HANDLER_setDoubleClickCallback(ch1(), CLICK_HANDLER_defineCallBack(&BLINKER_endBlink, blA()));
CLICK_HANDLER_setLongClickCallback(ch1(), CLICK_HANDLER_defineCallBack(&BLINKER_blinkN, blA()));
CLICK_HANDLER_setSingleClickCallback(ch1(), CLICK_HANDLER_defineCallBack(&BLINKER_toggle, blL()));
CLICK_HANDLER_setSingleClickCallback(ch3(), CLICK_HANDLER_defineCallBack(&BLINKER_toggle, blR()));
CLICK_HANDLER_setSingleClickCallback(ch3(), CLICK_HANDLER_defineCallBack(&BLINKER_blink, blB()));
CLICK_HANDLER_setDoubleClickCallback(ch3(), CLICK_HANDLER_defineCallBack(&BLINKER_endBlink, blB()));
CLICK_HANDLER_setLongClickCallback(ch3(), CLICK_HANDLER_defineCallBack(&BLINKER_blinkN, blB()));
CLICK_HANDLER_setDoubleClickCallback(ch1(), CLICK_HANDLER_defineCallBack(&BLINKER_blinkN, blL()));
CLICK_HANDLER_setDoubleClickCallback(ch3(), CLICK_HANDLER_defineCallBack(&BLINKER_blinkN, blR()));
CLICK_HANDLER_setLongClickCallback(ch1(), CLICK_HANDLER_defineCallBack(&BLINKER_toggle, blB()));
CLICK_HANDLER_setLongClickCallback(ch3(), CLICK_HANDLER_defineCallBack(&BLINKER_toggle, blB()));
}
@ -142,6 +158,7 @@ void Factory_start() {
CLICK_HANDLER_startBehaviour(ch1());
CLICK_HANDLER_startBehaviour(ch2());
CLICK_HANDLER_startBehaviour(ch3());
BLINKER_starBehaviour(blA());
BLINKER_starBehaviour(blL());
BLINKER_starBehaviour(blR());
BLINKER_starBehaviour(blB());
}

View File

@ -32,7 +32,8 @@ typedef struct {
CLICK_HANDLER ch1_;
CLICK_HANDLER ch2_;
CLICK_HANDLER ch3_;
BLINKER blA_;
BLINKER blL_;
BLINKER blR_;
BLINKER blB_;
} Factory;
@ -61,7 +62,8 @@ CLICK_HANDLER* ch1();
CLICK_HANDLER* ch2();
CLICK_HANDLER* ch3();
BLINKER* blA();
BLINKER* blL();
BLINKER* blR();
BLINKER* blB();
#endif

View File

@ -132,3 +132,18 @@ bool BLINKER_processEvent(Event* ev) {
void BLINKER_endBlink(BLINKER* me) {
me->remainBlinks = 0;
}
void BLINKER_toggle(BLINKER* me){
switch(me->state) {
case STBL_WAIT:
BLINKER_blink(me);
break;
case STBL_OFF:
BLINKER_endBlink(me);
break;
case STBL_ON:
BLINKER_endBlink(me);
break;
}
me->toggleRemainBlinks = me->remainBlinks;
}

View File

@ -120,6 +120,8 @@ bool BLINKER_processEvent(Event* ev);
*/
void BLINKER_endBlink(BLINKER* me);
void BLINKER_toggle(BLINKER* me);
#endif /* BLINKER_H */