alarm system

Dependencies:   mbed xbee_lib

Fork of rtos_mutex by mbed official

LSM9DS1_Types.h

Committer:
sreddy47
Date:
2016-04-29
Revision:
5:802a7c5a4b27

File content as of revision 5:802a7c5a4b27:

/******************************************************************************
LSM9DS1_Types.h
SFE_LSM9DS1 Library - LSM9DS1 Types and Enumerations
Jim Lindblom @ SparkFun Electronics
Original Creation Date: April 21, 2015
https://github.com/sparkfun/LSM9DS1_Breakout

This file defines all types and enumerations used by the LSM9DS1 class.

Development environment specifics:
    IDE: Arduino 1.6.0
    Hardware Platform: Arduino Uno
    LSM9DS1 Breakout Version: 1.0

This code is beerware; if you see me (or any other SparkFun employee) at the
local, and you've found our code helpful, please buy us a round!

Distributed as-is; no warranty is given.
******************************************************************************/

#ifndef __LSM9DS1_Types_H__
#define __LSM9DS1_Types_H__

#include "LSM9DS1_Registers.h"

// The LSM9DS1 functions over both I2C or SPI. This library supports both.
// But the interface mode used must be sent to the LSM9DS1 constructor. Use
// one of these two as the first parameter of the constructor.
enum interface_mode
{
    IMU_MODE_SPI,
    IMU_MODE_I2C,
};

// accel_scale defines all possible FSR's of the accelerometer:
enum accel_scale
{
    A_SCALE_2G, // 00:  2g
    A_SCALE_16G,// 01:  16g
    A_SCALE_4G, // 10:  4g
    A_SCALE_8G  // 11:  8g
};

// gyro_scale defines the possible full-scale ranges of the gyroscope:
enum gyro_scale
{
    G_SCALE_245DPS,     // 00:  245 degrees per second
    G_SCALE_500DPS,     // 01:  500 dps
    G_SCALE_2000DPS,    // 11:  2000 dps
};

// mag_scale defines all possible FSR's of the magnetometer:
enum mag_scale
{
    M_SCALE_4GS,    // 00:  4Gs
    M_SCALE_8GS,    // 01:  8Gs
    M_SCALE_12GS,   // 10:  12Gs
    M_SCALE_16GS,   // 11:  16Gs
};

// gyro_odr defines all possible data rate/bandwidth combos of the gyro:
enum gyro_odr
{
    //! TODO 
    G_ODR_PD,   // Power down (0)
    G_ODR_149,  // 14.9 Hz (1)
    G_ODR_595,  // 59.5 Hz (2)
    G_ODR_119,  // 119 Hz (3)
    G_ODR_238,  // 238 Hz (4)
    G_ODR_476,  // 476 Hz (5)
    G_ODR_952   // 952 Hz (6)
};
// accel_oder defines all possible output data rates of the accelerometer:
enum accel_odr
{
    XL_POWER_DOWN,  // Power-down mode (0x0)
    XL_ODR_10,      // 10 Hz (0x1)
    XL_ODR_50,      // 50 Hz (0x02)
    XL_ODR_119,     // 119 Hz (0x3)
    XL_ODR_238,     // 238 Hz (0x4)
    XL_ODR_476,     // 476 Hz (0x5)
    XL_ODR_952      // 952 Hz (0x6)
};

// accel_abw defines all possible anti-aliasing filter rates of the accelerometer:
enum accel_abw
{
    A_ABW_408,      // 408 Hz (0x0)
    A_ABW_211,      // 211 Hz (0x1)
    A_ABW_105,      // 105 Hz (0x2)
    A_ABW_50,       //  50 Hz (0x3)
};


// mag_odr defines all possible output data rates of the magnetometer:
enum mag_odr
{
    M_ODR_0625, // 0.625 Hz (0)
    M_ODR_125,  // 1.25 Hz (1)
    M_ODR_250,  // 2.5 Hz (2)
    M_ODR_5,    // 5 Hz (3)
    M_ODR_10,   // 10 Hz (4)
    M_ODR_20,   // 20 Hz (5)
    M_ODR_40,   // 40 Hz (6)
    M_ODR_80    // 80 Hz (7)
};

