WizziLab / X_NUCLEO_IKS01A1

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   D7A_1x_TRAINING D7_MLX_AND_BAT D7A_1x_demo_sensors_v3

Fork of X_NUCLEO_IKS01A1 by ST

Committer:
Jeej
Date:
Wed Feb 08 15:51:15 2017 +0000
Revision:
97:de5a5c00299a
Parent:
96:8cac3f3245b5
Child:
98:c25158bbedd5
LSM303C driver completed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 96:8cac3f3245b5 1 /**
Jeej 96:8cac3f3245b5 2 ******************************************************************************
Jeej 96:8cac3f3245b5 3 * @file LSM303C_MAG_Sensor.cpp
Jeej 96:8cac3f3245b5 4 * @author CLab
Jeej 96:8cac3f3245b5 5 * @version V1.0.0
Jeej 96:8cac3f3245b5 6 * @date 5 August 2016
Jeej 96:8cac3f3245b5 7 * @brief Implementation an LSM303C magnetometer sensor.
Jeej 96:8cac3f3245b5 8 ******************************************************************************
Jeej 96:8cac3f3245b5 9 * @attention
Jeej 96:8cac3f3245b5 10 *
Jeej 96:8cac3f3245b5 11 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
Jeej 96:8cac3f3245b5 12 *
Jeej 96:8cac3f3245b5 13 * Redistribution and use in source and binary forms, with or without modification,
Jeej 96:8cac3f3245b5 14 * are permitted provided that the following conditions are met:
Jeej 96:8cac3f3245b5 15 * 1. Redistributions of source code must retain the above copyright notice,
Jeej 96:8cac3f3245b5 16 * this list of conditions and the following disclaimer.
Jeej 96:8cac3f3245b5 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
Jeej 96:8cac3f3245b5 18 * this list of conditions and the following disclaimer in the documentation
Jeej 96:8cac3f3245b5 19 * and/or other materials provided with the distribution.
Jeej 96:8cac3f3245b5 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Jeej 96:8cac3f3245b5 21 * may be used to endorse or promote products derived from this software
Jeej 96:8cac3f3245b5 22 * without specific prior written permission.
Jeej 96:8cac3f3245b5 23 *
Jeej 96:8cac3f3245b5 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Jeej 96:8cac3f3245b5 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Jeej 96:8cac3f3245b5 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Jeej 96:8cac3f3245b5 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Jeej 96:8cac3f3245b5 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Jeej 96:8cac3f3245b5 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Jeej 96:8cac3f3245b5 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Jeej 96:8cac3f3245b5 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Jeej 96:8cac3f3245b5 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Jeej 96:8cac3f3245b5 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Jeej 96:8cac3f3245b5 34 *
Jeej 96:8cac3f3245b5 35 ******************************************************************************
Jeej 96:8cac3f3245b5 36 */
Jeej 96:8cac3f3245b5 37
Jeej 96:8cac3f3245b5 38
Jeej 96:8cac3f3245b5 39 /* Includes ------------------------------------------------------------------*/
Jeej 96:8cac3f3245b5 40
Jeej 96:8cac3f3245b5 41 #include "mbed.h"
Jeej 96:8cac3f3245b5 42 #include "DevI2C.h"
Jeej 96:8cac3f3245b5 43 #include "LSM303C_MAG_Sensor.h"
Jeej 96:8cac3f3245b5 44 #include "LSM303C_MAG_driver.h"
Jeej 96:8cac3f3245b5 45
Jeej 96:8cac3f3245b5 46
Jeej 96:8cac3f3245b5 47 /* Class Implementation ------------------------------------------------------*/
Jeej 96:8cac3f3245b5 48
Jeej 96:8cac3f3245b5 49 /** Constructor
Jeej 96:8cac3f3245b5 50 * @param i2c object of an helper class which handles the I2C peripheral
Jeej 96:8cac3f3245b5 51 * @param address the address of the component's instance
Jeej 96:8cac3f3245b5 52 */
Jeej 96:8cac3f3245b5 53 LSM303C_MAG_Sensor::LSM303C_MAG_Sensor(DevI2C &i2c) : dev_i2c(i2c)
Jeej 96:8cac3f3245b5 54 {
Jeej 96:8cac3f3245b5 55 address = LSM303C_MAG_I2C_ADDRESS;
Jeej 96:8cac3f3245b5 56 };
Jeej 96:8cac3f3245b5 57
Jeej 96:8cac3f3245b5 58 /** Constructor
Jeej 96:8cac3f3245b5 59 * @param i2c object of an helper class which handles the I2C peripheral
Jeej 96:8cac3f3245b5 60 * @param address the address of the component's instance
Jeej 96:8cac3f3245b5 61 */
Jeej 96:8cac3f3245b5 62 LSM303C_MAG_Sensor::LSM303C_MAG_Sensor(DevI2C &i2c, uint8_t address) : dev_i2c(i2c), address(address)
Jeej 96:8cac3f3245b5 63 {
Jeej 96:8cac3f3245b5 64
Jeej 96:8cac3f3245b5 65 };
Jeej 96:8cac3f3245b5 66
Jeej 96:8cac3f3245b5 67 /**
Jeej 96:8cac3f3245b5 68 * @brief Initializing the component.
Jeej 96:8cac3f3245b5 69 * @param[in] init pointer to device specific initalization structure.
Jeej 96:8cac3f3245b5 70 * @retval "0" in case of success, an error code otherwise.
Jeej 96:8cac3f3245b5 71 */
Jeej 96:8cac3f3245b5 72 int LSM303C_MAG_Sensor::Init(void *init)
Jeej 96:8cac3f3245b5 73 {
Jeej 96:8cac3f3245b5 74 /* Operating mode selection - power down */
Jeej 96:8cac3f3245b5 75 if ( LSM303C_MAG_W_MD( (void *)this, LSM303C_MAG_MD_IDLE1_MODE ) == MEMS_ERROR )
Jeej 96:8cac3f3245b5 76 {
Jeej 96:8cac3f3245b5 77 return 1;
Jeej 96:8cac3f3245b5 78 }
Jeej 96:8cac3f3245b5 79
Jeej 96:8cac3f3245b5 80 /* Enable BDU */
Jeej 96:8cac3f3245b5 81 if ( LSM303C_MAG_W_BDU( (void *)this, LSM303C_MAG_BDU_ENABLED ) == MEMS_ERROR )
Jeej 96:8cac3f3245b5 82 {
Jeej 96:8cac3f3245b5 83 return 1;
Jeej 96:8cac3f3245b5 84 }
Jeej 96:8cac3f3245b5 85
Jeej 97:de5a5c00299a 86 if ( Set_M_ODR( 80.0f ) == 1 )
Jeej 96:8cac3f3245b5 87 {
Jeej 96:8cac3f3245b5 88 return 1;
Jeej 96:8cac3f3245b5 89 }
Jeej 96:8cac3f3245b5 90
Jeej 97:de5a5c00299a 91 if ( Set_M_FS( 16.0f ) == 1 )
Jeej 96:8cac3f3245b5 92 {
Jeej 96:8cac3f3245b5 93 return 1;
Jeej 96:8cac3f3245b5 94 }
Jeej 96:8cac3f3245b5 95
Jeej 96:8cac3f3245b5 96 if ( LSM303C_MAG_W_ST( (void *)this, LSM303C_MAG_ST_DISABLED ) == MEMS_ERROR )
Jeej 96:8cac3f3245b5 97 {
Jeej 96:8cac3f3245b5 98 return 1;
Jeej 96:8cac3f3245b5 99 }
Jeej 96:8cac3f3245b5 100
Jeej 96:8cac3f3245b5 101 return 0;
Jeej 96:8cac3f3245b5 102 }
Jeej 96:8cac3f3245b5 103
Jeej 96:8cac3f3245b5 104 /**
Jeej 96:8cac3f3245b5 105 * @brief Enable LSM303C magnetometer
Jeej 96:8cac3f3245b5 106 * @retval 0 in case of success, an error code otherwise
Jeej 96:8cac3f3245b5 107 */
Jeej 96:8cac3f3245b5 108 int LSM303C_MAG_Sensor::Enable(void)
Jeej 96:8cac3f3245b5 109 {
Jeej 96:8cac3f3245b5 110 /* Operating mode selection */
Jeej 96:8cac3f3245b5 111 if ( LSM303C_MAG_W_MD( (void *)this, LSM303C_MAG_MD_CONTINUOS_MODE ) == MEMS_ERROR )
Jeej 96:8cac3f3245b5 112 {
Jeej 96:8cac3f3245b5 113 return 1;
Jeej 96:8cac3f3245b5 114 }
Jeej 96:8cac3f3245b5 115
Jeej 96:8cac3f3245b5 116 return 0;
Jeej 96:8cac3f3245b5 117 }
Jeej 96:8cac3f3245b5 118
Jeej 96:8cac3f3245b5 119 /**
Jeej 96:8cac3f3245b5 120 * @brief Disable LSM303C magnetometer
Jeej 96:8cac3f3245b5 121 * @retval 0 in case of success, an error code otherwise
Jeej 96:8cac3f3245b5 122 */
Jeej 96:8cac3f3245b5 123 int LSM303C_MAG_Sensor::Disable(void)
Jeej 96:8cac3f3245b5 124 {
Jeej 96:8cac3f3245b5 125 /* Operating mode selection - power down */
Jeej 96:8cac3f3245b5 126 if ( LSM303C_MAG_W_MD( (void *)this, LSM303C_MAG_MD_IDLE1_MODE ) == MEMS_ERROR )
Jeej 96:8cac3f3245b5 127 {
Jeej 96:8cac3f3245b5 128 return 1;
Jeej 96:8cac3f3245b5 129 }
Jeej 96:8cac3f3245b5 130
Jeej 96:8cac3f3245b5 131 return 0;
Jeej 96:8cac3f3245b5 132 }
Jeej 96:8cac3f3245b5 133
Jeej 96:8cac3f3245b5 134 /**
Jeej 96:8cac3f3245b5 135 * @brief Read ID of LSM303C Magnetometer
Jeej 96:8cac3f3245b5 136 * @param p_id the pointer where the ID of the device is stored
Jeej 96:8cac3f3245b5 137 * @retval 0 in case of success, an error code otherwise
Jeej 96:8cac3f3245b5 138 */
Jeej 96:8cac3f3245b5 139 int LSM303C_MAG_Sensor::ReadID(uint8_t *id)
Jeej 96:8cac3f3245b5 140 {
Jeej 96:8cac3f3245b5 141 if(!id)
Jeej 96:8cac3f3245b5 142 {
Jeej 96:8cac3f3245b5 143 return 1;
Jeej 96:8cac3f3245b5 144 }
Jeej 96:8cac3f3245b5 145
Jeej 96:8cac3f3245b5 146 /* Read WHO AM I register */
Jeej 96:8cac3f3245b5 147 if ( LSM303C_MAG_R_WHO_AM_I( (void *)this, id ) == MEMS_ERROR )
Jeej 96:8cac3f3245b5 148 {
Jeej 96:8cac3f3245b5 149 return 1;
Jeej 96:8cac3f3245b5 150 }
Jeej 96:8cac3f3245b5 151
Jeej 96:8cac3f3245b5 152 return 0;
Jeej 96:8cac3f3245b5 153 }
Jeej 96:8cac3f3245b5 154
Jeej 96:8cac3f3245b5 155 /**
Jeej 96:8cac3f3245b5 156 * @brief Read data from LSM303C Magnetometer
Jeej 96:8cac3f3245b5 157 * @param pData the pointer where the magnetometer data are stored
Jeej 96:8cac3f3245b5 158 * @retval 0 in case of success, an error code otherwise
Jeej 96:8cac3f3245b5 159 */
Jeej 96:8cac3f3245b5 160 int LSM303C_MAG_Sensor::Get_M_Axes(int32_t *pData)
Jeej 96:8cac3f3245b5 161 {
Jeej 96:8cac3f3245b5 162 int16_t pDataRaw[3];
Jeej 96:8cac3f3245b5 163 float sensitivity = 0;
Jeej 96:8cac3f3245b5 164
Jeej 96:8cac3f3245b5 165 /* Read raw data from LSM303C output register. */
Jeej 96:8cac3f3245b5 166 if ( Get_M_AxesRaw( pDataRaw ) == 1 )
Jeej 96:8cac3f3245b5 167 {
Jeej 96:8cac3f3245b5 168 return 1;
Jeej 96:8cac3f3245b5 169 }
Jeej 96:8cac3f3245b5 170
Jeej 96:8cac3f3245b5 171 /* Get LSM303C actual sensitivity. */
Jeej 96:8cac3f3245b5 172 if ( Get_M_Sensitivity( &sensitivity ) == 1 )
Jeej 96:8cac3f3245b5 173 {
Jeej 96:8cac3f3245b5 174 return 1;
Jeej 96:8cac3f3245b5 175 }
Jeej 96:8cac3f3245b5 176
Jeej 96:8cac3f3245b5 177 /* Calculate the data. */
Jeej 96:8cac3f3245b5 178 pData[0] = ( int32_t )( pDataRaw[0] * sensitivity );
Jeej 96:8cac3f3245b5 179 pData[1] = ( int32_t )( pDataRaw[1] * sensitivity );
Jeej 96:8cac3f3245b5 180 pData[2] = ( int32_t )( pDataRaw[2] * sensitivity );
Jeej 96:8cac3f3245b5 181
Jeej 96:8cac3f3245b5 182 return 0;
Jeej 96:8cac3f3245b5 183 }
Jeej 96:8cac3f3245b5 184
Jeej 96:8cac3f3245b5 185 /**
Jeej 96:8cac3f3245b5 186 * @brief Read Magnetometer Sensitivity
Jeej 96:8cac3f3245b5 187 * @param pfData the pointer where the magnetometer sensitivity is stored
Jeej 96:8cac3f3245b5 188 * @retval 0 in case of success, an error code otherwise
Jeej 96:8cac3f3245b5 189 */
Jeej 96:8cac3f3245b5 190 int LSM303C_MAG_Sensor::Get_M_Sensitivity(float *pfData)
Jeej 96:8cac3f3245b5 191 {
Jeej 96:8cac3f3245b5 192 *pfData = 1.5f;
Jeej 96:8cac3f3245b5 193
Jeej 96:8cac3f3245b5 194 return 0;
Jeej 96:8cac3f3245b5 195 }
Jeej 96:8cac3f3245b5 196
Jeej 96:8cac3f3245b5 197 /**
Jeej 96:8cac3f3245b5 198 * @brief Read raw data from LSM303C Magnetometer
Jeej 96:8cac3f3245b5 199 * @param pData the pointer where the magnetomer raw data are stored
Jeej 96:8cac3f3245b5 200 * @retval 0 in case of success, an error code otherwise
Jeej 96:8cac3f3245b5 201 */
Jeej 96:8cac3f3245b5 202 int LSM303C_MAG_Sensor::Get_M_AxesRaw(int16_t *pData)
Jeej 96:8cac3f3245b5 203 {
Jeej 96:8cac3f3245b5 204 uint8_t regValue[6] = {0, 0, 0, 0, 0, 0};
Jeej 96:8cac3f3245b5 205 int16_t *regValueInt16;
Jeej 96:8cac3f3245b5 206
Jeej 96:8cac3f3245b5 207 /* Read output registers from LSM303C_MAG_OUTX_L to LSM303C_MAG_OUTZ_H. */
Jeej 96:8cac3f3245b5 208 if ( LSM303C_MAG_Get_Raw_Magnetic( (void *)this, regValue ) == MEMS_ERROR )
Jeej 96:8cac3f3245b5 209 {
Jeej 96:8cac3f3245b5 210 return 1;
Jeej 96:8cac3f3245b5 211 }
Jeej 96:8cac3f3245b5 212
Jeej 96:8cac3f3245b5 213 regValueInt16 = (int16_t *)regValue;
Jeej 96:8cac3f3245b5 214
Jeej 96:8cac3f3245b5 215 /* Format the data. */
Jeej 96:8cac3f3245b5 216 pData[0] = regValueInt16[0];
Jeej 96:8cac3f3245b5 217 pData[1] = regValueInt16[1];
Jeej 96:8cac3f3245b5 218 pData[2] = regValueInt16[2];
Jeej 96:8cac3f3245b5 219
Jeej 96:8cac3f3245b5 220 return 0;
Jeej 96:8cac3f3245b5 221 }
Jeej 96:8cac3f3245b5 222
Jeej 96:8cac3f3245b5 223 /**
Jeej 96:8cac3f3245b5 224 * @brief Read LSM303C Magnetometer output data rate
Jeej 96:8cac3f3245b5 225 * @param odr the pointer to the output data rate
Jeej 96:8cac3f3245b5 226 * @retval 0 in case of success, an error code otherwise
Jeej 96:8cac3f3245b5 227 */
Jeej 96:8cac3f3245b5 228 int LSM303C_MAG_Sensor::Get_M_ODR(float* odr)
Jeej 96:8cac3f3245b5 229 {
Jeej 96:8cac3f3245b5 230 LSM303C_MAG_ODR_t odr_low_level;
Jeej 96:8cac3f3245b5 231
Jeej 96:8cac3f3245b5 232 if ( LSM303C_MAG_R_ODR( (void *)this, &odr_low_level ) == MEMS_ERROR )
Jeej 96:8cac3f3245b5 233 {
Jeej 96:8cac3f3245b5 234 return 1;
Jeej 96:8cac3f3245b5 235 }
Jeej 96:8cac3f3245b5 236
Jeej 96:8cac3f3245b5 237 switch( odr_low_level )
Jeej 96:8cac3f3245b5 238 {
Jeej 96:8cac3f3245b5 239 case LSM303C_MAG_ODR_0_625Hz:
Jeej 96:8cac3f3245b5 240 *odr = 0.625f;
Jeej 96:8cac3f3245b5 241 break;
Jeej 96:8cac3f3245b5 242 case LSM303C_MAG_ODR_1_25Hz:
Jeej 96:8cac3f3245b5 243 *odr = 1.250f;
Jeej 96:8cac3f3245b5 244 break;
Jeej 96:8cac3f3245b5 245 case LSM303C_MAG_ODR_2_5Hz:
Jeej 96:8cac3f3245b5 246 *odr = 2.500f;
Jeej 96:8cac3f3245b5 247 break;
Jeej 96:8cac3f3245b5 248 case LSM303C_MAG_ODR_5Hz:
Jeej 96:8cac3f3245b5 249 *odr = 5.000f;
Jeej 96:8cac3f3245b5 250 break;
Jeej 96:8cac3f3245b5 251 case LSM303C_MAG_ODR_10Hz:
Jeej 96:8cac3f3245b5 252 *odr = 10.000f;
Jeej 96:8cac3f3245b5 253 break;
Jeej 96:8cac3f3245b5 254 case LSM303C_MAG_ODR_20Hz:
Jeej 96:8cac3f3245b5 255 *odr = 20.000f;
Jeej 96:8cac3f3245b5 256 break;
Jeej 96:8cac3f3245b5 257 case LSM303C_MAG_ODR_40Hz:
Jeej 96:8cac3f3245b5 258 *odr = 40.000f;
Jeej 96:8cac3f3245b5 259 break;
Jeej 96:8cac3f3245b5 260 case LSM303C_MAG_ODR_80Hz:
Jeej 96:8cac3f3245b5 261 *odr = 80.000f;
Jeej 96:8cac3f3245b5 262 break;
Jeej 96:8cac3f3245b5 263
Jeej 96:8cac3f3245b5 264 default:
Jeej 96:8cac3f3245b5 265 *odr = -1.000f;
Jeej 96:8cac3f3245b5 266 return 1;
Jeej 96:8cac3f3245b5 267 }
Jeej 96:8cac3f3245b5 268 return 0;
Jeej 96:8cac3f3245b5 269 }
Jeej 96:8cac3f3245b5 270
Jeej 96:8cac3f3245b5 271 /**
Jeej 96:8cac3f3245b5 272 * @brief Set ODR
Jeej 96:8cac3f3245b5 273 * @param odr the output data rate to be set
Jeej 96:8cac3f3245b5 274 * @retval 0 in case of success, an error code otherwise
Jeej 96:8cac3f3245b5 275 */
Jeej 96:8cac3f3245b5 276 int LSM303C_MAG_Sensor::Set_M_ODR(float odr)
Jeej 96:8cac3f3245b5 277 {
Jeej 96:8cac3f3245b5 278 LSM303C_MAG_ODR_t new_odr;
Jeej 96:8cac3f3245b5 279
Jeej 96:8cac3f3245b5 280 new_odr = ( odr <= 0.625f ) ? LSM303C_MAG_ODR_0_625Hz
Jeej 96:8cac3f3245b5 281 : ( odr <= 1.250f ) ? LSM303C_MAG_ODR_1_25Hz
Jeej 96:8cac3f3245b5 282 : ( odr <= 2.500f ) ? LSM303C_MAG_ODR_2_5Hz
Jeej 96:8cac3f3245b5 283 : ( odr <= 5.000f ) ? LSM303C_MAG_ODR_5Hz
Jeej 96:8cac3f3245b5 284 : ( odr <= 10.000f ) ? LSM303C_MAG_ODR_10Hz
Jeej 96:8cac3f3245b5 285 : ( odr <= 20.000f ) ? LSM303C_MAG_ODR_20Hz
Jeej 96:8cac3f3245b5 286 : ( odr <= 40.000f ) ? LSM303C_MAG_ODR_40Hz
Jeej 96:8cac3f3245b5 287 : LSM303C_MAG_ODR_80Hz;
Jeej 96:8cac3f3245b5 288
Jeej 96:8cac3f3245b5 289 if ( LSM303C_MAG_W_ODR( (void *)this, new_odr ) == MEMS_ERROR )
Jeej 96:8cac3f3245b5 290 {
Jeej 96:8cac3f3245b5 291 return 1;
Jeej 96:8cac3f3245b5 292 }
Jeej 96:8cac3f3245b5 293
Jeej 96:8cac3f3245b5 294 return 0;
Jeej 96:8cac3f3245b5 295 }
Jeej 96:8cac3f3245b5 296
Jeej 96:8cac3f3245b5 297
Jeej 96:8cac3f3245b5 298 /**
Jeej 96:8cac3f3245b5 299 * @brief Read LSM303C Magnetometer full scale
Jeej 96:8cac3f3245b5 300 * @param fullScale the pointer to the output data rate
Jeej 96:8cac3f3245b5 301 * @retval 0 in case of success, an error code otherwise
Jeej 96:8cac3f3245b5 302 */
Jeej 96:8cac3f3245b5 303 int LSM303C_MAG_Sensor::Get_M_FS(float* fullScale)
Jeej 96:8cac3f3245b5 304 {
Jeej 97:de5a5c00299a 305 *fullScale = 16.0f;
Jeej 96:8cac3f3245b5 306
Jeej 96:8cac3f3245b5 307 return 0;
Jeej 96:8cac3f3245b5 308 }
Jeej 96:8cac3f3245b5 309
Jeej 96:8cac3f3245b5 310 /**
Jeej 96:8cac3f3245b5 311 * @brief Set full scale
Jeej 96:8cac3f3245b5 312 * @param fullScale the full scale to be set
Jeej 96:8cac3f3245b5 313 * @retval 0 in case of success, an error code otherwise
Jeej 96:8cac3f3245b5 314 */
Jeej 96:8cac3f3245b5 315 int LSM303C_MAG_Sensor::Set_M_FS(float fullScale)
Jeej 96:8cac3f3245b5 316 {
Jeej 96:8cac3f3245b5 317 return 0;
Jeej 96:8cac3f3245b5 318 }
Jeej 96:8cac3f3245b5 319
Jeej 96:8cac3f3245b5 320
Jeej 96:8cac3f3245b5 321 /**
Jeej 96:8cac3f3245b5 322 * @brief Read magnetometer data from register
Jeej 96:8cac3f3245b5 323 * @param reg register address
Jeej 96:8cac3f3245b5 324 * @param data register data
Jeej 96:8cac3f3245b5 325 * @retval 0 in case of success
Jeej 96:8cac3f3245b5 326 * @retval 1 in case of failure
Jeej 96:8cac3f3245b5 327 */
Jeej 96:8cac3f3245b5 328 int LSM303C_MAG_Sensor::ReadReg( uint8_t reg, uint8_t *data )
Jeej 96:8cac3f3245b5 329 {
Jeej 96:8cac3f3245b5 330 if ( LSM303C_MAG_ReadReg( (void *)this, reg, data ) == MEMS_ERROR )
Jeej 96:8cac3f3245b5 331 {
Jeej 96:8cac3f3245b5 332 return 1;
Jeej 96:8cac3f3245b5 333 }
Jeej 96:8cac3f3245b5 334
Jeej 96:8cac3f3245b5 335 return 0;
Jeej 96:8cac3f3245b5 336 }
Jeej 96:8cac3f3245b5 337
Jeej 96:8cac3f3245b5 338
Jeej 96:8cac3f3245b5 339 /**
Jeej 96:8cac3f3245b5 340 * @brief Write magnetometer data to register
Jeej 96:8cac3f3245b5 341 * @param reg register address
Jeej 96:8cac3f3245b5 342 * @param data register data
Jeej 96:8cac3f3245b5 343 * @retval 0 in case of success
Jeej 96:8cac3f3245b5 344 * @retval 1 in case of failure
Jeej 96:8cac3f3245b5 345 */
Jeej 96:8cac3f3245b5 346 int LSM303C_MAG_Sensor::WriteReg( uint8_t reg, uint8_t data )
Jeej 96:8cac3f3245b5 347 {
Jeej 96:8cac3f3245b5 348 if ( LSM303C_MAG_WriteReg( (void *)this, reg, data ) == MEMS_ERROR )
Jeej 96:8cac3f3245b5 349 {
Jeej 96:8cac3f3245b5 350 return 1;
Jeej 96:8cac3f3245b5 351 }
Jeej 96:8cac3f3245b5 352
Jeej 96:8cac3f3245b5 353 return 0;
Jeej 96:8cac3f3245b5 354 }
Jeej 96:8cac3f3245b5 355
Jeej 96:8cac3f3245b5 356 uint8_t LSM303C_MAG_IO_Write( void *handle, uint8_t WriteAddr, uint8_t *pBuffer, uint16_t nBytesToWrite )
Jeej 96:8cac3f3245b5 357 {
Jeej 96:8cac3f3245b5 358 return ((LSM303C_MAG_Sensor *)handle)->IO_Write(pBuffer, WriteAddr, nBytesToWrite);
Jeej 96:8cac3f3245b5 359 }
Jeej 96:8cac3f3245b5 360
Jeej 96:8cac3f3245b5 361 uint8_t LSM303C_MAG_IO_Read( void *handle, uint8_t ReadAddr, uint8_t *pBuffer, uint16_t nBytesToRead )
Jeej 96:8cac3f3245b5 362 {
Jeej 96:8cac3f3245b5 363 return ((LSM303C_MAG_Sensor *)handle)->IO_Read(pBuffer, ReadAddr, nBytesToRead);
Jeej 96:8cac3f3245b5 364 }