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:
mapellil
Date:
Wed Sep 27 16:49:51 2017 +0200
Revision:
1:86d530a7f949
Parent:
0:ec6e59cc6f40
Child:
2:e37be5550633
Fixed NonCopyable

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 */
mapellil 1:86d530a7f949 50 LSM303AGRMagSensor::LSM303AGRMagSensor(DevI2C *i2c, uint8_t address, PinName intmag_pin) :
mapellil 1:86d530a7f949 51 _dev_i2c(i2c), _address(address), _cs_pin(NC), _intmag_pin(intmag_pin)
nikapov 0:ec6e59cc6f40 52 {
mapellil 1:86d530a7f949 53 assert (i2c);
nikapov 0:ec6e59cc6f40 54 };
nikapov 0:ec6e59cc6f40 55
nikapov 0:ec6e59cc6f40 56 /**
nikapov 0:ec6e59cc6f40 57 * @brief Initializing the component.
nikapov 0:ec6e59cc6f40 58 * @param[in] init pointer to device specific initalization structure.
nikapov 0:ec6e59cc6f40 59 * @retval "0" in case of success, an error code otherwise.
nikapov 0:ec6e59cc6f40 60 */
nikapov 0:ec6e59cc6f40 61 int LSM303AGRMagSensor::init(void *init)
nikapov 0:ec6e59cc6f40 62 {
nikapov 0:ec6e59cc6f40 63 /* Operating mode selection - power down */
nikapov 0:ec6e59cc6f40 64 if ( LSM303AGR_MAG_W_MD( (void *)this, LSM303AGR_MAG_MD_IDLE1_MODE ) == MEMS_ERROR )
nikapov 0:ec6e59cc6f40 65 {
nikapov 0:ec6e59cc6f40 66 return 1;
nikapov 0:ec6e59cc6f40 67 }
nikapov 0:ec6e59cc6f40 68
nikapov 0:ec6e59cc6f40 69 /* Enable BDU */
nikapov 0:ec6e59cc6f40 70 if ( LSM303AGR_MAG_W_BDU( (void *)this, LSM303AGR_MAG_BDU_ENABLED ) == MEMS_ERROR )
nikapov 0:ec6e59cc6f40 71 {
nikapov 0:ec6e59cc6f40 72 return 1;
nikapov 0:ec6e59cc6f40 73 }
nikapov 0:ec6e59cc6f40 74
nikapov 0:ec6e59cc6f40 75 if ( set_m_odr( 100.0f ) == 1 )
nikapov 0:ec6e59cc6f40 76 {
nikapov 0:ec6e59cc6f40 77 return 1;
nikapov 0:ec6e59cc6f40 78 }
nikapov 0:ec6e59cc6f40 79
nikapov 0:ec6e59cc6f40 80 if ( set_m_fs( 50.0f ) == 1 )
nikapov 0:ec6e59cc6f40 81 {
nikapov 0:ec6e59cc6f40 82 return 1;
nikapov 0:ec6e59cc6f40 83 }
nikapov 0:ec6e59cc6f40 84
nikapov 0:ec6e59cc6f40 85 if ( LSM303AGR_MAG_W_ST( (void *)this, LSM303AGR_MAG_ST_DISABLED ) == MEMS_ERROR )
nikapov 0:ec6e59cc6f40 86 {
nikapov 0:ec6e59cc6f40 87 return 1;
nikapov 0:ec6e59cc6f40 88 }
nikapov 0:ec6e59cc6f40 89
nikapov 0:ec6e59cc6f40 90 return 0;
nikapov 0:ec6e59cc6f40 91 }
nikapov 0:ec6e59cc6f40 92
nikapov 0:ec6e59cc6f40 93 /**
nikapov 0:ec6e59cc6f40 94 * @brief Enable LSM303AGR magnetometer
nikapov 0:ec6e59cc6f40 95 * @retval 0 in case of success, an error code otherwise
nikapov 0:ec6e59cc6f40 96 */
nikapov 0:ec6e59cc6f40 97 int LSM303AGRMagSensor::enable(void)
nikapov 0:ec6e59cc6f40 98 {
nikapov 0:ec6e59cc6f40 99 /* Operating mode selection */
nikapov 0:ec6e59cc6f40 100 if ( LSM303AGR_MAG_W_MD( (void *)this, LSM303AGR_MAG_MD_CONTINUOS_MODE ) == MEMS_ERROR )
nikapov 0:ec6e59cc6f40 101 {
nikapov 0:ec6e59cc6f40 102 return 1;
nikapov 0:ec6e59cc6f40 103 }
nikapov 0:ec6e59cc6f40 104
nikapov 0:ec6e59cc6f40 105 return 0;
nikapov 0:ec6e59cc6f40 106 }
nikapov 0:ec6e59cc6f40 107
nikapov 0:ec6e59cc6f40 108 /**
nikapov 0:ec6e59cc6f40 109 * @brief Disable LSM303AGR magnetometer
nikapov 0:ec6e59cc6f40 110 * @retval 0 in case of success, an error code otherwise
nikapov 0:ec6e59cc6f40 111 */
nikapov 0:ec6e59cc6f40 112 int LSM303AGRMagSensor::disable(void)
nikapov 0:ec6e59cc6f40 113 {
nikapov 0:ec6e59cc6f40 114 /* Operating mode selection - power down */
nikapov 0:ec6e59cc6f40 115 if ( LSM303AGR_MAG_W_MD( (void *)this, LSM303AGR_MAG_MD_IDLE1_MODE ) == MEMS_ERROR )
nikapov 0:ec6e59cc6f40 116 {
nikapov 0:ec6e59cc6f40 117 return 1;
nikapov 0:ec6e59cc6f40 118 }
nikapov 0:ec6e59cc6f40 119
nikapov 0:ec6e59cc6f40 120 return 0;
nikapov 0:ec6e59cc6f40 121 }
nikapov 0:ec6e59cc6f40 122
nikapov 0:ec6e59cc6f40 123 /**
nikapov 0:ec6e59cc6f40 124 * @brief Read ID of LSM303AGR Magnetometer
nikapov 0:ec6e59cc6f40 125 * @param p_id the pointer where the ID of the device is stored
nikapov 0:ec6e59cc6f40 126 * @retval 0 in case of success, an error code otherwise
nikapov 0:ec6e59cc6f40 127 */
nikapov 0:ec6e59cc6f40 128 int LSM303AGRMagSensor::read_id(uint8_t *id)
nikapov 0:ec6e59cc6f40 129 {
nikapov 0:ec6e59cc6f40 130 if(!id)
nikapov 0:ec6e59cc6f40 131 {
nikapov 0:ec6e59cc6f40 132 return 1;
nikapov 0:ec6e59cc6f40 133 }
nikapov 0:ec6e59cc6f40 134
nikapov 0:ec6e59cc6f40 135 /* Read WHO AM I register */
nikapov 0:ec6e59cc6f40 136 if ( LSM303AGR_MAG_R_WHO_AM_I( (void *)this, id ) == MEMS_ERROR )
nikapov 0:ec6e59cc6f40 137 {
nikapov 0:ec6e59cc6f40 138 return 1;
nikapov 0:ec6e59cc6f40 139 }
nikapov 0:ec6e59cc6f40 140
nikapov 0:ec6e59cc6f40 141 return 0;
nikapov 0:ec6e59cc6f40 142 }
nikapov 0:ec6e59cc6f40 143
nikapov 0:ec6e59cc6f40 144 /**
nikapov 0:ec6e59cc6f40 145 * @brief Read data from LSM303AGR Magnetometer
nikapov 0:ec6e59cc6f40 146 * @param pData the pointer where the magnetometer data are stored
nikapov 0:ec6e59cc6f40 147 * @retval 0 in case of success, an error code otherwise
nikapov 0:ec6e59cc6f40 148 */
nikapov 0:ec6e59cc6f40 149 int LSM303AGRMagSensor::get_m_axes(int32_t *pData)
nikapov 0:ec6e59cc6f40 150 {
nikapov 0:ec6e59cc6f40 151 int16_t pDataRaw[3];
nikapov 0:ec6e59cc6f40 152 float sensitivity = 0;
nikapov 0:ec6e59cc6f40 153
nikapov 0:ec6e59cc6f40 154 /* Read raw data from LSM303AGR output register. */
nikapov 0:ec6e59cc6f40 155 if ( get_m_axes_raw( pDataRaw ) == 1 )
nikapov 0:ec6e59cc6f40 156 {
nikapov 0:ec6e59cc6f40 157 return 1;
nikapov 0:ec6e59cc6f40 158 }
nikapov 0:ec6e59cc6f40 159
nikapov 0:ec6e59cc6f40 160 /* Get LSM303AGR actual sensitivity. */
nikapov 0:ec6e59cc6f40 161 if ( get_m_sensitivity( &sensitivity ) == 1 )
nikapov 0:ec6e59cc6f40 162 {
nikapov 0:ec6e59cc6f40 163 return 1;
nikapov 0:ec6e59cc6f40 164 }
nikapov 0:ec6e59cc6f40 165
nikapov 0:ec6e59cc6f40 166 /* Calculate the data. */
nikapov 0:ec6e59cc6f40 167 pData[0] = ( int32_t )( pDataRaw[0] * sensitivity );
nikapov 0:ec6e59cc6f40 168 pData[1] = ( int32_t )( pDataRaw[1] * sensitivity );
nikapov 0:ec6e59cc6f40 169 pData[2] = ( int32_t )( pDataRaw[2] * sensitivity );
nikapov 0:ec6e59cc6f40 170
nikapov 0:ec6e59cc6f40 171 return 0;
nikapov 0:ec6e59cc6f40 172 }
nikapov 0:ec6e59cc6f40 173
nikapov 0:ec6e59cc6f40 174 /**
nikapov 0:ec6e59cc6f40 175 * @brief Read Magnetometer Sensitivity
nikapov 0:ec6e59cc6f40 176 * @param pfData the pointer where the magnetometer sensitivity is stored
nikapov 0:ec6e59cc6f40 177 * @retval 0 in case of success, an error code otherwise
nikapov 0:ec6e59cc6f40 178 */
nikapov 0:ec6e59cc6f40 179 int LSM303AGRMagSensor::get_m_sensitivity(float *pfData)
nikapov 0:ec6e59cc6f40 180 {
nikapov 0:ec6e59cc6f40 181 *pfData = 1.5f;
nikapov 0:ec6e59cc6f40 182
nikapov 0:ec6e59cc6f40 183 return 0;
nikapov 0:ec6e59cc6f40 184 }
nikapov 0:ec6e59cc6f40 185
nikapov 0:ec6e59cc6f40 186 /**
nikapov 0:ec6e59cc6f40 187 * @brief Read raw data from LSM303AGR Magnetometer
nikapov 0:ec6e59cc6f40 188 * @param pData the pointer where the magnetomer raw data are stored
nikapov 0:ec6e59cc6f40 189 * @retval 0 in case of success, an error code otherwise
nikapov 0:ec6e59cc6f40 190 */
nikapov 0:ec6e59cc6f40 191 int LSM303AGRMagSensor::get_m_axes_raw(int16_t *pData)
nikapov 0:ec6e59cc6f40 192 {
nikapov 0:ec6e59cc6f40 193 uint8_t regValue[6] = {0, 0, 0, 0, 0, 0};
nikapov 0:ec6e59cc6f40 194 int16_t *regValueInt16;
nikapov 0:ec6e59cc6f40 195
nikapov 0:ec6e59cc6f40 196 /* Read output registers from LSM303AGR_MAG_OUTX_L to LSM303AGR_MAG_OUTZ_H. */
nikapov 0:ec6e59cc6f40 197 if ( LSM303AGR_MAG_Get_Raw_Magnetic( (void *)this, regValue ) == MEMS_ERROR )
nikapov 0:ec6e59cc6f40 198 {
nikapov 0:ec6e59cc6f40 199 return 1;
nikapov 0:ec6e59cc6f40 200 }
nikapov 0:ec6e59cc6f40 201
nikapov 0:ec6e59cc6f40 202 regValueInt16 = (int16_t *)regValue;
nikapov 0:ec6e59cc6f40 203
nikapov 0:ec6e59cc6f40 204 /* Format the data. */
nikapov 0:ec6e59cc6f40 205 pData[0] = regValueInt16[0];
nikapov 0:ec6e59cc6f40 206 pData[1] = regValueInt16[1];
nikapov 0:ec6e59cc6f40 207 pData[2] = regValueInt16[2];
nikapov 0:ec6e59cc6f40 208
nikapov 0:ec6e59cc6f40 209 return 0;
nikapov 0:ec6e59cc6f40 210 }
nikapov 0:ec6e59cc6f40 211
nikapov 0:ec6e59cc6f40 212 /**
nikapov 0:ec6e59cc6f40 213 * @brief Read LSM303AGR Magnetometer output data rate
nikapov 0:ec6e59cc6f40 214 * @param odr the pointer to the output data rate
nikapov 0:ec6e59cc6f40 215 * @retval 0 in case of success, an error code otherwise
nikapov 0:ec6e59cc6f40 216 */
nikapov 0:ec6e59cc6f40 217 int LSM303AGRMagSensor::get_m_odr(float* odr)
nikapov 0:ec6e59cc6f40 218 {
nikapov 0:ec6e59cc6f40 219 LSM303AGR_MAG_ODR_t odr_low_level;
nikapov 0:ec6e59cc6f40 220
nikapov 0:ec6e59cc6f40 221 if ( LSM303AGR_MAG_R_ODR( (void *)this, &odr_low_level ) == MEMS_ERROR )
nikapov 0:ec6e59cc6f40 222 {
nikapov 0:ec6e59cc6f40 223 return 1;
nikapov 0:ec6e59cc6f40 224 }
nikapov 0:ec6e59cc6f40 225
nikapov 0:ec6e59cc6f40 226 switch( odr_low_level )
nikapov 0:ec6e59cc6f40 227 {
nikapov 0:ec6e59cc6f40 228 case LSM303AGR_MAG_ODR_10Hz:
nikapov 0:ec6e59cc6f40 229 *odr = 10.000f;
nikapov 0:ec6e59cc6f40 230 break;
nikapov 0:ec6e59cc6f40 231 case LSM303AGR_MAG_ODR_20Hz:
nikapov 0:ec6e59cc6f40 232 *odr = 20.000f;
nikapov 0:ec6e59cc6f40 233 break;
nikapov 0:ec6e59cc6f40 234 case LSM303AGR_MAG_ODR_50Hz:
nikapov 0:ec6e59cc6f40 235 *odr = 50.000f;
nikapov 0:ec6e59cc6f40 236 break;
nikapov 0:ec6e59cc6f40 237 case LSM303AGR_MAG_ODR_100Hz:
nikapov 0:ec6e59cc6f40 238 *odr = 100.000f;
nikapov 0:ec6e59cc6f40 239 break;
nikapov 0:ec6e59cc6f40 240 default:
nikapov 0:ec6e59cc6f40 241 *odr = -1.000f;
nikapov 0:ec6e59cc6f40 242 return 1;
nikapov 0:ec6e59cc6f40 243 }
nikapov 0:ec6e59cc6f40 244 return 0;
nikapov 0:ec6e59cc6f40 245 }
nikapov 0:ec6e59cc6f40 246
nikapov 0:ec6e59cc6f40 247 /**
nikapov 0:ec6e59cc6f40 248 * @brief Set ODR
nikapov 0:ec6e59cc6f40 249 * @param odr the output data rate to be set
nikapov 0:ec6e59cc6f40 250 * @retval 0 in case of success, an error code otherwise
nikapov 0:ec6e59cc6f40 251 */
nikapov 0:ec6e59cc6f40 252 int LSM303AGRMagSensor::set_m_odr(float odr)
nikapov 0:ec6e59cc6f40 253 {
nikapov 0:ec6e59cc6f40 254 LSM303AGR_MAG_ODR_t new_odr;
nikapov 0:ec6e59cc6f40 255
nikapov 0:ec6e59cc6f40 256 new_odr = ( odr <= 10.000f ) ? LSM303AGR_MAG_ODR_10Hz
nikapov 0:ec6e59cc6f40 257 : ( odr <= 20.000f ) ? LSM303AGR_MAG_ODR_20Hz
nikapov 0:ec6e59cc6f40 258 : ( odr <= 50.000f ) ? LSM303AGR_MAG_ODR_50Hz
nikapov 0:ec6e59cc6f40 259 : LSM303AGR_MAG_ODR_100Hz;
nikapov 0:ec6e59cc6f40 260
nikapov 0:ec6e59cc6f40 261 if ( LSM303AGR_MAG_W_ODR( (void *)this, new_odr ) == MEMS_ERROR )
nikapov 0:ec6e59cc6f40 262 {
nikapov 0:ec6e59cc6f40 263 return 1;
nikapov 0:ec6e59cc6f40 264 }
nikapov 0:ec6e59cc6f40 265
nikapov 0:ec6e59cc6f40 266 return 0;
nikapov 0:ec6e59cc6f40 267 }
nikapov 0:ec6e59cc6f40 268
nikapov 0:ec6e59cc6f40 269
nikapov 0:ec6e59cc6f40 270 /**
nikapov 0:ec6e59cc6f40 271 * @brief Read LSM303AGR Magnetometer full scale
nikapov 0:ec6e59cc6f40 272 * @param fullScale the pointer to the output data rate
nikapov 0:ec6e59cc6f40 273 * @retval 0 in case of success, an error code otherwise
nikapov 0:ec6e59cc6f40 274 */
nikapov 0:ec6e59cc6f40 275 int LSM303AGRMagSensor::get_m_fs(float* fullScale)
nikapov 0:ec6e59cc6f40 276 {
nikapov 0:ec6e59cc6f40 277 *fullScale = 50.0f;
nikapov 0:ec6e59cc6f40 278
nikapov 0:ec6e59cc6f40 279 return 0;
nikapov 0:ec6e59cc6f40 280 }
nikapov 0:ec6e59cc6f40 281
nikapov 0:ec6e59cc6f40 282 /**
nikapov 0:ec6e59cc6f40 283 * @brief Set full scale
nikapov 0:ec6e59cc6f40 284 * @param fullScale the full scale to be set
nikapov 0:ec6e59cc6f40 285 * @retval 0 in case of success, an error code otherwise
nikapov 0:ec6e59cc6f40 286 */
nikapov 0:ec6e59cc6f40 287 int LSM303AGRMagSensor::set_m_fs(float fullScale)
nikapov 0:ec6e59cc6f40 288 {
nikapov 0:ec6e59cc6f40 289 return 0;
nikapov 0:ec6e59cc6f40 290 }
nikapov 0:ec6e59cc6f40 291
nikapov 0:ec6e59cc6f40 292
nikapov 0:ec6e59cc6f40 293 /**
nikapov 0:ec6e59cc6f40 294 * @brief Read magnetometer data from register
nikapov 0:ec6e59cc6f40 295 * @param reg register address
nikapov 0:ec6e59cc6f40 296 * @param data register data
nikapov 0:ec6e59cc6f40 297 * @retval 0 in case of success
nikapov 0:ec6e59cc6f40 298 * @retval 1 in case of failure
nikapov 0:ec6e59cc6f40 299 */
nikapov 0:ec6e59cc6f40 300 int LSM303AGRMagSensor::read_reg( uint8_t reg, uint8_t *data )
nikapov 0:ec6e59cc6f40 301 {
nikapov 0:ec6e59cc6f40 302 if ( LSM303AGR_MAG_read_reg( (void *)this, reg, data ) == MEMS_ERROR )
nikapov 0:ec6e59cc6f40 303 {
nikapov 0:ec6e59cc6f40 304 return 1;
nikapov 0:ec6e59cc6f40 305 }
nikapov 0:ec6e59cc6f40 306
nikapov 0:ec6e59cc6f40 307 return 0;
nikapov 0:ec6e59cc6f40 308 }
nikapov 0:ec6e59cc6f40 309
nikapov 0:ec6e59cc6f40 310
nikapov 0:ec6e59cc6f40 311 /**
nikapov 0:ec6e59cc6f40 312 * @brief Write magnetometer data to register
nikapov 0:ec6e59cc6f40 313 * @param reg register address
nikapov 0:ec6e59cc6f40 314 * @param data register data
nikapov 0:ec6e59cc6f40 315 * @retval 0 in case of success
nikapov 0:ec6e59cc6f40 316 * @retval 1 in case of failure
nikapov 0:ec6e59cc6f40 317 */
nikapov 0:ec6e59cc6f40 318 int LSM303AGRMagSensor::write_reg( uint8_t reg, uint8_t data )
nikapov 0:ec6e59cc6f40 319 {
nikapov 0:ec6e59cc6f40 320 if ( LSM303AGR_MAG_write_reg( (void *)this, reg, data ) == MEMS_ERROR )
nikapov 0:ec6e59cc6f40 321 {
nikapov 0:ec6e59cc6f40 322 return 1;
nikapov 0:ec6e59cc6f40 323 }
nikapov 0:ec6e59cc6f40 324
nikapov 0:ec6e59cc6f40 325 return 0;
nikapov 0:ec6e59cc6f40 326 }
nikapov 0:ec6e59cc6f40 327
nikapov 0:ec6e59cc6f40 328 uint8_t LSM303AGR_MAG_io_write( void *handle, uint8_t WriteAddr, uint8_t *pBuffer, uint16_t nBytesToWrite )
nikapov 0:ec6e59cc6f40 329 {
nikapov 0:ec6e59cc6f40 330 return ((LSM303AGRMagSensor *)handle)->io_write(pBuffer, WriteAddr, nBytesToWrite);
nikapov 0:ec6e59cc6f40 331 }
nikapov 0:ec6e59cc6f40 332
nikapov 0:ec6e59cc6f40 333 uint8_t LSM303AGR_MAG_io_read( void *handle, uint8_t ReadAddr, uint8_t *pBuffer, uint16_t nBytesToRead )
nikapov 0:ec6e59cc6f40 334 {
nikapov 0:ec6e59cc6f40 335 return ((LSM303AGRMagSensor *)handle)->io_read(pBuffer, ReadAddr, nBytesToRead);
nikapov 0:ec6e59cc6f40 336 }