Skip to content

Commit e3c3689

Browse files
committed
Added VL53L0XState to peristantly store sensor configuration.
1 parent cf51712 commit e3c3689

File tree

2 files changed

+82
-3
lines changed

2 files changed

+82
-3
lines changed

src/modules/Telemetry/Sensor/VL53L0XSensor.cpp

Lines changed: 73 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,91 @@
11
#include "configuration.h"
2-
#include <memory>
32

43
#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(<Adafruit_VL53L0X.h>)
54

65
#include "../mesh/generated/meshtastic/telemetry.pb.h"
7-
#include "TelemetrySensor.h"
6+
#include <memory>
7+
8+
9+
10+
#include "../mesh/generated/meshtastic/telemetry.pb.h"
11+
#include "FSCommon.h"
812
#include "VL53L0XSensor.h"
13+
#include "SPILock.h"
14+
#include "SafeFile.h"
15+
#include "TelemetrySensor.h"
916

1017
#include <Adafruit_VL53L0X.h>
1118
#include <typeinfo>
19+
#include <pb_decode.h>
20+
#include <pb_encode.h>
21+
22+
23+
bool VL53L0XSensor::loadState()
24+
{
25+
#ifdef FSCom
26+
spiLock->lock();
27+
auto file = FSCom.open(VL53L0XStateFileName, FILE_O_READ);
28+
bool okay = false;
29+
if (file) {
30+
LOG_INFO("%s state read from %s", sensorName, VL53L0XStateFileName);
31+
pb_istream_t stream = {&readcb, &file, meshtastic_VL53L0XState_size};
32+
33+
if (!pb_decode(&stream, &meshtastic_VL53L0XState_msg, &vl53state)) {
34+
LOG_ERROR("Error: can't decode protobuf %s", PB_GET_ERROR(&stream));
35+
} else {
36+
mode = (Adafruit_VL53L0X::VL53L0X_Sense_config_t)vl53state.mode;
37+
okay = true;
38+
}
39+
file.close();
40+
} else {
41+
LOG_INFO("No %s state found (File: %s)", sensorName, VL53L0XStateFileName);
42+
}
43+
spiLock->unlock();
44+
return okay;
45+
#else
46+
LOG_ERROR("%s: ERROR - Filesystem not implemented", sensorName);
47+
#endif
48+
}
49+
50+
bool VL53L0XSensor::saveState()
51+
{
52+
#ifdef FSCom
53+
auto file = SafeFile(VL53L0XStateFileName);
54+
55+
vl53state.mode = (meshtastic_VL53L0XState_RangingMode)mode;
56+
57+
bool okay = false;
58+
59+
LOG_INFO("%s: state write to %s", sensorName, VL53L0XStateFileName);
60+
pb_ostream_t stream = {&writecb, static_cast<Print *>(&file), meshtastic_VL53L0XState_size};
61+
62+
if (!pb_encode(&stream, &meshtastic_VL53L0XState_msg, &vl53state)) {
63+
LOG_ERROR("Error: can't encode protobuf %s", PB_GET_ERROR(&stream));
64+
} else {
65+
okay = true;
66+
}
67+
68+
okay &= file.close();
69+
70+
if (okay)
71+
LOG_INFO("%s: state write to %s successful", sensorName, VL53L0XStateFileName);
72+
73+
return okay;
74+
#else
75+
LOG_ERROR("%s: ERROR - Filesystem not implemented", sensorName);
76+
#endif
77+
}
1278

1379
VL53L0XSensor::VL53L0XSensor() : TelemetrySensor(meshtastic_TelemetrySensorType_VL53L0X, "VL53L0X") {}
1480

1581
bool VL53L0XSensor::initDevice(TwoWire *bus, ScanI2C::FoundDevice *dev)
1682
{
1783
LOG_INFO("Init sensor: %s", sensorName);
18-
status = vl53l0x.begin(VL53L0X_I2C_ADDR, false, bus);
84+
85+
loadState();
86+
87+
status = vl53l0x.begin(VL53L0X_I2C_ADDR, false, bus, mode);
88+
1989
if (!status) {
2090
return status;
2191
}

src/modules/Telemetry/Sensor/VL53L0XSensor.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@ class VL53L0XSensor : public TelemetrySensor
1212

1313
Adafruit_VL53L0X vl53l0x;
1414

15+
protected:
16+
const char *VL53L0XStateFileName = "/prefs/vl53l0x.dat";
17+
meshtastic_VL53L0XState vl53state = meshtastic_VL53L0XState_init_zero;
18+
19+
Adafruit_VL53L0X::VL53L0X_Sense_config_t mode;
20+
21+
bool loadState();
22+
bool saveState();
23+
1524
public:
1625
VL53L0XSensor();
1726
virtual bool getMetrics(meshtastic_Telemetry *measurement) override;

0 commit comments

Comments
 (0)