started to add ble functions

added ble as sensor to java and c++
added sensorlistener for ble
added ble to observation and onDataSensor in filter
started to work on ble fingerprints for optimization
This commit is contained in:
mail@toni-fetzer.de
2019-06-05 18:04:31 +02:00
parent b9b9d8f9ac
commit 20ae2f5c2a
23 changed files with 1341 additions and 1152 deletions

View File

@@ -8,6 +8,9 @@
#include "linux/WiFiSensorLinux.h"
#include "android/WiFiSensorAndroid.h"
#include "BLESensor.h"
#include "android/BLESensorAndroid.h"
#include "AccelerometerSensor.h"
#include "dummy/AccelerometerSensorDummy.h"
#include "android/AccelerometerSensorAndroid.h"
@@ -37,58 +40,61 @@ class SensorFactory {
private:
/** this one is a dirty hack, as static class member variables do not work header-only */
static SensorFactory** getPtr() {
static SensorFactory* ptr = nullptr;
return &ptr;
}
/** this one is a dirty hack, as static class member variables do not work header-only */
static SensorFactory** getPtr() {
static SensorFactory* ptr = nullptr;
return &ptr;
}
public:
/** set the to-be-used sensor-fatory */
static void set(SensorFactory* fac) {
Assert::isNull(*getPtr(), "SensorFactory::set() was already called. currentely this is not intended");
*getPtr() = fac;
}
/** set the to-be-used sensor-fatory */
static void set(SensorFactory* fac) {
Assert::isNull(*getPtr(), "SensorFactory::set() was already called. currentely this is not intended");
*getPtr() = fac;
}
/** get the currently configured sensory factory */
static SensorFactory& get() {
Assert::isNotNull(*getPtr(), "call SensorFactory::set() first to set an actual factory instance!");
return **getPtr();
}
/** get the currently configured sensory factory */
static SensorFactory& get() {
Assert::isNotNull(*getPtr(), "call SensorFactory::set() first to set an actual factory instance!");
return **getPtr();
}
public:
/** get the WiFi sensor */
virtual WiFiSensor& getWiFi() = 0;
/** get the WiFi sensor */
virtual WiFiSensor& getWiFi() = 0;
/** get the Accelerometer sensor */
virtual AccelerometerSensor& getAccelerometer() = 0;
/** get the Accelerometer sensor */
virtual AccelerometerSensor& getAccelerometer() = 0;
/** get the Gyroscope sensor */
virtual GyroscopeSensor& getGyroscope() = 0;
/** get the Gyroscope sensor */
virtual GyroscopeSensor& getGyroscope() = 0;
/** get the Barometer sensor */
virtual BarometerSensor& getBarometer() = 0;
/** get the Barometer sensor */
virtual BarometerSensor& getBarometer() = 0;
/** get the compass sensor */
virtual CompassSensor& getCompass() = 0;
/** get the compass sensor */
virtual CompassSensor& getCompass() = 0;
/** get the gps sensor */
virtual GPSSensor& getGPS() = 0;
/** get the gps sensor */
virtual GPSSensor& getGPS() = 0;
/** get the bluetooth low energy sensor */
virtual BLESensor& getBLE() = 0;
/** get the Step sensor */
StepSensor& getSteps() {
static StepSensor steps(getAccelerometer());
return steps;
}
/** get the Step sensor */
StepSensor& getSteps() {
static StepSensor steps(getAccelerometer());
return steps;
}
/** get the Turn sensor */
TurnSensor& getTurns() {
static TurnSensor turns(getAccelerometer(), getGyroscope());
return turns;
}
/** get the Turn sensor */
TurnSensor& getTurns() {
static TurnSensor turns(getAccelerometer(), getGyroscope());
return turns;
}
/** get the Activity sensor */
ActivitySensor& getActivity() {

View File

@@ -19,82 +19,81 @@
* writes it to a file
*/
class SensorWriter :
public SensorListener<AccelerometerData>,
public SensorListener<GyroscopeData>,
public SensorListener<BarometerData>,
public SensorListener<AccelerometerData>,
public SensorListener<GyroscopeData>,
public SensorListener<BarometerData>,
// public SensorListener<ActivityData>,
// public SensorListener<StepData>,
// public SensorListener<TurnData>,
public SensorListener<WiFiMeasurements>,
public SensorListener<GPSData>,
public SensorListener<CompassData> {
public SensorListener<WiFiMeasurements>,
public SensorListener<GPSData>,
public SensorListener<CompassData> {
private:
Offline::FileWriter writer;
bool active = false;
Offline::FileWriter writer;
bool active = false;
public:
/** empty ctor */
SensorWriter() {
/** empty ctor */
SensorWriter() {
// attach as listener to all sensors we want to store
SensorFactory::get().getAccelerometer().addListener(this);
SensorFactory::get().getGyroscope().addListener(this);
SensorFactory::get().getBarometer().addListener(this);
// attach as listener to all sensors we want to store
SensorFactory::get().getAccelerometer().addListener(this);
SensorFactory::get().getGyroscope().addListener(this);
SensorFactory::get().getBarometer().addListener(this);
// SensorFactory::get().getActivity().addListener(this);
// SensorFactory::get().getSteps().addListener(this);
// SensorFactory::get().getTurns().addListener(this);
SensorFactory::get().getWiFi().addListener(this);
SensorFactory::get().getCompass().addListener(this);
SensorFactory::get().getGPS().addListener(this);
}
SensorFactory::get().getWiFi().addListener(this);
SensorFactory::get().getCompass().addListener(this);
SensorFactory::get().getGPS().addListener(this);
}
void start(const std::string& file) {
writer.open(file);
active = true;
}
void start(const std::string& file) {
writer.open(file);
active = true;
}
void stop() {
active = false;
writer.close();
}
void stop() {
active = false;
writer.close();
}
public:
virtual void onSensorData(Sensor<AccelerometerData>* , const Timestamp ts, const AccelerometerData& data) override {
if (!active) {return;}
writer.add(ts, data);
}
virtual void onSensorData(Sensor<AccelerometerData>* , const Timestamp ts, const AccelerometerData& data) override {
if (!active) {return;}
writer.add(ts, data);
}
virtual void onSensorData(Sensor<GyroscopeData>* , const Timestamp ts, const GyroscopeData& data) override {
if (!active) {return;}
writer.add(ts, data);
}
virtual void onSensorData(Sensor<GyroscopeData>* , const Timestamp ts, const GyroscopeData& data) override {
if (!active) {return;}
writer.add(ts, data);
}
virtual void onSensorData(Sensor<BarometerData>* , const Timestamp ts, const BarometerData& data) override {
if (!active) {return;}
writer.add(ts, data);
}
virtual void onSensorData(Sensor<BarometerData>* , const Timestamp ts, const BarometerData& data) override {
if (!active) {return;}
writer.add(ts, data);
}
virtual void onSensorData(Sensor<WiFiMeasurements>* , const Timestamp ts, const WiFiMeasurements& data) override {
if (!active) {return;}
writer.add(ts, data);
}
virtual void onSensorData(Sensor<WiFiMeasurements>* , const Timestamp ts, const WiFiMeasurements& data) override {
if (!active) {return;}
writer.add(ts, data);
}
virtual void onSensorData(Sensor<GPSData>* , const Timestamp ts, const GPSData& data) override {
if (!active) {return;}
writer.add(ts, data);
}
virtual void onSensorData(Sensor<GPSData>* , const Timestamp ts, const GPSData& data) override {
if (!active) {return;}
writer.add(ts, data);
}
virtual void onSensorData(Sensor<CompassData>* , const Timestamp ts, const CompassData& data) override {
if (!active) {return;}
writer.add(ts, data);
}
virtual void onSensorData(Sensor<CompassData>* , const Timestamp ts, const CompassData& data) override {
if (!active) {return;}
writer.add(ts, data);
}
};

View File

@@ -1,6 +1,7 @@
#ifndef TURNSENSOR_H
#define TURNSENSOR_H
#include <Indoor/sensors/imu/PoseDetection.h>
#include <Indoor/sensors/imu/TurnDetection.h>
#include "AccelerometerSensor.h"
#include "GyroscopeSensor.h"

View File

@@ -0,0 +1,18 @@
#ifdef ANDROID
#include "BLESensorAndroid.h"
extern "C" {
/** called after each successful WiFi scan */
JNIEXPORT void JNICALL Java_indoor_java_BLE_onScanComplete(JNIEnv* env, jobject jobj, jbyteArray arrayID) {
(void) env; (void) jobj;
jsize length = env->GetArrayLength(arrayID);
jbyte* data = env->GetByteArrayElements(arrayID, 0);
std::string str((char*)data, length);
env->ReleaseByteArrayElements(arrayID, data, JNI_ABORT);
BLESensorAndroid::get().handle(str);
}
}
#endif

View File

@@ -5,6 +5,7 @@
#include "../SensorFactory.h"
#include "BLESensorAndroid.h"
#include "WiFiSensorAndroid.h"
#include "AccelerometerSensorAndroid.h"
#include "GyroscopeSensorAndroid.h"
@@ -20,29 +21,33 @@ class SensorFactoryAndroid : public SensorFactory {
public:
WiFiSensor& getWiFi() override {
return WiFiSensorAndroid::get();
}
WiFiSensor& getWiFi() override {
return WiFiSensorAndroid::get();
}
AccelerometerSensor& getAccelerometer() override {
return AccelerometerSensorAndroid::get();
}
AccelerometerSensor& getAccelerometer() override {
return AccelerometerSensorAndroid::get();
}
GyroscopeSensor& getGyroscope() override {
return GyroscopeSensorAndroid::get();
}
GyroscopeSensor& getGyroscope() override {
return GyroscopeSensorAndroid::get();
}
BarometerSensor& getBarometer() override {
return BarometerSensorAndroid::get();
}
BarometerSensor& getBarometer() override {
return BarometerSensorAndroid::get();
}
CompassSensor& getCompass() override {
return CompassSensorAndroid::get();
}
CompassSensor& getCompass() override {
return CompassSensorAndroid::get();
}
GPSSensor& getGPS() override {
return GPSSensorAndroid::get();
}
GPSSensor& getGPS() override {
return GPSSensorAndroid::get();
}
BLESensor& getBLE() override {
return BLESensorAndroid::get();
}
};