Ultra-compact high-performance eCompass module: ultra-low power 3D accelerometer and 3D magnetometer.

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   HelloWorld_ST_Sensors MOTENV_Mbed mbed-os-mqtt-client LSM303AGR_JS ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LSM303AGR_mag_driver.h Source File

LSM303AGR_mag_driver.h

Go to the documentation of this file.
00001 /**
00002  ******************************************************************************
00003  * @file    LSM303AGR_mag_driver.h
00004  * @author  MEMS Application Team
00005  * @version V1.1
00006  * @date    25-February-2016
00007  * @brief   LSM303AGR Magnetometer header driver file
00008  ******************************************************************************
00009  * @attention
00010  *
00011  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
00012  *
00013  * Redistribution and use in source and binary forms, with or without modification,
00014  * are permitted provided that the following conditions are met:
00015  *   1. Redistributions of source code must retain the above copyright notice,
00016  *      this list of conditions and the following disclaimer.
00017  *   2. Redistributions in binary form must reproduce the above copyright notice,
00018  *      this list of conditions and the following disclaimer in the documentation
00019  *      and/or other materials provided with the distribution.
00020  *   3. Neither the name of STMicroelectronics nor the names of its contributors
00021  *      may be used to endorse or promote products derived from this software
00022  *      without specific prior written permission.
00023  *
00024  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00025  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00026  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00027  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
00028  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00029  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00030  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00031  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00032  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00033  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00034  *
00035  ******************************************************************************
00036  */
00037 
00038 /* Define to prevent recursive inclusion -------------------------------------*/
00039 #ifndef __LSM303AGR_MAG_DRIVER__H
00040 #define __LSM303AGR_MAG_DRIVER__H
00041 
00042 /* Includes ------------------------------------------------------------------*/
00043 #include <stdint.h>
00044 
00045 /* Exported types ------------------------------------------------------------*/
00046 
00047 #ifdef __cplusplus
00048 extern "C" {
00049 #endif
00050 
00051 //these could change accordingly with the architecture
00052 
00053 #ifndef __ARCHDEP__TYPES
00054 #define __ARCHDEP__TYPES
00055 
00056 typedef unsigned char u8_t;
00057 typedef unsigned short int u16_t;
00058 typedef unsigned int u32_t;
00059 typedef int i32_t;
00060 typedef short int i16_t;
00061 typedef signed char i8_t;
00062 
00063 #endif /*__ARCHDEP__TYPES*/
00064 
00065 /* Exported common structure --------------------------------------------------------*/
00066 
00067 #ifndef __SHARED__TYPES
00068 #define __SHARED__TYPES
00069 
00070 typedef union{
00071     i16_t i16bit[3];
00072     u8_t u8bit[6];
00073 } Type3Axis16bit_U; 
00074 
00075 typedef union{
00076     i16_t i16bit;
00077     u8_t u8bit[2];
00078 } Type1Axis16bit_U;
00079 
00080 typedef union{
00081     i32_t i32bit;
00082     u8_t u8bit[4];
00083 } Type1Axis32bit_U;
00084 
00085 typedef enum {
00086   MEMS_SUCCESS = 0x01,
00087   MEMS_ERROR   = 0x00   
00088 } mems_status_t;
00089 
00090 #endif /*__SHARED__TYPES*/
00091 
00092 /* Exported macro ------------------------------------------------------------*/
00093 
00094 /* Exported constants --------------------------------------------------------*/
00095 
00096 /************** I2C Address *****************/
00097 
00098 #define LSM303AGR_MAG_I2C_ADDRESS         0x3C
00099 
00100 /************** Who am I  *******************/
00101 
00102 #define LSM303AGR_MAG_WHO_AM_I         0x40
00103 
00104 /* Private Function Prototype -------------------------------------------------------*/
00105  
00106 void LSM303AGR_MAG_SwapHighLowByte(u8_t *bufferToSwap, u8_t numberOfByte, u8_t dimension);
00107 
00108 /* Public Function Prototypes -------------------------------------------------------*/
00109 
00110 mems_status_t LSM303AGR_MAG_read_reg( void *handle, u8_t Reg, u8_t* Data );
00111 mems_status_t LSM303AGR_MAG_write_reg( void *handle, u8_t Reg, u8_t Data ); 
00112 
00113 
00114 /************** Device Register  *******************/
00115 #define LSM303AGR_MAG_OFFSET_X_REG_L    0X45
00116 #define LSM303AGR_MAG_OFFSET_X_REG_H    0X46
00117 #define LSM303AGR_MAG_OFFSET_Y_REG_L    0X47
00118 #define LSM303AGR_MAG_OFFSET_Y_REG_H    0X48
00119 #define LSM303AGR_MAG_OFFSET_Z_REG_L    0X49
00120 #define LSM303AGR_MAG_OFFSET_Z_REG_H    0X4A
00121 #define LSM303AGR_MAG_WHO_AM_I_REG      0X4F
00122 #define LSM303AGR_MAG_CFG_REG_A     0X60
00123 #define LSM303AGR_MAG_CFG_REG_B     0X61
00124 #define LSM303AGR_MAG_CFG_REG_C     0X62
00125 #define LSM303AGR_MAG_INT_CTRL_REG      0X63
00126 #define LSM303AGR_MAG_INT_SOURCE_REG    0X64
00127 #define LSM303AGR_MAG_INT_THS_L_REG     0X65
00128 #define LSM303AGR_MAG_INT_THS_H_REG     0X66
00129 #define LSM303AGR_MAG_STATUS_REG    0X67
00130 #define LSM303AGR_MAG_OUTX_L_REG    0X68
00131 #define LSM303AGR_MAG_OUTX_H_REG    0X69
00132 #define LSM303AGR_MAG_OUTY_L_REG    0X6A
00133 #define LSM303AGR_MAG_OUTY_H_REG    0X6B
00134 #define LSM303AGR_MAG_OUTZ_L_REG    0X6C
00135 #define LSM303AGR_MAG_OUTZ_H_REG    0X6D
00136 
00137 /*******************************************************************************
00138 * Register      : OFFSET_X_REG_L
00139 * Address       : 0X45
00140 * Bit Group Name: OFF_X_L
00141 * Permission    : RW
00142 *******************************************************************************/
00143 #define       LSM303AGR_MAG_OFF_X_L_MASK      0xFF
00144 #define       LSM303AGR_MAG_OFF_X_L_POSITION      0
00145 mems_status_t LSM303AGR_MAG_W_OFF_X_L(void *handle, u8_t newValue);
00146 mems_status_t LSM303AGR_MAG_R_OFF_X_L(void *handle, u8_t *value);
00147 
00148 /*******************************************************************************
00149 * Register      : OFFSET_X_REG_H
00150 * Address       : 0X46
00151 * Bit Group Name: OFF_X_H
00152 * Permission    : RW
00153 *******************************************************************************/
00154 #define       LSM303AGR_MAG_OFF_X_H_MASK      0xFF
00155 #define       LSM303AGR_MAG_OFF_X_H_POSITION      0
00156 mems_status_t LSM303AGR_MAG_W_OFF_X_H(void *handle, u8_t newValue);
00157 mems_status_t LSM303AGR_MAG_R_OFF_X_H(void *handle, u8_t *value);
00158 
00159 /*******************************************************************************
00160 * Register      : OFFSET_Y_REG_L
00161 * Address       : 0X47
00162 * Bit Group Name: OFF_Y_L
00163 * Permission    : RW
00164 *******************************************************************************/
00165 #define       LSM303AGR_MAG_OFF_Y_L_MASK      0xFF
00166 #define       LSM303AGR_MAG_OFF_Y_L_POSITION      0
00167 mems_status_t LSM303AGR_MAG_W_OFF_Y_L(void *handle, u8_t newValue);
00168 mems_status_t LSM303AGR_MAG_R_OFF_Y_L(void *handle, u8_t *value);
00169 
00170 /*******************************************************************************
00171 * Register      : OFFSET_Y_REG_H
00172 * Address       : 0X48
00173 * Bit Group Name: OFF_Y_H
00174 * Permission    : RW
00175 *******************************************************************************/
00176 #define       LSM303AGR_MAG_OFF_Y_H_MASK      0xFF
00177 #define       LSM303AGR_MAG_OFF_Y_H_POSITION      0
00178 mems_status_t LSM303AGR_MAG_W_OFF_Y_H(void *handle, u8_t newValue);
00179 mems_status_t LSM303AGR_MAG_R_OFF_Y_H(void *handle, u8_t *value);
00180 
00181 /*******************************************************************************
00182 * Register      : OFFSET_Z_REG_L
00183 * Address       : 0X49
00184 * Bit Group Name: OFF_Z_L
00185 * Permission    : RW
00186 *******************************************************************************/
00187 #define       LSM303AGR_MAG_OFF_Z_L_MASK      0xFF
00188 #define       LSM303AGR_MAG_OFF_Z_L_POSITION      0
00189 mems_status_t LSM303AGR_MAG_W_OFF_Z_L(void *handle, u8_t newValue);
00190 mems_status_t LSM303AGR_MAG_R_OFF_Z_L(void *handle, u8_t *value);
00191 
00192 /*******************************************************************************
00193 * Register      : OFFSET_Z_REG_H
00194 * Address       : 0X4A
00195 * Bit Group Name: OFF_Z_H
00196 * Permission    : RW
00197 *******************************************************************************/
00198 #define       LSM303AGR_MAG_OFF_Z_H_MASK      0xFF
00199 #define       LSM303AGR_MAG_OFF_Z_H_POSITION      0
00200 mems_status_t LSM303AGR_MAG_W_OFF_Z_H(void *handle, u8_t newValue);
00201 mems_status_t LSM303AGR_MAG_R_OFF_Z_H(void *handle, u8_t *value);
00202 
00203 /*******************************************************************************
00204  * Set/Get the Magnetic offsets
00205 *******************************************************************************/
00206 mems_status_t LSM303AGR_MAG_Get_MagOff(void *handle, u16_t *magx_off, u16_t *magy_off, u16_t *magz_off);
00207 mems_status_t LSM303AGR_MAG_Set_MagOff(void *handle, u16_t magx_off, u16_t magy_off, u16_t magz_off);
00208 
00209 /*******************************************************************************
00210 * Register      : WHO_AM_I_REG
00211 * Address       : 0X4F
00212 * Bit Group Name: WHO_AM_I
00213 * Permission    : RO
00214 *******************************************************************************/
00215 #define       LSM303AGR_MAG_WHO_AM_I_MASK     0xFF
00216 #define       LSM303AGR_MAG_WHO_AM_I_POSITION     0
00217 mems_status_t LSM303AGR_MAG_R_WHO_AM_I(void *handle, u8_t *value);
00218 
00219 /*******************************************************************************
00220 * Register      : CFG_REG_A
00221 * Address       : 0X60
00222 * Bit Group Name: MD
00223 * Permission    : RW
00224 *******************************************************************************/
00225 typedef enum {
00226     LSM303AGR_MAG_MD_CONTINUOS_MODE          =0x00,
00227     LSM303AGR_MAG_MD_SINGLE_MODE         =0x01,
00228     LSM303AGR_MAG_MD_IDLE1_MODE          =0x02,
00229     LSM303AGR_MAG_MD_IDLE2_MODE          =0x03,
00230 } LSM303AGR_MAG_MD_t;
00231 
00232 #define       LSM303AGR_MAG_MD_MASK   0x03
00233 mems_status_t LSM303AGR_MAG_W_MD(void *handle, LSM303AGR_MAG_MD_t newValue);
00234 mems_status_t LSM303AGR_MAG_R_MD(void *handle, LSM303AGR_MAG_MD_t *value);
00235 
00236 /*******************************************************************************
00237 * Register      : CFG_REG_A
00238 * Address       : 0X60
00239 * Bit Group Name: ODR
00240 * Permission    : RW
00241 *******************************************************************************/
00242 typedef enum {
00243     LSM303AGR_MAG_ODR_10Hz       =0x00,
00244     LSM303AGR_MAG_ODR_20Hz       =0x04,
00245     LSM303AGR_MAG_ODR_50Hz       =0x08,
00246     LSM303AGR_MAG_ODR_100Hz          =0x0C,
00247 } LSM303AGR_MAG_ODR_t;
00248 
00249 #define       LSM303AGR_MAG_ODR_MASK      0x0C
00250 mems_status_t LSM303AGR_MAG_W_ODR(void *handle, LSM303AGR_MAG_ODR_t newValue);
00251 mems_status_t LSM303AGR_MAG_R_ODR(void *handle, LSM303AGR_MAG_ODR_t *value);
00252 
00253 /*******************************************************************************
00254 * Register      : CFG_REG_A
00255 * Address       : 0X60
00256 * Bit Group Name: LP
00257 * Permission    : RW
00258 *******************************************************************************/
00259 typedef enum {
00260     LSM303AGR_MAG_HR_MODE        =0x00,
00261     LSM303AGR_MAG_LP_MODE        =0x10,
00262 } LSM303AGR_MAG_LP_t;
00263 
00264 #define       LSM303AGR_MAG_LP_MASK   0x10
00265 mems_status_t LSM303AGR_MAG_W_LP(void *handle, LSM303AGR_MAG_LP_t newValue);
00266 mems_status_t LSM303AGR_MAG_R_LP(void *handle, LSM303AGR_MAG_LP_t *value);
00267 
00268 /*******************************************************************************
00269 * Register      : CFG_REG_A
00270 * Address       : 0X60
00271 * Bit Group Name: SOFT_RST
00272 * Permission    : RW
00273 *******************************************************************************/
00274 typedef enum {
00275     LSM303AGR_MAG_SOFT_RST_DISABLED          =0x00,
00276     LSM303AGR_MAG_SOFT_RST_ENABLED       =0x20,
00277 } LSM303AGR_MAG_SOFT_RST_t;
00278 
00279 #define       LSM303AGR_MAG_SOFT_RST_MASK     0x20
00280 mems_status_t LSM303AGR_MAG_W_SOFT_RST(void *handle, LSM303AGR_MAG_SOFT_RST_t newValue);
00281 mems_status_t LSM303AGR_MAG_R_SOFT_RST(void *handle, LSM303AGR_MAG_SOFT_RST_t *value);
00282 
00283 /*******************************************************************************
00284 * Register      : CFG_REG_B
00285 * Address       : 0X61
00286 * Bit Group Name: LPF
00287 * Permission    : RW
00288 *******************************************************************************/
00289 typedef enum {
00290     LSM303AGR_MAG_LPF_DISABLED       =0x00,
00291     LSM303AGR_MAG_LPF_ENABLED        =0x01,
00292 } LSM303AGR_MAG_LPF_t;
00293 
00294 #define       LSM303AGR_MAG_LPF_MASK      0x01
00295 mems_status_t LSM303AGR_MAG_W_LPF(void *handle, LSM303AGR_MAG_LPF_t newValue);
00296 mems_status_t LSM303AGR_MAG_R_LPF(void *handle, LSM303AGR_MAG_LPF_t *value);
00297 
00298 /*******************************************************************************
00299 * Register      : CFG_REG_B
00300 * Address       : 0X61
00301 * Bit Group Name: OFF_CANC
00302 * Permission    : RW
00303 *******************************************************************************/
00304 typedef enum {
00305     LSM303AGR_MAG_OFF_CANC_DISABLED          =0x00,
00306     LSM303AGR_MAG_OFF_CANC_ENABLED       =0x02,
00307 } LSM303AGR_MAG_OFF_CANC_t;
00308 
00309 #define       LSM303AGR_MAG_OFF_CANC_MASK     0x02
00310 mems_status_t LSM303AGR_MAG_W_OFF_CANC(void *handle, LSM303AGR_MAG_OFF_CANC_t newValue);
00311 mems_status_t LSM303AGR_MAG_R_OFF_CANC(void *handle, LSM303AGR_MAG_OFF_CANC_t *value);
00312 
00313 /*******************************************************************************
00314 * Register      : CFG_REG_B
00315 * Address       : 0X61
00316 * Bit Group Name: SET_FREQ
00317 * Permission    : RW
00318 *******************************************************************************/
00319 typedef enum {
00320     LSM303AGR_MAG_SET_FREQ_CONTINUOS         =0x00,
00321     LSM303AGR_MAG_SET_FREQ_SINGLE        =0x04,
00322 } LSM303AGR_MAG_SET_FREQ_t;
00323 
00324 #define       LSM303AGR_MAG_SET_FREQ_MASK     0x04
00325 mems_status_t LSM303AGR_MAG_W_SET_FREQ(void *handle, LSM303AGR_MAG_SET_FREQ_t newValue);
00326 mems_status_t LSM303AGR_MAG_R_SET_FREQ(void *handle, LSM303AGR_MAG_SET_FREQ_t *value);
00327 
00328 /*******************************************************************************
00329 * Register      : CFG_REG_B
00330 * Address       : 0X61
00331 * Bit Group Name: INT_ON_DATAOFF
00332 * Permission    : RW
00333 *******************************************************************************/
00334 typedef enum {
00335     LSM303AGR_MAG_INT_ON_DATAOFF_DISABLED        =0x00,
00336     LSM303AGR_MAG_INT_ON_DATAOFF_ENABLED         =0x08,
00337 } LSM303AGR_MAG_INT_ON_DATAOFF_t;
00338 
00339 #define       LSM303AGR_MAG_INT_ON_DATAOFF_MASK   0x08
00340 mems_status_t LSM303AGR_MAG_W_INT_ON_DATAOFF(void *handle, LSM303AGR_MAG_INT_ON_DATAOFF_t newValue);
00341 mems_status_t LSM303AGR_MAG_R_INT_ON_DATAOFF(void *handle, LSM303AGR_MAG_INT_ON_DATAOFF_t *value);
00342 
00343 /*******************************************************************************
00344 * Register      : CFG_REG_C
00345 * Address       : 0X62
00346 * Bit Group Name: INT_MAG
00347 * Permission    : RW
00348 *******************************************************************************/
00349 typedef enum {
00350     LSM303AGR_MAG_INT_MAG_DISABLED       =0x00,
00351     LSM303AGR_MAG_INT_MAG_ENABLED        =0x01,
00352 } LSM303AGR_MAG_INT_MAG_t;
00353 
00354 #define       LSM303AGR_MAG_INT_MAG_MASK      0x01
00355 mems_status_t LSM303AGR_MAG_W_INT_MAG(void *handle, LSM303AGR_MAG_INT_MAG_t newValue);
00356 mems_status_t LSM303AGR_MAG_R_INT_MAG(void *handle, LSM303AGR_MAG_INT_MAG_t *value);
00357 
00358 /*******************************************************************************
00359 * Register      : CFG_REG_C
00360 * Address       : 0X62
00361 * Bit Group Name: ST
00362 * Permission    : RW
00363 *******************************************************************************/
00364 typedef enum {
00365     LSM303AGR_MAG_ST_DISABLED        =0x00,
00366     LSM303AGR_MAG_ST_ENABLED         =0x02,
00367 } LSM303AGR_MAG_ST_t;
00368 
00369 #define       LSM303AGR_MAG_ST_MASK   0x02
00370 mems_status_t LSM303AGR_MAG_W_ST(void *handle, LSM303AGR_MAG_ST_t newValue);
00371 mems_status_t LSM303AGR_MAG_R_ST(void *handle, LSM303AGR_MAG_ST_t *value);
00372 
00373 /*******************************************************************************
00374 * Register      : CFG_REG_C
00375 * Address       : 0X62
00376 * Bit Group Name: BLE
00377 * Permission    : RW
00378 *******************************************************************************/
00379 typedef enum {
00380     LSM303AGR_MAG_BLE_DISABLED       =0x00,
00381     LSM303AGR_MAG_BLE_ENABLED        =0x08,
00382 } LSM303AGR_MAG_BLE_t;
00383 
00384 #define       LSM303AGR_MAG_BLE_MASK      0x08
00385 mems_status_t LSM303AGR_MAG_W_BLE(void *handle, LSM303AGR_MAG_BLE_t newValue);
00386 mems_status_t LSM303AGR_MAG_R_BLE(void *handle, LSM303AGR_MAG_BLE_t *value);
00387 
00388 /*******************************************************************************
00389 * Register      : CFG_REG_C
00390 * Address       : 0X62
00391 * Bit Group Name: BDU
00392 * Permission    : RW
00393 *******************************************************************************/
00394 typedef enum {
00395     LSM303AGR_MAG_BDU_DISABLED       =0x00,
00396     LSM303AGR_MAG_BDU_ENABLED        =0x10,
00397 } LSM303AGR_MAG_BDU_t;
00398 
00399 #define       LSM303AGR_MAG_BDU_MASK      0x10
00400 mems_status_t LSM303AGR_MAG_W_BDU(void *handle, LSM303AGR_MAG_BDU_t newValue);
00401 mems_status_t LSM303AGR_MAG_R_BDU(void *handle, LSM303AGR_MAG_BDU_t *value);
00402 
00403 /*******************************************************************************
00404 * Register      : CFG_REG_C
00405 * Address       : 0X62
00406 * Bit Group Name: I2C_DIS
00407 * Permission    : RW
00408 *******************************************************************************/
00409 typedef enum {
00410     LSM303AGR_MAG_I2C_ENABLED        =0x00,
00411     LSM303AGR_MAG_I2C_DISABLED       =0x20,
00412 } LSM303AGR_MAG_I2C_DIS_t;
00413 
00414 #define       LSM303AGR_MAG_I2C_DIS_MASK      0x20
00415 mems_status_t LSM303AGR_MAG_W_I2C_DIS(void *handle, LSM303AGR_MAG_I2C_DIS_t newValue);
00416 mems_status_t LSM303AGR_MAG_R_I2C_DIS(void *handle, LSM303AGR_MAG_I2C_DIS_t *value);
00417 
00418 /*******************************************************************************
00419 * Register      : CFG_REG_C
00420 * Address       : 0X62
00421 * Bit Group Name: INT_MAG_PIN
00422 * Permission    : RW
00423 *******************************************************************************/
00424 typedef enum {
00425     LSM303AGR_MAG_INT_MAG_PIN_DISABLED       =0x00,
00426     LSM303AGR_MAG_INT_MAG_PIN_ENABLED        =0x40,
00427 } LSM303AGR_MAG_INT_MAG_PIN_t;
00428 
00429 #define       LSM303AGR_MAG_INT_MAG_PIN_MASK      0x40
00430 mems_status_t LSM303AGR_MAG_W_INT_MAG_PIN(void *handle, LSM303AGR_MAG_INT_MAG_PIN_t newValue);
00431 mems_status_t LSM303AGR_MAG_R_INT_MAG_PIN(void *handle, LSM303AGR_MAG_INT_MAG_PIN_t *value);
00432 
00433 /*******************************************************************************
00434 * Register      : INT_CTRL_REG
00435 * Address       : 0X63
00436 * Bit Group Name: IEN
00437 * Permission    : RW
00438 *******************************************************************************/
00439 typedef enum {
00440     LSM303AGR_MAG_IEN_DISABLED       =0x00,
00441     LSM303AGR_MAG_IEN_ENABLED        =0x01,
00442 } LSM303AGR_MAG_IEN_t;
00443 
00444 #define       LSM303AGR_MAG_IEN_MASK      0x01
00445 mems_status_t LSM303AGR_MAG_W_IEN(void *handle, LSM303AGR_MAG_IEN_t newValue);
00446 mems_status_t LSM303AGR_MAG_R_IEN(void *handle, LSM303AGR_MAG_IEN_t *value);
00447 
00448 /*******************************************************************************
00449 * Register      : INT_CTRL_REG
00450 * Address       : 0X63
00451 * Bit Group Name: IEL
00452 * Permission    : RW
00453 *******************************************************************************/
00454 typedef enum {
00455     LSM303AGR_MAG_IEL_PULSED         =0x00,
00456     LSM303AGR_MAG_IEL_LATCHED        =0x02,
00457 } LSM303AGR_MAG_IEL_t;
00458 
00459 #define       LSM303AGR_MAG_IEL_MASK      0x02
00460 mems_status_t LSM303AGR_MAG_W_IEL(void *handle, LSM303AGR_MAG_IEL_t newValue);
00461 mems_status_t LSM303AGR_MAG_R_IEL(void *handle, LSM303AGR_MAG_IEL_t *value);
00462 
00463 /*******************************************************************************
00464 * Register      : INT_CTRL_REG
00465 * Address       : 0X63
00466 * Bit Group Name: IEA
00467 * Permission    : RW
00468 *******************************************************************************/
00469 typedef enum {
00470     LSM303AGR_MAG_IEA_ACTIVE_LO          =0x00,
00471     LSM303AGR_MAG_IEA_ACTIVE_HI          =0x04,
00472 } LSM303AGR_MAG_IEA_t;
00473 
00474 #define       LSM303AGR_MAG_IEA_MASK      0x04
00475 mems_status_t LSM303AGR_MAG_W_IEA(void *handle, LSM303AGR_MAG_IEA_t newValue);
00476 mems_status_t LSM303AGR_MAG_R_IEA(void *handle, LSM303AGR_MAG_IEA_t *value);
00477 
00478 /*******************************************************************************
00479 * Register      : INT_CTRL_REG
00480 * Address       : 0X63
00481 * Bit Group Name: ZIEN
00482 * Permission    : RW
00483 *******************************************************************************/
00484 typedef enum {
00485     LSM303AGR_MAG_ZIEN_DISABLED          =0x00,
00486     LSM303AGR_MAG_ZIEN_ENABLED       =0x20,
00487 } LSM303AGR_MAG_ZIEN_t;
00488 
00489 #define       LSM303AGR_MAG_ZIEN_MASK     0x20
00490 mems_status_t LSM303AGR_MAG_W_ZIEN(void *handle, LSM303AGR_MAG_ZIEN_t newValue);
00491 mems_status_t LSM303AGR_MAG_R_ZIEN(void *handle, LSM303AGR_MAG_ZIEN_t *value);
00492 
00493 /*******************************************************************************
00494 * Register      : INT_CTRL_REG
00495 * Address       : 0X63
00496 * Bit Group Name: YIEN
00497 * Permission    : RW
00498 *******************************************************************************/
00499 typedef enum {
00500     LSM303AGR_MAG_YIEN_DISABLED          =0x00,
00501     LSM303AGR_MAG_YIEN_ENABLED       =0x40,
00502 } LSM303AGR_MAG_YIEN_t;
00503 
00504 #define       LSM303AGR_MAG_YIEN_MASK     0x40
00505 mems_status_t LSM303AGR_MAG_W_YIEN(void *handle, LSM303AGR_MAG_YIEN_t newValue);
00506 mems_status_t LSM303AGR_MAG_R_YIEN(void *handle, LSM303AGR_MAG_YIEN_t *value);
00507 
00508 /*******************************************************************************
00509 * Register      : INT_CTRL_REG
00510 * Address       : 0X63
00511 * Bit Group Name: XIEN
00512 * Permission    : RW
00513 *******************************************************************************/
00514 typedef enum {
00515     LSM303AGR_MAG_XIEN_DISABLED          =0x00,
00516     LSM303AGR_MAG_XIEN_ENABLED       =0x80,
00517 } LSM303AGR_MAG_XIEN_t;
00518 
00519 #define       LSM303AGR_MAG_XIEN_MASK     0x80
00520 mems_status_t LSM303AGR_MAG_W_XIEN(void *handle, LSM303AGR_MAG_XIEN_t newValue);
00521 mems_status_t LSM303AGR_MAG_R_XIEN(void *handle, LSM303AGR_MAG_XIEN_t *value);
00522 
00523 /*******************************************************************************
00524 * Register      : INT_SOURCE_REG
00525 * Address       : 0X64
00526 * Bit Group Name: INT
00527 * Permission    : RO
00528 *******************************************************************************/
00529 typedef enum {
00530     LSM303AGR_MAG_INT_EV_OFF         =0x00,
00531     LSM303AGR_MAG_INT_EV_ON          =0x01,
00532 } LSM303AGR_MAG_INT_t;
00533 
00534 #define       LSM303AGR_MAG_INT_MASK      0x01
00535 mems_status_t LSM303AGR_MAG_R_INT(void *handle, LSM303AGR_MAG_INT_t *value);
00536 
00537 /*******************************************************************************
00538 * Register      : INT_SOURCE_REG
00539 * Address       : 0X64
00540 * Bit Group Name: MROI
00541 * Permission    : RO
00542 *******************************************************************************/
00543 typedef enum {
00544     LSM303AGR_MAG_MROI_EV_OFF        =0x00,
00545     LSM303AGR_MAG_MROI_EV_ON         =0x02,
00546 } LSM303AGR_MAG_MROI_t;
00547 
00548 #define       LSM303AGR_MAG_MROI_MASK     0x02
00549 mems_status_t LSM303AGR_MAG_R_MROI(void *handle, LSM303AGR_MAG_MROI_t *value);
00550 
00551 /*******************************************************************************
00552 * Register      : INT_SOURCE_REG
00553 * Address       : 0X64
00554 * Bit Group Name: N_TH_S_Z
00555 * Permission    : RO
00556 *******************************************************************************/
00557 typedef enum {
00558     LSM303AGR_MAG_N_TH_S_Z_EV_OFF        =0x00,
00559     LSM303AGR_MAG_N_TH_S_Z_EV_ON         =0x04,
00560 } LSM303AGR_MAG_N_TH_S_Z_t;
00561 
00562 #define       LSM303AGR_MAG_N_TH_S_Z_MASK     0x04
00563 mems_status_t LSM303AGR_MAG_R_N_TH_S_Z(void *handle, LSM303AGR_MAG_N_TH_S_Z_t *value);
00564 
00565 /*******************************************************************************
00566 * Register      : INT_SOURCE_REG
00567 * Address       : 0X64
00568 * Bit Group Name: N_TH_S_Y
00569 * Permission    : RO
00570 *******************************************************************************/
00571 typedef enum {
00572     LSM303AGR_MAG_N_TH_S_Y_EV_OFF        =0x00,
00573     LSM303AGR_MAG_N_TH_S_Y_EV_ON         =0x08,
00574 } LSM303AGR_MAG_N_TH_S_Y_t;
00575 
00576 #define       LSM303AGR_MAG_N_TH_S_Y_MASK     0x08
00577 mems_status_t LSM303AGR_MAG_R_N_TH_S_Y(void *handle, LSM303AGR_MAG_N_TH_S_Y_t *value);
00578 
00579 /*******************************************************************************
00580 * Register      : INT_SOURCE_REG
00581 * Address       : 0X64
00582 * Bit Group Name: N_TH_S_X
00583 * Permission    : RO
00584 *******************************************************************************/
00585 typedef enum {
00586     LSM303AGR_MAG_N_TH_S_X_EV_OFF        =0x00,
00587     LSM303AGR_MAG_N_TH_S_X_EV_ON         =0x10,
00588 } LSM303AGR_MAG_N_TH_S_X_t;
00589 
00590 #define       LSM303AGR_MAG_N_TH_S_X_MASK     0x10
00591 mems_status_t LSM303AGR_MAG_R_N_TH_S_X(void *handle, LSM303AGR_MAG_N_TH_S_X_t *value);
00592 
00593 /*******************************************************************************
00594 * Register      : INT_SOURCE_REG
00595 * Address       : 0X64
00596 * Bit Group Name: P_TH_S_Z
00597 * Permission    : RO
00598 *******************************************************************************/
00599 typedef enum {
00600     LSM303AGR_MAG_P_TH_S_Z_EV_OFF        =0x00,
00601     LSM303AGR_MAG_P_TH_S_Z_EV_ON         =0x20,
00602 } LSM303AGR_MAG_P_TH_S_Z_t;
00603 
00604 #define       LSM303AGR_MAG_P_TH_S_Z_MASK     0x20
00605 mems_status_t LSM303AGR_MAG_R_P_TH_S_Z(void *handle, LSM303AGR_MAG_P_TH_S_Z_t *value);
00606 
00607 /*******************************************************************************
00608 * Register      : INT_SOURCE_REG
00609 * Address       : 0X64
00610 * Bit Group Name: P_TH_S_Y
00611 * Permission    : RO
00612 *******************************************************************************/
00613 typedef enum {
00614     LSM303AGR_MAG_P_TH_S_Y_EV_OFF        =0x00,
00615     LSM303AGR_MAG_P_TH_S_Y_EV_ON         =0x40,
00616 } LSM303AGR_MAG_P_TH_S_Y_t;
00617 
00618 #define       LSM303AGR_MAG_P_TH_S_Y_MASK     0x40
00619 mems_status_t LSM303AGR_MAG_R_P_TH_S_Y(void *handle, LSM303AGR_MAG_P_TH_S_Y_t *value);
00620 
00621 /*******************************************************************************
00622 * Register      : INT_SOURCE_REG
00623 * Address       : 0X64
00624 * Bit Group Name: P_TH_S_X
00625 * Permission    : RO
00626 *******************************************************************************/
00627 typedef enum {
00628     LSM303AGR_MAG_P_TH_S_X_EV_OFF        =0x00,
00629     LSM303AGR_MAG_P_TH_S_X_EV_ON         =0x80,
00630 } LSM303AGR_MAG_P_TH_S_X_t;
00631 
00632 #define       LSM303AGR_MAG_P_TH_S_X_MASK     0x80
00633 mems_status_t LSM303AGR_MAG_R_P_TH_S_X(void *handle, LSM303AGR_MAG_P_TH_S_X_t *value);
00634 
00635 /*******************************************************************************
00636 * Register      : STATUS_REG
00637 * Address       : 0X67
00638 * Bit Group Name: XDA
00639 * Permission    : RO
00640 *******************************************************************************/
00641 typedef enum {
00642     LSM303AGR_MAG_XDA_EV_OFF         =0x00,
00643     LSM303AGR_MAG_XDA_EV_ON          =0x01,
00644 } LSM303AGR_MAG_XDA_t;
00645 
00646 #define       LSM303AGR_MAG_XDA_MASK      0x01
00647 mems_status_t LSM303AGR_MAG_R_XDA(void *handle, LSM303AGR_MAG_XDA_t *value);
00648 
00649 /*******************************************************************************
00650 * Register      : STATUS_REG
00651 * Address       : 0X67
00652 * Bit Group Name: YDA
00653 * Permission    : RO
00654 *******************************************************************************/
00655 typedef enum {
00656     LSM303AGR_MAG_YDA_EV_OFF         =0x00,
00657     LSM303AGR_MAG_YDA_EV_ON          =0x02,
00658 } LSM303AGR_MAG_YDA_t;
00659 
00660 #define       LSM303AGR_MAG_YDA_MASK      0x02
00661 mems_status_t LSM303AGR_MAG_R_YDA(void *handle, LSM303AGR_MAG_YDA_t *value);
00662 
00663 /*******************************************************************************
00664 * Register      : STATUS_REG
00665 * Address       : 0X67
00666 * Bit Group Name: ZDA
00667 * Permission    : RO
00668 *******************************************************************************/
00669 typedef enum {
00670     LSM303AGR_MAG_ZDA_EV_OFF         =0x00,
00671     LSM303AGR_MAG_ZDA_EV_ON          =0x04,
00672 } LSM303AGR_MAG_ZDA_t;
00673 
00674 #define       LSM303AGR_MAG_ZDA_MASK      0x04
00675 mems_status_t LSM303AGR_MAG_R_ZDA(void *handle, LSM303AGR_MAG_ZDA_t *value);
00676 
00677 /*******************************************************************************
00678 * Register      : STATUS_REG
00679 * Address       : 0X67
00680 * Bit Group Name: ZYXDA
00681 * Permission    : RO
00682 *******************************************************************************/
00683 typedef enum {
00684     LSM303AGR_MAG_ZYXDA_EV_OFF       =0x00,
00685     LSM303AGR_MAG_ZYXDA_EV_ON        =0x08,
00686 } LSM303AGR_MAG_ZYXDA_t;
00687 
00688 #define       LSM303AGR_MAG_ZYXDA_MASK    0x08
00689 mems_status_t LSM303AGR_MAG_R_ZYXDA(void *handle, LSM303AGR_MAG_ZYXDA_t *value);
00690 
00691 /*******************************************************************************
00692 * Register      : STATUS_REG
00693 * Address       : 0X67
00694 * Bit Group Name: XOR
00695 * Permission    : RO
00696 *******************************************************************************/
00697 typedef enum {
00698     LSM303AGR_MAG_XOR_EV_OFF         =0x00,
00699     LSM303AGR_MAG_XOR_EV_ON          =0x10,
00700 } LSM303AGR_MAG_XOR_t;
00701 
00702 #define       LSM303AGR_MAG_XOR_MASK      0x10
00703 mems_status_t LSM303AGR_MAG_R_XOR(void *handle, LSM303AGR_MAG_XOR_t *value);
00704 
00705 /*******************************************************************************
00706 * Register      : STATUS_REG
00707 * Address       : 0X67
00708 * Bit Group Name: YOR
00709 * Permission    : RO
00710 *******************************************************************************/
00711 typedef enum {
00712     LSM303AGR_MAG_YOR_EV_OFF         =0x00,
00713     LSM303AGR_MAG_YOR_EV_ON          =0x20,
00714 } LSM303AGR_MAG_YOR_t;
00715 
00716 #define       LSM303AGR_MAG_YOR_MASK      0x20
00717 mems_status_t LSM303AGR_MAG_R_YOR(void *handle, LSM303AGR_MAG_YOR_t *value);
00718 
00719 /*******************************************************************************
00720 * Register      : STATUS_REG
00721 * Address       : 0X67
00722 * Bit Group Name: ZOR
00723 * Permission    : RO
00724 *******************************************************************************/
00725 typedef enum {
00726     LSM303AGR_MAG_ZOR_EV_OFF         =0x00,
00727     LSM303AGR_MAG_ZOR_EV_ON          =0x40,
00728 } LSM303AGR_MAG_ZOR_t;
00729 
00730 #define       LSM303AGR_MAG_ZOR_MASK      0x40
00731 mems_status_t LSM303AGR_MAG_R_ZOR(void *handle, LSM303AGR_MAG_ZOR_t *value);
00732 
00733 /*******************************************************************************
00734 * Register      : STATUS_REG
00735 * Address       : 0X67
00736 * Bit Group Name: ZYXOR
00737 * Permission    : RO
00738 *******************************************************************************/
00739 typedef enum {
00740     LSM303AGR_MAG_ZYXOR_EV_OFF       =0x00,
00741     LSM303AGR_MAG_ZYXOR_EV_ON        =0x80,
00742 } LSM303AGR_MAG_ZYXOR_t;
00743 
00744 #define       LSM303AGR_MAG_ZYXOR_MASK    0x80
00745 mems_status_t LSM303AGR_MAG_R_ZYXOR(void *handle, LSM303AGR_MAG_ZYXOR_t *value);
00746 /*******************************************************************************
00747 * Register      : <REGISTER_L> - <REGISTER_H>
00748 * Output Type   : Magnetic
00749 * Permission    : ro 
00750 *******************************************************************************/
00751 mems_status_t LSM303AGR_MAG_Get_Raw_Magnetic(void *handle, u8_t *buff);
00752 mems_status_t LSM303AGR_MAG_Get_Magnetic(void *handle, int *buff);
00753 
00754 /*******************************************************************************
00755 * Register      : <REGISTER_L> - <REGISTER_H>
00756 * Output Type   : IntThreshld
00757 * Permission    : rw 
00758 *******************************************************************************/
00759 mems_status_t LSM303AGR_MAG_Get_IntThreshld(void *handle, u8_t *buff); 
00760 mems_status_t LSM303AGR_MAG_Set_IntThreshld(void *handle, u8_t *buff);
00761 
00762 #ifdef __cplusplus
00763 }
00764 #endif
00765 
00766 #endif