moved gpio interface pin parsing to factory

This commit is contained in:
Jonas Zeunert
2018-12-07 13:27:49 +01:00
parent dc95c45d9b
commit b4cc8b7194
15 changed files with 105 additions and 100 deletions

View File

@@ -26,7 +26,7 @@ namespace InputDriverFactory
using namespace nlohmann;
using namespace flippR_driver::utility;
std::shared_ptr<IInputDriver> get_InputDriver(std::istream& input_config_stream, std::istream& matrix_config_stream)
std::shared_ptr<IInputDriver> get_InputDriver(std::istream &input_pin_stream, std::istream &matrix_config_stream)
{
LoggerFactory::CreateInputLogger();
@@ -36,23 +36,24 @@ std::shared_ptr<IInputDriver> get_InputDriver(std::istream& input_config_stream,
std::vector<std::shared_ptr<DistributingEvent>> events;
std::map<std::string, std::shared_ptr<Event>> name_event_map;
json matrix_config;
matrix_config_stream >> matrix_config;
create_events(matrix_config, events, name_event_map, event_notifier);
create_events(matrix_config_stream, events, name_event_map, event_notifier);
std::unique_ptr<IInputGPIOInterface> input_gpio_interface(new InputGPIOInterface(input_config_stream));
std::unique_ptr<IInputGPIOInterface> input_gpio_interface(new InputGPIOInterface(create_pin_map(input_pin_stream)));
std::unique_ptr<IDetector> detector(new Detector(std::move(input_gpio_interface), events));
return std::shared_ptr<InputDriver>(new InputDriver(event_notifier, std::move(detector), name_event_map));
return std::make_shared<InputDriver>(event_notifier, std::move(detector), name_event_map);
}
namespace
{
void create_events(json matrix_config, std::vector<std::shared_ptr<DistributingEvent>> &events,
void create_events(std::istream &matrix_config_stream, std::vector<std::shared_ptr<DistributingEvent>> &events,
std::map<std::string, std::shared_ptr<Event>> &name_event_map,
std::shared_ptr<IEventNotifier> event_notifier)
{
int global_bounce_time = matrix_config.at("global_bounce_time").get<json::number_integer_t>();
json matrix_config;
matrix_config_stream >> matrix_config;
int global_bounce_time = matrix_config.at("global_bounce_time").get<uint8_t>();
auto &json_events = matrix_config.at("input_matrix");
for(auto &json_event : json_events)
{
@@ -68,8 +69,8 @@ namespace
try
{
std::string name = json_event.at("name");
char address = json_event.at("address").get<json::number_integer_t>();
int priority = json_event.at("priority").get<json::number_integer_t>();
char address = json_event.at("address").get<uint8_t>();
int priority = json_event.at("priority").get<uint8_t>();
set_individual_bounce_time(json_event, bounce_time);
@@ -88,10 +89,45 @@ namespace
if(it_bounce_time != json_event.end())
{
bounce_time = it_bounce_time->get<json::number_integer_t>();
bounce_time = it_bounce_time->get<uint8_t>();
}
}
std::map<std::string, uint8_t> create_pin_map(std::istream &input_pin_stream)
{
std::map<std::string, uint8_t> input_pin_map;
json pin_config;
input_pin_stream >> pin_config;
try
{
json row_json = pin_config.at("row");
input_pin_map["row_address_A"] = row_json.at("A").get<uint8_t>();
input_pin_map["row_address_B"] = row_json.at("B").get<uint8_t>();
input_pin_map["row_address_C"] = row_json.at("C").get<uint8_t>();
json col_json = pin_config.at("col");
input_pin_map["col_address_A"] = col_json.at("A").get<uint8_t>();
input_pin_map["col_address_B"] = col_json.at("B").get<uint8_t>();
input_pin_map["col_address_C"] = col_json.at("C").get<uint8_t>();
input_pin_map["data_address"] = pin_config.at("data").get<uint8_t>();
}
catch(json::type_error &e)
{
CLOG(ERROR, INPUT_LOGGER) << "Input json corrupted! " << e.what();
exit(EXIT_FAILURE);
}
catch(json::out_of_range &e)
{
CLOG(ERROR, INPUT_LOGGER) << "Input json corrupted! " << e.what();
exit(EXIT_FAILURE);
}
return input_pin_map;
}
}
}
}