Impelements and integrates DisplayFactory. Further does some refactoring
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user