diff --git a/FlippR-Driver/contrib/json_example/output/Display_Config.json b/FlippR-Driver/contrib/json_example/output/Display_Config.json new file mode 100644 index 0000000..3214a62 --- /dev/null +++ b/FlippR-Driver/contrib/json_example/output/Display_Config.json @@ -0,0 +1,10 @@ +{ + "displays" : + [ + { + "digits" : 8, + "id" : 1, + "address" : 1 + } + ] +} \ No newline at end of file diff --git a/FlippR-Driver/include/output/OutputDriver.h b/FlippR-Driver/include/output/OutputDriver.h index 9e547e0..7a63a02 100644 --- a/FlippR-Driver/include/output/OutputDriver.h +++ b/FlippR-Driver/include/output/OutputDriver.h @@ -10,7 +10,7 @@ #include "output/items/impl/Lamp.h" #include "output/items/Solenoid.h" -#include "output/items/Display.h" +#include "output/items/OutputDisplay.h" #include "output/items/Sound.h" #include diff --git a/FlippR-Driver/include/output/items/OutputDisplay.h b/FlippR-Driver/include/output/items/Display.h similarity index 87% rename from FlippR-Driver/include/output/items/OutputDisplay.h rename to FlippR-Driver/include/output/items/Display.h index 6bd88b5..c4924f3 100644 --- a/FlippR-Driver/include/output/items/OutputDisplay.h +++ b/FlippR-Driver/include/output/items/Display.h @@ -15,12 +15,11 @@ namespace output namespace items { -class IOutputDisplay +class Display { public: - virtual ~IOutputDisplay() - {}; + virtual ~IOutputDisplay() = default; virtual void write_score(int score) = 0; }; diff --git a/FlippR-Driver/include/output/items/EightDigitDisplay.h b/FlippR-Driver/include/output/items/EightDigitDisplay.h index 1d082e8..5162961 100644 --- a/FlippR-Driver/include/output/items/EightDigitDisplay.h +++ b/FlippR-Driver/include/output/items/EightDigitDisplay.h @@ -5,7 +5,7 @@ #ifndef FLIPPR_DRIVER_IEIGHTDIGITDISPLAY_H #define FLIPPR_DRIVER_IEIGHTDIGITDISPLAY_H -#include "OutputDisplay.h" +#include "Display.h" #include @@ -16,7 +16,7 @@ namespace output namespace items { -class IEightDigitDisplay : public IOutputDisplay +class EightDigitDisplay : public Display { public: virtual void write_content(std::array content) = 0; diff --git a/FlippR-Driver/include/output/items/SevenDigitDisplay.h b/FlippR-Driver/include/output/items/SevenDigitDisplay.h index 698b1e5..1925799 100644 --- a/FlippR-Driver/include/output/items/SevenDigitDisplay.h +++ b/FlippR-Driver/include/output/items/SevenDigitDisplay.h @@ -5,7 +5,7 @@ #ifndef FLIPPR_DRIVER_ISEVENDIGITDISPLAY_H #define FLIPPR_DRIVER_ISEVENDIGITDISPLAY_H -#include "OutputDisplay.h" +#include "Display.h" #include @@ -16,7 +16,7 @@ namespace output namespace items { -class ISevenDigitDisplay : public IOutputDisplay +class SevenDigitDisplay : public Display { public: virtual void write_content(std::array content) = 0; diff --git a/FlippR-Driver/src/input/InputPinController.h b/FlippR-Driver/src/input/InputPinController.h index 99f5730..eba88a8 100644 --- a/FlippR-Driver/src/input/InputPinController.h +++ b/FlippR-Driver/src/input/InputPinController.h @@ -20,7 +20,7 @@ class InputPinController public: virtual ~InputPinController() = default; - virtual bool read_data(uint8_tpin) const = 0; + virtual bool read_data(uint8_t pin) const = 0; }; } diff --git a/FlippR-Driver/src/input/impl/InputPinController.cpp b/FlippR-Driver/src/input/impl/InputPinController.cpp index 3596748..53ec5ab 100644 --- a/FlippR-Driver/src/input/impl/InputPinController.cpp +++ b/FlippR-Driver/src/input/impl/InputPinController.cpp @@ -28,7 +28,7 @@ InputPinController::InputPinController(std::map pins) init_pins(); } -bool InputPinController::read_data(uint8_tpin) const +bool InputPinController::read_data(uint8_t pin) const { // setting address to read write_row(pin / INPUT_MATRIX_SIZE); @@ -40,14 +40,14 @@ bool InputPinController::read_data(uint8_tpin) const return read_pin(this->pins.at("data_address")); } -void InputPinController::write_row(uint8_tdata) const +void InputPinController::write_row(uint8_t data) const { write_pin(this->pins.at("row_address_A"), data & 0b001u); write_pin(this->pins.at("row_address_B"), data & 0b010u); write_pin(this->pins.at("row_address_C"), data & 0b100u); } -void InputPinController::write_col(uint8_tdata) const +void InputPinController::write_col(uint8_t data) const { write_pin(this->pins.at("col_address_A"), data & 0b001u); write_pin(this->pins.at("col_address_B"), data & 0b010u); diff --git a/FlippR-Driver/src/input/impl/InputPinController.h b/FlippR-Driver/src/input/impl/InputPinController.h index aa190e6..29cb06a 100644 --- a/FlippR-Driver/src/input/impl/InputPinController.h +++ b/FlippR-Driver/src/input/impl/InputPinController.h @@ -26,12 +26,12 @@ class InputPinController : public input::InputPinController, public PinControlle { public: explicit InputPinController(std::map pins); - bool read_data(uint8_tpin) const override; + bool read_data(uint8_t pin) const override; private: void init_pins() const; - void write_row(uint8_tdata) const; - void write_col(uint8_tdata) const; + void write_row(uint8_t data) const; + void write_col(uint8_t data) const; private: const std::map pins; diff --git a/FlippR-Driver/src/output/DisplayBoardPinController.h b/FlippR-Driver/src/output/DisplayBoardPinController.h index e18b081..15c69e2 100644 --- a/FlippR-Driver/src/output/DisplayBoardPinController.h +++ b/FlippR-Driver/src/output/DisplayBoardPinController.h @@ -5,7 +5,7 @@ #ifndef FLIPPR_DRIVER_DISPLAYPINCONTROLLER_H #define FLIPPR_DRIVER_DISPLAYPINCONTROLLER_H -#include "output/items/Display.h" +#include "output/items/OutputDisplay.h" namespace flippR_driver { diff --git a/FlippR-Driver/src/output/OutputDriverFactory.cpp b/FlippR-Driver/src/output/OutputDriverFactory.cpp index 7bf96cb..9d0696d 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.cpp +++ b/FlippR-Driver/src/output/OutputDriverFactory.cpp @@ -135,11 +135,12 @@ std::map> create_solenoids(std::is { std::map> solenoids; - json solenoids_json; - solenoid_config >> solenoids_json; + json solenoid_config_json; + solenoid_config >> solenoid_config_json; - auto deactivation_time = get_deactivation_time(solenoids_json); + auto deactivation_time = get_deactivation_time(solenoid_config_json); + json solenoids_json = solenoid_config_json.at("solenoids"); for(auto &solenoid_json : solenoids_json) { auto solenoid = create_solenoid(solenoid_json, output_gpio_interface, deactivation_time); @@ -153,9 +154,10 @@ std::map> create_lamps(std::istream &l { std::map> lamps; - json lamps_json; - lamp_config >> lamps_json; + json lamp_config_json; + lamp_config >> lamp_config_json; + json lamps_json = lamp_config_json.at("lamps"); for(auto &lamp_json : lamps_json) { auto lamp = create_lamp(lamp_json, output_gpio_interface); @@ -169,11 +171,12 @@ std::map> create_sounds(std::istream { std::map> sounds; - json sounds_json; - sound_config >> sounds_json; + json sounds_config_json; + sound_config >> sounds_config_json; - auto deactivation_time = get_deactivation_time(sounds_json); + auto deactivation_time = get_deactivation_time(sounds_config_json); + json sounds_json = sounds_config_json.at("sounds"); // todo catch for(auto &sound_json : sounds_json) { auto sound = create_sound(sound_json, output_gpio_interface, deactivation_time); @@ -190,7 +193,7 @@ std::chrono::milliseconds get_deactivation_time(nlohmann::json &json) auto deactivation_time = json.at("deactivation_time_milliseconds").get(); return std::chrono::milliseconds(deactivation_time); } - catch(json::type_error &e) + catch(json::exception &e) { // todo log and exit exit(EXIT_FAILURE); @@ -211,7 +214,7 @@ std::shared_ptr create_solenoid(nlohmann::json &solenoid_ return std::make_shared(pin_controller, address, name, deactivation_time); } - catch(json::type_error &e) + catch(json::exception &e) { // todo log and exit exit(EXIT_FAILURE); @@ -226,7 +229,7 @@ std::shared_ptr create_lamp(nlohmann::json &lamp_json, std::s auto address = lamp_json.at("address").get(); return std::make_shared(pin_controller, address, name); } - catch(json::type_error &e) + catch(json::exception &e) { // todo log and exit exit(EXIT_FAILURE); @@ -242,7 +245,7 @@ std::shared_ptr create_sound(nlohmann::json &sound_json, std auto address = sound_json.at("address").get(); return std::make_shared(pin_controller, address, description, deactivation_time, id); } - catch(json::type_error &e) + catch(json::exception &e) { // todo log and exit exit(EXIT_FAILURE); @@ -253,9 +256,39 @@ std::map> create_displays(std::istream { std::map> displays; + json display_config_json; + display_config >> display_config_json; + + json displays_json = display_config_json.at('displays'); + for(json &display_json : displays_json) + { + auto display = create_display(display_json); + } + return displays; } +std::shared_ptr create_display(nlohmann::json &display_json) +{ + try + { + auto id = display_json.at("id").get(); + auto address = display_json.at("address").get(); + + auto digits = display_json.at("digits").get(); + if(digits == 8) + { + return std::make_shared(address, id); + } + + } + catch(json::exception &e) + { + exit(EXIT_FAILURE); + } + return std::shared_ptr(); +} + } } } diff --git a/FlippR-Driver/src/output/OutputDriverFactory.h b/FlippR-Driver/src/output/OutputDriverFactory.h index fddcc6d..8dd6d01 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.h +++ b/FlippR-Driver/src/output/OutputDriverFactory.h @@ -37,6 +37,7 @@ 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 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/OutputPinController.cpp b/FlippR-Driver/src/output/OutputPinController.cpp index 3847247..09a1fa5 100644 --- a/FlippR-Driver/src/output/OutputPinController.cpp +++ b/FlippR-Driver/src/output/OutputPinController.cpp @@ -16,12 +16,12 @@ namespace flippR_driver namespace output { -void OutputPinController::initialize_i2c_address(uint8_ti2c_address, uint8_tpin_base) +void OutputPinController::initialize_i2c_address(uint8_t i2c_address, uint8_t pin_base) { mcp23017Setup(pin_base, i2c_address); } -void OutputPinController::initialize_pins_output(uint8_tpin_base) +void OutputPinController::initialize_pins_output(uint8_t pin_base) { // Since this are all outputs we just initialize everything as output conveniently for(int i = 0; i < 16; i++) diff --git a/FlippR-Driver/src/output/OutputPinController.h b/FlippR-Driver/src/output/OutputPinController.h index 327adcc..408cd4f 100644 --- a/FlippR-Driver/src/output/OutputPinController.h +++ b/FlippR-Driver/src/output/OutputPinController.h @@ -22,8 +22,8 @@ public: virtual ~OutputPinController() = default; protected: - static void initialize_i2c_address(uint8_ti2c_address, uint8_tpin_base); - static void initialize_pins_output(uint8_tpin_base); + static void initialize_i2c_address(uint8_t i2c_address, uint8_t pin_base); + static void initialize_pins_output(uint8_t pin_base); }; } diff --git a/FlippR-Driver/src/output/impl/DisplayBoardPinController.cpp b/FlippR-Driver/src/output/impl/DisplayBoardPinController.cpp index e56a95b..1331973 100644 --- a/FlippR-Driver/src/output/impl/DisplayBoardPinController.cpp +++ b/FlippR-Driver/src/output/impl/DisplayBoardPinController.cpp @@ -41,7 +41,7 @@ void DisplayBoardPinController::write_display(const items::Display &display) con } -void DisplayBoardPinController::write_display_digit(uint8_t display_address, uint8_tcontent, uint8_tposition) +void DisplayBoardPinController::write_display_digit(uint8_t display_address, uint8_t content, uint8_t position) { 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_tsegment) +void DisplayBoardPinController::select_display_segment(uint8_t segment) { 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_tcontent) +void DisplayBoardPinController::select_display_digit(uint8_t content) { 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_tcontent) write_pin(pins_display_board.at("digit_select_D"), content & 0b1000u); } -void DisplayBoardPinController::run_display(uint8_taddress) +void DisplayBoardPinController::run_display(uint8_t address) { 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 27c5674..043c62d 100644 --- a/FlippR-Driver/src/output/impl/DisplayBoardPinController.h +++ b/FlippR-Driver/src/output/impl/DisplayBoardPinController.h @@ -30,10 +30,10 @@ public: void write_display(const items::Display &display) const override; private: - void write_display_digit(uint8_t display_address, uint8_tcontent, uint8_tposition); - void select_display_segment(uint8_tdigit); - void select_display_digit(uint8_tcontent); - void run_display(uint8_taddress); + 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); private: const std::map pins_display_board; diff --git a/FlippR-Driver/src/output/impl/DisplayController.h b/FlippR-Driver/src/output/impl/DisplayController.h index 87d9d79..64a5deb 100644 --- a/FlippR-Driver/src/output/impl/DisplayController.h +++ b/FlippR-Driver/src/output/impl/DisplayController.h @@ -13,7 +13,7 @@ #include #include -#include "output/items/Display.h" +#include "output/items/OutputDisplay.h" #include "output/DisplayBoardPinController.h" namespace flippR_driver diff --git a/FlippR-Driver/src/output/items/Display.h b/FlippR-Driver/src/output/items/OutputDisplay.h similarity index 100% rename from FlippR-Driver/src/output/items/Display.h rename to FlippR-Driver/src/output/items/OutputDisplay.h diff --git a/FlippR-Driver/src/output/items/impl/Display.h b/FlippR-Driver/src/output/items/impl/Display.h index e185e1b..388823c 100644 --- a/FlippR-Driver/src/output/items/impl/Display.h +++ b/FlippR-Driver/src/output/items/impl/Display.h @@ -8,7 +8,7 @@ #ifndef _SRC_OUTPUT_DISPLAY_H_ #define _SRC_OUTPUT_DISPLAY_H_ -#include "output/items/Display.h" +#include "output/items/OutputDisplay.h" #include @@ -25,7 +25,7 @@ template class Display : public items::Display { public: - Display(int address, int id); + Display(uint8_t address, uint8_t id); virtual ~Display() = default; virtual void write_score(int score); @@ -38,7 +38,8 @@ public: std::array content; private: - int address; + 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 c02ed11..a869751 100644 --- a/FlippR-Driver/src/output/items/impl/Display.hpp +++ b/FlippR-Driver/src/output/items/impl/Display.hpp @@ -17,7 +17,7 @@ namespace impl { template -Display::Display(int address, int id) : +Display::Display(uint8_t address, uint8_t id) : address(address), id(id) { diff --git a/FlippR-Driver/src/output/items/impl/EightDigitDisplay.h b/FlippR-Driver/src/output/items/impl/EightDigitDisplay.h index a474fdc..c805e00 100644 --- a/FlippR-Driver/src/output/items/impl/EightDigitDisplay.h +++ b/FlippR-Driver/src/output/items/impl/EightDigitDisplay.h @@ -2,8 +2,8 @@ // Created by rhetenor on 20.11.18. // -#ifndef FLIPPR_DRIVER_EIGHTDIGITDISPLAY_H -#define FLIPPR_DRIVER_EIGHTDIGITDISPLAY_H +#ifndef FLIPPR_DRIVER_OUTPUT_ITEMS_IMPL_EIGHTDIGITDISPLAY_H +#define FLIPPR_DRIVER_OUTPUT_ITEMS_IMPL_EIGHTDIGITDISPLAY_H #include "output/items/EightDigitDisplay.h" @@ -16,7 +16,15 @@ namespace items namespace impl { -class EightDigitDisplay : public Display<8>, IEightDigitDisplay; +class EightDigitDisplay : public Display<8>, public EightDigitDisplay +{ +public: + EightDigitDisplay(uint8_t address, uint8_t id) : + Display<8>(address, id) {} + + ~EightDigitDisplay() override = default; + +}; } }