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

@@ -5,14 +5,14 @@
* Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert
*/
#include <fstream>
#include "InputGPIOInterface.h"
#include <thread>
#include "InputGPIOInterface.h"
#include "json/json.hpp"
#include "easylogging/easylogging++.h"
#include "utility/config.h"
#include <string>
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<std::string, uint8_t> 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<json::number_integer_t>();
row_address_B = row_json.at("B").get<json::number_integer_t>();
row_address_C = row_json.at("C").get<json::number_integer_t>();
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<json::number_integer_t>();
col_address_B = col_json.at("B").get<json::number_integer_t>();
col_address_C = col_json.at("C").get<json::number_integer_t>();
data_address = input_config.at("data").get<json::number_integer_t>();
}
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"));
}
}