Self test boot program for testing icarus sensors
Dependencies: BLE_API mbed nRF51822
Fork of BLE_UARTConsole by
BaseSensor.h@7:438b55fe8576, 2015-01-26 (annotated)
- Committer:
- smigielski
- Date:
- Mon Jan 26 13:57:26 2015 +0000
- Revision:
- 7:438b55fe8576
- Child:
- 8:e9ae7a01d866
Simple sensor structure
Who changed what in which revision?
User | Revision | Line number | New 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 | 7:438b55fe8576 | 6 | #include "BaseChannel.h" |
smigielski | 7:438b55fe8576 | 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 | 7:438b55fe8576 | 19 | /** Sensor types */ |
smigielski | 7:438b55fe8576 | 20 | typedef enum |
smigielski | 7:438b55fe8576 | 21 | { |
smigielski | 7:438b55fe8576 | 22 | SENSOR_TYPE_ACCELEROMETER = (1), /**< Gravity + linear acceleration */ |
smigielski | 7:438b55fe8576 | 23 | SENSOR_TYPE_MAGNETIC_FIELD = (2), |
smigielski | 7:438b55fe8576 | 24 | SENSOR_TYPE_ORIENTATION = (3), |
smigielski | 7:438b55fe8576 | 25 | SENSOR_TYPE_GYROSCOPE = (4), |
smigielski | 7:438b55fe8576 | 26 | SENSOR_TYPE_LIGHT = (5), |
smigielski | 7:438b55fe8576 | 27 | SENSOR_TYPE_PRESSURE = (6), |
smigielski | 7:438b55fe8576 | 28 | SENSOR_TYPE_PROXIMITY = (8), |
smigielski | 7:438b55fe8576 | 29 | SENSOR_TYPE_GRAVITY = (9), |
smigielski | 7:438b55fe8576 | 30 | SENSOR_TYPE_LINEAR_ACCELERATION = (10), /**< Acceleration not including gravity */ |
smigielski | 7:438b55fe8576 | 31 | SENSOR_TYPE_ROTATION_VECTOR = (11), |
smigielski | 7:438b55fe8576 | 32 | SENSOR_TYPE_RELATIVE_HUMIDITY = (12), |
smigielski | 7:438b55fe8576 | 33 | SENSOR_TYPE_AMBIENT_TEMPERATURE = (13), |
smigielski | 7:438b55fe8576 | 34 | SENSOR_TYPE_VOLTAGE = (15), |
smigielski | 7:438b55fe8576 | 35 | SENSOR_TYPE_CURRENT = (16), |
smigielski | 7:438b55fe8576 | 36 | SENSOR_TYPE_COLOR = (17) |
smigielski | 7:438b55fe8576 | 37 | } sensors_type_t; |
smigielski | 7:438b55fe8576 | 38 | |
smigielski | 7:438b55fe8576 | 39 | /* Sensor details (40 bytes) */ |
smigielski | 7:438b55fe8576 | 40 | /** struct sensor_s is used to describe basic information about a specific sensor. */ |
smigielski | 7:438b55fe8576 | 41 | typedef struct |
smigielski | 7:438b55fe8576 | 42 | { |
smigielski | 7:438b55fe8576 | 43 | char name[12]; /**< sensor name */ |
smigielski | 7:438b55fe8576 | 44 | int32_t version; /**< version of the hardware + driver */ |
smigielski | 7:438b55fe8576 | 45 | int32_t sensor_id; /**< unique sensor identifier */ |
smigielski | 7:438b55fe8576 | 46 | int32_t type; /**< this sensor's type (ex. SENSOR_TYPE_LIGHT) */ |
smigielski | 7:438b55fe8576 | 47 | float max_value; /**< maximum value of this sensor's value in SI units */ |
smigielski | 7:438b55fe8576 | 48 | float min_value; /**< minimum value of this sensor's value in SI units */ |
smigielski | 7:438b55fe8576 | 49 | float resolution; /**< smallest difference between two values reported by this sensor */ |
smigielski | 7:438b55fe8576 | 50 | int32_t min_delay; /**< min delay in microseconds between events. zero = not a constant rate */ |
smigielski | 7:438b55fe8576 | 51 | } sensor_t; |
smigielski | 7:438b55fe8576 | 52 | |
smigielski | 7:438b55fe8576 | 53 | class BaseSensor { |
smigielski | 7:438b55fe8576 | 54 | public: |
smigielski | 7:438b55fe8576 | 55 | //constructor |
smigielski | 7:438b55fe8576 | 56 | BaseSensor(BaseChannel* ); |
smigielski | 7:438b55fe8576 | 57 | //get sensor details from actual implementation |
smigielski | 7:438b55fe8576 | 58 | virtual char* getSimpleName(); |
smigielski | 7:438b55fe8576 | 59 | virtual void getSensorDetails(sensor_t*); |
smigielski | 7:438b55fe8576 | 60 | //verify basic integrity of underlining hardware |
smigielski | 7:438b55fe8576 | 61 | virtual int verifyIntegrity(int*); |
smigielski | 7:438b55fe8576 | 62 | |
smigielski | 7:438b55fe8576 | 63 | private: |
smigielski | 7:438b55fe8576 | 64 | BaseChannel* channel; |
smigielski | 7:438b55fe8576 | 65 | }; |
smigielski | 7:438b55fe8576 | 66 | |
smigielski | 7:438b55fe8576 | 67 | #endif |