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"?>
<project version="4">
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$">
<contentRoot DIR="$PROJECT_DIR$/.." />
</component>
</project>
\ No newline at end of file
......@@ -21,7 +21,7 @@ SET(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 17)
if (CMAKE_BUILD_TYPE MATCHES "esp32cam")
add_definitions(-DPLATFORMIO=60104)
add_definitions(-DPLATFORMIO=60105)
add_definitions(-DARDUINO_ESP32_DEV)
add_definitions(-DBOARD_HAS_PSRAM)
add_definitions(-DCORE_DEBUG_LEVEL=5)
......@@ -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/cores/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/dr26_analogue")
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/mock_sensor")
include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/rs485")
include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/scd30")
include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src")
......
......@@ -15,11 +15,12 @@ framework = arduino
monitor_speed = 115200
lib_ldf_mode = deep
lib_extra_dirs =
../libs
../libs
../../shared-libs
build_flags =
-I include
-DCORE_DEBUG_LEVEL=5
-std=gnu++17
-I include
-DCORE_DEBUG_LEVEL=5
-std=gnu++17
build_unflags = -std=gnu++11
lib_deps = sensirion/arduino-sht@^1.2.2
adafruit/RTClib @^2.1.1
......
......@@ -15,28 +15,29 @@ framework = arduino
monitor_speed = 115200
lib_ldf_mode = deep
lib_extra_dirs =
../libs
../libs
../../shared-libs
; 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)
build_flags =
-I include
-DCORE_DEBUG_LEVEL=5
-std=gnu++17
-I include
-DCORE_DEBUG_LEVEL=5
-std=gnu++17
build_unflags = -std=gnu++11
monitor_port = /dev/ttyUSB0
upload_port = /dev/ttyUSB0
lib_deps =
Wire
adafruit/Adafruit ADS1X15@^2.4.0
wollewald/INA219_WE@^1.3.1
adafruit/Adafruit BusIO@^1.13.2
Adafruit_I2CDevice
SPI
fbiego/ESP32Time@^2.0.0
bblanchon/ArduinoJson@^6.19.4
4-20ma/ModbusMaster@^2.0.1
adafruit/RTClib@^2.1.1
sensirion/arduino-sht@^1.2.2
robtillaart/SHT85@^0.3.2
fbiego/ESP32Time@^2.0.0
bblanchon/ArduinoJson@^6.19.4
Wire
adafruit/Adafruit ADS1X15@^2.4.0
wollewald/INA219_WE@^1.3.1
adafruit/Adafruit BusIO@^1.13.2
Adafruit_I2CDevice
SPI
fbiego/ESP32Time@^2.0.0
bblanchon/ArduinoJson@^6.19.4
4-20ma/ModbusMaster@^2.0.1
adafruit/RTClib@^2.1.1
sensirion/arduino-sht@^1.2.2
robtillaart/SHT85@^0.3.2
fbiego/ESP32Time@^2.0.0
bblanchon/ArduinoJson@^6.19.4
......@@ -6,6 +6,7 @@ monitor_speed = 115200
lib_ldf_mode = deep
lib_extra_dirs =
../libs
../../shared-libs
; 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)
build_flags =
......
......@@ -192,7 +192,7 @@ void LC709203F::setThermistorB(uint16_t beta) {
std::list<Message> LC709203F::buildMessages() {
std::list<Message> messages;
float data = cellVoltage_mV() / 1000.0;
MeasurementData IncrementData{data, 0, {},
MeasurementData IncrementData{data, 0, NO_I2C_ADDRESS,
MeasurementType::BATTERY_VOLTAGE};
messages.emplace_back(IncrementData,
sensorInformation,
......
......@@ -68,10 +68,10 @@ void ForteDR26::setChannel(int c) {
}
std::list<Message> ForteDR26::buildMessages() {
std::list<Message> messages;
std::list <Message> messages;
float data = readData();
MeasurementData IncrementData
{data, channel, {}, MeasurementType::CIRCUMFERENCE_INCREMENT};
{data, channel, NO_I2C_ADDRESS, MeasurementType::CIRCUMFERENCE_INCREMENT};
messages.emplace_back(IncrementData,
sensorInformation,
Time::getInstance().getEpochSeconds());
......@@ -82,7 +82,7 @@ std::list<Message> ForteDR26::buildMessages() {
std::list<Message> ForteDR26::buildMessages(MeasurementType measurementType) {
std::list<Message> messages;
float data = readData();
MeasurementData IncrementData{data, channel, {}, measurementType};
MeasurementData IncrementData{data, channel, NO_I2C_ADDRESS, measurementType};
messages.emplace_back(IncrementData,
sensorInformation,
Time::getInstance().getEpochSeconds());
......
......@@ -43,10 +43,10 @@ out_data_drs26 ForteDRS26::readData() {
std::list<Message> ForteDRS26::buildMessages() {
std::list<Message> messages;
MeasurementData circumferenceIncrementMeasurementData{
data.circumferenceIncrement, 0, {},
data.circumferenceIncrement, 0, NO_I2C_ADDRESS,
MeasurementType::CIRCUMFERENCE_INCREMENT};
MeasurementData temperatureMeasurementData{
data.temperature, 0, {}, MeasurementType::TEMPERATURE};
data.temperature, 0, NO_I2C_ADDRESS, MeasurementType::TEMPERATURE};
messages.emplace_back(circumferenceIncrementMeasurementData,
sensorInformation,
......
......@@ -42,13 +42,11 @@ class ClientDataPackage {
document["sensorProtocol"] = sensorInformation.getProtocolString();
document["value"] = measurementData.getValue();
if (measurementData.getChannel().has_value()) {
document["channel"] = measurementData.getChannel().value();
}
if (measurementData.getI2CAddress().has_value()) {
document["i2cAddress"] = measurementData.getI2CAddress().value();
}
document["channel"] = measurementData.getChannel();
document["i2cAddress"] = measurementData.getI2CAddress();
document["measurementType"] = measurementData.getMeasurementTypeString();
......@@ -59,9 +57,8 @@ class ClientDataPackage {
[[nodiscard]] CompressedDataPackage getCompressedDataPackage() const {
CompressedDataPackage compressedDataPackage{};
compressedDataPackage.channel = measurementData.getChannel().value_or(-1);
compressedDataPackage.i2cAddress =
measurementData.getI2CAddress().value_or(-1);
compressedDataPackage.channel = measurementData.getChannel();
compressedDataPackage.i2cAddress = measurementData.getI2CAddress();
compressedDataPackage.value = measurementData.getValue();
compressedDataPackage.timestamp = timestamp;
compressedDataPackage.errorType = ErrorTypes::DATA_OK;
......@@ -70,7 +67,6 @@ class ClientDataPackage {
compressedDataPackage.measurementType =
measurementData.getMeasurementType();
return compressedDataPackage;
}
};
#include "Message.hpp"
#include "CompressedDataPackage.hpp"
#include "GlobalDefinitions.hpp"
static const char *TAG = "MESSAGE";
......
......@@ -5,6 +5,7 @@
#include "Time.hpp"
#include "esp_log.h"
#include "CompressedDataPackage.hpp"
#include "GlobalDefinitions.hpp"
#include <Arduino.h>
#include <ArduinoJson.h>
#include <ESP32Time.h>
......@@ -25,10 +26,11 @@ class Message {
static Message nullMessage() {
return Message{MeasurementData(ERROR_VALUE,
std::nullopt,
std::nullopt,
NO_CHANNEL,
NO_I2C_ADDRESS,
MeasurementType::NULL_MEASUREMENT),
SensorInformation(HardwareName::NONE, SensorProtocol::NULL_PROTOCOL),
SensorInformation(HardwareName::NONE,
SensorProtocol::NULL_PROTOCOL),
NULL_TIMESTAMP};
}
......
......@@ -28,22 +28,22 @@ std::list<Message> ForteINA219::buildMessages() {
std::list<Message> messages;
out_data_ina219 data = readData();
MeasurementData shuntVoltageData{
data.shuntVoltage_mV, 0, {}, MeasurementType::SHUNT_VOLTAGE
data.shuntVoltage_mV, 0, NO_I2C_ADDRESS, MeasurementType::SHUNT_VOLTAGE
};
MeasurementData busVoltageData{
data.busVoltage_V, 0, {}, MeasurementType::BUS_VOLTAGE
data.busVoltage_V, 0, NO_I2C_ADDRESS, MeasurementType::BUS_VOLTAGE
};
MeasurementData currentMilliAmpData{
data.current_mA, 0, {}, MeasurementType::CURRENT_mA
data.current_mA, 0, NO_I2C_ADDRESS, MeasurementType::CURRENT_mA
};
MeasurementData powerMilliWattData{
data.power_mW, 0, {}, MeasurementType::POWER_mA
data.power_mW, 0, NO_I2C_ADDRESS, MeasurementType::POWER_mA
};
MeasurementData loadVoltageData{
data.loadVoltage_V, 0, {}, MeasurementType::LOAD_VOLTAGE_V
data.loadVoltage_V, 0, NO_I2C_ADDRESS, MeasurementType::LOAD_VOLTAGE_V
};
MeasurementData ina219OverflowData{
static_cast<double>(data.ina219_overflow), 0, {},
static_cast<double>(data.ina219_overflow), 0, NO_I2C_ADDRESS,
MeasurementType::INA219_OVERFLOW
};
......
......@@ -13,12 +13,13 @@
#include <string>
#include <utility>
#include <MeasurementTypes.h>
#include <GlobalDefinitions.hpp>
class MeasurementData {
public:
MeasurementData(double value,
std::optional<int> channel,
std::optional<int> i2cAddress,
int channel,
int i2cAddress,
MeasurementType measurementType)
: value(value), measurementType(measurementType), channel(channel),
i2cAddress(i2cAddress) {
......@@ -26,6 +27,8 @@ class MeasurementData {
MeasurementData(double value, MeasurementType measurementType)
: value(value), measurementType(measurementType) {
channel = NO_CHANNEL;
i2cAddress = NO_I2C_ADDRESS;
}
[[nodiscard]] double getValue() const { return value; }
......@@ -37,17 +40,17 @@ class MeasurementData {
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; }
private:
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?
std::optional<int> channel;
std::optional<int> i2cAddress;
int channel = NO_CHANNEL;
int i2cAddress = NO_I2C_ADDRESS;
};
#endif // CLIENT_MEASUREMENTDATA_HPP
......@@ -23,9 +23,10 @@ void MockSensor::setChannel(int c) {
}
std::list<Message> MockSensor::buildMessages() {
std::list<Message> messages;
std::list <Message> messages;
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,
sensorInformation,
Time::getInstance().getEpochSeconds());
......
......@@ -25,10 +25,10 @@ std::list<Message> ForteSCD30::buildMessages() {
std::list<Message> messages;
data = readData(); // TODO: catch exception
MeasurementData CO2Data{data.C02, 0, {}, MeasurementType::CO2};
MeasurementData CO2Data{data.C02, 0, NO_I2C_ADDRESS, MeasurementType::CO2};
MeasurementData
TempData{data.Temperature, 0, {}, MeasurementType::TEMPERATURE};
MeasurementData HumidData{data.Humidity, 0, {}, MeasurementType::HUMIDITY};
TempData{data.Temperature, 0, NO_I2C_ADDRESS, MeasurementType::TEMPERATURE};
MeasurementData HumidData{data.Humidity, 0, NO_I2C_ADDRESS, MeasurementType::HUMIDITY};
messages.emplace_back(CO2Data,
sensorInformation,
......
......@@ -51,9 +51,9 @@ std::list<Message> Sht85::buildMessages() {
std::list<Message> messages;
auto data = readData();
MeasurementData temperatureMeasurementData{
data.temperature, {}, 0x44, MeasurementType::TEMPERATURE};
data.temperature, NO_CHANNEL, 0x44, MeasurementType::TEMPERATURE};
MeasurementData humidityMeasurementData{
data.humidity, {}, 0x44, MeasurementType::HUMIDITY};
data.humidity, NO_CHANNEL, 0x44, MeasurementType::HUMIDITY};
messages.emplace_back(
temperatureMeasurementData,
......
......@@ -9,17 +9,10 @@
#include <list>
#include <string>
#include <utility>
#include "ErrorTypes.h"
constexpr double ERROR_VALUE = -999.99;
constexpr unsigned long NULL_TIMESTAMP = 0; // null timestamp
// 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 {
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