/* * InputDriverFactory.cpp * * Created on: Jun 14, 2018 * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert */ #include "InputDriverFactory.h" #include "utility/config.h" #include "utility/LoggerFactory.h" #include "InputDriver.h" #include "EventNotifier.h" using namespace nlohmann; using namespace flippR_driver::utility; namespace flippR_driver { namespace input { std::shared_ptr InputDriverFactory::get_InputDriver(std::istream &input_config_stream, std::istream &matrix_config_stream) { LoggerFactory::CreateInputLogger(); IBlockingQueue *event_queue = new BlockingQueue; json matrix_config; matrix_config_stream >> matrix_config; std::shared_ptr event_notifier(new EventNotifier(event_queue)); std::vector> events; std::map> name_event_map; create_input_events(matrix_config, events, name_event_map, event_notifier); std::unique_ptr input_gpio_interface(new InputGPIOInterface(input_config_stream)); std::unique_ptr detector( new Detector(std::move(input_gpio_interface), events)); return std::shared_ptr(new InputDriver(event_notifier, std::move(detector), name_event_map)); } void InputDriverFactory::create_input_events(json matrix_config, std::vector>& events, std::map>& name_event_map, std::shared_ptr event_notifier) { int global_bounce_time = matrix_config.at("global_bounce_time").get(); auto& event_array = matrix_config.at("input_matrix"); for (auto &json_event : event_array) { try { std::string name = json_event.at("name"); char address = json_event.at("address").get(); int priority = json_event.at("priority").get(); int bounce_time = global_bounce_time; auto it_bounce_time = json_event.find("bounce_time"); if (it_bounce_time != json_event.end()) { bounce_time = it_bounce_time->get(); } std::shared_ptr event_ptr(new DistributingEvent(address, priority, name, std::chrono::milliseconds(bounce_time), event_notifier)); events.push_back(event_ptr); name_event_map.emplace(name, event_ptr); } catch (json::exception &e) { CLOG(ERROR, INPUT_LOGGER) << "Matrix config-file corrupted: " << e.what(); exit(EXIT_FAILURE); } } } } }