summaryrefslogtreecommitdiff
path: root/Libraries/Button
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/Button')
-rw-r--r--Libraries/Button/button_handler.c153
-rw-r--r--Libraries/Button/button_handler.h5
-rw-r--r--Libraries/Button/button_task.c87
3 files changed, 77 insertions, 168 deletions
diff --git a/Libraries/Button/button_handler.c b/Libraries/Button/button_handler.c
index 8df1e6b..7c3ea91 100644
--- a/Libraries/Button/button_handler.c
+++ b/Libraries/Button/button_handler.c
@@ -3,48 +3,39 @@
#include "nixie_driver_process.h"
-// FreeRTOS includes
+// FreeRTOS includes
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
-// Обработчик нажатий представляет собой конечный автомат для обработки
-// результата работы сенсорной библиотеки, обработки комбинаций и времени
-// нажатий и выдачи результата во внешнюю программу
+// Обработчик нажатий представляет собой конечный автомат для обработки
+// результата работы сенсорной библиотеки, обработки комбинаций и времени
+// нажатий и выдачи результата во внешнюю программу
-#define TIME_BUTTON_LONG_PRESS 1000 // 3 секунды для долгого жмака
+#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
-
} ;
-
-//extern const uint8_t tube_digits [MAX_DIGITS];
-//static uint8_t test_button_bufer[MAX_TUBES] = {TUBE_DIGIT_0};
-//static uint8_t cnt [6] = {0};
-
QueueHandle_t queue_but_comb;
-// - сделать в обработчике вывода индикации ламп на нижнем уровне,
-// чтобы ты отправлял цифру на индикатор, а он сам уже преобразовывал
+// - сделать в обработчике вывода индикации ламп на нижнем уровне,
+// чтобы ты отправлял цифру на индикатор, а он сам уже преобразовывал
// ----------------------------------------------------------------------------
@@ -58,155 +49,132 @@ void ButtonInit ( void )
// ----------------------------------------------------------------------------
-// Конечный автомат-обработчик нажатий кнопушек
+// Конечный автомат-обработчик нажатий кнопушек
// 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 вторая кнопка, но такого не должно быть(ошибка)
-
+ // - 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:
-
-// test_button_bufer[0] == TUBE_DIGIT_9 ? cnt[0] = 0 : cnt[0]++;
-// test_button_bufer[0] = tube_digits [cnt[0]];
-// NixieDriver_SendValue ( &test_button_bufer[0] );
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:
-// test_button_bufer[1] == TUBE_DIGIT_9 ? cnt[1] = 0 : cnt[1]++;
-// test_button_bufer[1] = tube_digits [cnt[1]];
-// NixieDriver_SendValue ( &test_button_bufer[0] );
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 )
{
- // - тогда сообщ.: "Зажатый прямой жмак вперед"
-// test_button_bufer[2] == TUBE_DIGIT_9 ? cnt[2] = 0 : cnt[2]++;
-// test_button_bufer[2] = tube_digits [cnt[2]];
-//
-// NixieDriver_SendValue ( &test_button_bufer[0] );
+ // - тогда сообщ.: "Зажатый прямой жмак вперед"
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 )
{
- // - тогда сообщ.: "Зажатый прямой жмак назад"
-// test_button_bufer[3] == TUBE_DIGIT_9 ? cnt[3] = 0 : cnt[3]++;
-// test_button_bufer[3] = tube_digits [cnt[3]];
-//
-// NixieDriver_SendValue ( &test_button_bufer[0] );
+ // - тогда сообщ.: "Зажатый прямой жмак назад"
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 )
+ if ( GetLTimer (LTIMER_BUTTON_LONG_PRESS) == TIME_BUTTON_LONG_PRESS )
{
- // - сообщ.: "Две долго"
-// test_button_bufer[4] == TUBE_DIGIT_9 ? cnt[4] = 0 : cnt[4]++;
-// test_button_bufer[4] = tube_digits [cnt[4]];
-//
-// NixieDriver_SendValue ( &test_button_bufer[0] );
+ // - сообщ.: "Две долго"
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;
}
}
@@ -215,14 +183,14 @@ void Button_ProcessFSM ( void )
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;
@@ -232,23 +200,10 @@ void Button_ProcessFSM ( void )
prev_button_comb = curr_button_comb;
state_fsm_button = BUTTON_STATE_ONE_BUT_IS_PRESSING_NOW;
}
-
+
break;
-
+
default:
- break;
+ break;
}
}
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Libraries/Button/button_handler.h b/Libraries/Button/button_handler.h
index 76b21d1..86118fa 100644
--- a/Libraries/Button/button_handler.h
+++ b/Libraries/Button/button_handler.h
@@ -3,19 +3,16 @@
#include <stdint.h>
-
typedef enum {
-
BUTTON_SINGLE_FORWARD,
BUTTON_SINGLE_BACKWARD,
BUTTON_HOLD_FORWARD,
BUTTON_HOLD_BACKWARD,
BUTTON_LONG
-
} ButtonCombName_t;
void ButtonInit ( void );
uint8_t Button_GetCurrButtons ( void );
void Button_ProcessFSM ( void );
-#endif //BUTTON_HANDLER_INCLUDED \ No newline at end of file
+#endif //BUTTON_HANDLER_INCLUDED
diff --git a/Libraries/Button/button_task.c b/Libraries/Button/button_task.c
index 4a06a3b..3446fb4 100644
--- a/Libraries/Button/button_task.c
+++ b/Libraries/Button/button_task.c
@@ -5,19 +5,11 @@
#include "button_handler.h"
#include "ltimers.h"
-// FreeRTOS includes
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
-
-// Номера сенсорных кнопушек
-//enum {
-// TKEY_NUM_1 = 0,
-// TKEY_NUM_2
-//};
-
#define TKEY_NUM_1 0
#define TKEY_NUM_2 1
@@ -35,9 +27,7 @@
uint8_t DS[TSLPRM_TOTAL_TKEYS + TSLPRM_TOTAL_LNRTS]; // To store the States (one per object)
int16_t DD[TSLPRM_TOTAL_TKEYS + (TSLPRM_TOTAL_LNRTS * 3)]; // To store the Deltas (one per channel)
-//static uint8_t touch_tube_bufer [MAX_TUBES] = {0};
-
-// Битовая переменная, в которой будут устанавливаться соответствующие
+// Битовая переменная, в которой будут устанавливаться соответствующие
// номерам нажатых кнопушек биты
static volatile uint8_t tkey_buttons_bits = 0;
@@ -63,9 +53,9 @@ void ProcessFSM_ButtonTask ( void )
{
/* Execute STMTouch Driver state machine */
if (TSL_user_Action () == TSL_STATUS_OK)
- {
+ {
ProcessSensors (); // Execute sensors related tasks
-
+
// Обработчик нажатий кнопушек (автомат)
//Button_ProcessFSM ();
}
@@ -82,25 +72,19 @@ void ProcessFSM_ButtonTask ( void )
static void ProcessSensors ( void )
{
uint32_t idx;
- //uint32_t idxch;
uint32_t idx_ds = 0;
uint32_t idx_dd = 0;
- //uint32_t touched = 0;
-#if USE_LCD > 0
+#if USE_LCD > 0
static uint32_t started = 0;
#endif
-#if TSLPRM_TOTAL_TKEYS > 0
+#if TSLPRM_TOTAL_TKEYS > 0
// Read all TKeys
for (idx = 0; idx < TSLPRM_TOTAL_TKEYS; idx++)
{
// STMStudio debug
- DS[idx_ds++] = MyTKeys[idx].p_Data->StateId;
+ DS[idx_ds++] = MyTKeys[idx].p_Data->StateId;
DD[idx_dd++] = MyTKeys[idx].p_ChD->Delta;
-// if (TEST_TKEY(idx))
-// {
-// touched = 1;
-// }
}
#endif
@@ -115,39 +99,15 @@ static void ProcessSensors ( void )
{
DD[idx_dd++] = MyLinRots[idx].p_ChD[idxch].Delta;
}
-// if (TEST_LINROT(idx))
-// {
-// touched = 1;
-// }
}
#endif
-
+
// Сделаем обработчик антидребезга (вроде он есть в библе сенсорных кнопок,
// но GROUP5 почему-то сильно дергается)
TkeyDebounce();
// Тут можно поменять кнопки местами
-
- // if (TEST_TKEY(TKEY_NUM_2))
- // {
- // tkey_buttons_bits |= 1 << TKEY_NUM_1;
- // }
- // else
- // {
- // tkey_buttons_bits &= ~(1 << TKEY_NUM_1);
- // }
-
- // if (TEST_TKEY(TKEY_NUM_1))
- // {
- // tkey_buttons_bits |= 1 << TKEY_NUM_2;
-
- // }
- // else
- // {
- // tkey_buttons_bits &= ~(1 << TKEY_NUM_2);
- // }
-
}
/**
@@ -182,7 +142,6 @@ void TSL_CallBack_TimerTick(void)
void MyTKeys_ErrorStateProcess(void)
{
/* Add here your own processing when a sensor is in Error state */
- //TSL_linrot_SetStateOff();
TSL_tkey_SetStateOff ();
while(1)
{
@@ -193,7 +152,6 @@ void MyLinRots_ErrorStateProcess(void)
{
/* Add here your own processing when a sensor is in Error state */
TSL_linrot_SetStateOff();
- //TSL_tkey_SetStateOff ();
while(1)
{
}
@@ -203,7 +161,7 @@ void MyLinRots_ErrorStateProcess(void)
// ----------------------------------------------------------------------------
// Ф-я антидребезга для сенсорных кнопок
// ----------------------------------------------------------------------------
-void TkeyDebounce ( void )
+void TkeyDebounce ( void )
{
static uint8_t tkey_db_state = 1;
static uint8_t tkey_code = 0;
@@ -211,16 +169,16 @@ void TkeyDebounce ( void )
if (TEST_TKEY(TKEY_NUM_2))
{
- tkey_code |= 1 << TKEY_NUM_1;
+ tkey_code |= 1 << TKEY_NUM_1;
}
else
{
tkey_code &= ~(1 << TKEY_NUM_1);
}
-
+
if (TEST_TKEY(TKEY_NUM_1))
{
- tkey_code |= 1 << TKEY_NUM_2;
+ tkey_code |= 1 << TKEY_NUM_2;
}
else
{
@@ -240,20 +198,20 @@ void TkeyDebounce ( void )
case 2:
if( GetLTimer( LTIMER_SENSOR_BUT_DEBOUNCE ) >= TIME_SENSOR_BUT_DEBOUNCE )
- {
+ {
tkey_db_state = 3;
- }
- break;
+ }
+ break;
case 3:
- if( _tkey_code == tkey_code )
- {
- tkey_db_state = 1;
+ if( _tkey_code == tkey_code )
+ {
+ tkey_db_state = 1;
tkey_buttons_bits = _tkey_code;
-
- }
- else { tkey_db_state = 1; }
- break;
+
+ }
+ else { tkey_db_state = 1; }
+ break;
default:
break;
@@ -268,5 +226,4 @@ void TkeyDebounce ( void )
void Button_Task ( void *pvParameters )
{
while(1)ProcessFSM_ButtonTask ();
- //vTaskDelete(NULL);
-} \ No newline at end of file
+}