add clickHandler
This commit is contained in:
		| @@ -1,13 +1,13 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <diagram program="umlet" version="15.1"> | ||||
|   <zoom_level>14</zoom_level> | ||||
|   <zoom_level>20</zoom_level> | ||||
|   <element> | ||||
|     <id>UMLSpecialState</id> | ||||
|     <coordinates> | ||||
|       <x>546</x> | ||||
|       <y>140</y> | ||||
|       <w>28</w> | ||||
|       <h>28</h> | ||||
|       <x>1160</x> | ||||
|       <y>200</y> | ||||
|       <w>40</w> | ||||
|       <h>40</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>type=initial</panel_attributes> | ||||
|     <additional_attributes/> | ||||
| @@ -15,10 +15,10 @@ | ||||
|   <element> | ||||
|     <id>UMLState</id> | ||||
|     <coordinates> | ||||
|       <x>210</x> | ||||
|       <y>364</y> | ||||
|       <w>196</w> | ||||
|       <h>56</h> | ||||
|       <x>680</x> | ||||
|       <y>520</y> | ||||
|       <w>280</w> | ||||
|       <h>80</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>ST_PBPRESSED</panel_attributes> | ||||
|     <additional_attributes/> | ||||
| @@ -26,10 +26,10 @@ | ||||
|   <element> | ||||
|     <id>UMLState</id> | ||||
|     <coordinates> | ||||
|       <x>714</x> | ||||
|       <y>364</y> | ||||
|       <w>196</w> | ||||
|       <h>56</h> | ||||
|       <x>1400</x> | ||||
|       <y>520</y> | ||||
|       <w>280</w> | ||||
|       <h>80</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>ST_PBRELEASED</panel_attributes> | ||||
|     <additional_attributes/> | ||||
| @@ -37,10 +37,10 @@ | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>798</x> | ||||
|       <y>406</y> | ||||
|       <w>126</w> | ||||
|       <h>168</h> | ||||
|       <x>1520</x> | ||||
|       <y>580</y> | ||||
|       <w>180</w> | ||||
|       <h>240</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| evPBPoll</panel_attributes> | ||||
| @@ -49,10 +49,10 @@ evPBPoll</panel_attributes> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>546</x> | ||||
|       <y>154</y> | ||||
|       <w>126</w> | ||||
|       <h>126</h> | ||||
|       <x>1160</x> | ||||
|       <y>220</y> | ||||
|       <w>180</w> | ||||
|       <h>180</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| evPBInit</panel_attributes> | ||||
| @@ -61,10 +61,10 @@ evPBInit</panel_attributes> | ||||
|   <element> | ||||
|     <id>UMLSpecialState</id> | ||||
|     <coordinates> | ||||
|       <x>532</x> | ||||
|       <y>252</y> | ||||
|       <w>56</w> | ||||
|       <h>56</h> | ||||
|       <x>1140</x> | ||||
|       <y>360</y> | ||||
|       <w>80</w> | ||||
|       <h>80</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>type=decision</panel_attributes> | ||||
|     <additional_attributes/> | ||||
| @@ -72,10 +72,10 @@ evPBInit</panel_attributes> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>294</x> | ||||
|       <y>266</y> | ||||
|       <w>266</w> | ||||
|       <h>126</h> | ||||
|       <x>800</x> | ||||
|       <y>380</y> | ||||
|       <w>380</w> | ||||
|       <h>180</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| m1=[pB==1]</panel_attributes> | ||||
| @@ -84,10 +84,10 @@ m1=[pB==1]</panel_attributes> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>294</x> | ||||
|       <y>406</y> | ||||
|       <w>126</w> | ||||
|       <h>126</h> | ||||
|       <x>800</x> | ||||
|       <y>580</y> | ||||
|       <w>180</w> | ||||
|       <h>180</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| evPBPoll</panel_attributes> | ||||
| @@ -96,10 +96,10 @@ evPBPoll</panel_attributes> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>574</x> | ||||
|       <y>266</y> | ||||
|       <w>266</w> | ||||
|       <h>126</h> | ||||
|       <x>1200</x> | ||||
|       <y>380</y> | ||||
|       <w>380</w> | ||||
|       <h>180</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| m1=[pB==0]</panel_attributes> | ||||
| @@ -108,10 +108,10 @@ m1=[pB==0]</panel_attributes> | ||||
|   <element> | ||||
|     <id>UMLSpecialState</id> | ||||
|     <coordinates> | ||||
|       <x>280</x> | ||||
|       <y>504</y> | ||||
|       <w>56</w> | ||||
|       <h>56</h> | ||||
|       <x>780</x> | ||||
|       <y>720</y> | ||||
|       <w>80</w> | ||||
|       <h>80</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>type=decision</panel_attributes> | ||||
|     <additional_attributes/> | ||||
| @@ -119,10 +119,10 @@ m1=[pB==0]</panel_attributes> | ||||
|   <element> | ||||
|     <id>UMLSpecialState</id> | ||||
|     <coordinates> | ||||
|       <x>784</x> | ||||
|       <y>546</y> | ||||
|       <w>56</w> | ||||
|       <h>56</h> | ||||
|       <x>1500</x> | ||||
|       <y>780</y> | ||||
|       <w>80</w> | ||||
|       <h>80</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>type=decision</panel_attributes> | ||||
|     <additional_attributes/> | ||||
| @@ -130,10 +130,10 @@ m1=[pB==0]</panel_attributes> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>350</x> | ||||
|       <y>308</y> | ||||
|       <w>462</w> | ||||
|       <h>308</h> | ||||
|       <x>880</x> | ||||
|       <y>440</y> | ||||
|       <w>660</w> | ||||
|       <h>440</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| m1=[pB==1] / pbPress()</panel_attributes> | ||||
| @@ -142,10 +142,10 @@ m1=[pB==1] / pbPress()</panel_attributes> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>322</x> | ||||
|       <y>308</y> | ||||
|       <w>462</w> | ||||
|       <h>266</h> | ||||
|       <x>840</x> | ||||
|       <y>440</y> | ||||
|       <w>660</w> | ||||
|       <h>380</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
|  | ||||
| @@ -155,10 +155,10 @@ m1=[pB==0] / pbRelease()</panel_attributes> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>154</x> | ||||
|       <y>308</y> | ||||
|       <w>154</w> | ||||
|       <h>266</h> | ||||
|       <x>600</x> | ||||
|       <y>440</y> | ||||
|       <w>220</w> | ||||
|       <h>380</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| m1=[else]</panel_attributes> | ||||
| @@ -167,13 +167,25 @@ m1=[else]</panel_attributes> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>826</x> | ||||
|       <y>308</y> | ||||
|       <w>154</w> | ||||
|       <h>308</h> | ||||
|       <x>1560</x> | ||||
|       <y>440</y> | ||||
|       <w>220</w> | ||||
|       <h>440</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| m1=[else]</panel_attributes> | ||||
|     <additional_attributes>10.0;190.0;90.0;190.0;90.0;10.0;30.0;10.0;30.0;40.0</additional_attributes> | ||||
|   </element> | ||||
|   <element> | ||||
|     <id>UMLNote</id> | ||||
|     <coordinates> | ||||
|       <x>1000</x> | ||||
|       <y>880</y> | ||||
|       <w>400</w> | ||||
|       <h>100</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>pbRelease() & pbPress() | ||||
| are CallBack Functions</panel_attributes> | ||||
|     <additional_attributes/> | ||||
|   </element> | ||||
| </diagram> | ||||
|   | ||||
							
								
								
									
										155
									
								
								02-UML/ST_CLICK_HANDLER.uxf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								02-UML/ST_CLICK_HANDLER.uxf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,155 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <diagram program="umlet" version="15.1"> | ||||
