distance_sensor/vl53l0x: move to PX4Rangefinder and cleanup

This commit is contained in:
Daniel Agar
2020-03-30 16:45:59 -04:00
parent 3f15ccd2dd
commit 1cc8e4dc1a
7 changed files with 179 additions and 313 deletions
+1 -1
View File
@@ -8,7 +8,7 @@ px4_add_board(
ROMFSROOT px4fmu_common
DRIVERS
barometer/lps25h
distance_sensor/vl53lxx
distance_sensor/vl53l0x
gps
imu/mpu9250
optical_flow/pmw3901
@@ -12,4 +12,4 @@ mpu9250 -I -R 12 start
lps25h -I start
# Optical flow deck
vl53lxx start -X
vl53l0x start -X
+1 -1
View File
@@ -44,4 +44,4 @@ add_subdirectory(srf02)
add_subdirectory(teraranger)
add_subdirectory(tfmini)
add_subdirectory(ulanding_radar)
add_subdirectory(vl53lxx)
add_subdirectory(vl53l0x)
@@ -32,10 +32,12 @@
############################################################################
px4_add_module(
MODULE drivers__vl53lxx
MAIN vl53lxx
COMPILE_FLAGS
-Wno-cast-align # TODO: fix and enable
MODULE drivers__distance_sensor__vl53l0x
MAIN vl53l0x
SRCS
vl53lxx.cpp
VL53L0X.cpp
VL53L0X.hpp
DEPENDS
drivers_rangefinder
px4_work_queue
)
@@ -0,0 +1,116 @@
/****************************************************************************
*
* Copyright (c) 2018-2020 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/**
* @file VL53L0X.hpp
*
* Driver for the ST VL53L0X ToF Sensor connected via I2C.
*/
#pragma once
#include <px4_platform_common/px4_config.h>
#include <px4_platform_common/getopt.h>
#include <px4_platform_common/i2c_spi_buses.h>
#include <px4_platform_common/module.h>
#include <drivers/device/i2c.h>
#include <drivers/drv_hrt.h>
#include <lib/perf/perf_counter.h>
#include <lib/drivers/rangefinder/PX4Rangefinder.hpp>
/* Configuration Constants */
#define VL53L0X_BASEADDR 0x29
class VL53L0X : public device::I2C, public I2CSPIDriver<VL53L0X>
{
public:
VL53L0X(I2CSPIBusOption bus_option, const int bus, const uint8_t rotation, int bus_frequency,
int address = VL53L0X_BASEADDR);
~VL53L0X() override;
static I2CSPIDriverBase *instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
int runtime_instance);
static void print_usage();
/**
* Diagnostics - print some basic information about the driver.
*/
void print_status() override;
/**
* Initialise the automatic measurement state machine and start it.
*/
void start();
/**
* Perform a poll cycle; collect from the previous measurement
* and start a new one.
*/
void RunImpl();
private:
int probe() override;
/**
* Collects the most recent sensor measurement data from the i2c bus.
*/
int collect();
/**
* Sends an i2c measure command to the sensor.
*/
int measure();
int readRegister(const uint8_t reg_address, uint8_t &value);
int readRegisterMulti(const uint8_t reg_address, uint8_t *value, const uint8_t length);
int writeRegister(const uint8_t reg_address, const uint8_t value);
int writeRegisterMulti(const uint8_t reg_address, const uint8_t *value, const uint8_t length);
int sensorInit();
int sensorTuning();
int singleRefCalibration(const uint8_t byte);
int spadCalculations();
PX4Rangefinder _px4_rangefinder;
bool _collect_phase{false};
bool _measurement_started{false};
bool _new_measurement{true};
uint8_t _stop_variable{0};
perf_counter_t _comms_errors{perf_alloc(PC_COUNT, MODULE_NAME": com_err")};
perf_counter_t _sample_perf{perf_alloc(PC_ELAPSED, MODULE_NAME": read")};
};
+1 -1
View File
@@ -137,7 +137,7 @@
#define DRV_DIST_DEVTYPE_SF1XX 0x73
#define DRV_DIST_DEVTYPE_SRF02 0x74
#define DRV_DIST_DEVTYPE_TERARANGER 0x75
#define DRV_DIST_DEVTYPE_VL53LXX 0x76
#define DRV_DIST_DEVTYPE_VL53L0X 0x76
#define DRV_POWER_DEVTYPE_INA226 0x77
#define DRV_POWER_DEVTYPE_VOXLPM 0x78
#define DRV_LED_DEVTYPE_BLINKM 0x79