deactivate solenoids on creation 2b safe

This commit is contained in:
Jonas Zeunert
2022-06-06 23:17:53 +02:00
parent 6c9512669d
commit cb1b3abd34
4 changed files with 10 additions and 2 deletions

View File

@@ -17,12 +17,12 @@ namespace output
{ {
namespace items namespace items
{ {
// todo get name? parent calss output_item?
class Solenoid : public virtual Item class Solenoid : public virtual Item
{ {
public: public:
virtual ~Solenoid() = default; virtual ~Solenoid() = default;
virtual void deactivate() = 0;
virtual void trigger() = 0; virtual void trigger() = 0;
}; };

View File

@@ -39,6 +39,10 @@ std::shared_ptr<OutputDriver> get_OutputDriver(const std::string & solenoid_conf
auto flippers = get_items<FlipperFactory, detail::DriverBoardPinController, items::Flipper>(solenoid_config_path, driver_board_pin_controller); auto flippers = get_items<FlipperFactory, detail::DriverBoardPinController, items::Flipper>(solenoid_config_path, driver_board_pin_controller);
auto solenoids = get_items<SolenoidFactory, detail::DriverBoardPinController, items::Solenoid>(solenoid_config_path, driver_board_pin_controller); auto solenoids = get_items<SolenoidFactory, detail::DriverBoardPinController, items::Solenoid>(solenoid_config_path, driver_board_pin_controller);
for(auto solenoid : solenoids) {
solenoid.second->deactivate();
}
auto lamps = get_items<LampFactory, detail::DriverBoardPinController, items::Lamp>(lamp_config_path, driver_board_pin_controller); auto lamps = get_items<LampFactory, detail::DriverBoardPinController, items::Lamp>(lamp_config_path, driver_board_pin_controller);
driver_board_pin_controller->clear(); driver_board_pin_controller->clear();

View File

@@ -22,7 +22,6 @@ Solenoid::Solenoid(std::shared_ptr<DriverBoardPinController> pin_controller, con
: detail::Item(std::move(name)), DriverBoardItem(pin_controller, address), pin_controller(pin_controller), deactivation_time(deactivation_time) : 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(); CLOG(DEBUG, OUTPUT_LOGGER) << "Created solenoid " << name << " with address " << int{address} << " and deactivation-time: " << deactivation_time.count();
this->trigger();
} }
void Solenoid::triggerTask() void Solenoid::triggerTask()
@@ -34,6 +33,10 @@ void Solenoid::triggerTask()
this->pin_controller->deactivate(*this); this->pin_controller->deactivate(*this);
} }
void Solenoid::deactivate() {
this->pin_controller->deactivate(*this);
}
void Solenoid::trigger() void Solenoid::trigger()
{ {
CLOG(DEBUG, OUTPUT_LOGGER) << "Trigger Solenoid " << name << " for " << deactivation_time.count() << "ms"; CLOG(DEBUG, OUTPUT_LOGGER) << "Trigger Solenoid " << name << " for " << deactivation_time.count() << "ms";

View File

@@ -32,6 +32,7 @@ public:
Solenoid(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const std::string & name, const std::chrono::milliseconds & deactivation_time); Solenoid(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const std::string & name, const std::chrono::milliseconds & deactivation_time);
~Solenoid() override = default; ~Solenoid() override = default;
void deactivate() override;
void trigger() override; void trigger() override;
private: private: