current revision
This commit is contained in:
63
sensors/ActivitySensor.h
Normal file
63
sensors/ActivitySensor.h
Normal file
@@ -0,0 +1,63 @@
|
||||
#ifndef BAROMETERACTIVITYSENSOR_H
|
||||
#define BAROMETERACTIVITYSENSOR_H
|
||||
|
||||
#include <Indoor/sensors/pressure/ActivityButterPressure.h>
|
||||
#include "BarometerSensor.h"
|
||||
#include "AccelerometerSensor.h"
|
||||
|
||||
|
||||
struct ActivityData {
|
||||
const ActivityButterPressure::Activity curActivity;
|
||||
ActivityData(const ActivityButterPressure::Activity act) : curActivity(act) {;}
|
||||
};
|
||||
|
||||
/**
|
||||
* step-sensor detects steps from the accelerometer
|
||||
*/
|
||||
class ActivitySensor :
|
||||
public SensorListener<BarometerData>, // << takes
|
||||
public SensorListener<AccelerometerData>, // << takes
|
||||
public Sensor<ActivityData> { // << provides
|
||||
|
||||
private:
|
||||
|
||||
ActivityButterPressure act;
|
||||
|
||||
BarometerSensor& baro;
|
||||
AccelerometerSensor& acc;
|
||||
|
||||
public:
|
||||
|
||||
ActivitySensor(BarometerSensor& baro, AccelerometerSensor& acc) : baro(baro), acc(acc) {
|
||||
baro.addListener(this);
|
||||
acc.addListener(this);
|
||||
}
|
||||
|
||||
virtual void start() override {
|
||||
// not needed
|
||||
}
|
||||
|
||||
virtual void stop() override {
|
||||
// not needed
|
||||
}
|
||||
|
||||
bool isRunning() const override {
|
||||
return acc.isRunning() && baro.isRunning();
|
||||
}
|
||||
|
||||
virtual void onSensorData(Sensor<BarometerData>* sensor, const Timestamp ts, const BarometerData& data) override {
|
||||
(void) sensor;
|
||||
const ActivityButterPressure::Activity curAct = act.add(ts, data);
|
||||
informListeners(ts, ActivityData(curAct));
|
||||
}
|
||||
|
||||
virtual void onSensorData(Sensor<AccelerometerData>* sensor, const Timestamp ts, const AccelerometerData& data) override {
|
||||
(void) sensor;
|
||||
(void) ts;
|
||||
(void) data;
|
||||
// TODO!
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif // BAROMETERACTIVITYSENSOR_H
|
||||
@@ -33,11 +33,19 @@ public:
|
||||
/** stop this sensor */
|
||||
virtual void stop() = 0;
|
||||
|
||||
/** whether the sensor is currently start()ed */
|
||||
virtual bool isRunning() const = 0;
|
||||
|
||||
/** add the given listener to the sensor */
|
||||
void addListener(SensorListener<T>* l) {
|
||||
listeners.push_back(l);
|
||||
}
|
||||
|
||||
/** remove the given listener from the sensor */
|
||||
void removeListener(SensorListener<T>* l) {
|
||||
listeners.erase(std::remove(listeners.begin(), listeners.end(), l), listeners.end());
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
/** inform all attached listeners */
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
#include "StepSensor.h"
|
||||
#include "TurnSensor.h"
|
||||
|
||||
#include "ActivitySensor.h"
|
||||
|
||||
|
||||
class SensorFactory {
|
||||
@@ -75,6 +75,12 @@ public:
|
||||
return turns;
|
||||
}
|
||||
|
||||
/** get the Activity sensor */
|
||||
ActivitySensor& getActivity() {
|
||||
static ActivitySensor activity(getBarometer(), getAccelerometer());
|
||||
return activity;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif // SENSORFACTORY_H
|
||||
|
||||
@@ -13,15 +13,18 @@ struct StepData {
|
||||
/**
|
||||
* step-sensor detects steps from the accelerometer
|
||||
*/
|
||||
class StepSensor : public SensorListener<AccelerometerData>, public Sensor<StepData> {
|
||||
class StepSensor :
|
||||
public SensorListener<AccelerometerData>, // << takes
|
||||
public Sensor<StepData> { // << provides
|
||||
|
||||
private:
|
||||
|
||||
AccelerometerSensor& acc;
|
||||
StepDetection sd;
|
||||
|
||||
public:
|
||||
|
||||
StepSensor(AccelerometerSensor& acc) {
|
||||
StepSensor(AccelerometerSensor& acc) : acc(acc) {
|
||||
acc.addListener(this);
|
||||
}
|
||||
|
||||
@@ -33,6 +36,10 @@ public:
|
||||
//
|
||||
}
|
||||
|
||||
bool isRunning() const override {
|
||||
return acc.isRunning();
|
||||
}
|
||||
|
||||
virtual void onSensorData(Sensor<AccelerometerData>* sensor, const Timestamp ts, const AccelerometerData& data) override {
|
||||
(void) sensor;
|
||||
const bool step = sd.add(ts, data);
|
||||
|
||||
@@ -11,17 +11,23 @@ struct TurnData {
|
||||
TurnData() : radSinceLastEvent(0), radSinceStart(0) {;}
|
||||
};
|
||||
|
||||
class TurnSensor : public SensorListener<AccelerometerData>, public SensorListener<GyroscopeData>, public Sensor<TurnData> {
|
||||
class TurnSensor :
|
||||
public SensorListener<AccelerometerData>, // << takes
|
||||
public SensorListener<GyroscopeData>, // << takes
|
||||
public Sensor<TurnData> { // << provides
|
||||
|
||||
private:
|
||||
|
||||
TurnDetection turn;
|
||||
TurnData data;
|
||||
|
||||
AccelerometerSensor& acc;
|
||||
GyroscopeSensor& gyro;
|
||||
|
||||
public:
|
||||
|
||||
/** ctor */
|
||||
TurnSensor(AccelerometerSensor& acc, GyroscopeSensor& gyro) {
|
||||
TurnSensor(AccelerometerSensor& acc, GyroscopeSensor& gyro) : acc(acc), gyro(gyro) {
|
||||
acc.addListener(this);
|
||||
gyro.addListener(this);
|
||||
}
|
||||
@@ -34,6 +40,10 @@ public:
|
||||
//
|
||||
}
|
||||
|
||||
bool isRunning() const override {
|
||||
return acc.isRunning() && gyro.isRunning();
|
||||
}
|
||||
|
||||
virtual void onSensorData(Sensor<AccelerometerData>* sensor, const Timestamp ts, const AccelerometerData& data) override {
|
||||
(void) sensor;
|
||||
turn.addAccelerometer(ts, data);
|
||||
|
||||
@@ -43,6 +43,10 @@ public:
|
||||
|
||||
}
|
||||
|
||||
bool isRunning() const override {
|
||||
return acc.isActive();
|
||||
}
|
||||
|
||||
void stop() override {
|
||||
throw "TODO";
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ public:
|
||||
void start() override {
|
||||
|
||||
auto onSensorData = [&] () {
|
||||
BarometerData data(baro.reading()->pressure());
|
||||
BarometerData data(baro.reading()->pressure() / 100.0f); // convert Pa to hPa
|
||||
informListeners(data);
|
||||
};
|
||||
|
||||
@@ -42,6 +42,10 @@ public:
|
||||
|
||||
}
|
||||
|
||||
bool isRunning() const override {
|
||||
return baro.isActive();
|
||||
}
|
||||
|
||||
void stop() override {
|
||||
throw "TODO";
|
||||
}
|
||||
|
||||
@@ -46,6 +46,10 @@ public:
|
||||
|
||||
}
|
||||
|
||||
bool isRunning() const override {
|
||||
return gyro.isActive();
|
||||
}
|
||||
|
||||
void stop() override {
|
||||
throw "TODO";
|
||||
}
|
||||
|
||||
@@ -8,8 +8,7 @@ extern "C" {
|
||||
JNIEXPORT void JNICALL Java_indoor_java_WiFi_onScanComplete(JNIEnv* env, jobject jobj, jbyteArray arrayID) {
|
||||
(void) env; (void) jobj;
|
||||
jsize length = env->GetArrayLength(arrayID);
|
||||
jboolean isCopy;
|
||||
jbyte* data = env->GetByteArrayElements(arrayID, &isCopy);
|
||||
jbyte* data = env->GetByteArrayElements(arrayID, 0);
|
||||
std::string str((char*)data, length);
|
||||
env->ReleaseByteArrayElements(arrayID, data, JNI_ABORT);
|
||||
WiFiSensorAndroid::get().handle(str);
|
||||
|
||||
@@ -16,6 +16,8 @@ private:
|
||||
/** hidden ctor. use singleton! */
|
||||
WiFiSensorAndroid() {;}
|
||||
|
||||
bool started = false;
|
||||
|
||||
public:
|
||||
|
||||
/** singleton access */
|
||||
@@ -28,7 +30,8 @@ public:
|
||||
|
||||
// start scanning
|
||||
int res = QAndroidJniObject::callStaticMethod<int>("indoor/java/WiFi", "start", "()I");
|
||||
(void) res;
|
||||
if (res != 0) {throw Exception("error while starting WiFi");}
|
||||
started = true;
|
||||
|
||||
}
|
||||
|
||||
@@ -36,8 +39,12 @@ public:
|
||||
throw "todo";
|
||||
}
|
||||
|
||||
bool isRunning() const override {
|
||||
return started;
|
||||
}
|
||||
|
||||
/** called from java. handle the given incoming scan result */
|
||||
void handle(const std::string& data) {
|
||||
void handle(const std::string data) {
|
||||
|
||||
// to-be-constructed sensor data
|
||||
WiFiMeasurements sensorData;
|
||||
|
||||
@@ -31,6 +31,11 @@ public:
|
||||
thread.join();
|
||||
}
|
||||
|
||||
bool isRunning() const override {
|
||||
return running;
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
/** subclasses must provide a random entry here */
|
||||
|
||||
@@ -26,6 +26,9 @@ public:
|
||||
return wifi;
|
||||
}
|
||||
|
||||
bool isRunning() const override {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
void start() override {
|
||||
|
||||
|
||||
@@ -37,6 +37,10 @@ public:
|
||||
thread.join();
|
||||
}
|
||||
|
||||
bool isRunning() const override {
|
||||
return running;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
virtual void onGyroscope(const Timestamp _ts, const GyroscopeData data) override {
|
||||
|
||||
Reference in New Issue
Block a user