Impelements and integrates DisplayFactory. Further does some refactoring

This commit is contained in:
Johannes Wendel
2020-01-06 12:42:04 +01:00
parent d90e904b4c
commit 4a520fb12a
21 changed files with 192 additions and 127 deletions

View File

@@ -15,14 +15,20 @@ namespace output
namespace detail
{
DisplayBoardPinController::DisplayBoardPinController(std::map<std::string, uint8_t> pins_display) :
pins_display_board(std::move(pins_display))
DisplayBoardPinController::DisplayBoardPinController(std::map<std::string, uint8_t> & pins_display) :
pins_display_board{std::move(pins_display)}
{
initialize_pins_output(0, pins_display.begin(), pins_display.end());
CLOG(INFO, OUTPUT_LOGGER) << "Created DisplayBoardPinController";
}
DisplayBoardPinController::DisplayBoardPinController() :
pins_display_board{}
{
CLOG(INFO, OUTPUT_LOGGER) << "Created DisplayBoardPinController without pin map";
}
void DisplayBoardPinController::activate_displays() const
{
write_pin(pins_display_board.at("run"), 1);
@@ -77,6 +83,12 @@ void DisplayBoardPinController::run_display(uint8_t address) const
write_pin(pins_display_board.at("display_select_" + std::to_string(address)), 1);
}
void DisplayBoardPinController::set_pin_map(std::map<std::string, uint8_t> & pins_display)
{
this->pins_display_board.insert(pins_display.begin(), pins_display.end());
initialize_pins_output(0, pins_display.begin(), pins_display.end());
}
}
}
}

View File

@@ -19,7 +19,8 @@ namespace detail
class DisplayBoardPinController : public output::DisplayBoardPinController
{
public:
explicit DisplayBoardPinController(std::map<std::string, uint8_t> pins_display);
explicit DisplayBoardPinController(std::map<std::string, uint8_t> & pins_display);
explicit DisplayBoardPinController();
~DisplayBoardPinController() override = default;
void activate_displays() const;
@@ -27,6 +28,8 @@ public:
void write_display(const items::OutputDisplay &display) const;
void set_pin_map(std::map<std::string, uint8_t> & pins_display);
private:
void write_display_digit(uint8_t display_address, uint8_t content, uint8_t position) const;
void select_display_segment(uint8_t digit) const;
@@ -34,7 +37,7 @@ private:
void run_display(uint8_t address) const;
private:
const std::map<std::string, uint8_t> pins_display_board;
std::map<std::string, uint8_t> pins_display_board;
};
}

View File

