Integrates SoundFactory

This commit is contained in:
Johannes Wendel
2019-12-29 15:55:43 +01:00
parent bb1a74613a
commit 73ec82b42f
14 changed files with 41 additions and 50 deletions

View File

@@ -401,7 +401,8 @@
}, },
{ {
"address" : 78, "address" : 78,
"name" : "100000 Points" "name" : "100000 Points",
"extender" : "extender_1"
} }
] ]
} }

View File

@@ -2,6 +2,7 @@
// Created by rhetenor on 04.10.18. // Created by rhetenor on 04.10.18.
// //
#include <output/factories/LampFactory.h>
#include "OutputDriverFactory.h" #include "OutputDriverFactory.h"
#include "utility/LoggerFactory.h" #include "utility/LoggerFactory.h"
@@ -37,7 +38,7 @@ std::shared_ptr<OutputDriver> get_OutputDriver(std::istream& solenoid_config,
std::istream& sound_config, std::istream& sound_config,
std::istream& display_config) std::istream& display_config)
{ {
/* utility::LoggerFactory::CreateOutputLogger(); utility::LoggerFactory::CreateOutputLogger();
solenoid_config >> config::solenoids; solenoid_config >> config::solenoids;
lamp_config >> config::lamps; lamp_config >> config::lamps;
@@ -47,11 +48,21 @@ std::shared_ptr<OutputDriver> get_OutputDriver(std::istream& solenoid_config,
auto output_pin_mutex = std::make_shared<std::mutex>(); auto output_pin_mutex = std::make_shared<std::mutex>();
std::shared_ptr<DriverBoardPinController> driver_board_pin_controller(new detail::DriverBoardPinController(output_pin_mutex)); std::shared_ptr<DriverBoardPinController> driver_board_pin_controller(new detail::DriverBoardPinController(output_pin_mutex));
auto solenoids = create_solenoids(driver_board_pin_controller); /* auto solenoids = create_solenoids(driver_board_pin_controller);
auto flippers = create_flippers(driver_board_pin_controller); auto flippers = create_flippers(driver_board_pin_controller);*/
auto lamps = create_lamps(driver_board_pin_controller);
auto sound_board_pin_controller = create_SoundBoardPinController(); LampFactory lamp_factory(config::lamps, driver_board_pin_controller);
try
{
auto lamps = lamp_factory.getItemMap();
}
catch(json::exception &e)
{
CLOG(INFO, OUTPUT_LOGGER) << "File " << "sound_config.json" << " seems to be corrupted: " << ": " << e.what();
exit(EXIT_FAILURE);
}
/*auto sound_board_pin_controller = create_SoundBoardPinController();
auto sounds = create_sounds(sound_board_pin_controller); auto sounds = create_sounds(sound_board_pin_controller);
std::unique_ptr<DisplayBoardPinController> display_board_pin_controller(new detail::DisplayBoardPinController(parse_pins_display_board(display_config))); std::unique_ptr<DisplayBoardPinController> display_board_pin_controller(new detail::DisplayBoardPinController(parse_pins_display_board(display_config)));
@@ -124,32 +135,6 @@ std::shared_ptr<items::detail::Flipper> create_flipper(nlohmann::json &flipper_j
return std::make_shared<items::detail::Flipper>(pin_controller, address, pin_base, name); return std::make_shared<items::detail::Flipper>(pin_controller, address, pin_base, name);
} }
std::map<std::string, std::shared_ptr<items::Lamp>> create_lamps(std::istream &lamp_config, std::shared_ptr<DriverBoardPinController> &pin_controller)
{
json port_extenders = get_element("port_extenders", config::lamps, "lamp_config.json");
initialize_port_extenders(port_extenders, pin_controller.get(), "lamp_config.json");
json lamps_json = get_element("lamps", config::lamps, "lamp_config.json");
std::map<std::string, std::shared_ptr<items::Lamp>> lamps;
for(auto &lamp_json : lamps_json)
{
auto lamp = create_lamp(lamp_json, port_extenders, pin_controller);
lamps.emplace(lamp->get_name(), lamp);
}
return lamps;
}
std::shared_ptr<items::detail::Lamp> create_lamp(json &lamp_json, json & port_extenders, std::shared_ptr<DriverBoardPinController> &pin_controller)
{
std::string config_file_name = "lamps_config.json";
uint8_t pin_base = get_pin_base(lamp_json, port_extenders, config_file_name);
auto address = get_value<uint8_t>("address", lamp_json, config_file_name);
auto name = get_value<std::string>("name", lamp_json, config_file_name);
return std::make_shared<items::detail::Lamp>(pin_controller, address, pin_base, name);
}
std::map<std::string, std::shared_ptr<items::Sound>> create_sounds(std::istream &sound_config, std::shared_ptr<SoundBoardPinController> &pin_controller) std::map<std::string, std::shared_ptr<items::Sound>> create_sounds(std::istream &sound_config, std::shared_ptr<SoundBoardPinController> &pin_controller)
{ {
json port_extenders = get_element("port_extenders", config::sounds, "sound_config.json"); json port_extenders = get_element("port_extenders", config::sounds, "sound_config.json");

View File

@@ -34,9 +34,6 @@ std::shared_ptr<items::detail::Solenoid> create_solenoid(nlohmann::json &solenoi
std::map<std::string, std::shared_ptr<items::Flipper>> create_flippers(std::shared_ptr<DriverBoardPinController> &pin_controller); std::map<std::string, std::shared_ptr<items::Flipper>> create_flippers(std::shared_ptr<DriverBoardPinController> &pin_controller);
std::shared_ptr<items::detail::Flipper> create_flipper(nlohmann::json &flipper_json, nlohmann::json &port_extenders, std::shared_ptr<DriverBoardPinController> &pin_controller); std::shared_ptr<items::detail::Flipper> create_flipper(nlohmann::json &flipper_json, nlohmann::json &port_extenders, std::shared_ptr<DriverBoardPinController> &pin_controller);
std::map<std::string, std::shared_ptr<items::Lamp>> create_lamps(std::shared_ptr<DriverBoardPinController> &pin_controller);
std::shared_ptr<items::detail::Lamp> create_lamp(nlohmann::json &lamp_json, nlohmann::json & port_extenders, std::shared_ptr<DriverBoardPinController> &pin_controller);
std::shared_ptr<SoundBoardPinController> create_SoundBoardPinController(); std::shared_ptr<SoundBoardPinController> create_SoundBoardPinController();
std::map<std::string, std::shared_ptr<items::Sound>> create_sounds(std::shared_ptr<SoundBoardPinController> &pin_controller); std::map<std::string, std::shared_ptr<items::Sound>> create_sounds(std::shared_ptr<SoundBoardPinController> &pin_controller);
std::shared_ptr<items::detail::Sound> create_sound(nlohmann::json &sound_json, nlohmann::json &port_extenders, std::shared_ptr<SoundBoardPinController> &pin_controller, std::chrono::milliseconds &deactivation_time); std::shared_ptr<items::detail::Sound> create_sound(nlohmann::json &sound_json, nlohmann::json &port_extenders, std::shared_ptr<SoundBoardPinController> &pin_controller, std::chrono::milliseconds &deactivation_time);

View File

@@ -5,6 +5,7 @@
* Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert
*/ */
#include <output/DisplayBoardPinController.h>
#include "DisplayFactory.h" #include "DisplayFactory.h"
@@ -13,7 +14,8 @@ namespace flippR_driver
namespace output namespace output
{ {
DisplayFactory::DisplayFactory(nlohmann::json &object) : Factory(object) DisplayFactory::DisplayFactory(nlohmann::json &object, std::shared_ptr<DisplayBoardPinController> pin_controller) :
Factory{object, pin_controller}
{ {
} }

View File

@@ -18,7 +18,7 @@ namespace output
class DisplayFactory : Factory class DisplayFactory : Factory
{ {
public: public:
explicit DisplayFactory(nlohmann::json & object); explicit DisplayFactory(nlohmann::json & object, std::shared_ptr<DisplayBoardPinController> pin_controller);
std::map<std::string, std::shared_ptr<items::Item>> getItemMap() override; std::map<std::string, std::shared_ptr<items::Item>> getItemMap() override;
}; };

View File

@@ -12,11 +12,12 @@ namespace flippR_driver
namespace output namespace output
{ {
Factory::Factory(nlohmann::json &object) : Factory::Factory(nlohmann::json &object, std::shared_ptr<PinController> pin_controller) :
object{object} pin_controller{pin_controller}
{ {
this->object = object;
this->initialize_port_extenders(); this->initialize_port_extenders();
this->port_extenders = this->object.at("port_extenders"); this->port_extenders = object.at("port_extenders");
} }
void Factory::initialize_port_extender(nlohmann::json &extender) void Factory::initialize_port_extender(nlohmann::json &extender)

View File

@@ -21,7 +21,7 @@ namespace output
class Factory class Factory
{ {
public: public:
Factory(nlohmann::json &object); Factory(nlohmann::json &object, std::shared_ptr<PinController> pin_controller);
virtual std::map<std::string, std::shared_ptr<items::Item>> getItemMap() = 0; virtual std::map<std::string, std::shared_ptr<items::Item>> getItemMap() = 0;

View File

@@ -5,6 +5,7 @@
* Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert
*/ */
#include <output/DriverBoardPinController.h>
#include "FlipperFactory.h" #include "FlipperFactory.h"
namespace flippR_driver namespace flippR_driver
@@ -12,7 +13,8 @@ namespace flippR_driver
namespace output namespace output
{ {
FlipperFactory::FlipperFactory(nlohmann::json &object) : Factory(object) FlipperFactory::FlipperFactory(nlohmann::json &object, std::shared_ptr<DriverBoardPinController> pin_controller) :
Factory{object, pin_controller}
{ {
} }

View File

@@ -19,7 +19,7 @@ namespace output
class FlipperFactory : Factory class FlipperFactory : Factory
{ {
public: public:
explicit FlipperFactory(nlohmann::json & object); explicit FlipperFactory(nlohmann::json & object, std::shared_ptr<DriverBoardPinController> pin_controller);
std::map <std::string, std::shared_ptr<items::Item>> getItemMap() override; std::map <std::string, std::shared_ptr<items::Item>> getItemMap() override;
}; };

View File

@@ -14,13 +14,13 @@ namespace flippR_driver
namespace output namespace output
{ {
LampFactory::LampFactory(nlohmann::json &object) : LampFactory::LampFactory(nlohmann::json &object, std::shared_ptr<DriverBoardPinController> pin_controller) :
Factory(object) Factory{object, pin_controller}
{} {}
std::map<std::string, std::shared_ptr<items::Item>> LampFactory::getItemMap() std::map<std::string, std::shared_ptr<items::Item>> LampFactory::getItemMap()
{ {
auto lamps = object.at("lamps"); auto lamps = this->object.at("lamps");
std::map<std::string, std::shared_ptr<items::Item>> lamp_map; std::map<std::string, std::shared_ptr<items::Item>> lamp_map;
for (auto lamp : lamps) for (auto lamp : lamps)
{ {

View File

@@ -8,6 +8,7 @@
#ifndef FLIPPR_DRIVER_LAMPFACTORY_H #ifndef FLIPPR_DRIVER_LAMPFACTORY_H
#define FLIPPR_DRIVER_LAMPFACTORY_H #define FLIPPR_DRIVER_LAMPFACTORY_H
#include <output/DriverBoardPinController.h>
#include "Factory.h" #include "Factory.h"
namespace flippR_driver namespace flippR_driver
@@ -18,7 +19,7 @@ namespace output
class LampFactory : Factory class LampFactory : Factory
{ {
public: public:
explicit LampFactory(nlohmann::json & object); explicit LampFactory(nlohmann::json & object, std::shared_ptr<DriverBoardPinController> pin_controller);
std::map<std::string, std::shared_ptr<items::Item>> getItemMap() override; std::map<std::string, std::shared_ptr<items::Item>> getItemMap() override;
}; };

View File

@@ -4,13 +4,15 @@
* Created on: December 28, 2019 * Created on: December 28, 2019
* Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert
*/ */
#include <output/SoundBoardPinController.h>
#include "SoundFactory.h" #include "SoundFactory.h"
namespace flippR_driver namespace flippR_driver
{ {
namespace output namespace output
{ {
SoundFactory::SoundFactory(nlohmann::json &object) : Factory(object) SoundFactory::SoundFactory(nlohmann::json &object, std::shared_ptr<SoundBoardPinController> pin_controller) :
Factory{object, pin_controller}
{ {
} }

View File

@@ -18,7 +18,7 @@ namespace output
class SoundFactory : Factory class SoundFactory : Factory
{ {
public: public:
explicit SoundFactory(nlohmann::json & object); explicit SoundFactory(nlohmann::json & object, std::shared_ptr<SoundBoardPinController> pin_controller);
std::map<std::string, std::shared_ptr<items::Item>> getItemMap() override; std::map<std::string, std::shared_ptr<items::Item>> getItemMap() override;
}; };

View File

@@ -26,7 +26,7 @@ Lamp::Lamp(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8
activated(false), activated(false),
activation_time(10) 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() void Lamp::activate()