#ifndef BAROMETERACTIVITYSENSOR_H #define BAROMETERACTIVITYSENSOR_H #include #include #include "BarometerSensor.h" #include "AccelerometerSensor.h" #include struct ActivityData { Activity curActivity; ActivityData(const Activity act) : curActivity(act) {;} ActivityData() : curActivity(Activity::STANDING) {;} }; /** * step-sensor detects steps from the accelerometer */ class ActivitySensor : public SensorListener, // << takes public SensorListener, // << takes public Sensor { // << provides private: ActivityDetector act; ActivityData data; BarometerSensor& baro; AccelerometerSensor& acc; int waitCnt = 0; public: ActivitySensor(BarometerSensor& baro, AccelerometerSensor& acc) : baro(baro), acc(acc) { baro.addListener(this); acc.addListener(this); } virtual void start() override { // not needed waitCnt = 400; //sec } virtual void stop() override { // not needed } bool isRunning() const override { return acc.isRunning() && baro.isRunning(); } virtual void onSensorData(Sensor* sensor, const Timestamp ts, const BarometerData& data) override { (void) sensor; //ignore the first 10sec of barometer if(waitCnt > 0){ --waitCnt; return; } act.add(ts, data); this->data.curActivity = act.get(); informListeners(ts, this->data); } virtual void onSensorData(Sensor* sensor, const Timestamp ts, const AccelerometerData& data) override { (void) sensor; act.add(ts, data); } }; #endif // BAROMETERACTIVITYSENSOR_H