Implemented first Hangar-Service
Dependencies: CalibrateMagneto QuaternionMath
Fork of SML2 by
Sensor.h@6:c12cea26842d, 2015-02-12 (annotated)
- 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?
User | Revision | Line number | New 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 |