/* * OutputDriver.cpp * * Created on: Aug 2, 2018 * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert */ #include #include #include #include "output/OutputDriver.h" #include "utility/config.h" namespace flippR_driver { namespace output { using namespace items; OutputDriver::OutputDriver(std::unique_ptr display_controller, std::map> solenoids, std::map> lamps, std::map> sounds, std::map> flippers, std::map> displays): display_controller(std::move(display_controller)), solenoids(std::move(solenoids)), lamps(std::move(lamps)), sounds(std::move(sounds)), flippers(std::move(flippers)), displays(std::move(displays)) { CLOG(INFO, OUTPUT_LOGGER) << "Created OutputDriver"; } void OutputDriver::activate_displays() const { display_controller->activate_displays(); } void OutputDriver::deactivate_displays() const { display_controller->deactivate_displays(); } void OutputDriver::deactivate_all_lamps() const { std::for_each(lamps.begin(), lamps.end(), [](std::pair> lamp){lamp.second->deactivate();}); } void OutputDriver::activate_all_lamps() const { std::for_each(lamps.begin(), lamps.end(), [](std::pair> lamp){lamp.second->activate();}); } void OutputDriver::rotate_all_lamps() const { for(const auto & lamp : this->lamps) { lamp.second->activate(); // ToDo is this thread safe?? std::this_thread::sleep_for(lamp.second->get_activation_time()); lamp.second->deactivate(); } } void OutputDriver::activate_all_flipper_relays() const { for(auto flipper_relay : this->flippers) { flipper_relay.second->activate(); } } void OutputDriver::deactivate_all_flipper_relays() const { for(auto flipper_relay : this->flippers) { flipper_relay.second->deactivate(); } } std::vector> OutputDriver::get_sounds() const { std::vector> sounds; // TODO: why a copy? boost::copy(this->sounds | boost::adaptors::map_values, std::back_inserter(sounds)); return sounds; } std::vector> OutputDriver::get_displays() const { std::vector> displays; boost::copy(this->displays | boost::adaptors::map_values, std::back_inserter(displays)); return displays; } std::vector> OutputDriver::get_lamps() const { std::vector> lamps; boost::copy(this->lamps | boost::adaptors::map_values, std::back_inserter(lamps)); return lamps; } std::vector> OutputDriver::get_flippers() const { std::vector> flippers; boost::copy(this->flippers | boost::adaptors::map_values, std::back_inserter(flippers)); return flippers; } std::vector> OutputDriver::get_solenoids() const { std::vector> solenoids; boost::copy(this->solenoids | boost::adaptors::map_values, std::back_inserter(solenoids)); return solenoids; } boost::optional> OutputDriver::get_lamp(const std::string &name) const { return this->lamps.find(name)->second; } boost::optional> OutputDriver::get_solenoid(const std::string &name) const { return this->solenoids.find(name)->second; } boost::optional> OutputDriver::get_sound(const std::string &name) const { return this->sounds.find(name)->second; } boost::optional> OutputDriver::get_flipper(const std::string &name) const { return this->flippers.find(name)->second; } boost::optional> OutputDriver::get_display(uint8_t number) const { return this->displays.find(number)->second; } } } /* namespace output */