diff --git a/FlippR-Driver/src/output/DisplayBoardPinController.h b/FlippR-Driver/src/output/DisplayBoardPinController.h index ff7ec7f..1825636 100644 --- a/FlippR-Driver/src/output/DisplayBoardPinController.h +++ b/FlippR-Driver/src/output/DisplayBoardPinController.h @@ -21,6 +21,8 @@ public: virtual void activate_displays() const = 0; virtual void deactivate_displays() const = 0; + virtual void initDisplay(const items::OutputDisplay &display) const = 0; + virtual void write_display(const items::OutputDisplay &display) const = 0; virtual void set_pin_map(std::map & pins_display) = 0; diff --git a/FlippR-Driver/src/output/detail/DisplayBoardPinController.cpp b/FlippR-Driver/src/output/detail/DisplayBoardPinController.cpp index ba2a4a2..b6580a7 100644 --- a/FlippR-Driver/src/output/detail/DisplayBoardPinController.cpp +++ b/FlippR-Driver/src/output/detail/DisplayBoardPinController.cpp @@ -30,6 +30,13 @@ void DisplayBoardPinController::clear() std::for_each(this->pins_display_board.begin(), this->pins_display_board.end(), [](auto& pin) { write_pin(pin.second, 0); }); } +void DisplayBoardPinController::initDisplay(const items::OutputDisplay &display) const +{ + initialize_output_pin(display.get_address()); + + write_pin(display.get_address(), 0); +} + DisplayBoardPinController::DisplayBoardPinController() : pins_display_board{} { @@ -92,6 +99,7 @@ void DisplayBoardPinController::set_pin_map(std::map & pin { this->pins_display_board.insert(pins_display.begin(), pins_display.end()); initialize_pins_output(0, pins_display.begin(), pins_display.end()); + clear(); } } diff --git a/FlippR-Driver/src/output/detail/DisplayBoardPinController.h b/FlippR-Driver/src/output/detail/DisplayBoardPinController.h index 2a371e8..ae87120 100644 --- a/FlippR-Driver/src/output/detail/DisplayBoardPinController.h +++ b/FlippR-Driver/src/output/detail/DisplayBoardPinController.h @@ -8,6 +8,7 @@ #include "output/DisplayBoardPinController.h" #include +#include namespace flippR_driver { @@ -23,6 +24,7 @@ public: explicit DisplayBoardPinController(); ~DisplayBoardPinController() override = default; + void initDisplay(const items::OutputDisplay &display) const; void activate_displays() const; void deactivate_displays() const; diff --git a/FlippR-Driver/src/output/detail/DisplayController.cpp b/FlippR-Driver/src/output/detail/DisplayController.cpp index b879f2a..2f7948f 100644 --- a/FlippR-Driver/src/output/detail/DisplayController.cpp +++ b/FlippR-Driver/src/output/detail/DisplayController.cpp @@ -28,9 +28,14 @@ DisplayController::DisplayController(std::mapdisplays.push_back(std::dynamic_pointer_cast(display.second)); } - this->display_cycle_thread = std::thread(&DisplayController::cycle_displays, this); + for(auto &display : this->displays) { + pin_controller->initDisplay(*display); + } + activate_displays(); + this->display_cycle_thread = std::thread(&DisplayController::cycle_displays, this); + CLOG(DEBUG, OUTPUT_LOGGER) << "Created DisplayController and started cycling them."; }