enum interrupt_select
{
    XG_INT1 = INT1_CTRL,
    XG_INT2 = INT2_CTRL
};

enum interrupt_generators
{
    INT_DRDY_XL = (1<<0),    // Accelerometer data ready (INT1 & INT2)
    INT_DRDY_G = (1<<1),     // Gyroscope data ready (INT1 & INT2)
    INT1_BOOT = (1<<2),  // Boot status (INT1)
    INT2_DRDY_TEMP = (1<<2),// Temp data ready (INT2)
    INT_FTH = (1<<3),        // FIFO threshold interrupt (INT1 & INT2)
    INT_OVR = (1<<4),        // Overrun interrupt (INT1 & INT2)
    INT_FSS5 = (1<<5),       // FSS5 interrupt (INT1 & INT2)
    INT_IG_XL = (1<<6),  // Accel interrupt generator (INT1)
    INT1_IG_G = (1<<7),  // Gyro interrupt enable (INT1)
    INT2_INACT = (1<<7),     // Inactivity interrupt output (INT2)
};  

enum accel_interrupt_generator
{
    XLIE_XL = (1<<0),
    XHIE_XL = (1<<1),
    YLIE_XL = (1<<2),
    YHIE_XL = (1<<3),
    ZLIE_XL = (1<<4),
    ZHIE_XL = (1<<5),
    GEN_6D = (1<<6)
};

enum gyro_interrupt_generator
{
    XLIE_G = (1<<0),
    XHIE_G = (1<<1),
    YLIE_G = (1<<2),
    YHIE_G = (1<<3),
    ZLIE_G = (1<<4),
    ZHIE_G = (1<<5)
};

enum mag_interrupt_generator
{
    ZIEN = (1<<5),
    YIEN = (1<<6),
    XIEN = (1<<7)
};

enum h_lactive
{
    INT_ACTIVE_HIGH,
    INT_ACTIVE_LOW
};

enum pp_od
{
    INT_PUSH_PULL,
    INT_OPEN_DRAIN
};

enum fifoMode_type
{
    FIFO_OFF = 0,
    FIFO_THS = 1,
    FIFO_CONT_TRIGGER = 3,
    FIFO_OFF_TRIGGER = 4,
    FIFO_CONT = 5
};

struct gyroSettings
{
    // Gyroscope settings:
    uint8_t enabled;
    uint16_t scale; // Changed this to 16-bit
    uint8_t sampleRate;
    // New gyro stuff:
    uint8_t bandwidth;
    uint8_t lowPowerEnable;
    uint8_t HPFEnable;
    uint8_t HPFCutoff;
    uint8_t flipX;
    uint8_t flipY;
    uint8_t flipZ;
    uint8_t orientation;
    uint8_t enableX;
    uint8_t enableY;
    uint8_t enableZ;
    uint8_t latchInterrupt;
};

struct deviceSettings
{
    uint8_t commInterface; // Can be I2C, SPI 4-wire or SPI 3-wire
    uint8_t agAddress;  // I2C address or SPI CS pin
    uint8_t mAddress;   // I2C address or SPI CS pin
};

struct accelSettings
{
    // Accelerometer settings:
    uint8_t enabled;
    uint8_t scale;
    uint8_t sampleRate;
    // New accel stuff:
    uint8_t enableX;
    uint8_t enableY;
    uint8_t enableZ;
    int8_t  bandwidth;
    uint8_t highResEnable;
    uint8_t highResBandwidth;
};

struct magSettings
{
    // Magnetometer settings:
    uint8_t enabled;
    uint8_t scale;
    uint8_t sampleRate;
    // New mag stuff:
    uint8_t tempCompensationEnable;
    uint8_t XYPerformance;
    uint8_t ZPerformance;
    uint8_t lowPowerEnable;
    uint8_t operatingMode;
};

struct temperatureSettings
{
    // Temperature settings
    uint8_t enabled;
};

struct IMUSettings
{
    deviceSettings device;
    
    gyroSettings gyro;
    accelSettings accel;
    magSettings mag;
    
    temperatureSettings temp;
};

#endif