/* * DisplayController.cpp * * Created on: Aug 7, 2018 * Author: Johannes Wendel, Jonas Zeunert */ #include "output/detail/DisplayController.h" #include "output/DisplayController.h" #include "utility/config.h" namespace flippR_driver { namespace output { namespace detail { DisplayController::DisplayController(std::map> & displays, const std::shared_ptr& pin_controller ) : pin_controller{pin_controller}, is_running(true) { for (const auto& display : displays) { this->displays.push_back(std::dynamic_pointer_cast(display.second)); } for(auto &display : this->displays) { pin_controller->initDisplay(*display); } this->display_cycle_thread = std::thread(&DisplayController::cycle_displays, this); CLOG(DEBUG, OUTPUT_LOGGER) << "Created DisplayController and started cycling them."; } DisplayController::~DisplayController() { this->is_running = false; this->display_cycle_thread.join(); } void DisplayController::cycle_displays() const { activate_displays(); while (is_running) { for (auto &display : this->displays) { pin_controller->write_display(*display); } } } void DisplayController::activate_displays() const { pin_controller->activate_displays(); CLOG(DEBUG, OUTPUT_LOGGER) << "Activated all displays!"; } void DisplayController::deactivate_displays() const { pin_controller->deactivate_displays(); CLOG(DEBUG, OUTPUT_LOGGER) << "Deactivated all displays!"; } } } }