Implemented first Hangar-Service

Dependencies:   CalibrateMagneto QuaternionMath

Fork of SML2 by TobyRich GmbH

Committer:
pvaibhav
Date:
Thu Feb 12 19:00:28 2015 +0000
Revision:
6:c12cea26842d
Child:
7:604a8369b801
New "Sensor" base class and delegation mechanism for sensor updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pvaibhav 6:c12cea26842d 1 #ifndef _H_SENSOR_H
pvaibhav 6:c12cea26842d 2 #define _H_SENSOR_H
pvaibhav 6:c12cea26842d 3
pvaibhav 6:c12cea26842d 4 /// Base class for I2C-connected sensors. Defines functionality supported by all sensors.
pvaibhav 6:c12cea26842d 5 class Sensor {
pvaibhav 6:c12cea26842d 6 public:
pvaibhav 6:c12cea26842d 7 /// Base class for sensor data frame. Sensors may derive from this and add their own data fields.
pvaibhav 6:c12cea26842d 8 class Data {
pvaibhav 6:c12cea26842d 9 public:
pvaibhav 6:c12cea26842d 10 int16_t x; ///< x-axis sensor data
pvaibhav 6:c12cea26842d 11 int16_t y; ///< y-axis sensor data
pvaibhav 6:c12cea26842d 12 int16_t z; ///< z-axis sensor data
pvaibhav 6:c12cea26842d 13 int16_t reserved; ///< (reserved, do not use)
pvaibhav 6:c12cea26842d 14 float timestamp; ///< Timestamp in seconds.
pvaibhav 6:c12cea26842d 15 };
pvaibhav 6:c12cea26842d 16
pvaibhav 6:c12cea26842d 17 /// Defines protocol used to send data back to owner. Derive from this class and use Sensor.setDelegate() to receive sensor updates.
pvaibhav 6:c12cea26842d 18 class Delegate {
pvaibhav 6:c12cea26842d 19 public:
pvaibhav 6:c12cea26842d 20 /// A new sensor data frame, might be called several (hundred) times a second.
pvaibhav 6:c12cea26842d 21 virtual void sensorUpdate(Sensor* source, Data frame) = 0;
pvaibhav 6:c12cea26842d 22 };
pvaibhav 6:c12cea26842d 23
pvaibhav 6:c12cea26842d 24 virtual void setDelegate(Delegate &d) {
pvaibhav 6:c12cea26842d 25 _delegate = &d;
pvaibhav 6:c12cea26842d 26 }
pvaibhav 6:c12cea26842d 27
pvaibhav 6:c12cea26842d 28 /// Power on a sensor and make it ready for use.
pvaibhav 6:c12cea26842d 29 /// @return true if power-up was successful, false otherwise.
pvaibhav 6:c12cea26842d 30 virtual bool powerOn() = 0;
pvaibhav 6:c12cea26842d 31
pvaibhav 6:c12cea26842d 32 /// Power off a sensor. This will generally only put the sensor into deep sleep.
pvaibhav 6:c12cea26842d 33 virtual void powerOff() = 0;
pvaibhav 6:c12cea26842d 34
pvaibhav 6:c12cea26842d 35 virtual void start() = 0; ///< Start continuous data capture. If a delegate is set, its sensorUpdate() method will be called for each data frame.
pvaibhav 6:c12cea26842d 36 virtual void stop() = 0; ///< Stop capturing data.
pvaibhav 6:c12cea26842d 37
pvaibhav 6:c12cea26842d 38 virtual Data read() = 0; ///< Read and return instantaneous (current) sensor data. No need to start the sensor.
pvaibhav 6:c12cea26842d 39
pvaibhav 6:c12cea26842d 40 protected:
pvaibhav 6:c12cea26842d 41 /// Derived classes should use this method to pass sensor data to their owner. Delegate existence check is automatically done before dispatching.
pvaibhav 6:c12cea26842d 42 void sendData(Data frame) {
pvaibhav 6:c12cea26842d 43 if (_delegate)
pvaibhav 6:c12cea26842d 44 _delegate->sensorUpdate(this, frame);
pvaibhav 6:c12cea26842d 45 }
pvaibhav 6:c12cea26842d 46 Delegate * _delegate;
pvaibhav 6:c12cea26842d 47 };
pvaibhav 6:c12cea26842d 48
pvaibhav 6:c12cea26842d 49 #endif//_H_SENSOR_H