mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
Убираем глобальные переменные из модулей, есть веростность, что получится при линковке не включать модули, которые исключены из api.cpp
This commit is contained in:
@@ -6,8 +6,6 @@
|
|||||||
|
|
||||||
#include <Bounce2.h>
|
#include <Bounce2.h>
|
||||||
|
|
||||||
extern std::vector<IoTModule*> iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями
|
|
||||||
|
|
||||||
class IoTSensorButtonIn: public IoTSensor {
|
class IoTSensorButtonIn: public IoTSensor {
|
||||||
private:
|
private:
|
||||||
//описание переменных экземпляра датчика - аналог глобальных переменных из Arduino
|
//описание переменных экземпляра датчика - аналог глобальных переменных из Arduino
|
||||||
@@ -76,7 +74,6 @@ class IoTModuleButtonIn: public IoTModule {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//точка входа в модуль для заполнения вектора, требуется только изменить имя и прописать в файле api.cpp
|
//точка входа в модуль для заполнения вектора, требуется только изменить имя и прописать в файле api.cpp
|
||||||
void getApiIoTSensorButtonIn() {
|
void* getApiIoTSensorButtonIn() {
|
||||||
iotModules.push_back(new IoTModuleButtonIn());
|
return new IoTModuleButtonIn();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,6 @@
|
|||||||
#include <OneWire.h>
|
#include <OneWire.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
extern std::vector<IoTModule*> iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями
|
|
||||||
|
|
||||||
//глобальные списки необходимы для хранения объектов об активных линиях 1-wire используемых разными датчиками из модуля. Ключ - номер пина
|
//глобальные списки необходимы для хранения объектов об активных линиях 1-wire используемых разными датчиками из модуля. Ключ - номер пина
|
||||||
std::map<int, OneWire*> oneWireTemperatureArray;
|
std::map<int, OneWire*> oneWireTemperatureArray;
|
||||||
@@ -86,19 +85,19 @@ class IoTModuleDallasTemp: public IoTModule {
|
|||||||
|
|
||||||
//обязательный к заполнению метод, если модуль использует свои глобальные переменные. Необходимо сбросить и очистить используемую память.
|
//обязательный к заполнению метод, если модуль использует свои глобальные переменные. Необходимо сбросить и очистить используемую память.
|
||||||
void clear() {
|
void clear() {
|
||||||
for (auto it = sensorsTemperatureArray.cbegin(), next_it = it; it != sensorsTemperatureArray.cend(); it = next_it) {
|
// for (auto it = sensorsTemperatureArray.cbegin(), next_it = it; it != sensorsTemperatureArray.cend(); it = next_it) {
|
||||||
++next_it;
|
// ++next_it;
|
||||||
DallasTemperature* tmpptr = it->second; //временно сохраняем указатель на сенсор, т.к. его преждевременное удаление оставит поломаную запись в векторе, к которой может обратиться ядро и вызвать исключение
|
// DallasTemperature* tmpptr = it->second; //временно сохраняем указатель на сенсор, т.к. его преждевременное удаление оставит поломаную запись в векторе, к которой может обратиться ядро и вызвать исключение
|
||||||
sensorsTemperatureArray.erase(it);
|
// sensorsTemperatureArray.erase(it);
|
||||||
delete tmpptr; //а далее уже удаляем объект сенсора
|
// delete tmpptr; //а далее уже удаляем объект сенсора
|
||||||
}
|
// }
|
||||||
|
|
||||||
for (auto it = oneWireTemperatureArray.cbegin(), next_it = it; it != oneWireTemperatureArray.cend(); it = next_it) {
|
// for (auto it = oneWireTemperatureArray.cbegin(), next_it = it; it != oneWireTemperatureArray.cend(); it = next_it) {
|
||||||
++next_it;
|
// ++next_it;
|
||||||
OneWire* tmpptr = it->second; //временно сохраняем указатель на сенсор, т.к. его преждевременное удаление оставит поломаную запись в векторе, к которой может обратиться ядро и вызвать исключение
|
// OneWire* tmpptr = it->second; //временно сохраняем указатель на сенсор, т.к. его преждевременное удаление оставит поломаную запись в векторе, к которой может обратиться ядро и вызвать исключение
|
||||||
oneWireTemperatureArray.erase(it);
|
// oneWireTemperatureArray.erase(it);
|
||||||
delete tmpptr; //а далее уже удаляем объект сенсора
|
// delete tmpptr; //а далее уже удаляем объект сенсора
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
//обязательный метод для отправки информации о модуле,
|
//обязательный метод для отправки информации о модуле,
|
||||||
@@ -113,7 +112,6 @@ class IoTModuleDallasTemp: public IoTModule {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//точка входа в модуль для заполнения вектора, требуется только изменить имя и прописать в файле api.cpp
|
//точка входа в модуль для заполнения вектора, требуется только изменить имя и прописать в файле api.cpp
|
||||||
void getApiIoTSensorDallasTemp() {
|
void* getApiIoTSensorDallasTemp() {
|
||||||
iotModules.push_back(new IoTModuleDallasTemp());
|
return new IoTModuleDallasTemp();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,6 @@
|
|||||||
#include "Wire.h"
|
#include "Wire.h"
|
||||||
#include "SHT2x.h"
|
#include "SHT2x.h"
|
||||||
|
|
||||||
extern std::vector<IoTModule*> iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями
|
|
||||||
|
|
||||||
SHT2x* sht = nullptr;
|
SHT2x* sht = nullptr;
|
||||||
|
|
||||||
@@ -76,7 +75,6 @@ class IoTModuleSHT20: public IoTModule {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//точка входа в модуль для заполнения вектора, требуется только изменить имя и прописать в файле api.cpp
|
//точка входа в модуль для заполнения вектора, требуется только изменить имя и прописать в файле api.cpp
|
||||||
void getApiIoTSensorSHT20() {
|
void* getApiIoTSensorSHT20() {
|
||||||
iotModules.push_back(new IoTModuleSHT20());
|
return new IoTModuleSHT20();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,6 @@
|
|||||||
#include "Class/IoTVariable.h"
|
#include "Class/IoTVariable.h"
|
||||||
#include "Class/IoTModule.h"
|
#include "Class/IoTModule.h"
|
||||||
|
|
||||||
extern std::vector<IoTModule*> iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями
|
|
||||||
|
|
||||||
class IoTVariableVirtual: public IoTVariable {
|
class IoTVariableVirtual: public IoTVariable {
|
||||||
private:
|
private:
|
||||||
@@ -65,7 +64,6 @@ class IoTModuleVariable: public IoTModule {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//точка входа в модуль для заполнения вектора, требуется только изменить имя и прописать в файле api.cpp
|
//точка входа в модуль для заполнения вектора, требуется только изменить имя и прописать в файле api.cpp
|
||||||
void getApiIoTVariableVirtual() {
|
void* getApiIoTVariableVirtual() {
|
||||||
iotModules.push_back(new IoTModuleVariable());
|
return new IoTModuleVariable();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
@@ -1,17 +1,23 @@
|
|||||||
#include "Utils/SerialPrint.h"
|
#include "Utils/SerialPrint.h"
|
||||||
//объявляем функцию для добавления модуля в вектор
|
#include "Class/IoTSensor.h"
|
||||||
void getApiIoTSensorDallasTemp();
|
#include "Class/IoTModule.h"
|
||||||
void getApiIoTSensorSHT20();
|
#include "Class/IoTVariable.h"
|
||||||
void getApiIoTSensorButtonIn();
|
|
||||||
|
|
||||||
void getApiIoTVariableVirtual();
|
extern std::vector<IoTModule*> iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями
|
||||||
|
|
||||||
|
//объявляем функцию для добавления модуля в вектор
|
||||||
|
void* getApiIoTSensorDallasTemp();
|
||||||
|
void* getApiIoTSensorSHT20();
|
||||||
|
void* getApiIoTSensorButtonIn();
|
||||||
|
|
||||||
|
void* getApiIoTVariableVirtual();
|
||||||
|
|
||||||
//формируем вектор модулей путем вызова из каждого модуля специальной функции
|
//формируем вектор модулей путем вызова из каждого модуля специальной функции
|
||||||
//в дальнейшем предполагается отключать вызов, если модуль не участвует в сборке
|
//в дальнейшем предполагается отключать вызов, если модуль не участвует в сборке
|
||||||
void InitModulesApi() {
|
void InitModulesApi() {
|
||||||
getApiIoTSensorDallasTemp();
|
iotModules.push_back((IoTModule*) getApiIoTSensorDallasTemp());
|
||||||
getApiIoTSensorSHT20();
|
iotModules.push_back((IoTModule*) getApiIoTSensorSHT20());
|
||||||
getApiIoTSensorButtonIn();
|
iotModules.push_back((IoTModule*) getApiIoTSensorButtonIn());
|
||||||
|
|
||||||
getApiIoTVariableVirtual();
|
iotModules.push_back((IoTModule*) getApiIoTVariableVirtual());
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user