Library to interface H3LIS331DL accelerometer.

Dependents:   H3LIS331DL_Demo H3LIS331DL_AdjVal

3-axis Digital Accelerometer H3LIS331DL library

This library interfaces this grove sensor and was tested so far in a LPC1768, but it should work with all mbed platforms supporting I2C API.

The main difference from the original library is that the constructor takes two pins for SDA and SCL.

Basic example

#include "mbed.h"
#include "H3LIS331DL.h"

H3LIS331DL h3lis(p28, p27);
Serial pc(USBTX, USBRX); // tx, rx
C12832 lcd(p5, p7, p6, p8, p11);

int main() {
    h3lis.init();

    while(1) {
        double accel[3] = {0.0, 0.0, 0.0};
        
        h3lis.getAcceleration(accel);
        pc.printf("X %1.3f    Y %1.3f    Z %1.3f\n", accel[0], accel[1], accel[2]);
        wait_ms(100);
    }
}

Example applications

Find the two applications from Seeed Studio ported into mbed:

License

The MIT License (MIT)

Copyright (c) 2013 Seeed Technology Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

/media/uploads/spastor/grove_3axis_accelerometer400g.jpg

Committer:
spastor
Date:
Mon Dec 08 22:11:00 2014 +0000
Revision:
0:2b446bf9b93b
Ported from Seeed Studio's library for arduino https://github.com/Seeed-Studio/Accelerometer_H3LIS331DL Commit a39c47a656e5b6893ae0714e1bfdc769fab318b2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
spastor 0:2b446bf9b93b 1 /*
spastor 0:2b446bf9b93b 2 * H3LIS331DL.cpp
spastor 0:2b446bf9b93b 3 * A library for 3-Axis Digital Accelerometer(±400g)
spastor 0:2b446bf9b93b 4 *
spastor 0:2b446bf9b93b 5 * Copyright (c) 2014 seeed technology inc.
spastor 0:2b446bf9b93b 6 * Website : www.seeed.cc
spastor 0:2b446bf9b93b 7 * Author : lawliet zou
spastor 0:2b446bf9b93b 8 * Create Time: April 2014
spastor 0:2b446bf9b93b 9 * Change Log :
spastor 0:2b446bf9b93b 10 *
spastor 0:2b446bf9b93b 11 * The MIT License (MIT)
spastor 0:2b446bf9b93b 12 *
spastor 0:2b446bf9b93b 13 * Permission is hereby granted, free of charge, to any person obtaining a copy
spastor 0:2b446bf9b93b 14 * of this software and associated documentation files (the "Software"), to deal
spastor 0:2b446bf9b93b 15 * in the Software without restriction, including without limitation the rights
spastor 0:2b446bf9b93b 16 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
spastor 0:2b446bf9b93b 17 * copies of the Software, and to permit persons to whom the Software is
spastor 0:2b446bf9b93b 18 * furnished to do so, subject to the following conditions:
spastor 0:2b446bf9b93b 19 *
spastor 0:2b446bf9b93b 20 * The above copyright notice and this permission notice shall be included in
spastor 0:2b446bf9b93b 21 * all copies or substantial portions of the Software.
spastor 0:2b446bf9b93b 22 *
spastor 0:2b446bf9b93b 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
spastor 0:2b446bf9b93b 24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
spastor 0:2b446bf9b93b 25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
spastor 0:2b446bf9b93b 26 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
spastor 0:2b446bf9b93b 27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
spastor 0:2b446bf9b93b 28 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
spastor 0:2b446bf9b93b 29 * THE SOFTWARE.
spastor 0:2b446bf9b93b 30 */
spastor 0:2b446bf9b93b 31
spastor 0:2b446bf9b93b 32 #include "H3LIS331DL.h"
spastor 0:2b446bf9b93b 33
spastor 0:2b446bf9b93b 34 void H3LIS331DL::init(H3LIS331DL_ODR_t odr,H3LIS331DL_Mode_t mode,H3LIS331DL_Fullscale_t fullScale)
spastor 0:2b446bf9b93b 35 {
spastor 0:2b446bf9b93b 36 //set output data rate
spastor 0:2b446bf9b93b 37 setODR(odr);
spastor 0:2b446bf9b93b 38 //set PowerMode
spastor 0:2b446bf9b93b 39 setMode( mode);
spastor 0:2b446bf9b93b 40 //set Fullscale
spastor 0:2b446bf9b93b 41 setFullScale( fullScale);
spastor 0:2b446bf9b93b 42 //set axis Enable
spastor 0:2b446bf9b93b 43 setAxis( H3LIS331DL_X_ENABLE | H3LIS331DL_Y_ENABLE | H3LIS331DL_Z_ENABLE);
spastor 0:2b446bf9b93b 44 }
spastor 0:2b446bf9b93b 45
spastor 0:2b446bf9b93b 46 void H3LIS331DL::importPara(int16_t val_x, int16_t val_y, int16_t val_z)
spastor 0:2b446bf9b93b 47 {
spastor 0:2b446bf9b93b 48 _adjVal[0] = val_x;
spastor 0:2b446bf9b93b 49 _adjVal[1] = val_y;
spastor 0:2b446bf9b93b 50 _adjVal[2] = val_z;
spastor 0:2b446bf9b93b 51 }
spastor 0:2b446bf9b93b 52 void H3LIS331DL::readXYZ(int16_t* x, int16_t* y, int16_t* z)
spastor 0:2b446bf9b93b 53 {
spastor 0:2b446bf9b93b 54 //get Acceleration Raw data
spastor 0:2b446bf9b93b 55 AxesRaw_t data;
spastor 0:2b446bf9b93b 56 status_t response = getAccAxesRaw(&data);
spastor 0:2b446bf9b93b 57 if(MEMS_SUCCESS == response){
spastor 0:2b446bf9b93b 58 *x = (data.AXIS_X - _adjVal[0]);
spastor 0:2b446bf9b93b 59 *y = (data.AXIS_Y - _adjVal[1]);
spastor 0:2b446bf9b93b 60 *z = (data.AXIS_Z - _adjVal[2]);
spastor 0:2b446bf9b93b 61 }
spastor 0:2b446bf9b93b 62 }
spastor 0:2b446bf9b93b 63
spastor 0:2b446bf9b93b 64 void H3LIS331DL::getAcceleration(double* xyz)
spastor 0:2b446bf9b93b 65 {
spastor 0:2b446bf9b93b 66 AxesRaw_t data;
spastor 0:2b446bf9b93b 67 double gains = 0.003;
spastor 0:2b446bf9b93b 68 getAccAxesRaw(&data);
spastor 0:2b446bf9b93b 69
spastor 0:2b446bf9b93b 70 xyz[0] = (data.AXIS_X - _adjVal[0]) * gains;
spastor 0:2b446bf9b93b 71 xyz[1] = (data.AXIS_Y - _adjVal[1]) * gains;
spastor 0:2b446bf9b93b 72 xyz[2] = (data.AXIS_Z - _adjVal[2]) * gains;
spastor 0:2b446bf9b93b 73 }
spastor 0:2b446bf9b93b 74
spastor 0:2b446bf9b93b 75
spastor 0:2b446bf9b93b 76 /*******************************************************************************
spastor 0:2b446bf9b93b 77 * Function Name : getWHO_AM_I
spastor 0:2b446bf9b93b 78 * Description : Read identification code from H3LIS331DL::WHO_AM_I register
spastor 0:2b446bf9b93b 79 * Input : char to be filled with the Device identification Value
spastor 0:2b446bf9b93b 80 * Output : None
spastor 0:2b446bf9b93b 81 * Return : Status [value of FSS]
spastor 0:2b446bf9b93b 82 *******************************************************************************/
spastor 0:2b446bf9b93b 83 status_t H3LIS331DL::getWHO_AM_I(uint8_t* val){
spastor 0:2b446bf9b93b 84
spastor 0:2b446bf9b93b 85 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_WHO_AM_I, val) )
spastor 0:2b446bf9b93b 86 return MEMS_ERROR;
spastor 0:2b446bf9b93b 87
spastor 0:2b446bf9b93b 88 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 89 }
spastor 0:2b446bf9b93b 90
spastor 0:2b446bf9b93b 91
spastor 0:2b446bf9b93b 92 /*******************************************************************************
spastor 0:2b446bf9b93b 93 * Function Name : setODR
spastor 0:2b446bf9b93b 94 * Description : Sets H3LIS331DL Accelerometer Output Data Rate
spastor 0:2b446bf9b93b 95 * Input : Output Data Rate
spastor 0:2b446bf9b93b 96 * Output : None
spastor 0:2b446bf9b93b 97 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 98 *******************************************************************************/
spastor 0:2b446bf9b93b 99 status_t H3LIS331DL::setODR(H3LIS331DL_ODR_t dr){
spastor 0:2b446bf9b93b 100 uint8_t value;
spastor 0:2b446bf9b93b 101
spastor 0:2b446bf9b93b 102 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG1, &value) )
spastor 0:2b446bf9b93b 103 return MEMS_ERROR;
spastor 0:2b446bf9b93b 104
spastor 0:2b446bf9b93b 105 value &= 0xE7;
spastor 0:2b446bf9b93b 106 value |= dr<<H3LIS331DL_DR;
spastor 0:2b446bf9b93b 107
spastor 0:2b446bf9b93b 108 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG1, value) )
spastor 0:2b446bf9b93b 109 return MEMS_ERROR;
spastor 0:2b446bf9b93b 110
spastor 0:2b446bf9b93b 111 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 112 }
spastor 0:2b446bf9b93b 113
spastor 0:2b446bf9b93b 114
spastor 0:2b446bf9b93b 115 /*******************************************************************************
spastor 0:2b446bf9b93b 116 * Function Name : setMode
spastor 0:2b446bf9b93b 117 * Description : Sets H3LIS331DLH Accelerometer Operating Mode
spastor 0:2b446bf9b93b 118 * Input : Modality (H3LIS331DL_LOW_POWER, H3LIS331DL_NORMAL, H3LIS331DL_POWER_DOWN...)
spastor 0:2b446bf9b93b 119 * Output : None
spastor 0:2b446bf9b93b 120 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 121 *******************************************************************************/
spastor 0:2b446bf9b93b 122 status_t H3LIS331DL::setMode(H3LIS331DL_Mode_t pm) {
spastor 0:2b446bf9b93b 123 uint8_t value;
spastor 0:2b446bf9b93b 124
spastor 0:2b446bf9b93b 125 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG1, &value) )
spastor 0:2b446bf9b93b 126 return MEMS_ERROR;
spastor 0:2b446bf9b93b 127
spastor 0:2b446bf9b93b 128 value &= 0x1F;
spastor 0:2b446bf9b93b 129 value |= (pm<<H3LIS331DL_PM);
spastor 0:2b446bf9b93b 130
spastor 0:2b446bf9b93b 131 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG1, value) )
spastor 0:2b446bf9b93b 132 return MEMS_ERROR;
spastor 0:2b446bf9b93b 133
spastor 0:2b446bf9b93b 134 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 135 }
spastor 0:2b446bf9b93b 136
spastor 0:2b446bf9b93b 137 /*******************************************************************************
spastor 0:2b446bf9b93b 138 * Function Name : setAxis
spastor 0:2b446bf9b93b 139 * Description : Enable/Disable LIS331DLH Axis
spastor 0:2b446bf9b93b 140 * Input : H3LIS331DL_X_ENABLE/H3LIS331DL_X_DISABLE | H3LIS331DL_Y_ENABLE/H3LIS331DL_Y_DISABLE
spastor 0:2b446bf9b93b 141 | H3LIS331DL_Z_ENABLE/H3LIS331DL_Z_DISABLE
spastor 0:2b446bf9b93b 142 * Output : None
spastor 0:2b446bf9b93b 143 * Note : You MUST use all input variable in the argument, as example
spastor 0:2b446bf9b93b 144 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 145 *******************************************************************************/
spastor 0:2b446bf9b93b 146 status_t H3LIS331DL::setAxis(H3LIS331DL_Axis_t axis) {
spastor 0:2b446bf9b93b 147 uint8_t value;
spastor 0:2b446bf9b93b 148
spastor 0:2b446bf9b93b 149 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG1, &value) )
spastor 0:2b446bf9b93b 150 return MEMS_ERROR;
spastor 0:2b446bf9b93b 151
spastor 0:2b446bf9b93b 152 value &= 0xF8;
spastor 0:2b446bf9b93b 153 value |= (0x07 & axis);
spastor 0:2b446bf9b93b 154
spastor 0:2b446bf9b93b 155 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG1, value) )
spastor 0:2b446bf9b93b 156 return MEMS_ERROR;
spastor 0:2b446bf9b93b 157
spastor 0:2b446bf9b93b 158 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 159 }
spastor 0:2b446bf9b93b 160
spastor 0:2b446bf9b93b 161
spastor 0:2b446bf9b93b 162 /*******************************************************************************
spastor 0:2b446bf9b93b 163 * Function Name : setFullScale
spastor 0:2b446bf9b93b 164 * Description : Sets the LIS331DLH FullScale
spastor 0:2b446bf9b93b 165 * Input : H3LIS331DL_FULLSCALE_2/H3LIS331DL_FULLSCALE_4/H3LIS331DL_FULLSCALE_8
spastor 0:2b446bf9b93b 166 * Output : None
spastor 0:2b446bf9b93b 167 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 168 *******************************************************************************/
spastor 0:2b446bf9b93b 169 status_t H3LIS331DL::setFullScale(H3LIS331DL_Fullscale_t fs) {
spastor 0:2b446bf9b93b 170 uint8_t value;
spastor 0:2b446bf9b93b 171
spastor 0:2b446bf9b93b 172 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, &value) )
spastor 0:2b446bf9b93b 173 return MEMS_ERROR;
spastor 0:2b446bf9b93b 174
spastor 0:2b446bf9b93b 175 value &= 0xCF;
spastor 0:2b446bf9b93b 176 value |= (fs<<H3LIS331DL_FS);
spastor 0:2b446bf9b93b 177
spastor 0:2b446bf9b93b 178 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, value) )
spastor 0:2b446bf9b93b 179 return MEMS_ERROR;
spastor 0:2b446bf9b93b 180
spastor 0:2b446bf9b93b 181 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 182 }
spastor 0:2b446bf9b93b 183
spastor 0:2b446bf9b93b 184
spastor 0:2b446bf9b93b 185 /*******************************************************************************
spastor 0:2b446bf9b93b 186 * Function Name : setBDU
spastor 0:2b446bf9b93b 187 * Description : Enable/Disable Block Data Update Functionality
spastor 0:2b446bf9b93b 188 * Input : MEMS_ENABLE/MEMS_DISABLE
spastor 0:2b446bf9b93b 189 * Output : None
spastor 0:2b446bf9b93b 190 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 191 *******************************************************************************/
spastor 0:2b446bf9b93b 192 status_t H3LIS331DL::setBDU(State_t bdu) {
spastor 0:2b446bf9b93b 193 uint8_t value;
spastor 0:2b446bf9b93b 194
spastor 0:2b446bf9b93b 195 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, &value) )
spastor 0:2b446bf9b93b 196 return MEMS_ERROR;
spastor 0:2b446bf9b93b 197
spastor 0:2b446bf9b93b 198 value &= 0x7F;
spastor 0:2b446bf9b93b 199 value |= (bdu<<H3LIS331DL_BDU);
spastor 0:2b446bf9b93b 200
spastor 0:2b446bf9b93b 201 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, value) )
spastor 0:2b446bf9b93b 202 return MEMS_ERROR;
spastor 0:2b446bf9b93b 203
spastor 0:2b446bf9b93b 204 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 205 }
spastor 0:2b446bf9b93b 206
spastor 0:2b446bf9b93b 207
spastor 0:2b446bf9b93b 208 /*******************************************************************************
spastor 0:2b446bf9b93b 209 * Function Name : setBLE
spastor 0:2b446bf9b93b 210 * Description : Set Endianess (MSB/LSB)
spastor 0:2b446bf9b93b 211 * Input : H3LIS331DL_BLE_LSB / H3LIS331DL_BLE_MSB
spastor 0:2b446bf9b93b 212 * Output : None
spastor 0:2b446bf9b93b 213 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 214 *******************************************************************************/
spastor 0:2b446bf9b93b 215 status_t H3LIS331DL::setBLE(H3LIS331DL_Endianess_t ble) {
spastor 0:2b446bf9b93b 216 uint8_t value;
spastor 0:2b446bf9b93b 217
spastor 0:2b446bf9b93b 218 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, &value) )
spastor 0:2b446bf9b93b 219 return MEMS_ERROR;
spastor 0:2b446bf9b93b 220
spastor 0:2b446bf9b93b 221 value &= 0xBF;
spastor 0:2b446bf9b93b 222 value |= (ble<<H3LIS331DL_BLE);
spastor 0:2b446bf9b93b 223
spastor 0:2b446bf9b93b 224 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, value) )
spastor 0:2b446bf9b93b 225 return MEMS_ERROR;
spastor 0:2b446bf9b93b 226
spastor 0:2b446bf9b93b 227 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 228 }
spastor 0:2b446bf9b93b 229
spastor 0:2b446bf9b93b 230
spastor 0:2b446bf9b93b 231 /*******************************************************************************
spastor 0:2b446bf9b93b 232 * Function Name : setFDS
spastor 0:2b446bf9b93b 233 * Description : Set Filter Data Selection
spastor 0:2b446bf9b93b 234 * Input : MEMS_ENABLE/MEMS_DISABLE
spastor 0:2b446bf9b93b 235 * Output : None
spastor 0:2b446bf9b93b 236 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 237 *******************************************************************************/
spastor 0:2b446bf9b93b 238 status_t H3LIS331DL::setFDS(State_t fds) {
spastor 0:2b446bf9b93b 239 uint8_t value;
spastor 0:2b446bf9b93b 240
spastor 0:2b446bf9b93b 241 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, &value) )
spastor 0:2b446bf9b93b 242 return MEMS_ERROR;
spastor 0:2b446bf9b93b 243
spastor 0:2b446bf9b93b 244 value &= 0xEF;
spastor 0:2b446bf9b93b 245 value |= (fds<<H3LIS331DL_FDS);
spastor 0:2b446bf9b93b 246
spastor 0:2b446bf9b93b 247 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, value) )
spastor 0:2b446bf9b93b 248 return MEMS_ERROR;
spastor 0:2b446bf9b93b 249
spastor 0:2b446bf9b93b 250 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 251 }
spastor 0:2b446bf9b93b 252
spastor 0:2b446bf9b93b 253
spastor 0:2b446bf9b93b 254 /*******************************************************************************
spastor 0:2b446bf9b93b 255 * Function Name : setBOOT
spastor 0:2b446bf9b93b 256 * Description : Rebot memory content
spastor 0:2b446bf9b93b 257 * Input : MEMS_ENABLE/MEMS_DISABLE
spastor 0:2b446bf9b93b 258 * Output : None
spastor 0:2b446bf9b93b 259 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 260 *******************************************************************************/
spastor 0:2b446bf9b93b 261 status_t H3LIS331DL::setBOOT(State_t boot) {
spastor 0:2b446bf9b93b 262 uint8_t value;
spastor 0:2b446bf9b93b 263
spastor 0:2b446bf9b93b 264 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, &value) )
spastor 0:2b446bf9b93b 265 return MEMS_ERROR;
spastor 0:2b446bf9b93b 266
spastor 0:2b446bf9b93b 267 value &= 0x7F;
spastor 0:2b446bf9b93b 268 value |= (boot<<H3LIS331DL_BOOT);
spastor 0:2b446bf9b93b 269
spastor 0:2b446bf9b93b 270 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, value) )
spastor 0:2b446bf9b93b 271 return MEMS_ERROR;
spastor 0:2b446bf9b93b 272
spastor 0:2b446bf9b93b 273 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 274 }
spastor 0:2b446bf9b93b 275
spastor 0:2b446bf9b93b 276
spastor 0:2b446bf9b93b 277 /*******************************************************************************
spastor 0:2b446bf9b93b 278 * Function Name : setSelfTest
spastor 0:2b446bf9b93b 279 * Description : Set Self Test Modality
spastor 0:2b446bf9b93b 280 * Input : MEMS_DISABLE/MEMS_ENABLE
spastor 0:2b446bf9b93b 281 * Output : None
spastor 0:2b446bf9b93b 282 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 283 *******************************************************************************/
spastor 0:2b446bf9b93b 284 status_t H3LIS331DL::setSelfTest(State_t st) {
spastor 0:2b446bf9b93b 285 uint8_t value;
spastor 0:2b446bf9b93b 286
spastor 0:2b446bf9b93b 287 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, &value) )
spastor 0:2b446bf9b93b 288 return MEMS_ERROR;
spastor 0:2b446bf9b93b 289
spastor 0:2b446bf9b93b 290 value &= 0xFD;
spastor 0:2b446bf9b93b 291 value |= (st<<H3LIS331DL_ST);
spastor 0:2b446bf9b93b 292
spastor 0:2b446bf9b93b 293 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, value) )
spastor 0:2b446bf9b93b 294 return MEMS_ERROR;
spastor 0:2b446bf9b93b 295
spastor 0:2b446bf9b93b 296 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 297 }
spastor 0:2b446bf9b93b 298
spastor 0:2b446bf9b93b 299
spastor 0:2b446bf9b93b 300 /*******************************************************************************
spastor 0:2b446bf9b93b 301 * Function Name : setSelfTestSign
spastor 0:2b446bf9b93b 302 * Description : Set Self Test Sign (Disable = st_plus, Enable = st_minus)
spastor 0:2b446bf9b93b 303 * Input : MEMS_DISABLE/MEMS_ENABLE
spastor 0:2b446bf9b93b 304 * Output : None
spastor 0:2b446bf9b93b 305 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 306 *******************************************************************************/
spastor 0:2b446bf9b93b 307 status_t H3LIS331DL::setSelfTestSign(State_t st_sign) {
spastor 0:2b446bf9b93b 308 uint8_t value;
spastor 0:2b446bf9b93b 309
spastor 0:2b446bf9b93b 310 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, &value) )
spastor 0:2b446bf9b93b 311 return MEMS_ERROR;
spastor 0:2b446bf9b93b 312
spastor 0:2b446bf9b93b 313 value &= 0xF7;
spastor 0:2b446bf9b93b 314 value |= (st_sign<<H3LIS331DL_ST_SIGN);
spastor 0:2b446bf9b93b 315
spastor 0:2b446bf9b93b 316 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, value) )
spastor 0:2b446bf9b93b 317 return MEMS_ERROR;
spastor 0:2b446bf9b93b 318
spastor 0:2b446bf9b93b 319 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 320 }
spastor 0:2b446bf9b93b 321
spastor 0:2b446bf9b93b 322
spastor 0:2b446bf9b93b 323 /*******************************************************************************
spastor 0:2b446bf9b93b 324 * Function Name : setIntHighLow
spastor 0:2b446bf9b93b 325 * Description : Set Interrupt active state (Disable = active high, Enable = active low)
spastor 0:2b446bf9b93b 326 * Input : MEMS_DISABLE/MEMS_ENABLE
spastor 0:2b446bf9b93b 327 * Output : None
spastor 0:2b446bf9b93b 328 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 329 *******************************************************************************/
spastor 0:2b446bf9b93b 330 status_t H3LIS331DL::setIntHighLow(State_t ihl) {
spastor 0:2b446bf9b93b 331 uint8_t value;
spastor 0:2b446bf9b93b 332
spastor 0:2b446bf9b93b 333 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, &value) )
spastor 0:2b446bf9b93b 334 return MEMS_ERROR;
spastor 0:2b446bf9b93b 335
spastor 0:2b446bf9b93b 336 value &= 0x7F;
spastor 0:2b446bf9b93b 337 value |= (ihl<<H3LIS331DL_IHL);
spastor 0:2b446bf9b93b 338
spastor 0:2b446bf9b93b 339 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, value) )
spastor 0:2b446bf9b93b 340 return MEMS_ERROR;
spastor 0:2b446bf9b93b 341
spastor 0:2b446bf9b93b 342 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 343 }
spastor 0:2b446bf9b93b 344
spastor 0:2b446bf9b93b 345
spastor 0:2b446bf9b93b 346 /*******************************************************************************
spastor 0:2b446bf9b93b 347 * Function Name : setIntPPOD
spastor 0:2b446bf9b93b 348 * Description : Set Interrupt Push-Pull/OpenDrain Pad (Disable = Push-Pull, Enable = OpenDrain)
spastor 0:2b446bf9b93b 349 * Input : MEMS_DISABLE/MEMS_ENABLE
spastor 0:2b446bf9b93b 350 * Output : None
spastor 0:2b446bf9b93b 351 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 352 *******************************************************************************/
spastor 0:2b446bf9b93b 353 status_t H3LIS331DL::setIntPPOD(State_t pp_od) {
spastor 0:2b446bf9b93b 354 uint8_t value;
spastor 0:2b446bf9b93b 355
spastor 0:2b446bf9b93b 356 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, &value) )
spastor 0:2b446bf9b93b 357 return MEMS_ERROR;
spastor 0:2b446bf9b93b 358
spastor 0:2b446bf9b93b 359 value &= 0xBF;
spastor 0:2b446bf9b93b 360 value |= (pp_od<<H3LIS331DL_PP_OD);
spastor 0:2b446bf9b93b 361
spastor 0:2b446bf9b93b 362 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, value) )
spastor 0:2b446bf9b93b 363 return MEMS_ERROR;
spastor 0:2b446bf9b93b 364
spastor 0:2b446bf9b93b 365 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 366 }
spastor 0:2b446bf9b93b 367
spastor 0:2b446bf9b93b 368
spastor 0:2b446bf9b93b 369 /*******************************************************************************
spastor 0:2b446bf9b93b 370 * Function Name : setInt1DataSign
spastor 0:2b446bf9b93b 371 * Description : Set Data signal Interrupt 1 pad
spastor 0:2b446bf9b93b 372 * Input : Modality by H3LIS331DL_INT_Conf_t Typedef
spastor 0:2b446bf9b93b 373 (H3LIS331DL_INT_SOURCE, H3LIS331DL_INT_1OR2_SOURCE, H3LIS331DL_DATA_READY, H3LIS331DL_BOOT_RUNNING)
spastor 0:2b446bf9b93b 374 * Output : None
spastor 0:2b446bf9b93b 375 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 376 *******************************************************************************/
spastor 0:2b446bf9b93b 377 status_t H3LIS331DL::setInt1DataSign(H3LIS331DL_INT_Conf_t i_cfg) {
spastor 0:2b446bf9b93b 378 uint8_t value;
spastor 0:2b446bf9b93b 379
spastor 0:2b446bf9b93b 380 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, &value) )
spastor 0:2b446bf9b93b 381 return MEMS_ERROR;
spastor 0:2b446bf9b93b 382
spastor 0:2b446bf9b93b 383 value &= 0xFC;
spastor 0:2b446bf9b93b 384 value |= (i_cfg<<H3LIS331DL_I1_CFG);
spastor 0:2b446bf9b93b 385
spastor 0:2b446bf9b93b 386 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, value) )
spastor 0:2b446bf9b93b 387 return MEMS_ERROR;
spastor 0:2b446bf9b93b 388
spastor 0:2b446bf9b93b 389 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 390 }
spastor 0:2b446bf9b93b 391
spastor 0:2b446bf9b93b 392
spastor 0:2b446bf9b93b 393 /*******************************************************************************
spastor 0:2b446bf9b93b 394 * Function Name : setInt2DataSign
spastor 0:2b446bf9b93b 395 * Description : Set Data signal Interrupt 2 pad
spastor 0:2b446bf9b93b 396 * Input : Modality by H3LIS331DL_INT_Conf_t Typedef
spastor 0:2b446bf9b93b 397 (H3LIS331DL_INT_SOURCE, H3LIS331DL_INT_1OR2_SOURCE, H3LIS331DL_DATA_READY, H3LIS331DL_BOOT_RUNNING)
spastor 0:2b446bf9b93b 398 * Output : None
spastor 0:2b446bf9b93b 399 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 400 *******************************************************************************/
spastor 0:2b446bf9b93b 401 status_t H3LIS331DL::setInt2DataSign(H3LIS331DL_INT_Conf_t i_cfg) {
spastor 0:2b446bf9b93b 402 uint8_t value;
spastor 0:2b446bf9b93b 403
spastor 0:2b446bf9b93b 404 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, &value) )
spastor 0:2b446bf9b93b 405 return MEMS_ERROR;
spastor 0:2b446bf9b93b 406
spastor 0:2b446bf9b93b 407 value &= 0xE7;
spastor 0:2b446bf9b93b 408 value |= (i_cfg<<H3LIS331DL_I2_CFG);
spastor 0:2b446bf9b93b 409
spastor 0:2b446bf9b93b 410 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, value) )
spastor 0:2b446bf9b93b 411 return MEMS_ERROR;
spastor 0:2b446bf9b93b 412
spastor 0:2b446bf9b93b 413 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 414 }
spastor 0:2b446bf9b93b 415
spastor 0:2b446bf9b93b 416
spastor 0:2b446bf9b93b 417 /*******************************************************************************
spastor 0:2b446bf9b93b 418 * Function Name : setSPI34Wire
spastor 0:2b446bf9b93b 419 * Description : Set SPI mode
spastor 0:2b446bf9b93b 420 * Input : Modality by H3LIS331DL_SPIMode_t Typedef (H3LIS331DL_SPI_4_WIRE, H3LIS331DL_SPI_3_WIRE)
spastor 0:2b446bf9b93b 421 * Output : None
spastor 0:2b446bf9b93b 422 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 423 *******************************************************************************/
spastor 0:2b446bf9b93b 424 status_t H3LIS331DL::setSPI34Wire(H3LIS331DL_SPIMode_t sim) {
spastor 0:2b446bf9b93b 425 uint8_t value;
spastor 0:2b446bf9b93b 426
spastor 0:2b446bf9b93b 427 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, &value) )
spastor 0:2b446bf9b93b 428 return MEMS_ERROR;
spastor 0:2b446bf9b93b 429
spastor 0:2b446bf9b93b 430 value &= 0xFE;
spastor 0:2b446bf9b93b 431 value |= (sim<<H3LIS331DL_SIM);
spastor 0:2b446bf9b93b 432
spastor 0:2b446bf9b93b 433 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, value) )
spastor 0:2b446bf9b93b 434 return MEMS_ERROR;
spastor 0:2b446bf9b93b 435
spastor 0:2b446bf9b93b 436 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 437 }
spastor 0:2b446bf9b93b 438
spastor 0:2b446bf9b93b 439
spastor 0:2b446bf9b93b 440 /*******************************************************************************
spastor 0:2b446bf9b93b 441 * Function Name : turnONEnable
spastor 0:2b446bf9b93b 442 * Description : TurnON Mode selection for sleep to wake function
spastor 0:2b446bf9b93b 443 * Input : H3LIS331DL_SLEEP_TO_WAKE_DIS/H3LIS331DL_SLEEP_TO_WAKE_ENA
spastor 0:2b446bf9b93b 444 * Output : None
spastor 0:2b446bf9b93b 445 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 446 *******************************************************************************/
spastor 0:2b446bf9b93b 447 status_t H3LIS331DL::turnONEnable(H3LIS331DL_Sleep_To_Wake_Conf_t stw) {
spastor 0:2b446bf9b93b 448 uint8_t value;
spastor 0:2b446bf9b93b 449
spastor 0:2b446bf9b93b 450 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG5, &value) )
spastor 0:2b446bf9b93b 451 return MEMS_ERROR;
spastor 0:2b446bf9b93b 452
spastor 0:2b446bf9b93b 453 value &= 0x00;
spastor 0:2b446bf9b93b 454 value |= (stw<<H3LIS331DL_TURN_ON);
spastor 0:2b446bf9b93b 455
spastor 0:2b446bf9b93b 456 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG5, value) )
spastor 0:2b446bf9b93b 457 return MEMS_ERROR;
spastor 0:2b446bf9b93b 458
spastor 0:2b446bf9b93b 459 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 460 }
spastor 0:2b446bf9b93b 461
spastor 0:2b446bf9b93b 462 #if 0
spastor 0:2b446bf9b93b 463 /*******************************************************************************
spastor 0:2b446bf9b93b 464 * Function Name : HPFilterReset
spastor 0:2b446bf9b93b 465 * Description : Reading register for reset the content of internal HP filter
spastor 0:2b446bf9b93b 466 * Input : None
spastor 0:2b446bf9b93b 467 * Output : None
spastor 0:2b446bf9b93b 468 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 469 *******************************************************************************/
spastor 0:2b446bf9b93b 470 status_t H3LIS331DL::HPFilterReset(void) {
spastor 0:2b446bf9b93b 471 uint8_t value;
spastor 0:2b446bf9b93b 472
spastor 0:2b446bf9b93b 473 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_HP_FILTER_RESET, &value) )
spastor 0:2b446bf9b93b 474 return MEMS_ERROR;
spastor 0:2b446bf9b93b 475
spastor 0:2b446bf9b93b 476 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 477 }
spastor 0:2b446bf9b93b 478 #endif
spastor 0:2b446bf9b93b 479
spastor 0:2b446bf9b93b 480 /*******************************************************************************
spastor 0:2b446bf9b93b 481 * Function Name : setReference
spastor 0:2b446bf9b93b 482 * Description : Sets Reference register acceleration value as a reference for HP filter
spastor 0:2b446bf9b93b 483 * Input : Value of reference acceleration value (0-255)
spastor 0:2b446bf9b93b 484 * Output : None
spastor 0:2b446bf9b93b 485 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 486 *******************************************************************************/
spastor 0:2b446bf9b93b 487 status_t H3LIS331DL::setReference(int8_t ref) {
spastor 0:2b446bf9b93b 488
spastor 0:2b446bf9b93b 489 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_REFERENCE_REG, ref) )
spastor 0:2b446bf9b93b 490 return MEMS_ERROR;
spastor 0:2b446bf9b93b 491
spastor 0:2b446bf9b93b 492 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 493 }
spastor 0:2b446bf9b93b 494
spastor 0:2b446bf9b93b 495
spastor 0:2b446bf9b93b 496 /*******************************************************************************
spastor 0:2b446bf9b93b 497 * Function Name : setHPFMode
spastor 0:2b446bf9b93b 498 * Description : Set High Pass Filter Modality
spastor 0:2b446bf9b93b 499 * Input : H3LIS331DL_HPM_NORMAL_MODE_RES/H3LIS331DL_HPM_REF_SIGNAL/H3LIS331DL_HPM_NORMAL_MODE
spastor 0:2b446bf9b93b 500 * Output : None
spastor 0:2b446bf9b93b 501 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 502 *******************************************************************************/
spastor 0:2b446bf9b93b 503 status_t H3LIS331DL::setHPFMode(H3LIS331DL_HPFMode_t hpm) {
spastor 0:2b446bf9b93b 504 uint8_t value;
spastor 0:2b446bf9b93b 505
spastor 0:2b446bf9b93b 506 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, &value) )
spastor 0:2b446bf9b93b 507 return MEMS_ERROR;
spastor 0:2b446bf9b93b 508
spastor 0:2b446bf9b93b 509 value &= 0x9F;
spastor 0:2b446bf9b93b 510 value |= (hpm<<H3LIS331DL_HPM);
spastor 0:2b446bf9b93b 511
spastor 0:2b446bf9b93b 512 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, value) )
spastor 0:2b446bf9b93b 513 return MEMS_ERROR;
spastor 0:2b446bf9b93b 514
spastor 0:2b446bf9b93b 515 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 516 }
spastor 0:2b446bf9b93b 517
spastor 0:2b446bf9b93b 518
spastor 0:2b446bf9b93b 519 /*******************************************************************************
spastor 0:2b446bf9b93b 520 * Function Name : setHPFCutOFF
spastor 0:2b446bf9b93b 521 * Description : Set High Pass CUT OFF Freq
spastor 0:2b446bf9b93b 522 * Input : H3LIS331DL_HPFCF [0,3]
spastor 0:2b446bf9b93b 523 * Output : None
spastor 0:2b446bf9b93b 524 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 525 *******************************************************************************/
spastor 0:2b446bf9b93b 526 status_t H3LIS331DL::setHPFCutOFF(H3LIS331DL_HPFCutOffFreq_t hpf) {
spastor 0:2b446bf9b93b 527 uint8_t value;
spastor 0:2b446bf9b93b 528
spastor 0:2b446bf9b93b 529 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, &value) )
spastor 0:2b446bf9b93b 530 return MEMS_ERROR;
spastor 0:2b446bf9b93b 531
spastor 0:2b446bf9b93b 532 value &= 0xFC;
spastor 0:2b446bf9b93b 533 value |= (hpf<<H3LIS331DL_HPCF);
spastor 0:2b446bf9b93b 534
spastor 0:2b446bf9b93b 535 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, value) )
spastor 0:2b446bf9b93b 536 return MEMS_ERROR;
spastor 0:2b446bf9b93b 537
spastor 0:2b446bf9b93b 538 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 539
spastor 0:2b446bf9b93b 540 }
spastor 0:2b446bf9b93b 541
spastor 0:2b446bf9b93b 542
spastor 0:2b446bf9b93b 543 /*******************************************************************************
spastor 0:2b446bf9b93b 544 * Function Name : setInt2HPEnable
spastor 0:2b446bf9b93b 545 * Description : Set Interrupt2 hp filter enable/disable
spastor 0:2b446bf9b93b 546 * Input : MEMS_ENABLE/MEMS_DISABLE
spastor 0:2b446bf9b93b 547 * example : H3LIS331DL_SetInt2HPEnable(MEMS_ENABLE)
spastor 0:2b446bf9b93b 548 * Output : None
spastor 0:2b446bf9b93b 549 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 550 *******************************************************************************/
spastor 0:2b446bf9b93b 551 status_t H3LIS331DL::setInt2HPEnable(State_t stat) {
spastor 0:2b446bf9b93b 552 uint8_t value;
spastor 0:2b446bf9b93b 553
spastor 0:2b446bf9b93b 554 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, &value) )
spastor 0:2b446bf9b93b 555 return MEMS_ERROR;
spastor 0:2b446bf9b93b 556
spastor 0:2b446bf9b93b 557 value &= 0xF7;
spastor 0:2b446bf9b93b 558 value |= stat<<H3LIS331DL_HPEN2 ;
spastor 0:2b446bf9b93b 559
spastor 0:2b446bf9b93b 560 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, value) )
spastor 0:2b446bf9b93b 561 return MEMS_ERROR;
spastor 0:2b446bf9b93b 562
spastor 0:2b446bf9b93b 563 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 564 }
spastor 0:2b446bf9b93b 565
spastor 0:2b446bf9b93b 566
spastor 0:2b446bf9b93b 567 /*******************************************************************************
spastor 0:2b446bf9b93b 568 * Function Name : setInt1HPEnable
spastor 0:2b446bf9b93b 569 * Description : Set Interrupt1 hp filter enable/disable
spastor 0:2b446bf9b93b 570 * Input : MEMS_ENABLE/MEMS_DISABLE
spastor 0:2b446bf9b93b 571 * example : H3LIS331DL_SetInt1HPEnable(MEMS_ENABLE)
spastor 0:2b446bf9b93b 572 * Output : None
spastor 0:2b446bf9b93b 573 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 574 *******************************************************************************/
spastor 0:2b446bf9b93b 575 status_t H3LIS331DL::setInt1HPEnable(State_t stat) {
spastor 0:2b446bf9b93b 576 uint8_t value;
spastor 0:2b446bf9b93b 577
spastor 0:2b446bf9b93b 578 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, &value) )
spastor 0:2b446bf9b93b 579 return MEMS_ERROR;
spastor 0:2b446bf9b93b 580
spastor 0:2b446bf9b93b 581 value &= 0xFB;
spastor 0:2b446bf9b93b 582 value |= stat<<H3LIS331DL_HPEN1 ;
spastor 0:2b446bf9b93b 583
spastor 0:2b446bf9b93b 584 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, value) )
spastor 0:2b446bf9b93b 585 return MEMS_ERROR;
spastor 0:2b446bf9b93b 586
spastor 0:2b446bf9b93b 587 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 588 }
spastor 0:2b446bf9b93b 589
spastor 0:2b446bf9b93b 590
spastor 0:2b446bf9b93b 591 /*******************************************************************************
spastor 0:2b446bf9b93b 592 * Function Name : int1LatchEnable
spastor 0:2b446bf9b93b 593 * Description : Enable Interrupt 1 Latching function
spastor 0:2b446bf9b93b 594 * Input : ENABLE/DISABLE
spastor 0:2b446bf9b93b 595 * Output : None
spastor 0:2b446bf9b93b 596 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 597 *******************************************************************************/
spastor 0:2b446bf9b93b 598 status_t H3LIS331DL::int1LatchEnable(State_t latch) {
spastor 0:2b446bf9b93b 599 uint8_t value;
spastor 0:2b446bf9b93b 600
spastor 0:2b446bf9b93b 601 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, &value) )
spastor 0:2b446bf9b93b 602 return MEMS_ERROR;
spastor 0:2b446bf9b93b 603
spastor 0:2b446bf9b93b 604 value &= 0xFB;
spastor 0:2b446bf9b93b 605 value |= latch<<H3LIS331DL_LIR1;
spastor 0:2b446bf9b93b 606
spastor 0:2b446bf9b93b 607 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, value) )
spastor 0:2b446bf9b93b 608 return MEMS_ERROR;
spastor 0:2b446bf9b93b 609
spastor 0:2b446bf9b93b 610 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 611 }
spastor 0:2b446bf9b93b 612
spastor 0:2b446bf9b93b 613
spastor 0:2b446bf9b93b 614 /*******************************************************************************
spastor 0:2b446bf9b93b 615 * Function Name : int2LatchEnable
spastor 0:2b446bf9b93b 616 * Description : Enable Interrupt 2 Latching function
spastor 0:2b446bf9b93b 617 * Input : ENABLE/DISABLE
spastor 0:2b446bf9b93b 618 * Output : None
spastor 0:2b446bf9b93b 619 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 620 *******************************************************************************/
spastor 0:2b446bf9b93b 621 status_t H3LIS331DL::int2LatchEnable(State_t latch) {
spastor 0:2b446bf9b93b 622 uint8_t value;
spastor 0:2b446bf9b93b 623
spastor 0:2b446bf9b93b 624 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, &value) )
spastor 0:2b446bf9b93b 625 return MEMS_ERROR;
spastor 0:2b446bf9b93b 626
spastor 0:2b446bf9b93b 627 value &= 0xDF;
spastor 0:2b446bf9b93b 628 value |= latch<<H3LIS331DL_LIR2;
spastor 0:2b446bf9b93b 629
spastor 0:2b446bf9b93b 630 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, value) )
spastor 0:2b446bf9b93b 631 return MEMS_ERROR;
spastor 0:2b446bf9b93b 632
spastor 0:2b446bf9b93b 633 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 634 }
spastor 0:2b446bf9b93b 635
spastor 0:2b446bf9b93b 636
spastor 0:2b446bf9b93b 637 /*******************************************************************************
spastor 0:2b446bf9b93b 638 * Function Name : resetInt1Latch
spastor 0:2b446bf9b93b 639 * Description : Reset Interrupt 1 Latching function
spastor 0:2b446bf9b93b 640 * Input : None
spastor 0:2b446bf9b93b 641 * Output : None
spastor 0:2b446bf9b93b 642 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 643 *******************************************************************************/
spastor 0:2b446bf9b93b 644 status_t H3LIS331DL::resetInt1Latch(void) {
spastor 0:2b446bf9b93b 645 uint8_t value;
spastor 0:2b446bf9b93b 646
spastor 0:2b446bf9b93b 647 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_SRC, &value) )
spastor 0:2b446bf9b93b 648 return MEMS_ERROR;
spastor 0:2b446bf9b93b 649
spastor 0:2b446bf9b93b 650 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 651 }
spastor 0:2b446bf9b93b 652
spastor 0:2b446bf9b93b 653
spastor 0:2b446bf9b93b 654 /*******************************************************************************
spastor 0:2b446bf9b93b 655 * Function Name : resetInt2Latch
spastor 0:2b446bf9b93b 656 * Description : Reset Interrupt 2 Latching function
spastor 0:2b446bf9b93b 657 * Input : None
spastor 0:2b446bf9b93b 658 * Output : None
spastor 0:2b446bf9b93b 659 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 660 *******************************************************************************/
spastor 0:2b446bf9b93b 661 status_t H3LIS331DL::resetInt2Latch(void) {
spastor 0:2b446bf9b93b 662 uint8_t value;
spastor 0:2b446bf9b93b 663
spastor 0:2b446bf9b93b 664 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_SRC, &value) )
spastor 0:2b446bf9b93b 665 return MEMS_ERROR;
spastor 0:2b446bf9b93b 666
spastor 0:2b446bf9b93b 667 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 668 }
spastor 0:2b446bf9b93b 669
spastor 0:2b446bf9b93b 670
spastor 0:2b446bf9b93b 671 /*******************************************************************************
spastor 0:2b446bf9b93b 672 * Function Name : setInt1Configuration
spastor 0:2b446bf9b93b 673 * Description : Interrupt 1 Configuration (without 6D_INT)
spastor 0:2b446bf9b93b 674 * Input : H3LIS331DL_INT_AND/OR | H3LIS331DL_INT_ZHIE_ENABLE/DISABLE | H3LIS331DL_INT_ZLIE_ENABLE/DISABLE...
spastor 0:2b446bf9b93b 675 * Output : None
spastor 0:2b446bf9b93b 676 * Note : You MUST use ALL input variable in the argument, as in example above
spastor 0:2b446bf9b93b 677 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 678 *******************************************************************************/
spastor 0:2b446bf9b93b 679 status_t H3LIS331DL::setInt1Configuration(H3LIS331DL_IntConf_t ic) {
spastor 0:2b446bf9b93b 680 uint8_t value;
spastor 0:2b446bf9b93b 681
spastor 0:2b446bf9b93b 682 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_CFG, &value) )
spastor 0:2b446bf9b93b 683 return MEMS_ERROR;
spastor 0:2b446bf9b93b 684
spastor 0:2b446bf9b93b 685 value &= 0x40;
spastor 0:2b446bf9b93b 686 value |= ic;
spastor 0:2b446bf9b93b 687
spastor 0:2b446bf9b93b 688 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_CFG, value) )
spastor 0:2b446bf9b93b 689 return MEMS_ERROR;
spastor 0:2b446bf9b93b 690
spastor 0:2b446bf9b93b 691 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 692 }
spastor 0:2b446bf9b93b 693
spastor 0:2b446bf9b93b 694
spastor 0:2b446bf9b93b 695 /*******************************************************************************
spastor 0:2b446bf9b93b 696 * Function Name : setInt2Configuration
spastor 0:2b446bf9b93b 697 * Description : Interrupt 2 Configuration (without 6D_INT)
spastor 0:2b446bf9b93b 698 * Input : H3LIS331DL_INT_AND/OR | H3LIS331DL_INT_ZHIE_ENABLE/DISABLE | H3LIS331DL_INT_ZLIE_ENABLE/DISABLE...
spastor 0:2b446bf9b93b 699 * Output : None
spastor 0:2b446bf9b93b 700 * Note : You MUST use all input variable in the argument, as example
spastor 0:2b446bf9b93b 701 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 702 *******************************************************************************/
spastor 0:2b446bf9b93b 703 status_t H3LIS331DL::setInt2Configuration(H3LIS331DL_IntConf_t ic) {
spastor 0:2b446bf9b93b 704 uint8_t value;
spastor 0:2b446bf9b93b 705
spastor 0:2b446bf9b93b 706 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_CFG, &value) )
spastor 0:2b446bf9b93b 707 return MEMS_ERROR;
spastor 0:2b446bf9b93b 708
spastor 0:2b446bf9b93b 709 value &= 0x40;
spastor 0:2b446bf9b93b 710 value |= ic;
spastor 0:2b446bf9b93b 711
spastor 0:2b446bf9b93b 712 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_CFG, value) )
spastor 0:2b446bf9b93b 713 return MEMS_ERROR;
spastor 0:2b446bf9b93b 714
spastor 0:2b446bf9b93b 715 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 716 }
spastor 0:2b446bf9b93b 717
spastor 0:2b446bf9b93b 718
spastor 0:2b446bf9b93b 719 /*******************************************************************************
spastor 0:2b446bf9b93b 720 * Function Name : setInt1Mode
spastor 0:2b446bf9b93b 721 * Description : Interrupt 1 Configuration mode (OR, 6D Movement, AND, 6D Position)
spastor 0:2b446bf9b93b 722 * Input : H3LIS331DL_INT_MODE_OR, H3LIS331DL_INT_MODE_6D_MOVEMENT, H3LIS331DL_INT_MODE_AND, H3LIS331DL_INT_MODE_6D_POSITION
spastor 0:2b446bf9b93b 723 * Output : None
spastor 0:2b446bf9b93b 724 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 725 *******************************************************************************/
spastor 0:2b446bf9b93b 726 status_t H3LIS331DL::setInt1Mode(H3LIS331DL_IntMode_t int_mode) {
spastor 0:2b446bf9b93b 727 uint8_t value;
spastor 0:2b446bf9b93b 728
spastor 0:2b446bf9b93b 729 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_CFG, &value) )
spastor 0:2b446bf9b93b 730 return MEMS_ERROR;
spastor 0:2b446bf9b93b 731
spastor 0:2b446bf9b93b 732 value &= 0x3F;
spastor 0:2b446bf9b93b 733 value |= (int_mode<<H3LIS331DL_INT_6D);
spastor 0:2b446bf9b93b 734
spastor 0:2b446bf9b93b 735 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_CFG, value) )
spastor 0:2b446bf9b93b 736 return MEMS_ERROR;
spastor 0:2b446bf9b93b 737
spastor 0:2b446bf9b93b 738 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 739 }
spastor 0:2b446bf9b93b 740
spastor 0:2b446bf9b93b 741
spastor 0:2b446bf9b93b 742 /*******************************************************************************
spastor 0:2b446bf9b93b 743 * Function Name : setInt2Mode
spastor 0:2b446bf9b93b 744 * Description : Interrupt 2 Configuration mode (OR, 6D Movement, AND, 6D Position)
spastor 0:2b446bf9b93b 745 * Input : H3LIS331DL_INT_MODE_OR, H3LIS331DL_INT_MODE_6D_MOVEMENT, H3LIS331DL_INT_MODE_AND, H3LIS331DL_INT_MODE_6D_POSITION
spastor 0:2b446bf9b93b 746 * Output : None
spastor 0:2b446bf9b93b 747 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 748 *******************************************************************************/
spastor 0:2b446bf9b93b 749 status_t H3LIS331DL::setInt2Mode(H3LIS331DL_IntMode_t int_mode) {
spastor 0:2b446bf9b93b 750 uint8_t value;
spastor 0:2b446bf9b93b 751
spastor 0:2b446bf9b93b 752 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_CFG, &value) )
spastor 0:2b446bf9b93b 753 return MEMS_ERROR;
spastor 0:2b446bf9b93b 754
spastor 0:2b446bf9b93b 755 value &= 0x3F;
spastor 0:2b446bf9b93b 756 value |= (int_mode<<H3LIS331DL_INT_6D);
spastor 0:2b446bf9b93b 757
spastor 0:2b446bf9b93b 758 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_CFG, value) )
spastor 0:2b446bf9b93b 759 return MEMS_ERROR;
spastor 0:2b446bf9b93b 760
spastor 0:2b446bf9b93b 761 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 762 }
spastor 0:2b446bf9b93b 763
spastor 0:2b446bf9b93b 764
spastor 0:2b446bf9b93b 765 /*******************************************************************************
spastor 0:2b446bf9b93b 766 * Function Name : get6DPositionInt1
spastor 0:2b446bf9b93b 767 * Description : 6D Interrupt 1 Position Detect
spastor 0:2b446bf9b93b 768 * Input : uint8_t to be filled with H3LIS331DL_POSITION_6D_t Typedef
spastor 0:2b446bf9b93b 769 * Output : None
spastor 0:2b446bf9b93b 770 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 771 *******************************************************************************/
spastor 0:2b446bf9b93b 772 status_t H3LIS331DL::get6DPositionInt1(uint8_t* val){
spastor 0:2b446bf9b93b 773 uint8_t value;
spastor 0:2b446bf9b93b 774
spastor 0:2b446bf9b93b 775 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_SRC, &value) )
spastor 0:2b446bf9b93b 776 return MEMS_ERROR;
spastor 0:2b446bf9b93b 777
spastor 0:2b446bf9b93b 778 value &= 0x7F;
spastor 0:2b446bf9b93b 779
spastor 0:2b446bf9b93b 780 switch (value){
spastor 0:2b446bf9b93b 781 case H3LIS331DL_UP_SX:
spastor 0:2b446bf9b93b 782 *val = H3LIS331DL_UP_SX;
spastor 0:2b446bf9b93b 783 break;
spastor 0:2b446bf9b93b 784 case H3LIS331DL_UP_DX:
spastor 0:2b446bf9b93b 785 *val = H3LIS331DL_UP_DX;
spastor 0:2b446bf9b93b 786 break;
spastor 0:2b446bf9b93b 787 case H3LIS331DL_DW_SX:
spastor 0:2b446bf9b93b 788 *val = H3LIS331DL_DW_SX;
spastor 0:2b446bf9b93b 789 break;
spastor 0:2b446bf9b93b 790 case H3LIS331DL_DW_DX:
spastor 0:2b446bf9b93b 791 *val = H3LIS331DL_DW_DX;
spastor 0:2b446bf9b93b 792 break;
spastor 0:2b446bf9b93b 793 case H3LIS331DL_TOP:
spastor 0:2b446bf9b93b 794 *val = H3LIS331DL_TOP;
spastor 0:2b446bf9b93b 795 break;
spastor 0:2b446bf9b93b 796 case H3LIS331DL_BOTTOM:
spastor 0:2b446bf9b93b 797 *val = H3LIS331DL_BOTTOM;
spastor 0:2b446bf9b93b 798 break;
spastor 0:2b446bf9b93b 799 }
spastor 0:2b446bf9b93b 800
spastor 0:2b446bf9b93b 801 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 802 }
spastor 0:2b446bf9b93b 803
spastor 0:2b446bf9b93b 804
spastor 0:2b446bf9b93b 805 /*******************************************************************************
spastor 0:2b446bf9b93b 806 * Function Name : get6DPositionInt2
spastor 0:2b446bf9b93b 807 * Description : 6D Interrupt 2 Position Detect
spastor 0:2b446bf9b93b 808 * Input : Byte to be filled with H3LIS331DL_POSITION_6D_t Typedef
spastor 0:2b446bf9b93b 809 * Output : None
spastor 0:2b446bf9b93b 810 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 811 *******************************************************************************/
spastor 0:2b446bf9b93b 812 status_t H3LIS331DL::get6DPositionInt2(uint8_t* val){
spastor 0:2b446bf9b93b 813 uint8_t value;
spastor 0:2b446bf9b93b 814
spastor 0:2b446bf9b93b 815 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_SRC, &value) )
spastor 0:2b446bf9b93b 816 return MEMS_ERROR;
spastor 0:2b446bf9b93b 817
spastor 0:2b446bf9b93b 818 value &= 0x7F;
spastor 0:2b446bf9b93b 819
spastor 0:2b446bf9b93b 820 switch (value){
spastor 0:2b446bf9b93b 821 case H3LIS331DL_UP_SX:
spastor 0:2b446bf9b93b 822 *val = H3LIS331DL_UP_SX;
spastor 0:2b446bf9b93b 823 break;
spastor 0:2b446bf9b93b 824 case H3LIS331DL_UP_DX:
spastor 0:2b446bf9b93b 825 *val = H3LIS331DL_UP_DX;
spastor 0:2b446bf9b93b 826 break;
spastor 0:2b446bf9b93b 827 case H3LIS331DL_DW_SX:
spastor 0:2b446bf9b93b 828 *val = H3LIS331DL_DW_SX;
spastor 0:2b446bf9b93b 829 break;
spastor 0:2b446bf9b93b 830 case H3LIS331DL_DW_DX:
spastor 0:2b446bf9b93b 831 *val = H3LIS331DL_DW_DX;
spastor 0:2b446bf9b93b 832 break;
spastor 0:2b446bf9b93b 833 case H3LIS331DL_TOP:
spastor 0:2b446bf9b93b 834 *val = H3LIS331DL_TOP;
spastor 0:2b446bf9b93b 835 break;
spastor 0:2b446bf9b93b 836 case H3LIS331DL_BOTTOM:
spastor 0:2b446bf9b93b 837 *val = H3LIS331DL_BOTTOM;
spastor 0:2b446bf9b93b 838 break;
spastor 0:2b446bf9b93b 839 }
spastor 0:2b446bf9b93b 840
spastor 0:2b446bf9b93b 841 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 842 }
spastor 0:2b446bf9b93b 843
spastor 0:2b446bf9b93b 844
spastor 0:2b446bf9b93b 845 /*******************************************************************************
spastor 0:2b446bf9b93b 846 * Function Name : setInt1Threshold
spastor 0:2b446bf9b93b 847 * Description : Sets Interrupt 1 Threshold
spastor 0:2b446bf9b93b 848 * Input : Threshold = [0,127]
spastor 0:2b446bf9b93b 849 * Output : None
spastor 0:2b446bf9b93b 850 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 851 *******************************************************************************/
spastor 0:2b446bf9b93b 852 status_t H3LIS331DL::setInt1Threshold(uint8_t ths) {
spastor 0:2b446bf9b93b 853 if (ths > 127)
spastor 0:2b446bf9b93b 854 return MEMS_ERROR;
spastor 0:2b446bf9b93b 855
spastor 0:2b446bf9b93b 856 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_THS, ths) )
spastor 0:2b446bf9b93b 857 return MEMS_ERROR;
spastor 0:2b446bf9b93b 858
spastor 0:2b446bf9b93b 859 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 860 }
spastor 0:2b446bf9b93b 861
spastor 0:2b446bf9b93b 862
spastor 0:2b446bf9b93b 863 /*******************************************************************************
spastor 0:2b446bf9b93b 864 * Function Name : setInt1Duration
spastor 0:2b446bf9b93b 865 * Description : Sets Interrupt 1 Duration
spastor 0:2b446bf9b93b 866 * Input : Duration = [0,127]
spastor 0:2b446bf9b93b 867 * Output : None
spastor 0:2b446bf9b93b 868 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 869 *******************************************************************************/
spastor 0:2b446bf9b93b 870 status_t H3LIS331DL::setInt1Duration(uint8_t id) {
spastor 0:2b446bf9b93b 871 if (id > 127)
spastor 0:2b446bf9b93b 872 return MEMS_ERROR;
spastor 0:2b446bf9b93b 873
spastor 0:2b446bf9b93b 874 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_DURATION, id) )
spastor 0:2b446bf9b93b 875 return MEMS_ERROR;
spastor 0:2b446bf9b93b 876
spastor 0:2b446bf9b93b 877 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 878 }
spastor 0:2b446bf9b93b 879
spastor 0:2b446bf9b93b 880
spastor 0:2b446bf9b93b 881 /*******************************************************************************
spastor 0:2b446bf9b93b 882 * Function Name : setInt2Threshold
spastor 0:2b446bf9b93b 883 * Description : Sets Interrupt 2 Threshold
spastor 0:2b446bf9b93b 884 * Input : Threshold = [0,127]
spastor 0:2b446bf9b93b 885 * Output : None
spastor 0:2b446bf9b93b 886 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 887 *******************************************************************************/
spastor 0:2b446bf9b93b 888 status_t H3LIS331DL::setInt2Threshold(uint8_t ths) {
spastor 0:2b446bf9b93b 889 if (ths > 127)
spastor 0:2b446bf9b93b 890 return MEMS_ERROR;
spastor 0:2b446bf9b93b 891
spastor 0:2b446bf9b93b 892 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_THS, ths) )
spastor 0:2b446bf9b93b 893 return MEMS_ERROR;
spastor 0:2b446bf9b93b 894
spastor 0:2b446bf9b93b 895 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 896 }
spastor 0:2b446bf9b93b 897
spastor 0:2b446bf9b93b 898
spastor 0:2b446bf9b93b 899 /*******************************************************************************
spastor 0:2b446bf9b93b 900 * Function Name : setInt2Duration
spastor 0:2b446bf9b93b 901 * Description : Sets Interrupt 2 Duration
spastor 0:2b446bf9b93b 902 * Input : Duration = [0,127]
spastor 0:2b446bf9b93b 903 * Output : None
spastor 0:2b446bf9b93b 904 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 905 *******************************************************************************/
spastor 0:2b446bf9b93b 906 status_t H3LIS331DL::setInt2Duration(uint8_t id) {
spastor 0:2b446bf9b93b 907 if (id > 127)
spastor 0:2b446bf9b93b 908 return MEMS_ERROR;
spastor 0:2b446bf9b93b 909
spastor 0:2b446bf9b93b 910 if( !writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_DURATION, id) )
spastor 0:2b446bf9b93b 911 return MEMS_ERROR;
spastor 0:2b446bf9b93b 912
spastor 0:2b446bf9b93b 913 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 914 }
spastor 0:2b446bf9b93b 915
spastor 0:2b446bf9b93b 916
spastor 0:2b446bf9b93b 917 /*******************************************************************************
spastor 0:2b446bf9b93b 918 * Function Name : getStatusReg
spastor 0:2b446bf9b93b 919 * Description : Read the status register
spastor 0:2b446bf9b93b 920 * Input : char to empty by Status Reg Value
spastor 0:2b446bf9b93b 921 * Output : None
spastor 0:2b446bf9b93b 922 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 923 *******************************************************************************/
spastor 0:2b446bf9b93b 924 status_t H3LIS331DL::getStatusReg(uint8_t* val) {
spastor 0:2b446bf9b93b 925
spastor 0:2b446bf9b93b 926 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_STATUS_REG, val) )
spastor 0:2b446bf9b93b 927 return MEMS_ERROR;
spastor 0:2b446bf9b93b 928
spastor 0:2b446bf9b93b 929 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 930 }
spastor 0:2b446bf9b93b 931
spastor 0:2b446bf9b93b 932 /*******************************************************************************
spastor 0:2b446bf9b93b 933 * Function Name : getStatusBIT
spastor 0:2b446bf9b93b 934 * Description : Read the status register BIT
spastor 0:2b446bf9b93b 935 * Input : H3LIS331DL_STATUS_REG_ZYXOR, H3LIS331DL_STATUS_REG_ZOR, H3LIS331DL_STATUS_REG_YOR, H3LIS331DL_STATUS_REG_XOR,
spastor 0:2b446bf9b93b 936 H3LIS331DL_STATUS_REG_ZYXDA, H3LIS331DL_STATUS_REG_ZDA, H3LIS331DL_STATUS_REG_YDA, H3LIS331DL_STATUS_REG_XDA,
spastor 0:2b446bf9b93b 937 H3LIS331DL_DATAREADY_BIT
spastor 0:2b446bf9b93b 938 * Output : status register BIT
spastor 0:2b446bf9b93b 939 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 940 *******************************************************************************/
spastor 0:2b446bf9b93b 941 status_t H3LIS331DL::getStatusBit(uint8_t statusBIT, uint8_t *val) {
spastor 0:2b446bf9b93b 942 uint8_t value;
spastor 0:2b446bf9b93b 943
spastor 0:2b446bf9b93b 944 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_STATUS_REG, &value) )
spastor 0:2b446bf9b93b 945 return MEMS_ERROR;
spastor 0:2b446bf9b93b 946
spastor 0:2b446bf9b93b 947 switch (statusBIT){
spastor 0:2b446bf9b93b 948 case H3LIS331DL_STATUS_REG_ZYXOR:
spastor 0:2b446bf9b93b 949 if(value &= H3LIS331DL_STATUS_REG_ZYXOR){
spastor 0:2b446bf9b93b 950 *val = MEMS_SET;
spastor 0:2b446bf9b93b 951 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 952 }
spastor 0:2b446bf9b93b 953 else{
spastor 0:2b446bf9b93b 954 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 955 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 956 }
spastor 0:2b446bf9b93b 957 case H3LIS331DL_STATUS_REG_ZOR:
spastor 0:2b446bf9b93b 958 if(value &= H3LIS331DL_STATUS_REG_ZOR){
spastor 0:2b446bf9b93b 959 *val = MEMS_SET;
spastor 0:2b446bf9b93b 960 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 961 }
spastor 0:2b446bf9b93b 962 else{
spastor 0:2b446bf9b93b 963 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 964 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 965 }
spastor 0:2b446bf9b93b 966 case H3LIS331DL_STATUS_REG_YOR:
spastor 0:2b446bf9b93b 967 if(value &= H3LIS331DL_STATUS_REG_YOR){
spastor 0:2b446bf9b93b 968 *val = MEMS_SET;
spastor 0:2b446bf9b93b 969 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 970 }
spastor 0:2b446bf9b93b 971 else{
spastor 0:2b446bf9b93b 972 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 973 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 974 }
spastor 0:2b446bf9b93b 975 case H3LIS331DL_STATUS_REG_XOR:
spastor 0:2b446bf9b93b 976 if(value &= H3LIS331DL_STATUS_REG_XOR){
spastor 0:2b446bf9b93b 977 *val = MEMS_SET;
spastor 0:2b446bf9b93b 978 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 979 }
spastor 0:2b446bf9b93b 980 else{
spastor 0:2b446bf9b93b 981 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 982 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 983 }
spastor 0:2b446bf9b93b 984 case H3LIS331DL_STATUS_REG_ZYXDA:
spastor 0:2b446bf9b93b 985 if(value &= H3LIS331DL_STATUS_REG_ZYXDA){
spastor 0:2b446bf9b93b 986 *val = MEMS_SET;
spastor 0:2b446bf9b93b 987 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 988 }
spastor 0:2b446bf9b93b 989 else{
spastor 0:2b446bf9b93b 990 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 991 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 992 }
spastor 0:2b446bf9b93b 993 case H3LIS331DL_STATUS_REG_ZDA:
spastor 0:2b446bf9b93b 994 if(value &= H3LIS331DL_STATUS_REG_ZDA){
spastor 0:2b446bf9b93b 995 *val = MEMS_SET;
spastor 0:2b446bf9b93b 996 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 997 }
spastor 0:2b446bf9b93b 998 else{
spastor 0:2b446bf9b93b 999 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1000 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1001 }
spastor 0:2b446bf9b93b 1002 case H3LIS331DL_STATUS_REG_YDA:
spastor 0:2b446bf9b93b 1003 if(value &= H3LIS331DL_STATUS_REG_YDA){
spastor 0:2b446bf9b93b 1004 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1005 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1006 }
spastor 0:2b446bf9b93b 1007 else{
spastor 0:2b446bf9b93b 1008 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1009 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1010 }
spastor 0:2b446bf9b93b 1011 case H3LIS331DL_STATUS_REG_XDA:
spastor 0:2b446bf9b93b 1012 if(value &= H3LIS331DL_STATUS_REG_XDA){
spastor 0:2b446bf9b93b 1013 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1014 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1015 }
spastor 0:2b446bf9b93b 1016 else{
spastor 0:2b446bf9b93b 1017 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1018 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1019 }
spastor 0:2b446bf9b93b 1020 }
spastor 0:2b446bf9b93b 1021
spastor 0:2b446bf9b93b 1022 return MEMS_ERROR;
spastor 0:2b446bf9b93b 1023 }
spastor 0:2b446bf9b93b 1024
spastor 0:2b446bf9b93b 1025
spastor 0:2b446bf9b93b 1026 /*******************************************************************************
spastor 0:2b446bf9b93b 1027 * Function Name : getAccAxesRaw
spastor 0:2b446bf9b93b 1028 * Description : Read the Acceleration Values Output Registers
spastor 0:2b446bf9b93b 1029 * Input : buffer to empty by AccAxesRaw_t Typedef
spastor 0:2b446bf9b93b 1030 * Output : None
spastor 0:2b446bf9b93b 1031 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 1032 *******************************************************************************/
spastor 0:2b446bf9b93b 1033 status_t H3LIS331DL::getAccAxesRaw(AxesRaw_t* buff) {
spastor 0:2b446bf9b93b 1034 uint8_t valueL = 0,valueH = 0;
spastor 0:2b446bf9b93b 1035 readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_OUT_X_L, &valueL);
spastor 0:2b446bf9b93b 1036 readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_OUT_X_H, &valueH);
spastor 0:2b446bf9b93b 1037 buff->AXIS_X = (valueH<<8)|valueL;
spastor 0:2b446bf9b93b 1038 readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_OUT_Y_L, &valueL);
spastor 0:2b446bf9b93b 1039 readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_OUT_Y_H, &valueH);
spastor 0:2b446bf9b93b 1040 buff->AXIS_Y = (valueH<<8)|valueL;
spastor 0:2b446bf9b93b 1041 readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_OUT_Z_L, &valueL);
spastor 0:2b446bf9b93b 1042 readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_OUT_Z_H, &valueH);
spastor 0:2b446bf9b93b 1043 buff->AXIS_Z = (valueH<<8)|valueL;
spastor 0:2b446bf9b93b 1044 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1045 }
spastor 0:2b446bf9b93b 1046
spastor 0:2b446bf9b93b 1047
spastor 0:2b446bf9b93b 1048 /*******************************************************************************
spastor 0:2b446bf9b93b 1049 * Function Name : getInt1Src
spastor 0:2b446bf9b93b 1050 * Description : Reset Interrupt 1 Latching function
spastor 0:2b446bf9b93b 1051 * Input : buffer to empty by Int1 Source Value
spastor 0:2b446bf9b93b 1052 * Output : None
spastor 0:2b446bf9b93b 1053 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 1054 *******************************************************************************/
spastor 0:2b446bf9b93b 1055 status_t H3LIS331DL::getInt1Src(uint8_t* val) {
spastor 0:2b446bf9b93b 1056 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_SRC, val) )
spastor 0:2b446bf9b93b 1057 return MEMS_ERROR;
spastor 0:2b446bf9b93b 1058
spastor 0:2b446bf9b93b 1059 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1060 }
spastor 0:2b446bf9b93b 1061
spastor 0:2b446bf9b93b 1062
spastor 0:2b446bf9b93b 1063 /*******************************************************************************
spastor 0:2b446bf9b93b 1064 * Function Name : getInt2Src
spastor 0:2b446bf9b93b 1065 * Description : Reset Interrupt 2 Latching function
spastor 0:2b446bf9b93b 1066 * Input : buffer to empty by Int2 Source Value
spastor 0:2b446bf9b93b 1067 * Output : None
spastor 0:2b446bf9b93b 1068 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 1069 *******************************************************************************/
spastor 0:2b446bf9b93b 1070 status_t H3LIS331DL::getInt2Src(uint8_t* val) {
spastor 0:2b446bf9b93b 1071 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_SRC, val) )
spastor 0:2b446bf9b93b 1072 return MEMS_ERROR;
spastor 0:2b446bf9b93b 1073
spastor 0:2b446bf9b93b 1074 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1075 }
spastor 0:2b446bf9b93b 1076
spastor 0:2b446bf9b93b 1077
spastor 0:2b446bf9b93b 1078 /*******************************************************************************
spastor 0:2b446bf9b93b 1079 * Function Name : getInt1SrcBit
spastor 0:2b446bf9b93b 1080 * Description : Reset Interrupt 1 Latching function
spastor 0:2b446bf9b93b 1081 * Input : H3LIS331DL_INT1_SRC_IA, H3LIS331DL_INT1_SRC_ZH, H3LIS331DL_INT1_SRC_ZL .....
spastor 0:2b446bf9b93b 1082 * Output : None
spastor 0:2b446bf9b93b 1083 * Return : Status of BIT [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 1084 *******************************************************************************/
spastor 0:2b446bf9b93b 1085 status_t H3LIS331DL::getInt1SrcBit(uint8_t statusBIT, uint8_t *val) {
spastor 0:2b446bf9b93b 1086 uint8_t value;
spastor 0:2b446bf9b93b 1087
spastor 0:2b446bf9b93b 1088 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_SRC, &value) )
spastor 0:2b446bf9b93b 1089 return MEMS_ERROR;
spastor 0:2b446bf9b93b 1090
spastor 0:2b446bf9b93b 1091 if(statusBIT == H3LIS331DL_INT_SRC_IA){
spastor 0:2b446bf9b93b 1092 if(value &= H3LIS331DL_INT_SRC_IA){
spastor 0:2b446bf9b93b 1093 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1094 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1095 }
spastor 0:2b446bf9b93b 1096 else{
spastor 0:2b446bf9b93b 1097 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1098 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1099 }
spastor 0:2b446bf9b93b 1100 }
spastor 0:2b446bf9b93b 1101
spastor 0:2b446bf9b93b 1102 if(statusBIT == H3LIS331DL_INT_SRC_ZH){
spastor 0:2b446bf9b93b 1103 if(value &= H3LIS331DL_INT_SRC_ZH){
spastor 0:2b446bf9b93b 1104 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1105 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1106 }
spastor 0:2b446bf9b93b 1107 else{
spastor 0:2b446bf9b93b 1108 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1109 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1110 }
spastor 0:2b446bf9b93b 1111 }
spastor 0:2b446bf9b93b 1112
spastor 0:2b446bf9b93b 1113 if(statusBIT == H3LIS331DL_INT_SRC_ZL){
spastor 0:2b446bf9b93b 1114 if(value &= H3LIS331DL_INT_SRC_ZL){
spastor 0:2b446bf9b93b 1115 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1116 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1117 }
spastor 0:2b446bf9b93b 1118 else{
spastor 0:2b446bf9b93b 1119 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1120 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1121 }
spastor 0:2b446bf9b93b 1122 }
spastor 0:2b446bf9b93b 1123
spastor 0:2b446bf9b93b 1124 if(statusBIT == H3LIS331DL_INT_SRC_YH){
spastor 0:2b446bf9b93b 1125 if(value &= H3LIS331DL_INT_SRC_YH){
spastor 0:2b446bf9b93b 1126 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1127 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1128 }
spastor 0:2b446bf9b93b 1129 else{
spastor 0:2b446bf9b93b 1130 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1131 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1132 }
spastor 0:2b446bf9b93b 1133 }
spastor 0:2b446bf9b93b 1134
spastor 0:2b446bf9b93b 1135 if(statusBIT == H3LIS331DL_INT_SRC_YL){
spastor 0:2b446bf9b93b 1136 if(value &= H3LIS331DL_INT_SRC_YL){
spastor 0:2b446bf9b93b 1137 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1138 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1139 }
spastor 0:2b446bf9b93b 1140 else{
spastor 0:2b446bf9b93b 1141 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1142 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1143 }
spastor 0:2b446bf9b93b 1144 }
spastor 0:2b446bf9b93b 1145
spastor 0:2b446bf9b93b 1146 if(statusBIT == H3LIS331DL_INT_SRC_XH){
spastor 0:2b446bf9b93b 1147 if(value &= H3LIS331DL_INT_SRC_XH){
spastor 0:2b446bf9b93b 1148 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1149 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1150 }
spastor 0:2b446bf9b93b 1151 else{
spastor 0:2b446bf9b93b 1152 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1153 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1154 }
spastor 0:2b446bf9b93b 1155 }
spastor 0:2b446bf9b93b 1156
spastor 0:2b446bf9b93b 1157 if(statusBIT == H3LIS331DL_INT_SRC_XL){
spastor 0:2b446bf9b93b 1158 if(value &= H3LIS331DL_INT_SRC_XL){
spastor 0:2b446bf9b93b 1159 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1160 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1161 }
spastor 0:2b446bf9b93b 1162 else{
spastor 0:2b446bf9b93b 1163 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1164 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1165 }
spastor 0:2b446bf9b93b 1166 }
spastor 0:2b446bf9b93b 1167 return MEMS_ERROR;
spastor 0:2b446bf9b93b 1168 }
spastor 0:2b446bf9b93b 1169
spastor 0:2b446bf9b93b 1170
spastor 0:2b446bf9b93b 1171 /*******************************************************************************
spastor 0:2b446bf9b93b 1172 * Function Name : getInt2SrcBit
spastor 0:2b446bf9b93b 1173 * Description : Reset Interrupt 2 Latching function
spastor 0:2b446bf9b93b 1174 * Input : H3LIS331DL_INT_SRC_IA, H3LIS331DL_INT_SRC_ZH, H3LIS331DL_INT_SRC_ZL .....
spastor 0:2b446bf9b93b 1175 * Output : None
spastor 0:2b446bf9b93b 1176 * Return : Status of BIT [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 1177 *******************************************************************************/
spastor 0:2b446bf9b93b 1178 status_t H3LIS331DL::getInt2SrcBit(uint8_t statusBIT, uint8_t *val) {
spastor 0:2b446bf9b93b 1179 uint8_t value;
spastor 0:2b446bf9b93b 1180
spastor 0:2b446bf9b93b 1181 if( !readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_SRC, &value) )
spastor 0:2b446bf9b93b 1182 return MEMS_ERROR;
spastor 0:2b446bf9b93b 1183
spastor 0:2b446bf9b93b 1184 if(statusBIT == H3LIS331DL_INT_SRC_IA){
spastor 0:2b446bf9b93b 1185 if(value &= H3LIS331DL_INT_SRC_IA){
spastor 0:2b446bf9b93b 1186 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1187 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1188 }
spastor 0:2b446bf9b93b 1189 else{
spastor 0:2b446bf9b93b 1190 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1191 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1192 }
spastor 0:2b446bf9b93b 1193 }
spastor 0:2b446bf9b93b 1194
spastor 0:2b446bf9b93b 1195 if(statusBIT == H3LIS331DL_INT_SRC_ZH){
spastor 0:2b446bf9b93b 1196 if(value &= H3LIS331DL_INT_SRC_ZH){
spastor 0:2b446bf9b93b 1197 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1198 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1199 }
spastor 0:2b446bf9b93b 1200 else{
spastor 0:2b446bf9b93b 1201 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1202 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1203 }
spastor 0:2b446bf9b93b 1204 }
spastor 0:2b446bf9b93b 1205
spastor 0:2b446bf9b93b 1206 if(statusBIT == H3LIS331DL_INT_SRC_ZL){
spastor 0:2b446bf9b93b 1207 if(value &= H3LIS331DL_INT_SRC_ZL){
spastor 0:2b446bf9b93b 1208 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1209 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1210 }
spastor 0:2b446bf9b93b 1211 else{
spastor 0:2b446bf9b93b 1212 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1213 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1214 }
spastor 0:2b446bf9b93b 1215 }
spastor 0:2b446bf9b93b 1216
spastor 0:2b446bf9b93b 1217 if(statusBIT == H3LIS331DL_INT_SRC_YH){
spastor 0:2b446bf9b93b 1218 if(value &= H3LIS331DL_INT_SRC_YH){
spastor 0:2b446bf9b93b 1219 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1220 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1221 }
spastor 0:2b446bf9b93b 1222 else{
spastor 0:2b446bf9b93b 1223 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1224 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1225 }
spastor 0:2b446bf9b93b 1226 }
spastor 0:2b446bf9b93b 1227
spastor 0:2b446bf9b93b 1228 if(statusBIT == H3LIS331DL_INT_SRC_YL){
spastor 0:2b446bf9b93b 1229 if(value &= H3LIS331DL_INT_SRC_YL){
spastor 0:2b446bf9b93b 1230 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1231 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1232 }
spastor 0:2b446bf9b93b 1233 else{
spastor 0:2b446bf9b93b 1234 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1235 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1236 }
spastor 0:2b446bf9b93b 1237 }
spastor 0:2b446bf9b93b 1238
spastor 0:2b446bf9b93b 1239 if(statusBIT == H3LIS331DL_INT_SRC_XH){
spastor 0:2b446bf9b93b 1240 if(value &= H3LIS331DL_INT_SRC_XH){
spastor 0:2b446bf9b93b 1241 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1242 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1243 }
spastor 0:2b446bf9b93b 1244 else{
spastor 0:2b446bf9b93b 1245 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1246 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1247 }
spastor 0:2b446bf9b93b 1248 }
spastor 0:2b446bf9b93b 1249
spastor 0:2b446bf9b93b 1250 if(statusBIT == H3LIS331DL_INT_SRC_XL){
spastor 0:2b446bf9b93b 1251 if(value &= H3LIS331DL_INT_SRC_XL){
spastor 0:2b446bf9b93b 1252 *val = MEMS_SET;
spastor 0:2b446bf9b93b 1253 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1254 }
spastor 0:2b446bf9b93b 1255 else{
spastor 0:2b446bf9b93b 1256 *val = MEMS_RESET;
spastor 0:2b446bf9b93b 1257 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1258 }
spastor 0:2b446bf9b93b 1259 }
spastor 0:2b446bf9b93b 1260 return MEMS_ERROR;
spastor 0:2b446bf9b93b 1261 }
spastor 0:2b446bf9b93b 1262
spastor 0:2b446bf9b93b 1263 /*******************************************************************************
spastor 0:2b446bf9b93b 1264 * Function Name : readReg
spastor 0:2b446bf9b93b 1265 * Description : Generic Reading function. It must be full filled with either
spastor 0:2b446bf9b93b 1266 * : I2C or SPI reading functions
spastor 0:2b446bf9b93b 1267 * Input : Register Address
spastor 0:2b446bf9b93b 1268 * Output : Data Read
spastor 0:2b446bf9b93b 1269 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 1270 *******************************************************************************/
spastor 0:2b446bf9b93b 1271 uint8_t H3LIS331DL::readReg(uint8_t deviceAddr, uint8_t Reg, uint8_t* Data) {
spastor 0:2b446bf9b93b 1272
spastor 0:2b446bf9b93b 1273 //To be completed with either I2c or SPI reading function
spastor 0:2b446bf9b93b 1274 // i.e. *Data = SPI_Mems_Read_Reg( Reg );
spastor 0:2b446bf9b93b 1275 // i.e. if(!I2C_BufferRead(Data, deviceAddr, Reg, 1))
spastor 0:2b446bf9b93b 1276 // return MEMS_ERROR;
spastor 0:2b446bf9b93b 1277 // else
spastor 0:2b446bf9b93b 1278 // return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1279
spastor 0:2b446bf9b93b 1280 i2c->write((deviceAddr << 1) & 0xFE, (char *)&Reg, 1);
spastor 0:2b446bf9b93b 1281
spastor 0:2b446bf9b93b 1282 i2c->read((deviceAddr << 1) | 0x01, (char *)Data, 2);
spastor 0:2b446bf9b93b 1283
spastor 0:2b446bf9b93b 1284 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1285 }
spastor 0:2b446bf9b93b 1286
spastor 0:2b446bf9b93b 1287 /*******************************************************************************
spastor 0:2b446bf9b93b 1288 * Function Name : writeReg
spastor 0:2b446bf9b93b 1289 * Description : Generic Writing function. It must be full filled with either
spastor 0:2b446bf9b93b 1290 * : I2C or SPI writing function
spastor 0:2b446bf9b93b 1291 * Input : Register Address, Data to be written
spastor 0:2b446bf9b93b 1292 * Output : None
spastor 0:2b446bf9b93b 1293 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
spastor 0:2b446bf9b93b 1294 *******************************************************************************/
spastor 0:2b446bf9b93b 1295 uint8_t H3LIS331DL::writeReg(uint8_t deviceAddress, uint8_t WriteAddr, uint8_t Data) {
spastor 0:2b446bf9b93b 1296
spastor 0:2b446bf9b93b 1297 //To be completed with either I2c or SPI writing function
spastor 0:2b446bf9b93b 1298 // i.e. SPI_Mems_Write_Reg(Reg, Data);
spastor 0:2b446bf9b93b 1299 // i.e. I2C_ByteWrite(&Data, deviceAddress, WriteAddr);
spastor 0:2b446bf9b93b 1300 // return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1301 // Writes val to address register on device
spastor 0:2b446bf9b93b 1302 uint8_t buf[2];
spastor 0:2b446bf9b93b 1303
spastor 0:2b446bf9b93b 1304 buf[0] = WriteAddr;
spastor 0:2b446bf9b93b 1305 buf[1] = Data;
spastor 0:2b446bf9b93b 1306 i2c->write((deviceAddress << 1) & 0xFE, (char *)buf, 2);
spastor 0:2b446bf9b93b 1307 return MEMS_SUCCESS;
spastor 0:2b446bf9b93b 1308 }