add param for function pointer
This commit is contained in:
		| @@ -86,20 +86,30 @@ void Factory_init() { | ||||
|     BUTTON_initHW(b3()); | ||||
| } | ||||
|  | ||||
| void lON(){ | ||||
|     LED_on(l9()); | ||||
| //typedef void (*fButtonCallback)(void*); | ||||
| 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 | ||||
| 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 | ||||
| void Factory_start() { | ||||
|     LEDBlinker_startBehaviour(lb()); | ||||
|     //LEDBlinker_startBehaviour(lb()); | ||||
|     BUTTON_startBehaviour(b1()); | ||||
|     BUTTON_startBehaviour(b3()); | ||||
| } | ||||
|   | ||||
| @@ -19,7 +19,8 @@ | ||||
| void BUTTON_init(BUTTON* me, uint8_t id) { | ||||
|     me->id = id; | ||||
|     me->state = ST_PBINIT; | ||||
|  | ||||
|     me->press.fCallBack = NULL; | ||||
|     me->release.fCallBack = NULL; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -114,10 +115,10 @@ bool BUTTON_processEvent(Event * ev) { | ||||
|             case ST_PBINIT: | ||||
|                 break; | ||||
|             case ST_PBRELEASED: | ||||
|                 if(me->fButtonRelease != NULL) me->fButtonRelease(); | ||||
|                 if(me->release.fCallBack != NULL) me->release.fCallBack(me->release.param); | ||||
|                 break; | ||||
|             case ST_PBPRESSED: | ||||
|                 if(me->fButtonPress != NULL) me->fButtonPress(); | ||||
|                 if(me->press.fCallBack != NULL) me->press.fCallBack(me->press.param); | ||||
|                 break; | ||||
|         } | ||||
|         processed = true; | ||||
| @@ -125,7 +126,14 @@ bool BUTTON_processEvent(Event * ev) { | ||||
|     return processed; | ||||
| } | ||||
|  | ||||
| void BUTTON_setEventFunctions(BUTTON* me, void (*fPress)(void), void (*fRelease)(void)) { | ||||
|     me->fButtonPress = fPress; | ||||
|     me->fButtonRelease = fRelease; | ||||
| void BUTTON_setEventFunctions(BUTTON* me, buttonCallBack fPress, buttonCallBack fRelease) { | ||||
|     me->press = fPress; | ||||
|     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 {evPBInit=100, evPBPoll} BUTTON_EVENTS; | ||||
|  | ||||
| typedef void (*fButtonCallback)(void*); | ||||
| typedef struct { | ||||
|     fButtonCallback fCallBack; | ||||
|     void* param; | ||||
| } buttonCallBack; | ||||
|  | ||||
| typedef struct { | ||||
|     uint8_t id; | ||||
|     BUTTON_STATES state; | ||||
|     void (*fButtonPress)(void); | ||||
|     void (*fButtonRelease)(void); | ||||
|     buttonCallBack press; | ||||
|     buttonCallBack release; | ||||
| } BUTTON; | ||||
|  | ||||
|  | ||||
| void BUTTON_init(BUTTON* me, uint8_t id); | ||||
| void BUTTON_initHW(BUTTON* me); | ||||
| bool BUTTON_isPressed(BUTTON* me); | ||||
| void BUTTON_startBehaviour(BUTTON* me); | ||||
| 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 */ | ||||
		Reference in New Issue
	
	Block a user