From d65d87b8f15cf0022bae36089cbeb4e0c0d5f42b Mon Sep 17 00:00:00 2001 From: Jonas Zeunert Date: Mon, 10 Dec 2018 23:04:44 +0100 Subject: [PATCH] factory --- .../contrib/json_example/Sound_Config.json | 1 + .../{src => include}/output/items/IItem.h | 2 + FlippR-Driver/include/output/items/ILamp.h | 3 +- .../include/output/items/ISolenoid.h | 4 +- FlippR-Driver/include/output/items/ISound.h | 4 +- FlippR-Driver/src/GPIOInterface.h | 3 - .../src/output/IOutputGPIOInterface.h | 6 +- .../src/output/OutputDriverFactory.cpp | 61 ++++++++++++++++++- .../src/output/OutputDriverFactory.h | 23 +++++-- .../src/output/OutputGPIOInterface.h | 5 +- .../src/output/items/IDriverBoardItem.h | 2 +- FlippR-Driver/src/output/items/ISoundItem.h | 24 -------- FlippR-Driver/src/output/items/Item.cpp | 4 ++ FlippR-Driver/src/output/items/Item.h | 3 +- FlippR-Driver/src/output/items/Sound.h | 3 +- 15 files changed, 101 insertions(+), 47 deletions(-) rename FlippR-Driver/{src => include}/output/items/IItem.h (87%) delete mode 100644 FlippR-Driver/src/output/items/ISoundItem.h diff --git a/FlippR-Driver/contrib/json_example/Sound_Config.json b/FlippR-Driver/contrib/json_example/Sound_Config.json index b9b160e..655d65d 100644 --- a/FlippR-Driver/contrib/json_example/Sound_Config.json +++ b/FlippR-Driver/contrib/json_example/Sound_Config.json @@ -1,4 +1,5 @@ { + "deactivation_time_milliseconds" : 10, "sounds" : [ { diff --git a/FlippR-Driver/src/output/items/IItem.h b/FlippR-Driver/include/output/items/IItem.h similarity index 87% rename from FlippR-Driver/src/output/items/IItem.h rename to FlippR-Driver/include/output/items/IItem.h index 2ca16eb..a3768f1 100644 --- a/FlippR-Driver/src/output/items/IItem.h +++ b/FlippR-Driver/include/output/items/IItem.h @@ -9,6 +9,7 @@ #define _SRC_OUTPUT_ICABINETITEM_H_ #include +#include namespace flippR_driver { @@ -23,6 +24,7 @@ public: virtual ~IItem() = default; virtual uint8_t get_address() = 0; + virtual std::string get_name() = 0; }; } diff --git a/FlippR-Driver/include/output/items/ILamp.h b/FlippR-Driver/include/output/items/ILamp.h index 8481924..7bf8654 100644 --- a/FlippR-Driver/include/output/items/ILamp.h +++ b/FlippR-Driver/include/output/items/ILamp.h @@ -8,6 +8,7 @@ #ifndef _SRC_OUTPUT_ILAMP_H_ #define _SRC_OUTPUT_ILAMP_H_ +#include "IItem.h" namespace flippR_driver { namespace output @@ -15,7 +16,7 @@ namespace output namespace items { -class ILamp +class ILamp : public IItem { public: ~ILamp() diff --git a/FlippR-Driver/include/output/items/ISolenoid.h b/FlippR-Driver/include/output/items/ISolenoid.h index 50ca57d..676f40d 100644 --- a/FlippR-Driver/include/output/items/ISolenoid.h +++ b/FlippR-Driver/include/output/items/ISolenoid.h @@ -8,6 +8,8 @@ #ifndef _SRC_OUTPUT_ISOLENOID_H_ #define _SRC_OUTPUT_ISOLENOID_H_ +#include "IItem.h" + namespace flippR_driver { namespace output @@ -15,7 +17,7 @@ namespace output namespace items { -class ISolenoid +class ISolenoid : public IItem { public: ~ISolenoid() diff --git a/FlippR-Driver/include/output/items/ISound.h b/FlippR-Driver/include/output/items/ISound.h index da1f12d..8e6ce39 100644 --- a/FlippR-Driver/include/output/items/ISound.h +++ b/FlippR-Driver/include/output/items/ISound.h @@ -8,6 +8,8 @@ #ifndef _SRC_OUTPUT_ISOUND_H_ #define _SRC_OUTPUT_ISOUND_H_ +#include "IItem.h" + namespace flippR_driver { namespace output @@ -15,7 +17,7 @@ namespace output namespace items { -class ISound +class ISound : public IItem { public: ISound(); diff --git a/FlippR-Driver/src/GPIOInterface.h b/FlippR-Driver/src/GPIOInterface.h index e3e2cd0..9580fe1 100644 --- a/FlippR-Driver/src/GPIOInterface.h +++ b/FlippR-Driver/src/GPIOInterface.h @@ -35,9 +35,6 @@ protected: public: static std::once_flag GPIO_LIB_INITIALIZED; - -private: - unsigned int pin_base; }; } diff --git a/FlippR-Driver/src/output/IOutputGPIOInterface.h b/FlippR-Driver/src/output/IOutputGPIOInterface.h index dd96a8b..ab666cf 100644 --- a/FlippR-Driver/src/output/IOutputGPIOInterface.h +++ b/FlippR-Driver/src/output/IOutputGPIOInterface.h @@ -8,7 +8,7 @@ #include "IOutputGPIOInterface.h" #include "output/items/IDriverBoardItem.h" -#include "output/items/ISoundItem.h" +#include "output/items/ISound.h" #include "output/items/IDisplay.h" #include @@ -23,10 +23,10 @@ public: virtual ~IOutputGPIOInterface() = default; virtual void activate(items::IDriverBoardItem *driver_board_item) = 0; - virtual void activate(items::ISoundItem *sound) = 0; + virtual void activate(items::ISound *sound) = 0; virtual void deactivate(items::IDriverBoardItem *driver_board_item) = 0; - virtual void deactivate(items::ISoundItem *sound) = 0; + virtual void deactivate(items::ISound *sound) = 0; virtual void write_display(std::shared_ptr display) = 0; //Display gpio interface! diff --git a/FlippR-Driver/src/output/OutputDriverFactory.cpp b/FlippR-Driver/src/output/OutputDriverFactory.cpp index c2eef98..7fe8659 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.cpp +++ b/FlippR-Driver/src/output/OutputDriverFactory.cpp @@ -16,10 +16,21 @@ namespace using namespace nlohmann; -std::shared_ptr createOutputGPIOInterface(std::istream &output_gpio_config) +std::shared_ptr get_OutputDriver(std::istream &output_pin_config, std::istream &solenoid_config, std::istream &lamp_config, std::istream &sound_config) +{ + auto output_gpio_interface = create_OutputGPIOInterface(output_pin_config); + + auto solenoids = create_solenoids(solenoid_config, output_gpio_interface); + auto lamps = create_lamps(lamp_config, output_gpio_interface); + auto sounds = create_sounds(sound_config, output_gpio_interface); + + return std::make_shared(solenoids, lamps, sounds); +} + +std::shared_ptr create_OutputGPIOInterface(std::istream &output_pin_config) { json output_config; - output_gpio_config >> output_config; + output_pin_config >> output_config; return std::make_shared( parse_pins_driver_board(output_config.at("driver_board")), @@ -77,8 +88,54 @@ std::map parse_pins_display(json &display_board_config) return std::map(); } +std::map> create_solenoids(std::istream &solenoid_config, std::shared_ptr output_gpio_interface) +{ + std::map solenoids; + return solenoids; +} + +std::map> create_lamps(std::istream &lamp_config, std::shared_ptr output_gpio_interface) +{ + std::map lamps; + return lamps; +} + +std::map> create_sounds(std::istream &sound_config, std::shared_ptr output_gpio_interface) +{ + std::map> sounds; + + json sounds_json; + sound_config >> sounds_json; + + for(auto &sound_json : sounds_json) + { + auto sound = create_sound(sound_json); + sounds.emplace(sound->get_name(), sound); + } + + return sounds; +} +std::shared_ptr create_solenoid(nlohmann::json &solenoid_json, std::shared_ptr output_gpio_interface) +{ + return std::shared_ptr(); +} + +std::shared_ptr create_sound(nlohmann::json &sound_json, std::shared_ptr &output_gpio_interface, std::chrono::milliseconds deactivation_time) +{ + try + { + uint id = sound_json.at("id").get(); + std::string name = sound_json.at("name"); + uint8_t address = sound_json.at("address").get(); + return std::make_shared(output_gpio_interface, address, name, deactivation_time, id); + } + catch(json::type_error &e) + { + // todo log and exit + } } +} } } } \ No newline at end of file diff --git a/FlippR-Driver/src/output/OutputDriverFactory.h b/FlippR-Driver/src/output/OutputDriverFactory.h index b627ea9..9c33e85 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.h +++ b/FlippR-Driver/src/output/OutputDriverFactory.h @@ -5,7 +5,10 @@ #ifndef flippR_driver_OUTPUTDRIVERFACTORY_H #define flippR_driver_OUTPUTDRIVERFACTORY_H -#include +#include "output/IOutputDriver.h" +#include "output/items/Solenoid.h" +#include "output/items/Lamp.h" +#include "output/items/Sound.h" #include "OutputGPIOInterface.h" #include @@ -16,15 +19,23 @@ namespace output { namespace OutputDriverFactory { - static std::shared_ptr get_OutputDriver(std::istream &output_pin_config, std::istream &solenoid_config, std::istream &lamp_config, std::istream &sound_config); + std::shared_ptr get_OutputDriver(std::istream &output_pin_config, std::istream &solenoid_config, std::istream &lamp_config, std::istream &sound_config); namespace { - static std::shared_ptr createOutputGPIOInterface(std::istream &output_gpio_config); + std::map> create_solenoids(std::istream &solenoid_config, std::shared_ptr output_gpio_interface); + std::shared_ptr create_solenoid(nlohmann::json &solenoid_json, std::shared_ptr output_gpio_interface); - static std::map parse_pins_driver_board(nlohmann::json &driver_board_config); - static std::map parse_pins_sound(nlohmann::json &sound_board_config); - static std::map parse_pins_display(nlohmann::json &display_board_config); + std::map> create_lamps(std::istream &lamp_config, std::shared_ptr output_gpio_interface); + std::shared_ptr create_lamp(nlohmann::json &lamp_json, std::shared_ptr output_gpio_interface); + + std::map> create_sounds(std::istream &sound_config, std::shared_ptr output_gpio_interface); + std::shared_ptr create_sound(nlohmann::json &sound_json, std::shared_ptr output_gpio_interface, std::chrono::milliseconds deactivation_time); + + std::shared_ptr create_OutputGPIOInterface(std::istream &output_pin_config); + std::map parse_pins_driver_board(nlohmann::json &driver_board_config); + std::map parse_pins_sound(nlohmann::json &sound_board_config); + std::map parse_pins_display(nlohmann::json &display_board_config); } } } diff --git a/FlippR-Driver/src/output/OutputGPIOInterface.h b/FlippR-Driver/src/output/OutputGPIOInterface.h index c217d16..0dcf8df 100644 --- a/FlippR-Driver/src/output/OutputGPIOInterface.h +++ b/FlippR-Driver/src/output/OutputGPIOInterface.h @@ -18,6 +18,7 @@ #include #include #include +#include namespace flippR_driver { namespace output @@ -32,10 +33,10 @@ public: ~OutputGPIOInterface() override = default; void activate(items::IDriverBoardItem *driver_board_item) override; - void activate(items::ISoundItem *sound) override; + void activate(items::ISound *sound) override; void deactivate(items::IDriverBoardItem *driver_board_item) override; - void deactivate(items::ISoundItem *sound) override; + void deactivate(items::ISound *sound) override; void write_display(std::shared_ptr display) override; diff --git a/FlippR-Driver/src/output/items/IDriverBoardItem.h b/FlippR-Driver/src/output/items/IDriverBoardItem.h index e44fdcd..c7d6e85 100644 --- a/FlippR-Driver/src/output/items/IDriverBoardItem.h +++ b/FlippR-Driver/src/output/items/IDriverBoardItem.h @@ -5,7 +5,7 @@ #ifndef FLIPPR_DRIVER_IDRIVERBOARDITEM_H #define FLIPPR_DRIVER_IDRIVERBOARDITEM_H -#include "IItem.h" +#include "output/items/IItem.h" #include diff --git a/FlippR-Driver/src/output/items/ISoundItem.h b/FlippR-Driver/src/output/items/ISoundItem.h deleted file mode 100644 index 942ce76..0000000 --- a/FlippR-Driver/src/output/items/ISoundItem.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// Created by rhetenor on 23.11.18. -// - -#ifndef FLIPPR_DRIVER_ISOUNDITEM_H -#define FLIPPR_DRIVER_ISOUNDITEM_H - -#include "IItem.h" -namespace flippR_driver -{ -namespace output -{ -namespace items -{ -class ISoundItem : public IItem -{ - -}; - -} -} -} - -#endif //FLIPPR_DRIVER_ISOUNDITEM_H diff --git a/FlippR-Driver/src/output/items/Item.cpp b/FlippR-Driver/src/output/items/Item.cpp index 644d15b..8cb3477 100644 --- a/FlippR-Driver/src/output/items/Item.cpp +++ b/FlippR-Driver/src/output/items/Item.cpp @@ -21,6 +21,10 @@ uint8_t Item::get_address() { return this->address; } +std::string Item::get_name() +{ + return this->name; +} } } diff --git a/FlippR-Driver/src/output/items/Item.h b/FlippR-Driver/src/output/items/Item.h index add8eee..584be89 100644 --- a/FlippR-Driver/src/output/items/Item.h +++ b/FlippR-Driver/src/output/items/Item.h @@ -8,7 +8,7 @@ #ifndef _SRC_OUTPUT_CABINETITEM_H_ #define _SRC_OUTPUT_CABINETITEM_H_ -#include "IItem.h" +#include "output/items/IItem.h" #include "output/IOutputGPIOInterface.h" @@ -29,6 +29,7 @@ public: ~Item() override = default; uint8_t get_address() override; + std::string get_name() override; protected: const uint8_t address; diff --git a/FlippR-Driver/src/output/items/Sound.h b/FlippR-Driver/src/output/items/Sound.h index 2853f5b..5fc414b 100644 --- a/FlippR-Driver/src/output/items/Sound.h +++ b/FlippR-Driver/src/output/items/Sound.h @@ -9,7 +9,6 @@ #define _SRC_OUTPUT_SOUND_H_ #include "output/items/ISound.h" -#include "ISoundItem.h" #include "Item.h" #include @@ -25,7 +24,7 @@ namespace output namespace items { -class Sound : public ISound, Item, ISoundItem +class Sound : public ISound, Item { public: u_int id;