From b0fb71832cd682046d6a06204a0cb32d99395a33 Mon Sep 17 00:00:00 2001 From: biver Date: Thu, 30 Dec 2021 12:11:19 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B1=D0=B8=D1=80=D0=B0=D0=B5=D0=BC=20?= =?UTF-8?q?=D0=B3=D0=BB=D0=BE=D0=B1=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=B8=D0=B7=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D0=B5=D0=B9,=20?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D1=8C=20=D0=B2=D0=B5=D1=80=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C,=20=D1=87=D1=82=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=83=D1=87=D0=B8=D1=82=D1=81=D1=8F=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BB=D0=B8=D0=BD=D0=BA=D0=BE=D0=B2=D0=BA=D0=B5=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D1=82=D1=8C?= =?UTF-8?q?=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D0=B8,=20=D0=BA=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D1=8B=D0=B5=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B8=D0=B7=20api.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Modules/Sensors/IoTSensorButtonIn.cpp | 7 ++--- src/Modules/Sensors/IoTSensorDallasTemp.cpp | 30 +++++++++----------- src/Modules/Sensors/IoTSensorSHT20.cpp | 6 ++-- src/Modules/Variables/IoTVariableVirtual.cpp | 6 ++-- src/Modules/api.cpp | 24 ++++++++++------ 5 files changed, 35 insertions(+), 38 deletions(-) diff --git a/src/Modules/Sensors/IoTSensorButtonIn.cpp b/src/Modules/Sensors/IoTSensorButtonIn.cpp index 83c1daee..0ed6d95e 100644 --- a/src/Modules/Sensors/IoTSensorButtonIn.cpp +++ b/src/Modules/Sensors/IoTSensorButtonIn.cpp @@ -6,8 +6,6 @@ #include -extern std::vector iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями - class IoTSensorButtonIn: public IoTSensor { private: //описание переменных экземпляра датчика - аналог глобальных переменных из Arduino @@ -76,7 +74,6 @@ class IoTModuleButtonIn: public IoTModule { }; //точка входа в модуль для заполнения вектора, требуется только изменить имя и прописать в файле api.cpp -void getApiIoTSensorButtonIn() { - iotModules.push_back(new IoTModuleButtonIn()); - return; +void* getApiIoTSensorButtonIn() { + return new IoTModuleButtonIn(); } \ No newline at end of file diff --git a/src/Modules/Sensors/IoTSensorDallasTemp.cpp b/src/Modules/Sensors/IoTSensorDallasTemp.cpp index 7da826ab..6615ad59 100644 --- a/src/Modules/Sensors/IoTSensorDallasTemp.cpp +++ b/src/Modules/Sensors/IoTSensorDallasTemp.cpp @@ -9,7 +9,6 @@ #include #include -extern std::vector iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями //глобальные списки необходимы для хранения объектов об активных линиях 1-wire используемых разными датчиками из модуля. Ключ - номер пина std::map oneWireTemperatureArray; @@ -86,19 +85,19 @@ class IoTModuleDallasTemp: public IoTModule { //обязательный к заполнению метод, если модуль использует свои глобальные переменные. Необходимо сбросить и очистить используемую память. void clear() { - for (auto it = sensorsTemperatureArray.cbegin(), next_it = it; it != sensorsTemperatureArray.cend(); it = next_it) { - ++next_it; - DallasTemperature* tmpptr = it->second; //временно сохраняем указатель на сенсор, т.к. его преждевременное удаление оставит поломаную запись в векторе, к которой может обратиться ядро и вызвать исключение - sensorsTemperatureArray.erase(it); - delete tmpptr; //а далее уже удаляем объект сенсора - } + // for (auto it = sensorsTemperatureArray.cbegin(), next_it = it; it != sensorsTemperatureArray.cend(); it = next_it) { + // ++next_it; + // DallasTemperature* tmpptr = it->second; //временно сохраняем указатель на сенсор, т.к. его преждевременное удаление оставит поломаную запись в векторе, к которой может обратиться ядро и вызвать исключение + // sensorsTemperatureArray.erase(it); + // delete tmpptr; //а далее уже удаляем объект сенсора + // } - for (auto it = oneWireTemperatureArray.cbegin(), next_it = it; it != oneWireTemperatureArray.cend(); it = next_it) { - ++next_it; - OneWire* tmpptr = it->second; //временно сохраняем указатель на сенсор, т.к. его преждевременное удаление оставит поломаную запись в векторе, к которой может обратиться ядро и вызвать исключение - oneWireTemperatureArray.erase(it); - delete tmpptr; //а далее уже удаляем объект сенсора - } + // for (auto it = oneWireTemperatureArray.cbegin(), next_it = it; it != oneWireTemperatureArray.cend(); it = next_it) { + // ++next_it; + // OneWire* tmpptr = it->second; //временно сохраняем указатель на сенсор, т.к. его преждевременное удаление оставит поломаную запись в векторе, к которой может обратиться ядро и вызвать исключение + // oneWireTemperatureArray.erase(it); + // delete tmpptr; //а далее уже удаляем объект сенсора + // } } //обязательный метод для отправки информации о модуле, @@ -113,7 +112,6 @@ class IoTModuleDallasTemp: public IoTModule { }; //точка входа в модуль для заполнения вектора, требуется только изменить имя и прописать в файле api.cpp -void getApiIoTSensorDallasTemp() { - iotModules.push_back(new IoTModuleDallasTemp()); - return; +void* getApiIoTSensorDallasTemp() { + return new IoTModuleDallasTemp(); } \ No newline at end of file diff --git a/src/Modules/Sensors/IoTSensorSHT20.cpp b/src/Modules/Sensors/IoTSensorSHT20.cpp index 0d62910b..2d641dcd 100644 --- a/src/Modules/Sensors/IoTSensorSHT20.cpp +++ b/src/Modules/Sensors/IoTSensorSHT20.cpp @@ -8,7 +8,6 @@ #include "Wire.h" #include "SHT2x.h" -extern std::vector iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями SHT2x* sht = nullptr; @@ -76,7 +75,6 @@ class IoTModuleSHT20: public IoTModule { }; //точка входа в модуль для заполнения вектора, требуется только изменить имя и прописать в файле api.cpp -void getApiIoTSensorSHT20() { - iotModules.push_back(new IoTModuleSHT20()); - return; +void* getApiIoTSensorSHT20() { + return new IoTModuleSHT20(); } \ No newline at end of file diff --git a/src/Modules/Variables/IoTVariableVirtual.cpp b/src/Modules/Variables/IoTVariableVirtual.cpp index 196e5b9d..9b9a558d 100644 --- a/src/Modules/Variables/IoTVariableVirtual.cpp +++ b/src/Modules/Variables/IoTVariableVirtual.cpp @@ -5,7 +5,6 @@ #include "Class/IoTVariable.h" #include "Class/IoTModule.h" -extern std::vector iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями class IoTVariableVirtual: public IoTVariable { private: @@ -65,7 +64,6 @@ class IoTModuleVariable: public IoTModule { }; //точка входа в модуль для заполнения вектора, требуется только изменить имя и прописать в файле api.cpp - void getApiIoTVariableVirtual() { - iotModules.push_back(new IoTModuleVariable()); - return; + void* getApiIoTVariableVirtual() { + return new IoTModuleVariable(); } \ No newline at end of file diff --git a/src/Modules/api.cpp b/src/Modules/api.cpp index e617d033..7c1f9b69 100644 --- a/src/Modules/api.cpp +++ b/src/Modules/api.cpp @@ -1,17 +1,23 @@ #include "Utils/SerialPrint.h" -//объявляем функцию для добавления модуля в вектор -void getApiIoTSensorDallasTemp(); -void getApiIoTSensorSHT20(); -void getApiIoTSensorButtonIn(); +#include "Class/IoTSensor.h" +#include "Class/IoTModule.h" +#include "Class/IoTVariable.h" -void getApiIoTVariableVirtual(); +extern std::vector iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями + +//объявляем функцию для добавления модуля в вектор +void* getApiIoTSensorDallasTemp(); +void* getApiIoTSensorSHT20(); +void* getApiIoTSensorButtonIn(); + +void* getApiIoTVariableVirtual(); //формируем вектор модулей путем вызова из каждого модуля специальной функции //в дальнейшем предполагается отключать вызов, если модуль не участвует в сборке void InitModulesApi() { - getApiIoTSensorDallasTemp(); - getApiIoTSensorSHT20(); - getApiIoTSensorButtonIn(); + iotModules.push_back((IoTModule*) getApiIoTSensorDallasTemp()); + iotModules.push_back((IoTModule*) getApiIoTSensorSHT20()); + iotModules.push_back((IoTModule*) getApiIoTSensorButtonIn()); - getApiIoTVariableVirtual(); + iotModules.push_back((IoTModule*) getApiIoTVariableVirtual()); } \ No newline at end of file