added drivers

This commit is contained in:
2023-09-25 21:32:15 +02:00
parent 0d74fea761
commit 4829b04024
28 changed files with 6621 additions and 3 deletions

View File

@@ -0,0 +1,46 @@
#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);