diff --git a/FlippR-Driver/contrib/uml/OutputItem_SequenceDiagram.puml b/FlippR-Driver/contrib/uml/OutputItem_SequenceDiagram.puml new file mode 100644 index 0000000..5d4ce05 --- /dev/null +++ b/FlippR-Driver/contrib/uml/OutputItem_SequenceDiagram.puml @@ -0,0 +1,13 @@ +@startuml +Sound -> GPIOInterface:activate() +GPIOInterface --> GPIOInterface:setAddress() +GPIOInterface --> GPIOInterface:setDataPin(1) +GPIOInterface -> Sound:done +Sound --> Sound:sleep_for() +Sound -> GPIOInterface:deactivate() +GPIOInterface --> GPIOInterface:setAddress() +GPIOInterface --> GPIOInterface:setDataPin(0) +GPIOInterface -> Sound:done + + +@enduml \ No newline at end of file diff --git a/FlippR-Driver/src/output/items/IOutputItem.h b/FlippR-Driver/src/output/items/IItem.h similarity index 87% rename from FlippR-Driver/src/output/items/IOutputItem.h rename to FlippR-Driver/src/output/items/IItem.h index 5f2c064..03e0942 100644 --- a/FlippR-Driver/src/output/items/IOutputItem.h +++ b/FlippR-Driver/src/output/items/IItem.h @@ -16,10 +16,10 @@ namespace output namespace items { -class IOutputItem +class IItem { public: - virtual ~IOutputItem(); + virtual ~IItem(); virtual void activate() = 0; virtual void deactivate() = 0; }; diff --git a/FlippR-Driver/src/output/items/OutputItem.cpp b/FlippR-Driver/src/output/items/Item.cpp similarity index 96% rename from FlippR-Driver/src/output/items/OutputItem.cpp rename to FlippR-Driver/src/output/items/Item.cpp index 1af53ea..2bc2bb5 100644 --- a/FlippR-Driver/src/output/items/OutputItem.cpp +++ b/FlippR-Driver/src/output/items/Item.cpp @@ -2,7 +2,7 @@ // Created by rhetenor on 21.11.18. // -#include "OutputItem.h" +#include "Item.h" namespace flippR_driver { diff --git a/FlippR-Driver/src/output/items/OutputItem.h b/FlippR-Driver/src/output/items/Item.h similarity index 97% rename from FlippR-Driver/src/output/items/OutputItem.h rename to FlippR-Driver/src/output/items/Item.h index f892f60..c541762 100644 --- a/FlippR-Driver/src/output/items/OutputItem.h +++ b/FlippR-Driver/src/output/items/Item.h @@ -8,7 +8,7 @@ #ifndef _SRC_OUTPUT_CABINETITEM_H_ #define _SRC_OUTPUT_CABINETITEM_H_ -#include "IOutputItem.h" +#include "IItem.h" #include "utility/IOutputGPIOInterface.h" diff --git a/FlippR-Driver/src/output/items/Lamp.h b/FlippR-Driver/src/output/items/Lamp.h index 5574b3f..a8a8494 100644 --- a/FlippR-Driver/src/output/items/Lamp.h +++ b/FlippR-Driver/src/output/items/Lamp.h @@ -8,7 +8,7 @@ #ifndef _SRC_OUTPUT_LAMP_H_ #define _SRC_OUTPUT_LAMP_H_ -#include "OutputItem.h" +#include "Item.h" #include "output/items/ILamp.h" namespace flippR_driver diff --git a/FlippR-Driver/src/output/items/Solenoid.h b/FlippR-Driver/src/output/items/Solenoid.h index 02a4cb1..03b6334 100644 --- a/FlippR-Driver/src/output/items/Solenoid.h +++ b/FlippR-Driver/src/output/items/Solenoid.h @@ -9,7 +9,7 @@ #define _SRC_OUTPUT_SOLENOID_H_ #include "output/items/ISolenoid.h" -#include "OutputItem.h" +#include "Item.h" #include #include diff --git a/FlippR-Driver/src/output/items/Sound.h b/FlippR-Driver/src/output/items/Sound.h index 07cae11..f5909f0 100644 --- a/FlippR-Driver/src/output/items/Sound.h +++ b/FlippR-Driver/src/output/items/Sound.h @@ -9,7 +9,7 @@ #define _SRC_OUTPUT_SOUND_H_ #include "output/items/ISound.h" -#include "OutputItem.h" +#include "Item.h" #include #include diff --git a/FlippR-Driver/src/utility/GPIOInterface.h b/FlippR-Driver/src/utility/GPIOInterface.h index 70ce909..c6e62b8 100644 --- a/FlippR-Driver/src/utility/GPIOInterface.h +++ b/FlippR-Driver/src/utility/GPIOInterface.h @@ -26,7 +26,7 @@ public: GPIOInterface(); virtual ~GPIOInterface() {}; -/* todo ???? */ +protected: static void initialize_input_pin(char address); static void initialize_output_pin(char address); @@ -37,6 +37,9 @@ public: public: static std::once_flag GPIO_LIB_INITIALIZED; + +private: + unsigned int pin_base; }; } diff --git a/FlippR-Driver/src/utility/IOutputGPIOInterface.h b/FlippR-Driver/src/utility/IOutputGPIOInterface.h index d633d54..a04d196 100644 --- a/FlippR-Driver/src/utility/IOutputGPIOInterface.h +++ b/FlippR-Driver/src/utility/IOutputGPIOInterface.h @@ -7,7 +7,7 @@ #include "IOutputGPIOInterface.h" -#include "output/items/IOutputItem.h" +#include "output/items/IItem.h" #include @@ -24,8 +24,8 @@ public: void activate_pin(int i2c_address, int pin); void deactivate_pin(int i2c_address, int pin); - void activate_output_item(output::items::IOutputItem *item); - void deactivate_output_item(output::items::IOutputItem *item); + void activate_output_item(output::items::IItem *item); + void deactivate_output_item(output::items::IItem *item); //Display gpio interface! }; diff --git a/FlippR-Driver/src/utility/InputGPIOInterface.cpp b/FlippR-Driver/src/utility/InputGPIOInterface.cpp index 1553667..90d0cbf 100644 --- a/FlippR-Driver/src/utility/InputGPIOInterface.cpp +++ b/FlippR-Driver/src/utility/InputGPIOInterface.cpp @@ -20,9 +20,9 @@ namespace utility using namespace nlohmann; -InputGPIOInterface::InputGPIOInterface(std::istream &input_config_stream) +InputGPIOInterface::InputGPIOInterface(std::istream &input_config) { - init_members(input_config_stream); + init_members(input_config); init_pins(); } diff --git a/FlippR-Driver/src/utility/InputGPIOInterface.h b/FlippR-Driver/src/utility/InputGPIOInterface.h index 2e0cc3b..5f392ca 100644 --- a/FlippR-Driver/src/utility/InputGPIOInterface.h +++ b/FlippR-Driver/src/utility/InputGPIOInterface.h @@ -20,7 +20,7 @@ namespace utility class InputGPIOInterface : public IInputGPIOInterface, GPIOInterface { public: - InputGPIOInterface(std::istream &input_config_stream); + InputGPIOInterface(std::istream &input_config); bool read_data(char pin); private: diff --git a/FlippR-Driver/src/utility/OutputGpioInterface.cpp b/FlippR-Driver/src/utility/OutputGPIOInterface.cpp similarity index 50% rename from FlippR-Driver/src/utility/OutputGpioInterface.cpp rename to FlippR-Driver/src/utility/OutputGPIOInterface.cpp index 133b897..753e61a 100644 --- a/FlippR-Driver/src/utility/OutputGpioInterface.cpp +++ b/FlippR-Driver/src/utility/OutputGPIOInterface.cpp @@ -13,6 +13,25 @@ namespace utility { using namespace output::items; +OutputGPIOInterface::OutputGPIOInterface(std::istream &output_config_stream) +{ + json output_config; + output_config_stream >> output_config; + + parse_pin_bases(output_config); + + initialize_i2c_addresses(output_config); + + initialize_pins(); +} + +void OutputGPIOInterface::initialize_i2c_addresses(json &output_config) +{ + mcp23017Setup(i2c_address_driver_board, parse_i2c_address_driver_board(output_config)); + mcp23017Setup(i2c_address_sounds, parse_i2c_address_sound_board(output_config)); + mcp23017Setup(pin_base_displays, parse_i2c_address_display_board(output_config)); +} + void OutputGPIOInterface::activate_output_item(IOutputItem *item) { std::lock_guard guard(output_item_mutex); diff --git a/FlippR-Driver/src/utility/OutputGPIOInterface.h b/FlippR-Driver/src/utility/OutputGPIOInterface.h index c8979b5..678cacc 100644 --- a/FlippR-Driver/src/utility/OutputGPIOInterface.h +++ b/FlippR-Driver/src/utility/OutputGPIOInterface.h @@ -25,6 +25,8 @@ class OutputGPIOInterface : public GPIOInterface { public: + OutputGPIOInterface(std::istream &output_config_stream); + virtual ~OutputGPIOInterface() = default; void activate(output::items::ISound *sound); @@ -37,9 +39,28 @@ public: void write_display(output::items::IDisplay &display); +private: + void parse_pin_bases(json &output_config_stream); + void initialize_i2c_addresses(json &output_config); + + char parse_i2c_address_driver_board(json &output_config_stream); + char parse_i2c_address_sound_board(json &output_config_stream); + char parse_i2c_address_display_board(json &output_config_stream); + + void initialize_pins(); + + void activate(output::items::IOutputItem outputItem); + private: std::mutex output_item_mutex; + unsigned int pin_base_driver_board; + unsigned int pin_base_sounds; + unsigned int pin_base_displays; + + + + }; }