power_button.c
Functions
powerButtonInit
< Counter for key releases.
24void powerButtonInit(void)
25{
26 currentState = INIT;
27 pressCounter = 0;
28 releaseCounter = 0;
29}
powerButton
@brief Debounces key presses and releases.
This function utilizes a state machine to debounce key presses and releases. It must be called periodically to process the debouncing. The behavior is controlled by two configuration parameters: POWER_BUTTON_PRESS_DEBOUNCE and POWER_BUTTON_RELEASE_DEBOUNCE which determine how many consecutive calls with the key pressed/released are required to acknowledge the state transition.
40void powerButton(void)
41{
42 boolean powerKeyPressed = FALSE;
43 boolean keyStatus = RteIsKeyPressed(POWER_BUTTON_KEY);
44
45 // Update the counters
46 if (keyStatus)
47 {
48 pressCounter++;
49 releaseCounter = 0; // reset release counter if key is pressed
50 }
51 else
52 {
53 releaseCounter++;
54 pressCounter = 0; // reset press counter if key is released
55 }
56
57 switch (currentState)
58 {
59 case INIT:
60 if (pressCounter >= POWER_BUTTON_PRESS_DEBOUNCE)
61 {
62 powerKeyPressed = TRUE;
63 currentState = PRESSED;
64 releaseCounter = 0; // reset the counter after transition
65 pressCounter = 0; // reset the counter after transition
66 }
67 else if (releaseCounter >= POWER_BUTTON_RELEASE_DEBOUNCE)
68 {
69 currentState = RELEASED;
70 releaseCounter = 0; // reset the counter after transition
71 pressCounter = 0; // reset the counter after transition
72 }
73 break;
74
75 case PRESSED:
76 if (releaseCounter >= POWER_BUTTON_RELEASE_DEBOUNCE)
77 {
78 currentState = RELEASED;
79 releaseCounter = 0; // reset the counter after transition
80 }
81 pressCounter = 0; // reset the counter after transition
82 break;
83
84 case RELEASED:
85 if (pressCounter >= POWER_BUTTON_PRESS_DEBOUNCE)
86 {
87 powerKeyPressed = TRUE;
88 currentState = PRESSED;
89 pressCounter = 0; // reset the counter after transition
90 }
91 releaseCounter = 0; // reset the counter after transition
92 break;
93 }
94
95 RteSetPowerKeyPressedEvent(powerKeyPressed);
96}