// // Created by rhetenor on 04.10.18. // #ifndef flippR_driver_OUTPUTDRIVERFACTORY_H #define flippR_driver_OUTPUTDRIVERFACTORY_H #include "output/OutputDriver.h" #include "output/items/detail/Solenoid.h" #include "output/items/detail/Lamp.h" #include "output/items/detail/Sound.h" #include "output/DisplayBoardPinController.h" #include "json/json.hpp" #include namespace flippR_driver { namespace output { namespace OutputDriverFactory { std::shared_ptr get_OutputDriver(std::istream &output_pin_config, std::istream &solenoid_config, std::istream &lamp_config, std::istream &sound_config, std::istream &display_config); namespace { std::map> create_solenoids(std::istream &solenoid_config, std::shared_ptr &pin_controller); std::shared_ptr create_solenoid(nlohmann::json &solenoid_json, std::shared_ptr &pin_controller, std::chrono::milliseconds &deactivation_time); std::map> create_lamps(std::istream &lamp_config, std::shared_ptr &pin_controller); std::shared_ptr create_lamp(nlohmann::json &lamp_json, std::shared_ptr &pin_controller); std::map> create_flippers(std::istream &solenoid_config, std::shared_ptr &pin_controller); std::shared_ptr create_flipper(nlohmann::json &flipper_json, std::shared_ptr &pin_controller); std::map> create_sounds(std::istream &sound_config, std::shared_ptr &pin_controller); std::shared_ptr create_sound(nlohmann::json &sound_json, std::shared_ptr &pin_controller, std::chrono::milliseconds &deactivation_time); std::chrono::milliseconds get_deactivation_time(nlohmann::json &json); std::vector> create_displays(std::istream &display_config); std::map> map_displays(const std::vector> &displays); std::shared_ptr create_display(nlohmann::json &display_json); std::map parse_pins_driver_board(nlohmann::json &driver_board_config); std::map parse_pins_sound_board(nlohmann::json &sound_board_config); std::map parse_pins_display_board(nlohmann::json &display_board_config); } } } } #endif //flippR_driver_OUTPUTDRIVERFACTORY_H