This commit is contained in:
Jonas Zeunert
2018-05-31 21:14:37 +02:00
7 changed files with 47 additions and 23 deletions

View File

@@ -19,6 +19,8 @@ Detector::Detector(InputGPIOInterface* input_gpio_interface, std::map<char, Even
input_gpio_interface(input_gpio_interface), events(events), is_running(true), event_notifier(event_notifier) input_gpio_interface(input_gpio_interface), events(events), is_running(true), event_notifier(event_notifier)
{ {
detect_thread = std::thread(&Detector::detect, this); detect_thread = std::thread(&Detector::detect, this);
CLOG(WARNING, INPUT_LOGGER) << "Created Detector";
} }
Detector::~Detector() Detector::~Detector()

View File

@@ -11,13 +11,18 @@
#include <set> #include <set>
#include <string> #include <string>
#include "../utilities/config.h"
namespace Input namespace Input
{ {
class Event class Event
{ {
public: public:
Event(char address, char priority, std::string name) : address(address), priority(priority), name(name){} Event(char address, char priority, std::string name) : address(address), priority(priority), name(name)
{
CLOG_IF(VLOG_IS_ON(HIGH_VERBOSITY), INFO, INPUT_LOGGER) << "Created event: " << name << ", address: " << address;
}
bool operator==(const Event& other) bool operator==(const Event& other)
{ {

View File

@@ -15,6 +15,7 @@
#include "InputDriver.hpp" #include "InputDriver.hpp"
#include "Event.hpp" #include "Event.hpp"
#include "Detector.h" #include "Detector.h"
#include "../utilities/config.h"
namespace Input namespace Input
{ {
@@ -26,6 +27,8 @@ public:
input_driver(input_driver) input_driver(input_driver)
{ {
this->input_driver->register_event_handler(this); this->input_driver->register_event_handler(this);
CLOG(INFO, INPUT_LOGGER) << "Created EventHandler";
} }
virtual ~EventHandler() virtual ~EventHandler()
@@ -35,7 +38,10 @@ public:
} }
// This function is intended to be non pure, if it is called when the derived class doesn't exist anymore // This function is intended to be non pure, if it is called when the derived class doesn't exist anymore
virtual void handle(Event& event); virtual void handle(Event& event)
{
CLOG(WARNING, INPUT_LOGGER) << "Called EventHandler parent class";
}
private: private:
std::shared_ptr<InputDriver> input_driver; std::shared_ptr<InputDriver> input_driver;

View File

@@ -18,6 +18,8 @@ EventNotifier::EventNotifier()
: is_running(true) : is_running(true)
{ {
notify_thread = std::thread(&EventNotifier::notify, this); notify_thread = std::thread(&EventNotifier::notify, this);
CLOG(INFO, INPUT_LOGGER) << "Created EventNotifier and started thread";
} }
EventNotifier::~EventNotifier() EventNotifier::~EventNotifier()

View File

@@ -5,6 +5,9 @@
* Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert, Rafael Vinci, Dr. Franca Rupprecht * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert, Rafael Vinci, Dr. Franca Rupprecht
*/ */
#include "../utilities/config.h"
#ifndef SRC_INPUT_INPUTDRIVER_HPP_ #ifndef SRC_INPUT_INPUTDRIVER_HPP_
#define SRC_INPUT_INPUTDRIVER_HPP_ #define SRC_INPUT_INPUTDRIVER_HPP_
@@ -25,7 +28,9 @@ class InputDriver
public: public:
InputDriver(EventNotifier* event_notifier) : InputDriver(EventNotifier* event_notifier) :
event_notifier(event_notifier) event_notifier(event_notifier)
{} {
CLOG(INFO, INPUT_LOGGER) << "Created InputDriver";
}
~InputDriver() ~InputDriver()
{ {

View File

@@ -10,8 +10,9 @@
#include <mutex> #include <mutex>
#include <condition_variable> #include <condition_variable>
#include <deque> #include <boost/heap/priority_queue.hpp>
#include <queue>
using namespace boost;
template <typename T> template <typename T>
class BlockingQueue class BlockingQueue
@@ -19,21 +20,22 @@ class BlockingQueue
private: private:
std::mutex d_mutex; std::mutex d_mutex;
std::condition_variable d_condition; std::condition_variable d_condition;
std::priority_queue<T> d_queue; heap::priority_queue<T, heap::stable<T>> p_queue;
public: public:
void push(T const& value) { void push(T const& value)
{ {
std::unique_lock<std::mutex> lock(this->d_mutex); std::unique_lock<std::mutex> lock(this->d_mutex);
d_queue.push_front(value); p_queue.push_front(value);
}
this->d_condition.notify_one(); this->d_condition.notify_one();
} }
T pop() { T pop()
{
std::unique_lock<std::mutex> lock(this->d_mutex); std::unique_lock<std::mutex> lock(this->d_mutex);
this->d_condition.wait(lock, [=]{ return !this->d_queue.empty(); }); this->d_condition.wait(lock, [=]{ return !this->p_queue.empty(); });
T rc(std::move(this->d_queue.back())); T rc(std::move(this->p_queue.back()));
this->d_queue.pop_back(); this->p_queue.pop_back();
return rc; return rc;
} }
}; };

View File

@@ -10,4 +10,6 @@
#define INPUT_LOGGER "driver_logger" #define INPUT_LOGGER "driver_logger"
#define DRIVER_LOG_FILE "/var/log/flippr_driver.conf" #define DRIVER_LOG_FILE "/var/log/flippr_driver.conf"
#define HIGH_VERBOSITY 10
#define INPUT_MATRIX_SIZE 8 #define INPUT_MATRIX_SIZE 8