|   <zoom_level>20</zoom_level> | ||||
|   <element> | ||||
|     <id>UMLSpecialState</id> | ||||
|     <coordinates> | ||||
|       <x>700</x> | ||||
|       <y>20</y> | ||||
|       <w>40</w> | ||||
|       <h>40</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>type=initial</panel_attributes> | ||||
|     <additional_attributes/> | ||||
|   </element> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>700</x> | ||||
|       <y>40</y> | ||||
|       <w>180</w> | ||||
|       <h>180</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| evCHInit</panel_attributes> | ||||
|     <additional_attributes>10.0;10.0;10.0;70.0</additional_attributes> | ||||
|   </element> | ||||
|   <element> | ||||
|     <id>UMLState</id> | ||||
|     <coordinates> | ||||
|       <x>580</x> | ||||
|       <y>180</y> | ||||
|       <w>280</w> | ||||
|       <h>80</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>ST_WAIT</panel_attributes> | ||||
|     <additional_attributes/> | ||||
|   </element> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>700</x> | ||||
|       <y>240</y> | ||||
|       <w>200</w> | ||||
|       <h>180</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| evPBPress</panel_attributes> | ||||
|     <additional_attributes>10.0;10.0;10.0;70.0</additional_attributes> | ||||
|   </element> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>700</x> | ||||
|       <y>440</y> | ||||
|       <w>240</w> | ||||
|       <h>180</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| evPBRelease</panel_attributes> | ||||
|     <additional_attributes>10.0;10.0;10.0;70.0</additional_attributes> | ||||
|   </element> | ||||
|   <element> | ||||
|     <id>UMLState</id> | ||||
|     <coordinates> | ||||
|       <x>540</x> | ||||
|       <y>380</y> | ||||
|       <w>360</w> | ||||
|       <h>80</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>ST_LONG_CLICK</panel_attributes> | ||||
|     <additional_attributes/> | ||||
|   </element> | ||||
|   <element> | ||||
|     <id>UMLState</id> | ||||
|     <coordinates> | ||||
|       <x>540</x> | ||||
|       <y>580</y> | ||||
|       <w>360</w> | ||||
|       <h>80</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>ST_SINGLE_CLICK</panel_attributes> | ||||
|     <additional_attributes/> | ||||
|   </element> | ||||
|   <element> | ||||
|     <id>UMLState</id> | ||||
|     <coordinates> | ||||
|       <x>540</x> | ||||
|       <y>780</y> | ||||
|       <w>360</w> | ||||
|       <h>80</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>ST_DOUBLE_CLICK</panel_attributes> | ||||
|     <additional_attributes/> | ||||
|   </element> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>700</x> | ||||
|       <y>640</y> | ||||
|       <w>200</w> | ||||
|       <h>180</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| evPBPress</panel_attributes> | ||||
|     <additional_attributes>10.0;10.0;10.0;70.0</additional_attributes> | ||||
|   </element> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>840</x> | ||||
|       <y>200</y> | ||||
|       <w>560</w> | ||||
|       <h>280</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| m1=evCHtimer / chLongClick()</panel_attributes> | ||||
|     <additional_attributes>30.0;110.0;260.0;110.0;260.0;10.0;10.0;10.0</additional_attributes> | ||||
|   </element> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>840</x> | ||||
|       <y>200</y> | ||||
|       <w>560</w> | ||||
|       <h>480</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| m1=evCHtimer / chSingleClick()</panel_attributes> | ||||
|     <additional_attributes>30.0;210.0;260.0;210.0;260.0;10.0;10.0;10.0</additional_attributes> | ||||
|   </element> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>840</x> | ||||
|       <y>200</y> | ||||
|       <w>560</w> | ||||
|       <h>660</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| m1=evCHtimer / chDoubleClick()</panel_attributes> | ||||
|     <additional_attributes>30.0;300.0;260.0;300.0;260.0;10.0;10.0;10.0</additional_attributes> | ||||
|   </element> | ||||
|   <element> | ||||
|     <id>Relation</id> | ||||
|     <coordinates> | ||||
|       <x>840</x> | ||||
|       <y>200</y> | ||||
|       <w>560</w> | ||||
|       <h>700</h> | ||||
|     </coordinates> | ||||
|     <panel_attributes>lt=-> | ||||
| m1=evPBRelease / chDoubleClick()</panel_attributes> | ||||
|     <additional_attributes>30.0;320.0;260.0;320.0;260.0;10.0;10.0;10.0</additional_attributes> | ||||
|   </element> | ||||
| </diagram> | ||||
| @@ -47,6 +47,16 @@ BUTTON* b3() { | ||||
|     return &theFactory.b3_; | ||||
| } | ||||
|  | ||||
| CLICK_HANDLER* ch1() { | ||||
|     return &theFactory.ch1_; | ||||
| } | ||||
| CLICK_HANDLER* ch2() { | ||||
|     return &theFactory.ch2_; | ||||
| } | ||||
| CLICK_HANDLER* ch3() { | ||||
|     return &theFactory.ch3_; | ||||
| } | ||||
|  | ||||
|  | ||||
| LEDBlinker* lb() { | ||||
|     return &theFactory.lb_; | ||||
| @@ -69,6 +79,10 @@ void Factory_init() { | ||||
|     BUTTON_init(b2(), 2); | ||||
|     BUTTON_init(b3(), 3); | ||||
|      | ||||
|     CLICK_HANDLER_init(ch1(), b1()); | ||||
|     CLICK_HANDLER_init(ch2(), b2()); | ||||
|     CLICK_HANDLER_init(ch3(), b3()); | ||||
|      | ||||
|      | ||||
|     LED_initHW(l1()); | ||||
|     LED_initHW(l2()); | ||||
| @@ -86,30 +100,29 @@ void Factory_init() { | ||||
|     BUTTON_initHW(b3()); | ||||
| } | ||||
|  | ||||
| //typedef void (*fButtonCallback)(void*); | ||||
| buttonCallBack myFunction; | ||||
|  | ||||
| void lON(void * l){ | ||||
|     LED* l_ = (LED*)l; | ||||
|     LED_on(l_); | ||||
| } | ||||
|  | ||||
|  | ||||
| void lOFF(void* l) { | ||||
|     LED* l_ = (LED*)l; | ||||
|     LED_off(l_); | ||||
| } | ||||
|  | ||||
|  | ||||
| //connect objects if required | ||||
| void Factory_build() { | ||||
|     BUTTON_setEventFunctions(b1(), BUTTON_defineCallBack(&lON, l1()), BUTTON_defineCallBack(NULL, NULL)); | ||||
|     BUTTON_setEventFunctions(b3(), BUTTON_defineCallBack(&lOFF, l1()), BUTTON_defineCallBack(NULL, NULL)); | ||||
|     //BUTTON_setEventFunctions(b1(), BUTTON_defineCallBack(&LED_on, l1()), BUTTON_defineCallBack(NULL, NULL)); | ||||
|     //BUTTON_setEventFunctions(b3(), BUTTON_defineCallBack(&LED_off, l1()), BUTTON_defineCallBack(NULL, NULL)); | ||||
|      | ||||
|      | ||||
|     CLICK_HANDLER_setSingleClickCallback(ch1(), CLICK_HANDLER_defineCallBack(&LED_on, l1())); | ||||
|     CLICK_HANDLER_setSingleClickCallback(ch3(), CLICK_HANDLER_defineCallBack(&LED_on, l3())); | ||||
|      | ||||
|     CLICK_HANDLER_setDoubleClickCallback(ch1(), CLICK_HANDLER_defineCallBack(&LED_off, l1())); | ||||
|     CLICK_HANDLER_setDoubleClickCallback(ch3(), CLICK_HANDLER_defineCallBack(&LED_off, l3())); | ||||
|      | ||||
|     CLICK_HANDLER_setLongClickCallback(ch1(), CLICK_HANDLER_defineCallBack(&LED_on, l2())); | ||||
|     CLICK_HANDLER_setLongClickCallback(ch3(), CLICK_HANDLER_defineCallBack(&LED_off, l2())); | ||||
| } | ||||
|  | ||||
| //start all state machines | ||||
| void Factory_start() { | ||||
|     //LEDBlinker_startBehaviour(lb()); | ||||
|     BUTTON_startBehaviour(b1()); | ||||
|     BUTTON_startBehaviour(b2()); | ||||
|     BUTTON_startBehaviour(b3()); | ||||
|     CLICK_HANDLER_startBehaviour(ch1()); | ||||
|     CLICK_HANDLER_startBehaviour(ch2()); | ||||
|     CLICK_HANDLER_startBehaviour(ch3()); | ||||
| } | ||||
|   | ||||
| @@ -10,8 +10,7 @@ | ||||
| #include "../../board/led/led.h" | ||||
| #include "../../board/button/button.h" | ||||
| #include "../ledblinker.h" | ||||
| #define LID 1 | ||||
|  | ||||
| #include "../../middleware/clickHandler.h" | ||||
|  | ||||
| typedef struct { | ||||
|     LED l1_; | ||||
| @@ -27,6 +26,9 @@ typedef struct { | ||||
|     BUTTON b1_; | ||||
|     BUTTON b2_; | ||||
|     BUTTON b3_; | ||||
|     CLICK_HANDLER ch1_; | ||||
|     CLICK_HANDLER ch2_; | ||||
|     CLICK_HANDLER ch3_; | ||||
|      | ||||
|     LEDBlinker lb_; | ||||
| } Factory; | ||||
| @@ -52,6 +54,10 @@ BUTTON* b1(); | ||||
| BUTTON* b2(); | ||||
| BUTTON* b3(); | ||||
|  | ||||
| CLICK_HANDLER* ch1(); | ||||
| CLICK_HANDLER* ch2(); | ||||
| CLICK_HANDLER* ch3(); | ||||
|  | ||||
| LEDBlinker* lb(); | ||||
|  | ||||
| #endif | ||||
| @@ -1,8 +1,8 @@ | ||||
| /** | ||||
|  * @file button.c | ||||
|  * @author R<>mi Heredero (remi@heredero.ch) | ||||
|  * @version 0.1 | ||||
|  * @date 2023-06-06 | ||||
|  * @version 1 | ||||
|  * @date 2023-06-13 | ||||
|  *  | ||||
|  */ | ||||
|  | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| /** | ||||
|  * @file button.h | ||||
|  * @author R<>mi Heredero (remi@heredero.ch) | ||||
|  * @version 0.1 | ||||
|  * @date 2023-06-06 | ||||
|  * @version 1 | ||||
|  * @date 2023-06-13 | ||||
|  *  | ||||
|  */ | ||||
| #ifndef BUTTON_H | ||||
| @@ -30,13 +30,33 @@ typedef struct { | ||||
|     buttonCallBack release; | ||||
| } BUTTON; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * @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); | ||||
|  | ||||
| /** | ||||
|  * @brief Initialize the hardware of the button | ||||
|  *  | ||||
|  * @param me The object to initialize | ||||
|  */ | ||||
| void BUTTON_initHW(BUTTON* me); | ||||
|  | ||||
| /** | ||||
|  * @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 | ||||
|  */ | ||||
| void BUTTON_setEventFunctions(BUTTON* me, buttonCallBack fPress, buttonCallBack release); | ||||
| bool BUTTON_isPressed(BUTTON* me); | ||||
| void BUTTON_startBehaviour(BUTTON* me); | ||||
| bool BUTTON_processEvent(Event* ev); | ||||
| void BUTTON_setEventFunctions(BUTTON* me, buttonCallBack fPress, buttonCallBack release); | ||||
| buttonCallBack BUTTON_defineCallBack(fButtonCallback f, void* param); | ||||
|  | ||||
| #endif	/* BUTTON_H */ | ||||
| @@ -1,8 +1,7 @@ | ||||
| #include "led.h" | ||||
| #include "../../mcc_generated_files/pin_manager.h" | ||||
|  | ||||
| void LED_init(LED* me, uint8_t id) | ||||
| { | ||||
| void LED_init(LED* me, uint8_t id) { | ||||
|     me->id = id; | ||||
| } | ||||
|  | ||||
| @@ -10,15 +9,13 @@ void LED_init(LED* me, uint8_t id) | ||||
|  * @brief Initialize the Driver | ||||
|  *  | ||||
|  */ | ||||
| void LED_initHW(LED* me) | ||||
| { | ||||
| void LED_initHW(LED* me) { | ||||
|     LED_off(me); | ||||
| } | ||||
|  | ||||
| void LED_on(LED* me) | ||||
| { | ||||
|     switch (me->id) | ||||
|     { | ||||
| void LED_on(void* me) { | ||||
|     LED* l = (LED*) me; | ||||
|     switch (l->id) { | ||||
|         case 1: | ||||
|             OUTPUT1_SetHigh(); | ||||
|         break; | ||||
| @@ -53,10 +50,9 @@ void LED_on(LED* me) | ||||
|        | ||||
| } | ||||
|  | ||||
| void LED_off(LED* me) | ||||
| { | ||||
|     switch (me->id) | ||||
|     { | ||||
| void LED_off(void* me) { | ||||
|     LED* l = (LED*) me; | ||||
|     switch (l->id) { | ||||
|         case 1: | ||||
|             OUTPUT1_SetLow(); | ||||
|         break; | ||||
|   | ||||
| @@ -19,8 +19,8 @@ typedef struct LED_ LED; | ||||
|  | ||||
| void LED_init(LED* me, uint8_t id); | ||||
| void LED_initHW(LED* me); | ||||
| void LED_on(LED* me); | ||||
| void LED_off(LED* me); | ||||
| void LED_on(void* me); | ||||
| void LED_off(void* me); | ||||
|  | ||||
| #endif	/* LED_H */ | ||||
|  | ||||
|   | ||||
							
								
								
									
										152
									
								
								03-software/ch/kb28/blinkerProject/middleware/clickHandler.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								03-software/ch/kb28/blinkerProject/middleware/clickHandler.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,152 @@ | ||||
| /** | ||||
|  * @file clickHandler.c | ||||
|  * @author R<>mi Heredero (remi@heredero.ch) | ||||
|  * @version 0.1 | ||||
|  * @date 2023-06-13 | ||||
|  */ | ||||
|  | ||||
| #include "clickHandler.h" | ||||
|  | ||||
| void CLICK_HANDLER_BUTTON_PRESS(CLICK_HANDLER* me){ | ||||
|     POST(me, &CLICK_HANDLER_processEvent, evCHpbPress, 0, 0); | ||||
| } | ||||
|  | ||||
| void CLICK_HANDLER_BUTTON_RELEASE(CLICK_HANDLER * me) { | ||||
|     POST(me, &CLICK_HANDLER_processEvent, evCHpbRelease, 0, 0); | ||||
| } | ||||
|  | ||||
| void CLICK_HANDLER_init(CLICK_HANDLER* me, BUTTON* b){ | ||||
|     me->button = b; | ||||
|     me->state = STCH_INIT; | ||||
|     me->longClick.fCallBack = NULL; | ||||
|     me->singleClick.fCallBack = NULL; | ||||
|     me->doubleClick.fCallBack = NULL; | ||||
|      | ||||
|     buttonCallBack pbPressCallBack; | ||||
|     pbPressCallBack.fCallBack = CLICK_HANDLER_BUTTON_PRESS; | ||||
|     pbPressCallBack.param = me; | ||||
|      | ||||
|     buttonCallBack pbReleaseCallBack; | ||||
|     pbReleaseCallBack.fCallBack = CLICK_HANDLER_BUTTON_RELEASE; | ||||
|     pbReleaseCallBack.param = me; | ||||
|      | ||||
|     BUTTON_setEventFunctions(b, pbPressCallBack, pbReleaseCallBack); | ||||
| } | ||||
|  | ||||
| void CLICK_HANDLER_startBehaviour(CLICK_HANDLER* me){ | ||||
|     POST(me, &CLICK_HANDLER_processEvent, evCHinit, 0, 0); | ||||
| } | ||||
|  | ||||
| clickHandlerCallBack CLICK_HANDLER_defineCallBack(fClickHandlerCallBack f, void* param) { | ||||
|     clickHandlerCallBack c; | ||||
|     c.fCallBack = f; | ||||
|     c.param = param; | ||||
|     return c; | ||||
| } | ||||
|  | ||||
| void CLICK_HANDLER_setLongClickCallback(CLICK_HANDLER* me, clickHandlerCallBack callBack) { | ||||
|     me->longClick = callBack; | ||||
| } | ||||
|  | ||||
| void CLICK_HANDLER_setSingleClickCallback(CLICK_HANDLER* me, clickHandlerCallBack callBack) { | ||||
|     me->singleClick = callBack; | ||||
| } | ||||
|  | ||||
| void CLICK_HANDLER_setDoubleClickCallback(CLICK_HANDLER* me, clickHandlerCallBack callBack) { | ||||
|     me->doubleClick = callBack; | ||||
| } | ||||
|  | ||||
| bool CLICK_HANDLER_processEvent(Event* ev) { | ||||
|     bool processed = false;  | ||||
|     CLICK_HANDLER* me = (CLICK_HANDLER*)Event_getTarget(ev); | ||||
|     CLICK_HANDLER_STATES oldState = me->state; | ||||
|     evIDT evid = Event_getId(ev); | ||||
|      | ||||
|     switch(me->state) { | ||||
|         case STCH_INIT: | ||||
|             if(evid == evCHinit) { | ||||
|                 me->state = STCH_WAIT; | ||||
|             } | ||||
|             break; | ||||
|              | ||||
|         case STCH_WAIT: | ||||
|              | ||||
|             if(evid == evCHpbPress) { | ||||
|                 me->state = STCH_LONG_CLICK; | ||||
|                 POST(me, &CLICK_HANDLER_processEvent, evCHtimer, CH_CLICK_TIMER, 0); | ||||
|             } | ||||
|              | ||||
|             break; | ||||
|              | ||||
|              | ||||
|         case STCH_LONG_CLICK:  | ||||
|              | ||||
|             if(evid == evCHpbRelease) { | ||||
|                 me->state = STCH_SINGLE_CLICK; | ||||
|             } | ||||
|              | ||||
|             if(evid == evCHtimer) { | ||||
|                 me->state = STCH_WAIT; | ||||
|                 if(me->longClick.fCallBack != NULL) { | ||||
|                     me->longClick.fCallBack(me->longClick.param); | ||||
|                 } | ||||
|             } | ||||
|              | ||||
|             break; | ||||
|              | ||||
|              | ||||
|         case STCH_SINGLE_CLICK: | ||||
|              | ||||
|             if(evid == evCHpbPress) { | ||||
|                 me->state = STCH_DOUBLE_CLICK; | ||||
|             } | ||||
|              | ||||
|             if(evid == evCHtimer) { | ||||
|                 me->state = STCH_WAIT; | ||||
|                 if(me->singleClick.fCallBack != NULL) { | ||||
|                     me->singleClick.fCallBack(me->singleClick.param); | ||||
|                 } | ||||
|             } | ||||
|              | ||||
|             break; | ||||
|              | ||||
|              | ||||
|         case STCH_DOUBLE_CLICK: | ||||
|              | ||||
|             if(evid == evCHpbRelease){ | ||||
|                 me->state = STCH_WAIT; | ||||
|                 if(me->doubleClick.fCallBack != NULL){ | ||||
|                     me->doubleClick.fCallBack(me->doubleClick.param); | ||||
|                 } | ||||
|             } | ||||
|              | ||||
|             if(evid == evCHtimer) { | ||||
|                 me->state = STCH_WAIT; | ||||
|                 if(me->doubleClick.fCallBack != NULL) { | ||||
|                     me->doubleClick.fCallBack(me->doubleClick.param); | ||||
|                 } | ||||
|             } | ||||
|              | ||||
|             break; | ||||
|              | ||||
|     } | ||||
|      | ||||
|     if(oldState != me->state) { | ||||
|         switch(oldState) { | ||||
|             case STCH_INIT:  | ||||
|                 break; | ||||
|                  | ||||
|             case STCH_WAIT: | ||||
|                 break; | ||||
|                  | ||||
|             case STCH_LONG_CLICK: | ||||
|                 break; | ||||
|                  | ||||
|             case STCH_SINGLE_CLICK: | ||||
|                 break; | ||||
|                  | ||||
|             case STCH_DOUBLE_CLICK: | ||||
|                 break; | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										55
									
								
								03-software/ch/kb28/blinkerProject/middleware/clickHandler.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								03-software/ch/kb28/blinkerProject/middleware/clickHandler.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| /** | ||||
|  * @file clickHandler.h | ||||
|  * @author R<>mi Heredero (remi@heredero.ch) | ||||
|  * @version 0.1 | ||||
|  * @date 2023-06-13 | ||||
|  */ | ||||
|  | ||||
| #ifndef CLICKHANDLER_H | ||||
| #define	CLICKHANDLER_H | ||||
|  | ||||
| #include "../xf/xf.h" | ||||
| #include "../board/button/button.h" | ||||
|  | ||||
| #define CH_CLICK_TIMER 250 | ||||
|  | ||||
| typedef enum { | ||||
|     STCH_INIT, | ||||
|     STCH_WAIT, | ||||
|     STCH_LONG_CLICK, | ||||
|     STCH_SINGLE_CLICK, | ||||
|     STCH_DOUBLE_CLICK | ||||
| } CLICK_HANDLER_STATES; | ||||
|  | ||||
| typedef enum { | ||||
|     evCHinit = 150, | ||||
|     evCHtimer, | ||||
|     evCHpbPress, | ||||
|     evCHpbRelease | ||||
| } CLICK_HANDLER_EVENTS; | ||||
|  | ||||
| typedef void (*fClickHandlerCallBack)(void*); | ||||
| typedef struct { | ||||
|     fClickHandlerCallBack fCallBack; | ||||
|     void* param; | ||||
| } clickHandlerCallBack; | ||||
|  | ||||
| typedef struct { | ||||
|     BUTTON* button; | ||||
|     CLICK_HANDLER_STATES state; | ||||
|     clickHandlerCallBack longClick; | ||||
|     clickHandlerCallBack singleClick; | ||||
|     clickHandlerCallBack doubleClick; | ||||
| }CLICK_HANDLER; | ||||
|  | ||||
| void CLICK_HANDLER_init(CLICK_HANDLER* me, BUTTON* b); | ||||
| clickHandlerCallBack CLICK_HANDLER_defineCallBack(fClickHandlerCallBack f, void* param); | ||||
| void CLICK_HANDLER_startBehaviour(CLICK_HANDLER* me); | ||||
| void CLICK_HANDLER_setLongClickCallback(CLICK_HANDLER* me, clickHandlerCallBack callBack); | ||||
| void CLICK_HANDLER_setSingleClickCallback(CLICK_HANDLER* me, clickHandlerCallBack callBack); | ||||
| void CLICK_HANDLER_setDoubleClickCallback(CLICK_HANDLER* me, clickHandlerCallBack callBack); | ||||
| bool CLICK_HANDLER_processEvent(Event* ev); | ||||
|  | ||||
|  | ||||
| #endif	/* CLICKHANDLER_H */ | ||||
|  | ||||
| @@ -28,6 +28,7 @@ | ||||
|         <itemPath>ch/kb28/blinkerProject/mcc_generated_files/device_config.h</itemPath> | ||||
|       </logicalFolder> | ||||
|       <logicalFolder name="middleware" displayName="middleware" projectFiles="true"> | ||||
|         <itemPath>ch/kb28/blinkerProject/middleware/clickHandler.h</itemPath> | ||||
|       </logicalFolder> | ||||
|       <logicalFolder name="xf" displayName="xf" projectFiles="true"> | ||||
|         <itemPath>ch/kb28/blinkerProject/xf/ireactive.h</itemPath> | ||||
| @@ -67,6 +68,7 @@ | ||||
|         <itemPath>ch/kb28/blinkerProject/mcc_generated_files/tmr0.c</itemPath> | ||||
|       </logicalFolder> | ||||
|       <logicalFolder name="middleware" displayName="middleware" projectFiles="true"> | ||||
|         <itemPath>ch/kb28/blinkerProject/middleware/clickHandler.c</itemPath> | ||||
|       </logicalFolder> | ||||
|       <logicalFolder name="xf" displayName="xf" projectFiles="true"> | ||||
|         <itemPath>ch/kb28/blinkerProject/xf/xf.c</itemPath> | ||||
| @@ -93,7 +95,7 @@ | ||||
|         <platformTool>PICkit3PlatformTool</platformTool> | ||||
|         <languageToolchain>XC8</languageToolchain> | ||||
|         <languageToolchainVersion>2.41</languageToolchainVersion> | ||||
|         <platform>3</platform> | ||||
|         <platform>2</platform> | ||||
|       </toolsSet> | ||||
|       <packs> | ||||
|         <pack name="PIC18F-K_DFP" vendor="Microchip" version="1.7.134"/> | ||||
| @@ -215,6 +217,7 @@ | ||||
|         <property key="debugoptions.debug-startup" value="Use system settings"/> | ||||
|         <property key="debugoptions.reset-behaviour" value="Use system settings"/> | ||||
|         <property key="debugoptions.useswbreakpoints" value="false"/> | ||||
|         <property key="firmware.download.all" value="false"/> | ||||
|         <property key="hwtoolclock.frcindebug" value="false"/> | ||||
|         <property key="memories.aux" value="false"/> | ||||
|         <property key="memories.bootflash" value="true"/> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user