From 989f532c6d7269ba9f2260425a8fe200d206e140 Mon Sep 17 00:00:00 2001 From: Johannes Wendel Date: Sat, 28 Dec 2019 21:51:32 +0100 Subject: [PATCH] Finished LampFactory --- .../src/output/factories/Factory.cpp | 28 +++++++++++++++++++ FlippR-Driver/src/output/factories/Factory.h | 10 +++++++ .../src/output/factories/LampFactory.cpp | 23 +++++++++++---- .../src/output/factories/LampFactory.h | 1 - 4 files changed, 55 insertions(+), 7 deletions(-) diff --git a/FlippR-Driver/src/output/factories/Factory.cpp b/FlippR-Driver/src/output/factories/Factory.cpp index c9ac0d2..c47f422 100644 --- a/FlippR-Driver/src/output/factories/Factory.cpp +++ b/FlippR-Driver/src/output/factories/Factory.cpp @@ -15,7 +15,35 @@ namespace output Factory::Factory(nlohmann::json &object) : object{object} { + this->initialize_port_extenders(); + this->port_extenders = this->object.at("port_extenders"); +} +void Factory::initialize_port_extender(nlohmann::json &extender) +{ + auto i2c_address = extender.at("i2c_address").get(); + auto pin_base = extender.at("pin_base").get(); + this->pin_controller->initialize_port_expander(i2c_address, pin_base); +} + +void Factory::initialize_port_extenders() +{ + for (auto extender : port_extenders) + { + this->initialize_port_extender(extender); + } +} + +uint8_t Factory::get_extender_pin_base(std::string &name) +{ + for (auto extender : port_extenders) + { + if (extender.at("name").get() == name) + { + return extender.at("pin_base").get(); + } + } + return 0; } } diff --git a/FlippR-Driver/src/output/factories/Factory.h b/FlippR-Driver/src/output/factories/Factory.h index 5d8ee19..fba33e8 100644 --- a/FlippR-Driver/src/output/factories/Factory.h +++ b/FlippR-Driver/src/output/factories/Factory.h @@ -8,6 +8,7 @@ #ifndef FLIPPR_DRIVER_FACTORY_H #define FLIPPR_DRIVER_FACTORY_H +#include #include "utility/config.h" #include "json/json.hpp" #include "output/items/Item.h" @@ -24,8 +25,17 @@ public: virtual std::map> getItemMap() = 0; +protected: + void initialize_port_extender(nlohmann::json & extender); + void initialize_port_extenders(); + uint8_t get_extender_pin_base(std::string & name); + protected: nlohmann::json object; + std::shared_ptr pin_controller; + +private: + nlohmann::json port_extenders; }; } diff --git a/FlippR-Driver/src/output/factories/LampFactory.cpp b/FlippR-Driver/src/output/factories/LampFactory.cpp index b176893..472cd76 100644 --- a/FlippR-Driver/src/output/factories/LampFactory.cpp +++ b/FlippR-Driver/src/output/factories/LampFactory.cpp @@ -5,22 +5,33 @@ * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert */ +#include #include "LampFactory.h" - +#include "output/items/detail/Lamp.h" namespace flippR_driver { namespace output { -LampFactory::LampFactory(nlohmann::json &object) : Factory(object) -{ - -} +LampFactory::LampFactory(nlohmann::json &object) : + Factory(object) +{} std::map> LampFactory::getItemMap() { - return std::map>(); + auto lamps = object.at("lamps"); + std::map> lamp_map; + for (auto lamp : lamps) + { + auto name = lamp.at("name").get(); + auto address = lamp.at("address").get(); + auto extender = lamp.at("extender").get(); + auto pin_base = this->get_extender_pin_base(extender); + auto lamp_item = std::make_shared(std::static_pointer_cast(this->pin_controller), address, pin_base, name); + lamp_map.emplace(name, lamp_item); + } + return lamp_map; } } diff --git a/FlippR-Driver/src/output/factories/LampFactory.h b/FlippR-Driver/src/output/factories/LampFactory.h index b7f676e..cd1adb3 100644 --- a/FlippR-Driver/src/output/factories/LampFactory.h +++ b/FlippR-Driver/src/output/factories/LampFactory.h @@ -20,7 +20,6 @@ class LampFactory : Factory public: explicit LampFactory(nlohmann::json & object); std::map> getItemMap() override; - }; }