Implemented first Hangar-Service

Dependencies:   CalibrateMagneto QuaternionMath

Fork of SML2 by TobyRich GmbH

SensorFusion.h

Committer:
uadhikari
Date:
2015-05-20
Revision:
42:160a37bdaa64
Parent:
41:731e3cfac19b

File content as of revision 42:160a37bdaa64:

#ifndef _H_SENSORFUSION_H
#define _H_SENSORFUSION_H

#include "I2CPeripheral.h"
#include "Magnetometer.h"
#include "Accelerometer.h"
#include "Gyroscope.h"
#include "Quaternion.h"

class SensorFusion : public Sensor::Delegate
{
public:
    class Delegate{
    public:
        virtual void sensorTick(float dt, Vector3 fused, Vector3 accel, Vector3 magneto, Vector3 gyro, Quaternion q){};       
    };

    SensorFusion(I2C &i2c);
    
    void setDelegate(Delegate &d);
    bool start();
    void stop();
    void getMagnetometerCalibration(Vector3 &min, Vector3 &max);
    void enableMagnetometer(); 
    void disableMagnetometer(); 
    
private:
    void updateFilter(float ax, float ay, float az, float gx, float gy, float gz, float mx, float my, float mz);
    void updateFilter(float ax, float ay, float az, float gx, float gy, float gz);
    
    class NineAxisSensorFusion : public Sensor::Delegate{
        private:
            SensorFusion* senFuseRef;
        public:
            NineAxisSensorFusion(SensorFusion* _ref);
            void sensorUpdate(Vector3 gyro_degrees);
    };
    
    class SixAxisSensorFusion : public Sensor::Delegate{
        private:
            SensorFusion* senFuseRef;
        public:
            SixAxisSensorFusion(SensorFusion* _ref);           
            void sensorUpdate(Vector3 gyro_degrees);
    };
    
    //So that these inner classes can acces the private variable of SensorFusion class
    friend class NineAxisSensorFusion;
    friend class SixAxisSensorFusion; 
    
    bool magnetoMeterEnabled;
    
    Delegate defaultDelegate; // to avoid check for existence every time
    Delegate* delegate;
    
    NineAxisSensorFusion gyroDelegateWithMagneto;
    SixAxisSensorFusion  gyroDelegateWithoutMagneto;
   
    Accelerometer accel;
    Gyroscope gyro;   
    Magnetometer magneto;
    Quaternion q;
    float const deltat, beta;
    Vector3 fused;
};

#endif