From 120d3693f2b8b3d2fb11953d6a03df7a407439d1 Mon Sep 17 00:00:00 2001 From: Jonas Zeunert Date: Thu, 20 Dec 2018 00:21:02 +0100 Subject: [PATCH] refactored displays --- FlippR-Driver/include/output/items/Display.h | 2 +- .../include/output/items/EightDigitDisplay.h | 6 +- FlippR-Driver/include/output/items/Lamp.h | 4 +- .../include/output/items/SevenDigitDisplay.h | 6 +- FlippR-Driver/include/output/items/Solenoid.h | 4 +- FlippR-Driver/include/output/items/Sound.h | 5 +- FlippR-Driver/src/PinController.h | 3 - .../src/output/OutputDriverFactory.cpp | 4 +- .../detail/DisplayBoardPinController.cpp | 2 +- .../src/output/items/OutputDisplay.h | 4 +- .../src/output/items/detail/Display.cpp | 76 +++++++++++++++++++ .../src/output/items/detail/Display.h | 13 ++-- .../src/output/items/detail/Display.hpp | 74 ------------------ .../output/items/detail/EightDigitDisplay.h | 29 +++---- .../src/output/items/detail/Lamp.cpp | 2 + .../output/items/detail/SevenDigitDisplay.h | 13 ++-- .../src/output/items/detail/Solenoid.cpp | 1 + .../src/output/items/detail/Sound.cpp | 1 + 18 files changed, 125 insertions(+), 124 deletions(-) create mode 100644 FlippR-Driver/src/output/items/detail/Display.cpp delete mode 100644 FlippR-Driver/src/output/items/detail/Display.hpp diff --git a/FlippR-Driver/include/output/items/Display.h b/FlippR-Driver/include/output/items/Display.h index 4d500fd..dc0ffe8 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(uint score) = 0; + virtual void write_score(unsigned int score) = 0; }; } diff --git a/FlippR-Driver/include/output/items/EightDigitDisplay.h b/FlippR-Driver/include/output/items/EightDigitDisplay.h index ce27107..5ed1ceb 100644 --- a/FlippR-Driver/include/output/items/EightDigitDisplay.h +++ b/FlippR-Driver/include/output/items/EightDigitDisplay.h @@ -7,7 +7,7 @@ #include "output/items/Display.h" -#include +#include namespace flippR_driver { @@ -19,7 +19,9 @@ namespace items class EightDigitDisplay : public Display { public: - virtual void write_content(std::array content) = 0; + virtual ~EightDigitDisplay() = default; + + virtual void write_content(std::string content) = 0; }; } diff --git a/FlippR-Driver/include/output/items/Lamp.h b/FlippR-Driver/include/output/items/Lamp.h index c71d899..d6f580b 100644 --- a/FlippR-Driver/include/output/items/Lamp.h +++ b/FlippR-Driver/include/output/items/Lamp.h @@ -8,7 +8,6 @@ #ifndef _SRC_OUTPUT_ILAMP_H_ #define _SRC_OUTPUT_ILAMP_H_ -#include "output/items/Item.h" namespace flippR_driver { namespace output @@ -19,8 +18,7 @@ namespace items class Lamp { public: - ~Lamp() - {}; + virtual ~Lamp() = default; virtual void activate() = 0; virtual void deactivate() = 0; diff --git a/FlippR-Driver/include/output/items/SevenDigitDisplay.h b/FlippR-Driver/include/output/items/SevenDigitDisplay.h index fa72ae6..48fb8a2 100644 --- a/FlippR-Driver/include/output/items/SevenDigitDisplay.h +++ b/FlippR-Driver/include/output/items/SevenDigitDisplay.h @@ -7,7 +7,7 @@ #include "Display.h" -#include +#include namespace flippR_driver { @@ -19,7 +19,9 @@ namespace items class SevenDigitDisplay : public Display { public: - virtual void write_content(std::array content) = 0; + virtual ~SevenDigitDisplay() = default; + + virtual void write_content(std::string content) = 0; }; } diff --git a/FlippR-Driver/include/output/items/Solenoid.h b/FlippR-Driver/include/output/items/Solenoid.h index fc98915..80dfda6 100644 --- a/FlippR-Driver/include/output/items/Solenoid.h +++ b/FlippR-Driver/include/output/items/Solenoid.h @@ -8,7 +8,6 @@ #ifndef _SRC_OUTPUT_ISOLENOID_H_ #define _SRC_OUTPUT_ISOLENOID_H_ -#include "output/items/Item.h" namespace flippR_driver { @@ -20,8 +19,7 @@ namespace items class Solenoid { public: - ~Solenoid() - {}; + virtual ~Solenoid() = default; virtual void trigger() = 0; }; diff --git a/FlippR-Driver/include/output/items/Sound.h b/FlippR-Driver/include/output/items/Sound.h index cc38bb6..00a6ebb 100644 --- a/FlippR-Driver/include/output/items/Sound.h +++ b/FlippR-Driver/include/output/items/Sound.h @@ -8,8 +8,6 @@ #ifndef _SRC_OUTPUT_ISOUND_H_ #define _SRC_OUTPUT_ISOUND_H_ -#include "output/items/Item.h" - namespace flippR_driver { namespace output @@ -20,8 +18,7 @@ namespace items class Sound { public: - Sound(); - virtual ~Sound(); + virtual ~Sound() = default; virtual void play() = 0; }; diff --git a/FlippR-Driver/src/PinController.h b/FlippR-Driver/src/PinController.h index 05e2ba1..f78be89 100644 --- a/FlippR-Driver/src/PinController.h +++ b/FlippR-Driver/src/PinController.h @@ -3,9 +3,6 @@ * * Responsible for communicating with the actual GPIO hardware. * - * Gets a JSON file with following style: - * TODO - * * Created on: May 6, 2018 * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert */ diff --git a/FlippR-Driver/src/output/OutputDriverFactory.cpp b/FlippR-Driver/src/output/OutputDriverFactory.cpp index 6ac253c..d0dd1e9 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.cpp +++ b/FlippR-Driver/src/output/OutputDriverFactory.cpp @@ -65,7 +65,7 @@ std::map parse_pins_driver_board(json &driver_board_config try { - pins_driver_board["i2c_address"] = driver_board_config.at("i2c_address").get(); // todo dont write into map + pins_driver_board["i2c_address"] = driver_board_config.at("i2c_address").get(); pins_driver_board["pin_base"] = driver_board_config.at("pin_base").get(); pins_driver_board["data"] = driver_board_config.at("data").get(); pins_driver_board["CL"] = driver_board_config.at("CL").get(); @@ -95,7 +95,7 @@ std::map parse_pins_sound_board(json &sound_board_config) std::map pins_sound; try { - pins_sound["i2c_address"] = sound_board_config.at("i2c_address").get(); // todo dont write into map + pins_sound["i2c_address"] = sound_board_config.at("i2c_address").get(); pins_sound["pin_base"] = sound_board_config.at("pin_base").get(); pins_sound["fire"] = sound_board_config.at("fire").get(); diff --git a/FlippR-Driver/src/output/detail/DisplayBoardPinController.cpp b/FlippR-Driver/src/output/detail/DisplayBoardPinController.cpp index 2185e13..7d3e827 100644 --- a/FlippR-Driver/src/output/detail/DisplayBoardPinController.cpp +++ b/FlippR-Driver/src/output/detail/DisplayBoardPinController.cpp @@ -34,7 +34,7 @@ void DisplayBoardPinController::deactivate_displays() const void DisplayBoardPinController::write_display(const items::OutputDisplay &display) const { - std::vector content = display.get_content(); + std::string content = display.get_content(); for(uint8_t i = 0; i < content.size(); i++) { diff --git a/FlippR-Driver/src/output/items/OutputDisplay.h b/FlippR-Driver/src/output/items/OutputDisplay.h index 9abdf1f..f67e1fd 100644 --- a/FlippR-Driver/src/output/items/OutputDisplay.h +++ b/FlippR-Driver/src/output/items/OutputDisplay.h @@ -12,6 +12,8 @@ #include #include +#include + namespace flippR_driver { namespace output @@ -27,7 +29,7 @@ public: virtual uint8_t get_address() const = 0; virtual uint8_t get_id() const = 0; - virtual std::vector get_content() const = 0; + virtual std::string get_content() const = 0; }; } diff --git a/FlippR-Driver/src/output/items/detail/Display.cpp b/FlippR-Driver/src/output/items/detail/Display.cpp new file mode 100644 index 0000000..43e59c9 --- /dev/null +++ b/FlippR-Driver/src/output/items/detail/Display.cpp @@ -0,0 +1,76 @@ +// +// Created by rhetenor on 10.10.18. +// + +#include "Display.h" +#include "utility/config.h" + +#include +#include + +namespace flippR_driver +{ +namespace output +{ +namespace items +{ +namespace detail +{ + +Display::Display(uint8_t address, uint8_t id) : + address(address), + id(id) +{ + CLOG(INFO, OUTPUT_LOGGER) << "Created display with id " << id << " and address " << address << "."; +} + +uint8_t Display::get_id() const +{ + return this->id; +} + +void Display::write_score(unsigned int score, unsigned int length) +{ + auto score_string = std::to_string(score); + + fit_score_string(score_string, length); + + write_content(score_string, length); +} + +std::string Display::fit_score_string(std::string &score_string, unsigned int length) +{ + auto score_length = score_string.length(); + + if (score_length > length) + { + CLOG(DEBUG, OUTPUT_LOGGER) << "Score too long for display"; + std::string full_display; + // TODO mach mal schöner hier wird 9999 angezeigt wenn die zahl zu groß is + return full_display.insert(0, length, '9'); + } + + score_string.insert(0, length - score_length, '\0'); + return score_string; +} + +void Display::write_content(std::string content, unsigned int length) +{ + if(content.size() > length) + { + CLOG(WARNING, OUTPUT_LOGGER) << "Cannot write more than " << length << " digits on " << length << "-Digit Display. Truncating!"; + content = content.substr(0, length); + } + + this->content = content; +} + +std::string Display::get_content() const +{ + return this->content; +} + +} +} +} +} diff --git a/FlippR-Driver/src/output/items/detail/Display.h b/FlippR-Driver/src/output/items/detail/Display.h index 882be12..83cc05e 100644 --- a/FlippR-Driver/src/output/items/detail/Display.h +++ b/FlippR-Driver/src/output/items/detail/Display.h @@ -21,25 +21,24 @@ namespace items namespace detail { -template class Display : public items::OutputDisplay { public: Display(uint8_t address, uint8_t id); virtual ~Display() = default; - void write_score(uint score) override; - void write_content(std::array content); + void write_score(unsigned int score, unsigned int length); + void write_content(std::string content, unsigned int length); - std::vector get_content() const override; + std::string 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); + std::string fit_score_string(std::string &score_string, unsigned int length); public: - std::array content; + std::string content; private: const uint8_t id; @@ -52,7 +51,5 @@ private: } /* namespace output */ } -#include "Display.hpp" - #endif diff --git a/FlippR-Driver/src/output/items/detail/Display.hpp b/FlippR-Driver/src/output/items/detail/Display.hpp deleted file mode 100644 index e971242..0000000 --- a/FlippR-Driver/src/output/items/detail/Display.hpp +++ /dev/null @@ -1,74 +0,0 @@ -// -// Created by rhetenor on 10.10.18. -// - -#include "utility/config.h" - -#include -#include - -namespace flippR_driver -{ -namespace output -{ -namespace items -{ -namespace detail -{ - -template -Display::Display(uint8_t address, uint8_t id) : - address(address), - id(id) -{ - CLOG(INFO, OUTPUT_LOGGER) << "Created display with id " << id << " and address " << address << "."; -} - -template -uint8_t Display::get_id() const -{ - return this->id; -} - -template -void Display::write_score(uint score) -{ - auto score_string = std::to_string(score); - - std::copy(score_string.begin(), score_string.end(), std::begin(this->content)); -} - -template -std::string Display::fit_string(std::string& score_string) -{ - auto score_length = score_string.length(); - - if (score_length > DigitCount) - { - CLOG(DEBUG, OUTPUT_LOGGER) << "Score too long for display"; - std::string full_display; - // TODO mach mal schöner hier wird 9999 angezeigt wenn die zahl zu groß is - return full_display.insert(0, DigitCount, '9'); - } - - score_string.insert(0, DigitCount-score_length, '\0'); - return score_string; -} - -template -void Display::write_content( std::array content) -{ - this->content = content; -} - -template -std::vector Display::get_content() const -{ - // todo: expensive? - return std::vector(content.begin(), content.end()); -} - -} -} -} -} diff --git a/FlippR-Driver/src/output/items/detail/EightDigitDisplay.h b/FlippR-Driver/src/output/items/detail/EightDigitDisplay.h index 938203f..45a6837 100644 --- a/FlippR-Driver/src/output/items/detail/EightDigitDisplay.h +++ b/FlippR-Driver/src/output/items/detail/EightDigitDisplay.h @@ -9,6 +9,8 @@ #include "output/items/EightDigitDisplay.h" +#include "utility/config.h" + namespace flippR_driver { namespace output @@ -18,25 +20,26 @@ namespace items namespace detail { -class EightDigitDisplay : public Display<8>, public items::EightDigitDisplay +class EightDigitDisplay : public items::detail::Display, public items::EightDigitDisplay { 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); - } - + detail::Display(address, id) {} ~EightDigitDisplay() override = default; + void write_score(unsigned int score) override + { + detail::Display::write_score(score, 8); + } + + void write_content(std::string content) override + { + detail::Display::write_content(content, 8); + } + + + }; } diff --git a/FlippR-Driver/src/output/items/detail/Lamp.cpp b/FlippR-Driver/src/output/items/detail/Lamp.cpp index f3ddce7..0971a48 100644 --- a/FlippR-Driver/src/output/items/detail/Lamp.cpp +++ b/FlippR-Driver/src/output/items/detail/Lamp.cpp @@ -26,11 +26,13 @@ DriverBoardItem(std::move(pin_controller), address, std::move(name)), activated( void Lamp::activate() { + CLOG(INFO, OUTPUT_LOGGER) << "Activate lamp " << name; pin_controller->activate(*this); } void Lamp::deactivate() { + CLOG(INFO, OUTPUT_LOGGER) << "Deactivate lamp " << name; pin_controller->deactivate(*this); } diff --git a/FlippR-Driver/src/output/items/detail/SevenDigitDisplay.h b/FlippR-Driver/src/output/items/detail/SevenDigitDisplay.h index dc714d7..b1f332b 100644 --- a/FlippR-Driver/src/output/items/detail/SevenDigitDisplay.h +++ b/FlippR-Driver/src/output/items/detail/SevenDigitDisplay.h @@ -18,20 +18,19 @@ namespace items namespace detail { -class SevenDigitDisplay : public Display<7>, public items::SevenDigitDisplay +class SevenDigitDisplay : public items::detail::Display, public items::SevenDigitDisplay { public: SevenDigitDisplay(uint8_t address, uint8_t id) : - Display<7>(address, id) {} + detail::Display(address, id) {} - void write_score(uint score) override + void write_score(unsigned int score) override { - Display<7>::write_score(score); + detail::Display::write_score(score, 7); } - - void write_content(std::array content) override + void write_content(std::string content) override { - Display<7>::write_content(content); + detail::Display::write_content(content, 7); } ~SevenDigitDisplay() override = default; diff --git a/FlippR-Driver/src/output/items/detail/Solenoid.cpp b/FlippR-Driver/src/output/items/detail/Solenoid.cpp index c6727a3..88bcfa4 100644 --- a/FlippR-Driver/src/output/items/detail/Solenoid.cpp +++ b/FlippR-Driver/src/output/items/detail/Solenoid.cpp @@ -36,6 +36,7 @@ void Solenoid::triggerTask() void Solenoid::trigger() { + CLOG(INFO, OUTPUT_LOGGER) << "Trigger Solenoid " << name << " for " << deactivation_time.count() << "ms"; this->trigger_task = std::async(std::launch::async, &Solenoid::triggerTask, this); } diff --git a/FlippR-Driver/src/output/items/detail/Sound.cpp b/FlippR-Driver/src/output/items/detail/Sound.cpp index 6662929..1c697b8 100644 --- a/FlippR-Driver/src/output/items/detail/Sound.cpp +++ b/FlippR-Driver/src/output/items/detail/Sound.cpp @@ -29,6 +29,7 @@ pin_controller(std::move(pin_controller)), Item(address, std::move(name)), deact void Sound::play() { + CLOG(INFO, OUTPUT_LOGGER) << "Play Sound " << id << " " << name; this->play_task = std::async(std::launch::async, &Sound::playTask, this); }