Files
fun_gen_amp_test/app/drivers/hw_button/hw_button.h
2023-09-25 21:32:15 +02:00

47 lines
1.4 KiB
C

#pragma once
#define BTN_DEFAULT_DEBOUNCE_MS 20
#define BTN_DEFAULT_LONGPRESSED_MS 1000
#define BTN_DEFAULT_REPEAT_MS 200
// States for state machine
typedef enum
{
IDLE = 0,
DEBOUNCE,
PRESSED,
LONGPRESSED,
REPEAT,
MAX_STATE
} ButtonState_t;
// Struct for button
typedef struct ButtonKey ButtonKey_t;
typedef void (*buttonPressed_t)(ButtonKey_t *key);
typedef void (*buttonLongPressed_t)(ButtonKey_t *key);
typedef void (*buttonRepeat_t)(ButtonKey_t *key);
struct ButtonKey
{
uint8_t instance; // Button name/number
ButtonState_t state; // Button current state
GPIO_TypeDef *gpio_port; // GPIO Port for a button
uint16_t gpio_pin; // GPIO Pin for a button
GPIO_PinState pushed_state;
uint32_t last_tick; // Last remembered time before steps
uint32_t timer_debounce; // Fixed, settable time for debounce timer
uint32_t timer_long_pressed; // Fixed, adjustable time for long press timer
uint32_t timer_repeat_delay; // Fixed, adjustable interval time
buttonPressed_t buttonReleased; // A callback for button released
buttonPressed_t buttonPressed; // A callback for button pressed
buttonLongPressed_t buttonLongPressed; // A callback for long pressed
buttonRepeat_t buttonRepeat; // A callback for repeat
};
// Public functions
void buttonHandler(ButtonKey_t *key);