diff --git a/src/drivers/distance_sensor/ll40ls/LidarLiteI2C.cpp b/src/drivers/distance_sensor/ll40ls/LidarLiteI2C.cpp index a6d18d1a06..2c3f7b4748 100644 --- a/src/drivers/distance_sensor/ll40ls/LidarLiteI2C.cpp +++ b/src/drivers/distance_sensor/ll40ls/LidarLiteI2C.cpp @@ -212,12 +212,33 @@ LidarLiteI2C::measure() int LidarLiteI2C::reset_sensor() { - int ret = write_reg(LL40LS_MEASURE_REG, LL40LS_MSRREG_RESET); + int ret; + + px4_usleep(15000); + + ret = write_reg(LL40LS_SIG_COUNT_VAL_REG, LL40LS_SIG_COUNT_VAL_MAX); if (ret != OK) { return ret; } + px4_usleep(15000); + ret = write_reg(LL40LS_MEASURE_REG, LL40LS_MSRREG_RESET); + + + if (ret != OK) { + uint8_t sig_cnt; + + px4_usleep(15000); + ret = read_reg(LL40LS_SIG_COUNT_VAL_REG, sig_cnt); + + if ((ret != OK) || (sig_cnt != LL40LS_SIG_COUNT_VAL_DEFAULT)) { + printf("Error: ll40ls reset failure. Exiting!\n"); + return ret; + + } + } + // wait for sensor reset to complete px4_usleep(50000); ret = write_reg(LL40LS_SIG_COUNT_VAL_REG, LL40LS_SIG_COUNT_VAL_MAX); diff --git a/src/drivers/distance_sensor/ll40ls/LidarLiteI2C.h b/src/drivers/distance_sensor/ll40ls/LidarLiteI2C.h index 8dde2c897a..89816418e0 100644 --- a/src/drivers/distance_sensor/ll40ls/LidarLiteI2C.h +++ b/src/drivers/distance_sensor/ll40ls/LidarLiteI2C.h @@ -49,6 +49,7 @@ /* Configuration Constants */ static constexpr uint8_t LL40LS_BASEADDR = 0x62; /* 7-bit address */ static constexpr uint8_t LL40LS_BASEADDR_OLD = 0x42; /* previous 7-bit address */ +static constexpr uint8_t LL40LS_SIG_COUNT_VAL_DEFAULT = 0x80; /* Default maximum acquisition count */ /* LL40LS Registers addresses */ static constexpr uint8_t LL40LS_MEASURE_REG = 0x00; /* Measure range register */