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

Committer:
nikapov
Date:
Mon Sep 04 16:08:24 2017 +0000
Revision:
0:ec6e59cc6f40
Child:
1:86d530a7f949
First version.

Who changed what in which revision?

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