My attempt to made a more useful lib. You can get the accelerator and magnetometer.

Fork of LSM303DLH by Michael Shimniok

LSM303DLH_RegisterDef.h

Committer:
salco
Date:
2017-08-06
Revision:
8:cc338ded0b2c
Parent:
7:275a0a69cff5

File content as of revision 8:cc338ded0b2c:

/*
 *
 * This file is subject to the terms and conditions of the GNU Lesser
 * General Public License v2.1. See the file LICENSE in the top level
 * directory for more details.
 */

#ifndef __LSM303DLH_REGISTERDEF_H_
#define __LSM303DLH_REGISTERDEF_H_

/** @defgroup LSM303_Register
  * @author      Salco <JeSuisSalco@gmail.com>
  */

/** @defgroup regA
  * Register for accelerometer
  * @ingroup LSM303_Register 
  * @{        
  */

//#if defined(DOXYGEN_ONLY)

/**@note add LSM303DLH:: to use the docc doxygen for no reason*/

/** CTRL_REG1_A structure definition
 */ 
union Ctrl_Reg1_A_t 
{
    uint8_t byte; /**< Value in byte.*/
    struct{
        uint8_t Xen:1; /**< X axis enable. Default value: 1.*/
        uint8_t Yen:1; /**< Y axis enable. Default value: 1.*/
        uint8_t Zen:1; /**< Z axis enable. Default value: 1.*/
        uint8_t LPen:1;/**< Low-power mode enable. Default value: 0.*/
        uint8_t ODR:4; /**< Data rate selection. Default value: 0.*/
    };    
};

/** CTRL_REG2_A structure definition
 */ 
union Ctrl_Reg2_A_t
{
    uint8_t byte; /**< Value in byte.*/
    struct{
        uint8_t HPIS1:1;    /**< High pass filter enabled for AOI function on Interrupt 1.*/
        uint8_t HPIS2:1;    /**< High pass filter enabled for AOI function on Interrupt 2.*/
        uint8_t HPCLICK:1;  /**< High pass filter enabled for CLICK function.*/
        uint8_t FDS:1;      /**< Filtered data selection. Default value: 0.*/
        uint8_t HPCF:2;     /**< High pass filter cut-off frequency selection.*/
        uint8_t HPM:2;      /**< High pass filter mode selection. Default value: 00*/
    };    
};

/** CTRL_REG3_A structure definition
 */ 
union Ctrl_Reg3_A_t
{
    uint8_t byte; /**< Value in byte.*/
    struct{
        uint8_t _Reserved:1;    /**< Do not use.*/
        uint8_t I1_OVERRUN:1;  /**< FIFO overrun interrupt on INT1. Default value 0.*/
        uint8_t I1_WTM:1;      /**< FIFO watermark interrupt on INT1. Default value 0.*/
        uint8_t I1_DRDY2:1;    /**< DRDY2 interrupt on INT1. Default value 0.*/
        uint8_t I1_DRDY1:1;    /**< DRDY1 interrupt on INT1. Default value 0.*/
        uint8_t I1_AOI2:1;     /**< AOI2 interrupt on INT1. Default value 0.*/
        uint8_t I1_AOI1:1;     /**< AOI1 interrupt on INT1. Default value 0.*/
        uint8_t I1_CLICK:1;    /**< CLICK interrupt on INT1. Default value 0.*/
    };    
};

/** CTRL_REG4_A structure definition
 */ 
union Ctrl_Reg4_A_t
{
    uint8_t byte; /**< Value in byte.*/
    struct{
        uint8_t SIM:1;      /**< SPI serial interface mode selection. Default value: 0.*/
        uint8_t _Reserved:2; /**< Do not use.*/
        uint8_t HR:1;       /**< High resolution output mode: Default value: 0.*/
        uint8_t FS:2;       /**< Full-scale selection. Default value: 00.*/
        uint8_t BLE:1;      /**< Big/little endian data selection. Default value 0.*/
        uint8_t BDU:1;      /**< Block data update. Default value: 0.*/
    };    
};

/** CTRL_REG5_A structure definition
 */ 
