diff --git a/FlippR-Driver/include/output/items/Solenoid.h b/FlippR-Driver/include/output/items/Solenoid.h index 12a1bed..5fafb54 100644 --- a/FlippR-Driver/include/output/items/Solenoid.h +++ b/FlippR-Driver/include/output/items/Solenoid.h @@ -17,12 +17,12 @@ namespace output { namespace items { -// todo get name? parent calss output_item? class Solenoid : public virtual Item { public: virtual ~Solenoid() = default; + virtual void deactivate() = 0; virtual void trigger() = 0; }; diff --git a/FlippR-Driver/src/output/OutputDriverFactory.cpp b/FlippR-Driver/src/output/OutputDriverFactory.cpp index f557c5b..0e6a962 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.cpp +++ b/FlippR-Driver/src/output/OutputDriverFactory.cpp @@ -39,6 +39,10 @@ std::shared_ptr get_OutputDriver(const std::string & solenoid_conf auto flippers = get_items(solenoid_config_path, driver_board_pin_controller); auto solenoids = get_items(solenoid_config_path, driver_board_pin_controller); + for(auto solenoid : solenoids) { + solenoid.second->deactivate(); + } + auto lamps = get_items(lamp_config_path, driver_board_pin_controller); driver_board_pin_controller->clear(); diff --git a/FlippR-Driver/src/output/items/detail/Solenoid.cpp b/FlippR-Driver/src/output/items/detail/Solenoid.cpp index 70048fb..9864600 100644 --- a/FlippR-Driver/src/output/items/detail/Solenoid.cpp +++ b/FlippR-Driver/src/output/items/detail/Solenoid.cpp @@ -22,7 +22,6 @@ Solenoid::Solenoid(std::shared_ptr pin_controller, con : detail::Item(std::move(name)), DriverBoardItem(pin_controller, address), pin_controller(pin_controller), deactivation_time(deactivation_time) { CLOG(DEBUG, OUTPUT_LOGGER) << "Created solenoid " << name << " with address " << int{address} << " and deactivation-time: " << deactivation_time.count(); - this->trigger(); } void Solenoid::triggerTask() @@ -34,6 +33,10 @@ void Solenoid::triggerTask() this->pin_controller->deactivate(*this); } +void Solenoid::deactivate() { + this->pin_controller->deactivate(*this); +} + void Solenoid::trigger() { CLOG(DEBUG, OUTPUT_LOGGER) << "Trigger Solenoid " << name << " for " << deactivation_time.count() << "ms"; diff --git a/FlippR-Driver/src/output/items/detail/Solenoid.h b/FlippR-Driver/src/output/items/detail/Solenoid.h index 66ee5d2..dfb5e7b 100644 --- a/FlippR-Driver/src/output/items/detail/Solenoid.h +++ b/FlippR-Driver/src/output/items/detail/Solenoid.h @@ -32,6 +32,7 @@ public: Solenoid(std::shared_ptr pin_controller, const uint8_t & address, const std::string & name, const std::chrono::milliseconds & deactivation_time); ~Solenoid() override = default; + void deactivate() override; void trigger() override; private: