diff --git a/FlippR-Driver/include/output/items/EightDigitDisplay.h b/FlippR-Driver/include/output/items/EightDigitDisplay.h index c3bd494..74cb1b2 100644 --- a/FlippR-Driver/include/output/items/EightDigitDisplay.h +++ b/FlippR-Driver/include/output/items/EightDigitDisplay.h @@ -16,7 +16,7 @@ namespace output namespace items { -class EightDigitDisplay : public Display +class EightDigitDisplay : public virtual Display { public: virtual ~EightDigitDisplay() = default; diff --git a/FlippR-Driver/include/output/items/SevenDigitDisplay.h b/FlippR-Driver/include/output/items/SevenDigitDisplay.h index 6bbbd2a..b2693cb 100644 --- a/FlippR-Driver/include/output/items/SevenDigitDisplay.h +++ b/FlippR-Driver/include/output/items/SevenDigitDisplay.h @@ -16,7 +16,7 @@ namespace output namespace items { -class SevenDigitDisplay : public Display +class SevenDigitDisplay : public virtual Display { public: virtual ~SevenDigitDisplay() = default; diff --git a/FlippR-Driver/src/output/OutputDriverFactory.cpp b/FlippR-Driver/src/output/OutputDriverFactory.cpp index 00dfaa6..6c6a3d5 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.cpp +++ b/FlippR-Driver/src/output/OutputDriverFactory.cpp @@ -16,8 +16,6 @@ #include "output/detail/DisplayBoardPinController.h" #include "output/detail/DriverBoardPinController.h" -#include "output/items/detail/EightDigitDisplay.h" -#include "output/items/detail/SevenDigitDisplay.h" #include "output/items/Flipper.h" namespace flippR_driver @@ -39,23 +37,23 @@ std::shared_ptr get_OutputDriver(const std::string & solenoid_conf auto output_pin_mutex = std::make_shared(); std::shared_ptr driver_board_pin_controller(new detail::DriverBoardPinController(output_pin_mutex)); - auto flippers = get_items(solenoid_config_path, driver_board_pin_controller); - auto solenoids = get_items(solenoid_config_path, driver_board_pin_controller); - auto lamps = get_items(lamp_config_path, driver_board_pin_controller); + auto flippers = get_items(solenoid_config_path, driver_board_pin_controller); + auto solenoids = get_items(solenoid_config_path, driver_board_pin_controller); + auto lamps = get_items(lamp_config_path, driver_board_pin_controller); auto sound_board_pin_controller = std::make_shared(output_pin_mutex); - auto sounds = get_items(sound_config_path, sound_board_pin_controller); + auto sounds = get_items(sound_config_path, sound_board_pin_controller); auto display_board_pin_controller = std::make_shared(); - auto displays = get_items(display_config_path, display_board_pin_controller); + auto displays = get_items(display_config_path, display_board_pin_controller); auto display_controller = std::make_unique(displays, display_board_pin_controller); - //return std::make_shared(std::move(display_controller), solenoids, lamps, sounds, flippers, displays); + return std::make_shared(std::move(display_controller), solenoids, lamps, sounds, flippers, displays); } -template -std::map> get_items(const std::string &config_path, std::shared_ptr pin_controller) +template +std::map> get_items(const std::string &config_path, std::shared_ptr pin_controller) { std::ifstream config_stream{config_path}; nlohmann::json config_json; @@ -63,7 +61,7 @@ std::map> get_items(const std::string FactoryType factory{config_json, std::static_pointer_cast(pin_controller)}; - std::map> map; + std::map> map; try{ map = factory.getItemMap(); } diff --git a/FlippR-Driver/src/output/OutputDriverFactory.h b/FlippR-Driver/src/output/OutputDriverFactory.h index ad2680e..97bcfb2 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.h +++ b/FlippR-Driver/src/output/OutputDriverFactory.h @@ -28,8 +28,8 @@ std::shared_ptr get_OutputDriver(const std::string & solenoid_conf const std::string & sound_config_path, const std::string & display_config_path); -template -std::map> get_items(const std::string & config_path, std::shared_ptr pin_controller); +template +std::map> get_items(const std::string & config_path, std::shared_ptr pin_controller); } } diff --git a/FlippR-Driver/src/output/detail/DisplayController.cpp b/FlippR-Driver/src/output/detail/DisplayController.cpp index 882dbaf..03e725c 100644 --- a/FlippR-Driver/src/output/detail/DisplayController.cpp +++ b/FlippR-Driver/src/output/detail/DisplayController.cpp @@ -18,7 +18,7 @@ namespace output namespace detail { -DisplayController::DisplayController(std::map> & displays, +DisplayController::DisplayController(std::map> & displays, std::shared_ptr pin_controller ) : pin_controller{pin_controller}, is_running(true) diff --git a/FlippR-Driver/src/output/detail/DisplayController.h b/FlippR-Driver/src/output/detail/DisplayController.h index 0ccf408..fb2d75f 100644 --- a/FlippR-Driver/src/output/detail/DisplayController.h +++ b/FlippR-Driver/src/output/detail/DisplayController.h @@ -25,7 +25,7 @@ namespace detail class DisplayController : public output::DisplayController { public: - explicit DisplayController(std::map> &displays, std::shared_ptr pin_controller); + explicit DisplayController(std::map> &displays, std::shared_ptr pin_controller); ~DisplayController() override; void activate_displays() const override; diff --git a/FlippR-Driver/src/output/factories/DisplayFactory.cpp b/FlippR-Driver/src/output/factories/DisplayFactory.cpp index 3ad8d3e..c3a5f6c 100644 --- a/FlippR-Driver/src/output/factories/DisplayFactory.cpp +++ b/FlippR-Driver/src/output/factories/DisplayFactory.cpp @@ -23,9 +23,9 @@ DisplayFactory::DisplayFactory(nlohmann::json &object, std::shared_ptrset_pin_map(this->pin_map); } -std::map> DisplayFactory::getItemMap() +std::map> DisplayFactory::getItemMap() { - std::map> display_map; + std::map> display_map; auto displays = this->object.at(config_path::display_list); for (auto & display : displays) { @@ -33,9 +33,9 @@ std::map> DisplayFactory::getItemMap() auto address = display.at(config_path::item_address).get(); auto digits = display.at(config_path::display_digits).get(); if (digits == 8) - display_map.emplace(std::string{static_cast(id)}, std::make_shared(address, id)); + display_map.emplace(std::string{static_cast(id)}, std::dynamic_pointer_cast(std::make_shared(address, id))); else if (digits == 7) - display_map.emplace(std::string{static_cast(id)}, std::make_shared(address, id)); + display_map.emplace(std::string{static_cast(id)}, std::dynamic_pointer_cast(std::make_shared(address, id))); else throw new std::logic_error{"Display digits can either be 7 or 8"}; } diff --git a/FlippR-Driver/src/output/factories/DisplayFactory.h b/FlippR-Driver/src/output/factories/DisplayFactory.h index 12289e3..2066c85 100644 --- a/FlippR-Driver/src/output/factories/DisplayFactory.h +++ b/FlippR-Driver/src/output/factories/DisplayFactory.h @@ -20,7 +20,8 @@ class DisplayFactory : ItemFactory { public: explicit DisplayFactory(nlohmann::json & object, std::shared_ptr pin_controller); - std::map> getItemMap() override; + + std::map> getItemMap(); private: void create_pin_map(); diff --git a/FlippR-Driver/src/output/factories/FlipperFactory.cpp b/FlippR-Driver/src/output/factories/FlipperFactory.cpp index 1f07e8c..b384a1a 100644 --- a/FlippR-Driver/src/output/factories/FlipperFactory.cpp +++ b/FlippR-Driver/src/output/factories/FlipperFactory.cpp @@ -18,10 +18,10 @@ FlipperFactory::FlipperFactory(nlohmann::json &object, std::shared_ptr> FlipperFactory::getItemMap() +std::map> FlipperFactory::getItemMap() { auto flippers = this->object.at(config_path::flipper_path); - std::map> flipper_map; + std::map> flipper_map; for (auto flipper : flippers) { auto name = flipper.at(config_path::item_name).get(); diff --git a/FlippR-Driver/src/output/factories/FlipperFactory.h b/FlippR-Driver/src/output/factories/FlipperFactory.h index 0d4aadc..6c15acf 100644 --- a/FlippR-Driver/src/output/factories/FlipperFactory.h +++ b/FlippR-Driver/src/output/factories/FlipperFactory.h @@ -9,6 +9,7 @@ #define FLIPPR_DRIVER_FLIPPERFACTORY_H #include "ItemFactory.h" +#include "output/items/Flipper.h" #include namespace flippR_driver @@ -20,7 +21,7 @@ class FlipperFactory : ItemFactory { public: explicit FlipperFactory(nlohmann::json & object, std::shared_ptr pin_controller); - std::map > getItemMap() override; + std::map > getItemMap(); }; diff --git a/FlippR-Driver/src/output/factories/ItemFactory.h b/FlippR-Driver/src/output/factories/ItemFactory.h index f0fdf30..84c9ce4 100644 --- a/FlippR-Driver/src/output/factories/ItemFactory.h +++ b/FlippR-Driver/src/output/factories/ItemFactory.h @@ -36,6 +36,8 @@ namespace config_path const char solenoid_path[] = "solenoids"; + const char lamps_path[] = "lamps"; + const char display_board[] = "display_board"; const char run_pin[] = "run"; const char display_select[] = "display_select"; @@ -50,7 +52,7 @@ class ItemFactory public: ItemFactory(nlohmann::json &object, std::shared_ptr pin_controller); - virtual std::map> getItemMap() = 0; + //virtual std::map> getItemMap() = 0; protected: void initialize_port_extender(nlohmann::json & extender); diff --git a/FlippR-Driver/src/output/factories/LampFactory.cpp b/FlippR-Driver/src/output/factories/LampFactory.cpp index 7cd3f2f..8f990e3 100644 --- a/FlippR-Driver/src/output/factories/LampFactory.cpp +++ b/FlippR-Driver/src/output/factories/LampFactory.cpp @@ -18,15 +18,15 @@ LampFactory::LampFactory(nlohmann::json &object, std::shared_ptr> LampFactory::getItemMap() +std::map> LampFactory::getItemMap() { - auto lamps = this->object.at("lamps"); - std::map> lamp_map; + auto lamps = this->object.at(config_path::lamps_path); + 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 name = lamp.at(config_path::item_name).get(); + auto address = lamp.at(config_path::item_address).get(); + auto extender = lamp.at(config_path::item_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); diff --git a/FlippR-Driver/src/output/factories/LampFactory.h b/FlippR-Driver/src/output/factories/LampFactory.h index 9fe7e7a..2bc2b94 100644 --- a/FlippR-Driver/src/output/factories/LampFactory.h +++ b/FlippR-Driver/src/output/factories/LampFactory.h @@ -10,6 +10,7 @@ #include "output/DriverBoardPinController.h" #include "ItemFactory.h" +#include "output/items/Lamp.h" namespace flippR_driver { @@ -20,7 +21,7 @@ class LampFactory : ItemFactory { public: explicit LampFactory(nlohmann::json & object, std::shared_ptr pin_controller); - std::map> getItemMap() override; + std::map> getItemMap(); }; } diff --git a/FlippR-Driver/src/output/factories/SolenoidFactory.cpp b/FlippR-Driver/src/output/factories/SolenoidFactory.cpp index 4224ed6..3193058 100644 --- a/FlippR-Driver/src/output/factories/SolenoidFactory.cpp +++ b/FlippR-Driver/src/output/factories/SolenoidFactory.cpp @@ -22,10 +22,10 @@ SolenoidFactory::SolenoidFactory(nlohmann::json &object, std::shared_ptr> SolenoidFactory::getItemMap() +std::map> SolenoidFactory::getItemMap() { auto solenoids = this->object.at(config_path::solenoid_path); - std::map> solenoid_map; + std::map> solenoid_map; for (auto solenoid : solenoids) { diff --git a/FlippR-Driver/src/output/factories/SolenoidFactory.h b/FlippR-Driver/src/output/factories/SolenoidFactory.h index 600a18b..908462a 100644 --- a/FlippR-Driver/src/output/factories/SolenoidFactory.h +++ b/FlippR-Driver/src/output/factories/SolenoidFactory.h @@ -10,6 +10,7 @@ #include "output/DriverBoardPinController.h" #include "ItemFactory.h" +#include "output/items/Solenoid.h" namespace flippR_driver { @@ -21,7 +22,7 @@ class SolenoidFactory : public ItemFactory public: explicit SolenoidFactory(nlohmann::json &object, std::shared_ptr pin_controller); - std::map> getItemMap() override; + std::map> getItemMap(); private: uint8_t deactivation_time; diff --git a/FlippR-Driver/src/output/factories/SoundFactory.cpp b/FlippR-Driver/src/output/factories/SoundFactory.cpp index 9154a34..18bc269 100644 --- a/FlippR-Driver/src/output/factories/SoundFactory.cpp +++ b/FlippR-Driver/src/output/factories/SoundFactory.cpp @@ -25,10 +25,10 @@ SoundFactory::SoundFactory(nlohmann::json &object, std::shared_ptrset_address_pins(); } -std::map> SoundFactory::getItemMap() +std::map> SoundFactory::getItemMap() { auto sounds = this->object.at(config_path::sound_path); - std::map> sound_map; + std::map> sound_map; for (auto sound : sounds) { auto name = sound.at(config_path::item_name).get(); diff --git a/FlippR-Driver/src/output/factories/SoundFactory.h b/FlippR-Driver/src/output/factories/SoundFactory.h index c36dccb..0c8990b 100644 --- a/FlippR-Driver/src/output/factories/SoundFactory.h +++ b/FlippR-Driver/src/output/factories/SoundFactory.h @@ -21,7 +21,7 @@ class SoundFactory : ItemFactory { public: explicit SoundFactory(nlohmann::json & object, std::shared_ptr pin_controller); - std::map> getItemMap() override; + std::map> getItemMap(); private: void set_fire_pin(); diff --git a/FlippR-Driver/src/output/items/OutputDisplay.h b/FlippR-Driver/src/output/items/OutputDisplay.h index f67e1fd..e8fb8b6 100644 --- a/FlippR-Driver/src/output/items/OutputDisplay.h +++ b/FlippR-Driver/src/output/items/OutputDisplay.h @@ -21,7 +21,7 @@ namespace output namespace items { -class OutputDisplay : public Display +class OutputDisplay : public virtual Display { public: diff --git a/FlippR-Driver/src/output/items/detail/Display.h b/FlippR-Driver/src/output/items/detail/Display.h index 4910e6f..3533664 100644 --- a/FlippR-Driver/src/output/items/detail/Display.h +++ b/FlippR-Driver/src/output/items/detail/Display.h @@ -21,7 +21,7 @@ namespace items namespace detail { -class Display : public items::OutputDisplay +class Display : public virtual items::OutputDisplay { public: Display(const uint8_t & address, const uint8_t & id); diff --git a/FlippR-Driver/src/output/items/detail/EightDigitDisplay.h b/FlippR-Driver/src/output/items/detail/EightDigitDisplay.h index 22ae3a1..fd56eaf 100644 --- a/FlippR-Driver/src/output/items/detail/EightDigitDisplay.h +++ b/FlippR-Driver/src/output/items/detail/EightDigitDisplay.h @@ -20,7 +20,7 @@ namespace items namespace detail { -class EightDigitDisplay : public items::detail::Display, public items::EightDigitDisplay +class EightDigitDisplay : public virtual items::detail::Display, public virtual items::EightDigitDisplay { public: EightDigitDisplay(uint8_t address, uint8_t id) : diff --git a/FlippR-Driver/src/output/items/detail/Flipper.cpp b/FlippR-Driver/src/output/items/detail/Flipper.cpp index 4fb5541..b2dab31 100644 --- a/FlippR-Driver/src/output/items/detail/Flipper.cpp +++ b/FlippR-Driver/src/output/items/detail/Flipper.cpp @@ -23,7 +23,7 @@ namespace detail Flipper::Flipper(std::shared_ptr pin_controller, const uint8_t & address, const uint8_t & pin_base, const std::string & name) : Item(std::move(name)), DriverBoardItem(pin_controller, address, pin_base), pin_controller(std::move(pin_controller)) { - CLOG(INFO , OUTPUT_LOGGER) << "Created flipper \"" << name << "\" with pin-base " << int(pin_base) << " and address " << int(address); + //CLOG(INFO , OUTPUT_LOGGER) << "Created flipper \"" << name << "\" with pin-base " << int(pin_base) << " and address " << int(address); } Flipper::~Flipper() @@ -33,13 +33,13 @@ Flipper::~Flipper() void Flipper::activate() { - CLOG(INFO, OUTPUT_LOGGER) << "Flipper " << name << "activated"; + CLOG(INFO, OUTPUT_LOGGER) << "Flipper " << name << " activated"; this->pin_controller->activate(*this); } void Flipper::deactivate() { - CLOG(INFO, OUTPUT_LOGGER) << "Flipper " << name << "deactivated"; + CLOG(INFO, OUTPUT_LOGGER) << "Flipper " << name << " deactivated"; this->pin_controller->deactivate(*this); } diff --git a/FlippR-Driver/src/output/items/detail/SevenDigitDisplay.h b/FlippR-Driver/src/output/items/detail/SevenDigitDisplay.h index c5d0f19..d72d5b5 100644 --- a/FlippR-Driver/src/output/items/detail/SevenDigitDisplay.h +++ b/FlippR-Driver/src/output/items/detail/SevenDigitDisplay.h @@ -18,7 +18,7 @@ namespace items namespace detail { -class SevenDigitDisplay : public items::detail::Display, public items::SevenDigitDisplay +class SevenDigitDisplay : public virtual items::detail::Display, public virtual items::SevenDigitDisplay { public: SevenDigitDisplay(uint8_t address, uint8_t id) :