summaryrefslogtreecommitdiff
path: root/Libraries/Button/button_handler.c
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2023-03-05 20:20:45 +0300
committerOxore <oxore@protonmail.com>2023-03-05 20:20:45 +0300
commitea807de65b0485ac58b6eae576209c64d4d5c4e9 (patch)
treeb4264d20e1d700cfd9e0ece9d847a825dd1dfc03 /Libraries/Button/button_handler.c
parentdd01e7ed22cea652061f0d12cecf929e04b285e9 (diff)
Split app code and third party libraries
Diffstat (limited to 'Libraries/Button/button_handler.c')
-rw-r--r--Libraries/Button/button_handler.c209
1 files changed, 0 insertions, 209 deletions
diff --git a/Libraries/Button/button_handler.c b/Libraries/Button/button_handler.c
deleted file mode 100644
index 7c3ea91..0000000
--- a/Libraries/Button/button_handler.c
+++ /dev/null
@@ -1,209 +0,0 @@
-#include "button_handler.h"
-#include "ltimers.h"
-
-#include "nixie_driver_process.h"
-
-// FreeRTOS includes
-#include "FreeRTOS.h"
-#include "task.h"
-#include "queue.h"
-
-// Обработчик нажатий представляет собой конечный автомат для обработки
-// результата работы сенсорной библиотеки, обработки комбинаций и времени
-// нажатий и выдачи результата во внешнюю программу
-
-
-#define TIME_BUTTON_LONG_PRESS 1000 // 3 секунды для долгого жмака
-
-
-// Состояние конечного автомата обработчика нажатий
-typedef enum {
- BUTTON_STATE_START = 0,
- BUTTON_STATE_ONE_BUT_IS_PRESSING_NOW,
- BUTTON_STATE_TWO_BUTS_AND_TIMER,
- BUTTON_STATE_TWO_BUTS_AFTER_TIMER
-} Button_FSMStates_t;
-
-// Комбнации нажатостей кнопушек (нажата одна, зажаты две и тд.)
-enum {
- BUT_COMB_NONE = 0,
- BUT_COMB_BUT1 = 1,
- BUT_COMB_BUT2 = 2,
- BUT_COMB_BOTH = 3
-} ;
-
-QueueHandle_t queue_but_comb;
-
-// - сделать в обработчике вывода индикации ламп на нижнем уровне,
-// чтобы ты отправлял цифру на индикатор, а он сам уже преобразовывал
-
-
-// ----------------------------------------------------------------------------
-//
-// ----------------------------------------------------------------------------
-void ButtonInit ( void )
-{
- queue_but_comb = xQueueCreate ( 1, sizeof (ButtonCombName_t) );
- configASSERT( queue_but_comb );
-}
-
-
-// ----------------------------------------------------------------------------
-// Конечный автомат-обработчик нажатий кнопушек
-// Note:
-// Антидребезг в данном автомате не нужен, т.к. обработчик сенсорной библиотеки
-// уже все сделал (а вот не сделал, возможно от микродребезга есть защита,
-// а вот от крупного дребезга нет защиты)
-// ----------------------------------------------------------------------------
-void Button_ProcessFSM ( void )
-{
- static Button_FSMStates_t state_fsm_button = BUTTON_STATE_START;
- static uint8_t still_pushed = 0;
-
- static uint8_t prev_button_comb;
- static uint8_t curr_button_comb;
- static ButtonCombName_t msg_but_comb_name;
-
- switch ( state_fsm_button )
- {
- // -------------------------------------------------------------------------
- case BUTTON_STATE_START:
-
- curr_button_comb = Button_GetCurrButtons();
-
- if ( curr_button_comb != BUT_COMB_NONE )
- {
- prev_button_comb = curr_button_comb;
- state_fsm_button = BUTTON_STATE_ONE_BUT_IS_PRESSING_NOW;
- still_pushed = 0;
- }
-
- break;
- // -------------------------------------------------------------------------
- case BUTTON_STATE_ONE_BUT_IS_PRESSING_NOW:
- // - 1 отпустили
- // - 2 нажали вторую
- // - 3 вторая кнопка, но такого не должно быть(ошибка)
-
- curr_button_comb = Button_GetCurrButtons();
-
- // Сначала проверим, вдруг кнопушку отпустили
- if ( (curr_button_comb == BUT_COMB_NONE) && (still_pushed == 0) )
- {
- // - сообщ.: "Одиночный обратный жмак"
-
- switch ( prev_button_comb )
- {
- case BUT_COMB_BUT1:
- xQueueReceive ( queue_but_comb, &msg_but_comb_name, 0 );
- msg_but_comb_name = BUTTON_SINGLE_FORWARD;
- xQueueSend ( queue_but_comb, &msg_but_comb_name, 0 );
- break;
- case BUT_COMB_BUT2:
- xQueueReceive ( queue_but_comb, &msg_but_comb_name, 0 );
- msg_but_comb_name = BUTTON_SINGLE_BACKWARD;
- xQueueSend ( queue_but_comb, &msg_but_comb_name, 0 );
- break;
- default:
- break;
- }
-
- state_fsm_button = BUTTON_STATE_START;
-
- return;
- }
-
- if ( (curr_button_comb == BUT_COMB_NONE) && (still_pushed == 1) )
- {
- state_fsm_button = BUTTON_STATE_START;
- return;
- }
-
- switch ( prev_button_comb )
- {
- case BUT_COMB_BUT1:
-
- if ( curr_button_comb == BUT_COMB_BOTH )
- {
- // - тогда сообщ.: "Зажатый прямой жмак вперед"
- xQueueReceive ( queue_but_comb, &msg_but_comb_name, 0 );
- //msg_but_comb_name = BUTTON_HOLD_FORWARD;
- msg_but_comb_name = BUTTON_HOLD_BACKWARD;
- xQueueSend ( queue_but_comb, &msg_but_comb_name, 0 );
- StartLTimer ( LTIMER_BUTTON_LONG_PRESS );
- state_fsm_button = BUTTON_STATE_TWO_BUTS_AND_TIMER;
- still_pushed = 1;
- }
-
- break;
-
- case BUT_COMB_BUT2:
-
- if ( curr_button_comb == BUT_COMB_BOTH )
- {
- // - тогда сообщ.: "Зажатый прямой жмак назад"
- xQueueReceive ( queue_but_comb, &msg_but_comb_name, 0 );
- //msg_but_comb_name = BUTTON_HOLD_BACKWARD;
- msg_but_comb_name = BUTTON_HOLD_FORWARD;
- xQueueSend ( queue_but_comb, &msg_but_comb_name, 0 );
-
- StartLTimer ( LTIMER_BUTTON_LONG_PRESS );
- state_fsm_button = BUTTON_STATE_TWO_BUTS_AND_TIMER;
- still_pushed = 1;
- }
-
- break;
-
- default:
- state_fsm_button = BUTTON_STATE_START;
- break;
- }
-
- break;
-
- // -------------------------------------------------------------------------
- case BUTTON_STATE_TWO_BUTS_AND_TIMER:
-
- curr_button_comb = Button_GetCurrButtons();
-
- if ( curr_button_comb == BUT_COMB_BOTH )
- {
- if ( GetLTimer (LTIMER_BUTTON_LONG_PRESS) == TIME_BUTTON_LONG_PRESS )
- {
- // - сообщ.: "Две долго"
- xQueueReceive ( queue_but_comb, &msg_but_comb_name, 0 );
- msg_but_comb_name = BUTTON_LONG;
- xQueueSend ( queue_but_comb, &msg_but_comb_name, 0 );
-
- state_fsm_button = BUTTON_STATE_TWO_BUTS_AFTER_TIMER;
- }
- }
- else
- {
- prev_button_comb = curr_button_comb;
- state_fsm_button = BUTTON_STATE_ONE_BUT_IS_PRESSING_NOW;
- }
-
- break;
-
- // -------------------------------------------------------------------------
- case BUTTON_STATE_TWO_BUTS_AFTER_TIMER:
-
- curr_button_comb = Button_GetCurrButtons();
-
- if ( curr_button_comb == BUT_COMB_NONE )
- {
- state_fsm_button = BUTTON_STATE_START;
- }
- else if ( curr_button_comb != BUT_COMB_BOTH )
- {
- prev_button_comb = curr_button_comb;
- state_fsm_button = BUTTON_STATE_ONE_BUT_IS_PRESSING_NOW;
- }
-
- break;
-
- default:
- break;
- }
-}