add param for function pointer
This commit is contained in:
parent
06ad7c948b
commit
ffc2f67b53
@ -86,20 +86,30 @@ void Factory_init() {
|
|||||||
BUTTON_initHW(b3());
|
BUTTON_initHW(b3());
|
||||||
}
|
}
|
||||||
|
|
||||||
void lON(){
|
//typedef void (*fButtonCallback)(void*);
|
||||||
LED_on(l9());
|
buttonCallBack myFunction;
|
||||||
|
|
||||||
|
void lON(void * l){
|
||||||
|
LED* l_ = (LED*)l;
|
||||||
|
LED_on(l_);
|
||||||
}
|
}
|
||||||
void lOFF() {
|
|
||||||
LED_off(l9());
|
|
||||||
|
void lOFF(void* l) {
|
||||||
|
LED* l_ = (LED*)l;
|
||||||
|
LED_off(l_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//connect objects if required
|
//connect objects if required
|
||||||
void Factory_build() {
|
void Factory_build() {
|
||||||
BUTTON_setEventFunctions(b1(), &lON, &lOFF);
|
BUTTON_setEventFunctions(b1(), BUTTON_defineCallBack(&lON, l1()), BUTTON_defineCallBack(NULL, NULL));
|
||||||
|
BUTTON_setEventFunctions(b3(), BUTTON_defineCallBack(&lOFF, l1()), BUTTON_defineCallBack(NULL, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
//start all state machines
|
//start all state machines
|
||||||
void Factory_start() {
|
void Factory_start() {
|
||||||
LEDBlinker_startBehaviour(lb());
|
//LEDBlinker_startBehaviour(lb());
|
||||||
BUTTON_startBehaviour(b1());
|
BUTTON_startBehaviour(b1());
|
||||||
|
BUTTON_startBehaviour(b3());
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,8 @@
|
|||||||
void BUTTON_init(BUTTON* me, uint8_t id) {
|
void BUTTON_init(BUTTON* me, uint8_t id) {
|
||||||
me->id = id;
|
me->id = id;
|
||||||
me->state = ST_PBINIT;
|
me->state = ST_PBINIT;
|
||||||
|
me->press.fCallBack = NULL;
|
||||||
|
me->release.fCallBack = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -114,10 +115,10 @@ bool BUTTON_processEvent(Event * ev) {
|
|||||||
case ST_PBINIT:
|
case ST_PBINIT:
|
||||||
break;
|
break;
|
||||||
case ST_PBRELEASED:
|
case ST_PBRELEASED:
|
||||||
if(me->fButtonRelease != NULL) me->fButtonRelease();
|
if(me->release.fCallBack != NULL) me->release.fCallBack(me->release.param);
|
||||||
break;
|
break;
|
||||||
case ST_PBPRESSED:
|
case ST_PBPRESSED:
|
||||||
if(me->fButtonPress != NULL) me->fButtonPress();
|
if(me->press.fCallBack != NULL) me->press.fCallBack(me->press.param);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
processed = true;
|
processed = true;
|
||||||
@ -125,7 +126,14 @@ bool BUTTON_processEvent(Event * ev) {
|
|||||||
return processed;
|
return processed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BUTTON_setEventFunctions(BUTTON* me, void (*fPress)(void), void (*fRelease)(void)) {
|
void BUTTON_setEventFunctions(BUTTON* me, buttonCallBack fPress, buttonCallBack fRelease) {
|
||||||
me->fButtonPress = fPress;
|
me->press = fPress;
|
||||||
me->fButtonRelease = fRelease;
|
me->release = fRelease;
|
||||||
|
}
|
||||||
|
|
||||||
|
buttonCallBack BUTTON_defineCallBack(fButtonCallback f, void* param){
|
||||||
|
buttonCallBack c;
|
||||||
|
c.fCallBack = f;
|
||||||
|
c.param = param;
|
||||||
|
return c;
|
||||||
}
|
}
|
@ -17,18 +17,26 @@
|
|||||||
typedef enum {ST_PBINIT, ST_PBRELEASED, ST_PBPRESSED} BUTTON_STATES;
|
typedef enum {ST_PBINIT, ST_PBRELEASED, ST_PBPRESSED} BUTTON_STATES;
|
||||||
typedef enum {evPBInit=100, evPBPoll} BUTTON_EVENTS;
|
typedef enum {evPBInit=100, evPBPoll} BUTTON_EVENTS;
|
||||||
|
|
||||||
|
typedef void (*fButtonCallback)(void*);
|
||||||
|
typedef struct {
|
||||||
|
fButtonCallback fCallBack;
|
||||||
|
void* param;
|
||||||
|
} buttonCallBack;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t id;
|
uint8_t id;
|
||||||
BUTTON_STATES state;
|
BUTTON_STATES state;
|
||||||
void (*fButtonPress)(void);
|
buttonCallBack press;
|
||||||
void (*fButtonRelease)(void);
|
buttonCallBack release;
|
||||||
} BUTTON;
|
} BUTTON;
|
||||||
|
|
||||||
|
|
||||||
void BUTTON_init(BUTTON* me, uint8_t id);
|
void BUTTON_init(BUTTON* me, uint8_t id);
|
||||||
void BUTTON_initHW(BUTTON* me);
|
void BUTTON_initHW(BUTTON* me);
|
||||||
bool BUTTON_isPressed(BUTTON* me);
|
bool BUTTON_isPressed(BUTTON* me);
|
||||||
void BUTTON_startBehaviour(BUTTON* me);
|
void BUTTON_startBehaviour(BUTTON* me);
|
||||||
bool BUTTON_processEvent(Event* ev);
|
bool BUTTON_processEvent(Event* ev);
|
||||||
void BUTTON_setEventFunctions(BUTTON* me, void (*fPress)(void), void (*fRelease)(void));
|
void BUTTON_setEventFunctions(BUTTON* me, buttonCallBack fPress, buttonCallBack release);
|
||||||
|
buttonCallBack BUTTON_defineCallBack(fButtonCallback f, void* param);
|
||||||
|
|
||||||
#endif /* BUTTON_H */
|
#endif /* BUTTON_H */
|
Reference in New Issue
Block a user