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:
Vadim Kaushan
2020-10-02 09:44:05 +03:00
committed by GitHub
parent ed76f702b1
commit 8c36d65e63
13 changed files with 285 additions and 8 deletions

View 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 */

View File

@@ -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

View File

@@ -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 */

View File

@@ -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

View File

@@ -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 */

View File

@@ -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)) {

View File

@@ -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