/* * Sleep to Wake, Return to Sleep duration */ status_t LIS2DH_SetAct_DUR(u8_t val) { if( !LIS3DH_WriteReg(LIS2DH_Act_DUR, val) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetClickWINDOW * Description : Set Click Interrupt Time Window * Input : Click-click Time Window value [0-255] * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetClickWINDOW(u8_t t_window) { if( !LIS3DH_WriteReg(LIS3DH_TIME_WINDOW, t_window) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetClickLATENCY * Description : Set Click Interrupt Time Latency * Input : Click-click Time Latency value [0-255] * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetClickLATENCY(u8_t t_latency) { if( !LIS3DH_WriteReg(LIS3DH_TIME_LATENCY, t_latency) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetMode * Description : Sets LIS3DH Operating Mode * Input : Modality (LIS3DH_NORMAL, LIS3DH_LOW_POWER, LIS3DH_POWER_DOWN) * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetMode(LIS3DH_Mode_t md) { u8_t value; u8_t value2; static u8_t ODR_old_value; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) ) return MEMS_ERROR; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value2) ) return MEMS_ERROR; if((value & 0xF0)==0) value = value | (ODR_old_value & 0xF0); //if it comes from POWERDOWN switch(md) { case LIS3DH_POWER_DOWN: ODR_old_value = value; value &= 0x0F; break; case LIS3DH_NORMAL: value &= 0xF7; value |= (MEMS_RESET<<LIS3DH_LPEN); value2 &= 0xF7; value2 |= (MEMS_SET<<LIS3DH_HR); //set HighResolution_BIT break; case LIS3DH_LOW_POWER: value &= 0xF7; value |= (MEMS_SET<<LIS3DH_LPEN); value2 &= 0xF7; value2 |= (MEMS_RESET<<LIS3DH_HR); //reset HighResolution_BIT break; default: return MEMS_ERROR; } if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) ) return MEMS_ERROR; if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value2) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetInt1Threshold * Description : Sets Interrupt 1 Threshold * Input : Threshold = [0,31] * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetInt1Threshold(u8_t ths) { if (ths > 127) return MEMS_ERROR; if( !LIS3DH_WriteReg(LIS3DH_INT1_THS, ths) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetInt1Duration * Description : Sets Interrupt 1 Duration * Input : Duration value * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetInt1Duration(LIS3DH_Int1Conf_t id) { if (id > 127) return MEMS_ERROR; if( !LIS3DH_WriteReg(LIS3DH_INT1_DURATION, id) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/* * Sleep to wake, return to Sleep activation threshold */ status_t LIS2DH_SetAct_THS(u8_t val) { if (val > 127) return MEMS_ERROR; if( !LIS3DH_WriteReg(LIS2DH_Act_THS, val) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetClickTHS * Description : Set Click Interrupt threshold * Input : Click-click Threshold value [0-127] * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetClickTHS(u8_t ths) { if(ths>127) return MEMS_ERROR; if( !LIS3DH_WriteReg(LIS3DH_CLICK_THS, ths) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetClickLIMIT * Description : Set Click Interrupt Time Limit * Input : Click-click Time Limit value [0-127] * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetClickLIMIT(u8_t t_limit) { if(t_limit>127) return MEMS_ERROR; if( !LIS3DH_WriteReg(LIS3DH_TIME_LIMIT, t_limit) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetAxis * Description : Enable/Disable LIS3DH Axis * Input : LIS3DH_X_ENABLE/DISABLE | LIS3DH_Y_ENABLE/DISABLE | LIS3DH_Z_ENABLE/DISABLE * Output : None * Note : You MUST use all input variable in the argument, as example * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetAxis(LIS3DH_Axis_t axis) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) ) return MEMS_ERROR; value &= 0xF8; value |= (0x07 & axis); if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetInt2Pin * Description : Set Interrupt2 pin Function * Input : LIS3DH_CLICK_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_INT1_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_INT2_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_BOOT_ON_INT2_ENABLE/DISABLE | LIS3DH_INT_ACTIVE_HIGH/LOW * example : LIS3DH_SetInt2Pin(LIS3DH_CLICK_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_INT1_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_INT2_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_BOOT_ON_INT2_ENABLE/DISABLE | LIS3DH_INT_ACTIVE_HIGH/LOW) * Note : To enable Interrupt signals on INT2 Pad (You MUST use all input variable in the argument, as example) * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetInt2Pin(LIS3DH_IntPinConf_t pinConf) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG6, &value) ) return MEMS_ERROR; value &= 0x00; value |= pinConf; if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG6, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetHPFMode * Description : Set High Pass Filter Modality * Input : LIS3DH_HPM_NORMAL_MODE_RES/LIS3DH_HPM_REF_SIGNAL/ LIS3DH_HPM_NORMAL_MODE/LIS3DH_HPM_AUTORESET_INT * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetHPFMode(LIS3DH_HPFMode_t hpm) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) return MEMS_ERROR; value &= 0x3F; value |= (hpm<<LIS3DH_HPM); if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_HPFAOI2 * Description : Enable/Disable High Pass Filter for AOI on INT_2 * Input : MEMS_ENABLE/MEMS_DISABLE * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_HPFAOI2Enable(State_t hpfe) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) return MEMS_ERROR; value &= 0xFD; value |= (hpfe<<LIS3DH_HPIS2); if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetSelfTest * Description : Set Self Test Modality * Input : LIS3DH_SELF_TEST_DISABLE/ST_0/ST_1 * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetSelfTest(LIS3DH_SelfTest_t st) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) return MEMS_ERROR; value &= 0xF9; value |= (st<<LIS3DH_ST); if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetTriggerInt * Description : Trigger event liked to trigger signal INT1/INT2 * Input : LIS3DH_TRIG_INT1/LIS3DH_TRIG_INT2 * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetTriggerInt(LIS3DH_TrigInt_t tr) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) return MEMS_ERROR; value &= 0xDF; value |= (tr<<LIS3DH_TR); if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetBDU * Description : Enable/Disable Block Data Update Functionality * Input : ENABLE/DISABLE * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetBDU(State_t bdu) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) return MEMS_ERROR; value &= 0x7F; value |= (bdu<<LIS3DH_BDU); if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetFullScale * Description : Sets the LIS3DH FullScale * Input : LIS3DH_FULLSCALE_2/LIS3DH_FULLSCALE_4/LIS3DH_FULLSCALE_8/LIS3DH_FULLSCALE_16 * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetFullScale(LIS3DH_Fullscale_t fs) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) return MEMS_ERROR; value &= 0xCF; value |= (fs<<LIS3DH_FS); if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetClickCFG * Description : Set Click Interrupt config Function * Input : LIS3DH_ZD_ENABLE/DISABLE | LIS3DH_ZS_ENABLE/DISABLE | LIS3DH_YD_ENABLE/DISABLE | LIS3DH_YS_ENABLE/DISABLE | LIS3DH_XD_ENABLE/DISABLE | LIS3DH_XS_ENABLE/DISABLE * example : LIS3DH_SetClickCFG( LIS3DH_ZD_ENABLE | LIS3DH_ZS_DISABLE | LIS3DH_YD_ENABLE | LIS3DH_YS_DISABLE | LIS3DH_XD_ENABLE | LIS3DH_XS_ENABLE) * Note : You MUST use all input variable in the argument, as example * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetClickCFG(u8_t status) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_CLICK_CFG, &value) ) return MEMS_ERROR; value &= 0xC0; value |= status; if( !LIS3DH_WriteReg(LIS3DH_CLICK_CFG, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetADCAux * Description : Sets LIS3DH Output ADC * Input : MEMS_ENABLE, MEMS_DISABLE * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetADCAux(State_t state){ u8_t value; if( !LIS3DH_ReadReg(LIS3DH_TEMP_CFG_REG, &value) ) return MEMS_ERROR; value &= 0x7F; value |= state<<LIS3DH_ADC_PD; if( !LIS3DH_WriteReg(LIS3DH_TEMP_CFG_REG, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetTemperature * Description : Sets LIS3DH Output Temperature * Input : MEMS_ENABLE, MEMS_DISABLE * Output : None * Note : For Read Temperature by LIS3DH_OUT_AUX_3, LIS3DH_SetADCAux and LIS3DH_SetBDU functions must be ENABLE * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetTemperature(State_t state){ u8_t value; if( !LIS3DH_ReadReg(LIS3DH_TEMP_CFG_REG, &value) ) return MEMS_ERROR; value &= 0xBF; value |= state<<LIS3DH_TEMP_EN; if( !LIS3DH_WriteReg(LIS3DH_TEMP_CFG_REG, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetODR * Description : Sets LIS3DH Output Data Rate * Input : Output Data Rate * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetODR(LIS3DH_ODR_t ov){ u8_t value; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) ) return MEMS_ERROR; value &= 0x0f; value |= ov<<LIS3DH_ODR_BIT; if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetSPIInterface * Description : Set SPI mode: 3 Wire Interface OR 4 Wire Interface * Input : LIS3DH_SPI_3_WIRE, LIS3DH_SPI_4_WIRE * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetSPIInterface(LIS3DH_SPIMode_t spi) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) return MEMS_ERROR; value &= 0xFE; value |= spi<<LIS3DH_SIM; if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetIntMode * Description : Interrupt 1 Configuration mode (OR, 6D Movement, AND, 6D Position) * Input : LIS3DH_INT_MODE_OR, LIS3DH_INT_MODE_6D_MOVEMENT, LIS3DH_INT_MODE_AND, LIS3DH_INT_MODE_6D_POSITION * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetIntMode(LIS3DH_Int1Mode_t int_mode) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) ) return MEMS_ERROR; value &= 0x3F; value |= (int_mode<<LIS3DH_INT_6D); if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetIntConfiguration * Description : Interrupt 1 Configuration (without LIS3DH_6D_INT) * Input : LIS3DH_INT1_AND/OR | LIS3DH_INT1_ZHIE_ENABLE/DISABLE | LIS3DH_INT1_ZLIE_ENABLE/DISABLE... * Output : None * Note : You MUST use all input variable in the argument, as example * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetIntConfiguration(LIS3DH_Int1Conf_t ic) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) ) return MEMS_ERROR; value &= 0x40; value |= ic; if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetBLE * Description : Set Endianess (MSB/LSB) * Input : BLE_LSB / BLE_MSB * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetBLE(LIS3DH_Endianess_t ble) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) return MEMS_ERROR; value &= 0xBF; value |= (ble<<LIS3DH_BLE); if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_Int1LatchEnable * Description : Enable Interrupt 1 Latching function * Input : ENABLE/DISABLE * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_Int1LatchEnable(State_t latch) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) return MEMS_ERROR; value &= 0xF7; value |= latch<<LIS3DH_LIR_INT1; if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetInt6D4DConfiguration * Description : 6D, 4D Interrupt Configuration * Input : LIS3DH_INT1_6D_ENABLE, LIS3DH_INT1_4D_ENABLE, LIS3DH_INT1_6D_4D_DISABLE * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetInt6D4DConfiguration(LIS3DH_INT_6D_4D_t ic) { u8_t value; u8_t value2; if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) ) return MEMS_ERROR; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value2) ) return MEMS_ERROR; if(ic == LIS3DH_INT1_6D_ENABLE){ value &= 0xBF; value |= (MEMS_ENABLE<<LIS3DH_INT_6D); value2 &= 0xFB; value2 |= (MEMS_DISABLE<<LIS3DH_D4D_INT1); } if(ic == LIS3DH_INT1_4D_ENABLE){ value &= 0xBF; value |= (MEMS_ENABLE<<LIS3DH_INT_6D); value2 &= 0xFB; value2 |= (MEMS_ENABLE<<LIS3DH_D4D_INT1); } if(ic == LIS3DH_INT1_6D_4D_DISABLE){ value &= 0xBF; value |= (MEMS_DISABLE<<LIS3DH_INT_6D); value2 &= 0xFB; value2 |= (MEMS_DISABLE<<LIS3DH_D4D_INT1); } if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) ) return MEMS_ERROR; if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value2) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetFilterDataSel * Description : Set Filter Data Selection bypassed or sent to FIFO OUT register * Input : MEMS_SET, MEMS_RESET * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetFilterDataSel(State_t state) { u8_t value; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) return MEMS_ERROR; value &= 0xF7; value |= (state<<LIS3DH_FDS); if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetWaterMark * Description : Sets Watermark Value * Input : Watermark = [0,31] * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetWaterMark(u8_t wtm) { u8_t value; if(wtm > 31) return MEMS_ERROR; if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) return MEMS_ERROR; value &= 0xE0; value |= wtm; if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }
/******************************************************************************* * Function Name : LIS3DH_SetHPFCutOFF * Description : Set High Pass CUT OFF Freq * Input : HPFCF [0,3] * Output : None * Return : Status [MEMS_ERROR, MEMS_SUCCESS] *******************************************************************************/ status_t LIS3DH_SetHPFCutOFF(LIS3DH_HPFCutOffFreq_t hpf) { u8_t value; if (hpf > 3) return MEMS_ERROR; if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) return MEMS_ERROR; value &= 0xCF; value |= (hpf<<LIS3DH_HPCF); if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) return MEMS_ERROR; return MEMS_SUCCESS; }