Files
flippr-code/FlippR-Driver/src/output/detail/DisplayController.cpp
Jonas Zeunert 4015aef0ab typo
2022-02-25 21:22:43 +01:00

75 lines
1.6 KiB
C++

/*
* 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<std::string, std::shared_ptr<items::Display>> & displays,
const std::shared_ptr<DisplayBoardPinController>& pin_controller
)
: pin_controller{pin_controller}, is_running(true)
{
for (const auto& display : displays)
{
this->displays.push_back(std::dynamic_pointer_cast<items::OutputDisplay>(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!";
}
}
}
}