From 96e76f71809550451d4b332ebfb272c7a77eb5e8 Mon Sep 17 00:00:00 2001 From: Jonas Zeunert Date: Fri, 21 Sep 2018 01:11:23 +0200 Subject: [PATCH] compiling with distevents --- FlippR-Driver/src/input/DistributingEvent.cpp | 13 ++++--- .../src/input/InputDriverFactory.cpp | 14 ++++---- FlippR-Driver/src/input/InputDriverFactory.h | 6 ++-- FlippR-Driver/tests/input/TestDetector.cpp | 34 ++++++++++--------- 4 files changed, 37 insertions(+), 30 deletions(-) diff --git a/FlippR-Driver/src/input/DistributingEvent.cpp b/FlippR-Driver/src/input/DistributingEvent.cpp index 84c9139..1369a4c 100644 --- a/FlippR-Driver/src/input/DistributingEvent.cpp +++ b/FlippR-Driver/src/input/DistributingEvent.cpp @@ -4,16 +4,19 @@ #include "DistributingEvent.h" +FlippR_Driver::Input::DistributingEvent::DistributingEvent(char address, int priority, std::string name, + std::chrono::milliseconds deactivation_time, std::shared_ptr event_notifier) +: Event(address, priority, name), deactivation_time(deactivation_time), event_notifier(event_notifier) +{} + void FlippR_Driver::Input::DistributingEvent::distribute() { - std::chrono::milliseconds elapsed_time = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - last_activation); + std::chrono::time_point now = std::chrono::high_resolution_clock::now(); + std::chrono::milliseconds elapsed_time = std::chrono::duration_cast(now - last_activation); if(elapsed_time > deactivation_time) { event_notifier->distribute_event(std::shared_ptr(this)); // todo why new shared ptr? + this->last_activation = now; } } -FlippR_Driver::Input::DistributingEvent::DistributingEvent(char address, int priority, std::string name, - std::chrono::milliseconds deactivation_time, std::shared_ptr event_notifier) - : Event(address, priority, name), deactivation_time(deactivation_time), event_notifier(event_notifier) -{} diff --git a/FlippR-Driver/src/input/InputDriverFactory.cpp b/FlippR-Driver/src/input/InputDriverFactory.cpp index b391954..9ad2e23 100644 --- a/FlippR-Driver/src/input/InputDriverFactory.cpp +++ b/FlippR-Driver/src/input/InputDriverFactory.cpp @@ -31,11 +31,13 @@ std::shared_ptr InputDriverFactory::get_InputDriver(std::istream & json matrix_config; matrix_config_stream >> matrix_config; - std::map> address_event_map; - std::map> name_event_map; - create_input_events(matrix_config, address_event_map, name_event_map); - std::shared_ptr event_notifier(new EventNotifier(event_queue)); + + std::map> address_event_map; + std::map> name_event_map; + + create_input_events(matrix_config, address_event_map, name_event_map, event_notifier); + std::unique_ptr input_gpio_interface(new InputGPIOInterface(input_config_stream)); std::unique_ptr detector( new Detector(std::move(input_gpio_interface), address_event_map, event_notifier)); @@ -44,7 +46,7 @@ std::shared_ptr InputDriverFactory::get_InputDriver(std::istream & } -void InputDriverFactory::create_input_events(json matrix_config, std::map>& address_event_map, +void InputDriverFactory::create_input_events(json matrix_config, std::map>& address_event_map, std::map>& name_event_map, std::shared_ptr event_notifier) { @@ -59,7 +61,7 @@ void InputDriverFactory::create_input_events(json matrix_config, std::map(); int deactivation_time = json_event.at("deactivation_time_milli").get(); - std::shared_ptr event_ptr(new DistributingEvent(address, priority, name, + std::shared_ptr event_ptr(new DistributingEvent(address, priority, name, std::chrono::milliseconds(deactivation_time), event_notifier)); address_event_map.emplace(address, event_ptr); diff --git a/FlippR-Driver/src/input/InputDriverFactory.h b/FlippR-Driver/src/input/InputDriverFactory.h index ea8a7ca..a2e29af 100644 --- a/FlippR-Driver/src/input/InputDriverFactory.h +++ b/FlippR-Driver/src/input/InputDriverFactory.h @@ -30,9 +30,9 @@ public: private: static void create_input_events(nlohmann::json matrix_config, - std::map>& address_event_map, - std::map>& name_event_map, - std::shared_ptr event_notifier); + std::map>& address_event_map, + std::map>& name_event_map, + std::shared_ptr event_notifier); }; } } diff --git a/FlippR-Driver/tests/input/TestDetector.cpp b/FlippR-Driver/tests/input/TestDetector.cpp index f64dc74..efdcfa7 100644 --- a/FlippR-Driver/tests/input/TestDetector.cpp +++ b/FlippR-Driver/tests/input/TestDetector.cpp @@ -16,7 +16,7 @@ #define private public #include "input/IEventNotifier.h" -#include "Event.h" +#include "input/DistributingEvent.h" #include "input/Detector.h" #include "utilities/LoggerFactory.h" #include "utilities/InputGPIOInterface.h" @@ -42,7 +42,7 @@ SCENARIO("Creating a Detector object", "") Fake(Dtor(event_notifier_mock)); When(Method(event_notifier_mock, distribute_event)).AlwaysReturn(); - std::map> events; + std::map> events; WHEN("Detector is created") { @@ -70,16 +70,17 @@ SCENARIO("There are events at the input", "") Fake(Dtor(event_notifier_mock)); When(Method(event_notifier_mock, distribute_event)).AlwaysReturn(); - Event event1(1, '1', "event 1"); - Event event2(2, '2', "event 2"); - auto event2ptr = std::make_shared(event2); - Event event3(3, '3', "event 3"); + std::shared_ptr event_notifier; + DistributingEvent event1(1, '1', "event 1", std::chrono::milliseconds(0), event_notifier); + DistributingEvent event2(2, '2', "event 2", std::chrono::milliseconds(0), event_notifier); + DistributingEvent event3(3, '3', "event 3", std::chrono::milliseconds(0), event_notifier); - std::map> events; + std::map> events; - events.insert(std::make_pair(1, std::make_shared(event1))); + auto event2ptr = std::make_shared(event2); + events.insert(std::make_pair(1, std::make_shared(event1))); events.insert(std::make_pair(2, event2ptr)); - events.insert(std::make_pair(3, std::make_shared(event3))); + events.insert(std::make_pair(3, std::make_shared(event3))); WHEN("an event can be found at gpio interface") { @@ -110,15 +111,16 @@ SCENARIO("There are events at the input but no suitable event in map", "") Fake(Dtor(event_notifier_mock)); When(Method(event_notifier_mock, distribute_event)).AlwaysReturn(); - Event event1(1, '1', "event 1"); - Event event2(2, '2', "event 2"); - Event event3(3, '3', "event 3"); + std::shared_ptr event_notifier; + DistributingEvent event1(1, '1', "event 1", std::chrono::milliseconds(0), event_notifier); + DistributingEvent event2(2, '2', "event 2", std::chrono::milliseconds(0), event_notifier); + DistributingEvent event3(3, '3', "event 3", std::chrono::milliseconds(0), event_notifier); - std::map> events; + std::map> events; - events.insert(std::make_pair(1, std::make_shared(event1))); - events.insert(std::make_pair(2, std::make_shared(event2))); - events.insert(std::make_pair(3, std::make_shared(event3))); + events.insert(std::make_pair(1, std::make_shared(event1))); + events.insert(std::make_pair(2, std::make_shared(event2))); + events.insert(std::make_pair(3, std::make_shared(event3))); WHEN("an event can be found at gpio interface") {