Self test boot program for testing icarus sensors

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_UARTConsole by Bluetooth Low Energy

Committer:
smigielski
Date:
Wed Apr 15 20:01:16 2015 +0000
Revision:
14:cb369746225d
Parent:
13:ef0ce8fa871f
ADXL362 self test working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
smigielski 7:438b55fe8576 1 #ifndef MBED_BASE_SENSOR_H
smigielski 7:438b55fe8576 2 #define MBED_BASE_SENSOR_H
smigielski 7:438b55fe8576 3
smigielski 7:438b55fe8576 4 #include "mbed.h"
smigielski 7:438b55fe8576 5
smigielski 13:ef0ce8fa871f 6 #define LOG(...) do { if (debug) { debug( __VA_ARGS__); } } while (0)
smigielski 13:ef0ce8fa871f 7
smigielski 7:438b55fe8576 8 /* Constants */
smigielski 7:438b55fe8576 9 #define SENSORS_GRAVITY_EARTH (9.80665F) /**< Earth's gravity in m/s^2 */
smigielski 7:438b55fe8576 10 #define SENSORS_GRAVITY_MOON (1.6F) /**< The moon's gravity in m/s^2 */
smigielski 7:438b55fe8576 11 #define SENSORS_GRAVITY_SUN (275.0F) /**< The sun's gravity in m/s^2 */
smigielski 7:438b55fe8576 12 #define SENSORS_GRAVITY_STANDARD (SENSORS_GRAVITY_EARTH)
smigielski 7:438b55fe8576 13 #define SENSORS_MAGFIELD_EARTH_MAX (60.0F) /**< Maximum magnetic field on Earth's surface */
smigielski 7:438b55fe8576 14 #define SENSORS_MAGFIELD_EARTH_MIN (30.0F) /**< Minimum magnetic field on Earth's surface */
smigielski 7:438b55fe8576 15 #define SENSORS_PRESSURE_SEALEVELHPA (1013.25F) /**< Average sea level pressure is 1013.25 hPa */
smigielski 7:438b55fe8576 16 #define SENSORS_DPS_TO_RADS (0.017453293F) /**< Degrees/s to rad/s multiplier */
smigielski 7:438b55fe8576 17 #define SENSORS_GAUSS_TO_MICROTESLA (100) /**< Gauss to micro-Tesla multiplier */
smigielski 7:438b55fe8576 18
smigielski 10:3a24c970db40 19
smigielski 10:3a24c970db40 20 #define DOWN 0
smigielski 10:3a24c970db40 21 #define UP 1
smigielski 10:3a24c970db40 22
smigielski 9:ed3636e1873f 23 /* Errors */
smigielski 9:ed3636e1873f 24 #define ERROR_WRONG_DEVICE_ID 1
smigielski 14:cb369746225d 25 #define ERROR_WRONG_DEVICE_STATE 2
smigielski 9:ed3636e1873f 26 #define ERROR_DEVICE_SLEEPING 3
smigielski 14:cb369746225d 27 #define ERROR_ACCE_SELF_TEST_FAILED 4
smigielski 14:cb369746225d 28 #define ERROR_GYRO_SELF_TEST_FAILED 5
smigielski 14:cb369746225d 29 #define ERROR_MAGN_SELF_TEST_FAILED 6
smigielski 10:3a24c970db40 30
smigielski 7:438b55fe8576 31 /** Sensor types */
smigielski 7:438b55fe8576 32 typedef enum
smigielski 7:438b55fe8576 33 {
smigielski 7:438b55fe8576 34 SENSOR_TYPE_ACCELEROMETER = (1), /**< Gravity + linear acceleration */
smigielski 7:438b55fe8576 35 SENSOR_TYPE_MAGNETIC_FIELD = (2),
smigielski 7:438b55fe8576 36 SENSOR_TYPE_ORIENTATION = (3),
smigielski 7:438b55fe8576 37 SENSOR_TYPE_GYROSCOPE = (4),
smigielski 7:438b55fe8576 38 SENSOR_TYPE_LIGHT = (5),
smigielski 7:438b55fe8576 39 SENSOR_TYPE_PRESSURE = (6),
smigielski 7:438b55fe8576 40 SENSOR_TYPE_PROXIMITY = (8),
smigielski 7:438b55fe8576 41 SENSOR_TYPE_GRAVITY = (9),
smigielski 7:438b55fe8576 42 SENSOR_TYPE_LINEAR_ACCELERATION = (10), /**< Acceleration not including gravity */
smigielski 7:438b55fe8576 43 SENSOR_TYPE_ROTATION_VECTOR = (11),
smigielski 7:438b55fe8576 44 SENSOR_TYPE_RELATIVE_HUMIDITY = (12),
smigielski 7:438b55fe8576 45 SENSOR_TYPE_AMBIENT_TEMPERATURE = (13),
smigielski 7:438b55fe8576 46 SENSOR_TYPE_VOLTAGE = (15),
smigielski 7:438b55fe8576 47 SENSOR_TYPE_CURRENT = (16),
smigielski 7:438b55fe8576 48 SENSOR_TYPE_COLOR = (17)
smigielski 7:438b55fe8576 49 } sensors_type_t;
smigielski 7:438b55fe8576 50
smigielski 7:438b55fe8576 51 /* Sensor details (40 bytes) */
smigielski 7:438b55fe8576 52 /** struct sensor_s is used to describe basic information about a specific sensor. */
smigielski 7:438b55fe8576 53 typedef struct
smigielski 7:438b55fe8576 54 {
smigielski 7:438b55fe8576 55 char name[12]; /**< sensor name */
smigielski 7:438b55fe8576 56 int32_t version; /**< version of the hardware + driver */
smigielski 7:438b55fe8576 57 int32_t sensor_id; /**< unique sensor identifier */
smigielski 7:438b55fe8576 58 int32_t type; /**< this sensor's type (ex. SENSOR_TYPE_LIGHT) */
smigielski 7:438b55fe8576 59 float max_value; /**< maximum value of this sensor's value in SI units */
smigielski 7:438b55fe8576 60 float min_value; /**< minimum value of this sensor's value in SI units */
smigielski 7:438b55fe8576 61 float resolution; /**< smallest difference between two values reported by this sensor */
smigielski 7:438b55fe8576 62 int32_t min_delay; /**< min delay in microseconds between events. zero = not a constant rate */
smigielski 7:438b55fe8576 63 } sensor_t;
smigielski 7:438b55fe8576 64
smigielski 7:438b55fe8576 65 class BaseSensor {
smigielski 7:438b55fe8576 66 public:
smigielski 7:438b55fe8576 67 //constructor
smigielski 13:ef0ce8fa871f 68 BaseSensor(void (*debug_)(const char* format, ...)=0);
smigielski 7:438b55fe8576 69 //get sensor details from actual implementation
smigielski 8:e9ae7a01d866 70 virtual char* getSimpleName() = 0;
smigielski 8:e9ae7a01d866 71 virtual void getSensorDetails(sensor_t*) = 0;
smigielski 7:438b55fe8576 72 //verify basic integrity of underlining hardware
smigielski 9:ed3636e1873f 73 virtual uint32_t verifyIntegrity(uint32_t*) = 0;
smigielski 13:ef0ce8fa871f 74 void (*debug)(const char* format, ...);
smigielski 7:438b55fe8576 75 private:
smigielski 13:ef0ce8fa871f 76
smigielski 7:438b55fe8576 77 };
smigielski 7:438b55fe8576 78
smigielski 7:438b55fe8576 79 #endif