rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
hw_layer
debounce.h
Go to the documentation of this file.
1
/**
2
* @file debounce.h
3
* @brief Generic button debounce class
4
* https://en.wikipedia.org/wiki/Switch#Contact_bounce
5
* If we don't 'debounce' our button inputs, we may mistakenly
6
* read a single button press as multiple events.
7
*
8
* @date Aug 31, 2020
9
* @author David Holdeman, (c) 2020
10
*/
11
#pragma once
12
13
#include "
io_pins.h
"
14
#include <rusefi/timer.h>
15
16
class
ButtonDebounce
{
17
public
:
18
explicit
ButtonDebounce
(
const
char
* name);
19
void
init
(
efitimems_t
threshold,
brain_pin_e
&
pin
,
pin_input_mode_e
&mode,
bool
inverted =
false
);
20
void
stopConfiguration
();
21
void
startConfiguration
();
22
bool
readPinEvent
();
23
bool
readPinState
();
24
bool
readPinState2
(
bool
valueWithinThreshold);
25
static
void
stopConfigurationList
();
26
static
void
startConfigurationList
();
27
static
void
debug
();
28
bool
getPhysicalState
();
29
#if EFI_UNIT_TEST
30
static
void
resetForUnitTests
() {
31
s_firstDebounce
=
nullptr
;
32
}
33
#endif
34
private
:
35
const
char
*
const
m_name
;
36
efidur_t
m_threshold
;
37
Timer
timeLast
;
38
brain_pin_e
*
m_pin
;
39
brain_pin_e
active_pin
=
Gpio::Unassigned
;
40
pin_input_mode_e
*
m_mode
;
41
pin_input_mode_e
active_mode
= PI_DEFAULT;
42
bool
storedValue
=
false
;
43
bool
m_inverted
=
false
;
44
bool
isInstanceRegisteredInGlobalList
=
false
;
45
bool
needsPinInitialization
=
true
;
46
ButtonDebounce
*
nextDebounce
=
nullptr
;
47
static
ButtonDebounce
*
s_firstDebounce
;
48
};
49
50
void
initButtonDebounce
();
ButtonDebounce
Definition
debounce.h:16
ButtonDebounce::stopConfiguration
void stopConfiguration()
Definition
debounce.cpp:59
ButtonDebounce::isInstanceRegisteredInGlobalList
bool isInstanceRegisteredInGlobalList
Definition
debounce.h:44
ButtonDebounce::resetForUnitTests
static void resetForUnitTests()
Definition
debounce.h:30
ButtonDebounce::active_mode
pin_input_mode_e active_mode
Definition
debounce.h:41
ButtonDebounce::m_name
const char *const m_name
Definition
debounce.h:35
ButtonDebounce::storedValue
bool storedValue
Definition
debounce.h:42
ButtonDebounce::m_mode
pin_input_mode_e * m_mode
Definition
debounce.h:40
ButtonDebounce::startConfiguration
void startConfiguration()
ButtonDebounce::readPinEvent
bool readPinEvent()
ButtonDebounce::timeLast
Timer timeLast
Definition
debounce.h:37
ButtonDebounce::init
void init(efitimems_t threshold, brain_pin_e &pin, pin_input_mode_e &mode, bool inverted=false)
Definition
debounce.cpp:23
ButtonDebounce::getPhysicalState
bool getPhysicalState()
ButtonDebounce::active_pin
brain_pin_e active_pin
Definition
debounce.h:39
ButtonDebounce::readPinState2
bool readPinState2(bool valueWithinThreshold)
ButtonDebounce::debug
static void debug()
ButtonDebounce::startConfigurationList
static void startConfigurationList()
Definition
debounce.cpp:49
ButtonDebounce::s_firstDebounce
static ButtonDebounce * s_firstDebounce
Definition
debounce.h:47
ButtonDebounce::nextDebounce
ButtonDebounce * nextDebounce
Definition
debounce.h:46
ButtonDebounce::stopConfigurationList
static void stopConfigurationList()
Definition
debounce.cpp:39
ButtonDebounce::needsPinInitialization
bool needsPinInitialization
Definition
debounce.h:45
ButtonDebounce::m_threshold
efidur_t m_threshold
Definition
debounce.h:36
ButtonDebounce::m_pin
brain_pin_e * m_pin
Definition
debounce.h:38
ButtonDebounce::m_inverted
bool m_inverted
Definition
debounce.h:43
ButtonDebounce::readPinState
bool readPinState()
Gpio
Gpio
Definition
rusefi_hw_enums.h:14
Gpio::Unassigned
@ Unassigned
initButtonDebounce
void initButtonDebounce()
io_pins.h
this file is about general input/output utility methods, not much EFI-specifics
pin_input_mode_e
pin_input_mode_e
Definition
rusefi_enums.h:257
efitimems_t
uint32_t efitimems_t
Definition
rusefi_types.h:40
efidur_t
efitick_t efidur_t
Definition
rusefi_types.h:42
pin
brain_pin_e pin
Definition
stm32_adc.cpp:15
Generated on Sat Sep 27 2025 00:10:06 for rusEFI by
1.9.8