Impelements and integrates DisplayFactory. Further does some refactoring

This commit is contained in:
Johannes Wendel
2020-01-06 12:42:04 +01:00
parent d90e904b4c
commit 4a520fb12a
21 changed files with 192 additions and 127 deletions

View File

@@ -6,6 +6,7 @@
#include <output/factories/SoundFactory.h>
#include <output/factories/FlipperFactory.h>
#include <output/factories/SolenoidFactory.h>
#include <output/factories/DisplayFactory.h>
#include "OutputDriverFactory.h"
#include "utility/LoggerFactory.h"
@@ -42,94 +43,15 @@ std::shared_ptr<OutputDriver> get_OutputDriver(const std::string & solenoid_conf
auto solenoids = get_items<SolenoidFactory, detail::DriverBoardPinController>(solenoid_config_path, driver_board_pin_controller);
auto lamps = get_items<LampFactory, detail::DriverBoardPinController>(lamp_config_path, driver_board_pin_controller);
auto sound_board_pin_controller = create_SoundBoardPinController();
auto sound_board_pin_controller = std::make_shared<detail::SoundBoardPinController>(output_pin_mutex);
auto sounds = get_items<SoundFactory, detail::SoundBoardPinController>(sound_config_path, sound_board_pin_controller);
auto display_board_pin_controller = std::make_shared<detail::DisplayBoardPinController>();
auto displays = get_items<DisplayFactory, detail::DisplayBoardPinController>(display_config_path, display_board_pin_controller);
auto display_controller = std::make_unique<detail::DisplayController>(displays, display_board_pin_controller);
/*std::unique_ptr<DisplayBoardPinController> display_board_pin_controller(new detail::DisplayBoardPinController(parse_pins_display_board(display_config)));
auto displays = create_displays();
std::unique_ptr<DisplayController> display_controller(new detail::DisplayController(displays, std::move(display_board_pin_controller)));
auto display_map = map_displays(displays);
return std::make_shared<OutputDriver>(std::move(display_controller), solenoids, lamps, sounds, flippers, display_map);*/
}
std::map<std::string, uint8_t> parse_pins_display_board(std::istream &display_config)
{
/* std::string config_file = "display_config.json";
json display_board_config = get_element("display_board", config::displays, config_file);
std::map<std::string, uint8_t> pins_display;
pins_display["run"] = get_value<uint8_t>("run", display_board_config, config_file);
json display_select = display_board_config.at("display_select");
for(int i = 1; i < 6; i++)
{
pins_display["display_select" + std::to_string(i)] = get_value<uint8_t>(std::to_string(i), display_select, config_file);
}
json segment_select = display_board_config.at("segment_select");
pins_display["segment_select_A"] = get_value<uint8_t>("A", segment_select, config_file);
pins_display["segment_select_B"] = get_value<uint8_t>("B", segment_select, config_file);
pins_display["segment_select_C"] = get_value<uint8_t>("C", segment_select, config_file);
json digit_select = display_board_config.at("digit_select");
pins_display["digit_select_A"] = get_value<uint8_t>("A", digit_select, config_file);
pins_display["digit_select_B"] = get_value<uint8_t>("B", digit_select, config_file);
pins_display["digit_select_C"] = get_value<uint8_t>("C", digit_select, config_file);
pins_display["digit_select_D"] = get_value<uint8_t>("D", digit_select, config_file);;
return pins_display;*/
}
std::vector<std::shared_ptr<items::OutputDisplay>> create_displays(std::istream &display_config)
{
/* json displays_json = get_element("displays", config::displays, "display_config.json");
std::vector<std::shared_ptr<items::OutputDisplay>> displays;
for(json &display_json : displays_json)
{
auto display = create_display(display_json);
displays.push_back(display);
}
return displays;*/
}
std::shared_ptr<items::OutputDisplay> create_display(json & display_json)
{
/* std::string config_file = "display_config.json";
auto id = get_value<uint8_t>("id", display_json, config_file);
auto address = get_value<uint8_t>("address", display_json, config_file);
auto digits = get_value<uint8_t>("digits", display_json, config_file);
if(digits == 8)
return std::make_shared<items::detail::EightDigitDisplay>(address, id);
else if(digits == 7)
return std::make_shared<items::detail::SevenDigitDisplay>(address, id);
else
throw new std::logic_error("Display digits can either be 7 or 8");*/
}
std::map<uint8_t, std::shared_ptr<items::Display>> map_displays(const std::vector<std::shared_ptr<items::OutputDisplay>> &displays)
{
std::map<uint8_t, std::shared_ptr<items::Display>> display_map;
for(auto &display : displays)
{
display_map.emplace(display->get_address(), display);
}
return display_map;
}
std::shared_ptr<SoundBoardPinController> create_SoundBoardPinController()
{
return std::shared_ptr<SoundBoardPinController>();
//return std::make_shared<OutputDriver>(std::move(display_controller), solenoids, lamps, sounds, flippers, displays);
}
template<typename FactoryType, typename ControllerType>
@@ -150,6 +72,8 @@ std::map<std::string, std::shared_ptr<items::Item>> get_items(const std::string
CLOG(INFO, OUTPUT_LOGGER) << "File " << config_path << " seems to be corrupted: " << ": " << e.what();
exit(EXIT_FAILURE);
}
return map;
}
}