/* * OutputGPIOInterface.h * * Created on: May 31, 2018 * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert */ #ifndef SRC_UTILITIES_OUTPUTGPIOINTERFACE_H_ #define SRC_UTILITIES_OUTPUTGPIOINTERFACE_H_ #include "IOutputGPIOInterface.h" #include "GPIOInterface.h" #include "output/items/IItem.h" #include "json/json.hpp" #include #include #include namespace flippR_driver { namespace utility { class OutputGPIOInterface : public GPIOInterface, IOutputGPIOInterface { public: OutputGPIOInterface(std::istream &output_config_stream); virtual ~OutputGPIOInterface() = default; virtual void activate(output::items::IDriverBoardItem *driver_board_item); virtual void activate(output::items::ISoundItem *sound); virtual void deactivate(output::items::IDriverBoardItem *driver_board_item); virtual void deactivate(output::items::ISoundItem *sound); virtual void write_display(output::items::IDisplay *display); private: void parse_output_config(nlohmann::json &output_config); void parse_pins_driver_board(nlohmann::json &driver_board_config); void parse_pins_sound(nlohmann::json &sound_board_config); void parse_pins_display(nlohmann::json &display_board_config); void initialize_i2c_addresses(); void initialize_pins(); void initialize_all_pins(uint8_t pin_base); void write_driver_board_address(uint8_t address); void select_mux(uint8_t latch); void select_latch(uint8_t latch); void select_pin(uint8_t pin); void write_data(bool data); void write_sound_address(uint8_t address); void fire_sound(bool fire); private: std::mutex output_item_mutex; std::map pins_driver_board {{"i2c_address", 0}, {"pin_base", 0}, {"data", 0}, {"CL", 0}, {"latch-select-A", "0"}, {"latch-select-B", "0"}, {"latch-select-C", 0}, {"mux1", 0}, {"mux2", 0}, {"pin-select-A", 0}, {"pin-select-B", 0}, {"pin-select-C", 0}}; std::map pins_sound {{"i2c_address", 0}, {"pin_base", 0}, {"fire", 0}, {"A", 0}, {"B", "0"}, {"C", "0"}, {"D", 0}, {"E", 0}, {"F", 0}, {"G", 0}}; std::map pins_display {{"i2c_address", 0}, {"pin_base", 0}, {"fire", 0}, {"A", 0}, {"B", "0"}, {"C", "0"}, {"D", 0}, {"E", 0}, {"F", 0}, {"G", 0}}; }; } } #endif