implemented display logic
This commit is contained in:
@@ -33,9 +33,9 @@ void DisplayController::cycle_displays()
|
||||
{
|
||||
while(is_running)
|
||||
{
|
||||
for(auto& display : this->displays)
|
||||
for(auto &display : this->displays)
|
||||
{
|
||||
output_gpio_interface->write_display(display);
|
||||
output_gpio_interface->write_display(*display);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
virtual void deactivate(items::DriverBoardItem *driver_board_item) = 0;
|
||||
virtual void deactivate(items::Item *sound) = 0;
|
||||
|
||||
virtual void write_display(std::shared_ptr<output::items::IDisplay> display) = 0;
|
||||
virtual void write_display(items::IDisplay &display) = 0;
|
||||
//Display gpio interface!
|
||||
|
||||
};
|
||||
|
||||
@@ -140,9 +140,46 @@ void OutputGPIOInterface::fire_sound(bool fire)
|
||||
GPIOInterface::write_pin(pins_sound.at("fire"), fire);
|
||||
}
|
||||
|
||||
void OutputGPIOInterface::write_display(std::shared_ptr<output::items::IDisplay> display)
|
||||
void OutputGPIOInterface::write_display(IDisplay &display)
|
||||
{
|
||||
return;
|
||||
std::vector<char> content = display.get_content();
|
||||
|
||||
for(uint8_t i = 0; i < content.size(); i++)
|
||||
{
|
||||
write_display_digit(display.get_address(), content.at(i), i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void OutputGPIOInterface::write_display_digit(const uint8_t display_address, const char &content, const uint8_t &position)
|
||||
{
|
||||
select_display_segment(position);
|
||||
|
||||
select_display_digit(content);
|
||||
|
||||
run_display(display_address);
|
||||
}
|
||||
|
||||
void OutputGPIOInterface::select_display_segment(const uint8_t &segment)
|
||||
{
|
||||
write_pin(pins_display.at("segment_select_A"), segment & 0b001u);
|
||||
write_pin(pins_display.at("segment_select_B"), segment & 0b010u);
|
||||
write_pin(pins_display.at("segment_select_C"), segment & 0b100u);
|
||||
}
|
||||
|
||||
void OutputGPIOInterface::select_display_digit(const char &content)
|
||||
{
|
||||
write_pin(pins_display.at("digit_select_A"), content & 0b0001u);
|
||||
write_pin(pins_display.at("digit_select_B"), content & 0b0010u);
|
||||
write_pin(pins_display.at("digit_select_C"), content & 0b0100u);
|
||||
write_pin(pins_display.at("digit_select_D"), content & 0b1000u);
|
||||
}
|
||||
|
||||
void OutputGPIOInterface::run_display(const uint8_t &address)
|
||||
{
|
||||
write_pin(pins_display.at("display_select_" + std::to_string(address)), true);
|
||||
|
||||
write_pin(pins_display.at("display_select_" + std::to_string(address)), false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -33,9 +33,14 @@ public:
|
||||
void deactivate(items::DriverBoardItem *driver_board_item) override;
|
||||
void deactivate(items::Item *sound) override;
|
||||
|
||||
void write_display(std::shared_ptr<output::items::IDisplay> display) override;
|
||||
void write_display(items::IDisplay &display) override;
|
||||
|
||||
private:
|
||||
void write_display_digit(const uint8_t display_address, const char &content, const uint8_t &position);
|
||||
void select_display_segment(const uint8_t &digit);
|
||||
void select_display_digit(const char &content);
|
||||
void run_display(const uint8_t &address);
|
||||
|
||||
void initialize_i2c_addresses();
|
||||
|
||||
void initialize_pins();
|
||||
|
||||
@@ -29,7 +29,8 @@ public:
|
||||
virtual void write_score(int score);
|
||||
virtual void write_content(std::array<char, DigitCount> content);
|
||||
|
||||
virtual std::vector<char> get_content();
|
||||
std::vector<char> get_content() override;
|
||||
uint8_t get_address() override;
|
||||
|
||||
public:
|
||||
std::array<char, DigitCount> content;
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#define _SRC_OUTPUT_IDISPLAY_H_
|
||||
|
||||
#include <vector>
|
||||
#include <cstdint>
|
||||
|
||||
namespace flippR_driver
|
||||
{
|
||||
@@ -23,6 +24,7 @@ class IDisplay
|
||||
public:
|
||||
virtual ~IDisplay() = default;
|
||||
|
||||
virtual uint8_t get_address() = 0;
|
||||
virtual std::vector<char> get_content() = 0;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user