Files
flippr-code/FlippR-Driver/src/output/OutputDriverFactory.cpp
2018-12-04 16:28:51 +01:00

84 lines
2.7 KiB
C++

//
// Created by rhetenor on 04.10.18.
//
#include "OutputDriverFactory.h"
namespace flippR_driver
{
namespace output
{
namespace OutputDriverFactory
{
namespace
{
using namespace nlohmann;
std::shared_ptr<OutputGPIOInterface> createOutputGPIOInterface(std::istream &output_gpio_config)
{
json output_config;
output_gpio_config >> output_config;
return std::make_shared<OutputGPIOInterface>(
parse_pins_driver_board(output_config.at("driver_board")),
parse_pins_sound(output_config.at("sound_board")),
parse_pins_sound(output_config.at("display_board"))
);
}
std::map<std::string, uint8_t> parse_pins_driver_board(json &driver_board_config)
{
std::map<std::string, uint8_t> pins_driver_board;
pins_driver_board["i2c_address"] = driver_board_config.at("i2c_address").get<uint8_t>();
pins_driver_board["pin_base"] = driver_board_config.at("pin_base").get<uint8_t>();
pins_driver_board["data"] = driver_board_config.at("data").get<uint8_t>();
pins_driver_board["CL"] = driver_board_config.at("CL").get<uint8_t>();
json pin_select = driver_board_config.at("pin-select");
pins_driver_board["pin-select-A"] = pin_select.at("A").get<uint8_t>();
pins_driver_board["pin-select-B"] = pin_select.at("B").get<uint8_t>();
pins_driver_board["pin-select-C"] = pin_select.at("C").get<uint8_t>();
json latch_select = driver_board_config.at("latch-select");
pins_driver_board["mux1"] = latch_select.at("mux1").get<uint8_t>();
pins_driver_board["mux2"] = latch_select.at("mux2").get<uint8_t>();
pins_driver_board["latch-select-A"] = latch_select.at("A").get<uint8_t>();
pins_driver_board["latch-select-B"] = latch_select.at("B").get<uint8_t>();
pins_driver_board["latch-select-C"] = latch_select.at("C").get<uint8_t>();
return pins_driver_board;
}
std::map<std::string, uint8_t> parse_pins_sound(json &sound_board_config)
{
std::map<std::string, uint8_t> pins_sound;
pins_sound["i2c_address"] = sound_board_config.at("i2c_address").get<uint8_t>();
pins_sound["pin_base"] = sound_board_config.at("pin_base").get<uint8_t>();
pins_sound["fire"] = sound_board_config.at("fire").get<uint8_t>();
json sound_address = sound_board_config.at("sound_address");
pins_sound["A"] = sound_address.at("A").get<uint8_t>();
pins_sound["B"] = sound_address.at("B").get<uint8_t>();
pins_sound["C"] = sound_address.at("C").get<uint8_t>();
pins_sound["D"] = sound_address.at("D").get<uint8_t>();
pins_sound["E"] = sound_address.at("E").get<uint8_t>();
pins_sound["F"] = sound_address.at("F").get<uint8_t>();
pins_sound["G"] = sound_address.at("G").get<uint8_t>();
return pins_sound;
}
std::map<std::string, uint8_t> parse_pins_display(json &display_board_config)
{
return std::map<std::string, uint8_t>();
}
}
}
}
}