Skip to content
Snippets Groups Projects
Commit 36e9745d authored by fxk8y's avatar fxk8y :spider:
Browse files

add new sensor interface

parent 713ae229
No related branches found
No related tags found
No related merge requests found
......@@ -11,13 +11,6 @@
#include "mqtt_common.h"
typedef struct {
std::string name;
std::string type;
std::string unit;
qthing::measured::sensor_t sensor;
} sensor_config_t;
static void esp_log_backend(const std::vector<qthing::measured::MeasureResult>& data) {
for (auto const& d: data) {
ESP_LOGI("measured", "name=%s type=%s unit=%s value=%f", d.sensor_name.c_str(), d.sensor_type.c_str(), d.sensor_unit.c_str(), d.value);
......@@ -33,6 +26,16 @@ static void measured_wrapper(void *parameter) {
qthing::measured::MeasureResult::MeasureResult(const std::string& name, const std::string& type, const std::string& unit, float value) : value(value), sensor_name(name), sensor_type(type), sensor_unit(unit) {}
qthing::measured::Sensor::Sensor(const std::string& name, const std::string& type, const std::string& unit) : name(name), type(type), unit(unit) {}
qthing::measured::Sensor::skip_measurement_t qthing::measured::Sensor::prepare_next_measurement() {
return(no_skip);
}
qthing::measured::MeasureResult qthing::measured::Sensor::create_result(float value) {
return(qthing::measured::MeasureResult(this->name, this->type, this->unit, value));
}
/*
* Measured implementation
*/
......@@ -55,9 +58,8 @@ void qthing::measured::Measured::measured() {
while(true) {
std::vector<qthing::measured::MeasureResult> data;
for (auto const& sensor: sensors) {
qthing::measured::MeasureResult tmp(sensor.name, sensor.type, sensor.unit, sensor.sensor());
data.push_back(tmp);
for (auto& sensor: sensors) {
data.push_back(sensor->measure());
}
this->backend(data);
......@@ -66,15 +68,8 @@ void qthing::measured::Measured::measured() {
}
}
void qthing::measured::Measured::register_sensor(std::string name, std::string type, std::string unit, qthing::measured::sensor_t sensor) {
sensor_config_t cfg = {
.name = name,
.type = type,
.unit = unit,
.sensor = sensor
};
this->sensors.push_back(cfg);
void qthing::measured::Measured::register_sensor(std::string name, std::string type, std::string unit, qthing::measured::Sensor *sensor) {
this->sensors.push_back(sensor);
}
......@@ -104,7 +99,7 @@ static void start_measured() {
}
}
void qthing::measured::register_sensor(std::string name, std::string type, std::string unit, qthing::measured::sensor_t sensor) {
void qthing::measured::register_sensor(std::string name, std::string type, std::string unit, qthing::measured::Sensor *sensor) {
start_measured();
md->register_sensor(name, type, unit, sensor);
}
......
......@@ -18,40 +18,51 @@ namespace qthing {
class MeasureResult {
public:
MeasureResult(const std::string& name, const std::string& type, const std::string& unit, float value);
const float value;
const std::string& sensor_name;
const std::string& sensor_type;
const std::string& sensor_unit;
MeasureResult(const std::string& name, const std::string& type, const std::string& unit, float value);
};
typedef std::function<float()> sensor_t;
class Sensor {
enum skip_measurement_t { no_skip, skip };
public:
const std::string& name;
const std::string& type;
const std::string& unit;
Sensor(const std::string& name, const std::string& type, const std::string& unit);
virtual skip_measurement_t prepare_next_measurement();
virtual MeasureResult measure() = 0;
protected:
MeasureResult create_result(float value);
};
// typedef std::function<float()> sensor_t;
typedef std::function<void(const std::vector<MeasureResult>&)> backend_t;
void register_backend(backend_t new_backend);
void register_sensor(std::string name, std::string type, std::string unit, sensor_t sensor);
void register_sensor(std::string name, std::string type, std::string unit, Sensor *sensor);
void set_measure_period(uint16_t period);
class Measured {
typedef struct {
std::string name;
std::string type;
std::string unit;
qthing::measured::sensor_t sensor;
} sensor_config_t;
public:
Measured();
void register_backend(backend_t new_backend);
void register_sensor(std::string name, std::string type, std::string unit, sensor_t sensor);
void register_sensor(std::string name, std::string type, std::string unit, Sensor *sensor);
void set_measure_period(uint16_t period);
private:
std::vector<sensor_config_t> sensors;
std::vector<Sensor *> sensors;
qthing::measured::backend_t backend;
uint16_t measure_period = MEASURED_PERIOD_MS;
void measured();
......
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