diff --git a/FlippR-Driver/src/GPIOInterface.cpp b/FlippR-Driver/src/GPIOInterface.cpp index dac590e..58370c6 100644 --- a/FlippR-Driver/src/GPIOInterface.cpp +++ b/FlippR-Driver/src/GPIOInterface.cpp @@ -22,12 +22,12 @@ GPIOInterface::GPIOInterface() std::call_once(GPIO_LIB_INITIALIZED, wiringPiSetup); } -void GPIOInterface::initialize_input_pin(char address) +void GPIOInterface::initialize_input_pin(const char address) { pinMode(address, INPUT); } -void GPIOInterface::initialize_output_pin(char address) +void GPIOInterface::initialize_output_pin(const char address) { pinMode(address, OUTPUT); } diff --git a/FlippR-Driver/src/GPIOInterface.h b/FlippR-Driver/src/GPIOInterface.h index 9f31954..88eb243 100644 --- a/FlippR-Driver/src/GPIOInterface.h +++ b/FlippR-Driver/src/GPIOInterface.h @@ -25,13 +25,13 @@ public: virtual ~GPIOInterface() = default; protected: - static void initialize_input_pin(char address); + static void initialize_input_pin(const char address); - static void initialize_output_pin(char address); + static void initialize_output_pin(const char address); - static void write_pin(char address, char data); + static void write_pin(const char address, const char data); - static bool read_pin(char address); + static bool read_pin(const char address); public: static std::once_flag GPIO_LIB_INITIALIZED; diff --git a/FlippR-Driver/src/input/DistributingEvent.cpp b/FlippR-Driver/src/input/DistributingEvent.cpp index 248706a..2445576 100644 --- a/FlippR-Driver/src/input/DistributingEvent.cpp +++ b/FlippR-Driver/src/input/DistributingEvent.cpp @@ -6,9 +6,9 @@ flippR_driver::input::DistributingEvent::DistributingEvent(char address, int priority, std::string name, std::chrono::milliseconds bounce_time, std::shared_ptr event_notifier): - Event(address, priority, name), + Event(address, priority, std::move(name)), bounce_time(bounce_time), - event_notifier(event_notifier), + event_notifier(std::move(event_notifier)), activation_state(NOT_ACTIVATED) {} diff --git a/FlippR-Driver/src/input/EventHandler.cpp b/FlippR-Driver/src/input/EventHandler.cpp index 158c3ff..4e274ba 100644 --- a/FlippR-Driver/src/input/EventHandler.cpp +++ b/FlippR-Driver/src/input/EventHandler.cpp @@ -13,7 +13,7 @@ namespace input { EventHandler::EventHandler(std::shared_ptr input_driver) : - input_driver(input_driver) + input_driver(std::move(input_driver)) { this->input_driver->register_event_handler(this); diff --git a/FlippR-Driver/src/input/IInputGPIOInterface.h b/FlippR-Driver/src/input/IInputGPIOInterface.h index 428d36d..c98d05a 100644 --- a/FlippR-Driver/src/input/IInputGPIOInterface.h +++ b/FlippR-Driver/src/input/IInputGPIOInterface.h @@ -16,10 +16,9 @@ namespace input class IInputGPIOInterface { public: - virtual ~IInputGPIOInterface() - = default;; + virtual ~IInputGPIOInterface() = default; - virtual bool read_data(char pin) = 0; + virtual bool read_data(char pin) const = 0; }; } diff --git a/FlippR-Driver/src/input/InputDriver.cpp b/FlippR-Driver/src/input/InputDriver.cpp index 8c5e7b9..4816b1a 100644 --- a/FlippR-Driver/src/input/InputDriver.cpp +++ b/FlippR-Driver/src/input/InputDriver.cpp @@ -16,7 +16,7 @@ namespace input InputDriver::InputDriver(std::shared_ptr event_notifier, std::unique_ptr detector, std::map> events) : -event_notifier(event_notifier), detector(std::move(detector)), events(events) +event_notifier(std::move(event_notifier)), detector(std::move(detector)), events(std::move(events)) { CLOG(INFO, INPUT_LOGGER) << "Created InputDriver"; } diff --git a/FlippR-Driver/src/input/InputDriverFactory.cpp b/FlippR-Driver/src/input/InputDriverFactory.cpp index 59498af..e6ae654 100644 --- a/FlippR-Driver/src/input/InputDriverFactory.cpp +++ b/FlippR-Driver/src/input/InputDriverFactory.cpp @@ -26,7 +26,7 @@ namespace InputDriverFactory using namespace nlohmann; using namespace flippR_driver::utility; -std::shared_ptr get_InputDriver(std::istream& input_config_stream, std::istream& matrix_config_stream) +std::shared_ptr get_InputDriver(std::istream &input_pin_stream, std::istream &matrix_config_stream) { LoggerFactory::CreateInputLogger(); @@ -36,23 +36,24 @@ std::shared_ptr get_InputDriver(std::istream& input_config_stream, std::vector> events; std::map> 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 input_gpio_interface(new InputGPIOInterface(input_config_stream)); + std::unique_ptr input_gpio_interface(new InputGPIOInterface(create_pin_map(input_pin_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)); + return std::make_shared(event_notifier, std::move(detector), name_event_map); } namespace { - void create_events(json matrix_config, std::vector> &events, + void create_events(std::istream &matrix_config_stream, std::vector> &events, std::map> &name_event_map, std::shared_ptr event_notifier) { - int global_bounce_time = matrix_config.at("global_bounce_time").get(); + json matrix_config; + matrix_config_stream >> matrix_config; + + int global_bounce_time = matrix_config.at("global_bounce_time").get(); 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(); - int priority = json_event.at("priority").get(); + char address = json_event.at("address").get(); + int priority = json_event.at("priority").get(); 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(); + bounce_time = it_bounce_time->get(); } } + std::map create_pin_map(std::istream &input_pin_stream) + { + std::map 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(); + input_pin_map["row_address_B"] = row_json.at("B").get(); + input_pin_map["row_address_C"] = row_json.at("C").get(); + + json col_json = pin_config.at("col"); + input_pin_map["col_address_A"] = col_json.at("A").get(); + input_pin_map["col_address_B"] = col_json.at("B").get(); + input_pin_map["col_address_C"] = col_json.at("C").get(); + + input_pin_map["data_address"] = pin_config.at("data").get(); + } + 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; + } + } } } diff --git a/FlippR-Driver/src/input/InputDriverFactory.h b/FlippR-Driver/src/input/InputDriverFactory.h index 394188e..a98017c 100644 --- a/FlippR-Driver/src/input/InputDriverFactory.h +++ b/FlippR-Driver/src/input/InputDriverFactory.h @@ -22,17 +22,19 @@ namespace input { namespace InputDriverFactory { - std::shared_ptr get_InputDriver(std::istream& input_config_stream, std::istream& matrix_config_stream); + std::shared_ptr get_InputDriver(std::istream &input_pin_stream, std::istream &matrix_config_stream); namespace { - static void create_events(nlohmann::json matrix_config, + static void create_events(std::istream &matrix_config, std::vector> &events, std::map> &name_event_map, std::shared_ptr event_notifier); static std::shared_ptr create_event(nlohmann::json &json_event, std::shared_ptr event_notifier, int bounce_time); static void set_individual_bounce_time(nlohmann::json &json_event, int &bounce_time); + + static std::map create_pin_map(std::istream &input_pin_stream); } }; } diff --git a/FlippR-Driver/src/input/InputGPIOInterface.cpp b/FlippR-Driver/src/input/InputGPIOInterface.cpp index 477aafd..89f5ef5 100644 --- a/FlippR-Driver/src/input/InputGPIOInterface.cpp +++ b/FlippR-Driver/src/input/InputGPIOInterface.cpp @@ -5,14 +5,14 @@ * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert */ -#include +#include "InputGPIOInterface.h" + #include -#include "InputGPIOInterface.h" #include "json/json.hpp" #include "easylogging/easylogging++.h" #include "utility/config.h" -#include + namespace flippR_driver { namespace input @@ -20,14 +20,14 @@ namespace input using namespace nlohmann; -InputGPIOInterface::InputGPIOInterface(std::istream &input_config) -{ - init_members(input_config); +InputGPIOInterface::InputGPIOInterface(std::map pins) + : pins(pins) +{ init_pins(); } -bool InputGPIOInterface::read_data(char pin) +bool InputGPIOInterface::read_data(char pin) const { // setting address to read write_row(pin / INPUT_MATRIX_SIZE); @@ -36,63 +36,36 @@ bool InputGPIOInterface::read_data(char pin) // wait for mux to set address std::this_thread::sleep_for(std::chrono::nanoseconds(INPUT_SLEEP_DURATION_NANO)); - return read_pin(this->data_address); + return read_pin(this->pins.at("data_address")); } -void InputGPIOInterface::write_row(char data) +void InputGPIOInterface::write_row(char data) const { - write_pin(this->row_address_A, data & 0b001); - write_pin(this->row_address_B, data & 0b010); - write_pin(this->row_address_C, data & 0b100); + write_pin(this->pins.at("row_address_A"), data & 0b001); + write_pin(this->pins.at("row_address_B"), data & 0b010); + write_pin(this->pins.at("row_address_C"), data & 0b100); } -void InputGPIOInterface::write_col(char data) +void InputGPIOInterface::write_col(char data) const { - write_pin(this->col_address_A, data & 0b001); - write_pin(this->col_address_B, data & 0b010); - write_pin(this->col_address_C, data & 0b100); + write_pin(this->pins.at("col_address_A"), data & 0b001); + write_pin(this->pins.at("col_address_B"), data & 0b010); + write_pin(this->pins.at("col_address_C"), data & 0b100); } -void InputGPIOInterface::init_members(std::istream &input_config_stream) + + +void InputGPIOInterface::init_pins() const { - json input_config; - input_config_stream >> input_config; + initialize_output_pin(this->pins.at("col_address_A")); + initialize_output_pin(this->pins.at("col_address_B")); + initialize_output_pin(this->pins.at("col_address_C")); - try - { - json row_json = input_config.at("row"); - row_address_A = row_json.at("A").get(); - row_address_B = row_json.at("B").get(); - row_address_C = row_json.at("C").get(); + initialize_output_pin(this->pins.at("row_address_A")); + initialize_output_pin(this->pins.at("row_address_B")); + initialize_output_pin(this->pins.at("row_address_C")); - json col_json = input_config.at("col"); - col_address_A = col_json.at("A").get(); - col_address_B = col_json.at("B").get(); - col_address_C = col_json.at("C").get(); - - data_address = input_config.at("data").get(); - } - catch(json::type_error &e) - { - CLOG(ERROR, INPUT_LOGGER) << e.what(); - } - catch(json::out_of_range &e) - { - CLOG(ERROR, INPUT_LOGGER) << e.what(); - } -} - -void InputGPIOInterface::init_pins() -{ - initialize_output_pin(col_address_A); - initialize_output_pin(col_address_B); - initialize_output_pin(col_address_C); - - initialize_output_pin(row_address_A); - initialize_output_pin(row_address_B); - initialize_output_pin(row_address_C); - - initialize_input_pin(data_address); + initialize_input_pin(this->pins.at("data_address")); } } diff --git a/FlippR-Driver/src/input/InputGPIOInterface.h b/FlippR-Driver/src/input/InputGPIOInterface.h index 1822d62..10d7c49 100644 --- a/FlippR-Driver/src/input/InputGPIOInterface.h +++ b/FlippR-Driver/src/input/InputGPIOInterface.h @@ -8,8 +8,11 @@ #ifndef SRC_UTILITIES_INPUTGPIOINTERFACE_H_ #define SRC_UTILITIES_INPUTGPIOINTERFACE_H_ -#include #include "IInputGPIOInterface.h" + +#include +#include + #include "GPIOInterface.h" namespace flippR_driver @@ -20,23 +23,17 @@ namespace input class InputGPIOInterface : public IInputGPIOInterface, GPIOInterface { public: - explicit InputGPIOInterface(std::istream &input_config); - bool read_data(char pin) override; + explicit InputGPIOInterface(std::map pins); + bool read_data(char pin) const override; private: - void init_members(std::istream &input_config_stream); - void init_pins(); - void write_row(char data); - void write_col(char data); + void init_pins() const; + void write_row(char data) const; + void write_col(char data) const; private: - char row_address_A; - char row_address_B; - char row_address_C; - char col_address_A; - char col_address_B; - char col_address_C; - char data_address; + const std::map pins; + }; } diff --git a/FlippR-Driver/src/output/DisplayController.cpp b/FlippR-Driver/src/output/DisplayController.cpp index afaf63c..e49a66c 100644 --- a/FlippR-Driver/src/output/DisplayController.cpp +++ b/FlippR-Driver/src/output/DisplayController.cpp @@ -15,7 +15,7 @@ namespace output { DisplayController::DisplayController(std::vector> displays, std::shared_ptr output_gpio_interface) - : displays(displays), output_gpio_interface(output_gpio_interface), is_running(true) + : displays(std::move(displays)), output_gpio_interface(std::move(output_gpio_interface)), is_running(true) { this->display_cycle_thread = std::thread(&DisplayController::cycle_displays, this); diff --git a/FlippR-Driver/src/output/IDisplayController.h b/FlippR-Driver/src/output/IDisplayController.h index ce26085..a376370 100644 --- a/FlippR-Driver/src/output/IDisplayController.h +++ b/FlippR-Driver/src/output/IDisplayController.h @@ -16,8 +16,7 @@ class IDisplayController { public: - IDisplayController (); - virtual ~IDisplayController (); + virtual ~IDisplayController () = default; }; } /* namespace output */ diff --git a/FlippR-Driver/src/output/items/IDisplay.h b/FlippR-Driver/src/output/items/IDisplay.h index cd1ded4..b6efc10 100644 --- a/FlippR-Driver/src/output/items/IDisplay.h +++ b/FlippR-Driver/src/output/items/IDisplay.h @@ -21,8 +21,7 @@ class IDisplay { public: - IDisplay(); - virtual ~IDisplay(); + virtual ~IDisplay() = default; virtual std::vector get_content() = 0; }; diff --git a/FlippR-Driver/src/output/items/IItem.h b/FlippR-Driver/src/output/items/IItem.h index 32613ca..2ca16eb 100644 --- a/FlippR-Driver/src/output/items/IItem.h +++ b/FlippR-Driver/src/output/items/IItem.h @@ -20,7 +20,7 @@ namespace items class IItem { public: - virtual ~IItem(); + virtual ~IItem() = default; virtual uint8_t get_address() = 0; }; diff --git a/FlippR-Driver/src/output/items/Item.h b/FlippR-Driver/src/output/items/Item.h index 7277b15..5933916 100644 --- a/FlippR-Driver/src/output/items/Item.h +++ b/FlippR-Driver/src/output/items/Item.h @@ -26,7 +26,7 @@ class Item : public IItem { public: Item(std::shared_ptr output_gpio_interface, uint8_t address, std::string name); - ~Item() override; + virtual ~Item() = default; uint8_t get_address() override;