add buttons in Factory
This commit is contained in:
		| @@ -6,16 +6,50 @@ static Factory theFactory; | ||||
|  | ||||
|  | ||||
| //all the getters | ||||
| LED* l() | ||||
| { | ||||
|     return &theFactory.l_; | ||||
| LED* l1() { | ||||
|     return &theFactory.l1_; | ||||
| } | ||||
| LED* l2(){ | ||||
| LED* l2()  { | ||||
|     return &theFactory.l2_; | ||||
| } | ||||
| LED* l3()  { | ||||
|     return &theFactory.l3_; | ||||
| } | ||||
| LED* l4()  { | ||||
|     return &theFactory.l4_; | ||||
| } | ||||
| LED* l5()  { | ||||
|     return &theFactory.l5_; | ||||
| } | ||||
| LED* l6()  { | ||||
|     return &theFactory.l6_; | ||||
| } | ||||
| LED* l7()  { | ||||
|     return &theFactory.l7_; | ||||
| } | ||||
| LED* l8()  { | ||||
|     return &theFactory.l8_; | ||||
| } | ||||
| LED* l9()  { | ||||
|     return &theFactory.l9_; | ||||
| } | ||||
| LED* l10()  { | ||||
|     return &theFactory.l10_; | ||||
| } | ||||
|  | ||||
| LEDBlinker* lb() { | ||||
|     return &theFactory.lb_; | ||||
| BUTTON* b1() { | ||||
|     return &theFactory.b1_; | ||||
| } | ||||
| BUTTON* b2() { | ||||
|     return &theFactory.b2_; | ||||
| } | ||||
| BUTTON* b3() { | ||||
|     return &theFactory.b3_; | ||||
| } | ||||
|  | ||||
|  | ||||
| LEDBlinker* lb1() { | ||||
|     return &theFactory.lb1_; | ||||
| } | ||||
|  | ||||
| LEDBlinker* lb2() { | ||||
| @@ -23,22 +57,46 @@ LEDBlinker* lb2() { | ||||
| } | ||||
|  | ||||
| //initialize all objects | ||||
| void Factory_init() | ||||
| { | ||||
|     LED_init(l(),LID); | ||||
|     LED_init(l2(),2); | ||||
|     LED_initHW(l()); | ||||
| void Factory_init() { | ||||
|     LED_init(l1(), 1); | ||||
|     LED_init(l2(), 2); | ||||
|     LED_init(l3(), 3); | ||||
|     LED_init(l4(), 4); | ||||
|     LED_init(l5(), 5); | ||||
|     LED_init(l6(), 6); | ||||
|     LED_init(l7(), 7); | ||||
|     LED_init(l8(), 8); | ||||
|     LED_init(l9(), 9); | ||||
|     LED_init(l10(), 10); | ||||
|      | ||||
|     BUTTON_init(b1(), 1); | ||||
|     BUTTON_init(b2(), 2); | ||||
|     BUTTON_init(b3(), 3); | ||||
|      | ||||
|      | ||||
|     LED_initHW(l1()); | ||||
|     LED_initHW(l2()); | ||||
|     LED_initHW(l3()); | ||||
|     LED_initHW(l4()); | ||||
|     LED_initHW(l5()); | ||||
|     LED_initHW(l6()); | ||||
|     LED_initHW(l7()); | ||||
|     LED_initHW(l8()); | ||||
|     LED_initHW(l9()); | ||||
|     LED_initHW(l10()); | ||||
|      | ||||
|     BUTTON_initHW(b1()); | ||||
|     BUTTON_initHW(b2()); | ||||
|     BUTTON_initHW(b3()); | ||||
| } | ||||
|  | ||||
| //connect objects if required | ||||
| void Factory_build() | ||||
| { | ||||
|  | ||||
| void Factory_build() { | ||||
|      | ||||
| } | ||||
|  | ||||
| //start all state machines | ||||
| void Factory_start() { | ||||
|     LEDBlinker_startBehaviour(lb()); | ||||
|     LEDBlinker_startBehaviour(lb1()); | ||||
|     LEDBlinker_startBehaviour(lb2()); | ||||
| } | ||||
|   | ||||
| @@ -8,15 +8,27 @@ | ||||
| #include <stdbool.h> | ||||
|  | ||||
| #include "../../board/led/led.h" | ||||
| #include "../../board/button/button.h" | ||||
| #include "../ledblinker.h" | ||||
| #define LID 5 | ||||
| #define LID 1 | ||||
|  | ||||
|  | ||||
| struct Factory_ | ||||
| { | ||||
|     LED l_; | ||||
| struct Factory_ { | ||||
|     LED l1_; | ||||
|     LED l2_; | ||||
|     LEDBlinker lb_; | ||||
|     LED l3_; | ||||
|     LED l4_; | ||||
|     LED l5_; | ||||
|     LED l6_; | ||||
|     LED l7_; | ||||
|     LED l8_; | ||||
|     LED l9_; | ||||
|     LED l10_; | ||||
|     BUTTON b1_; | ||||
|     BUTTON b2_; | ||||
|     BUTTON b3_; | ||||
|      | ||||
|     LEDBlinker lb1_; | ||||
|     LEDBlinker lb2_; | ||||
| }; | ||||
|  | ||||
| @@ -28,9 +40,22 @@ void Factory_build(); | ||||
| void Factory_start(); | ||||
|  | ||||
| //these are global getters for our objects | ||||
| LED* l(); | ||||
| LED* l2();  | ||||
| LEDBlinker* lb(); | ||||
| LED* l1(); | ||||
| LED* l2(); | ||||
| LED* l3(); | ||||
| LED* l4(); | ||||
| LED* l5(); | ||||
| LED* l6(); | ||||
| LED* l7(); | ||||
| LED* l8(); | ||||
| LED* l9(); | ||||
| LED* l10(); | ||||
|  | ||||
| BUTTON* b1(); | ||||
| BUTTON* b2(); | ||||
| BUTTON* b3(); | ||||
|  | ||||
| LEDBlinker* lb1(); | ||||
| LEDBlinker* lb2(); | ||||
|  | ||||
| #endif | ||||
| @@ -2,40 +2,33 @@ | ||||
| #include "factory/factory.h" | ||||
| #include "../board/led/led.h" | ||||
|  | ||||
| void LEDBlinker_init(LEDBlinker* me) | ||||
| { | ||||
| void LEDBlinker_init(LEDBlinker* me) { | ||||
|     me->state = ST_LBINIT; | ||||
| } | ||||
|  | ||||
| void LEDBlinker_startBehaviour(LEDBlinker* me) | ||||
| { | ||||
| void LEDBlinker_startBehaviour(LEDBlinker* me) { | ||||
|     POST(me, &LEDBlinker_processEvent, evLBInit,0,0); | ||||
| } | ||||
|  | ||||
| bool LEDBlinker_processEvent(Event* ev) | ||||
| { | ||||
| bool LEDBlinker_processEvent(Event* ev) { | ||||
|     bool processed = false; | ||||
|     LEDBlinker* me = (LEDBlinker*)Event_getTarget(ev); | ||||
|     LBSTATES oldState = me->state; | ||||
|     evIDT evid = Event_getId(ev); | ||||
|      | ||||
|     switch (me->state) | ||||
|     { | ||||
|     switch (me->state) { | ||||
|         case ST_LBINIT: | ||||
|             if (evid == evLBInit) | ||||
|             { | ||||
|             if (evid == evLBInit) { | ||||
|                 me->state = ST_LBOFF; | ||||
|             } | ||||
|             break; | ||||
|         case ST_LBOFF: | ||||
|             if (evid == evLBTMOn) | ||||
|             { | ||||
|             if (evid == evLBTMOn) { | ||||
|                 me->state = ST_LBON; | ||||
|             } | ||||
|             break; | ||||
|         case ST_LBON: | ||||
|             if (evid == evLBTMOff) | ||||
|             { | ||||
|             if (evid == evLBTMOff) { | ||||
|                 me->state = ST_LBOFF; | ||||
|             } | ||||
|             break; | ||||
| @@ -43,10 +36,8 @@ bool LEDBlinker_processEvent(Event* ev) | ||||
|             break; | ||||
|     } | ||||
|      | ||||
|     if (oldState != me->state) | ||||
|     { | ||||
|         switch (me->state) | ||||
|         { | ||||
|     if (oldState != me->state) { | ||||
|         switch (me->state) { | ||||
|             case ST_LBINIT: | ||||
|                 break; | ||||
|             case ST_LBOFF: | ||||
|   | ||||
| @@ -3,6 +3,7 @@ | ||||
| #include "../board/led/led.h" | ||||
| #include "../app/factory/factory.h" | ||||
| #include "../xf/xf.h" | ||||
| #include "../board/button/button.h" | ||||
|  | ||||
| bool test(Event* ev); | ||||
|  | ||||
| @@ -35,13 +36,30 @@ void main(void) | ||||
|  | ||||
|     Factory_init(); | ||||
|     Factory_build(); | ||||
|     Factory_start(); | ||||
|     //Factory_start(); | ||||
|      | ||||
|     TMR0_SetInterruptHandler(XF_decrementAndQueueTimers); | ||||
|     //TMR0_SetInterruptHandler(XF_decrementAndQueueTimers); | ||||
|  | ||||
|      | ||||
|      | ||||
|     while (1) | ||||
|     { | ||||
|         XF_executeOnce(); | ||||
|     while (1) { | ||||
|         //XF_executeOnce(); | ||||
|         if (BUTTON_isPressed(b1())) { | ||||
|             LED_on(l3()); | ||||
|         } else { | ||||
|             LED_off(l3()); | ||||
|         } | ||||
|  | ||||
|         if (BUTTON_isPressed(b2())) { | ||||
|             LED_on(l2()); | ||||
|         } else { | ||||
|             LED_off(l2()); | ||||
|         } | ||||
|  | ||||
|         if (BUTTON_isPressed(b3())) { | ||||
|             LED_on(l1()); | ||||
|         } else { | ||||
|             LED_off(l1()); | ||||
|         } | ||||
|          | ||||
|     } | ||||
| } | ||||
							
								
								
									
										68
									
								
								03-software/ch/kb28/blinkerProject/board/button/button.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								03-software/ch/kb28/blinkerProject/board/button/button.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| /** | ||||
|  * @file button.c | ||||
|  * @author R<>mi Heredero (remi@heredero.ch) | ||||
|  * @version 0.1 | ||||
|  * @date 2023-06-06 | ||||
|  *  | ||||
|  */ | ||||
|  | ||||
| #include "button.h" | ||||
| #include "../../mcc_generated_files/pin_manager.h" | ||||
|  | ||||
| /** | ||||
|  * @brief Initialize the button | ||||
|  *  | ||||
|  * @param me The object to initialize | ||||
|  * @param id The id of the button | ||||
|  */ | ||||
| void BUTTON_init(BUTTON* me, uint8_t id) { | ||||
|     me->id = id; | ||||
|     me->state = ST_PBINIT; | ||||
|  | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @brief Initialize the hardware of the button | ||||
|  *  | ||||
|  * @param me The object to initialize | ||||
|  */ | ||||
| void BUTTON_initHW(BUTTON* me) { | ||||
|     switch (me->id) { | ||||
|         case 1: | ||||
|             INPUT1_SetDigitalInput(); | ||||
|             break; | ||||
|         case 2: | ||||
|             INPUT2_SetDigitalInput(); | ||||
|             break; | ||||
|         case 3: | ||||
|             INPUT3_SetDigitalInput(); | ||||
|             break; | ||||
|         default: | ||||
|             break; | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @brief Check if the button is pressed | ||||
|  * The function returns true if the button is pressed, false otherwise | ||||
|  *  | ||||
|  * @param me The object to check | ||||
|  * @return true if the button is pressed | ||||
|  * @return false if the button is not pressed | ||||
|  */ | ||||
| bool BUTTON_isPressed(BUTTON* me) { | ||||
|     switch (me->id) { | ||||
|         case 1: | ||||
|             return INPUT1_GetValue(); | ||||
|             break; | ||||
|         case 2: | ||||
|             return INPUT2_GetValue(); | ||||
|             break; | ||||
|         case 3: | ||||
|             return INPUT3_GetValue(); | ||||
|             break; | ||||
|         default: | ||||
|             return false; | ||||
|             break; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										27
									
								
								03-software/ch/kb28/blinkerProject/board/button/button.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								03-software/ch/kb28/blinkerProject/board/button/button.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| /** | ||||
|  * @file button.h | ||||
|  * @author R<>mi Heredero (remi@heredero.ch) | ||||
|  * @version 0.1 | ||||
|  * @date 2023-06-06 | ||||
|  *  | ||||
|  */ | ||||
| #ifndef BUTTON_H | ||||
| #define	BUTTON_H | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include <stdbool.h> | ||||
|  | ||||
| typedef enum {ST_PBINIT, ST_PBWAIT, ST_PBPOLL, ST_PBRELEASED, ST_PBPRESSED} BUTTON_STATES; | ||||
| typedef enum {evPBInit, evPBPoll} BUTTON_EVENTS; | ||||
|  | ||||
| typedef struct { | ||||
|     uint8_t id; | ||||
|     BUTTON_STATES state; | ||||
|  | ||||
| } BUTTON; | ||||
|  | ||||
| void BUTTON_init(BUTTON* me, uint8_t id); | ||||
| void BUTTON_initHW(BUTTON* me); | ||||
| bool BUTTON_isPressed(BUTTON* me); | ||||
|  | ||||
| #endif	/* BUTTON_H */ | ||||
		Reference in New Issue
	
	Block a user