LIS3DH & BLE broadcast example for VTT Node V3 & mbed

Dependencies:   BLE_API TMP_nrf51 mbed nRF51822

Committer:
jejuho
Date:
Mon Jan 25 13:27:15 2016 +0000
Revision:
1:bd7fd35251ab
Parent:
0:de3e4a57ebe0
Initial version.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jejuho 0:de3e4a57ebe0 1 #include "LIS3DH.h"
jejuho 0:de3e4a57ebe0 2
jejuho 0:de3e4a57ebe0 3 LIS3DH::LIS3DH(PinName mosi, PinName miso, PinName ss, PinName sck): _spi(mosi,miso,sck), _ss(ss){
jejuho 0:de3e4a57ebe0 4 // Make sure CS is high
jejuho 0:de3e4a57ebe0 5 _ss = 1;
jejuho 0:de3e4a57ebe0 6 // Setup the spi for 8 bit data, high steady state clock,
jejuho 0:de3e4a57ebe0 7 // second edge capture, with a 1MHz clock rate
jejuho 0:de3e4a57ebe0 8 _spi.format(8,3);
jejuho 0:de3e4a57ebe0 9 _spi.frequency(8000000);
jejuho 0:de3e4a57ebe0 10
jejuho 0:de3e4a57ebe0 11
jejuho 0:de3e4a57ebe0 12 }
jejuho 0:de3e4a57ebe0 13
jejuho 0:de3e4a57ebe0 14 u8_t LIS3DH::InitLIS3DH(LIS3DH_Mode_t Mode, LIS3DH_ODR_t Odr, LIS3DH_Fullscale_t Grange)
jejuho 0:de3e4a57ebe0 15 {
jejuho 0:de3e4a57ebe0 16 uint8_t response;
jejuho 0:de3e4a57ebe0 17 uint8_t Tmp;
jejuho 0:de3e4a57ebe0 18
jejuho 0:de3e4a57ebe0 19 LIS3DH_GetWHO_AM_I(&Tmp);
jejuho 0:de3e4a57ebe0 20
jejuho 0:de3e4a57ebe0 21 response = LIS3DH_SetODR(Odr);
jejuho 0:de3e4a57ebe0 22
jejuho 0:de3e4a57ebe0 23 //set PowerMode
jejuho 0:de3e4a57ebe0 24 response = LIS3DH_SetMode(Mode);
jejuho 0:de3e4a57ebe0 25
jejuho 0:de3e4a57ebe0 26 //set Fullscale
jejuho 0:de3e4a57ebe0 27 response = LIS3DH_SetFullScale(Grange);
jejuho 0:de3e4a57ebe0 28
jejuho 0:de3e4a57ebe0 29 //set axis Enable
jejuho 0:de3e4a57ebe0 30 response = LIS3DH_SetAxis(LIS3DH_X_ENABLE | LIS3DH_Y_ENABLE | LIS3DH_Z_ENABLE);
jejuho 0:de3e4a57ebe0 31
jejuho 0:de3e4a57ebe0 32 return response;
jejuho 0:de3e4a57ebe0 33 }
jejuho 0:de3e4a57ebe0 34
jejuho 0:de3e4a57ebe0 35 /*******************************************************************************
jejuho 0:de3e4a57ebe0 36 * Function Name : LIS3DH_GetStatusAUX
jejuho 0:de3e4a57ebe0 37 * Description : Read the AUX status register
jejuho 0:de3e4a57ebe0 38 * Input : Char to empty by status register buffer
jejuho 0:de3e4a57ebe0 39 * Output : None
jejuho 0:de3e4a57ebe0 40 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 41 *******************************************************************************/
jejuho 0:de3e4a57ebe0 42 status_t LIS3DH::LIS3DH_GetStatusAUX(u8_t* val) {
jejuho 0:de3e4a57ebe0 43
jejuho 0:de3e4a57ebe0 44 if( !LIS3DH_ReadReg(LIS3DH_STATUS_AUX, val) )
jejuho 0:de3e4a57ebe0 45 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 46
jejuho 0:de3e4a57ebe0 47 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 48 }
jejuho 0:de3e4a57ebe0 49
jejuho 0:de3e4a57ebe0 50 /*******************************************************************************
jejuho 0:de3e4a57ebe0 51 * Function Name : LIS3DH_GetStatusAUXBIT
jejuho 0:de3e4a57ebe0 52 * Description : Read the AUX status register BIT
jejuho 0:de3e4a57ebe0 53 * Input : LIS3DH_STATUS_AUX_321OR, LIS3DH_STATUS_AUX_3OR, LIS3DH_STATUS_AUX_2OR, LIS3DH_STATUS_AUX_1OR,
jejuho 0:de3e4a57ebe0 54 LIS3DH_STATUS_AUX_321DA, LIS3DH_STATUS_AUX_3DA, LIS3DH_STATUS_AUX_2DA, LIS3DH_STATUS_AUX_1DA
jejuho 0:de3e4a57ebe0 55 * Output : None
jejuho 0:de3e4a57ebe0 56 * Return : Status of BIT [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 57 *******************************************************************************/
jejuho 0:de3e4a57ebe0 58 status_t LIS3DH::LIS3DH_GetStatusAUXBit(u8_t statusBIT, u8_t* val) {
jejuho 0:de3e4a57ebe0 59 u8_t value;
jejuho 0:de3e4a57ebe0 60
jejuho 0:de3e4a57ebe0 61 if( !LIS3DH_ReadReg(LIS3DH_STATUS_AUX, &value) )
jejuho 0:de3e4a57ebe0 62 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 63
jejuho 0:de3e4a57ebe0 64 if(statusBIT == LIS3DH_STATUS_AUX_321OR){
jejuho 0:de3e4a57ebe0 65 if(value &= LIS3DH_STATUS_AUX_321OR){
jejuho 0:de3e4a57ebe0 66 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 67 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 68 }
jejuho 0:de3e4a57ebe0 69 else{
jejuho 0:de3e4a57ebe0 70 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 71 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 72 }
jejuho 0:de3e4a57ebe0 73 }
jejuho 0:de3e4a57ebe0 74
jejuho 0:de3e4a57ebe0 75 if(statusBIT == LIS3DH_STATUS_AUX_3OR){
jejuho 0:de3e4a57ebe0 76 if(value &= LIS3DH_STATUS_AUX_3OR){
jejuho 0:de3e4a57ebe0 77 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 78 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 79 }
jejuho 0:de3e4a57ebe0 80 else{
jejuho 0:de3e4a57ebe0 81 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 82 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 83 }
jejuho 0:de3e4a57ebe0 84 }
jejuho 0:de3e4a57ebe0 85
jejuho 0:de3e4a57ebe0 86 if(statusBIT == LIS3DH_STATUS_AUX_2OR){
jejuho 0:de3e4a57ebe0 87 if(value &= LIS3DH_STATUS_AUX_2OR){
jejuho 0:de3e4a57ebe0 88 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 89 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 90 }
jejuho 0:de3e4a57ebe0 91 else{
jejuho 0:de3e4a57ebe0 92 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 93 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 94 }
jejuho 0:de3e4a57ebe0 95 }
jejuho 0:de3e4a57ebe0 96
jejuho 0:de3e4a57ebe0 97 if(statusBIT == LIS3DH_STATUS_AUX_1OR){
jejuho 0:de3e4a57ebe0 98 if(value &= LIS3DH_STATUS_AUX_1OR){
jejuho 0:de3e4a57ebe0 99 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 100 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 101 }
jejuho 0:de3e4a57ebe0 102 else{
jejuho 0:de3e4a57ebe0 103 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 104 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 105 }
jejuho 0:de3e4a57ebe0 106 }
jejuho 0:de3e4a57ebe0 107
jejuho 0:de3e4a57ebe0 108 if(statusBIT == LIS3DH_STATUS_AUX_321DA){
jejuho 0:de3e4a57ebe0 109 if(value &= LIS3DH_STATUS_AUX_321DA) {
jejuho 0:de3e4a57ebe0 110 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 111 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 112 }
jejuho 0:de3e4a57ebe0 113 else{
jejuho 0:de3e4a57ebe0 114 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 115 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 116 }
jejuho 0:de3e4a57ebe0 117 }
jejuho 0:de3e4a57ebe0 118
jejuho 0:de3e4a57ebe0 119 if(statusBIT == LIS3DH_STATUS_AUX_3DA){
jejuho 0:de3e4a57ebe0 120 if(value &= LIS3DH_STATUS_AUX_3DA){
jejuho 0:de3e4a57ebe0 121 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 122 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 123 }
jejuho 0:de3e4a57ebe0 124 else{
jejuho 0:de3e4a57ebe0 125 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 126 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 127 }
jejuho 0:de3e4a57ebe0 128 }
jejuho 0:de3e4a57ebe0 129
jejuho 0:de3e4a57ebe0 130 if(statusBIT == LIS3DH_STATUS_AUX_2DA){
jejuho 0:de3e4a57ebe0 131 if(value &= LIS3DH_STATUS_AUX_2DA){
jejuho 0:de3e4a57ebe0 132 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 133 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 134 }
jejuho 0:de3e4a57ebe0 135 else{
jejuho 0:de3e4a57ebe0 136 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 137 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 138 }
jejuho 0:de3e4a57ebe0 139 }
jejuho 0:de3e4a57ebe0 140
jejuho 0:de3e4a57ebe0 141 if(statusBIT == LIS3DH_STATUS_AUX_1DA){
jejuho 0:de3e4a57ebe0 142 if(value &= LIS3DH_STATUS_AUX_1DA){
jejuho 0:de3e4a57ebe0 143 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 144 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 145 }
jejuho 0:de3e4a57ebe0 146 else{
jejuho 0:de3e4a57ebe0 147 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 148 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 149 }
jejuho 0:de3e4a57ebe0 150 }
jejuho 0:de3e4a57ebe0 151 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 152 }
jejuho 0:de3e4a57ebe0 153
jejuho 0:de3e4a57ebe0 154 u8_t LIS3DH::SetLIS3DHActivityDetection(uint8_t Th, LIS3DH_Int1Mode_t Mode, uint8_t OnOff)
jejuho 0:de3e4a57ebe0 155 {
jejuho 0:de3e4a57ebe0 156 uint8_t response;
jejuho 0:de3e4a57ebe0 157
jejuho 0:de3e4a57ebe0 158 response = LIS3DH_SetInt1Pin(LIS3DH_CLICK_ON_PIN_INT1_DISABLE | LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE |
jejuho 0:de3e4a57ebe0 159 LIS3DH_I1_INT2_ON_PIN_INT1_DISABLE | LIS3DH_I1_DRDY1_ON_INT1_DISABLE | LIS3DH_I1_DRDY2_ON_INT1_DISABLE |
jejuho 0:de3e4a57ebe0 160 LIS3DH_WTM_ON_INT1_DISABLE | LIS3DH_INT1_OVERRUN_DISABLE );
jejuho 0:de3e4a57ebe0 161
jejuho 0:de3e4a57ebe0 162 //set Interrupt Threshold
jejuho 0:de3e4a57ebe0 163 response = LIS3DH_SetInt1Threshold(Th);
jejuho 0:de3e4a57ebe0 164
jejuho 0:de3e4a57ebe0 165 //set Interrupt configuration (all enabled)
jejuho 0:de3e4a57ebe0 166 if(OnOff)
jejuho 0:de3e4a57ebe0 167 {
jejuho 0:de3e4a57ebe0 168 response = LIS3DH_SetIntConfiguration(LIS3DH_INT1_ZHIE_ENABLE | LIS3DH_INT1_ZLIE_ENABLE |
jejuho 0:de3e4a57ebe0 169 LIS3DH_INT1_YHIE_ENABLE | LIS3DH_INT1_YLIE_ENABLE |
jejuho 0:de3e4a57ebe0 170 LIS3DH_INT1_XHIE_ENABLE | LIS3DH_INT1_XLIE_ENABLE );
jejuho 0:de3e4a57ebe0 171 }
jejuho 0:de3e4a57ebe0 172 else
jejuho 0:de3e4a57ebe0 173 {
jejuho 0:de3e4a57ebe0 174 response = LIS3DH_SetIntConfiguration(LIS3DH_INT1_ZHIE_DISABLE | LIS3DH_INT1_ZLIE_DISABLE |
jejuho 0:de3e4a57ebe0 175 LIS3DH_INT1_YHIE_DISABLE | LIS3DH_INT1_YLIE_DISABLE |
jejuho 0:de3e4a57ebe0 176 LIS3DH_INT1_XHIE_DISABLE | LIS3DH_INT1_XLIE_DISABLE );
jejuho 0:de3e4a57ebe0 177 }
jejuho 0:de3e4a57ebe0 178
jejuho 0:de3e4a57ebe0 179 //set Interrupt Mode
jejuho 0:de3e4a57ebe0 180 response = LIS3DH_SetIntMode(Mode);
jejuho 0:de3e4a57ebe0 181
jejuho 0:de3e4a57ebe0 182 return response;
jejuho 0:de3e4a57ebe0 183 }
jejuho 0:de3e4a57ebe0 184
jejuho 0:de3e4a57ebe0 185 /*******************************************************************************
jejuho 0:de3e4a57ebe0 186 * Function Name : LIS3DH_SetODR
jejuho 0:de3e4a57ebe0 187 * Description : Sets LIS3DH Output Data Rate
jejuho 0:de3e4a57ebe0 188 * Input : Output Data Rate
jejuho 0:de3e4a57ebe0 189 * Output : None
jejuho 0:de3e4a57ebe0 190 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 191 *******************************************************************************/
jejuho 0:de3e4a57ebe0 192 status_t LIS3DH::LIS3DH_SetODR(LIS3DH_ODR_t ov){
jejuho 0:de3e4a57ebe0 193 u8_t value;
jejuho 0:de3e4a57ebe0 194
jejuho 0:de3e4a57ebe0 195 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) )
jejuho 0:de3e4a57ebe0 196 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 197
jejuho 0:de3e4a57ebe0 198 value &= 0x0f;
jejuho 0:de3e4a57ebe0 199 value |= ov<<LIS3DH_ODR_BIT;
jejuho 0:de3e4a57ebe0 200
jejuho 0:de3e4a57ebe0 201 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) )
jejuho 0:de3e4a57ebe0 202 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 203
jejuho 0:de3e4a57ebe0 204 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 205 }
jejuho 0:de3e4a57ebe0 206
jejuho 0:de3e4a57ebe0 207 /*******************************************************************************
jejuho 0:de3e4a57ebe0 208 * Function Name : LIS3DH_SetMode
jejuho 0:de3e4a57ebe0 209 * Description : Sets LIS3DH Operating Mode
jejuho 0:de3e4a57ebe0 210 * Input : Modality (LIS3DH_NORMAL, LIS3DH_LOW_POWER, LIS3DH_POWER_DOWN)
jejuho 0:de3e4a57ebe0 211 * Output : None
jejuho 0:de3e4a57ebe0 212 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 213 *******************************************************************************/
jejuho 0:de3e4a57ebe0 214 status_t LIS3DH::LIS3DH_SetMode(LIS3DH_Mode_t md) {
jejuho 0:de3e4a57ebe0 215 u8_t value;
jejuho 0:de3e4a57ebe0 216 u8_t value2;
jejuho 0:de3e4a57ebe0 217 static u8_t ODR_old_value;
jejuho 0:de3e4a57ebe0 218
jejuho 0:de3e4a57ebe0 219 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) )
jejuho 0:de3e4a57ebe0 220 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 221
jejuho 0:de3e4a57ebe0 222 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value2) )
jejuho 0:de3e4a57ebe0 223 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 224
jejuho 0:de3e4a57ebe0 225 if((value & 0xF0)==0)
jejuho 0:de3e4a57ebe0 226 value = value | (ODR_old_value & 0xF0); //if it comes from POWERDOWN
jejuho 0:de3e4a57ebe0 227
jejuho 0:de3e4a57ebe0 228 switch(md) {
jejuho 0:de3e4a57ebe0 229
jejuho 0:de3e4a57ebe0 230 case LIS3DH_POWER_DOWN:
jejuho 0:de3e4a57ebe0 231 ODR_old_value = value;
jejuho 0:de3e4a57ebe0 232 value &= 0x0F;
jejuho 0:de3e4a57ebe0 233 break;
jejuho 0:de3e4a57ebe0 234
jejuho 0:de3e4a57ebe0 235 case LIS3DH_NORMAL:
jejuho 0:de3e4a57ebe0 236 value &= 0xF7;
jejuho 0:de3e4a57ebe0 237 value |= (MEMS_RESET<<LIS3DH_LPEN);
jejuho 0:de3e4a57ebe0 238 value2 &= 0xF7;
jejuho 0:de3e4a57ebe0 239 value2 |= (MEMS_SET<<LIS3DH_HR); //set HighResolution_BIT
jejuho 0:de3e4a57ebe0 240 break;
jejuho 0:de3e4a57ebe0 241
jejuho 0:de3e4a57ebe0 242 case LIS3DH_LOW_POWER:
jejuho 0:de3e4a57ebe0 243 value &= 0xF7;
jejuho 0:de3e4a57ebe0 244 value |= (MEMS_SET<<LIS3DH_LPEN);
jejuho 0:de3e4a57ebe0 245 value2 &= 0xF7;
jejuho 0:de3e4a57ebe0 246 value2 |= (MEMS_RESET<<LIS3DH_HR); //reset HighResolution_BIT
jejuho 0:de3e4a57ebe0 247 break;
jejuho 0:de3e4a57ebe0 248
jejuho 0:de3e4a57ebe0 249 default:
jejuho 0:de3e4a57ebe0 250 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 251 }
jejuho 0:de3e4a57ebe0 252
jejuho 0:de3e4a57ebe0 253 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) )
jejuho 0:de3e4a57ebe0 254 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 255
jejuho 0:de3e4a57ebe0 256 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value2) )
jejuho 0:de3e4a57ebe0 257 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 258
jejuho 0:de3e4a57ebe0 259 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 260 }
jejuho 0:de3e4a57ebe0 261
jejuho 0:de3e4a57ebe0 262 /*******************************************************************************
jejuho 0:de3e4a57ebe0 263 * Function Name : LIS3DH_SetAxis
jejuho 0:de3e4a57ebe0 264 * Description : Enable/Disable LIS3DH Axis
jejuho 0:de3e4a57ebe0 265 * Input : LIS3DH_X_ENABLE/DISABLE | LIS3DH_Y_ENABLE/DISABLE | LIS3DH_Z_ENABLE/DISABLE
jejuho 0:de3e4a57ebe0 266 * Output : None
jejuho 0:de3e4a57ebe0 267 * Note : You MUST use all input variable in the argument, as example
jejuho 0:de3e4a57ebe0 268 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 269 *******************************************************************************/
jejuho 0:de3e4a57ebe0 270 status_t LIS3DH::LIS3DH_SetAxis(LIS3DH_Axis_t axis) {
jejuho 0:de3e4a57ebe0 271 u8_t value;
jejuho 0:de3e4a57ebe0 272
jejuho 0:de3e4a57ebe0 273 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) )
jejuho 0:de3e4a57ebe0 274 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 275 value &= 0xF8;
jejuho 0:de3e4a57ebe0 276 value |= (0x07 & axis);
jejuho 0:de3e4a57ebe0 277
jejuho 0:de3e4a57ebe0 278 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) )
jejuho 0:de3e4a57ebe0 279 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 280
jejuho 0:de3e4a57ebe0 281 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 282 }
jejuho 0:de3e4a57ebe0 283
jejuho 0:de3e4a57ebe0 284 /*******************************************************************************
jejuho 0:de3e4a57ebe0 285 * Function Name : LIS3DH_SetFullScale
jejuho 0:de3e4a57ebe0 286 * Description : Sets the LIS3DH FullScale
jejuho 0:de3e4a57ebe0 287 * Input : LIS3DH_FULLSCALE_2/LIS3DH_FULLSCALE_4/LIS3DH_FULLSCALE_8/LIS3DH_FULLSCALE_16
jejuho 0:de3e4a57ebe0 288 * Output : None
jejuho 0:de3e4a57ebe0 289 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 290 *******************************************************************************/
jejuho 0:de3e4a57ebe0 291 status_t LIS3DH::LIS3DH_SetFullScale(LIS3DH_Fullscale_t fs) {
jejuho 0:de3e4a57ebe0 292 u8_t value;
jejuho 0:de3e4a57ebe0 293
jejuho 0:de3e4a57ebe0 294 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) )
jejuho 0:de3e4a57ebe0 295 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 296
jejuho 0:de3e4a57ebe0 297 value &= 0xCF;
jejuho 0:de3e4a57ebe0 298 value |= (fs<<LIS3DH_FS);
jejuho 0:de3e4a57ebe0 299
jejuho 0:de3e4a57ebe0 300 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) )
jejuho 0:de3e4a57ebe0 301 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 302
jejuho 0:de3e4a57ebe0 303 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 304 }
jejuho 0:de3e4a57ebe0 305
jejuho 0:de3e4a57ebe0 306 /*******************************************************************************
jejuho 0:de3e4a57ebe0 307 * Function Name : LIS3DH_SetBDU
jejuho 0:de3e4a57ebe0 308 * Description : Enable/Disable Block Data Update Functionality
jejuho 0:de3e4a57ebe0 309 * Input : ENABLE/DISABLE
jejuho 0:de3e4a57ebe0 310 * Output : None
jejuho 0:de3e4a57ebe0 311 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 312 *******************************************************************************/
jejuho 0:de3e4a57ebe0 313 status_t LIS3DH::LIS3DH_SetBDU(State_t bdu) {
jejuho 0:de3e4a57ebe0 314 u8_t value;
jejuho 0:de3e4a57ebe0 315
jejuho 0:de3e4a57ebe0 316 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) )
jejuho 0:de3e4a57ebe0 317 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 318
jejuho 0:de3e4a57ebe0 319 value &= 0x7F;
jejuho 0:de3e4a57ebe0 320 value |= (bdu<<LIS3DH_BDU);
jejuho 0:de3e4a57ebe0 321
jejuho 0:de3e4a57ebe0 322 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) )
jejuho 0:de3e4a57ebe0 323 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 324
jejuho 0:de3e4a57ebe0 325 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 326 }
jejuho 0:de3e4a57ebe0 327
jejuho 0:de3e4a57ebe0 328 /*******************************************************************************
jejuho 0:de3e4a57ebe0 329 * Function Name : LIS3DH_SetBLE
jejuho 0:de3e4a57ebe0 330 * Description : Set Endianess (MSB/LSB)
jejuho 0:de3e4a57ebe0 331 * Input : BLE_LSB / BLE_MSB
jejuho 0:de3e4a57ebe0 332 * Output : None
jejuho 0:de3e4a57ebe0 333 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 334 *******************************************************************************/
jejuho 0:de3e4a57ebe0 335 status_t LIS3DH::LIS3DH_SetBLE(LIS3DH_Endianess_t ble) {
jejuho 0:de3e4a57ebe0 336 u8_t value;
jejuho 0:de3e4a57ebe0 337
jejuho 0:de3e4a57ebe0 338 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) )
jejuho 0:de3e4a57ebe0 339 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 340
jejuho 0:de3e4a57ebe0 341 value &= 0xBF;
jejuho 0:de3e4a57ebe0 342 value |= (ble<<LIS3DH_BLE);
jejuho 0:de3e4a57ebe0 343
jejuho 0:de3e4a57ebe0 344 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) )
jejuho 0:de3e4a57ebe0 345 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 346
jejuho 0:de3e4a57ebe0 347 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 348 }
jejuho 0:de3e4a57ebe0 349
jejuho 0:de3e4a57ebe0 350 /*******************************************************************************
jejuho 0:de3e4a57ebe0 351 * Function Name : LIS3DH_SetSelfTest
jejuho 0:de3e4a57ebe0 352 * Description : Set Self Test Modality
jejuho 0:de3e4a57ebe0 353 * Input : LIS3DH_SELF_TEST_DISABLE/ST_0/ST_1
jejuho 0:de3e4a57ebe0 354 * Output : None
jejuho 0:de3e4a57ebe0 355 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 356 *******************************************************************************/
jejuho 0:de3e4a57ebe0 357 status_t LIS3DH::LIS3DH_SetSelfTest(LIS3DH_SelfTest_t st) {
jejuho 0:de3e4a57ebe0 358 u8_t value;
jejuho 0:de3e4a57ebe0 359
jejuho 0:de3e4a57ebe0 360 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) )
jejuho 0:de3e4a57ebe0 361 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 362
jejuho 0:de3e4a57ebe0 363 value &= 0xF9;
jejuho 0:de3e4a57ebe0 364 value |= (st<<LIS3DH_ST);
jejuho 0:de3e4a57ebe0 365
jejuho 0:de3e4a57ebe0 366 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) )
jejuho 0:de3e4a57ebe0 367 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 368
jejuho 0:de3e4a57ebe0 369 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 370 }
jejuho 0:de3e4a57ebe0 371
jejuho 0:de3e4a57ebe0 372 /*******************************************************************************
jejuho 0:de3e4a57ebe0 373 * Function Name : LIS3DH_HPFClick
jejuho 0:de3e4a57ebe0 374 * Description : Enable/Disable High Pass Filter for click
jejuho 0:de3e4a57ebe0 375 * Input : MEMS_ENABLE/MEMS_DISABLE
jejuho 0:de3e4a57ebe0 376 * Output : None
jejuho 0:de3e4a57ebe0 377 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 378 *******************************************************************************/
jejuho 0:de3e4a57ebe0 379 status_t LIS3DH::LIS3DH_HPFClickEnable(State_t hpfe) {
jejuho 0:de3e4a57ebe0 380 u8_t value;
jejuho 0:de3e4a57ebe0 381
jejuho 0:de3e4a57ebe0 382 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) )
jejuho 0:de3e4a57ebe0 383 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 384
jejuho 0:de3e4a57ebe0 385 value &= 0xFB;
jejuho 0:de3e4a57ebe0 386 value |= (hpfe<<LIS3DH_HPCLICK);
jejuho 0:de3e4a57ebe0 387
jejuho 0:de3e4a57ebe0 388 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) )
jejuho 0:de3e4a57ebe0 389 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 390
jejuho 0:de3e4a57ebe0 391 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 392 }
jejuho 0:de3e4a57ebe0 393
jejuho 0:de3e4a57ebe0 394
jejuho 0:de3e4a57ebe0 395 /*******************************************************************************
jejuho 0:de3e4a57ebe0 396 * Function Name : LIS3DH_HPFAOI1
jejuho 0:de3e4a57ebe0 397 * Description : Enable/Disable High Pass Filter for AOI on INT_1
jejuho 0:de3e4a57ebe0 398 * Input : MEMS_ENABLE/MEMS_DISABLE
jejuho 0:de3e4a57ebe0 399 * Output : None
jejuho 0:de3e4a57ebe0 400 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 401 *******************************************************************************/
jejuho 0:de3e4a57ebe0 402 status_t LIS3DH::LIS3DH_HPFAOI1Enable(State_t hpfe) {
jejuho 0:de3e4a57ebe0 403 u8_t value;
jejuho 0:de3e4a57ebe0 404
jejuho 0:de3e4a57ebe0 405 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) )
jejuho 0:de3e4a57ebe0 406 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 407
jejuho 0:de3e4a57ebe0 408 value &= 0xFE;
jejuho 0:de3e4a57ebe0 409 value |= (hpfe<<LIS3DH_HPIS1);
jejuho 0:de3e4a57ebe0 410
jejuho 0:de3e4a57ebe0 411 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) )
jejuho 0:de3e4a57ebe0 412 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 413
jejuho 0:de3e4a57ebe0 414 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 415 }
jejuho 0:de3e4a57ebe0 416
jejuho 0:de3e4a57ebe0 417
jejuho 0:de3e4a57ebe0 418 /*******************************************************************************
jejuho 0:de3e4a57ebe0 419 * Function Name : LIS3DH_HPFAOI2
jejuho 0:de3e4a57ebe0 420 * Description : Enable/Disable High Pass Filter for AOI on INT_2
jejuho 0:de3e4a57ebe0 421 * Input : MEMS_ENABLE/MEMS_DISABLE
jejuho 0:de3e4a57ebe0 422 * Output : None
jejuho 0:de3e4a57ebe0 423 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 424 *******************************************************************************/
jejuho 0:de3e4a57ebe0 425 status_t LIS3DH::LIS3DH_HPFAOI2Enable(State_t hpfe) {
jejuho 0:de3e4a57ebe0 426 u8_t value;
jejuho 0:de3e4a57ebe0 427
jejuho 0:de3e4a57ebe0 428 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) )
jejuho 0:de3e4a57ebe0 429 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 430
jejuho 0:de3e4a57ebe0 431 value &= 0xFD;
jejuho 0:de3e4a57ebe0 432 value |= (hpfe<<LIS3DH_HPIS2);
jejuho 0:de3e4a57ebe0 433
jejuho 0:de3e4a57ebe0 434 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) )
jejuho 0:de3e4a57ebe0 435 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 436
jejuho 0:de3e4a57ebe0 437 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 438 }
jejuho 0:de3e4a57ebe0 439
jejuho 0:de3e4a57ebe0 440 /*******************************************************************************
jejuho 0:de3e4a57ebe0 441 * Function Name : LIS3DH_SetHPFMode
jejuho 0:de3e4a57ebe0 442 * Description : Set High Pass Filter Modality
jejuho 0:de3e4a57ebe0 443 * Input : LIS3DH_HPM_NORMAL_MODE_RES/LIS3DH_HPM_REF_SIGNAL/
jejuho 0:de3e4a57ebe0 444 LIS3DH_HPM_NORMAL_MODE/LIS3DH_HPM_AUTORESET_INT
jejuho 0:de3e4a57ebe0 445 * Output : None
jejuho 0:de3e4a57ebe0 446 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 447 *******************************************************************************/
jejuho 0:de3e4a57ebe0 448 status_t LIS3DH::LIS3DH_SetHPFMode(LIS3DH_HPFMode_t hpm) {
jejuho 0:de3e4a57ebe0 449 u8_t value;
jejuho 0:de3e4a57ebe0 450
jejuho 0:de3e4a57ebe0 451 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) )
jejuho 0:de3e4a57ebe0 452 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 453
jejuho 0:de3e4a57ebe0 454 value &= 0x3F;
jejuho 0:de3e4a57ebe0 455 value |= (hpm<<LIS3DH_HPM);
jejuho 0:de3e4a57ebe0 456
jejuho 0:de3e4a57ebe0 457 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) )
jejuho 0:de3e4a57ebe0 458 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 459
jejuho 0:de3e4a57ebe0 460 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 461 }
jejuho 0:de3e4a57ebe0 462
jejuho 0:de3e4a57ebe0 463
jejuho 0:de3e4a57ebe0 464 /*******************************************************************************
jejuho 0:de3e4a57ebe0 465 * Function Name : LIS3DH_SetHPFCutOFF
jejuho 0:de3e4a57ebe0 466 * Description : Set High Pass CUT OFF Freq
jejuho 0:de3e4a57ebe0 467 * Input : HPFCF [0,3]
jejuho 0:de3e4a57ebe0 468 * Output : None
jejuho 0:de3e4a57ebe0 469 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 470 *******************************************************************************/
jejuho 0:de3e4a57ebe0 471 status_t LIS3DH::LIS3DH_SetHPFCutOFF(LIS3DH_HPFCutOffFreq_t hpf) {
jejuho 0:de3e4a57ebe0 472 u8_t value;
jejuho 0:de3e4a57ebe0 473
jejuho 0:de3e4a57ebe0 474 if (hpf > 3)
jejuho 0:de3e4a57ebe0 475 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 476
jejuho 0:de3e4a57ebe0 477 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) )
jejuho 0:de3e4a57ebe0 478 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 479
jejuho 0:de3e4a57ebe0 480 value &= 0xCF;
jejuho 0:de3e4a57ebe0 481 value |= (hpf<<LIS3DH_HPCF);
jejuho 0:de3e4a57ebe0 482
jejuho 0:de3e4a57ebe0 483 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) )
jejuho 0:de3e4a57ebe0 484 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 485
jejuho 0:de3e4a57ebe0 486 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 487
jejuho 0:de3e4a57ebe0 488 }
jejuho 0:de3e4a57ebe0 489
jejuho 0:de3e4a57ebe0 490 /*******************************************************************************
jejuho 0:de3e4a57ebe0 491 * Function Name : LIS3DH_SetFilterDataSel
jejuho 0:de3e4a57ebe0 492 * Description : Set Filter Data Selection bypassed or sent to FIFO OUT register
jejuho 0:de3e4a57ebe0 493 * Input : MEMS_SET, MEMS_RESET
jejuho 0:de3e4a57ebe0 494 * Output : None
jejuho 0:de3e4a57ebe0 495 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 496 *******************************************************************************/
jejuho 0:de3e4a57ebe0 497 status_t LIS3DH::LIS3DH_SetFilterDataSel(State_t state) {
jejuho 0:de3e4a57ebe0 498 u8_t value;
jejuho 0:de3e4a57ebe0 499
jejuho 0:de3e4a57ebe0 500 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) )
jejuho 0:de3e4a57ebe0 501 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 502
jejuho 0:de3e4a57ebe0 503 value &= 0xF7;
jejuho 0:de3e4a57ebe0 504 value |= (state<<LIS3DH_FDS);
jejuho 0:de3e4a57ebe0 505
jejuho 0:de3e4a57ebe0 506 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) )
jejuho 0:de3e4a57ebe0 507 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 508
jejuho 0:de3e4a57ebe0 509 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 510
jejuho 0:de3e4a57ebe0 511 }
jejuho 0:de3e4a57ebe0 512
jejuho 0:de3e4a57ebe0 513 /*******************************************************************************
jejuho 0:de3e4a57ebe0 514 * Function Name : LIS3DH_SetTemperature
jejuho 0:de3e4a57ebe0 515 * Description : Sets LIS3DH Output Temperature
jejuho 0:de3e4a57ebe0 516 * Input : MEMS_ENABLE, MEMS_DISABLE
jejuho 0:de3e4a57ebe0 517 * Output : None
jejuho 0:de3e4a57ebe0 518 * Note : For Read Temperature by LIS3DH_OUT_AUX_3, LIS3DH_SetADCAux and LIS3DH_SetBDU
jejuho 0:de3e4a57ebe0 519 functions must be ENABLE
jejuho 0:de3e4a57ebe0 520 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 521 *******************************************************************************/
jejuho 0:de3e4a57ebe0 522 status_t LIS3DH::LIS3DH_SetTemperature(State_t state){
jejuho 0:de3e4a57ebe0 523 u8_t value;
jejuho 0:de3e4a57ebe0 524
jejuho 0:de3e4a57ebe0 525 if( !LIS3DH_ReadReg(LIS3DH_TEMP_CFG_REG, &value) )
jejuho 0:de3e4a57ebe0 526 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 527
jejuho 0:de3e4a57ebe0 528 value &= 0xBF;
jejuho 0:de3e4a57ebe0 529 value |= state<<LIS3DH_TEMP_EN;
jejuho 0:de3e4a57ebe0 530
jejuho 0:de3e4a57ebe0 531 if( !LIS3DH_WriteReg(LIS3DH_TEMP_CFG_REG, value) )
jejuho 0:de3e4a57ebe0 532 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 533
jejuho 0:de3e4a57ebe0 534 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 535 }
jejuho 0:de3e4a57ebe0 536
jejuho 0:de3e4a57ebe0 537 /*******************************************************************************
jejuho 0:de3e4a57ebe0 538 * Function Name : LIS3DH_SetADCAux
jejuho 0:de3e4a57ebe0 539 * Description : Sets LIS3DH Output ADC
jejuho 0:de3e4a57ebe0 540 * Input : MEMS_ENABLE, MEMS_DISABLE
jejuho 0:de3e4a57ebe0 541 * Output : None
jejuho 0:de3e4a57ebe0 542 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 543 *******************************************************************************/
jejuho 0:de3e4a57ebe0 544 status_t LIS3DH::LIS3DH_SetADCAux(State_t state){
jejuho 0:de3e4a57ebe0 545 u8_t value;
jejuho 0:de3e4a57ebe0 546
jejuho 0:de3e4a57ebe0 547 if( !LIS3DH_ReadReg(LIS3DH_TEMP_CFG_REG, &value) )
jejuho 0:de3e4a57ebe0 548 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 549
jejuho 0:de3e4a57ebe0 550 value &= 0x7F;
jejuho 0:de3e4a57ebe0 551 value |= state<<LIS3DH_ADC_PD;
jejuho 0:de3e4a57ebe0 552
jejuho 0:de3e4a57ebe0 553 if( !LIS3DH_WriteReg(LIS3DH_TEMP_CFG_REG, value) )
jejuho 0:de3e4a57ebe0 554 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 555
jejuho 0:de3e4a57ebe0 556 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 557 }
jejuho 0:de3e4a57ebe0 558
jejuho 0:de3e4a57ebe0 559 /*******************************************************************************
jejuho 0:de3e4a57ebe0 560 * Function Name : LIS3DH_GetAuxRaw
jejuho 0:de3e4a57ebe0 561 * Description : Read the Aux Values Output Registers
jejuho 0:de3e4a57ebe0 562 * Input : Buffer to empty
jejuho 0:de3e4a57ebe0 563 * Output : Aux Values Registers buffer
jejuho 0:de3e4a57ebe0 564 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 565 *******************************************************************************/
jejuho 0:de3e4a57ebe0 566 status_t LIS3DH::LIS3DH_GetAuxRaw(LIS3DH_Aux123Raw_t* buff) {
jejuho 0:de3e4a57ebe0 567 u8_t valueL;
jejuho 0:de3e4a57ebe0 568 u8_t valueH;
jejuho 0:de3e4a57ebe0 569
jejuho 0:de3e4a57ebe0 570 if( !LIS3DH_ReadReg(LIS3DH_OUT_1_L, &valueL) )
jejuho 0:de3e4a57ebe0 571 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 572
jejuho 0:de3e4a57ebe0 573 if( !LIS3DH_ReadReg(LIS3DH_OUT_1_H, &valueH) )
jejuho 0:de3e4a57ebe0 574 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 575
jejuho 0:de3e4a57ebe0 576 buff->AUX_1 = (u16_t)( (valueH << 8) | valueL )/16;
jejuho 0:de3e4a57ebe0 577
jejuho 0:de3e4a57ebe0 578 if( !LIS3DH_ReadReg(LIS3DH_OUT_2_L, &valueL) )
jejuho 0:de3e4a57ebe0 579 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 580
jejuho 0:de3e4a57ebe0 581 if( !LIS3DH_ReadReg(LIS3DH_OUT_2_H, &valueH) )
jejuho 0:de3e4a57ebe0 582 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 583
jejuho 0:de3e4a57ebe0 584 buff->AUX_2 = (u16_t)( (valueH << 8) | valueL )/16;
jejuho 0:de3e4a57ebe0 585
jejuho 0:de3e4a57ebe0 586 if( !LIS3DH_ReadReg(LIS3DH_OUT_3_L, &valueL) )
jejuho 0:de3e4a57ebe0 587 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 588
jejuho 0:de3e4a57ebe0 589 if( !LIS3DH_ReadReg(LIS3DH_OUT_3_H, &valueH) )
jejuho 0:de3e4a57ebe0 590 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 591
jejuho 0:de3e4a57ebe0 592 buff->AUX_3 = (u16_t)( (valueH << 8) | valueL )/16;
jejuho 0:de3e4a57ebe0 593
jejuho 0:de3e4a57ebe0 594 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 595 }
jejuho 0:de3e4a57ebe0 596
jejuho 0:de3e4a57ebe0 597 /*******************************************************************************
jejuho 0:de3e4a57ebe0 598 * Function Name : LIS3DH_SetInt1Pin
jejuho 0:de3e4a57ebe0 599 * Description : Set Interrupt1 pin Function
jejuho 0:de3e4a57ebe0 600 * Input : LIS3DH_CLICK_ON_PIN_INT1_ENABLE/DISABLE | LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE/DISABLE |
jejuho 0:de3e4a57ebe0 601 LIS3DH_I1_INT2_ON_PIN_INT1_ENABLE/DISABLE | LIS3DH_I1_DRDY1_ON_INT1_ENABLE/DISABLE |
jejuho 0:de3e4a57ebe0 602 LIS3DH_I1_DRDY2_ON_INT1_ENABLE/DISABLE | LIS3DH_WTM_ON_INT1_ENABLE/DISABLE |
jejuho 0:de3e4a57ebe0 603 LIS3DH_INT1_OVERRUN_ENABLE/DISABLE
jejuho 0:de3e4a57ebe0 604 * example : SetInt1Pin(LIS3DH_CLICK_ON_PIN_INT1_ENABLE | LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE |
jejuho 0:de3e4a57ebe0 605 LIS3DH_I1_INT2_ON_PIN_INT1_DISABLE | LIS3DH_I1_DRDY1_ON_INT1_ENABLE | LIS3DH_I1_DRDY2_ON_INT1_ENABLE |
jejuho 0:de3e4a57ebe0 606 LIS3DH_WTM_ON_INT1_DISABLE | LIS3DH_INT1_OVERRUN_DISABLE )
jejuho 0:de3e4a57ebe0 607 * Note : To enable Interrupt signals on INT1 Pad (You MUST use all input variable in the argument, as example)
jejuho 0:de3e4a57ebe0 608 * Output : None
jejuho 0:de3e4a57ebe0 609 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 610 *******************************************************************************/
jejuho 0:de3e4a57ebe0 611 status_t LIS3DH::LIS3DH_SetInt1Pin(LIS3DH_IntPinConf_t pinConf) {
jejuho 0:de3e4a57ebe0 612 u8_t value;
jejuho 0:de3e4a57ebe0 613
jejuho 0:de3e4a57ebe0 614 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG3, &value) )
jejuho 0:de3e4a57ebe0 615 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 616
jejuho 0:de3e4a57ebe0 617 value &= 0x00;
jejuho 0:de3e4a57ebe0 618 value |= pinConf;
jejuho 0:de3e4a57ebe0 619
jejuho 0:de3e4a57ebe0 620 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG3, value) )
jejuho 0:de3e4a57ebe0 621 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 622
jejuho 0:de3e4a57ebe0 623 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 624 }
jejuho 0:de3e4a57ebe0 625
jejuho 0:de3e4a57ebe0 626
jejuho 0:de3e4a57ebe0 627 /*******************************************************************************
jejuho 0:de3e4a57ebe0 628 * Function Name : LIS3DH_SetInt2Pin
jejuho 0:de3e4a57ebe0 629 * Description : Set Interrupt2 pin Function
jejuho 0:de3e4a57ebe0 630 * Input : LIS3DH_CLICK_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_INT1_ON_PIN_INT2_ENABLE/DISABLE |
jejuho 0:de3e4a57ebe0 631 LIS3DH_I2_INT2_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_BOOT_ON_INT2_ENABLE/DISABLE |
jejuho 0:de3e4a57ebe0 632 LIS3DH_INT_ACTIVE_HIGH/LOW
jejuho 0:de3e4a57ebe0 633 * example : LIS3DH_SetInt2Pin(LIS3DH_CLICK_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_INT1_ON_PIN_INT2_ENABLE/DISABLE |
jejuho 0:de3e4a57ebe0 634 LIS3DH_I2_INT2_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_BOOT_ON_INT2_ENABLE/DISABLE |
jejuho 0:de3e4a57ebe0 635 LIS3DH_INT_ACTIVE_HIGH/LOW)
jejuho 0:de3e4a57ebe0 636 * Note : To enable Interrupt signals on INT2 Pad (You MUST use all input variable in the argument, as example)
jejuho 0:de3e4a57ebe0 637 * Output : None
jejuho 0:de3e4a57ebe0 638 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 639 *******************************************************************************/
jejuho 0:de3e4a57ebe0 640 status_t LIS3DH::LIS3DH_SetInt2Pin(LIS3DH_IntPinConf_t pinConf) {
jejuho 0:de3e4a57ebe0 641 u8_t value;
jejuho 0:de3e4a57ebe0 642
jejuho 0:de3e4a57ebe0 643 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG6, &value) )
jejuho 0:de3e4a57ebe0 644 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 645
jejuho 0:de3e4a57ebe0 646 value &= 0x00;
jejuho 0:de3e4a57ebe0 647 value |= pinConf;
jejuho 0:de3e4a57ebe0 648
jejuho 0:de3e4a57ebe0 649 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG6, value) )
jejuho 0:de3e4a57ebe0 650 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 651
jejuho 0:de3e4a57ebe0 652 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 653 }
jejuho 0:de3e4a57ebe0 654
jejuho 0:de3e4a57ebe0 655 /*******************************************************************************
jejuho 0:de3e4a57ebe0 656 * Function Name : LIS3DH_SetClickCFG
jejuho 0:de3e4a57ebe0 657 * Description : Set Click Interrupt config Function
jejuho 0:de3e4a57ebe0 658 * Input : LIS3DH_ZD_ENABLE/DISABLE | LIS3DH_ZS_ENABLE/DISABLE | LIS3DH_YD_ENABLE/DISABLE |
jejuho 0:de3e4a57ebe0 659 LIS3DH_YS_ENABLE/DISABLE | LIS3DH_XD_ENABLE/DISABLE | LIS3DH_XS_ENABLE/DISABLE
jejuho 0:de3e4a57ebe0 660 * example : LIS3DH_SetClickCFG( LIS3DH_ZD_ENABLE | LIS3DH_ZS_DISABLE | LIS3DH_YD_ENABLE |
jejuho 0:de3e4a57ebe0 661 LIS3DH_YS_DISABLE | LIS3DH_XD_ENABLE | LIS3DH_XS_ENABLE)
jejuho 0:de3e4a57ebe0 662 * Note : You MUST use all input variable in the argument, as example
jejuho 0:de3e4a57ebe0 663 * Output : None
jejuho 0:de3e4a57ebe0 664 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 665 *******************************************************************************/
jejuho 0:de3e4a57ebe0 666 status_t LIS3DH::LIS3DH_SetClickCFG(u8_t status) {
jejuho 0:de3e4a57ebe0 667 u8_t value;
jejuho 0:de3e4a57ebe0 668
jejuho 0:de3e4a57ebe0 669 if( !LIS3DH_ReadReg(LIS3DH_CLICK_CFG, &value) )
jejuho 0:de3e4a57ebe0 670 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 671
jejuho 0:de3e4a57ebe0 672 value &= 0xC0;
jejuho 0:de3e4a57ebe0 673 value |= status;
jejuho 0:de3e4a57ebe0 674
jejuho 0:de3e4a57ebe0 675 if( !LIS3DH_WriteReg(LIS3DH_CLICK_CFG, value) )
jejuho 0:de3e4a57ebe0 676 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 677
jejuho 0:de3e4a57ebe0 678 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 679 }
jejuho 0:de3e4a57ebe0 680
jejuho 0:de3e4a57ebe0 681
jejuho 0:de3e4a57ebe0 682 /*******************************************************************************
jejuho 0:de3e4a57ebe0 683 * Function Name : LIS3DH_SetClickTHS
jejuho 0:de3e4a57ebe0 684 * Description : Set Click Interrupt threshold
jejuho 0:de3e4a57ebe0 685 * Input : Click-click Threshold value [0-127]
jejuho 0:de3e4a57ebe0 686 * Output : None
jejuho 0:de3e4a57ebe0 687 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 688 *******************************************************************************/
jejuho 0:de3e4a57ebe0 689 status_t LIS3DH::LIS3DH_SetClickTHS(u8_t ths) {
jejuho 0:de3e4a57ebe0 690
jejuho 0:de3e4a57ebe0 691 if(ths>127)
jejuho 0:de3e4a57ebe0 692 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 693
jejuho 0:de3e4a57ebe0 694 if( !LIS3DH_WriteReg(LIS3DH_CLICK_THS, ths) )
jejuho 0:de3e4a57ebe0 695 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 696
jejuho 0:de3e4a57ebe0 697 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 698 }
jejuho 0:de3e4a57ebe0 699
jejuho 0:de3e4a57ebe0 700
jejuho 0:de3e4a57ebe0 701 /*******************************************************************************
jejuho 0:de3e4a57ebe0 702 * Function Name : LIS3DH_SetClickLIMIT
jejuho 0:de3e4a57ebe0 703 * Description : Set Click Interrupt Time Limit
jejuho 0:de3e4a57ebe0 704 * Input : Click-click Time Limit value [0-127]
jejuho 0:de3e4a57ebe0 705 * Output : None
jejuho 0:de3e4a57ebe0 706 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 707 *******************************************************************************/
jejuho 0:de3e4a57ebe0 708 status_t LIS3DH::LIS3DH_SetClickLIMIT(u8_t t_limit) {
jejuho 0:de3e4a57ebe0 709
jejuho 0:de3e4a57ebe0 710 if(t_limit>127)
jejuho 0:de3e4a57ebe0 711 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 712
jejuho 0:de3e4a57ebe0 713 if( !LIS3DH_WriteReg(LIS3DH_TIME_LIMIT, t_limit) )
jejuho 0:de3e4a57ebe0 714 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 715
jejuho 0:de3e4a57ebe0 716 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 717 }
jejuho 0:de3e4a57ebe0 718
jejuho 0:de3e4a57ebe0 719
jejuho 0:de3e4a57ebe0 720 /*******************************************************************************
jejuho 0:de3e4a57ebe0 721 * Function Name : LIS3DH_SetClickLATENCY
jejuho 0:de3e4a57ebe0 722 * Description : Set Click Interrupt Time Latency
jejuho 0:de3e4a57ebe0 723 * Input : Click-click Time Latency value [0-255]
jejuho 0:de3e4a57ebe0 724 * Output : None
jejuho 0:de3e4a57ebe0 725 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 726 *******************************************************************************/
jejuho 0:de3e4a57ebe0 727 status_t LIS3DH::LIS3DH_SetClickLATENCY(u8_t t_latency) {
jejuho 0:de3e4a57ebe0 728
jejuho 0:de3e4a57ebe0 729 if( !LIS3DH_WriteReg(LIS3DH_TIME_LATENCY, t_latency) )
jejuho 0:de3e4a57ebe0 730 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 731
jejuho 0:de3e4a57ebe0 732 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 733 }
jejuho 0:de3e4a57ebe0 734
jejuho 0:de3e4a57ebe0 735
jejuho 0:de3e4a57ebe0 736 /*******************************************************************************
jejuho 0:de3e4a57ebe0 737 * Function Name : LIS3DH_SetClickWINDOW
jejuho 0:de3e4a57ebe0 738 * Description : Set Click Interrupt Time Window
jejuho 0:de3e4a57ebe0 739 * Input : Click-click Time Window value [0-255]
jejuho 0:de3e4a57ebe0 740 * Output : None
jejuho 0:de3e4a57ebe0 741 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 742 *******************************************************************************/
jejuho 0:de3e4a57ebe0 743 status_t LIS3DH::LIS3DH_SetClickWINDOW(u8_t t_window) {
jejuho 0:de3e4a57ebe0 744
jejuho 0:de3e4a57ebe0 745 if( !LIS3DH_WriteReg(LIS3DH_TIME_WINDOW, t_window) )
jejuho 0:de3e4a57ebe0 746 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 747
jejuho 0:de3e4a57ebe0 748 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 749 }
jejuho 0:de3e4a57ebe0 750
jejuho 0:de3e4a57ebe0 751
jejuho 0:de3e4a57ebe0 752 /*******************************************************************************
jejuho 0:de3e4a57ebe0 753 * Function Name : LIS3DH_GetClickResponse
jejuho 0:de3e4a57ebe0 754 * Description : Get Click Interrupt Response by CLICK_SRC REGISTER
jejuho 0:de3e4a57ebe0 755 * Input : char to empty by Click Response Typedef
jejuho 0:de3e4a57ebe0 756 * Output : None
jejuho 0:de3e4a57ebe0 757 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 758 *******************************************************************************/
jejuho 0:de3e4a57ebe0 759 status_t LIS3DH::LIS3DH_GetClickResponse(u8_t* res) {
jejuho 0:de3e4a57ebe0 760 u8_t value;
jejuho 0:de3e4a57ebe0 761
jejuho 0:de3e4a57ebe0 762 if( !LIS3DH_ReadReg(LIS3DH_CLICK_SRC, &value) )
jejuho 0:de3e4a57ebe0 763 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 764
jejuho 0:de3e4a57ebe0 765 value &= 0x7F;
jejuho 0:de3e4a57ebe0 766
jejuho 0:de3e4a57ebe0 767 if((value & LIS3DH_IA)==0) {
jejuho 0:de3e4a57ebe0 768 *res = LIS3DH_NO_CLICK;
jejuho 0:de3e4a57ebe0 769 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 770 }
jejuho 0:de3e4a57ebe0 771 else {
jejuho 0:de3e4a57ebe0 772 if (value & LIS3DH_DCLICK){
jejuho 0:de3e4a57ebe0 773 if (value & LIS3DH_CLICK_SIGN){
jejuho 0:de3e4a57ebe0 774 if (value & LIS3DH_CLICK_Z) {
jejuho 0:de3e4a57ebe0 775 *res = LIS3DH_DCLICK_Z_N;
jejuho 0:de3e4a57ebe0 776 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 777 }
jejuho 0:de3e4a57ebe0 778 if (value & LIS3DH_CLICK_Y) {
jejuho 0:de3e4a57ebe0 779 *res = LIS3DH_DCLICK_Y_N;
jejuho 0:de3e4a57ebe0 780 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 781 }
jejuho 0:de3e4a57ebe0 782 if (value & LIS3DH_CLICK_X) {
jejuho 0:de3e4a57ebe0 783 *res = LIS3DH_DCLICK_X_N;
jejuho 0:de3e4a57ebe0 784 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 785 }
jejuho 0:de3e4a57ebe0 786 }
jejuho 0:de3e4a57ebe0 787 else{
jejuho 0:de3e4a57ebe0 788 if (value & LIS3DH_CLICK_Z) {
jejuho 0:de3e4a57ebe0 789 *res = LIS3DH_DCLICK_Z_P;
jejuho 0:de3e4a57ebe0 790 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 791 }
jejuho 0:de3e4a57ebe0 792 if (value & LIS3DH_CLICK_Y) {
jejuho 0:de3e4a57ebe0 793 *res = LIS3DH_DCLICK_Y_P;
jejuho 0:de3e4a57ebe0 794 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 795 }
jejuho 0:de3e4a57ebe0 796 if (value & LIS3DH_CLICK_X) {
jejuho 0:de3e4a57ebe0 797 *res = LIS3DH_DCLICK_X_P;
jejuho 0:de3e4a57ebe0 798 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 799 }
jejuho 0:de3e4a57ebe0 800 }
jejuho 0:de3e4a57ebe0 801 }
jejuho 0:de3e4a57ebe0 802 else{
jejuho 0:de3e4a57ebe0 803 if (value & LIS3DH_CLICK_SIGN){
jejuho 0:de3e4a57ebe0 804 if (value & LIS3DH_CLICK_Z) {
jejuho 0:de3e4a57ebe0 805 *res = LIS3DH_SCLICK_Z_N;
jejuho 0:de3e4a57ebe0 806 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 807 }
jejuho 0:de3e4a57ebe0 808 if (value & LIS3DH_CLICK_Y) {
jejuho 0:de3e4a57ebe0 809 *res = LIS3DH_SCLICK_Y_N;
jejuho 0:de3e4a57ebe0 810 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 811 }
jejuho 0:de3e4a57ebe0 812 if (value & LIS3DH_CLICK_X) {
jejuho 0:de3e4a57ebe0 813 *res = LIS3DH_SCLICK_X_N;
jejuho 0:de3e4a57ebe0 814 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 815 }
jejuho 0:de3e4a57ebe0 816 }
jejuho 0:de3e4a57ebe0 817 else{
jejuho 0:de3e4a57ebe0 818 if (value & LIS3DH_CLICK_Z) {
jejuho 0:de3e4a57ebe0 819 *res = LIS3DH_SCLICK_Z_P;
jejuho 0:de3e4a57ebe0 820 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 821 }
jejuho 0:de3e4a57ebe0 822 if (value & LIS3DH_CLICK_Y) {
jejuho 0:de3e4a57ebe0 823 *res = LIS3DH_SCLICK_Y_P;
jejuho 0:de3e4a57ebe0 824 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 825 }
jejuho 0:de3e4a57ebe0 826 if (value & LIS3DH_CLICK_X) {
jejuho 0:de3e4a57ebe0 827 *res = LIS3DH_SCLICK_X_P;
jejuho 0:de3e4a57ebe0 828 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 829 }
jejuho 0:de3e4a57ebe0 830 }
jejuho 0:de3e4a57ebe0 831 }
jejuho 0:de3e4a57ebe0 832 }
jejuho 0:de3e4a57ebe0 833 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 834 }
jejuho 0:de3e4a57ebe0 835
jejuho 0:de3e4a57ebe0 836
jejuho 0:de3e4a57ebe0 837 /*******************************************************************************
jejuho 0:de3e4a57ebe0 838 * Function Name : LIS3DH_Int1LatchEnable
jejuho 0:de3e4a57ebe0 839 * Description : Enable Interrupt 1 Latching function
jejuho 0:de3e4a57ebe0 840 * Input : ENABLE/DISABLE
jejuho 0:de3e4a57ebe0 841 * Output : None
jejuho 0:de3e4a57ebe0 842 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 843 *******************************************************************************/
jejuho 0:de3e4a57ebe0 844 status_t LIS3DH::LIS3DH_Int1LatchEnable(State_t latch) {
jejuho 0:de3e4a57ebe0 845 u8_t value;
jejuho 0:de3e4a57ebe0 846
jejuho 0:de3e4a57ebe0 847 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) )
jejuho 0:de3e4a57ebe0 848 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 849
jejuho 0:de3e4a57ebe0 850 value &= 0xF7;
jejuho 0:de3e4a57ebe0 851 value |= latch<<LIS3DH_LIR_INT1;
jejuho 0:de3e4a57ebe0 852
jejuho 0:de3e4a57ebe0 853 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) )
jejuho 0:de3e4a57ebe0 854 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 855
jejuho 0:de3e4a57ebe0 856 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 857 }
jejuho 0:de3e4a57ebe0 858
jejuho 0:de3e4a57ebe0 859 status_t LIS3DH::LIS3DH_ResetInt1Latch(void) {
jejuho 0:de3e4a57ebe0 860 u8_t value;
jejuho 0:de3e4a57ebe0 861
jejuho 0:de3e4a57ebe0 862 if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, &value) )
jejuho 0:de3e4a57ebe0 863 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 864
jejuho 0:de3e4a57ebe0 865 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 866 }
jejuho 0:de3e4a57ebe0 867
jejuho 0:de3e4a57ebe0 868 /*******************************************************************************
jejuho 0:de3e4a57ebe0 869 * Function Name : LIS3DH_SetIntConfiguration
jejuho 0:de3e4a57ebe0 870 * Description : Interrupt 1 Configuration (without LIS3DH_6D_INT)
jejuho 0:de3e4a57ebe0 871 * Input : LIS3DH_INT1_AND/OR | LIS3DH_INT1_ZHIE_ENABLE/DISABLE | LIS3DH_INT1_ZLIE_ENABLE/DISABLE...
jejuho 0:de3e4a57ebe0 872 * Output : None
jejuho 0:de3e4a57ebe0 873 * Note : You MUST use all input variable in the argument, as example
jejuho 0:de3e4a57ebe0 874 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 875 *******************************************************************************/
jejuho 0:de3e4a57ebe0 876 status_t LIS3DH::LIS3DH_SetIntConfiguration(LIS3DH_Int1Conf_t ic) {
jejuho 0:de3e4a57ebe0 877 u8_t value;
jejuho 0:de3e4a57ebe0 878
jejuho 0:de3e4a57ebe0 879 if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) )
jejuho 0:de3e4a57ebe0 880 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 881
jejuho 0:de3e4a57ebe0 882 value &= 0x40;
jejuho 0:de3e4a57ebe0 883 value |= ic;
jejuho 0:de3e4a57ebe0 884
jejuho 0:de3e4a57ebe0 885 if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) )
jejuho 0:de3e4a57ebe0 886 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 887
jejuho 0:de3e4a57ebe0 888 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 889 }
jejuho 0:de3e4a57ebe0 890
jejuho 0:de3e4a57ebe0 891
jejuho 0:de3e4a57ebe0 892 /*******************************************************************************
jejuho 0:de3e4a57ebe0 893 * Function Name : LIS3DH_SetIntMode
jejuho 0:de3e4a57ebe0 894 * Description : Interrupt 1 Configuration mode (OR, 6D Movement, AND, 6D Position)
jejuho 0:de3e4a57ebe0 895 * Input : LIS3DH_INT_MODE_OR, LIS3DH_INT_MODE_6D_MOVEMENT, LIS3DH_INT_MODE_AND,
jejuho 0:de3e4a57ebe0 896 LIS3DH_INT_MODE_6D_POSITION
jejuho 0:de3e4a57ebe0 897 * Output : None
jejuho 0:de3e4a57ebe0 898 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 899 *******************************************************************************/
jejuho 0:de3e4a57ebe0 900 status_t LIS3DH::LIS3DH_SetIntMode(LIS3DH_Int1Mode_t int_mode) {
jejuho 0:de3e4a57ebe0 901 u8_t value;
jejuho 0:de3e4a57ebe0 902
jejuho 0:de3e4a57ebe0 903 if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) )
jejuho 0:de3e4a57ebe0 904 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 905
jejuho 0:de3e4a57ebe0 906 value &= 0x3F;
jejuho 0:de3e4a57ebe0 907 value |= (int_mode<<LIS3DH_INT_6D);
jejuho 0:de3e4a57ebe0 908
jejuho 0:de3e4a57ebe0 909 if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) )
jejuho 0:de3e4a57ebe0 910 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 911
jejuho 0:de3e4a57ebe0 912 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 913 }
jejuho 0:de3e4a57ebe0 914
jejuho 0:de3e4a57ebe0 915 /*******************************************************************************
jejuho 0:de3e4a57ebe0 916 * Function Name : LIS3DH_SetInt6D4DConfiguration
jejuho 0:de3e4a57ebe0 917 * Description : 6D, 4D Interrupt Configuration
jejuho 0:de3e4a57ebe0 918 * Input : LIS3DH_INT1_6D_ENABLE, LIS3DH_INT1_4D_ENABLE, LIS3DH_INT1_6D_4D_DISABLE
jejuho 0:de3e4a57ebe0 919 * Output : None
jejuho 0:de3e4a57ebe0 920 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 921 *******************************************************************************/
jejuho 0:de3e4a57ebe0 922 status_t LIS3DH::LIS3DH_SetInt6D4DConfiguration(LIS3DH_INT_6D_4D_t ic) {
jejuho 0:de3e4a57ebe0 923 u8_t value;
jejuho 0:de3e4a57ebe0 924 u8_t value2;
jejuho 0:de3e4a57ebe0 925
jejuho 0:de3e4a57ebe0 926 if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) )
jejuho 0:de3e4a57ebe0 927 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 928 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value2) )
jejuho 0:de3e4a57ebe0 929 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 930
jejuho 0:de3e4a57ebe0 931 if(ic == LIS3DH_INT1_6D_ENABLE){
jejuho 0:de3e4a57ebe0 932 value &= 0xBF;
jejuho 0:de3e4a57ebe0 933 value |= (MEMS_ENABLE<<LIS3DH_INT_6D);
jejuho 0:de3e4a57ebe0 934 value2 &= 0xFB;
jejuho 0:de3e4a57ebe0 935 value2 |= (MEMS_DISABLE<<LIS3DH_D4D_INT1);
jejuho 0:de3e4a57ebe0 936 }
jejuho 0:de3e4a57ebe0 937
jejuho 0:de3e4a57ebe0 938 if(ic == LIS3DH_INT1_4D_ENABLE){
jejuho 0:de3e4a57ebe0 939 value &= 0xBF;
jejuho 0:de3e4a57ebe0 940 value |= (MEMS_ENABLE<<LIS3DH_INT_6D);
jejuho 0:de3e4a57ebe0 941 value2 &= 0xFB;
jejuho 0:de3e4a57ebe0 942 value2 |= (MEMS_ENABLE<<LIS3DH_D4D_INT1);
jejuho 0:de3e4a57ebe0 943 }
jejuho 0:de3e4a57ebe0 944
jejuho 0:de3e4a57ebe0 945 if(ic == LIS3DH_INT1_6D_4D_DISABLE){
jejuho 0:de3e4a57ebe0 946 value &= 0xBF;
jejuho 0:de3e4a57ebe0 947 value |= (MEMS_DISABLE<<LIS3DH_INT_6D);
jejuho 0:de3e4a57ebe0 948 value2 &= 0xFB;
jejuho 0:de3e4a57ebe0 949 value2 |= (MEMS_DISABLE<<LIS3DH_D4D_INT1);
jejuho 0:de3e4a57ebe0 950 }
jejuho 0:de3e4a57ebe0 951
jejuho 0:de3e4a57ebe0 952 if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) )
jejuho 0:de3e4a57ebe0 953 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 954 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value2) )
jejuho 0:de3e4a57ebe0 955 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 956
jejuho 0:de3e4a57ebe0 957 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 958 }
jejuho 0:de3e4a57ebe0 959
jejuho 0:de3e4a57ebe0 960 /*******************************************************************************
jejuho 0:de3e4a57ebe0 961 * Function Name : LIS3DH_Get6DPosition
jejuho 0:de3e4a57ebe0 962 * Description : 6D, 4D Interrupt Position Detect
jejuho 0:de3e4a57ebe0 963 * Input : Byte to empty by POSITION_6D_t Typedef
jejuho 0:de3e4a57ebe0 964 * Output : None
jejuho 0:de3e4a57ebe0 965 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 966 *******************************************************************************/
jejuho 0:de3e4a57ebe0 967 status_t LIS3DH::LIS3DH_Get6DPosition(u8_t* val){
jejuho 0:de3e4a57ebe0 968 u8_t value;
jejuho 0:de3e4a57ebe0 969
jejuho 0:de3e4a57ebe0 970 if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, &value) )
jejuho 0:de3e4a57ebe0 971 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 972
jejuho 0:de3e4a57ebe0 973 value &= 0x7F;
jejuho 0:de3e4a57ebe0 974
jejuho 0:de3e4a57ebe0 975 switch (value){
jejuho 0:de3e4a57ebe0 976 case LIS3DH_UP_SX:
jejuho 0:de3e4a57ebe0 977 *val = LIS3DH_UP_SX;
jejuho 0:de3e4a57ebe0 978 break;
jejuho 0:de3e4a57ebe0 979 case LIS3DH_UP_DX:
jejuho 0:de3e4a57ebe0 980 *val = LIS3DH_UP_DX;
jejuho 0:de3e4a57ebe0 981 break;
jejuho 0:de3e4a57ebe0 982 case LIS3DH_DW_SX:
jejuho 0:de3e4a57ebe0 983 *val = LIS3DH_DW_SX;
jejuho 0:de3e4a57ebe0 984 break;
jejuho 0:de3e4a57ebe0 985 case LIS3DH_DW_DX:
jejuho 0:de3e4a57ebe0 986 *val = LIS3DH_DW_DX;
jejuho 0:de3e4a57ebe0 987 break;
jejuho 0:de3e4a57ebe0 988 case LIS3DH_TOP:
jejuho 0:de3e4a57ebe0 989 *val = LIS3DH_TOP;
jejuho 0:de3e4a57ebe0 990 break;
jejuho 0:de3e4a57ebe0 991 case LIS3DH_BOTTOM:
jejuho 0:de3e4a57ebe0 992 *val = LIS3DH_BOTTOM;
jejuho 0:de3e4a57ebe0 993 break;
jejuho 0:de3e4a57ebe0 994 }
jejuho 0:de3e4a57ebe0 995
jejuho 0:de3e4a57ebe0 996 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 997 }
jejuho 0:de3e4a57ebe0 998
jejuho 0:de3e4a57ebe0 999 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1000 * Function Name : LIS3DH_SetInt1Threshold
jejuho 0:de3e4a57ebe0 1001 * Description : Sets Interrupt 1 Threshold
jejuho 0:de3e4a57ebe0 1002 * Input : Threshold = [0,31]
jejuho 0:de3e4a57ebe0 1003 * Output : None
jejuho 0:de3e4a57ebe0 1004 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 1005 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1006 status_t LIS3DH::LIS3DH_SetInt1Threshold(u8_t ths) {
jejuho 0:de3e4a57ebe0 1007 if (ths > 127)
jejuho 0:de3e4a57ebe0 1008 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1009
jejuho 0:de3e4a57ebe0 1010 if( !LIS3DH_WriteReg(LIS3DH_INT1_THS, ths) )
jejuho 0:de3e4a57ebe0 1011 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1012
jejuho 0:de3e4a57ebe0 1013 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1014 }
jejuho 0:de3e4a57ebe0 1015
jejuho 0:de3e4a57ebe0 1016 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1017 * Function Name : LIS3DH_SetInt1Duration
jejuho 0:de3e4a57ebe0 1018 * Description : Sets Interrupt 1 Duration
jejuho 0:de3e4a57ebe0 1019 * Input : Duration value
jejuho 0:de3e4a57ebe0 1020 * Output : None
jejuho 0:de3e4a57ebe0 1021 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 1022 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1023 status_t LIS3DH::LIS3DH_SetInt1Duration(LIS3DH_Int1Conf_t id) {
jejuho 0:de3e4a57ebe0 1024
jejuho 0:de3e4a57ebe0 1025 if (id > 127)
jejuho 0:de3e4a57ebe0 1026 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1027
jejuho 0:de3e4a57ebe0 1028 if( !LIS3DH_WriteReg(LIS3DH_INT1_DURATION, id) )
jejuho 0:de3e4a57ebe0 1029 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1030
jejuho 0:de3e4a57ebe0 1031 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1032 }
jejuho 0:de3e4a57ebe0 1033
jejuho 0:de3e4a57ebe0 1034 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1035 * Function Name : LIS3DH_FIFOModeEnable
jejuho 0:de3e4a57ebe0 1036 * Description : Sets Fifo Modality
jejuho 0:de3e4a57ebe0 1037 * Input : LIS3DH_FIFO_DISABLE, LIS3DH_FIFO_BYPASS_MODE, LIS3DH_FIFO_MODE,
jejuho 0:de3e4a57ebe0 1038 LIS3DH_FIFO_STREAM_MODE, LIS3DH_FIFO_TRIGGER_MODE
jejuho 0:de3e4a57ebe0 1039 * Output : None
jejuho 0:de3e4a57ebe0 1040 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 1041 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1042 status_t LIS3DH::LIS3DH_FIFOModeEnable(LIS3DH_FifoMode_t fm) {
jejuho 0:de3e4a57ebe0 1043 u8_t value;
jejuho 0:de3e4a57ebe0 1044
jejuho 0:de3e4a57ebe0 1045 if(fm == LIS3DH_FIFO_DISABLE) {
jejuho 0:de3e4a57ebe0 1046 if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) )
jejuho 0:de3e4a57ebe0 1047 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1048
jejuho 0:de3e4a57ebe0 1049 value &= 0x1F;
jejuho 0:de3e4a57ebe0 1050 value |= (LIS3DH_FIFO_BYPASS_MODE<<LIS3DH_FM);
jejuho 0:de3e4a57ebe0 1051
jejuho 0:de3e4a57ebe0 1052 if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) //fifo mode bypass
jejuho 0:de3e4a57ebe0 1053 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1054 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) )
jejuho 0:de3e4a57ebe0 1055 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1056
jejuho 0:de3e4a57ebe0 1057 value &= 0xBF;
jejuho 0:de3e4a57ebe0 1058
jejuho 0:de3e4a57ebe0 1059 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo disable
jejuho 0:de3e4a57ebe0 1060 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1061 }
jejuho 0:de3e4a57ebe0 1062
jejuho 0:de3e4a57ebe0 1063 if(fm == LIS3DH_FIFO_BYPASS_MODE) {
jejuho 0:de3e4a57ebe0 1064 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) )
jejuho 0:de3e4a57ebe0 1065 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1066
jejuho 0:de3e4a57ebe0 1067 value &= 0xBF;
jejuho 0:de3e4a57ebe0 1068 value |= MEMS_SET<<LIS3DH_FIFO_EN;
jejuho 0:de3e4a57ebe0 1069
jejuho 0:de3e4a57ebe0 1070 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable
jejuho 0:de3e4a57ebe0 1071 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1072 if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) )
jejuho 0:de3e4a57ebe0 1073 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1074
jejuho 0:de3e4a57ebe0 1075 value &= 0x1f;
jejuho 0:de3e4a57ebe0 1076 value |= (fm<<LIS3DH_FM); //fifo mode configuration
jejuho 0:de3e4a57ebe0 1077
jejuho 0:de3e4a57ebe0 1078 if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) )
jejuho 0:de3e4a57ebe0 1079 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1080 }
jejuho 0:de3e4a57ebe0 1081
jejuho 0:de3e4a57ebe0 1082 if(fm == LIS3DH_FIFO_MODE) {
jejuho 0:de3e4a57ebe0 1083 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) )
jejuho 0:de3e4a57ebe0 1084 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1085
jejuho 0:de3e4a57ebe0 1086 value &= 0xBF;
jejuho 0:de3e4a57ebe0 1087 value |= MEMS_SET<<LIS3DH_FIFO_EN;
jejuho 0:de3e4a57ebe0 1088
jejuho 0:de3e4a57ebe0 1089 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable
jejuho 0:de3e4a57ebe0 1090 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1091 if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) )
jejuho 0:de3e4a57ebe0 1092 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1093
jejuho 0:de3e4a57ebe0 1094 value &= 0x1f;
jejuho 0:de3e4a57ebe0 1095 value |= (fm<<LIS3DH_FM); //fifo mode configuration
jejuho 0:de3e4a57ebe0 1096
jejuho 0:de3e4a57ebe0 1097 if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) )
jejuho 0:de3e4a57ebe0 1098 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1099 }
jejuho 0:de3e4a57ebe0 1100
jejuho 0:de3e4a57ebe0 1101 if(fm == LIS3DH_FIFO_STREAM_MODE) {
jejuho 0:de3e4a57ebe0 1102 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) )
jejuho 0:de3e4a57ebe0 1103 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1104
jejuho 0:de3e4a57ebe0 1105 value &= 0xBF;
jejuho 0:de3e4a57ebe0 1106 value |= MEMS_SET<<LIS3DH_FIFO_EN;
jejuho 0:de3e4a57ebe0 1107
jejuho 0:de3e4a57ebe0 1108 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable
jejuho 0:de3e4a57ebe0 1109 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1110 if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) )
jejuho 0:de3e4a57ebe0 1111 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1112
jejuho 0:de3e4a57ebe0 1113 value &= 0x1f;
jejuho 0:de3e4a57ebe0 1114 value |= (fm<<LIS3DH_FM); //fifo mode configuration
jejuho 0:de3e4a57ebe0 1115
jejuho 0:de3e4a57ebe0 1116 if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) )
jejuho 0:de3e4a57ebe0 1117 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1118 }
jejuho 0:de3e4a57ebe0 1119
jejuho 0:de3e4a57ebe0 1120 if(fm == LIS3DH_FIFO_TRIGGER_MODE) {
jejuho 0:de3e4a57ebe0 1121 if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) )
jejuho 0:de3e4a57ebe0 1122 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1123
jejuho 0:de3e4a57ebe0 1124 value &= 0xBF;
jejuho 0:de3e4a57ebe0 1125 value |= MEMS_SET<<LIS3DH_FIFO_EN;
jejuho 0:de3e4a57ebe0 1126
jejuho 0:de3e4a57ebe0 1127 if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable
jejuho 0:de3e4a57ebe0 1128 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1129 if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) )
jejuho 0:de3e4a57ebe0 1130 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1131
jejuho 0:de3e4a57ebe0 1132 value &= 0x1f;
jejuho 0:de3e4a57ebe0 1133 value |= (fm<<LIS3DH_FM); //fifo mode configuration
jejuho 0:de3e4a57ebe0 1134
jejuho 0:de3e4a57ebe0 1135 if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) )
jejuho 0:de3e4a57ebe0 1136 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1137 }
jejuho 0:de3e4a57ebe0 1138
jejuho 0:de3e4a57ebe0 1139 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1140 }
jejuho 0:de3e4a57ebe0 1141
jejuho 0:de3e4a57ebe0 1142 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1143 * Function Name : LIS3DH_SetTriggerInt
jejuho 0:de3e4a57ebe0 1144 * Description : Trigger event liked to trigger signal INT1/INT2
jejuho 0:de3e4a57ebe0 1145 * Input : LIS3DH_TRIG_INT1/LIS3DH_TRIG_INT2
jejuho 0:de3e4a57ebe0 1146 * Output : None
jejuho 0:de3e4a57ebe0 1147 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 1148 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1149 status_t LIS3DH::LIS3DH_SetTriggerInt(LIS3DH_TrigInt_t tr) {
jejuho 0:de3e4a57ebe0 1150 u8_t value;
jejuho 0:de3e4a57ebe0 1151
jejuho 0:de3e4a57ebe0 1152 if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) )
jejuho 0:de3e4a57ebe0 1153 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1154
jejuho 0:de3e4a57ebe0 1155 value &= 0xDF;
jejuho 0:de3e4a57ebe0 1156 value |= (tr<<LIS3DH_TR);
jejuho 0:de3e4a57ebe0 1157
jejuho 0:de3e4a57ebe0 1158 if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) )
jejuho 0:de3e4a57ebe0 1159 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1160
jejuho 0:de3e4a57ebe0 1161 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1162 }
jejuho 0:de3e4a57ebe0 1163
jejuho 0:de3e4a57ebe0 1164 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1165 * Function Name : LIS3DH_SetWaterMark
jejuho 0:de3e4a57ebe0 1166 * Description : Sets Watermark Value
jejuho 0:de3e4a57ebe0 1167 * Input : Watermark = [0,31]
jejuho 0:de3e4a57ebe0 1168 * Output : None
jejuho 0:de3e4a57ebe0 1169 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 1170 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1171 status_t LIS3DH::LIS3DH_SetWaterMark(u8_t wtm) {
jejuho 0:de3e4a57ebe0 1172 u8_t value;
jejuho 0:de3e4a57ebe0 1173
jejuho 0:de3e4a57ebe0 1174 if(wtm > 31)
jejuho 0:de3e4a57ebe0 1175 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1176
jejuho 0:de3e4a57ebe0 1177 if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) )
jejuho 0:de3e4a57ebe0 1178 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1179
jejuho 0:de3e4a57ebe0 1180 value &= 0xE0;
jejuho 0:de3e4a57ebe0 1181 value |= wtm;
jejuho 0:de3e4a57ebe0 1182
jejuho 0:de3e4a57ebe0 1183 if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) )
jejuho 0:de3e4a57ebe0 1184 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1185
jejuho 0:de3e4a57ebe0 1186 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1187 }
jejuho 0:de3e4a57ebe0 1188
jejuho 0:de3e4a57ebe0 1189 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1190 * Function Name : LIS3DH_GetStatusReg
jejuho 0:de3e4a57ebe0 1191 * Description : Read the status register
jejuho 0:de3e4a57ebe0 1192 * Input : char to empty by Status Reg Value
jejuho 0:de3e4a57ebe0 1193 * Output : None
jejuho 0:de3e4a57ebe0 1194 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 1195 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1196 status_t LIS3DH::LIS3DH_GetStatusReg(u8_t* val) {
jejuho 0:de3e4a57ebe0 1197 if( !LIS3DH_ReadReg(LIS3DH_STATUS_REG, val) )
jejuho 0:de3e4a57ebe0 1198 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1199
jejuho 0:de3e4a57ebe0 1200 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1201 }
jejuho 0:de3e4a57ebe0 1202
jejuho 0:de3e4a57ebe0 1203
jejuho 0:de3e4a57ebe0 1204 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1205 * Function Name : LIS3DH_GetStatusBIT
jejuho 0:de3e4a57ebe0 1206 * Description : Read the status register BIT
jejuho 0:de3e4a57ebe0 1207 * Input : LIS3DH_STATUS_REG_ZYXOR, LIS3DH_STATUS_REG_ZOR, LIS3DH_STATUS_REG_YOR, LIS3DH_STATUS_REG_XOR,
jejuho 0:de3e4a57ebe0 1208 LIS3DH_STATUS_REG_ZYXDA, LIS3DH_STATUS_REG_ZDA, LIS3DH_STATUS_REG_YDA, LIS3DH_STATUS_REG_XDA,
jejuho 0:de3e4a57ebe0 1209 LIS3DH_DATAREADY_BIT
jejuho 0:de3e4a57ebe0 1210 val: Byte to be filled with the status bit
jejuho 0:de3e4a57ebe0 1211 * Output : status register BIT
jejuho 0:de3e4a57ebe0 1212 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 1213 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1214 status_t LIS3DH::LIS3DH_GetStatusBit(u8_t statusBIT, u8_t* val) {
jejuho 0:de3e4a57ebe0 1215 u8_t value;
jejuho 0:de3e4a57ebe0 1216
jejuho 0:de3e4a57ebe0 1217 if( !LIS3DH_ReadReg(LIS3DH_STATUS_REG, &value) )
jejuho 0:de3e4a57ebe0 1218 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1219
jejuho 0:de3e4a57ebe0 1220 switch (statusBIT){
jejuho 0:de3e4a57ebe0 1221 case LIS3DH_STATUS_REG_ZYXOR:
jejuho 0:de3e4a57ebe0 1222 if(value &= LIS3DH_STATUS_REG_ZYXOR){
jejuho 0:de3e4a57ebe0 1223 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1224 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1225 }
jejuho 0:de3e4a57ebe0 1226 else{
jejuho 0:de3e4a57ebe0 1227 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1228 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1229 }
jejuho 0:de3e4a57ebe0 1230 case LIS3DH_STATUS_REG_ZOR:
jejuho 0:de3e4a57ebe0 1231 if(value &= LIS3DH_STATUS_REG_ZOR){
jejuho 0:de3e4a57ebe0 1232 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1233 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1234 }
jejuho 0:de3e4a57ebe0 1235 else{
jejuho 0:de3e4a57ebe0 1236 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1237 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1238 }
jejuho 0:de3e4a57ebe0 1239 case LIS3DH_STATUS_REG_YOR:
jejuho 0:de3e4a57ebe0 1240 if(value &= LIS3DH_STATUS_REG_YOR){
jejuho 0:de3e4a57ebe0 1241 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1242 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1243 }
jejuho 0:de3e4a57ebe0 1244 else{
jejuho 0:de3e4a57ebe0 1245 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1246 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1247 }
jejuho 0:de3e4a57ebe0 1248 case LIS3DH_STATUS_REG_XOR:
jejuho 0:de3e4a57ebe0 1249 if(value &= LIS3DH_STATUS_REG_XOR){
jejuho 0:de3e4a57ebe0 1250 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1251 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1252 }
jejuho 0:de3e4a57ebe0 1253 else{
jejuho 0:de3e4a57ebe0 1254 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1255 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1256 }
jejuho 0:de3e4a57ebe0 1257 case LIS3DH_STATUS_REG_ZYXDA:
jejuho 0:de3e4a57ebe0 1258 if(value &= LIS3DH_STATUS_REG_ZYXDA){
jejuho 0:de3e4a57ebe0 1259 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1260 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1261 }
jejuho 0:de3e4a57ebe0 1262 else{
jejuho 0:de3e4a57ebe0 1263 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1264 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1265 }
jejuho 0:de3e4a57ebe0 1266 case LIS3DH_STATUS_REG_ZDA:
jejuho 0:de3e4a57ebe0 1267 if(value &= LIS3DH_STATUS_REG_ZDA){
jejuho 0:de3e4a57ebe0 1268 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1269 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1270 }
jejuho 0:de3e4a57ebe0 1271 else{
jejuho 0:de3e4a57ebe0 1272 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1273 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1274 }
jejuho 0:de3e4a57ebe0 1275 case LIS3DH_STATUS_REG_YDA:
jejuho 0:de3e4a57ebe0 1276 if(value &= LIS3DH_STATUS_REG_YDA){
jejuho 0:de3e4a57ebe0 1277 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1278 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1279 }
jejuho 0:de3e4a57ebe0 1280 else{
jejuho 0:de3e4a57ebe0 1281 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1282 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1283 }
jejuho 0:de3e4a57ebe0 1284 case LIS3DH_STATUS_REG_XDA:
jejuho 0:de3e4a57ebe0 1285 if(value &= LIS3DH_STATUS_REG_XDA){
jejuho 0:de3e4a57ebe0 1286 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1287 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1288 }
jejuho 0:de3e4a57ebe0 1289 else{
jejuho 0:de3e4a57ebe0 1290 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1291 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1292 }
jejuho 0:de3e4a57ebe0 1293
jejuho 0:de3e4a57ebe0 1294 }
jejuho 0:de3e4a57ebe0 1295 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1296 }
jejuho 0:de3e4a57ebe0 1297
jejuho 0:de3e4a57ebe0 1298 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1299 * Function Name : LIS3DH_GetAccAxesRaw
jejuho 0:de3e4a57ebe0 1300 * Description : Read the Acceleration Values Output Registers
jejuho 0:de3e4a57ebe0 1301 * Input : buffer to empity by AxesRaw_t Typedef
jejuho 0:de3e4a57ebe0 1302 * Output : None
jejuho 0:de3e4a57ebe0 1303 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 1304 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1305 status_t LIS3DH::LIS3DH_GetAccAxesRaw(AxesRaw_t* buff) {
jejuho 0:de3e4a57ebe0 1306 i16_t value;
jejuho 0:de3e4a57ebe0 1307 u8_t *valueL = (u8_t *)(&value);
jejuho 0:de3e4a57ebe0 1308 u8_t *valueH = ((u8_t *)(&value)+1);
jejuho 0:de3e4a57ebe0 1309
jejuho 0:de3e4a57ebe0 1310 if( !LIS3DH_ReadReg(LIS3DH_OUT_X_L, valueL) )
jejuho 0:de3e4a57ebe0 1311 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1312
jejuho 0:de3e4a57ebe0 1313 if( !LIS3DH_ReadReg(LIS3DH_OUT_X_H, valueH) )
jejuho 0:de3e4a57ebe0 1314 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1315
jejuho 0:de3e4a57ebe0 1316 buff->AXIS_X = value;
jejuho 0:de3e4a57ebe0 1317
jejuho 0:de3e4a57ebe0 1318 if( !LIS3DH_ReadReg(LIS3DH_OUT_Y_L, valueL) )
jejuho 0:de3e4a57ebe0 1319 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1320
jejuho 0:de3e4a57ebe0 1321 if( !LIS3DH_ReadReg(LIS3DH_OUT_Y_H, valueH) )
jejuho 0:de3e4a57ebe0 1322 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1323
jejuho 0:de3e4a57ebe0 1324 buff->AXIS_Y = value;
jejuho 0:de3e4a57ebe0 1325
jejuho 0:de3e4a57ebe0 1326 if( !LIS3DH_ReadReg(LIS3DH_OUT_Z_L, valueL) )
jejuho 0:de3e4a57ebe0 1327 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1328
jejuho 0:de3e4a57ebe0 1329 if( !LIS3DH_ReadReg(LIS3DH_OUT_Z_H, valueH) )
jejuho 0:de3e4a57ebe0 1330 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1331
jejuho 0:de3e4a57ebe0 1332 buff->AXIS_Z = value;
jejuho 0:de3e4a57ebe0 1333
jejuho 0:de3e4a57ebe0 1334 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1335 }
jejuho 0:de3e4a57ebe0 1336
jejuho 0:de3e4a57ebe0 1337 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1338 * Function Name : LIS3DH_GetInt1Src
jejuho 0:de3e4a57ebe0 1339 * Description : Reset Interrupt 1 Latching function
jejuho 0:de3e4a57ebe0 1340 * Input : Char to empty by Int1 source value
jejuho 0:de3e4a57ebe0 1341 * Output : None
jejuho 0:de3e4a57ebe0 1342 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 1343 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1344 status_t LIS3DH::LIS3DH_GetInt1Src(u8_t* val) {
jejuho 0:de3e4a57ebe0 1345
jejuho 0:de3e4a57ebe0 1346 if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, val) )
jejuho 0:de3e4a57ebe0 1347 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1348
jejuho 0:de3e4a57ebe0 1349 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1350 }
jejuho 0:de3e4a57ebe0 1351
jejuho 0:de3e4a57ebe0 1352
jejuho 0:de3e4a57ebe0 1353 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1354 * Function Name : LIS3DH_GetInt1SrcBit
jejuho 0:de3e4a57ebe0 1355 * Description : Reset Interrupt 1 Latching function
jejuho 0:de3e4a57ebe0 1356 * Input : statusBIT: LIS3DH_INT_SRC_IA, LIS3DH_INT_SRC_ZH, LIS3DH_INT_SRC_ZL.....
jejuho 0:de3e4a57ebe0 1357 * val: Byte to be filled with the status bit
jejuho 0:de3e4a57ebe0 1358 * Output : None
jejuho 0:de3e4a57ebe0 1359 * Return : Status of BIT [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 1360 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1361 status_t LIS3DH::LIS3DH_GetInt1SrcBit(u8_t statusBIT, u8_t* val) {
jejuho 0:de3e4a57ebe0 1362 u8_t value;
jejuho 0:de3e4a57ebe0 1363
jejuho 0:de3e4a57ebe0 1364 if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, &value) )
jejuho 0:de3e4a57ebe0 1365 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1366
jejuho 0:de3e4a57ebe0 1367 if(statusBIT == LIS3DH_INT1_SRC_IA){
jejuho 0:de3e4a57ebe0 1368 if(value &= LIS3DH_INT1_SRC_IA){
jejuho 0:de3e4a57ebe0 1369 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1370 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1371 }
jejuho 0:de3e4a57ebe0 1372 else{
jejuho 0:de3e4a57ebe0 1373 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1374 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1375 }
jejuho 0:de3e4a57ebe0 1376 }
jejuho 0:de3e4a57ebe0 1377
jejuho 0:de3e4a57ebe0 1378 if(statusBIT == LIS3DH_INT1_SRC_ZH){
jejuho 0:de3e4a57ebe0 1379 if(value &= LIS3DH_INT1_SRC_ZH){
jejuho 0:de3e4a57ebe0 1380 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1381 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1382 }
jejuho 0:de3e4a57ebe0 1383 else{
jejuho 0:de3e4a57ebe0 1384 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1385 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1386 }
jejuho 0:de3e4a57ebe0 1387 }
jejuho 0:de3e4a57ebe0 1388
jejuho 0:de3e4a57ebe0 1389 if(statusBIT == LIS3DH_INT1_SRC_ZL){
jejuho 0:de3e4a57ebe0 1390 if(value &= LIS3DH_INT1_SRC_ZL){
jejuho 0:de3e4a57ebe0 1391 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1392 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1393 }
jejuho 0:de3e4a57ebe0 1394 else{
jejuho 0:de3e4a57ebe0 1395 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1396 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1397 }
jejuho 0:de3e4a57ebe0 1398 }
jejuho 0:de3e4a57ebe0 1399
jejuho 0:de3e4a57ebe0 1400 if(statusBIT == LIS3DH_INT1_SRC_YH){
jejuho 0:de3e4a57ebe0 1401 if(value &= LIS3DH_INT1_SRC_YH){
jejuho 0:de3e4a57ebe0 1402 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1403 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1404 }
jejuho 0:de3e4a57ebe0 1405 else{
jejuho 0:de3e4a57ebe0 1406 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1407 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1408 }
jejuho 0:de3e4a57ebe0 1409 }
jejuho 0:de3e4a57ebe0 1410
jejuho 0:de3e4a57ebe0 1411 if(statusBIT == LIS3DH_INT1_SRC_YL){
jejuho 0:de3e4a57ebe0 1412 if(value &= LIS3DH_INT1_SRC_YL){
jejuho 0:de3e4a57ebe0 1413 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1414 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1415 }
jejuho 0:de3e4a57ebe0 1416 else{
jejuho 0:de3e4a57ebe0 1417 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1418 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1419 }
jejuho 0:de3e4a57ebe0 1420 }
jejuho 0:de3e4a57ebe0 1421 if(statusBIT == LIS3DH_INT1_SRC_XH){
jejuho 0:de3e4a57ebe0 1422 if(value &= LIS3DH_INT1_SRC_XH){
jejuho 0:de3e4a57ebe0 1423 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1424 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1425 }
jejuho 0:de3e4a57ebe0 1426 else{
jejuho 0:de3e4a57ebe0 1427 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1428 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1429 }
jejuho 0:de3e4a57ebe0 1430 }
jejuho 0:de3e4a57ebe0 1431
jejuho 0:de3e4a57ebe0 1432 if(statusBIT == LIS3DH_INT1_SRC_XL){
jejuho 0:de3e4a57ebe0 1433 if(value &= LIS3DH_INT1_SRC_XL){
jejuho 0:de3e4a57ebe0 1434 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1435 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1436 }
jejuho 0:de3e4a57ebe0 1437 else{
jejuho 0:de3e4a57ebe0 1438 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1439 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1440 }
jejuho 0:de3e4a57ebe0 1441 }
jejuho 0:de3e4a57ebe0 1442 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1443 }
jejuho 0:de3e4a57ebe0 1444
jejuho 0:de3e4a57ebe0 1445
jejuho 0:de3e4a57ebe0 1446 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1447 * Function Name : LIS3DH_GetFifoSourceReg
jejuho 0:de3e4a57ebe0 1448 * Description : Read Fifo source Register
jejuho 0:de3e4a57ebe0 1449 * Input : Byte to empty by FIFO source register value
jejuho 0:de3e4a57ebe0 1450 * Output : None
jejuho 0:de3e4a57ebe0 1451 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 1452 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1453 status_t LIS3DH::LIS3DH_GetFifoSourceReg(u8_t* val) {
jejuho 0:de3e4a57ebe0 1454
jejuho 0:de3e4a57ebe0 1455 if( !LIS3DH_ReadReg(LIS3DH_FIFO_SRC_REG, val) )
jejuho 0:de3e4a57ebe0 1456 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1457
jejuho 0:de3e4a57ebe0 1458 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1459 }
jejuho 0:de3e4a57ebe0 1460
jejuho 0:de3e4a57ebe0 1461
jejuho 0:de3e4a57ebe0 1462 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1463 * Function Name : LIS3DH_GetFifoSourceBit
jejuho 0:de3e4a57ebe0 1464 * Description : Read Fifo WaterMark source bit
jejuho 0:de3e4a57ebe0 1465 * Input : statusBIT: LIS3DH_FIFO_SRC_WTM, LIS3DH_FIFO_SRC_OVRUN, LIS3DH_FIFO_SRC_EMPTY
jejuho 0:de3e4a57ebe0 1466 * val: Byte to fill with the bit value
jejuho 0:de3e4a57ebe0 1467 * Output : None
jejuho 0:de3e4a57ebe0 1468 * Return : Status of BIT [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 1469 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1470 status_t LIS3DH::LIS3DH_GetFifoSourceBit(u8_t statusBIT, u8_t* val){
jejuho 0:de3e4a57ebe0 1471 u8_t value;
jejuho 0:de3e4a57ebe0 1472
jejuho 0:de3e4a57ebe0 1473 if( !LIS3DH_ReadReg(LIS3DH_FIFO_SRC_REG, &value) )
jejuho 0:de3e4a57ebe0 1474 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1475
jejuho 0:de3e4a57ebe0 1476
jejuho 0:de3e4a57ebe0 1477 if(statusBIT == LIS3DH_FIFO_SRC_WTM){
jejuho 0:de3e4a57ebe0 1478 if(value &= LIS3DH_FIFO_SRC_WTM){
jejuho 0:de3e4a57ebe0 1479 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1480 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1481 }
jejuho 0:de3e4a57ebe0 1482 else{
jejuho 0:de3e4a57ebe0 1483 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1484 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1485 }
jejuho 0:de3e4a57ebe0 1486 }
jejuho 0:de3e4a57ebe0 1487
jejuho 0:de3e4a57ebe0 1488 if(statusBIT == LIS3DH_FIFO_SRC_OVRUN){
jejuho 0:de3e4a57ebe0 1489 if(value &= LIS3DH_FIFO_SRC_OVRUN){
jejuho 0:de3e4a57ebe0 1490 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1491 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1492 }
jejuho 0:de3e4a57ebe0 1493 else{
jejuho 0:de3e4a57ebe0 1494 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1495 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1496 }
jejuho 0:de3e4a57ebe0 1497 }
jejuho 0:de3e4a57ebe0 1498 if(statusBIT == LIS3DH_FIFO_SRC_EMPTY){
jejuho 0:de3e4a57ebe0 1499 if(value &= statusBIT == LIS3DH_FIFO_SRC_EMPTY){
jejuho 0:de3e4a57ebe0 1500 *val = MEMS_SET;
jejuho 0:de3e4a57ebe0 1501 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1502 }
jejuho 0:de3e4a57ebe0 1503 else{
jejuho 0:de3e4a57ebe0 1504 *val = MEMS_RESET;
jejuho 0:de3e4a57ebe0 1505 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1506 }
jejuho 0:de3e4a57ebe0 1507 }
jejuho 0:de3e4a57ebe0 1508 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1509 }
jejuho 0:de3e4a57ebe0 1510
jejuho 0:de3e4a57ebe0 1511
jejuho 0:de3e4a57ebe0 1512 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1513 * Function Name : LIS3DH_GetFifoSourceFSS
jejuho 0:de3e4a57ebe0 1514 * Description : Read current number of unread samples stored in FIFO
jejuho 0:de3e4a57ebe0 1515 * Input : Byte to empty by FIFO unread sample value
jejuho 0:de3e4a57ebe0 1516 * Output : None
jejuho 0:de3e4a57ebe0 1517 * Return : Status [value of FSS]
jejuho 0:de3e4a57ebe0 1518 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1519 status_t LIS3DH::LIS3DH_GetFifoSourceFSS(u8_t* val){
jejuho 0:de3e4a57ebe0 1520 u8_t value;
jejuho 0:de3e4a57ebe0 1521
jejuho 0:de3e4a57ebe0 1522 if( !LIS3DH_ReadReg(LIS3DH_FIFO_SRC_REG, &value) )
jejuho 0:de3e4a57ebe0 1523 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1524
jejuho 0:de3e4a57ebe0 1525 value &= 0x1F;
jejuho 0:de3e4a57ebe0 1526
jejuho 0:de3e4a57ebe0 1527 *val = value;
jejuho 0:de3e4a57ebe0 1528
jejuho 0:de3e4a57ebe0 1529 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1530 }
jejuho 0:de3e4a57ebe0 1531
jejuho 0:de3e4a57ebe0 1532 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1533 * Function Name : LIS3DH_GetTempRaw
jejuho 0:de3e4a57ebe0 1534 * Description : Read the Temperature Values by AUX Output Registers OUT_3_H
jejuho 0:de3e4a57ebe0 1535 * Input : Buffer to empty
jejuho 0:de3e4a57ebe0 1536 * Output : Temperature Values Registers buffer
jejuho 0:de3e4a57ebe0 1537 * Return : Status [MEMS_ERROR, MEMS_SUCCESS]
jejuho 0:de3e4a57ebe0 1538 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1539 status_t LIS3DH::LIS3DH_GetTempRaw(i8_t* buff) {
jejuho 0:de3e4a57ebe0 1540 u8_t valueL;
jejuho 0:de3e4a57ebe0 1541 u8_t valueH;
jejuho 0:de3e4a57ebe0 1542
jejuho 0:de3e4a57ebe0 1543 if( !LIS3DH_ReadReg(LIS3DH_OUT_3_L, &valueL) )
jejuho 0:de3e4a57ebe0 1544 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1545
jejuho 0:de3e4a57ebe0 1546 if( !LIS3DH_ReadReg(LIS3DH_OUT_3_H, &valueH) )
jejuho 0:de3e4a57ebe0 1547 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1548
jejuho 0:de3e4a57ebe0 1549 *buff = (i8_t)( valueH );
jejuho 0:de3e4a57ebe0 1550
jejuho 0:de3e4a57ebe0 1551 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1552 }
jejuho 0:de3e4a57ebe0 1553
jejuho 0:de3e4a57ebe0 1554 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1555 * Function Name : LIS3DH_GetWHO_AM_I
jejuho 0:de3e4a57ebe0 1556 * Description : Read identification code by WHO_AM_I register
jejuho 0:de3e4a57ebe0 1557 * Input : Char to empty by Device identification Value
jejuho 0:de3e4a57ebe0 1558 * Output : None
jejuho 0:de3e4a57ebe0 1559 * Return : Status [value of FSS]
jejuho 0:de3e4a57ebe0 1560 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1561 status_t LIS3DH::LIS3DH_GetWHO_AM_I(u8_t* val){
jejuho 0:de3e4a57ebe0 1562
jejuho 0:de3e4a57ebe0 1563 if( !LIS3DH_ReadReg(LIS3DH_WHO_AM_I, val) )
jejuho 0:de3e4a57ebe0 1564 return MEMS_ERROR;
jejuho 0:de3e4a57ebe0 1565
jejuho 0:de3e4a57ebe0 1566 return MEMS_SUCCESS;
jejuho 0:de3e4a57ebe0 1567 }
jejuho 0:de3e4a57ebe0 1568
jejuho 0:de3e4a57ebe0 1569 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1570 * Function Name : LIS3DH_ReadReg
jejuho 0:de3e4a57ebe0 1571 * Description : Generic Reading function. It must be fullfilled with either
jejuho 0:de3e4a57ebe0 1572 * : I2C or SPI reading functions
jejuho 0:de3e4a57ebe0 1573 * Input : Register Address
jejuho 0:de3e4a57ebe0 1574 * Output : Data REad
jejuho 0:de3e4a57ebe0 1575 * Return : None
jejuho 0:de3e4a57ebe0 1576 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1577 u8_t LIS3DH::LIS3DH_ReadReg(u8_t Reg, u8_t* Data) {
jejuho 0:de3e4a57ebe0 1578
jejuho 0:de3e4a57ebe0 1579 //To be completed with either I2c or SPI reading function
jejuho 0:de3e4a57ebe0 1580 //i.e. *Data = SPI_Mems_Read_Reg( Reg );
jejuho 0:de3e4a57ebe0 1581
jejuho 0:de3e4a57ebe0 1582 _ss = 0;
jejuho 0:de3e4a57ebe0 1583 _spi.write(0x80 | Reg);
jejuho 0:de3e4a57ebe0 1584 signed char raw = _spi.write(0x00);
jejuho 0:de3e4a57ebe0 1585 _ss = 1;
jejuho 0:de3e4a57ebe0 1586
jejuho 0:de3e4a57ebe0 1587 *Data=raw;
jejuho 0:de3e4a57ebe0 1588
jejuho 0:de3e4a57ebe0 1589 return 1;
jejuho 0:de3e4a57ebe0 1590 }
jejuho 0:de3e4a57ebe0 1591
jejuho 0:de3e4a57ebe0 1592 /*******************************************************************************
jejuho 0:de3e4a57ebe0 1593 * Function Name : LIS3DH_WriteReg
jejuho 0:de3e4a57ebe0 1594 * Description : Generic Writing function. It must be fullfilled with either
jejuho 0:de3e4a57ebe0 1595 * : I2C or SPI writing function
jejuho 0:de3e4a57ebe0 1596 * Input : Register Address, Data to be written
jejuho 0:de3e4a57ebe0 1597 * Output : None
jejuho 0:de3e4a57ebe0 1598 * Return : None
jejuho 0:de3e4a57ebe0 1599 *******************************************************************************/
jejuho 0:de3e4a57ebe0 1600 u8_t LIS3DH::LIS3DH_WriteReg(u8_t WriteAddr, u8_t Data) {
jejuho 0:de3e4a57ebe0 1601
jejuho 0:de3e4a57ebe0 1602 //To be completed with either I2c or SPI writing function
jejuho 0:de3e4a57ebe0 1603 //i.e. SPI_Mems_Write_Reg(WriteAddr, Data);
jejuho 0:de3e4a57ebe0 1604
jejuho 0:de3e4a57ebe0 1605 _ss = 0;
jejuho 0:de3e4a57ebe0 1606 _spi.write(0x00 | WriteAddr);
jejuho 0:de3e4a57ebe0 1607 _spi.write (Data);
jejuho 0:de3e4a57ebe0 1608 _ss = 1;
jejuho 0:de3e4a57ebe0 1609
jejuho 0:de3e4a57ebe0 1610 return 1;
jejuho 0:de3e4a57ebe0 1611 }
jejuho 0:de3e4a57ebe0 1612
jejuho 0:de3e4a57ebe0 1613 LIS3DH::~LIS3DH(){};
jejuho 0:de3e4a57ebe0 1614