@@ -18,13 +18,18 @@ namespace output
namespace detail
{
DisplayController::DisplayController(std::vector<std::shared_ptr<items::OutputDisplay>> displays,
std::unique_ptr<DisplayBoardPinController> pin_controller
DisplayController::DisplayController(std::map<std::string, std::shared_ptr<items::Item>> & displays,
std::shared_ptr<DisplayBoardPinController> pin_controller
)
: displays(std::move(displays)), pin_controller(std::move(pin_controller)), is_running(true)
: pin_controller{pin_controller}, is_running(true)
{
this->display_cycle_thread = std::thread(&DisplayController::cycle_displays, this);
for (auto display : displays)
{
this->displays.push_back(std::dynamic_pointer_cast<items::OutputDisplay>(display.second));
}
CLOG(INFO, OUTPUT_LOGGER) << "Created DisplayController and started cycling them.";
activate_displays();

View File

@@ -25,7 +25,7 @@ namespace detail
class DisplayController : public output::DisplayController
{
public:
explicit DisplayController(std::vector<std::shared_ptr<items::OutputDisplay>> displays, std::unique_ptr<DisplayBoardPinController> pin_controller);
explicit DisplayController(std::map<std::string, std::shared_ptr<items::Item>> &displays, std::shared_ptr<DisplayBoardPinController> pin_controller);
~DisplayController() override;
void activate_displays() const override;
@@ -35,7 +35,7 @@ private:
void cycle_displays() const;
private:
const std::vector<std::shared_ptr<items::OutputDisplay>> displays;
std::vector<std::shared_ptr<items::OutputDisplay>> displays;
const std::shared_ptr<DisplayBoardPinController> pin_controller;

View File

@@ -20,9 +20,9 @@ namespace output
using namespace items;
OutputDriver::OutputDriver(std::unique_ptr<output::DisplayController> display_controller, std::map<std::string, std::shared_ptr<Solenoid>> solenoids,
OutputDriver::OutputDriver(std::shared_ptr<output::DisplayController> display_controller, std::map<std::string, std::shared_ptr<Solenoid>> solenoids,
std::map<std::string, std::shared_ptr<Lamp>> lamps, std::map<std::string, std::shared_ptr<Sound>> sounds,
std::map<std::string, std::shared_ptr<items::Flipper>> flippers, std::map<uint8_t, std::shared_ptr<items::Display>> displays):
std::map<std::string, std::shared_ptr<items::Flipper>> flippers, std::map<std::string, std::shared_ptr<items::Display>> displays):
display_controller(std::move(display_controller)),
solenoids(std::move(solenoids)),
lamps(std::move(lamps)),
@@ -149,7 +149,8 @@ boost::optional<std::shared_ptr<items::Flipper>> OutputDriver::get_flipper(const
boost::optional<std::shared_ptr<items::Display>> OutputDriver::get_display(uint8_t number) const
{
return this->displays.find(number)->second;
std::string num{static_cast<char>(number)};
return this->displays.find(num)->second;
}

View File

@@ -16,13 +16,20 @@ namespace detail
SoundBoardPinController::SoundBoardPinController(std::shared_ptr<std::mutex> output_item_mutex,
uint8_t fire_address,
const std::vector<uint8_t> address_pins) :
output_item_mutex(output_item_mutex),
fire_address(fire_address),
address_pins(address_pins)
output_item_mutex{output_item_mutex},
fire_address{fire_address},
address_pins{address_pins}
{
CLOG(INFO, OUTPUT_LOGGER) << "Created SoundBoardPinController";
}
SoundBoardPinController::SoundBoardPinController(std::shared_ptr<std::mutex> output_item_mutex) :
output_item_mutex{output_item_mutex}
{
CLOG(INFO, OUTPUT_LOGGER) << "Created SoundBoardPinController without addresses!";
}
void SoundBoardPinController::activate(const items::detail::Sound &sound)
{
std::lock_guard<std::mutex> guard(*output_item_mutex);
@@ -68,6 +75,16 @@ void SoundBoardPinController::write_pin(const uint8_t &pin, const bool &value) c
PinController::write_pin(this->fire_address, false);
}
void SoundBoardPinController::set_address_pins(std::vector<uint8_t> address_pins)
{
this->address_pins = address_pins;
}
void SoundBoardPinController::set_fire_address(const uint8_t &fire_address)
{
this->fire_address = fire_address;
}
}
}
}

View File

@@ -19,12 +19,16 @@ namespace detail
class SoundBoardPinController : public output::SoundBoardPinController
{
public:
SoundBoardPinController(std::shared_ptr<std::mutex> output_item_mutex, uint8_t fire_address, const std::vector<uint8_t> address_pins);
explicit SoundBoardPinController(std::shared_ptr<std::mutex> output_item_mutex, uint8_t fire_address, const std::vector<uint8_t> address_pins);
explicit SoundBoardPinController(std::shared_ptr<std::mutex> output_item_mutex);
~SoundBoardPinController() override = default;
void activate(const items::detail::Sound &sound);
void deactivate(const items::detail::Sound &sound);
void set_fire_address(const uint8_t & fire_address);
void set_address_pins(const std::vector<uint8_t> address_pins);
private:
void write_sound_address(const uint8_t & address) const;
void fire_sound() const;