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}