current revision

This commit is contained in:
2016-09-28 12:16:45 +02:00
parent 075d8bb633
commit d47322e73b
90 changed files with 8228 additions and 606 deletions

63
sensors/ActivitySensor.h Normal file
View 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

View File

@@ -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 */

View File

@@ -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

View File

@@ -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);

View File

@@ -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);

View File

@@ -43,6 +43,10 @@ public:
}
bool isRunning() const override {
return acc.isActive();
}
void stop() override {
throw "TODO";
}

View File

@@ -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";
}

View File

@@ -46,6 +46,10 @@ public:
}
bool isRunning() const override {
return gyro.isActive();
}
void stop() override {
throw "TODO";
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -31,6 +31,11 @@ public:
thread.join();
}
bool isRunning() const override {
return running;
}
protected:
/** subclasses must provide a random entry here */

View File

@@ -26,6 +26,9 @@ public:
return wifi;
}
bool isRunning() const override {
return enabled;
}
void start() override {

View File

@@ -37,6 +37,10 @@ public:
thread.join();
}
bool isRunning() const override {
return running;
}
protected:
virtual void onGyroscope(const Timestamp _ts, const GyroscopeData data) override {