From 31e53155797cf35dd6709c2e247ff7d5192f0790 Mon Sep 17 00:00:00 2001 From: Johannes Wendel Date: Sat, 4 Jan 2020 18:54:52 +0100 Subject: [PATCH] implements and integrates sound factory --- .../json_example/output/Sound_Config.json | 3 +- .../src/output/OutputDriverFactory.cpp | 8 +++-- FlippR-Driver/src/output/factories/Factory.h | 10 +++++++ .../src/output/factories/SoundFactory.cpp | 29 +++++++++++++++++-- .../src/output/factories/SoundFactory.h | 6 +++- .../src/output/items/detail/Lamp.cpp | 2 +- .../src/output/items/detail/Sound.cpp | 2 +- 7 files changed, 50 insertions(+), 10 deletions(-) diff --git a/FlippR-Driver/contrib/json_example/output/Sound_Config.json b/FlippR-Driver/contrib/json_example/output/Sound_Config.json index 423f8ab..c0d19a9 100644 --- a/FlippR-Driver/contrib/json_example/output/Sound_Config.json +++ b/FlippR-Driver/contrib/json_example/output/Sound_Config.json @@ -20,7 +20,8 @@ "id" : 0, "address" : 22, "name" : "Sound 1", - "extender" : "extender_0" + "extender" : "extender_0", + "deactivation_time_milliseconds" : 10 }, { "id" : 1, diff --git a/FlippR-Driver/src/output/OutputDriverFactory.cpp b/FlippR-Driver/src/output/OutputDriverFactory.cpp index eddb686..cce5089 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.cpp +++ b/FlippR-Driver/src/output/OutputDriverFactory.cpp @@ -3,6 +3,7 @@ // #include +#include #include "OutputDriverFactory.h" #include "utility/LoggerFactory.h" @@ -62,10 +63,11 @@ std::shared_ptr get_OutputDriver(std::istream& solenoid_config, exit(EXIT_FAILURE); } - /*auto sound_board_pin_controller = create_SoundBoardPinController(); - auto sounds = create_sounds(sound_board_pin_controller); + auto sound_board_pin_controller = create_SoundBoardPinController(); + SoundFactory sound_factory{config::sounds, sound_board_pin_controller}; + auto sounds = sound_factory.getItemMap(); - std::unique_ptr display_board_pin_controller(new detail::DisplayBoardPinController(parse_pins_display_board(display_config))); + /*std::unique_ptr display_board_pin_controller(new detail::DisplayBoardPinController(parse_pins_display_board(display_config))); auto displays = create_displays(); std::unique_ptr display_controller(new detail::DisplayController(displays, std::move(display_board_pin_controller))); auto display_map = map_displays(displays); diff --git a/FlippR-Driver/src/output/factories/Factory.h b/FlippR-Driver/src/output/factories/Factory.h index cd28921..7c4177c 100644 --- a/FlippR-Driver/src/output/factories/Factory.h +++ b/FlippR-Driver/src/output/factories/Factory.h @@ -18,6 +18,16 @@ namespace flippR_driver namespace output { +namespace config_path +{ + const char item_name[] = "name"; + const char item_address[] = "address"; + const char item_extender[] = "extender"; + const char item_identifier[] = "id"; + const char deactivation_time[] = "deactivation_time_milliseconds"; + const char sound_path[] = "sounds"; +} + class Factory { public: diff --git a/FlippR-Driver/src/output/factories/SoundFactory.cpp b/FlippR-Driver/src/output/factories/SoundFactory.cpp index de05f88..5f5a125 100644 --- a/FlippR-Driver/src/output/factories/SoundFactory.cpp +++ b/FlippR-Driver/src/output/factories/SoundFactory.cpp @@ -12,14 +12,37 @@ namespace output { SoundFactory::SoundFactory(nlohmann::json &object, std::shared_ptr pin_controller) : - Factory{object, pin_controller} + Factory{object, pin_controller}, + deactivation_time{0} { - + if (object.find(config_path::deactivation_time) != object.end()) + { + this->deactivation_time = object.at(config_path::deactivation_time).get(); + } } std::map> SoundFactory::getItemMap() { - return std::map>(); + auto sounds = this->object.at(config_path::sound_path); + std::map> sound_map; + for (auto sound : sounds) + { + auto name = sound.at(config_path::item_name).get(); + auto address = sound.at(config_path::item_address).get(); + auto extender = sound.at(config_path::item_extender).get(); + auto pin_base = this->get_extender_pin_base(extender); + auto id = sound.at(config_path::item_identifier).get(); + + std::chrono::milliseconds deactivation_time_chrono{this->deactivation_time}; + if (object.find(config_path::deactivation_time) != object.end()) + { + deactivation_time_chrono = std::chrono::milliseconds{object.at(config_path::deactivation_time).get()}; + } + auto sound_item = std::make_shared(std::static_pointer_cast(this->pin_controller), address, pin_base, name, deactivation_time_chrono, id); + + sound_map.emplace(name, sound_item); + } + return sound_map; } } diff --git a/FlippR-Driver/src/output/factories/SoundFactory.h b/FlippR-Driver/src/output/factories/SoundFactory.h index ec912cb..fb1198e 100644 --- a/FlippR-Driver/src/output/factories/SoundFactory.h +++ b/FlippR-Driver/src/output/factories/SoundFactory.h @@ -10,6 +10,8 @@ #include "Factory.h" +#include "output/SoundBoardPinController.h" + namespace flippR_driver { namespace output @@ -20,10 +22,12 @@ class SoundFactory : Factory public: explicit SoundFactory(nlohmann::json & object, std::shared_ptr pin_controller); std::map> getItemMap() override; + +private: + uint8_t deactivation_time; }; } } - #endif //FLIPPR_DRIVER_SOUNDFACTORY_H diff --git a/FlippR-Driver/src/output/items/detail/Lamp.cpp b/FlippR-Driver/src/output/items/detail/Lamp.cpp index a8636bd..6f6e77a 100644 --- a/FlippR-Driver/src/output/items/detail/Lamp.cpp +++ b/FlippR-Driver/src/output/items/detail/Lamp.cpp @@ -26,7 +26,7 @@ Lamp::Lamp(std::shared_ptr pin_controller, const uint8 activated(false), activation_time(10) { - CLOG(INFO , OUTPUT_LOGGER) << "Created lamp \"" << name << "\" with pin-base " << int(pin_base) << " and address " << int(address); + //CLOG(INFO , OUTPUT_LOGGER) << "Created lamp \"" << name << "\" with pin-base " << int(pin_base) << " and address " << int(address); } void Lamp::activate() diff --git a/FlippR-Driver/src/output/items/detail/Sound.cpp b/FlippR-Driver/src/output/items/detail/Sound.cpp index ed1dfbf..374da14 100644 --- a/FlippR-Driver/src/output/items/detail/Sound.cpp +++ b/FlippR-Driver/src/output/items/detail/Sound.cpp @@ -23,7 +23,7 @@ namespace detail Sound::Sound(std::shared_ptr pin_controller, const uint8_t & address, const uint8_t & pin_base, const std::string & name, const std::chrono::milliseconds & deactivation_time, const u_int id) : detail::Item(std::move(name)), DriverBoardItem(pin_controller, address, pin_base), pin_controller(std::move(pin_controller)), deactivation_time(deactivation_time), id(id) { - //CLOG(INFO , OUTPUT_LOGGER) << "Created sound \"" << name << "\" with pin-base " << int(pin_base) << " and address " << int(address); + CLOG(INFO , OUTPUT_LOGGER) << "Created sound " << id << " \"" << name << "\" with pin-base " << int(pin_base) << " and address " << int(address) << ". Deactivation time is: " << deactivation_time.count(); } void Sound::play()