Input handling and debouncing (#148)
* Add input driver and definitions for target_f2 * Add input_dump example * Invert charge input * Fix back and left button configuration * remove input debug * input testing case * move header * lint code Co-authored-by: aanper <mail@s3f.ru>
This commit is contained in:
29
target_f2/Inc/input_priv.h
Normal file
29
target_f2/Inc/input_priv.h
Normal file
@@ -0,0 +1,29 @@
|
||||
#ifndef __INPUT_PRIV_H
|
||||
#define __INPUT_PRIV_H
|
||||
|
||||
#include "main.h"
|
||||
#include "flipper_hal.h"
|
||||
|
||||
#define DEBOUNCE_TICKS 10
|
||||
|
||||
const GpioPin input_gpio[] = {
|
||||
{BUTTON_UP_GPIO_Port, BUTTON_UP_Pin},
|
||||
{BUTTON_DOWN_GPIO_Port, BUTTON_DOWN_Pin},
|
||||
{BUTTON_RIGHT_GPIO_Port, BUTTON_RIGHT_Pin},
|
||||
{BUTTON_LEFT_GPIO_Port, BUTTON_LEFT_Pin},
|
||||
{BUTTON_OK_GPIO_Port, BUTTON_OK_Pin},
|
||||
{BUTTON_BACK_GPIO_Port, BUTTON_BACK_Pin},
|
||||
{CHRG_GPIO_Port, CHRG_Pin}
|
||||
};
|
||||
|
||||
const bool input_invert[] = {
|
||||
false, // {BUTTON_UP_GPIO_Port, BUTTON_UP_Pin},
|
||||
false, // {BUTTON_DOWN_GPIO_Port, BUTTON_DOWN_Pin},
|
||||
false, // {BUTTON_RIGHT_GPIO_Port, BUTTON_RIGHT_Pin},
|
||||
false, // {BUTTON_LEFT_GPIO_Port, BUTTON_LEFT_Pin},
|
||||
false, // {BUTTON_OK_GPIO_Port, BUTTON_OK_Pin},
|
||||
false, // {BUTTON_BACK_GPIO_Port, BUTTON_BACK_Pin},
|
||||
true, // {CHRG_GPIO_Port, CHRG_Pin}
|
||||
};
|
||||
|
||||
#endif /* __INPUT_PRIV_H */
|
@@ -66,6 +66,7 @@ void register_tim8_callback_ch2(void (*callback)(uint16_t ccr, TimerEvent tim_ev
|
||||
/* Private defines -----------------------------------------------------------*/
|
||||
#define BUTTON_BACK_Pin GPIO_PIN_13
|
||||
#define BUTTON_BACK_GPIO_Port GPIOC
|
||||
#define BUTTON_BACK_EXTI_IRQn EXTI15_10_IRQn
|
||||
#define CHRG_Pin GPIO_PIN_2
|
||||
#define CHRG_GPIO_Port GPIOC
|
||||
#define CHRG_EXTI_IRQn EXTI2_IRQn
|
||||
|
@@ -59,6 +59,7 @@ void EXTI1_IRQHandler(void);
|
||||
void EXTI2_IRQHandler(void);
|
||||
void EXTI4_IRQHandler(void);
|
||||
void EXTI9_5_IRQHandler(void);
|
||||
void EXTI15_10_IRQHandler(void);
|
||||
void TIM8_CC_IRQHandler(void);
|
||||
void OTG_FS_IRQHandler(void);
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
@@ -103,7 +103,8 @@ C_DEFS += \
|
||||
-DUSE_HAL_DRIVER \
|
||||
-DSTM32L476xx \
|
||||
-DBUTON_INVERT=false \
|
||||
-DDEBUG_UART=huart1
|
||||
-DDEBUG_UART=huart1 \
|
||||
-DUSE_INPUT
|
||||
|
||||
ASM_SOURCES += \
|
||||
startup_stm32l476xx.s
|
||||
@@ -139,7 +140,8 @@ C_SOURCES += ../lib/u8g2/u8x8_d_st7565.c \
|
||||
|
||||
# System applications
|
||||
|
||||
C_SOURCES += ../applications/display-u8g2/display-u8g2.c
|
||||
C_SOURCES += ../applications/display-u8g2/display-u8g2.c \
|
||||
../applications/input/input.c \
|
||||
|
||||
# Examples
|
||||
|
||||
@@ -170,6 +172,11 @@ C_SOURCES += ../applications/examples/ipc.c
|
||||
C_DEFS += -DEXAMPLE_IPC
|
||||
endif
|
||||
|
||||
ifeq ($(EXAMPLE_INPUT_DUMP), 1)
|
||||
C_SOURCES += ../applications/examples/input_dump.c
|
||||
C_DEFS += -DEXAMPLE_INPUT_DUMP
|
||||
endif
|
||||
|
||||
# User application
|
||||
|
||||
C_SOURCES += ../applications/coreglitch_demo_0/coreglitch_demo_0.c
|
||||
@@ -303,6 +310,10 @@ example_ipc:
|
||||
EXAMPLE_IPC=1 make
|
||||
rm $(BUILD_DIR)/app.o
|
||||
|
||||
example_input_dump:
|
||||
EXAMPLE_INPUT_DUMP=1 make
|
||||
rm $(BUILD_DIR)/app.o
|
||||
|
||||
test:
|
||||
TEST=1 make
|
||||
rm $(BUILD_DIR)/app.o
|
||||
|
@@ -598,7 +598,7 @@ static void MX_GPIO_Init(void) {
|
||||
|
||||
/*Configure GPIO pin : BUTTON_BACK_Pin */
|
||||
GPIO_InitStruct.Pin = BUTTON_BACK_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
||||
HAL_GPIO_Init(BUTTON_BACK_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
@@ -681,7 +681,7 @@ static void MX_GPIO_Init(void) {
|
||||
|
||||
/*Configure GPIO pin : BUTTON_LEFT_Pin */
|
||||
GPIO_InitStruct.Pin = BUTTON_LEFT_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
||||
HAL_GPIO_Init(BUTTON_LEFT_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
@@ -706,6 +706,9 @@ static void MX_GPIO_Init(void) {
|
||||
|
||||
HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0);
|
||||
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
|
||||
|
||||
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
|
||||
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 4 */
|
||||
|
@@ -237,6 +237,19 @@ void EXTI9_5_IRQHandler(void) {
|
||||
/* USER CODE END EXTI9_5_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles EXTI line[15:10] interrupts.
|
||||
*/
|
||||
void EXTI15_10_IRQHandler(void) {
|
||||
/* USER CODE BEGIN EXTI15_10_IRQn 0 */
|
||||
|
||||
/* USER CODE END EXTI15_10_IRQn 0 */
|
||||
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
|
||||
/* USER CODE BEGIN EXTI15_10_IRQn 1 */
|
||||
|
||||
/* USER CODE END EXTI15_10_IRQn 1 */
|
||||
}
|
||||
|
||||
void (*tim8_callback_ch2)(uint16_t ccr, TimerEvent tim_event);
|
||||
|
||||
void register_tim8_callback_ch2(void (*callback)(uint16_t ccr, TimerEvent tim_event)) {
|
||||
|
@@ -100,6 +100,7 @@ MxDb.Version=DB.5.0.40
|
||||
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.EXTI0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.EXTI15_10_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true
|
||||
NVIC.EXTI1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.EXTI2_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.EXTI4_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true
|
||||
@@ -218,8 +219,9 @@ PB2.Signal=GPIO_Analog
|
||||
PB3\ (JTDO-TRACESWO).Locked=true
|
||||
PB3\ (JTDO-TRACESWO).Mode=TX_Only_Simplex_Unidirect_Master
|
||||
PB3\ (JTDO-TRACESWO).Signal=SPI1_SCK
|
||||
PB4\ (NJTRST).GPIOParameters=GPIO_PuPd,GPIO_Label
|
||||
PB4\ (NJTRST).GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
|
||||
PB4\ (NJTRST).GPIO_Label=BUTTON_LEFT
|
||||
PB4\ (NJTRST).GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
|
||||
PB4\ (NJTRST).GPIO_PuPd=GPIO_PULLDOWN
|
||||
PB4\ (NJTRST).Locked=true
|
||||
PB4\ (NJTRST).Signal=GPXTI4
|
||||
@@ -260,8 +262,9 @@ PC11.Signal=SPI3_MISO
|
||||
PC12.Locked=true
|
||||
PC12.Mode=Full_Duplex_Master
|
||||
PC12.Signal=SPI3_MOSI
|
||||
PC13.GPIOParameters=GPIO_PuPd,GPIO_Label
|
||||
PC13.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
|
||||
PC13.GPIO_Label=BUTTON_BACK
|
||||
PC13.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
|
||||
PC13.GPIO_PuPd=GPIO_PULLDOWN
|
||||
PC13.Locked=true
|
||||
PC13.Signal=GPXTI13
|
||||
|
Reference in New Issue
Block a user