still the biggest refactor
This commit is contained in:
@@ -2,15 +2,18 @@
|
||||
// Created by rhetenor on 04.10.18.
|
||||
//
|
||||
|
||||
#include <boost/range/algorithm/copy.hpp>
|
||||
#include <boost/range/adaptor/map.hpp>
|
||||
#include "OutputDriverFactory.h"
|
||||
|
||||
#include "utility/LoggerFactory.h"
|
||||
|
||||
#include "output/impl/OutputDriver.h"
|
||||
#include "output/impl/OutputPinController.h"
|
||||
#include "output/impl/DisplayController.h"
|
||||
|
||||
#include "output/impl/DisplayBoardPinController.h"
|
||||
#include "output/impl/DriverBoardPinController.h"
|
||||
#include "output/impl/SoundBoardPinController.h"
|
||||
#include "DisplayBoardPinController.h"
|
||||
|
||||
namespace flippR_driver
|
||||
{
|
||||
@@ -28,37 +31,30 @@ std::shared_ptr<OutputDriver> get_OutputDriver(std::istream &output_pin_config,
|
||||
{
|
||||
utility::LoggerFactory::CreateOutputLogger();
|
||||
|
||||
std::shared_ptr<std::mutex> output_pin_mutex();
|
||||
std::shared_ptr<std::mutex> output_pin_mutex;
|
||||
|
||||
json output_config;
|
||||
output_pin_config >> output_config;
|
||||
|
||||
json driver_board_config = output_config.at("driver_board");
|
||||
std::shared_ptr<DriverBoardPinController> driver_board_pin_controller(new impl::DriverBoardPinController(parse_pins_driver_board(driver_board_config), output_pin_mutex));
|
||||
auto solenoids = create_solenoids(solenoid_config, driver_board_pin_controller);
|
||||
auto lamps = create_lamps(lamp_config, driver_board_pin_controller);
|
||||
|
||||
json sound_board_config = output_config.at("sound_board");
|
||||
std::shared_ptr<SoundBoardPinController> sound_board_pin_controller(new impl::SoundBoardPinController(parse_pins_sound_board(sound_board_config), output_pin_mutex));
|
||||
auto sounds = create_sounds(sound_config, sound_board_pin_controller);
|
||||
|
||||
json display_board_config = output_config.at("display_board");
|
||||
std::shared_ptr<DisplayBoardPinController> display_board_pin_controller(new impl::DisplayBoardPinController(parse_pins_display_board(display_board_config)));
|
||||
std::unique_ptr<DisplayBoardPinController> display_board_pin_controller(new impl::DisplayBoardPinController(parse_pins_display_board(display_board_config)));
|
||||
auto displays = create_displays(display_config);
|
||||
|
||||
auto solenoids = create_solenoids(solenoid_config, output_gpio_interface);
|
||||
auto lamps = create_lamps(lamp_config, output_gpio_interface);
|
||||
auto sounds = create_sounds(sound_config, output_gpio_interface);
|
||||
// todo
|
||||
std::vector<std::shared_ptr<items::IDisplay>> displays_vec;
|
||||
boost::copy(displays | boost::adaptors::map_values, std::back_inserter(displays_vec));
|
||||
std::unique_ptr<DisplayController> display_controller(new impl::DisplayController(displays_vec, std::move(display_board_pin_controller)));
|
||||
|
||||
auto displays = create_displays(display_config, output_gpio_interface);
|
||||
|
||||
return std::make_shared<OutputDriver>(solenoids, lamps, sounds, displays);
|
||||
}
|
||||
|
||||
OutputPinController* create_OutputGPIOInterface(std::istream &output_pin_config)
|
||||
{
|
||||
json output_config;
|
||||
output_pin_config >> output_config;
|
||||
|
||||
return new OutputGPIOInterface(parse_pins_driver_board(output_config.at("driver_board")),
|
||||
parse_pins_sound(output_config.at("sound_board")),
|
||||
parse_pins_sound(output_config.at("display_board")));
|
||||
return std::make_shared<OutputDriver>(display_controller, solenoids, lamps, sounds, displays);
|
||||
}
|
||||
|
||||
std::map<std::string, uint8_t> parse_pins_driver_board(json &driver_board_config)
|
||||
@@ -124,12 +120,15 @@ std::map<std::string, uint8_t> parse_pins_display(json &display_board_config)
|
||||
try
|
||||
{
|
||||
pins_display["run"] = display_board_config.at("run");
|
||||
//todo
|
||||
}
|
||||
catch(json::exception &e)
|
||||
{
|
||||
CLOG(ERROR, OUTPUT_LOGGER) << "Output pin config file at display_board corrupted: " << e.what();
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
return pins_display;
|
||||
}
|
||||
|
||||
std::map<std::string, std::shared_ptr<items::ISolenoid>> create_solenoids(std::istream &solenoid_config, std::shared_ptr<OutputPinController> output_gpio_interface)
|
||||
@@ -197,7 +196,7 @@ std::chrono::milliseconds get_deactivation_time(nlohmann::json &json)
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<items::Solenoid> create_solenoid(nlohmann::json &solenoid_json, std::shared_ptr<OutputPinController> output_gpio_interface, std::chrono::milliseconds deactivation_time)
|
||||
std::shared_ptr<items::Solenoid> create_solenoid(nlohmann::json &solenoid_json, std::shared_ptr<DriverBoardPinController> &pin_controller, std::chrono::milliseconds deactivation_time)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -209,7 +208,7 @@ std::shared_ptr<items::Solenoid> create_solenoid(nlohmann::json &solenoid_json,
|
||||
deactivation_time = get_deactivation_time(solenoid_json);
|
||||
}
|
||||
|
||||
return std::make_shared<items::Solenoid>(output_gpio_interface, address, name, deactivation_time);
|
||||
return std::make_shared<items::Solenoid>(pin_controller, address, name, deactivation_time);
|
||||
}
|
||||
catch(json::type_error &e)
|
||||
{
|
||||
@@ -218,13 +217,13 @@ std::shared_ptr<items::Solenoid> create_solenoid(nlohmann::json &solenoid_json,
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<items::Lamp> create_lamp(nlohmann::json &lamp_json, std::shared_ptr<OutputPinController> output_gpio_interface)
|
||||
std::shared_ptr<items::Lamp> create_lamp(nlohmann::json &lamp_json, std::shared_ptr<DriverBoardPinController> &pin_controller)
|
||||
{
|
||||
try
|
||||
{
|
||||
std::string name = lamp_json.at("name");
|
||||
auto address = lamp_json.at("address").get<uint8_t>();
|
||||
return std::make_shared<items::Lamp>(output_gpio_interface, address, name);
|
||||
return std::make_shared<items::Lamp>(pin_controller, address, name);
|
||||
}
|
||||
catch(json::type_error &e)
|
||||
{
|
||||
@@ -233,14 +232,14 @@ std::shared_ptr<items::Lamp> create_lamp(nlohmann::json &lamp_json, std::shared_
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<items::Sound> create_sound(nlohmann::json &sound_json, std::shared_ptr<OutputPinController> &output_gpio_interface, std::chrono::milliseconds deactivation_time)
|
||||
std::shared_ptr<items::Sound> create_sound(nlohmann::json &sound_json, std::shared_ptr<SoundBoardPinController> &pin_controller, std::chrono::milliseconds deactivation_time)
|
||||
{
|
||||
try
|
||||
{
|
||||
auto id = sound_json.at("id").get<uint>();
|
||||
std::string description = sound_json.at("description");
|
||||
auto address = sound_json.at("address").get<uint8_t>();
|
||||
return std::make_shared<items::Sound>(output_gpio_interface, address, description, deactivation_time, id);
|
||||
return std::make_shared<items::Sound>(pin_controller, address, description, deactivation_time, id);
|
||||
}
|
||||
catch(json::type_error &e)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user