/* * InputGPIOInterface.cpp * * Created on: May 31, 2018 * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert, Rafael Vinci, Dr. Franca Rupprecht */ #include #include #include "InputGPIOInterface.h" #include "lib/json/json.hpp" #include "lib/easylogging/easylogging++.h" #include "config.h" #include using namespace nlohmann; bool InputGPIOInterface::read_input_data(char pin) { // setting address to read write_input_row(pin / INPUT_MATRIX_SIZE); write_input_col(pin % INPUT_MATRIX_SIZE); // wait for mux to set address std::this_thread::sleep_for(std::chrono::nanoseconds(INPUT_SLEEP_DURATION_NANO)); return read_pin(this->input_data_address); } void InputGPIOInterface::write_input_row(char data) { write_pin(this->input_row_address_A, data & 0b001); write_pin(this->input_row_address_B, data & 0b010); write_pin(this->input_row_address_C, data & 0b100); } void InputGPIOInterface::write_input_col(char data) { write_pin(this->input_col_address_A, data & 0b001); write_pin(this->input_col_address_B, data & 0b010); write_pin(this->input_col_address_C, data & 0b100); } InputGPIOInterface::InputGPIOInterface(std::string matrix_config_path) { std::ifstream matrix_config_stream(matrix_config_path); json matrix_config; matrix_config_stream >> matrix_config; try { json matrix_config_input = matrix_config.at("input"); json row_json = matrix_config.at("row"); input_row_address_A = row_json.at("A").get(); input_row_address_B = row_json.at("B").get(); input_row_address_C = row_json.at("C").get(); json col_json = matrix_config.at("col"); input_col_address_A = col_json.at("A").get(); input_col_address_B = col_json.at("B").get(); input_col_address_C = col_json.at("C").get(); input_data_address = matrix_config.at("data").get(); } catch (json::type_error& e) { CLOG(ERROR, INPUT_LOGGER) << "ERROR"; } catch (json::out_of_range& e) { CLOG(ERROR, INPUT_LOGGER) << "ANOTHER ERROR!"; } }