217 lines
5.8 KiB
C
217 lines
5.8 KiB
C
/**
|
||
* @author R<>mi Heredero (remi@heredero.ch)
|
||
* @version 1.0.0
|
||
* @date 2023-06-15
|
||
*/
|
||
|
||
#include "app.h"
|
||
#include "factory.h"
|
||
#include "../middleware/blinker.h"
|
||
#include "../middleware/click_handler.h"
|
||
|
||
void clickL(APP* me){
|
||
POST(me, &APP_processEvent, evAPclickL, 0, 0);
|
||
}
|
||
void clickLn(APP* me){
|
||
POST(me, &APP_processEvent, evAPclickLn, 0, 0);
|
||
}
|
||
void clickR(APP* me){
|
||
POST(me, &APP_processEvent, evAPclickR, 0, 0);
|
||
}
|
||
void clickRn(APP* me){
|
||
POST(me, &APP_processEvent, evAPclickRn, 0, 0);
|
||
}
|
||
void endL(APP* me){
|
||
POST(me, &APP_processEvent, evAPendL, 0, 0);
|
||
}
|
||
void endR(APP* me){
|
||
POST(me, &APP_processEvent, evAPendR, 0, 0);
|
||
}
|
||
void longClick(APP* me){
|
||
POST(me, &APP_processEvent, evAPlongClick, 0, 0);
|
||
}
|
||
|
||
|
||
|
||
void APP_init(APP* me){
|
||
|
||
me->state = STAP_INIT;
|
||
|
||
CLICK_HANDLER_onSingle_click(ch1(), &clickL, me);
|
||
CLICK_HANDLER_onSingle_click(ch3(), &clickR, me);
|
||
|
||
CLICK_HANDLER_onDouble_click(ch1(), &clickLn, me);
|
||
CLICK_HANDLER_onDouble_click(ch3(), &clickRn, me);
|
||
|
||
CLICK_HANDLER_onLong_click(ch1(), &longClick, me);
|
||
CLICK_HANDLER_onLong_click(ch3(), &longClick, me);
|
||
|
||
BLINKER_setFinished(blL(), BLINKER_defineCallBack(&endL, me));
|
||
BLINKER_setFinished(blR(), BLINKER_defineCallBack(&endR, me));
|
||
|
||
}
|
||
|
||
void APP_startBehaviour(APP* me){
|
||
POST(me, &APP_processEvent, evAPinit, 0, 0);
|
||
}
|
||
|
||
bool APP_processEvent(Event* ev){
|
||
bool processed = false;
|
||
APP* me = (APP*) Event_getTarget(ev);
|
||
APP_STATES oldState = me->state;
|
||
evIDT evid = Event_getId(ev);
|
||
|
||
switch(me->state) { // In state
|
||
case STAP_INIT:
|
||
if(evid == evAPinit) {
|
||
me->state = STAP_WAIT;
|
||
}
|
||
break;
|
||
|
||
case STAP_WAIT:
|
||
if(evid == evAPclickL) {
|
||
me->state = STAP_BLINKER_L;
|
||
BLINKER_blink(blL());
|
||
}
|
||
if(evid == evAPclickLn) {
|
||
me->state = STAP_BLINKER_L;
|
||
BLINKER_blinkN(blL());
|
||
}
|
||
if(evid == evAPclickR) {
|
||
me->state = STAP_BLINKER_R;
|
||
BLINKER_blink(blR());
|
||
}
|
||
if(evid == evAPclickRn) {
|
||
me->state = STAP_BLINKER_R;
|
||
BLINKER_blinkN(blR());
|
||
}
|
||
if(evid == evAPlongClick) {
|
||
me->state = STAP_BLINKER_W;
|
||
BLINKER_blink(blB());
|
||
}
|
||
break;
|
||
|
||
case STAP_BLINKER_L:
|
||
if(evid == evAPclickR){
|
||
me->state = STAP_BLINKER_LR;
|
||
BLINKER_blink(blR());
|
||
}
|
||
if(evid == evAPclickRn){
|
||
me->state = STAP_BLINKER_LR;
|
||
BLINKER_blinkN(blR());
|
||
}
|
||
if(evid == evAPclickL) {
|
||
me->state = STAP_WAIT;
|
||
BLINKER_endBlink(blL());
|
||
}
|
||
if(evid == evAPendL) {
|
||
me->state = STAP_WAIT;
|
||
}
|
||
if(evid == evAPlongClick) {
|
||
me->state = STAP_BLINKER_W;
|
||
BLINKER_endBlink(blL());
|
||
BLINKER_blink(blB());
|
||
}
|
||
break;
|
||
|
||
case STAP_BLINKER_R:
|
||
if(evid == evAPclickL){
|
||
me->state = STAP_BLINKER_LR;
|
||
BLINKER_blink(blL());
|
||
}
|
||
if(evid == evAPclickLn){
|
||
me->state = STAP_BLINKER_LR;
|
||
BLINKER_blinkN(blL());
|
||
}
|
||
if(evid == evAPclickR) {
|
||
me->state = STAP_WAIT;
|
||
BLINKER_endBlink(blR());
|
||
}
|
||
if(evid == evAPendR) {
|
||
me->state = STAP_WAIT;
|
||
}
|
||
if(evid == evAPlongClick) {
|
||
me->state = STAP_BLINKER_W;
|
||
BLINKER_endBlink(blR());
|
||
BLINKER_blink(blB());
|
||
}
|
||
break;
|
||
|
||
case STAP_BLINKER_LR:
|
||
if(evid == evAPclickR) {
|
||
me->state = STAP_BLINKER_L;
|
||
BLINKER_endBlink(blR());
|
||
}
|
||
if(evid == evAPendR) {
|
||
me->state = STAP_BLINKER_L;
|
||
}
|
||
if(evid == evAPclickL) {
|
||
me->state = STAP_BLINKER_R;
|
||
BLINKER_endBlink(blL());
|
||
}
|
||
if(evid == evAPendL) {
|
||
me->state = STAP_BLINKER_R;
|
||
}
|
||
if(evid == evAPlongClick) {
|
||
me->state = STAP_BLINKER_W;
|
||
BLINKER_endBlink(blL());
|
||
BLINKER_endBlink(blR());
|
||
BLINKER_blink(blB());
|
||
}
|
||
break;
|
||
|
||
case STAP_BLINKER_W:
|
||
if(evid == evAPlongClick){
|
||
me->state = STAP_WAIT;
|
||
BLINKER_endBlink(blB());
|
||
}
|
||
break;
|
||
|
||
}
|
||
|
||
if(oldState != me->state) {
|
||
switch(oldState) { // on exit
|
||
case STAP_INIT:
|
||
break;
|
||
|
||
case STAP_WAIT:
|
||
break;
|
||
|
||
case STAP_BLINKER_L:
|
||
break;
|
||
|
||
case STAP_BLINKER_R:
|
||
break;
|
||
|
||
case STAP_BLINKER_LR:
|
||
break;
|
||
|
||
case STAP_BLINKER_W:
|
||
break;
|
||
}
|
||
|
||
switch(me->state) { // on entry
|
||
case STAP_INIT:
|
||
break;
|
||
|
||
case STAP_WAIT:
|
||
break;
|
||
|
||
case STAP_BLINKER_L:
|
||
break;
|
||
|
||
case STAP_BLINKER_R:
|
||
break;
|
||
|
||
case STAP_BLINKER_LR:
|
||
break;
|
||
|
||
case STAP_BLINKER_W:
|
||
break;
|
||
|
||
}
|
||
processed = true;
|
||
}
|
||
return processed;
|
||
}
|