diff --git a/FlippR-Driver/contrib/json_example/output/Sound_Config.json b/FlippR-Driver/contrib/json_example/output/Sound_Config.json index 8b8f1ab..e3122ff 100644 --- a/FlippR-Driver/contrib/json_example/output/Sound_Config.json +++ b/FlippR-Driver/contrib/json_example/output/Sound_Config.json @@ -2,11 +2,6 @@ "deactivation_time_milliseconds" : 10, "sounds" : [ - { - "id" : -1, //todo should be 0 - "address" : 0, - "description" : "Deactivate Sound" - }, { "id" : 0, "address" : "22", diff --git a/FlippR-Driver/include/output/items/Flipper.h b/FlippR-Driver/include/output/items/Flipper.h index 45e64f5..93f8a66 100644 --- a/FlippR-Driver/include/output/items/Flipper.h +++ b/FlippR-Driver/include/output/items/Flipper.h @@ -8,6 +8,7 @@ #ifndef _INCLUDE_FLIPPR_CODE_FLIPPER_H #define _INCLUDE_FLIPPR_CODE_FLIPPER_H +#include "Item.h" namespace flippR_driver { namespace output @@ -15,7 +16,7 @@ namespace output namespace items { -class Flipper +class Flipper : public virtual Item { public: virtual ~Flipper() = default; diff --git a/FlippR-Driver/include/output/items/Lamp.h b/FlippR-Driver/include/output/items/Lamp.h index 7c9c9a7..0782a94 100644 --- a/FlippR-Driver/include/output/items/Lamp.h +++ b/FlippR-Driver/include/output/items/Lamp.h @@ -17,7 +17,7 @@ namespace output namespace items { -class Lamp : public Item +class Lamp : public virtual Item { public: virtual ~Lamp() = default; diff --git a/FlippR-Driver/include/output/items/Solenoid.h b/FlippR-Driver/include/output/items/Solenoid.h index c509ba0..8a98261 100644 --- a/FlippR-Driver/include/output/items/Solenoid.h +++ b/FlippR-Driver/include/output/items/Solenoid.h @@ -18,7 +18,7 @@ namespace output namespace items { // todo get name? parent calss output_item? -class Solenoid : public Item +class Solenoid : public virtual Item { public: virtual ~Solenoid() = default; diff --git a/FlippR-Driver/include/output/items/Sound.h b/FlippR-Driver/include/output/items/Sound.h index bcde888..c2ddcee 100644 --- a/FlippR-Driver/include/output/items/Sound.h +++ b/FlippR-Driver/include/output/items/Sound.h @@ -17,7 +17,7 @@ namespace output namespace items { -class Sound : public Item +class Sound : public virtual Item { public: virtual ~Sound() = default; diff --git a/FlippR-Driver/src/output/DriverBoardPinController.h b/FlippR-Driver/src/output/DriverBoardPinController.h index a35de2f..8e108a1 100644 --- a/FlippR-Driver/src/output/DriverBoardPinController.h +++ b/FlippR-Driver/src/output/DriverBoardPinController.h @@ -5,7 +5,6 @@ #ifndef FLIPPR_DRIVER_DRIVERBOARDPINCONTROLLER_H #define FLIPPR_DRIVER_DRIVERBOARDPINCONTROLLER_H -#include "OutputPinController.h" namespace flippR_driver { @@ -17,11 +16,13 @@ namespace items class DriverBoardItem; } -class DriverBoardPinController : public OutputPinController +class DriverBoardPinController { public: virtual ~DriverBoardPinController() = default; + virtual void activate(items::DriverBoardItem &driver_board_item) = 0; + virtual void deactivate(items::DriverBoardItem &driver_board_item) = 0; }; } diff --git a/FlippR-Driver/src/output/OutputPinController.cpp b/FlippR-Driver/src/output/OutputPinController.cpp deleted file mode 100644 index 2ba095f..0000000 --- a/FlippR-Driver/src/output/OutputPinController.cpp +++ /dev/null @@ -1,33 +0,0 @@ -/* - * OutputGPIOInterface.h - * - * Created on: May 31, 2018 - * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert - */ - -#include "OutputPinController.h" - -#include "utility/config.h" - -#include "wiringPi/mcp23017.h" - -namespace flippR_driver -{ -namespace output -{ - -void OutputPinController::initialize_i2c_address(uint8_t i2c_address, uint8_t pin_base) -{ - mcp23017Setup(pin_base, i2c_address); -} - -void OutputPinController::initialize_pins_output(uint8_t pin_base, std::map::iterator begin, std::map::iterator end) -{ - for(; begin != end; begin++) - { - initialize_output_pin(pin_base + begin->second); - } -} - -} -} diff --git a/FlippR-Driver/src/output/OutputPinController.h b/FlippR-Driver/src/output/OutputPinController.h deleted file mode 100644 index c58e6bb..0000000 --- a/FlippR-Driver/src/output/OutputPinController.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * OutputGPIOInterface.h - * - * Created on: May 31, 2018 - * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert - */ - -#ifndef SRC_UTILITIES_OUTPUTGPIOINTERFACE_H_ -#define SRC_UTILITIES_OUTPUTGPIOINTERFACE_H_ - -#include "PinController.h" - -#include - -namespace flippR_driver -{ -namespace output -{ - -namespace items -{ - class DriverBoardItem; -} -class OutputPinController : public PinController -{ - -public: - virtual ~OutputPinController() = default; - - virtual void activate(items::DriverBoardItem &driver_board_item) = 0; - virtual void deactivate(items::DriverBoardItem &driver_board_item) = 0; - -protected: - static void initialize_i2c_address(uint8_t i2c_address, uint8_t pin_base); - static void initialize_pins_output(uint8_t pin_base, std::map::iterator begin, std::map::iterator end); -}; - -} -} - -#endif diff --git a/FlippR-Driver/src/output/SoundBoardPinController.h b/FlippR-Driver/src/output/SoundBoardPinController.h index fe67655..e0ee46e 100644 --- a/FlippR-Driver/src/output/SoundBoardPinController.h +++ b/FlippR-Driver/src/output/SoundBoardPinController.h @@ -5,7 +5,6 @@ #ifndef FLIPPR_DRIVER_OUTPUT_SOUNDBOARDPINCONTROLLER_H #define FLIPPR_DRIVER_OUTPUT_SOUNDBOARDPINCONTROLLER_H -#include "output/OutputPinController.h" #include "output/items/detail/Sound.h" namespace flippR_driver @@ -13,15 +12,10 @@ namespace flippR_driver namespace output { -namespace items // todo include + fw decl?? -{ - class Sound; -} -class SoundBoardPinController : public OutputPinController +class SoundBoardPinController { public: - - virtual void deactivate(items::DriverBoardItem &driver_board_item) = 0; + virtual ~SoundBoardPinController() = default; virtual void activate(const items::detail::Sound &sound) = 0; virtual void deactivate(const items::detail::Sound &sound) = 0; diff --git a/FlippR-Driver/src/output/detail/DisplayBoardPinController.h b/FlippR-Driver/src/output/detail/DisplayBoardPinController.h index ad56387..d2250c9 100644 --- a/FlippR-Driver/src/output/detail/DisplayBoardPinController.h +++ b/FlippR-Driver/src/output/detail/DisplayBoardPinController.h @@ -9,7 +9,6 @@ #include "output/DisplayBoardPinController.h" -#include "output/OutputPinController.h" namespace flippR_driver { @@ -18,7 +17,7 @@ namespace output namespace detail { -class DisplayBoardPinController : public output::DisplayBoardPinController, public OutputPinController +class DisplayBoardPinController : public output::DisplayBoardPinController { public: explicit DisplayBoardPinController(std::map pins_display); diff --git a/FlippR-Driver/src/output/detail/DriverBoardPinController.h b/FlippR-Driver/src/output/detail/DriverBoardPinController.h index 6068404..2c8de2b 100644 --- a/FlippR-Driver/src/output/detail/DriverBoardPinController.h +++ b/FlippR-Driver/src/output/detail/DriverBoardPinController.h @@ -5,12 +5,11 @@ #ifndef FLIPPR_DRIVER_OUTPUT_IMPL_DRIVERBOARDPINCONTROLLER_H #define FLIPPR_DRIVER_OUTPUT_IMPL_DRIVERBOARDPINCONTROLLER_H -#include -#include - #include "output/DriverBoardPinController.h" -#include "output/OutputPinController.h" +#include +#include +#include namespace flippR_driver { diff --git a/FlippR-Driver/src/output/detail/SoundBoardPinController.cpp b/FlippR-Driver/src/output/detail/SoundBoardPinController.cpp index b9c5246..f2358de 100644 --- a/FlippR-Driver/src/output/detail/SoundBoardPinController.cpp +++ b/FlippR-Driver/src/output/detail/SoundBoardPinController.cpp @@ -32,16 +32,16 @@ void SoundBoardPinController::activate(const items::detail::Sound &sound) write_sound_address(sound.get_address()); - fire_sound(true); + fire_sound(); } void SoundBoardPinController::deactivate(const items::detail::Sound &sound) { std::lock_guard guard(*output_item_mutex); - write_sound_address(sound.get_address()); + write_sound_address(0); - fire_sound(false); + fire_sound(); } @@ -56,9 +56,11 @@ void SoundBoardPinController::write_sound_address(uint8_t address) const write_pin(pins_sound.at("G"), address & 0b1000000u); } -void SoundBoardPinController::fire_sound(bool fire) const +void SoundBoardPinController::fire_sound() const { - PinController::write_pin(pins_sound.at("fire"), fire); + PinController::write_pin(pins_sound.at("fire"), true); + + PinController::write_pin(pins_sound.at("fire"), false); } void SoundBoardPinController::write_pin(uint8_t pin, bool value) const diff --git a/FlippR-Driver/src/output/detail/SoundBoardPinController.h b/FlippR-Driver/src/output/detail/SoundBoardPinController.h index e433381..ce5a4ea 100644 --- a/FlippR-Driver/src/output/detail/SoundBoardPinController.h +++ b/FlippR-Driver/src/output/detail/SoundBoardPinController.h @@ -7,8 +7,6 @@ #include "output/SoundBoardPinController.h" -#include "output/OutputPinController.h" - #include namespace flippR_driver @@ -24,13 +22,12 @@ public: SoundBoardPinController(std::map pins_sound, std::shared_ptr output_item_mutex); ~SoundBoardPinController() override = default; - - void activate(const items::detail::Sound &sound); - void deactivate(const items::detail::Sound &sound); + void activate(const items::detail::Sound &sound) override; + void deactivate(const items::detail::Sound &sound) override; private: void write_sound_address(uint8_t address) const; - void fire_sound(bool fire) const; + void fire_sound() const; void write_pin(uint8_t pin, bool value) const; diff --git a/FlippR-Driver/src/output/items/detail/DriverBoardItem.cpp b/FlippR-Driver/src/output/items/detail/DriverBoardItem.cpp index 0e42f43..f59ff6b 100644 --- a/FlippR-Driver/src/output/items/detail/DriverBoardItem.cpp +++ b/FlippR-Driver/src/output/items/detail/DriverBoardItem.cpp @@ -6,8 +6,8 @@ using namespace flippR_driver::output; -items::detail::DriverBoardItem::DriverBoardItem(std::shared_ptr pin_controller, const uint8_t address) : - pin_controller(std::move(pin_controller)), address(address) +items::detail::DriverBoardItem::DriverBoardItem(const uint8_t address) : + address(address) {} uint8_t items::detail::DriverBoardItem::get_address() const diff --git a/FlippR-Driver/src/output/items/detail/DriverBoardItem.h b/FlippR-Driver/src/output/items/detail/DriverBoardItem.h index 0e56f9e..3582e61 100644 --- a/FlippR-Driver/src/output/items/detail/DriverBoardItem.h +++ b/FlippR-Driver/src/output/items/detail/DriverBoardItem.h @@ -7,8 +7,6 @@ #include "output/items/DriverBoardItem.h" -#include "output/OutputPinController.h" - #include namespace flippR_driver { @@ -22,7 +20,7 @@ namespace detail class DriverBoardItem : public output::items::DriverBoardItem { public: - DriverBoardItem(std::shared_ptr pin_controller, const uint8_t address); + DriverBoardItem(const uint8_t address); ~DriverBoardItem() override = default; @@ -30,8 +28,6 @@ public: protected: const uint8_t address; - - const std::shared_ptr pin_controller; }; diff --git a/FlippR-Driver/src/output/items/detail/Item.h b/FlippR-Driver/src/output/items/detail/Item.h index f14aeaf..85426cf 100644 --- a/FlippR-Driver/src/output/items/detail/Item.h +++ b/FlippR-Driver/src/output/items/detail/Item.h @@ -22,7 +22,7 @@ namespace items namespace detail { -class Item : public items::Item +class Item : public virtual items::Item { public: Item(std::string name); diff --git a/FlippR-Driver/src/output/items/detail/Lamp.cpp b/FlippR-Driver/src/output/items/detail/Lamp.cpp index cee0d49..b7d237a 100644 --- a/FlippR-Driver/src/output/items/detail/Lamp.cpp +++ b/FlippR-Driver/src/output/items/detail/Lamp.cpp @@ -20,7 +20,7 @@ namespace detail { Lamp::Lamp(std::shared_ptr pin_controller, uint8_t address, std::string name) : -detail::Item(std::move(name)), DriverBoardItem(std::move(pin_controller), address), activated(false) +detail::Item(std::move(name)), DriverBoardItem(address), pin_controller(std::move(pin_controller), activated(false) { CLOG(INFO, OUTPUT_LOGGER) << "Created lamp " << name << " with address " << address; } diff --git a/FlippR-Driver/src/output/items/detail/Lamp.h b/FlippR-Driver/src/output/items/detail/Lamp.h index 12fca3f..7afe204 100644 --- a/FlippR-Driver/src/output/items/detail/Lamp.h +++ b/FlippR-Driver/src/output/items/detail/Lamp.h @@ -35,6 +35,7 @@ public: bool is_activated() override; private: + const std::shared_ptr pin_controller; bool activated; }; diff --git a/FlippR-Driver/src/output/items/detail/Solenoid.cpp b/FlippR-Driver/src/output/items/detail/Solenoid.cpp index 819f091..289b380 100644 --- a/FlippR-Driver/src/output/items/detail/Solenoid.cpp +++ b/FlippR-Driver/src/output/items/detail/Solenoid.cpp @@ -19,7 +19,7 @@ namespace detail { Solenoid::Solenoid(std::shared_ptr pin_controller, uint8_t address, std::string name, std::chrono::milliseconds deactivation_time) -: detail::Item(std::move(name)), DriverBoardItem(std::move(pin_controller), address), deactivation_time(deactivation_time) +: detail::Item(std::move(name)), DriverBoardItem(address), pin_controller(std::move(pin_controller)), deactivation_time(deactivation_time) { CLOG(INFO, OUTPUT_LOGGER) << "Created solenoid " << name << " with address " << address; } diff --git a/FlippR-Driver/src/output/items/detail/Solenoid.h b/FlippR-Driver/src/output/items/detail/Solenoid.h index ea3244e..7d8e543 100644 --- a/FlippR-Driver/src/output/items/detail/Solenoid.h +++ b/FlippR-Driver/src/output/items/detail/Solenoid.h @@ -38,6 +38,7 @@ private: virtual void triggerTask(); private: + const std::shared_ptr pin_controller; const std::chrono::milliseconds deactivation_time; std::future trigger_task; diff --git a/FlippR-Driver/src/output/items/detail/Sound.cpp b/FlippR-Driver/src/output/items/detail/Sound.cpp index 50b500d..d967d36 100644 --- a/FlippR-Driver/src/output/items/detail/Sound.cpp +++ b/FlippR-Driver/src/output/items/detail/Sound.cpp @@ -21,8 +21,7 @@ namespace detail { Sound::Sound(std::shared_ptr pin_controller, uint8_t address, std::string name, std::chrono::milliseconds deactivation_time, u_int id) -: -pin_controller(std::move(pin_controller)), detail::Item(std::move(name)), DriverBoardItem(pin_controller, address), deactivation_time(deactivation_time), id(id) +: detail::Item(std::move(name)), DriverBoardItem(address), pin_controller(std::move(pin_controller)), deactivation_time(deactivation_time), id(id) { CLOG(INFO, OUTPUT_LOGGER) << "Created sound " << id << " with name " << name << " and address " << address; }