From 04f72f2bb573baef69283e8d5fd5b8205dd0baf6 Mon Sep 17 00:00:00 2001 From: Jonas Zeunert Date: Thu, 9 Jan 2020 20:26:31 +0100 Subject: [PATCH] reworked mcp initialization --- FlippR-Driver/src/PinController.cpp | 11 +++++++++++ FlippR-Driver/src/PinController.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/FlippR-Driver/src/PinController.cpp b/FlippR-Driver/src/PinController.cpp index 0b2f845..f122399 100644 --- a/FlippR-Driver/src/PinController.cpp +++ b/FlippR-Driver/src/PinController.cpp @@ -50,6 +50,17 @@ bool PinController::read_pin(uint8_t address) void PinController::initialize_port_expander(const uint8_t i2c_address, const uint8_t pin_base) { + auto initialized_port_extender = this->initialized_port_extenders.insert(std::pair(i2c_address, pin_base); + if(initialized_port_extender->second) + { + if(initialized_port_extender->first->second != pin_base) + { + CLOG(ERROR, OUTPUT_LOGGER) << "Port extender with address " << i2c_address + << " is already initialized with pin base " << pin_base; + } + return; + } + mcp23017Setup(pin_base, i2c_address); char hex_string[4]; sprintf(hex_string, "%X", i2c_address); diff --git a/FlippR-Driver/src/PinController.h b/FlippR-Driver/src/PinController.h index 13781fa..f1aa4cc 100644 --- a/FlippR-Driver/src/PinController.h +++ b/FlippR-Driver/src/PinController.h @@ -39,6 +39,8 @@ public: static std::once_flag GPIO_LIB_INITIALIZED; static std::mutex lock; + + std::map initialized_port_extenders; }; }