Automatic Curtain  MVP
Software repository for an automatic curtain using stepper motor, TMC2209 and ESP32
manual_interaction.h
Go to the documentation of this file.
1 
12 #ifndef _MAN_INT_INCLUDE_GUARD
13 #define _MAN_INT_INCLUDE_GUARD
14 
15 #include <Arduino.h>
16 
17 #include <chrono>
18 #include <deque>
19 #include <memory>
20 #include <mutex>
21 #include <new>
22 #include <thread>
23 #include <tuple>
24 #include <utility>
25 
26 #include "../config/config.h"
27 #include "../logging/logging.h"
28 
30  public:
35  ManualInteraction(int freq_to_run_deque_analyser, std::shared_ptr<Logging>& logging);
36 
42 
48  static void s_IntrAddToButtonDequeUp();
49 
55  static void s_IntrAddToButtonDequeDown();
56 
63 
69 
75  std::tuple<CONFIG_SET::MANUAL_PUSH, CONFIG_SET::time_var> GetManualActionAndTime();
76 
77  private:
85 
95  void SetCurrentButtonState(std::deque<std::pair<bool, CONFIG_SET::time_var>>& button_press_deque_,
96  CONFIG_SET::BUTTON_PRESS& button_state, CONFIG_SET::time_var& time);
97 
107  void SetManualActionAndTime(CONFIG_SET::BUTTON_PRESS& button_1_state, CONFIG_SET::BUTTON_PRESS& button_2_state,
108  CONFIG_SET::time_var& time_button_1, CONFIG_SET::time_var& time_button_2);
109 
113  std::unique_ptr<std::thread> deque_analyser_{nullptr};
114  std::shared_ptr<Logging> logger_{nullptr};
117 
118  static std::deque<std::pair<bool, CONFIG_SET::time_var>> s_button_state_deque_up_;
119  static std::deque<std::pair<bool, CONFIG_SET::time_var>> s_button_state_deque_down_;
120  static bool s_class_setup_flag_;
121  static std::mutex s_deque_mutex_;
122 };
123 
124 #endif
std::chrono::time_point< std::chrono::system_clock > time_var
Definition: config.h:176
CONFIG_SET::MANUAL_PUSH manual_action_
Definition: manual_interaction.h:110
static void s_IntrAddToButtonDequeDown()
Hardware Interrrupt for down [black colored] button check for valid interrupt by software debouncing...
Definition: manual_interaction.cpp:84
void StartButtonDequeAnalyserFn()
start button deque analyser function thread start button deque analyser function thread ...
Definition: manual_interaction.cpp:111
CONFIG_SET::time_var manual_action_time_
Definition: manual_interaction.h:111
void StopButtonDequeAnalyserFn()
Stop button deque analyser function set_button_deque_analyser varible to ture so it stops the threade...
Definition: manual_interaction.cpp:106
Definition: manual_interaction.h:29
static std::deque< std::pair< bool, CONFIG_SET::time_var > > s_button_state_deque_up_
Definition: manual_interaction.h:118
static bool s_class_setup_flag_
Definition: manual_interaction.h:120
void ButtonstateDequeAnalyser()
thread function to check the deque status and identify the manual interaction mode Function will chec...
Definition: manual_interaction.cpp:138
bool stop_button_deque_analyser_
Definition: manual_interaction.h:112
const int freq_to_run_deque_analyser_
Definition: manual_interaction.h:115
~ManualInteraction()
ManualInteraction class destructor Destroy the ManualInteraction object.
Definition: manual_interaction.cpp:55
void SetManualActionAndTime(CONFIG_SET::BUTTON_PRESS &button_1_state, CONFIG_SET::BUTTON_PRESS &button_2_state, CONFIG_SET::time_var &time_button_1, CONFIG_SET::time_var &time_button_2)
Set the Manual Action And Time object sets manual_action_ and manual_action_time_.
Definition: manual_interaction.cpp:214
static std::deque< std::pair< bool, CONFIG_SET::time_var > > s_button_state_deque_down_
Definition: manual_interaction.h:119
std::tuple< CONFIG_SET::MANUAL_PUSH, CONFIG_SET::time_var > GetManualActionAndTime()
Get the Manual Action And Time object.
Definition: manual_interaction.cpp:121
static std::mutex s_deque_mutex_
Definition: manual_interaction.h:121
void SetCurrentButtonState(std::deque< std::pair< bool, CONFIG_SET::time_var >> &button_press_deque_, CONFIG_SET::BUTTON_PRESS &button_state, CONFIG_SET::time_var &time)
Set the CurrentButtonState object Function to sets the current buttonstate [0 ->NO_PUSH, 1->LONGPRESS, 2->DOUBLETAP].
Definition: manual_interaction.cpp:178
int delay_to_run_deque_analyser_
Definition: manual_interaction.h:116
ManualInteraction(int freq_to_run_deque_analyser, std::shared_ptr< Logging > &logging)
ManualInteraction class constructor Setup pinmode and interrupt.
Definition: manual_interaction.cpp:33
static void s_IntrAddToButtonDequeUp()
Hardware Interrrupt for up [red colored] button check for valid interrupt by software debouncing...
Definition: manual_interaction.cpp:63
std::unique_ptr< std::thread > deque_analyser_
Definition: manual_interaction.h:113
MANUAL_PUSH
Definition: config.h:131
BUTTON_PRESS
Definition: config.h:141
std::shared_ptr< Logging > logger_
Definition: manual_interaction.h:114