in AZ3166/src/libraries/Sensors/src/LSM6DSLSensor.cpp [1491:1581]
int LSM6DSLSensor::enableDoubleTapDetection(LSM6DSL_Interrupt_Pin_t pin)
{
/* Output Data Rate selection */
if( setXOdr(416.0f) == 1 )
{
return 1;
}
/* Full scale selection. */
if( setXFullScale(2.0f) == 1 )
{
return 1;
}
/* Enable X direction in tap recognition. */
if ( LSM6DSL_ACC_GYRO_W_TAP_X_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_X_EN_ENABLED ) == MEMS_ERROR )
{
return 1;
}
/* Enable Y direction in tap recognition. */
if ( LSM6DSL_ACC_GYRO_W_TAP_Y_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_Y_EN_ENABLED ) == MEMS_ERROR )
{
return 1;
}
/* Enable Z direction in tap recognition. */
if ( LSM6DSL_ACC_GYRO_W_TAP_Z_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_Z_EN_ENABLED ) == MEMS_ERROR )
{
return 1;
}
/* Set tap threshold. */
if ( setTapThreshold( LSM6DSL_TAP_THRESHOLD_MID_LOW ) == 1 )
{
return 1;
}
/* Set tap shock time window. */
if ( setTapShockTime( LSM6DSL_TAP_SHOCK_TIME_HIGH ) == 1 )
{
return 1;
}
/* Set tap quiet time window. */
if ( setTapQuietTime( LSM6DSL_TAP_QUIET_TIME_HIGH ) == 1 )
{
return 1;
}
/* Set tap duration time window. */
if ( setTapDurationTime( LSM6DSL_TAP_DURATION_TIME_MID ) == 1 )
{
return 1;
}
/* Single and double tap enabled. */
if ( LSM6DSL_ACC_GYRO_W_SINGLE_DOUBLE_TAP_EV( (void *)this, LSM6DSL_ACC_GYRO_SINGLE_DOUBLE_TAP_DOUBLE_TAP ) == MEMS_ERROR )
{
return 1;
}
/* Enable basic Interrupts */
if ( LSM6DSL_ACC_GYRO_W_BASIC_INT( (void *)this, LSM6DSL_ACC_GYRO_BASIC_INT_ENABLED ) == MEMS_ERROR )
{
return 1;
}
/* Enable double tap on either INT1 or INT2 pin */
switch (pin)
{
case LSM6DSL_INT1_PIN:
if ( LSM6DSL_ACC_GYRO_W_TapEvOnInt1( (void *)this, LSM6DSL_ACC_GYRO_INT1_TAP_ENABLED ) == MEMS_ERROR )
{
return 1;
}
break;
case LSM6DSL_INT2_PIN:
if ( LSM6DSL_ACC_GYRO_W_TapEvOnInt2( (void *)this, LSM6DSL_ACC_GYRO_INT2_TAP_ENABLED ) == MEMS_ERROR )
{
return 1;
}
break;
default:
return 1;
}
return 0;
}