Skip to content
Snippets Groups Projects
Verified Commit 8f0a8f78 authored by Zoe Michaela Dietmar Pfister's avatar Zoe Michaela Dietmar Pfister :gay_pride_flag:
Browse files

WIP: Specify global constants for NO_CHANNEL and NO_I2C_ADDRESS, remove optional

parent f44e7cdf
No related branches found
No related tags found
2 merge requests!39Merge Develop into Main,!27Move from json-string based transfer between client and host to C struct / class based transfer
Showing
with 114 additions and 72 deletions
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" /> <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$">
<contentRoot DIR="$PROJECT_DIR$/.." />
</component>
</project> </project>
\ No newline at end of file
...@@ -21,7 +21,7 @@ SET(CMAKE_C_STANDARD 99) ...@@ -21,7 +21,7 @@ SET(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
if (CMAKE_BUILD_TYPE MATCHES "esp32cam") if (CMAKE_BUILD_TYPE MATCHES "esp32cam")
add_definitions(-DPLATFORMIO=60104) add_definitions(-DPLATFORMIO=60105)
add_definitions(-DARDUINO_ESP32_DEV) add_definitions(-DARDUINO_ESP32_DEV)
add_definitions(-DBOARD_HAS_PSRAM) add_definitions(-DBOARD_HAS_PSRAM)
add_definitions(-DCORE_DEBUG_LEVEL=5) add_definitions(-DCORE_DEBUG_LEVEL=5)
...@@ -247,10 +247,14 @@ if (CMAKE_BUILD_TYPE MATCHES "esp32cam") ...@@ -247,10 +247,14 @@ if (CMAKE_BUILD_TYPE MATCHES "esp32cam")
include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/dio_qspi/include") include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/dio_qspi/include")
include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/cores/esp32") include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/cores/esp32")
include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/variants/esp32") include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/variants/esp32")
include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/.idea")
include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/LC7090203F")
include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/SentecSensors")
include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/deep_sleep") include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/deep_sleep")
include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/dr26_analogue") include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/dr26_analogue")
include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/drs26_digital") include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/drs26_digital")
include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/ina219") include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/ina219")
include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/mock_sensor")
include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/rs485") include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/rs485")
include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/scd30") include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/scd30")
include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src") include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src")
......
...@@ -15,11 +15,12 @@ framework = arduino ...@@ -15,11 +15,12 @@ framework = arduino
monitor_speed = 115200 monitor_speed = 115200
lib_ldf_mode = deep lib_ldf_mode = deep
lib_extra_dirs = lib_extra_dirs =
../libs ../libs
../../shared-libs
build_flags = build_flags =
-I include -I include
-DCORE_DEBUG_LEVEL=5 -DCORE_DEBUG_LEVEL=5
-std=gnu++17 -std=gnu++17
build_unflags = -std=gnu++11 build_unflags = -std=gnu++11
lib_deps = sensirion/arduino-sht@^1.2.2 lib_deps = sensirion/arduino-sht@^1.2.2
adafruit/RTClib @^2.1.1 adafruit/RTClib @^2.1.1
......
...@@ -15,28 +15,29 @@ framework = arduino ...@@ -15,28 +15,29 @@ framework = arduino
monitor_speed = 115200 monitor_speed = 115200
lib_ldf_mode = deep lib_ldf_mode = deep
lib_extra_dirs = lib_extra_dirs =
../libs ../libs
../../shared-libs
; C++17 https://community.platformio.org/t/esp32-c-17-toolchain-missing-std-optional/25850/6 ; C++17 https://community.platformio.org/t/esp32-c-17-toolchain-missing-std-optional/25850/6
; we use c++17 features (i.e. optionals in ClientDataPackage.hpp) ; we use c++17 features (i.e. optionals in ClientDataPackage.hpp)
build_flags = build_flags =
-I include -I include
-DCORE_DEBUG_LEVEL=5 -DCORE_DEBUG_LEVEL=5
-std=gnu++17 -std=gnu++17
build_unflags = -std=gnu++11 build_unflags = -std=gnu++11
monitor_port = /dev/ttyUSB0 monitor_port = /dev/ttyUSB0
upload_port = /dev/ttyUSB0 upload_port = /dev/ttyUSB0
lib_deps = lib_deps =
Wire Wire
adafruit/Adafruit ADS1X15@^2.4.0 adafruit/Adafruit ADS1X15@^2.4.0
wollewald/INA219_WE@^1.3.1 wollewald/INA219_WE@^1.3.1
adafruit/Adafruit BusIO@^1.13.2 adafruit/Adafruit BusIO@^1.13.2
Adafruit_I2CDevice Adafruit_I2CDevice
SPI SPI
fbiego/ESP32Time@^2.0.0 fbiego/ESP32Time@^2.0.0
bblanchon/ArduinoJson@^6.19.4 bblanchon/ArduinoJson@^6.19.4
4-20ma/ModbusMaster@^2.0.1 4-20ma/ModbusMaster@^2.0.1
adafruit/RTClib@^2.1.1 adafruit/RTClib@^2.1.1
sensirion/arduino-sht@^1.2.2 sensirion/arduino-sht@^1.2.2
robtillaart/SHT85@^0.3.2 robtillaart/SHT85@^0.3.2
fbiego/ESP32Time@^2.0.0 fbiego/ESP32Time@^2.0.0
bblanchon/ArduinoJson@^6.19.4 bblanchon/ArduinoJson@^6.19.4
...@@ -6,6 +6,7 @@ monitor_speed = 115200 ...@@ -6,6 +6,7 @@ monitor_speed = 115200
lib_ldf_mode = deep lib_ldf_mode = deep
lib_extra_dirs = lib_extra_dirs =
../libs ../libs
../../shared-libs
; C++17 https://community.platformio.org/t/esp32-c-17-toolchain-missing-std-optional/25850/6 ; C++17 https://community.platformio.org/t/esp32-c-17-toolchain-missing-std-optional/25850/6
; we use c++17 features (i.e. optionals in ClientDataPackage.hpp) ; we use c++17 features (i.e. optionals in ClientDataPackage.hpp)
build_flags = build_flags =
......
...@@ -192,7 +192,7 @@ void LC709203F::setThermistorB(uint16_t beta) { ...@@ -192,7 +192,7 @@ void LC709203F::setThermistorB(uint16_t beta) {
std::list<Message> LC709203F::buildMessages() { std::list<Message> LC709203F::buildMessages() {
std::list<Message> messages; std::list<Message> messages;
float data = cellVoltage_mV() / 1000.0; float data = cellVoltage_mV() / 1000.0;
MeasurementData IncrementData{data, 0, {}, MeasurementData IncrementData{data, 0, NO_I2C_ADDRESS,
MeasurementType::BATTERY_VOLTAGE}; MeasurementType::BATTERY_VOLTAGE};
messages.emplace_back(IncrementData, messages.emplace_back(IncrementData,
sensorInformation, sensorInformation,
......
...@@ -68,10 +68,10 @@ void ForteDR26::setChannel(int c) { ...@@ -68,10 +68,10 @@ void ForteDR26::setChannel(int c) {
} }
std::list<Message> ForteDR26::buildMessages() { std::list<Message> ForteDR26::buildMessages() {
std::list<Message> messages; std::list <Message> messages;
float data = readData(); float data = readData();
MeasurementData IncrementData MeasurementData IncrementData
{data, channel, {}, MeasurementType::CIRCUMFERENCE_INCREMENT}; {data, channel, NO_I2C_ADDRESS, MeasurementType::CIRCUMFERENCE_INCREMENT};
messages.emplace_back(IncrementData, messages.emplace_back(IncrementData,
sensorInformation, sensorInformation,
Time::getInstance().getEpochSeconds()); Time::getInstance().getEpochSeconds());
...@@ -82,7 +82,7 @@ std::list<Message> ForteDR26::buildMessages() { ...@@ -82,7 +82,7 @@ std::list<Message> ForteDR26::buildMessages() {
std::list<Message> ForteDR26::buildMessages(MeasurementType measurementType) { std::list<Message> ForteDR26::buildMessages(MeasurementType measurementType) {
std::list<Message> messages; std::list<Message> messages;
float data = readData(); float data = readData();
MeasurementData IncrementData{data, channel, {}, measurementType}; MeasurementData IncrementData{data, channel, NO_I2C_ADDRESS, measurementType};
messages.emplace_back(IncrementData, messages.emplace_back(IncrementData,
sensorInformation, sensorInformation,
Time::getInstance().getEpochSeconds()); Time::getInstance().getEpochSeconds());
......
...@@ -43,10 +43,10 @@ out_data_drs26 ForteDRS26::readData() { ...@@ -43,10 +43,10 @@ out_data_drs26 ForteDRS26::readData() {
std::list<Message> ForteDRS26::buildMessages() { std::list<Message> ForteDRS26::buildMessages() {
std::list<Message> messages; std::list<Message> messages;
MeasurementData circumferenceIncrementMeasurementData{ MeasurementData circumferenceIncrementMeasurementData{
data.circumferenceIncrement, 0, {}, data.circumferenceIncrement, 0, NO_I2C_ADDRESS,
MeasurementType::CIRCUMFERENCE_INCREMENT}; MeasurementType::CIRCUMFERENCE_INCREMENT};
MeasurementData temperatureMeasurementData{ MeasurementData temperatureMeasurementData{
data.temperature, 0, {}, MeasurementType::TEMPERATURE}; data.temperature, 0, NO_I2C_ADDRESS, MeasurementType::TEMPERATURE};
messages.emplace_back(circumferenceIncrementMeasurementData, messages.emplace_back(circumferenceIncrementMeasurementData,
sensorInformation, sensorInformation,
......
...@@ -42,13 +42,11 @@ class ClientDataPackage { ...@@ -42,13 +42,11 @@ class ClientDataPackage {
document["sensorProtocol"] = sensorInformation.getProtocolString(); document["sensorProtocol"] = sensorInformation.getProtocolString();
document["value"] = measurementData.getValue(); document["value"] = measurementData.getValue();
if (measurementData.getChannel().has_value()) {
document["channel"] = measurementData.getChannel().value();
}
if (measurementData.getI2CAddress().has_value()) { document["channel"] = measurementData.getChannel();
document["i2cAddress"] = measurementData.getI2CAddress().value();
}
document["i2cAddress"] = measurementData.getI2CAddress();
document["measurementType"] = measurementData.getMeasurementTypeString(); document["measurementType"] = measurementData.getMeasurementTypeString();
...@@ -59,9 +57,8 @@ class ClientDataPackage { ...@@ -59,9 +57,8 @@ class ClientDataPackage {
[[nodiscard]] CompressedDataPackage getCompressedDataPackage() const { [[nodiscard]] CompressedDataPackage getCompressedDataPackage() const {
CompressedDataPackage compressedDataPackage{}; CompressedDataPackage compressedDataPackage{};
compressedDataPackage.channel = measurementData.getChannel().value_or(-1); compressedDataPackage.channel = measurementData.getChannel();
compressedDataPackage.i2cAddress = compressedDataPackage.i2cAddress = measurementData.getI2CAddress();
measurementData.getI2CAddress().value_or(-1);
compressedDataPackage.value = measurementData.getValue(); compressedDataPackage.value = measurementData.getValue();
compressedDataPackage.timestamp = timestamp; compressedDataPackage.timestamp = timestamp;
compressedDataPackage.errorType = ErrorTypes::DATA_OK; compressedDataPackage.errorType = ErrorTypes::DATA_OK;
...@@ -70,7 +67,6 @@ class ClientDataPackage { ...@@ -70,7 +67,6 @@ class ClientDataPackage {
compressedDataPackage.measurementType = compressedDataPackage.measurementType =
measurementData.getMeasurementType(); measurementData.getMeasurementType();
return compressedDataPackage; return compressedDataPackage;
} }
}; };
#include "Message.hpp" #include "Message.hpp"
#include "CompressedDataPackage.hpp" #include "CompressedDataPackage.hpp"
#include "GlobalDefinitions.hpp"
static const char *TAG = "MESSAGE"; static const char *TAG = "MESSAGE";
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "Time.hpp" #include "Time.hpp"
#include "esp_log.h" #include "esp_log.h"
#include "CompressedDataPackage.hpp" #include "CompressedDataPackage.hpp"
#include "GlobalDefinitions.hpp"
#include <Arduino.h> #include <Arduino.h>
#include <ArduinoJson.h> #include <ArduinoJson.h>
#include <ESP32Time.h> #include <ESP32Time.h>
...@@ -25,10 +26,11 @@ class Message { ...@@ -25,10 +26,11 @@ class Message {
static Message nullMessage() { static Message nullMessage() {
return Message{MeasurementData(ERROR_VALUE, return Message{MeasurementData(ERROR_VALUE,
std::nullopt, NO_CHANNEL,
std::nullopt, NO_I2C_ADDRESS,
MeasurementType::NULL_MEASUREMENT), MeasurementType::NULL_MEASUREMENT),
SensorInformation(HardwareName::NONE, SensorProtocol::NULL_PROTOCOL), SensorInformation(HardwareName::NONE,
SensorProtocol::NULL_PROTOCOL),
NULL_TIMESTAMP}; NULL_TIMESTAMP};
} }
......
...@@ -28,22 +28,22 @@ std::list<Message> ForteINA219::buildMessages() { ...@@ -28,22 +28,22 @@ std::list<Message> ForteINA219::buildMessages() {
std::list<Message> messages; std::list<Message> messages;
out_data_ina219 data = readData(); out_data_ina219 data = readData();
MeasurementData shuntVoltageData{ MeasurementData shuntVoltageData{
data.shuntVoltage_mV, 0, {}, MeasurementType::SHUNT_VOLTAGE data.shuntVoltage_mV, 0, NO_I2C_ADDRESS, MeasurementType::SHUNT_VOLTAGE
}; };
MeasurementData busVoltageData{ MeasurementData busVoltageData{
data.busVoltage_V, 0, {}, MeasurementType::BUS_VOLTAGE data.busVoltage_V, 0, NO_I2C_ADDRESS, MeasurementType::BUS_VOLTAGE
}; };
MeasurementData currentMilliAmpData{ MeasurementData currentMilliAmpData{
data.current_mA, 0, {}, MeasurementType::CURRENT_mA data.current_mA, 0, NO_I2C_ADDRESS, MeasurementType::CURRENT_mA
}; };
MeasurementData powerMilliWattData{ MeasurementData powerMilliWattData{
data.power_mW, 0, {}, MeasurementType::POWER_mA data.power_mW, 0, NO_I2C_ADDRESS, MeasurementType::POWER_mA
}; };
MeasurementData loadVoltageData{ MeasurementData loadVoltageData{
data.loadVoltage_V, 0, {}, MeasurementType::LOAD_VOLTAGE_V data.loadVoltage_V, 0, NO_I2C_ADDRESS, MeasurementType::LOAD_VOLTAGE_V
}; };
MeasurementData ina219OverflowData{ MeasurementData ina219OverflowData{
static_cast<double>(data.ina219_overflow), 0, {}, static_cast<double>(data.ina219_overflow), 0, NO_I2C_ADDRESS,
MeasurementType::INA219_OVERFLOW MeasurementType::INA219_OVERFLOW
}; };
......
...@@ -13,12 +13,13 @@ ...@@ -13,12 +13,13 @@
#include <string> #include <string>
#include <utility> #include <utility>
#include <MeasurementTypes.h> #include <MeasurementTypes.h>
#include <GlobalDefinitions.hpp>
class MeasurementData { class MeasurementData {
public: public:
MeasurementData(double value, MeasurementData(double value,
std::optional<int> channel, int channel,
std::optional<int> i2cAddress, int i2cAddress,
MeasurementType measurementType) MeasurementType measurementType)
: value(value), measurementType(measurementType), channel(channel), : value(value), measurementType(measurementType), channel(channel),
i2cAddress(i2cAddress) { i2cAddress(i2cAddress) {
...@@ -26,6 +27,8 @@ class MeasurementData { ...@@ -26,6 +27,8 @@ class MeasurementData {
MeasurementData(double value, MeasurementType measurementType) MeasurementData(double value, MeasurementType measurementType)
: value(value), measurementType(measurementType) { : value(value), measurementType(measurementType) {
channel = NO_CHANNEL;
i2cAddress = NO_I2C_ADDRESS;
} }
[[nodiscard]] double getValue() const { return value; } [[nodiscard]] double getValue() const { return value; }
...@@ -37,17 +40,17 @@ class MeasurementData { ...@@ -37,17 +40,17 @@ class MeasurementData {
return MeasurementTypes::measurementTypeToString(measurementType); return MeasurementTypes::measurementTypeToString(measurementType);
} }
[[nodiscard]] const std::optional<int> &getChannel() const { return channel; } [[nodiscard]] const int &getChannel() const { return channel; }
[[nodiscard]] const std::optional<int> & [[nodiscard]] const int &
getI2CAddress() const { return i2cAddress; } getI2CAddress() const { return i2cAddress; }
private: private:
double value; double value;
MeasurementType measurementType; // TODO: consider using an enum MeasurementType measurementType;
// TODO: is it possible for a sensor to have both a channel and an i2cAddress? // TODO: is it possible for a sensor to have both a channel and an i2cAddress?
std::optional<int> channel; int channel = NO_CHANNEL;
std::optional<int> i2cAddress; int i2cAddress = NO_I2C_ADDRESS;
}; };
#endif // CLIENT_MEASUREMENTDATA_HPP #endif // CLIENT_MEASUREMENTDATA_HPP
...@@ -23,9 +23,10 @@ void MockSensor::setChannel(int c) { ...@@ -23,9 +23,10 @@ void MockSensor::setChannel(int c) {
} }
std::list<Message> MockSensor::buildMessages() { std::list<Message> MockSensor::buildMessages() {
std::list<Message> messages; std::list <Message> messages;
float data = readData() + static_cast<float>(DeepSleep::bootCount); float data = readData() + static_cast<float>(DeepSleep::bootCount);
MeasurementData MockData{data, channel, {}, MeasurementType::MOCK}; MeasurementData
MockData{data, channel, NO_I2C_ADDRESS, MeasurementType::MOCK};
messages.emplace_back(MockData, messages.emplace_back(MockData,
sensorInformation, sensorInformation,
Time::getInstance().getEpochSeconds()); Time::getInstance().getEpochSeconds());
......
...@@ -25,10 +25,10 @@ std::list<Message> ForteSCD30::buildMessages() { ...@@ -25,10 +25,10 @@ std::list<Message> ForteSCD30::buildMessages() {
std::list<Message> messages; std::list<Message> messages;
data = readData(); // TODO: catch exception data = readData(); // TODO: catch exception
MeasurementData CO2Data{data.C02, 0, {}, MeasurementType::CO2}; MeasurementData CO2Data{data.C02, 0, NO_I2C_ADDRESS, MeasurementType::CO2};
MeasurementData MeasurementData
TempData{data.Temperature, 0, {}, MeasurementType::TEMPERATURE}; TempData{data.Temperature, 0, NO_I2C_ADDRESS, MeasurementType::TEMPERATURE};
MeasurementData HumidData{data.Humidity, 0, {}, MeasurementType::HUMIDITY}; MeasurementData HumidData{data.Humidity, 0, NO_I2C_ADDRESS, MeasurementType::HUMIDITY};
messages.emplace_back(CO2Data, messages.emplace_back(CO2Data,
sensorInformation, sensorInformation,
......
...@@ -51,9 +51,9 @@ std::list<Message> Sht85::buildMessages() { ...@@ -51,9 +51,9 @@ std::list<Message> Sht85::buildMessages() {
std::list<Message> messages; std::list<Message> messages;
auto data = readData(); auto data = readData();
MeasurementData temperatureMeasurementData{ MeasurementData temperatureMeasurementData{
data.temperature, {}, 0x44, MeasurementType::TEMPERATURE}; data.temperature, NO_CHANNEL, 0x44, MeasurementType::TEMPERATURE};
MeasurementData humidityMeasurementData{ MeasurementData humidityMeasurementData{
data.humidity, {}, 0x44, MeasurementType::HUMIDITY}; data.humidity, NO_CHANNEL, 0x44, MeasurementType::HUMIDITY};
messages.emplace_back( messages.emplace_back(
temperatureMeasurementData, temperatureMeasurementData,
......
...@@ -9,17 +9,10 @@ ...@@ -9,17 +9,10 @@
#include <list> #include <list>
#include <string> #include <string>
#include <utility> #include <utility>
#include "ErrorTypes.h"
constexpr double ERROR_VALUE = -999.99; // null timestamp
constexpr unsigned long NULL_TIMESTAMP = 0; // null timestamp
enum ErrorTypes: char {
SENSOR_NOT_FOUND,
SENSOR_NOT_CONNECTED,
NO_DATA,
DATA_OK,
NULL_MESSAGE, // message that is sent as padding, should be thrown away
};
struct CompressedDataPackage { struct CompressedDataPackage {
int channel; // can this be short? int channel; // can this be short?
......
//
// Created by zoe on 2/2/23.
//
#include "ErrorTypes.h"
//
// Created by zoe on 2/2/23.
//
#ifndef CLIENT_MOCK_ERRORTYPES_H
#define CLIENT_MOCK_ERRORTYPES_H
enum class ErrorTypes: char {
SENSOR_NOT_FOUND,
SENSOR_NOT_CONNECTED,
NO_DATA,
DATA_OK,
NULL_MESSAGE, // message that is sent as padding, should be thrown away
};
#endif //CLIENT_MOCK_ERRORTYPES_H
//
// Created by zoe on 2/2/23.
//
#ifndef CLIENT_MOCK_GLOBALDEFINITIONS_HPP
#define CLIENT_MOCK_GLOBALDEFINITIONS_HPP
constexpr unsigned long NULL_TIMESTAMP = 0;
constexpr int NO_I2C_ADDRESS = -1;
constexpr int NO_CHANNEL = -1;
constexpr double ERROR_VALUE = -999.99;
#endif //CLIENT_MOCK_GLOBALDEFINITIONS_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment