working on outputgpiointerface.cpp

This commit is contained in:
Jonas Zeunert
2018-11-23 01:24:07 +01:00
parent 86f5408263
commit 972f16b0f7
13 changed files with 70 additions and 14 deletions

View File

@@ -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

View File

@@ -16,10 +16,10 @@ namespace output
namespace items namespace items
{ {
class IOutputItem class IItem
{ {
public: public:
virtual ~IOutputItem(); virtual ~IItem();
virtual void activate() = 0; virtual void activate() = 0;
virtual void deactivate() = 0; virtual void deactivate() = 0;
}; };

View File

@@ -2,7 +2,7 @@
// Created by rhetenor on 21.11.18. // Created by rhetenor on 21.11.18.
// //
#include "OutputItem.h" #include "Item.h"
namespace flippR_driver namespace flippR_driver
{ {

View File

@@ -8,7 +8,7 @@
#ifndef _SRC_OUTPUT_CABINETITEM_H_ #ifndef _SRC_OUTPUT_CABINETITEM_H_
#define _SRC_OUTPUT_CABINETITEM_H_ #define _SRC_OUTPUT_CABINETITEM_H_
#include "IOutputItem.h" #include "IItem.h"
#include "utility/IOutputGPIOInterface.h" #include "utility/IOutputGPIOInterface.h"

View File

@@ -8,7 +8,7 @@
#ifndef _SRC_OUTPUT_LAMP_H_ #ifndef _SRC_OUTPUT_LAMP_H_
#define _SRC_OUTPUT_LAMP_H_ #define _SRC_OUTPUT_LAMP_H_
#include "OutputItem.h" #include "Item.h"
#include "output/items/ILamp.h" #include "output/items/ILamp.h"
namespace flippR_driver namespace flippR_driver

View File

@@ -9,7 +9,7 @@
#define _SRC_OUTPUT_SOLENOID_H_ #define _SRC_OUTPUT_SOLENOID_H_
#include "output/items/ISolenoid.h" #include "output/items/ISolenoid.h"
#include "OutputItem.h" #include "Item.h"
#include <future> #include <future>
#include <chrono> #include <chrono>

View File

@@ -9,7 +9,7 @@
#define _SRC_OUTPUT_SOUND_H_ #define _SRC_OUTPUT_SOUND_H_
#include "output/items/ISound.h" #include "output/items/ISound.h"
#include "OutputItem.h" #include "Item.h"
#include <memory> #include <memory>
#include <string> #include <string>

View File

@@ -26,7 +26,7 @@ public:
GPIOInterface(); GPIOInterface();
virtual ~GPIOInterface() {}; virtual ~GPIOInterface() {};
/* todo ???? */ protected:
static void initialize_input_pin(char address); static void initialize_input_pin(char address);
static void initialize_output_pin(char address); static void initialize_output_pin(char address);
@@ -37,6 +37,9 @@ public:
public: public:
static std::once_flag GPIO_LIB_INITIALIZED; static std::once_flag GPIO_LIB_INITIALIZED;
private:
unsigned int pin_base;
}; };
} }

View File

@@ -7,7 +7,7 @@
#include "IOutputGPIOInterface.h" #include "IOutputGPIOInterface.h"
#include "output/items/IOutputItem.h" #include "output/items/IItem.h"
#include <memory> #include <memory>
@@ -24,8 +24,8 @@ public:
void activate_pin(int i2c_address, int pin); void activate_pin(int i2c_address, int pin);
void deactivate_pin(int i2c_address, int pin); void deactivate_pin(int i2c_address, int pin);
void activate_output_item(output::items::IOutputItem *item); void activate_output_item(output::items::IItem *item);
void deactivate_output_item(output::items::IOutputItem *item); void deactivate_output_item(output::items::IItem *item);
//Display gpio interface! //Display gpio interface!
}; };

View File

@@ -20,9 +20,9 @@ namespace utility
using namespace nlohmann; 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(); init_pins();
} }

View File

@@ -20,7 +20,7 @@ namespace utility
class InputGPIOInterface : public IInputGPIOInterface, GPIOInterface class InputGPIOInterface : public IInputGPIOInterface, GPIOInterface
{ {
public: public:
InputGPIOInterface(std::istream &input_config_stream); InputGPIOInterface(std::istream &input_config);
bool read_data(char pin); bool read_data(char pin);
private: private:

View File

@@ -13,6 +13,25 @@ namespace utility
{ {
using namespace output::items; 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) void OutputGPIOInterface::activate_output_item(IOutputItem *item)
{ {
std::lock_guard<std::mutex> guard(output_item_mutex); std::lock_guard<std::mutex> guard(output_item_mutex);

View File

@@ -25,6 +25,8 @@ class OutputGPIOInterface : public GPIOInterface
{ {
public: public:
OutputGPIOInterface(std::istream &output_config_stream);
virtual ~OutputGPIOInterface() = default; virtual ~OutputGPIOInterface() = default;
void activate(output::items::ISound *sound); void activate(output::items::ISound *sound);
@@ -37,9 +39,28 @@ public:
void write_display(output::items::IDisplay &display); 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: private:
std::mutex output_item_mutex; std::mutex output_item_mutex;
unsigned int pin_base_driver_board;
unsigned int pin_base_sounds;
unsigned int pin_base_displays;
}; };
} }