From b663e130ac5112ecde09b63f952e61c6f5b89945 Mon Sep 17 00:00:00 2001 From: Jonas Zeunert Date: Fri, 14 Dec 2018 15:09:47 +0100 Subject: [PATCH] display dependencies --- FlippR-Driver/include/output/items/Display.h | 2 +- .../include/output/items/EightDigitDisplay.h | 2 +- .../src/output/DisplayBoardPinController.h | 2 +- FlippR-Driver/src/output/OutputDriverFactory.cpp | 15 +++++++-------- FlippR-Driver/src/output/OutputDriverFactory.h | 4 ++-- .../output/impl/DisplayBoardPinController.cpp | 10 +++++----- .../src/output/impl/DisplayBoardPinController.h | 10 +++++----- .../src/output/impl/DisplayController.cpp | 2 +- .../src/output/impl/DisplayController.h | 4 ++-- FlippR-Driver/src/output/items/OutputDisplay.h | 4 +++- FlippR-Driver/src/output/items/impl/Display.h | 11 +++++++---- FlippR-Driver/src/output/items/impl/Display.hpp | 16 +++++++--------- .../src/output/items/impl/EightDigitDisplay.h | 11 +++++++++++ .../src/output/items/impl/SevenDigitDisplay.h | 10 ++++++++++ 14 files changed, 63 insertions(+), 40 deletions(-) diff --git a/FlippR-Driver/include/output/items/Display.h b/FlippR-Driver/include/output/items/Display.h index 0f69ad3..4d500fd 100644 --- a/FlippR-Driver/include/output/items/Display.h +++ b/FlippR-Driver/include/output/items/Display.h @@ -21,7 +21,7 @@ class Display public: virtual ~Display() = default; - virtual void write_score(int score) = 0; + virtual void write_score(uint score) = 0; }; } diff --git a/FlippR-Driver/include/output/items/EightDigitDisplay.h b/FlippR-Driver/include/output/items/EightDigitDisplay.h index d89f0c3..ce27107 100644 --- a/FlippR-Driver/include/output/items/EightDigitDisplay.h +++ b/FlippR-Driver/include/output/items/EightDigitDisplay.h @@ -19,7 +19,7 @@ namespace items class EightDigitDisplay : public Display { public: - virtual void write_content(std::array content) = 0; + virtual void write_content(std::array content) = 0; }; } diff --git a/FlippR-Driver/src/output/DisplayBoardPinController.h b/FlippR-Driver/src/output/DisplayBoardPinController.h index 15c69e2..a5a3ad2 100644 --- a/FlippR-Driver/src/output/DisplayBoardPinController.h +++ b/FlippR-Driver/src/output/DisplayBoardPinController.h @@ -20,7 +20,7 @@ public: virtual void activate_displays() const = 0; virtual void deactivate_displays() const = 0; - virtual void write_display(const items::Display &display) const = 0; + virtual void write_display(const items::OutputDisplay &display) const = 0; }; } diff --git a/FlippR-Driver/src/output/OutputDriverFactory.cpp b/FlippR-Driver/src/output/OutputDriverFactory.cpp index a7daabf..87a2e92 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.cpp +++ b/FlippR-Driver/src/output/OutputDriverFactory.cpp @@ -54,7 +54,7 @@ std::shared_ptr get_OutputDriver(std::istream &output_pin_config, auto displays = create_displays(display_config); // todo - std::vector> displays_vec; + std::vector> displays_vec; boost::copy(displays | boost::adaptors::map_values, std::back_inserter(displays_vec)); std::unique_ptr display_controller(new impl::DisplayController(displays_vec, std::move(display_board_pin_controller))); @@ -256,14 +256,14 @@ std::shared_ptr create_sound(nlohmann::json &sound_json, std } } -std::map> create_displays(std::istream &display_config) +std::map> create_displays(std::istream &display_config) { - std::map> displays; + std::map> displays; json display_config_json; display_config >> display_config_json; - json displays_json = display_config_json.at('displays'); + json displays_json = display_config_json.at("displays"); for(json &display_json : displays_json) { auto display = create_display(display_json); @@ -272,7 +272,7 @@ std::map> create_displays(std::istream return displays; } -std::shared_ptr create_display(nlohmann::json &display_json) +std::shared_ptr create_display(nlohmann::json &display_json) { try { @@ -286,19 +286,18 @@ std::shared_ptr create_display(nlohmann::json &display_json) } else if(digits == 7) { - return std::make_shared(address, id); } else { throw new std::logic_error("Display digits can either be 7 or 8"); } - } catch(json::exception &e) { + // todo log exit(EXIT_FAILURE); } - return std::shared_ptr(); } } diff --git a/FlippR-Driver/src/output/OutputDriverFactory.h b/FlippR-Driver/src/output/OutputDriverFactory.h index 8dd6d01..009bd9c 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.h +++ b/FlippR-Driver/src/output/OutputDriverFactory.h @@ -36,8 +36,8 @@ namespace OutputDriverFactory std::chrono::milliseconds get_deactivation_time(nlohmann::json &json); - std::map> create_displays(std::istream &display_config); - std::shared_ptr create_display(nlohmann::json &display_json); + std::map> create_displays(std::istream &display_config); + std::shared_ptr create_display(nlohmann::json &display_json); std::map parse_pins_driver_board(nlohmann::json &driver_board_config); std::map parse_pins_sound_board(nlohmann::json &sound_board_config); diff --git a/FlippR-Driver/src/output/impl/DisplayBoardPinController.cpp b/FlippR-Driver/src/output/impl/DisplayBoardPinController.cpp index 1331973..40d5b68 100644 --- a/FlippR-Driver/src/output/impl/DisplayBoardPinController.cpp +++ b/FlippR-Driver/src/output/impl/DisplayBoardPinController.cpp @@ -30,7 +30,7 @@ void DisplayBoardPinController::deactivate_displays() const write_pin(pins_display_board.at("run"), 0); } -void DisplayBoardPinController::write_display(const items::Display &display) const +void DisplayBoardPinController::write_display(const items::OutputDisplay &display) const { std::vector content = display.get_content(); @@ -41,7 +41,7 @@ void DisplayBoardPinController::write_display(const items::Display &display) con } -void DisplayBoardPinController::write_display_digit(uint8_t display_address, uint8_t content, uint8_t position) +void DisplayBoardPinController::write_display_digit(uint8_t display_address, uint8_t content, uint8_t position) const { select_display_segment(position); @@ -52,14 +52,14 @@ void DisplayBoardPinController::write_display_digit(uint8_t display_address, uin std::this_thread::sleep_for(std::chrono::milliseconds(DISPLAY_SLEEP_TIME_MILLI)); } -void DisplayBoardPinController::select_display_segment(uint8_t segment) +void DisplayBoardPinController::select_display_segment(uint8_t segment) const { write_pin(pins_display_board.at("segment_select_A"), segment & ~0b001u); write_pin(pins_display_board.at("segment_select_B"), segment & ~0b010u); write_pin(pins_display_board.at("segment_select_C"), segment & ~0b100u); } -void DisplayBoardPinController::select_display_digit(uint8_t content) +void DisplayBoardPinController::select_display_digit(uint8_t content) const { write_pin(pins_display_board.at("digit_select_A"), content & 0b0001u); write_pin(pins_display_board.at("digit_select_B"), content & 0b0010u); @@ -67,7 +67,7 @@ void DisplayBoardPinController::select_display_digit(uint8_t content) write_pin(pins_display_board.at("digit_select_D"), content & 0b1000u); } -void DisplayBoardPinController::run_display(uint8_t address) +void DisplayBoardPinController::run_display(uint8_t address) const { write_pin(pins_display_board.at("display_select_" + std::to_string(address)), 0); diff --git a/FlippR-Driver/src/output/impl/DisplayBoardPinController.h b/FlippR-Driver/src/output/impl/DisplayBoardPinController.h index 043c62d..0891d9d 100644 --- a/FlippR-Driver/src/output/impl/DisplayBoardPinController.h +++ b/FlippR-Driver/src/output/impl/DisplayBoardPinController.h @@ -27,13 +27,13 @@ public: void activate_displays() const override; void deactivate_displays() const override; - void write_display(const items::Display &display) const override; + void write_display(const items::OutputDisplay &display) const override; private: - void write_display_digit(uint8_t display_address, uint8_t content, uint8_t position); - void select_display_segment(uint8_t digit); - void select_display_digit(uint8_t content); - void run_display(uint8_t address); + void write_display_digit(uint8_t display_address, uint8_t content, uint8_t position) const; + void select_display_segment(uint8_t digit) const; + void select_display_digit(uint8_t content) const; + void run_display(uint8_t address) const; private: const std::map pins_display_board; diff --git a/FlippR-Driver/src/output/impl/DisplayController.cpp b/FlippR-Driver/src/output/impl/DisplayController.cpp index 579bcc5..a67cf47 100644 --- a/FlippR-Driver/src/output/impl/DisplayController.cpp +++ b/FlippR-Driver/src/output/impl/DisplayController.cpp @@ -16,7 +16,7 @@ namespace output namespace impl { -DisplayController::DisplayController(std::vector> displays, std::unique_ptr pin_controller) +DisplayController::DisplayController(std::vector> displays, std::unique_ptr pin_controller) : displays(std::move(displays)), pin_controller(std::move(pin_controller)), is_running(true) { this->display_cycle_thread = std::thread(&DisplayController::cycle_displays, this); diff --git a/FlippR-Driver/src/output/impl/DisplayController.h b/FlippR-Driver/src/output/impl/DisplayController.h index 64a5deb..c8e3f61 100644 --- a/FlippR-Driver/src/output/impl/DisplayController.h +++ b/FlippR-Driver/src/output/impl/DisplayController.h @@ -26,7 +26,7 @@ namespace impl class DisplayController : public output::DisplayController { public: - explicit DisplayController(std::vector> displays, std::unique_ptr pin_controller); + explicit DisplayController(std::vector> displays, std::unique_ptr pin_controller); ~DisplayController() override; void activate_displays() const override; @@ -36,7 +36,7 @@ private: void cycle_displays() const; private: - const std::vector> displays; + const std::vector> displays; const std::shared_ptr pin_controller; diff --git a/FlippR-Driver/src/output/items/OutputDisplay.h b/FlippR-Driver/src/output/items/OutputDisplay.h index 4450e35..cbac8a1 100644 --- a/FlippR-Driver/src/output/items/OutputDisplay.h +++ b/FlippR-Driver/src/output/items/OutputDisplay.h @@ -10,6 +10,7 @@ #include #include +#include namespace flippR_driver { @@ -18,13 +19,14 @@ namespace output namespace items { -class OutputDisplay +class OutputDisplay : Display { public: virtual ~OutputDisplay() = default; virtual uint8_t get_address() const = 0; + virtual uint8_t get_id() const = 0; virtual std::vector get_content() const = 0; }; diff --git a/FlippR-Driver/src/output/items/impl/Display.h b/FlippR-Driver/src/output/items/impl/Display.h index fdbbd2c..c2d3ec1 100644 --- a/FlippR-Driver/src/output/items/impl/Display.h +++ b/FlippR-Driver/src/output/items/impl/Display.h @@ -28,20 +28,23 @@ public: Display(uint8_t address, uint8_t id); virtual ~Display() = default; - virtual void write_score(int score); - virtual void write_content(std::array content); + virtual void write_score(uint score); + virtual void write_content(std::array content); std::vector get_content() const override; uint8_t get_address() const override; + uint8_t get_id() const override; + +private: + std::string fit_string(std::string &score_string); public: - std::array content; + std::array content; private: const uint8_t id; const uint8_t address; - std::string fit_string(std::string &score_string); }; } diff --git a/FlippR-Driver/src/output/items/impl/Display.hpp b/FlippR-Driver/src/output/items/impl/Display.hpp index a869751..644f47d 100644 --- a/FlippR-Driver/src/output/items/impl/Display.hpp +++ b/FlippR-Driver/src/output/items/impl/Display.hpp @@ -24,19 +24,17 @@ Display::Display(uint8_t address, uint8_t id) : } template -int Display::getID() +uint8_t Display::get_id() const { return this->id; } template -void Display::write_score(int score) +void Display::write_score(uint score) { auto score_string = std::to_string(score); - auto score_c_string = this->fit_string(score_string).c_str(); - - std::copy(std::begin(score_c_string), std::end(score_c_string), std::begin(this->content)); + std::copy(score_string.begin(), score_string.end(), std::begin(this->content)); } template @@ -57,16 +55,16 @@ std::string Display::fit_string(std::string& score_string) } template -void Display::write_content( std::array content) +void Display::write_content( std::array content) { this->content = content; } - -std::vector Display::get_content() +template +std::vector Display::get_content() const { // todo: expensive? - return std::vector(content, content + DigitCount); + return std::vector(content.begin(), content.end()); } } diff --git a/FlippR-Driver/src/output/items/impl/EightDigitDisplay.h b/FlippR-Driver/src/output/items/impl/EightDigitDisplay.h index 4c2db24..8d398c7 100644 --- a/FlippR-Driver/src/output/items/impl/EightDigitDisplay.h +++ b/FlippR-Driver/src/output/items/impl/EightDigitDisplay.h @@ -24,6 +24,17 @@ public: EightDigitDisplay(uint8_t address, uint8_t id) : Display<8>(address, id) {} + void write_score(uint score) override + { + Display<8>::write_score(score); + } + + void write_content(std::array content) override + { + Display<8>::write_content(content); + } + + ~EightDigitDisplay() override = default; }; diff --git a/FlippR-Driver/src/output/items/impl/SevenDigitDisplay.h b/FlippR-Driver/src/output/items/impl/SevenDigitDisplay.h index 7f9f101..eb3b1e0 100644 --- a/FlippR-Driver/src/output/items/impl/SevenDigitDisplay.h +++ b/FlippR-Driver/src/output/items/impl/SevenDigitDisplay.h @@ -24,6 +24,16 @@ public: SevenDigitDisplay(uint8_t address, uint8_t id) : Display<7>(address, id) {} + void write_score(uint score) override + { + Display<7>::write_score(score); + } + + void write_content(std::array content) override + { + Display<7>::write_content(content); + } + ~SevenDigitDisplay() override = default; };