diff --git a/CMakeLists.txt b/CMakeLists.txt index 00fca63..3535861 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,17 +3,10 @@ project(hoymilesClient VERSION 0.1.0 LANGUAGES C CXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") -include(CTest) -enable_testing() - include_directories(inc inc/libmodbus inc/hoymiles inc/hoymiles/portParameters) file(GLOB SOURCES src/*.cpp src/libmodbus/*.c src/hoymiles/*.cpp src/hoymiles/portParameters/*.cpp) add_executable(hoymilesClient_exec ${SOURCES}) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/inc/libmodbus/config.h) - -set(CPACK_PROJECT_NAME ${PROJECT_NAME}) -set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) -include(CPack) +# configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/inc/libmodbus/config.h) diff --git a/inc/hoymiles/microinverter.h b/inc/hoymiles/microinverter.h index 47cf748..4cf2e73 100644 --- a/inc/hoymiles/microinverter.h +++ b/inc/hoymiles/microinverter.h @@ -15,14 +15,15 @@ class Microinverter { private: // std::shared_ptr modbus_context; - std::shared_ptr modbus; + std::shared_ptr modbus; // std::mutex *modbus_context_mutex; public: - Microinverter(class modbus modbus, long serialNumber); + Microinverter( + std::shared_ptr modbus, long serialNumber); long serialNumber; diff --git a/src/hoymiles/dtu.cpp b/src/hoymiles/dtu.cpp index cf10532..57e5aee 100644 --- a/src/hoymiles/dtu.cpp +++ b/src/hoymiles/dtu.cpp @@ -55,7 +55,7 @@ void Dtu::populateMicroinverters() { getMicroinverterBySerialNumber.second->ports.push_back(port); } else { - Microinverter microinverter{ this->modbus_context, serialNumber }; + Microinverter microinverter{ this->modbus, serialNumber }; this->microinverters.push_back(microinverter); this->microinverters.back().ports.push_back(port); } @@ -63,7 +63,7 @@ void Dtu::populateMicroinverters() { portStartAddress += 0x0028; // this->modbus_context_mutex.lock(); - registerCount = modbus_read_registers(*this->modbus_context.get(), portStartAddress + 0x0021, 1, readArray); + registerCount = this->modbus.get()->modbus_read_holding_registers(portStartAddress + 0x0021, 1, readArray); // this->modbus_context_mutex.unlock(); } } diff --git a/src/libmodbus/modbus-data.c b/src/hoymiles/legacy/modbus-data.c similarity index 100% rename from src/libmodbus/modbus-data.c rename to src/hoymiles/legacy/modbus-data.c diff --git a/src/libmodbus/modbus-rtu.c b/src/hoymiles/legacy/modbus-rtu.c similarity index 100% rename from src/libmodbus/modbus-rtu.c rename to src/hoymiles/legacy/modbus-rtu.c diff --git a/src/libmodbus/modbus-tcp.c b/src/hoymiles/legacy/modbus-tcp.c similarity index 100% rename from src/libmodbus/modbus-tcp.c rename to src/hoymiles/legacy/modbus-tcp.c diff --git a/src/libmodbus/modbus.c b/src/hoymiles/legacy/modbus.c similarity index 100% rename from src/libmodbus/modbus.c rename to src/hoymiles/legacy/modbus.c diff --git a/src/hoymiles/microinverter.cpp b/src/hoymiles/microinverter.cpp index 74aad6a..78b2157 100644 --- a/src/hoymiles/microinverter.cpp +++ b/src/hoymiles/microinverter.cpp @@ -7,11 +7,8 @@ #include "microinverter.h" #include "port.h" -struct _modbus; -typedef _modbus modbus_t; - -Microinverter::Microinverter(std::shared_ptr modbus_context, long serialNumber) { - this->modbus_context = modbus_context; +Microinverter::Microinverter(std::shared_ptr modbus, long serialNumber) { + this->modbus = modbus; // this->modbus_context_mutex = modbus_context_mutex; this->serialNumber = serialNumber; diff --git a/src/hoymiles/port.cpp b/src/hoymiles/port.cpp index c121c1a..71405a6 100644 --- a/src/hoymiles/port.cpp +++ b/src/hoymiles/port.cpp @@ -9,8 +9,8 @@ #include "port.h" #include "portParameters.h" -Port::Port(std::shared_ptr modbus_context, uint16_t portStartAddress) { - this->modbus_context = modbus_context; +Port::Port(std::shared_ptr modbus, uint16_t portStartAddress) { + this->modbus = modbus; // this->modbus_context_mutex = modbus_context_mutex; this->portStartAddress = portStartAddress; @@ -71,7 +71,7 @@ void Port::fixCurrent() { void Port::updateParameters() { std::vector>::iterator parametersIterator{this->parameters.begin()}; while (parametersIterator != this->parameters.end()) { - parametersIterator->get()->updateValue(this->modbus_context, this->portStartAddress); + parametersIterator->get()->updateValue(this->modbus, this->portStartAddress); parametersIterator++; } this->fixCurrent(); diff --git a/src/hoymiles/portParameters/portParametersGeneric.cpp b/src/hoymiles/portParameters/portParametersGeneric.cpp index 7dd35a5..85477c1 100644 --- a/src/hoymiles/portParameters/portParametersGeneric.cpp +++ b/src/hoymiles/portParameters/portParametersGeneric.cpp @@ -8,9 +8,6 @@ #include "portParametersGeneric.h" -struct _modbus; -typedef _modbus modbus_t; - PortParameter::PortParameter(std::string name, uint16_t parameterAddressOffset, int registerSize) { this->name = name; @@ -32,18 +29,19 @@ std::string PortParameter::getOutputValue() { return "yeet"; } -void PortParameter::updateValue(std::shared_ptr modbus_context, uint16_t portStartAddress) { +void PortParameter::updateValue(std::shared_ptr modbus, uint16_t portStartAddress) { uint16_t readArray[this->registerSize]; int registerCount; // modbus_context_mutex->lock(); - registerCount = modbus_read_registers(*modbus_context.get(), portStartAddress + this->parameterAddressOffset, this->registerSize, readArray); + registerCount = modbus.get()->modbus_read_holding_registers(portStartAddress + this->parameterAddressOffset, this->registerSize, readArray); // modbus_context_mutex->unlock(); - if(registerCount == -1){ + if(registerCount != 0){ this->age++; } else{ + registerCount = this->registerSize; this->setValueFromRegisters(readArray, registerCount); this->age = 0; }