summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--daemon/sensorPlugins/stepCounter.cpp26
-rw-r--r--daemon/sensorPlugins/stepCounter.h2
2 files changed, 20 insertions, 8 deletions
diff --git a/daemon/sensorPlugins/stepCounter.cpp b/daemon/sensorPlugins/stepCounter.cpp
index 00d7066..fd09e81 100644
--- a/daemon/sensorPlugins/stepCounter.cpp
+++ b/daemon/sensorPlugins/stepCounter.cpp
@@ -44,11 +44,12 @@ StepCounterPlugin::StepCounterPlugin(QObject* parent, int initInterval, bool dae
if (dayFileExists(sensorPathPrefix) && daemonFresh) {
QStringList lastLineData = fileGetPrevRecord(sensorPathPrefix);
lastRecordTime = QDateTime::currentDateTime();
- m_stepsOffset = -lastLineData[1].toInt(); // we add the last recorded value from today to the current value. This 'recovers' the steps from between reboots. I'm not sure how this will work on catfish or medaka.
+ m_stepsOffset = stepcounterSensor->reading()->steps() - lastLineData[1].toInt(); // we reset the step count, ignoring all steps that may have been taken while the daemon isn't running. Devices which count steps independently will need custom code.
} else if (dayFileExists) {
lastRecordTime = QDateTime::currentDateTime();
m_stepsOffset = m_settings->value("StepCounterPrivate/stepsOffset", 0).toInt();
}
+ m_settings->setValue("StepCounterPrivate/stepsOffset", m_stepsOffset);
}
void StepCounterPlugin::timeUpdate()
@@ -66,16 +67,27 @@ void StepCounterPlugin::timeUpdate()
void StepCounterPlugin::triggerRecording()
{
qDebug() << "stepcounter interval recording";
- if (lastRecordTime.date() < QDate::currentDate()) {
- int steps = stepcounterSensor->reading()->steps() - m_stepsOffset;
- fileAddRecord(sensorPathPrefix, QString::number(steps), QDateTime(QDate::currentDate().addDays(-1), QTime(23, 59, 59))); // this writes the current step count to the last second of the previous day
- m_stepsOffset = stepcounterSensor->reading()->steps(); // and then we reset the step counter
+ int rawSteps = stepcounterSensor->reading()->steps();
+ if (lastRecordTime.date() != QDate::currentDate()) { // ok, so the date has changed.
+ if (dayFileExists(sensorPathPrefix)) { // this likely means we have just had a system time change
+ QStringList lastLineData = fileGetPrevRecord(sensorPathPrefix);
+ m_stepsOffset = rawSteps - lastLineData[1].toInt(); // we scrap the current steps value, recover the last reading from today's file and count from there
+ // The reset is necessary because asteroid doesn't have robust time when it boots up, it takes a while for that to happen. So, instead of dealing with that, we just reset the counter every time there's a date change
+ } else if (lastRecordTime.date() == QDate::currentDate().addDays(-1)) { // this means that a midnight just passed
+ int steps = rawSteps - m_stepsOffset;
+ fileAddRecord(sensorPathPrefix, QString::number(steps), QDateTime(QDate::currentDate().addDays(-1), QTime(23, 59, 59))); // this writes the current step count to the last second of the previous day
+ m_stepsOffset = rawSteps; // and then we 'reset' the step counter
+ }
m_settings->setValue("StepCounterPrivate/stepsOffset", m_stepsOffset);
- qDebug() << "date change detected; recorded " << steps << " to previous day and reset step counter hw.";
+ qDebug() << "date change detected. Step counter value is " << rawSteps << " and offset is " << m_stepsOffset;
} else {
- int steps = stepcounterSensor->reading()->steps() - m_stepsOffset;
+ int steps = rawSteps - m_stepsOffset;
qDebug() << QDateTime::currentDateTime().toString("hh:mm:ss") << " : " << steps << stepcounterSensor->isActive();
// we probably ought to do some error checking here
+ if (steps < fileGetPrevRecord(sensorPathPrefix)[1].toInt()) {
+ qDebug() << "error: offset value is less than previous value - not recording"; // this is an error condition which is either caused by a bad offset value or by the sensor being slow and returning a bad value
+ return;
+ }
fileAddRecord(sensorPathPrefix, QString::number(steps));
}
lastRecordTime = QDateTime::currentDateTime();
diff --git a/daemon/sensorPlugins/stepCounter.h b/daemon/sensorPlugins/stepCounter.h
index cb6a7e4..ad8d8d6 100644
--- a/daemon/sensorPlugins/stepCounter.h
+++ b/daemon/sensorPlugins/stepCounter.h
@@ -35,7 +35,7 @@ private:
int interval;
QTimer *recordIntervalTimer;
QStepCounterSensor *stepcounterSensor;
- int m_stepsOffset;
+ int m_stepsOffset = 0;
QSettings *m_settings;
const QString sensorPathPrefix = "stepCounter";