From a4ccf2103d9ae4fbdd332687e6b0690220aa6708 Mon Sep 17 00:00:00 2001 From: Johannes Wendel Date: Wed, 15 Jan 2020 16:17:06 +0100 Subject: [PATCH] Lamp factory adaption --- .../json_example/output/Lamp_Config.json | 18 ++++++++++++++ .../src/output/OutputDriverFactory.cpp | 12 ++++++---- .../src/output/OutputDriverFactory.h | 2 ++ .../src/output/factories/ItemFactory.h | 2 +- .../src/output/factories/LampFactory.cpp | 24 +++++++++++++++++++ .../src/output/factories/LampFactory.h | 4 ++++ .../src/output/factories/SoundFactory.cpp | 4 +++- 7 files changed, 60 insertions(+), 6 deletions(-) diff --git a/FlippR-Driver/contrib/json_example/output/Lamp_Config.json b/FlippR-Driver/contrib/json_example/output/Lamp_Config.json index de3edc8..00cb599 100644 --- a/FlippR-Driver/contrib/json_example/output/Lamp_Config.json +++ b/FlippR-Driver/contrib/json_example/output/Lamp_Config.json @@ -7,6 +7,24 @@ "pin_base" : 65 } ], + "address_pins" : + [ + { + "name" : "A0", + "address" : 0, + "extender" : "extender_1" + }, + { + "name" : "A1", + "address" : 0, + "extender" : "extender_1" + }, + { + "name" : "A2", + "address" : 0, + "extender" : "extender_1" + } + ], "lamps" : [ { diff --git a/FlippR-Driver/src/output/OutputDriverFactory.cpp b/FlippR-Driver/src/output/OutputDriverFactory.cpp index bd4711c..19bd676 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.cpp +++ b/FlippR-Driver/src/output/OutputDriverFactory.cpp @@ -47,14 +47,18 @@ std::shared_ptr get_OutputDriver(const std::string & solenoid_conf auto display_board_pin_controller = std::make_shared(); auto displays = get_items(display_config_path, display_board_pin_controller); - nlohmann::json display_config; - std::ifstream(display_config_path) >> display_config; - std::chrono::milliseconds update_frequency(1/display_config.at(config_path::display_update_frequency).get()); - auto display_controller = std::make_unique(displays, display_board_pin_controller, update_frequency); + auto display_controller = std::make_unique(displays, display_board_pin_controller, get_update_frequency(display_config_path)); return std::make_shared(std::move(display_controller), solenoids, lamps, sounds, flippers, displays); } +std::chrono::seconds get_update_frequency(const std::string & display_config_path) +{ + nlohmann::json display_config; + std::ifstream(display_config_path) >> display_config; + return std::chrono::seconds{1/display_config.at(config_path::display_update_frequency).get()}; +} + template std::map> get_items(const std::string &config_path, std::shared_ptr pin_controller) { diff --git a/FlippR-Driver/src/output/OutputDriverFactory.h b/FlippR-Driver/src/output/OutputDriverFactory.h index 97bcfb2..adfb2a9 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.h +++ b/FlippR-Driver/src/output/OutputDriverFactory.h @@ -28,6 +28,8 @@ std::shared_ptr get_OutputDriver(const std::string & solenoid_conf const std::string & sound_config_path, const std::string & display_config_path); +std::chrono::seconds get_update_frequency(const std::string & display_config_path); + template std::map> get_items(const std::string & config_path, std::shared_ptr pin_controller); diff --git a/FlippR-Driver/src/output/factories/ItemFactory.h b/FlippR-Driver/src/output/factories/ItemFactory.h index f492213..fc520e5 100644 --- a/FlippR-Driver/src/output/factories/ItemFactory.h +++ b/FlippR-Driver/src/output/factories/ItemFactory.h @@ -30,7 +30,7 @@ namespace config_path const char sound_path[] = "sounds"; const char fire_pin[] = "fire_pin"; - const char sound_address_pins[] = "address_pins"; + const char address_pins[] = "address_pins"; const char flipper_path[] = "flippers"; diff --git a/FlippR-Driver/src/output/factories/LampFactory.cpp b/FlippR-Driver/src/output/factories/LampFactory.cpp index f0d70e6..291099b 100644 --- a/FlippR-Driver/src/output/factories/LampFactory.cpp +++ b/FlippR-Driver/src/output/factories/LampFactory.cpp @@ -6,6 +6,7 @@ */ #include +#include #include "LampFactory.h" #include "output/items/detail/Lamp.h" @@ -35,5 +36,28 @@ std::map> LampFactory::getItemMap() return lamp_map; } +void LampFactory::set_address_pins() +{ + auto address_pins = this->object.at(config_path::address_pins); + + std::array pins; + + pins.at(0) = address_pins.at("A0"); + pins.at(1) = address_pins.at("A1"); + pins.at(2) = address_pins.at("A2"); + + std::dynamic_pointer_cast(this->pin_controller)->set_address_pins(pins); +} + +uint8_t LampFactory::get_address_pin(nlohmann::json & pin_object) +{ + auto address = pin_object.at(config_path::item_address).get(); + auto extender = pin_object.at(config_path::item_extender).get(); + auto pin_base = this->get_extender_pin_base(extender); + + return address + pin_base; +} + + } } diff --git a/FlippR-Driver/src/output/factories/LampFactory.h b/FlippR-Driver/src/output/factories/LampFactory.h index e2eb4be..a071a45 100644 --- a/FlippR-Driver/src/output/factories/LampFactory.h +++ b/FlippR-Driver/src/output/factories/LampFactory.h @@ -22,6 +22,10 @@ class LampFactory : ItemFactory public: LampFactory(nlohmann::json & object, std::shared_ptr pin_controller); std::map> getItemMap(); + +private: + void set_address_pins(); + uint8_t get_address_pin(nlohmann::json & pin_object); }; } diff --git a/FlippR-Driver/src/output/factories/SoundFactory.cpp b/FlippR-Driver/src/output/factories/SoundFactory.cpp index b605d53..cd0dad3 100644 --- a/FlippR-Driver/src/output/factories/SoundFactory.cpp +++ b/FlippR-Driver/src/output/factories/SoundFactory.cpp @@ -50,14 +50,16 @@ void SoundFactory::set_fire_pin() void SoundFactory::set_address_pins() { - auto address_pins = object.at(config_path::sound_address_pins); + auto address_pins = object.at(config_path::address_pins); std::vector pins; + //todo mach nen array draus for (auto & pin_json : address_pins) { pins.push_back(0); } + for (auto & pin_json : address_pins) { uint8_t pin = pin_json.at(config_path::item_address).get();