From 10b200e4e4927a7e77452c9af5427721846289d8 Mon Sep 17 00:00:00 2001 From: Johannes Wendel Date: Mon, 6 Jan 2020 09:20:53 +0100 Subject: [PATCH] Implements and integrates SolenoidFactory --- FlippR-Driver/CMakeLists.txt | 2 +- .../src/output/OutputDriverFactory.cpp | 4 +- .../src/output/factories/DisplayFactory.h | 2 +- .../src/output/factories/FlipperFactory.cpp | 8 +-- .../src/output/factories/ItemFactory.h | 2 + .../src/output/factories/LampFactory.h | 2 +- .../src/output/factories/SolenoidFactory.cpp | 50 +++++++++++++++++++ .../src/output/factories/SolenoidFactory.h | 33 ++++++++++++ .../src/output/items/detail/Solenoid.cpp | 2 +- 9 files changed, 96 insertions(+), 9 deletions(-) create mode 100644 FlippR-Driver/src/output/factories/SolenoidFactory.cpp create mode 100644 FlippR-Driver/src/output/factories/SolenoidFactory.h diff --git a/FlippR-Driver/CMakeLists.txt b/FlippR-Driver/CMakeLists.txt index ae703e8..c109c87 100644 --- a/FlippR-Driver/CMakeLists.txt +++ b/FlippR-Driver/CMakeLists.txt @@ -56,7 +56,7 @@ file(GLOB_RECURSE SOURCES src/*.cpp) if(BUILD_SHARED_LIB) add_library(${PROJECT_NAME} SHARED ${SOURCES}) else() - add_library(${PROJECT_NAME} STATIC ${SOURCES} cli/OutputInterpreter.cpp cli/OutputInterpreter.h src/output/items/detail/DriverBoardItem.cpp src/output/items/detail/DriverBoardItem.h include/DriverFactory.h src/utility/Colors.h src/output/factories/SoundFactory.cpp src/output/factories/SoundFactory.h src/output/factories/ItemFactory.cpp src/output/factories/ItemFactory.h src/output/factories/FlipperFactory.cpp src/output/factories/FlipperFactory.h src/output/factories/LampFactory.cpp src/output/factories/LampFactory.h src/output/factories/DisplayFactory.cpp src/output/factories/DisplayFactory.h) + add_library(${PROJECT_NAME} STATIC ${SOURCES} cli/OutputInterpreter.cpp cli/OutputInterpreter.h src/output/items/detail/DriverBoardItem.cpp src/output/items/detail/DriverBoardItem.h include/DriverFactory.h src/utility/Colors.h src/output/factories/SoundFactory.cpp src/output/factories/SoundFactory.h src/output/factories/ItemFactory.cpp src/output/factories/ItemFactory.h src/output/factories/FlipperFactory.cpp src/output/factories/FlipperFactory.h src/output/factories/LampFactory.cpp src/output/factories/LampFactory.h src/output/factories/DisplayFactory.cpp src/output/factories/DisplayFactory.h src/output/factories/SolenoidFactory.cpp src/output/factories/SolenoidFactory.h) endif(BUILD_SHARED_LIB) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src) diff --git a/FlippR-Driver/src/output/OutputDriverFactory.cpp b/FlippR-Driver/src/output/OutputDriverFactory.cpp index 5489b52..4eabb43 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.cpp +++ b/FlippR-Driver/src/output/OutputDriverFactory.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "OutputDriverFactory.h" #include "utility/LoggerFactory.h" @@ -38,6 +39,7 @@ std::shared_ptr get_OutputDriver(const std::string & solenoid_conf std::shared_ptr driver_board_pin_controller(new detail::DriverBoardPinController(output_pin_mutex)); auto flippers = get_items(solenoid_config_path, driver_board_pin_controller); + auto solenoids = get_items(solenoid_config_path, driver_board_pin_controller); auto lamps = get_items(lamp_config_path, driver_board_pin_controller); auto sound_board_pin_controller = create_SoundBoardPinController(); @@ -138,7 +140,7 @@ std::map> get_items(const std::string config_stream >> config_json; FactoryType factory{config_json, std::static_pointer_cast(pin_controller)}; - + std::map> map; try{ map = factory.getItemMap(); diff --git a/FlippR-Driver/src/output/factories/DisplayFactory.h b/FlippR-Driver/src/output/factories/DisplayFactory.h index 663d530..47fccca 100644 --- a/FlippR-Driver/src/output/factories/DisplayFactory.h +++ b/FlippR-Driver/src/output/factories/DisplayFactory.h @@ -17,9 +17,9 @@ namespace output class DisplayFactory : ItemFactory { -public: explicit DisplayFactory(nlohmann::json & object, std::shared_ptr pin_controller); std::map> getItemMap() override; +public: }; diff --git a/FlippR-Driver/src/output/factories/FlipperFactory.cpp b/FlippR-Driver/src/output/factories/FlipperFactory.cpp index af6ba65..1f07e8c 100644 --- a/FlippR-Driver/src/output/factories/FlipperFactory.cpp +++ b/FlippR-Driver/src/output/factories/FlipperFactory.cpp @@ -22,11 +22,11 @@ std::map> FlipperFactory::getItemMap() { auto flippers = this->object.at(config_path::flipper_path); std::map> flipper_map; - for (auto lamp : flippers) + for (auto flipper : flippers) { - auto name = lamp.at(config_path::item_name).get(); - auto address = lamp.at(config_path::item_address).get(); - auto extender = lamp.at(config_path::item_extender).get(); + auto name = flipper.at(config_path::item_name).get(); + auto address = flipper.at(config_path::item_address).get(); + auto extender = flipper.at(config_path::item_extender).get(); auto pin_base = this->get_extender_pin_base(extender); auto flipper_item = std::make_shared(std::static_pointer_cast(this->pin_controller), address, pin_base, name); diff --git a/FlippR-Driver/src/output/factories/ItemFactory.h b/FlippR-Driver/src/output/factories/ItemFactory.h index 0ad7f1d..936db28 100644 --- a/FlippR-Driver/src/output/factories/ItemFactory.h +++ b/FlippR-Driver/src/output/factories/ItemFactory.h @@ -29,6 +29,8 @@ namespace config_path const char sound_path[] = "sounds"; const char flipper_path[] = "flippers"; + + const char solenoid_path[] = "solenoids"; } class ItemFactory diff --git a/FlippR-Driver/src/output/factories/LampFactory.h b/FlippR-Driver/src/output/factories/LampFactory.h index 60f1417..9fe7e7a 100644 --- a/FlippR-Driver/src/output/factories/LampFactory.h +++ b/FlippR-Driver/src/output/factories/LampFactory.h @@ -8,7 +8,7 @@ #ifndef FLIPPR_DRIVER_LAMPFACTORY_H #define FLIPPR_DRIVER_LAMPFACTORY_H -#include +#include "output/DriverBoardPinController.h" #include "ItemFactory.h" namespace flippR_driver diff --git a/FlippR-Driver/src/output/factories/SolenoidFactory.cpp b/FlippR-Driver/src/output/factories/SolenoidFactory.cpp new file mode 100644 index 0000000..4224ed6 --- /dev/null +++ b/FlippR-Driver/src/output/factories/SolenoidFactory.cpp @@ -0,0 +1,50 @@ +/* + * SolenoidFactory.cpp + * + * Created on: January 6, 2020 + * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert + */ + +#include "output/items/detail/Solenoid.h" +#include "SolenoidFactory.h" + +namespace flippR_driver +{ +namespace output +{ + +SolenoidFactory::SolenoidFactory(nlohmann::json &object, std::shared_ptr pin_controller) : + ItemFactory{object, pin_controller} +{ + if (object.find(config_path::deactivation_time) != object.end()) + { + this->deactivation_time = object.at(config_path::deactivation_time).get(); + } +} + +std::map> SolenoidFactory::getItemMap() +{ + auto solenoids = this->object.at(config_path::solenoid_path); + std::map> solenoid_map; + + for (auto solenoid : solenoids) + { + auto name = solenoid.at(config_path::item_name).get(); + auto address = solenoid.at(config_path::item_address).get(); + auto extender = solenoid.at(config_path::item_extender).get(); + auto pin_base = this->get_extender_pin_base(extender); + std::chrono::milliseconds deactivation_time_chrono{this->deactivation_time}; + + if (solenoid.find(config_path::deactivation_time) != solenoid.end()) + { + deactivation_time_chrono = std::chrono::milliseconds{solenoid.at(config_path::deactivation_time).get()}; + } + + auto solenoid_item = std::make_shared(std::static_pointer_cast(this->pin_controller), address, pin_base, name, deactivation_time_chrono); + solenoid_map.emplace(name, solenoid_item); + } + return solenoid_map; +} + +} +} diff --git a/FlippR-Driver/src/output/factories/SolenoidFactory.h b/FlippR-Driver/src/output/factories/SolenoidFactory.h new file mode 100644 index 0000000..600a18b --- /dev/null +++ b/FlippR-Driver/src/output/factories/SolenoidFactory.h @@ -0,0 +1,33 @@ +/* + * SolenoidFactory.h + * + * Created on: January 6, 2020 + * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert + */ + +#ifndef FLIPPR_DRIVER_SOLENOIDFACTORY_H +#define FLIPPR_DRIVER_SOLENOIDFACTORY_H + +#include "output/DriverBoardPinController.h" +#include "ItemFactory.h" + +namespace flippR_driver +{ +namespace output +{ + +class SolenoidFactory : public ItemFactory +{ +public: + explicit SolenoidFactory(nlohmann::json &object, std::shared_ptr pin_controller); + + std::map> getItemMap() override; + +private: + uint8_t deactivation_time; +}; + +} +} + +#endif //FLIPPR_DRIVER_SOLENOIDFACTORY_H diff --git a/FlippR-Driver/src/output/items/detail/Solenoid.cpp b/FlippR-Driver/src/output/items/detail/Solenoid.cpp index 55b303e..187c448 100644 --- a/FlippR-Driver/src/output/items/detail/Solenoid.cpp +++ b/FlippR-Driver/src/output/items/detail/Solenoid.cpp @@ -21,7 +21,7 @@ namespace detail Solenoid::Solenoid(std::shared_ptr pin_controller, const uint8_t & address, const uint8_t & pin_base, const std::string & name, const std::chrono::milliseconds & deactivation_time) : detail::Item(std::move(name)), DriverBoardItem(pin_controller, address, pin_base), pin_controller(pin_controller), deactivation_time(deactivation_time) { - //CLOG(INFO, OUTPUT_LOGGER) << "Created solenoid " << name << " with address " << address; + CLOG(INFO, OUTPUT_LOGGER) << "Created solenoid " << name << " with address " << address << " and deactivation-time: " << deactivation_time.count(); } void Solenoid::triggerTask()