Self test boot program for testing icarus sensors
Dependencies: BLE_API mbed nRF51822
Fork of BLE_UARTConsole by
BaseSensor.h@13:ef0ce8fa871f, 2015-04-05 (annotated)
- Committer:
- smigielski
- Date:
- Sun Apr 05 09:54:04 2015 +0000
- Revision:
- 13:ef0ce8fa871f
- Parent:
- 10:3a24c970db40
- Child:
- 14:cb369746225d
Debug log working across modules. ; ADXL sensor test cleanuo; MPU device id test
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 | 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 | 9:ed3636e1873f | 25 | #define ERROR_SEU_ERROR_DETECT 2 |
smigielski | 9:ed3636e1873f | 26 | #define ERROR_DEVICE_SLEEPING 3 |
smigielski | 9:ed3636e1873f | 27 | #define ERROR_SELF_TEST_FAILED 4 |
smigielski | 10:3a24c970db40 | 28 | |
smigielski | 7:438b55fe8576 | 29 | /** Sensor types */ |
smigielski | 7:438b55fe8576 | 30 | typedef enum |
smigielski | 7:438b55fe8576 | 31 | { |
smigielski | 7:438b55fe8576 | 32 | SENSOR_TYPE_ACCELEROMETER = (1), /**< Gravity + linear acceleration */ |
smigielski | 7:438b55fe8576 | 33 | SENSOR_TYPE_MAGNETIC_FIELD = (2), |
smigielski | 7:438b55fe8576 | 34 | SENSOR_TYPE_ORIENTATION = (3), |
smigielski | 7:438b55fe8576 | 35 | SENSOR_TYPE_GYROSCOPE = (4), |
smigielski | 7:438b55fe8576 | 36 | SENSOR_TYPE_LIGHT = (5), |
smigielski | 7:438b55fe8576 | 37 | SENSOR_TYPE_PRESSURE = (6), |
smigielski | 7:438b55fe8576 | 38 | SENSOR_TYPE_PROXIMITY = (8), |
smigielski | 7:438b55fe8576 | 39 | SENSOR_TYPE_GRAVITY = (9), |
smigielski | 7:438b55fe8576 | 40 | SENSOR_TYPE_LINEAR_ACCELERATION = (10), /**< Acceleration not including gravity */ |
smigielski | 7:438b55fe8576 | 41 | SENSOR_TYPE_ROTATION_VECTOR = (11), |
smigielski | 7:438b55fe8576 | 42 | SENSOR_TYPE_RELATIVE_HUMIDITY = (12), |
smigielski | 7:438b55fe8576 | 43 | SENSOR_TYPE_AMBIENT_TEMPERATURE = (13), |
smigielski | 7:438b55fe8576 | 44 | SENSOR_TYPE_VOLTAGE = (15), |
smigielski | 7:438b55fe8576 | 45 | SENSOR_TYPE_CURRENT = (16), |
smigielski | 7:438b55fe8576 | 46 | SENSOR_TYPE_COLOR = (17) |
smigielski | 7:438b55fe8576 | 47 | } sensors_type_t; |
smigielski | 7:438b55fe8576 | 48 | |
smigielski | 7:438b55fe8576 | 49 | /* Sensor details (40 bytes) */ |
smigielski | 7:438b55fe8576 | 50 | /** struct sensor_s is used to describe basic information about a specific sensor. */ |
smigielski | 7:438b55fe8576 | 51 | typedef struct |
smigielski | 7:438b55fe8576 | 52 | { |
smigielski | 7:438b55fe8576 | 53 | char name[12]; /**< sensor name */ |
smigielski | 7:438b55fe8576 | 54 | int32_t version; /**< version of the hardware + driver */ |
smigielski | 7:438b55fe8576 | 55 | int32_t sensor_id; /**< unique sensor identifier */ |
smigielski | 7:438b55fe8576 | 56 | int32_t type; /**< this sensor's type (ex. SENSOR_TYPE_LIGHT) */ |
smigielski | 7:438b55fe8576 | 57 | float max_value; /**< maximum value of this sensor's value in SI units */ |
smigielski | 7:438b55fe8576 | 58 | float min_value; /**< minimum value of this sensor's value in SI units */ |
smigielski | 7:438b55fe8576 | 59 | float resolution; /**< smallest difference between two values reported by this sensor */ |
smigielski | 7:438b55fe8576 | 60 | int32_t min_delay; /**< min delay in microseconds between events. zero = not a constant rate */ |
smigielski | 7:438b55fe8576 | 61 | } sensor_t; |
smigielski | 7:438b55fe8576 | 62 | |
smigielski | 7:438b55fe8576 | 63 | class BaseSensor { |
smigielski | 7:438b55fe8576 | 64 | public: |
smigielski | 7:438b55fe8576 | 65 | //constructor |
smigielski | 13:ef0ce8fa871f | 66 | BaseSensor(void (*debug_)(const char* format, ...)=0); |
smigielski | 7:438b55fe8576 | 67 | //get sensor details from actual implementation |
smigielski | 8:e9ae7a01d866 | 68 | virtual char* getSimpleName() = 0; |
smigielski | 8:e9ae7a01d866 | 69 | virtual void getSensorDetails(sensor_t*) = 0; |
smigielski | 7:438b55fe8576 | 70 | //verify basic integrity of underlining hardware |
smigielski | 9:ed3636e1873f | 71 | virtual uint32_t verifyIntegrity(uint32_t*) = 0; |
smigielski | 13:ef0ce8fa871f | 72 | void (*debug)(const char* format, ...); |
smigielski | 7:438b55fe8576 | 73 | private: |
smigielski | 13:ef0ce8fa871f | 74 | |
smigielski | 7:438b55fe8576 | 75 | }; |
smigielski | 7:438b55fe8576 | 76 | |
smigielski | 7:438b55fe8576 | 77 | #endif |