union Ctrl_Reg5_A_t
{
    uint8_t byte; /**< Value in byte.*/
    struct{
        uint8_t D4D_INT2:1;      /**< 4D detection is enabled on INT2 when 6D bit on INT2_CFG is set to 1.*/                
        uint8_t LIR_INT2:1;      /**< Latch interrupt request on INT2_SRC register, with INT2_SRC register 
                                      cleared by reading INT2_SRC itself. Default value: 0.*/
        uint8_t D4D_INT1:1;      /**< 4D detection is enabled on INT1 when 6D bit on INT1_CFG is set to 1.*/                
        uint8_t LIR_INT1:1;      /**< Latch interrupt request on INT1_SRC register, with INT1_SRC register 
                                      cleared by reading INT1_SRC itself. Default value: 0.*/
        uint8_t _Reserved:2;      /**< Do not use.*/
        uint8_t FIFO_EN:1;       /**< FIFO enable. Default value: 0.*/
        uint8_t BOOT:1;          /**< Reboot memory content. Default value: 0.*/
    };   
};



/** CTRL_REG6_A structure definition
 */ 
union Ctrl_Reg6_A_t
{
    uint8_t byte; /**< Value in byte.*/
    struct{
        uint8_t _Reserved:1;     /**< Do not use.*/
        uint8_t H_LACTIVE:1;    /**< Interrupt active high, low. Default value 0.*/    
        uint8_t __Reserved:1;     /**< Do not use.*/            
        uint8_t P2_ACT:1;       /**< Active function status on PAD2. Default value 0.*/
        uint8_t BOOT_I1:1;      /**< Reboot memory content on PAD2. Default value: 0.*/                
        uint8_t I2_INT2:1;      /**< Interrupt 2 on PAD2. Default value 0.*/
        uint8_t I2_INT1:1;      /**< Interrupt 1 on PAD2. Default value 0.*/
        uint8_t I2_CLICKen:1;   /**< CLICK interrupt on PAD2. Default value 0.*/
    };   
};

 /** Status_Reg_A structure definition
 */ 
union Status_Reg_A_t
{
    uint8_t byte; /**< Value in byte.*/
    struct{
        
        uint8_t XDA:1;          /**< X axis new data available. Default value: 0.*/    
        uint8_t YDA:1;          /**< Y axis new data available. Default value: 0.*/            
        uint8_t ZDA:1;          /**< Z axis new data available. Default value: 0.*/
        uint8_t ZYXDA:1;        /**< X, Y, and Z axis new data available. Default value: 0.*/                
        uint8_t XOR:1;          /**< X axis data overrun. Default value: 0.*/
        uint8_t YOR:1;          /**< Y axis data overrun. Default value: 0.*/
        uint8_t ZOR:1;          /**< Z axis data overrun. Default value: 0.*/
        uint8_t ZYXOR:1;        /**< X, Y, and Z axis data overrun. Default value: 0.*/
    };   
};

/** OUT_XYZ structure. The value is expressed in 2’s complement
*/
union OUT_XYZ_t
{
    int16_t value;      /**< Value in signed integer.*/
    uint8_t byte[2];
    struct{
        uint8_t UT_L_A; /**< Low register.*/
        uint8_t UT_H_A; /**< High register.*/
    };
};
/** @} */ // end of regA

/** @defgroup regM  
  *  Register for magnetometer
  * @ingroup LSM303_Register 
  *  @{        
  */
 
/** SR_Reg_M structure definition
 */ 
union SR_Reg_M_t
{
    uint8_t byte; /**< Value in byte.*/
    struct{
        uint8_t DRDY:1;      /**< Data output register lock.*/                
        uint8_t LOCK:1;      /**< Data ready bit.*/ 
        uint8_t _Reserved:8; /**< Do not use.*/
    };   
};

/** CRA_REG_M structure definition
 */ 
union CRA_REG_M_t
{
    uint8_t byte; /**< Value in byte.*/
    struct{
        uint8_t _Reserved:2;    /**< Do not use.  Must be set to 0*/
        uint8_t DO:3;           /**< Data output rate bits.*/
        uint8_t __Reserved:2;   /**< Do not use.  Must be set to 0*/
        uint8_t TEMP_EN:1;      /**< Temperature sensor enable.*/
    };   
};

/** CRB_REG_M structure definition
 */ 
union CRB_REG_M_t
{
    uint8_t byte; /**< Value in byte.*/
    struct{
        uint8_t _Reserved:5;      /**< Do not use.  Must be set to ‘0*/
        uint8_t GN:3;           /**< Gain configuration.*/                               
    };   
};

/** MR_REG_M structure definition
 */ 
union MR_REG_M_t
{
    uint8_t byte; /**< Value in byte.*/
    struct{
        uint8_t MD:2;           /**< Mode select bits. These bits select the operation mode of this device.*/    
        uint8_t _Reserved:6;    /**< Do not use.  Must be set to 0*/
                                   
    };   
};
/** @} */ // end of regM

#endif //__LSM303DLH_REGISTERDEF_H_