Try to implement DisplayController
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include "output/detail/DisplayBoardPinController.h"
|
||||
|
||||
#include <thread>
|
||||
#include <utility/wiringPiTesting.hpp>
|
||||
|
||||
#include "utility/config.h"
|
||||
|
||||
@@ -16,12 +17,10 @@ namespace detail
|
||||
{
|
||||
|
||||
DisplayBoardPinController::DisplayBoardPinController(std::map<std::string, uint8_t> & pins_display) :
|
||||
pins_display_board{std::move(pins_display)}
|
||||
pins_display_board{}
|
||||
{
|
||||
this->set_pin_map(pins_display);
|
||||
initialize_pins_output();
|
||||
|
||||
clear();
|
||||
|
||||
CLOG(DEBUG, OUTPUT_LOGGER) << "Created DisplayBoardPinController";
|
||||
}
|
||||
|
||||
@@ -31,26 +30,20 @@ DisplayBoardPinController::DisplayBoardPinController() :
|
||||
CLOG(DEBUG, OUTPUT_LOGGER) << "Created DisplayBoardPinController without pin map";
|
||||
}
|
||||
|
||||
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);
|
||||
write_pin(display.get_address(), DISPLAY_LOW);
|
||||
}
|
||||
|
||||
void DisplayBoardPinController::activate_displays() const
|
||||
{
|
||||
write_pin(pins_display_board.at("run"), 1);
|
||||
write_pin(pins_display_board.at("run"), DISPLAY_LOW);
|
||||
}
|
||||
|
||||
void DisplayBoardPinController::deactivate_displays() const
|
||||
{
|
||||
write_pin(pins_display_board.at("run"), 0);
|
||||
write_pin(pins_display_board.at("run"), DISPLAY_HIGH);
|
||||
}
|
||||
|
||||
void DisplayBoardPinController::write_display(const items::OutputDisplay &display) const
|
||||
@@ -66,11 +59,8 @@ void DisplayBoardPinController::write_display(const items::OutputDisplay &displa
|
||||
void DisplayBoardPinController::write_display_digit(uint8_t display_address, uint8_t content, uint8_t position) const
|
||||
{
|
||||
select_display_segment(position);
|
||||
|
||||
select_display_digit(content);
|
||||
|
||||
run_display(display_address);
|
||||
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(DISPLAY_SLEEP_TIME_MILLI));
|
||||
}
|
||||
|
||||
@@ -91,25 +81,33 @@ void DisplayBoardPinController::select_display_digit(uint8_t content) const
|
||||
|
||||
void DisplayBoardPinController::run_display(uint8_t address) const
|
||||
{
|
||||
write_pin(address, 1);
|
||||
write_pin(address, 0);
|
||||
write_pin(address, DISPLAY_HIGH);
|
||||
write_pin(address, DISPLAY_LOW);
|
||||
}
|
||||
|
||||
void DisplayBoardPinController::set_pin_map(std::map<std::string, uint8_t> & pins_display)
|
||||
{
|
||||
this->pins_display_board.insert(pins_display.begin(), pins_display.end());
|
||||
|
||||
this->initialize_pins_output();
|
||||
|
||||
clear();
|
||||
this->init_pin_states();
|
||||
}
|
||||
void DisplayBoardPinController::initialize_pins_output()
|
||||
{
|
||||
for(auto& pin : this->pins_display_board) {
|
||||
for(auto& pin : this->pins_display_board)
|
||||
{
|
||||
initialize_output_pin(pin.second);
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayBoardPinController::init_pin_states()
|
||||
{
|
||||
for(auto& pin : this->pins_display_board)
|
||||
{
|
||||
write_pin(pin.second, DISPLAY_LOW);
|
||||
}
|
||||
write_pin(this->pins_display_board["run"], DISPLAY_HIGH);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user