Initial import
This commit is contained in:
974
code/lib/Adafruit_VL53L0X-1.2.3/src/Adafruit_VL53L0X.cpp
Normal file
974
code/lib/Adafruit_VL53L0X-1.2.3/src/Adafruit_VL53L0X.cpp
Normal file
@@ -0,0 +1,974 @@
|
||||
/*!
|
||||
* @file Adafruit_VL53L0X.cpp
|
||||
*
|
||||
* @mainpage Adafruit VL53L0X time-of-flight sensor
|
||||
*
|
||||
* @section intro_sec Introduction
|
||||
*
|
||||
* This is the documentation for Adafruit's VL53L0X driver for the
|
||||
* Arduino platform. It is designed specifically to work with the
|
||||
* Adafruit VL53L0X breakout: https://www.adafruit.com/product/3317
|
||||
*
|
||||
* These sensors use I2C to communicate, 2 pins (SCL+SDA) are required
|
||||
* to interface with the breakout.
|
||||
*
|
||||
* Adafruit invests time and resources providing this open source code,
|
||||
* please support Adafruit and open-source hardware by purchasing
|
||||
* products from Adafruit!
|
||||
*
|
||||
* @section dependencies Dependencies
|
||||
*
|
||||
*
|
||||
* @section author Author
|
||||
*
|
||||
* Written by Limor Fried/Ladyada for Adafruit Industries.
|
||||
*
|
||||
* Updated by Andrew DeVries for Digital Example to include methods needed for
|
||||
* Interrupt triggering
|
||||
*
|
||||
* @section license License
|
||||
*
|
||||
* BSD license, all text here must be included in any redistribution.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "Adafruit_VL53L0X.h"
|
||||
#include "vl53l0x_api_core.h"
|
||||
|
||||
#define VERSION_REQUIRED_MAJOR 1 ///< Required sensor major version
|
||||
#define VERSION_REQUIRED_MINOR 0 ///< Required sensor minor version
|
||||
#define VERSION_REQUIRED_BUILD 1 ///< Required sensor build
|
||||
|
||||
#define STR_HELPER(x) #x ///< a string helper
|
||||
#define STR(x) STR_HELPER(x) ///< string helper wrapper
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Setups the I2C interface and hardware
|
||||
@param i2c_addr Optional I2C address the sensor can be found on. Default is
|
||||
0x29
|
||||
@param debug Optional debug flag. If true, debug information will print out
|
||||
via Serial.print during setup. Defaults to false.
|
||||
@param i2c Optional I2C bus the sensor is located on. Default is Wire
|
||||
@param vl_config Sensor configuration
|
||||
@returns True if device is set up, false on any failure
|
||||
*/
|
||||
/**************************************************************************/
|
||||
boolean Adafruit_VL53L0X::begin(uint8_t i2c_addr, boolean debug, TwoWire *i2c,
|
||||
VL53L0X_Sense_config_t vl_config) {
|
||||
uint32_t refSpadCount;
|
||||
uint8_t isApertureSpads;
|
||||
uint8_t VhvSettings;
|
||||
uint8_t PhaseCal;
|
||||
|
||||
// Initialize Comms
|
||||
pMyDevice->I2cDevAddr = VL53L0X_I2C_ADDR; // default
|
||||
pMyDevice->comms_type = 1;
|
||||
pMyDevice->comms_speed_khz = 400;
|
||||
pMyDevice->i2c = i2c;
|
||||
|
||||
pMyDevice->i2c->begin(); // VL53L0X_i2c_init();
|
||||
|
||||
// unclear if this is even needed:
|
||||
if (VL53L0X_IMPLEMENTATION_VER_MAJOR != VERSION_REQUIRED_MAJOR ||
|
||||
VL53L0X_IMPLEMENTATION_VER_MINOR != VERSION_REQUIRED_MINOR ||
|
||||
VL53L0X_IMPLEMENTATION_VER_SUB != VERSION_REQUIRED_BUILD) {
|
||||
if (debug) {
|
||||
Serial.println(F(
|
||||
"Found " STR(VL53L0X_IMPLEMENTATION_VER_MAJOR) "." STR(VL53L0X_IMPLEMENTATION_VER_MINOR) "." STR(
|
||||
VL53L0X_IMPLEMENTATION_VER_SUB) " rev " STR(VL53L0X_IMPLEMENTATION_VER_REVISION)));
|
||||
Serial.println(F("Requires " STR(VERSION_REQUIRED_MAJOR) "." STR(
|
||||
VERSION_REQUIRED_MINOR) "." STR(VERSION_REQUIRED_BUILD)));
|
||||
}
|
||||
|
||||
Status = VL53L0X_ERROR_NOT_SUPPORTED;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Status = VL53L0X_DataInit(&MyDevice); // Data initialization
|
||||
|
||||
if (!setAddress(i2c_addr)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Status = VL53L0X_GetDeviceInfo(&MyDevice, &DeviceInfo);
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("VL53L0X Info:"));
|
||||
Serial.print(F("Device Name: "));
|
||||
Serial.print(DeviceInfo.Name);
|
||||
Serial.print(F(", Type: "));
|
||||
Serial.print(DeviceInfo.Type);
|
||||
Serial.print(F(", ID: "));
|
||||
Serial.println(DeviceInfo.ProductId);
|
||||
|
||||
Serial.print(F("Rev Major: "));
|
||||
Serial.print(DeviceInfo.ProductRevisionMajor);
|
||||
Serial.print(F(", Minor: "));
|
||||
Serial.println(DeviceInfo.ProductRevisionMinor);
|
||||
}
|
||||
|
||||
if ((DeviceInfo.ProductRevisionMajor != 1) ||
|
||||
(DeviceInfo.ProductRevisionMinor != 1)) {
|
||||
if (debug) {
|
||||
Serial.print(F("Error expected cut 1.1 but found "));
|
||||
Serial.print(DeviceInfo.ProductRevisionMajor);
|
||||
Serial.print(',');
|
||||
Serial.println(DeviceInfo.ProductRevisionMinor);
|
||||
}
|
||||
|
||||
Status = VL53L0X_ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
}
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("VL53L0X: StaticInit"));
|
||||
}
|
||||
|
||||
Status = VL53L0X_StaticInit(pMyDevice); // Device Initialization
|
||||
}
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("VL53L0X: PerformRefSpadManagement"));
|
||||
}
|
||||
|
||||
Status = VL53L0X_PerformRefSpadManagement(
|
||||
pMyDevice, &refSpadCount, &isApertureSpads); // Device Initialization
|
||||
|
||||
if (debug) {
|
||||
Serial.print(F("refSpadCount = "));
|
||||
Serial.print(refSpadCount);
|
||||
Serial.print(F(", isApertureSpads = "));
|
||||
Serial.println(isApertureSpads);
|
||||
}
|
||||
}
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("VL53L0X: PerformRefCalibration"));
|
||||
}
|
||||
|
||||
Status = VL53L0X_PerformRefCalibration(pMyDevice, &VhvSettings,
|
||||
&PhaseCal); // Device Initialization
|
||||
}
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
// no need to do this when we use VL53L0X_PerformSingleRangingMeasurement
|
||||
if (debug) {
|
||||
Serial.println(F("VL53L0X: SetDeviceMode"));
|
||||
}
|
||||
|
||||
Status = VL53L0X_SetDeviceMode(
|
||||
pMyDevice,
|
||||
VL53L0X_DEVICEMODE_SINGLE_RANGING); // Setup in single ranging mode
|
||||
}
|
||||
|
||||
// call off to the config function to do the last part of configuration.
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
configSensor(vl_config);
|
||||
}
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
return true;
|
||||
} else {
|
||||
if (debug) {
|
||||
Serial.print(F("VL53L0X Error: "));
|
||||
Serial.println(Status);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Change the I2C address of the sensor
|
||||
@param newAddr the new address to set the sensor to
|
||||
@returns True if address was set successfully, False otherwise
|
||||
*/
|
||||
/**************************************************************************/
|
||||
boolean Adafruit_VL53L0X::setAddress(uint8_t newAddr) {
|
||||
newAddr &= 0x7F;
|
||||
|
||||
Status = VL53L0X_SetDeviceAddress(pMyDevice, newAddr * 2); // 7->8 bit
|
||||
|
||||
delay(10);
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
pMyDevice->I2cDevAddr = newAddr; // 7 bit addr
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Configure the sensor for one of the ways the example ST
|
||||
sketches configure the sensors for different usages.
|
||||
@param vl_config Which configureation you are trying to configure for
|
||||
It should be one of the following
|
||||
VL53L0X_SENSE_DEFAULT
|
||||
VL53L0X_SENSE_LONG_RANGE
|
||||
VL53L0X_SENSE_HIGH_SPEED,
|
||||
VL53L0X_SENSE_HIGH_ACCURACY
|
||||
|
||||
@returns True if address was set successfully, False otherwise
|
||||
*/
|
||||
/**************************************************************************/
|
||||
boolean Adafruit_VL53L0X::configSensor(VL53L0X_Sense_config_t vl_config) {
|
||||
// All of them appear to configure a few things
|
||||
|
||||
// Serial.print(F("VL53L0X: configSensor "));
|
||||
// Serial.println((int)vl_config, DEC);
|
||||
// Enable/Disable Sigma and Signal check
|
||||
Status = VL53L0X_SetLimitCheckEnable(
|
||||
pMyDevice, VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, 1);
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status = VL53L0X_SetLimitCheckEnable(
|
||||
pMyDevice, VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, 1);
|
||||
}
|
||||
|
||||
if (Status != VL53L0X_ERROR_NONE)
|
||||
return false;
|
||||
|
||||
switch (vl_config) {
|
||||
case VL53L0X_SENSE_DEFAULT:
|
||||
// Taken directly from SDK vl5310x_SingleRanging_example.c
|
||||
// Maybe should convert to helper functions but...
|
||||
// Serial.println(" VL53L0X_SENSE_DEFAULT");
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status = VL53L0X_SetLimitCheckEnable(
|
||||
pMyDevice, VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, 1);
|
||||
}
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status = VL53L0X_SetLimitCheckValue(
|
||||
pMyDevice, VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD,
|
||||
(FixPoint1616_t)(1.5 * 0.023 * 65536));
|
||||
}
|
||||
break;
|
||||
case VL53L0X_SENSE_LONG_RANGE:
|
||||
Serial.println(" VL53L0X_SENSE_LONG_RANGE");
|
||||
Status = VL53L0X_SetLimitCheckValue(
|
||||
pMyDevice, VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE,
|
||||
(FixPoint1616_t)(0.1 * 65536));
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status = VL53L0X_SetLimitCheckValue(pMyDevice,
|
||||
VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE,
|
||||
(FixPoint1616_t)(60 * 65536));
|
||||
}
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status = VL53L0X_SetMeasurementTimingBudgetMicroSeconds(pMyDevice, 33000);
|
||||
}
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status = VL53L0X_SetVcselPulsePeriod(pMyDevice,
|
||||
VL53L0X_VCSEL_PERIOD_PRE_RANGE, 18);
|
||||
}
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status = VL53L0X_SetVcselPulsePeriod(
|
||||
pMyDevice, VL53L0X_VCSEL_PERIOD_FINAL_RANGE, 14);
|
||||
}
|
||||
break;
|
||||
case VL53L0X_SENSE_HIGH_SPEED:
|
||||
// Serial.println(" VL53L0X_SENSE_HIGH_SPEED");
|
||||
Status = VL53L0X_SetLimitCheckValue(
|
||||
pMyDevice, VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE,
|
||||
(FixPoint1616_t)(0.25 * 65536));
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status = VL53L0X_SetLimitCheckValue(pMyDevice,
|
||||
VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE,
|
||||
(FixPoint1616_t)(32 * 65536));
|
||||
}
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status = VL53L0X_SetMeasurementTimingBudgetMicroSeconds(pMyDevice, 30000);
|
||||
}
|
||||
break;
|
||||
case VL53L0X_SENSE_HIGH_ACCURACY:
|
||||
// increase timing budget to 200 ms
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
setLimitCheckValue(VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE,
|
||||
(FixPoint1616_t)(0.25 * 65536));
|
||||
}
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
setLimitCheckValue(VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE,
|
||||
(FixPoint1616_t)(18 * 65536));
|
||||
}
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
setMeasurementTimingBudgetMicroSeconds(200000);
|
||||
}
|
||||
// Not sure about ignore threshold, try turnning it off...
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status = VL53L0X_SetLimitCheckEnable(
|
||||
pMyDevice, VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, 0);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return (Status == VL53L0X_ERROR_NONE);
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief get a ranging measurement from the device
|
||||
@param RangingMeasurementData the pointer to the struct the data will be
|
||||
stored in
|
||||
@param debug Optional debug flag. If true debug information will print via
|
||||
Serial.print during execution. Defaults to false.
|
||||
@returns True if address was set successfully, False otherwise
|
||||
*/
|
||||
/**************************************************************************/
|
||||
VL53L0X_Error Adafruit_VL53L0X::getSingleRangingMeasurement(
|
||||
VL53L0X_RangingMeasurementData_t *RangingMeasurementData, boolean debug) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
FixPoint1616_t LimitCheckCurrent;
|
||||
|
||||
/*
|
||||
* Step 4 : Test ranging mode
|
||||
*/
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("sVL53L0X: PerformSingleRangingMeasurement"));
|
||||
}
|
||||
Status = VL53L0X_PerformSingleRangingMeasurement(pMyDevice,
|
||||
RangingMeasurementData);
|
||||
|
||||
if (debug) {
|
||||
printRangeStatus(RangingMeasurementData);
|
||||
}
|
||||
|
||||
if (debug) {
|
||||
VL53L0X_GetLimitCheckCurrent(pMyDevice,
|
||||
VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD,
|
||||
&LimitCheckCurrent);
|
||||
|
||||
Serial.print(F("RANGE IGNORE THRESHOLD: "));
|
||||
Serial.println((float)LimitCheckCurrent / 65536.0);
|
||||
|
||||
Serial.print(F("Measured distance: "));
|
||||
Serial.println(RangingMeasurementData->RangeMilliMeter);
|
||||
}
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Start the ranging measurement from the device
|
||||
@param debug Optional debug flag. If true debug information will print via
|
||||
Serial.print during execution. Defaults to false.
|
||||
@returns status code
|
||||
*/
|
||||
/**************************************************************************/
|
||||
VL53L0X_Error Adafruit_VL53L0X::startMeasurement(boolean debug) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("sVL53L0X: StartMeasurement"));
|
||||
}
|
||||
Status = VL53L0X_StartMeasurement(pMyDevice);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Stop ranging measurement from the device
|
||||
@param debug Optional debug flag. If true debug information will print via
|
||||
Serial.print during execution. Defaults to false.
|
||||
@returns status code
|
||||
*/
|
||||
/**************************************************************************/
|
||||
VL53L0X_Error Adafruit_VL53L0X::stopMeasurement(boolean debug) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("sVL53L0X: StopMeasurement"));
|
||||
}
|
||||
Status = VL53L0X_StopMeasurement(pMyDevice);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Stop ranging measurement from the device
|
||||
@param LimitCheckId Limit Check ID (0<= LimitCheckId <
|
||||
VL53L0X_GetNumberOfLimitCheck() ).
|
||||
@param pLimitCheckCurrent Pointer to current Value for a given LimitCheckId.
|
||||
@param debug Optional debug flag. If true debug information will print via
|
||||
Serial.print during execution. Defaults to false.
|
||||
@returns status code
|
||||
*/
|
||||
/**************************************************************************/
|
||||
VL53L0X_Error Adafruit_VL53L0X::getLimitCheckCurrent(
|
||||
uint8_t LimitCheckId, FixPoint1616_t *pLimitCheckCurrent, boolean debug) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
uint16_t intLimitCheckId = LimitCheckId;
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("sVL53L0X: getLimitCheckCurrent"));
|
||||
}
|
||||
Status = VL53L0X_GetLimitCheckCurrent(pMyDevice, intLimitCheckId,
|
||||
pLimitCheckCurrent);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Set a new device mode
|
||||
@param DeviceMode New device mode to apply
|
||||
Valid values are:
|
||||
VL53L0X_DEVICEMODE_SINGLE_RANGING
|
||||
VL53L0X_DEVICEMODE_CONTINUOUS_RANGING
|
||||
VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING
|
||||
VL53L0X_DEVICEMODE_SINGLE_HISTOGRAM
|
||||
VL53L0X_HISTOGRAMMODE_REFERENCE_ONLY
|
||||
VL53L0X_HISTOGRAMMODE_RETURN_ONLY
|
||||
VL53L0X_HISTOGRAMMODE_BOTH
|
||||
@param debug Optional debug flag. If true debug information will print via
|
||||
Serial.print during execution. Defaults to false.
|
||||
@returns status code
|
||||
*/
|
||||
/**************************************************************************/
|
||||
VL53L0X_Error Adafruit_VL53L0X::setDeviceMode(VL53L0X_DeviceModes DeviceMode,
|
||||
boolean debug) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("sVL53L0X: setDeviceMode"));
|
||||
}
|
||||
Status = VL53L0X_SetDeviceMode(pMyDevice, DeviceMode);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Set low and high Interrupt thresholds
|
||||
@param ThresholdLow Low threshold (mm, lux ..., depending on the mode)
|
||||
@param ThresholdHigh High threshold (mm, lux ..., depending on the mode)
|
||||
@param debug Optional debug flag. If true debug information will print via
|
||||
Serial.print during execution. Defaults to false.
|
||||
@returns status code
|
||||
*/
|
||||
/**************************************************************************/
|
||||
VL53L0X_Error Adafruit_VL53L0X::setInterruptThresholds(
|
||||
FixPoint1616_t ThresholdLow, FixPoint1616_t ThresholdHigh, boolean debug) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("sVL53L0X: setInterruptThresholds"));
|
||||
}
|
||||
// ST API Comments "no dependency on DeviceMode for Ewok " so device mode
|
||||
// not used but API requires something so pass in
|
||||
// VL53L0X_DEVICEMODE_CONTINUOUS_RANGING even though not used
|
||||
Status = VL53L0X_SetInterruptThresholds(
|
||||
pMyDevice, VL53L0X_DEVICEMODE_CONTINUOUS_RANGING, ThresholdLow,
|
||||
ThresholdHigh);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Get high and low Interrupt thresholds
|
||||
@param pThresholdLow Low threshold (mm, lux ..., depending on the mode)
|
||||
@param pThresholdHigh High threshold (mm, lux ..., depending on the mode)
|
||||
@param debug Optional debug flag. If true debug information will print via
|
||||
Serial.print during execution. Defaults to false.
|
||||
@returns status code
|
||||
*/
|
||||
/**************************************************************************/
|
||||
VL53L0X_Error
|
||||
Adafruit_VL53L0X::getInterruptThresholds(FixPoint1616_t *pThresholdLow,
|
||||
FixPoint1616_t *pThresholdHigh,
|
||||
boolean debug) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("sVL53L0X: getInterruptThresholds"));
|
||||
}
|
||||
// ST API Comments "no dependency on DeviceMode for Ewok " so device mode
|
||||
// not used but API requires something so pass in
|
||||
// VL53L0X_DEVICEMODE_CONTINUOUS_RANGING even though not used
|
||||
Status = VL53L0X_GetInterruptThresholds(
|
||||
pMyDevice, VL53L0X_DEVICEMODE_CONTINUOUS_RANGING, pThresholdLow,
|
||||
pThresholdHigh);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Get current new device mode
|
||||
@param pDeviceMode Pointer to current apply mode value
|
||||
@param debug Optional debug flag. If true debug information will print via
|
||||
Serial.print during execution. Defaults to false.
|
||||
@returns status code
|
||||
*/
|
||||
/**************************************************************************/
|
||||
VL53L0X_Error Adafruit_VL53L0X::getDeviceMode(VL53L0X_DeviceModes *pDeviceMode,
|
||||
boolean debug) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("sVL53L0X: getDeviceMode"));
|
||||
}
|
||||
Status = VL53L0X_GetDeviceMode(pMyDevice, pDeviceMode);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Clear system interrupt condition
|
||||
@param debug Optional debug flag. If true debug information will print via
|
||||
Serial.print during execution. Defaults to false.
|
||||
@returns status code
|
||||
*/
|
||||
/**************************************************************************/
|
||||
VL53L0X_Error Adafruit_VL53L0X::clearInterruptMask(boolean debug) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("sVL53L0X: clearInterruptMask"));
|
||||
}
|
||||
Status = VL53L0X_ClearInterruptMask(pMyDevice, 0);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Set the configuration of GPIO pin 0
|
||||
@param DeviceMode Device Mode associated to the Gpio.
|
||||
@param Functionality Select Pin functionality.
|
||||
@param Polarity Set interrupt polarity. Active high or active low.
|
||||
@param debug Optional debug flag. If true debug information will print via
|
||||
Serial.print during execution. Defaults to false.
|
||||
@returns status code
|
||||
*/
|
||||
/**************************************************************************/
|
||||
VL53L0X_Error Adafruit_VL53L0X::setGpioConfig(
|
||||
VL53L0X_DeviceModes DeviceMode, VL53L0X_GpioFunctionality Functionality,
|
||||
VL53L0X_InterruptPolarity Polarity, boolean debug) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("sVL53L0X: setGpioConfig"));
|
||||
}
|
||||
// Pin is always 0, Devicemode is ignored if not
|
||||
// VL53L0X_DEVICEMODE_GPIO_DRIVE or VL53L0X_DEVICEMODE_GPIO_OSC
|
||||
Status = VL53L0X_SetGpioConfig(pMyDevice, 0, DeviceMode, Functionality,
|
||||
Polarity);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Get current configuration for GPIO pin 0
|
||||
@param pDeviceMode Pointer to Device Mode associated to the Gpio.
|
||||
@param pFunctionality Pointer to Pin functionality.
|
||||
@param pPolarity Pointer to interrupt polarity. Active high or active low.
|
||||
@param debug Optional debug flag. If true debug information will print via
|
||||
Serial.print during execution. Defaults to false.
|
||||
@returns status code
|
||||
*/
|
||||
/**************************************************************************/
|
||||
VL53L0X_Error Adafruit_VL53L0X::getGpioConfig(
|
||||
VL53L0X_DeviceModes *pDeviceMode, VL53L0X_GpioFunctionality *pFunctionality,
|
||||
VL53L0X_InterruptPolarity *pPolarity, boolean debug) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("sVL53L0X: getGpioConfig"));
|
||||
}
|
||||
// Pin is always 0, Devicemode is ignored if not
|
||||
// VL53L0X_DEVICEMODE_GPIO_DRIVE or VL53L0X_DEVICEMODE_GPIO_OSC
|
||||
|
||||
Status = VL53L0X_GetGpioConfig(pMyDevice, 0, pDeviceMode, pFunctionality,
|
||||
pPolarity);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief get a ranging measurement from the device
|
||||
@param RangingMeasurementData the pointer to the struct the data will be
|
||||
stored in
|
||||
@param debug Optional debug flag. If true debug information will print via
|
||||
Serial.print during execution. Defaults to false.
|
||||
@returns VL53L0X_ERROR_NONE or Error if one occured
|
||||
*/
|
||||
/**************************************************************************/
|
||||
VL53L0X_Error Adafruit_VL53L0X::getRangingMeasurement(
|
||||
VL53L0X_RangingMeasurementData_t *RangingMeasurementData, boolean debug) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
FixPoint1616_t LimitCheckCurrent;
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (debug) {
|
||||
Serial.println(F("sVL53L0X: getRangingMeasurement"));
|
||||
}
|
||||
Status =
|
||||
VL53L0X_GetRangingMeasurementData(pMyDevice, RangingMeasurementData);
|
||||
|
||||
if (debug) {
|
||||
printRangeStatus(RangingMeasurementData);
|
||||
}
|
||||
|
||||
if (debug) {
|
||||
VL53L0X_GetLimitCheckCurrent(pMyDevice,
|
||||
VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD,
|
||||
&LimitCheckCurrent);
|
||||
|
||||
Serial.print(F("RANGE IGNORE THRESHOLD: "));
|
||||
Serial.println((float)LimitCheckCurrent / 65536.0);
|
||||
|
||||
Serial.print(F("Measured distance: "));
|
||||
Serial.println(RangingMeasurementData->RangeMilliMeter);
|
||||
}
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief print a ranging measurement out via Serial.print in a human-readable
|
||||
format
|
||||
@param pRangingMeasurementData a pointer to the ranging measurement data
|
||||
*/
|
||||
/**************************************************************************/
|
||||
void Adafruit_VL53L0X::printRangeStatus(
|
||||
VL53L0X_RangingMeasurementData_t *pRangingMeasurementData) {
|
||||
char buf[VL53L0X_MAX_STRING_LENGTH];
|
||||
uint8_t RangeStatus;
|
||||
|
||||
/*
|
||||
* New Range Status: data is valid when pRangingMeasurementData->RangeStatus =
|
||||
* 0
|
||||
*/
|
||||
|
||||
RangeStatus = pRangingMeasurementData->RangeStatus;
|
||||
|
||||
VL53L0X_GetRangeStatusString(RangeStatus, buf);
|
||||
|
||||
Serial.print(F("Range Status: "));
|
||||
Serial.print(RangeStatus);
|
||||
Serial.print(F(" : "));
|
||||
Serial.println(buf);
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Single shot ranging. Be sure to check the return of readRangeStatus
|
||||
to before using the return value!
|
||||
@return Distance in millimeters if valid
|
||||
*/
|
||||
/**************************************************************************/
|
||||
|
||||
uint16_t Adafruit_VL53L0X::readRange(void) {
|
||||
VL53L0X_RangingMeasurementData_t measure; // keep our own private copy
|
||||
|
||||
Status = getSingleRangingMeasurement(&measure, false);
|
||||
_rangeStatus = measure.RangeStatus;
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE)
|
||||
return measure.RangeMilliMeter;
|
||||
// Other status return something totally out of bounds...
|
||||
return 0xffff;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Request ranging success/error message (retrieve after ranging)
|
||||
@returns One of possible VL6180X_ERROR_* values
|
||||
*/
|
||||
/**************************************************************************/
|
||||
|
||||
uint8_t Adafruit_VL53L0X::readRangeStatus(void) { return _rangeStatus; }
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Start a range operation
|
||||
@return true if range operation successfully started.
|
||||
*/
|
||||
/**************************************************************************/
|
||||
|
||||
boolean Adafruit_VL53L0X::startRange(void) {
|
||||
|
||||
/* This function will do a complete single ranging
|
||||
* Here we fix the mode! */
|
||||
// first lets set the device in SINGLE_Ranging mode
|
||||
Status = VL53L0X_SetDeviceMode(pMyDevice, VL53L0X_DEVICEMODE_SINGLE_RANGING);
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
// Lets start up the measurement
|
||||
Status = VL53L0X_StartMeasurement(pMyDevice);
|
||||
}
|
||||
return (Status == VL53L0X_ERROR_NONE);
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Checks to see if a range operation has completed
|
||||
@return true if range operation completed or an error has happened
|
||||
*/
|
||||
/**************************************************************************/
|
||||
|
||||
boolean Adafruit_VL53L0X::isRangeComplete(void) {
|
||||
uint8_t NewDataReady = 0;
|
||||
Status = VL53L0X_GetMeasurementDataReady(pMyDevice, &NewDataReady);
|
||||
return ((Status != VL53L0X_ERROR_NONE) || (NewDataReady == 1));
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Wait until Range operation has completed.
|
||||
@return true if range operation completed, false if error.
|
||||
*/
|
||||
/**************************************************************************/
|
||||
|
||||
boolean Adafruit_VL53L0X::waitRangeComplete(void) {
|
||||
Status = VL53L0X_measurement_poll_for_completion(pMyDevice);
|
||||
|
||||
return (Status == VL53L0X_ERROR_NONE);
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Return the range in mm for the last operation.
|
||||
@return Range in mm.
|
||||
*/
|
||||
/**************************************************************************/
|
||||
|
||||
uint16_t Adafruit_VL53L0X::readRangeResult(void) {
|
||||
VL53L0X_RangingMeasurementData_t measure; // keep our own private copy
|
||||
|
||||
Status = VL53L0X_GetRangingMeasurementData(pMyDevice, &measure);
|
||||
_rangeStatus = measure.RangeStatus;
|
||||
if (Status == VL53L0X_ERROR_NONE)
|
||||
Status = VL53L0X_ClearInterruptMask(pMyDevice, 0);
|
||||
|
||||
if ((Status == VL53L0X_ERROR_NONE) && (_rangeStatus != 4))
|
||||
return measure.RangeMilliMeter;
|
||||
|
||||
return 0xffff; // some out of range value
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Start a continuous range operation
|
||||
@param period_ms inter measurement period in milliseconds
|
||||
@return True if successful, false otherwise
|
||||
*/
|
||||
/**************************************************************************/
|
||||
boolean Adafruit_VL53L0X::startRangeContinuous(uint16_t period_ms) {
|
||||
/* This function will do a complete single ranging
|
||||
* Here we fix the mode! */
|
||||
// first lets set the device in SINGLE_Ranging mode
|
||||
Status = VL53L0X_SetDeviceMode(pMyDevice,
|
||||
VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING);
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status =
|
||||
VL53L0X_SetInterMeasurementPeriodMilliSeconds(pMyDevice, period_ms);
|
||||
}
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
// Lets start up the measurement
|
||||
Status = VL53L0X_StartMeasurement(pMyDevice);
|
||||
}
|
||||
return (Status == VL53L0X_ERROR_NONE);
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Stop a continuous ranging operation
|
||||
*/
|
||||
/**************************************************************************/
|
||||
void Adafruit_VL53L0X::stopRangeContinuous(void) {
|
||||
|
||||
Status = VL53L0X_StopMeasurement(pMyDevice);
|
||||
|
||||
// lets wait until that completes.
|
||||
uint32_t StopCompleted = 0;
|
||||
uint32_t LoopNb;
|
||||
|
||||
// Wait until it finished
|
||||
// use timeout to avoid deadlock
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
LoopNb = 0;
|
||||
do {
|
||||
Status = VL53L0X_GetStopCompletedStatus(pMyDevice, &StopCompleted);
|
||||
if ((StopCompleted == 0x00) || Status != VL53L0X_ERROR_NONE) {
|
||||
break;
|
||||
}
|
||||
LoopNb = LoopNb + 1;
|
||||
VL53L0X_PollingDelay(pMyDevice);
|
||||
} while (LoopNb < VL53L0X_DEFAULT_MAX_LOOP);
|
||||
|
||||
if (LoopNb >= VL53L0X_DEFAULT_MAX_LOOP) {
|
||||
Status = VL53L0X_ERROR_TIME_OUT;
|
||||
}
|
||||
}
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status = VL53L0X_ClearInterruptMask(
|
||||
pMyDevice, VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY);
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Wrapper to ST library code to budget how long a measurement
|
||||
should take
|
||||
@param budget_us the new budget
|
||||
@returns True if success
|
||||
*/
|
||||
/**************************************************************************/
|
||||
boolean
|
||||
Adafruit_VL53L0X::setMeasurementTimingBudgetMicroSeconds(uint32_t budget_us) {
|
||||
Status = VL53L0X_SetMeasurementTimingBudgetMicroSeconds(pMyDevice, budget_us);
|
||||
return (Status == VL53L0X_ERROR_NONE);
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Wrapper to ST library code to budget how long a measurement
|
||||
should take
|
||||
@returns the current budget time in microseconds.
|
||||
*/
|
||||
/**************************************************************************/
|
||||
uint32_t Adafruit_VL53L0X::getMeasurementTimingBudgetMicroSeconds() {
|
||||
uint32_t budget_us;
|
||||
Status =
|
||||
VL53L0X_GetMeasurementTimingBudgetMicroSeconds(pMyDevice, &budget_us);
|
||||
return (budget_us);
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Sets the VCSEL pulse period.
|
||||
|
||||
@param VcselPeriodType VCSEL period identifier (pre-range|final).
|
||||
@param VCSELPulsePeriod VCSEL period value
|
||||
@returns True if success
|
||||
*/
|
||||
/**************************************************************************/
|
||||
boolean
|
||||
Adafruit_VL53L0X::setVcselPulsePeriod(VL53L0X_VcselPeriod VcselPeriodType,
|
||||
uint8_t VCSELPulsePeriod) {
|
||||
Status =
|
||||
VL53L0X_SetVcselPulsePeriod(pMyDevice, VcselPeriodType, VCSELPulsePeriod);
|
||||
return (Status == VL53L0X_ERROR_NONE);
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Gets the VCSEL pulse period.
|
||||
|
||||
@param VcselPeriodType VCSEL period identifier (pre-range|final).
|
||||
@returns the current pulse peried for the given type.
|
||||
*/
|
||||
/**************************************************************************/
|
||||
uint8_t
|
||||
Adafruit_VL53L0X::getVcselPulsePeriod(VL53L0X_VcselPeriod VcselPeriodType) {
|
||||
uint8_t cur_period;
|
||||
Status = VL53L0X_GetVcselPulsePeriod(pMyDevice, VcselPeriodType, &cur_period);
|
||||
return (cur_period);
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Enable/Disable a specific limit check
|
||||
|
||||
@param LimitCheckId Limit Check ID
|
||||
(0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ).
|
||||
@param LimitCheckEnable if 1 the check limit
|
||||
corresponding to LimitCheckId is Enabled
|
||||
if 0 the check limit
|
||||
corresponding to LimitCheckId is disabled
|
||||
@return true if succeeded
|
||||
*/
|
||||
/**************************************************************************/
|
||||
boolean Adafruit_VL53L0X::setLimitCheckEnable(uint16_t LimitCheckId,
|
||||
uint8_t LimitCheckEnable) {
|
||||
Status =
|
||||
VL53L0X_SetLimitCheckEnable(pMyDevice, LimitCheckId, LimitCheckEnable);
|
||||
return (Status == VL53L0X_ERROR_NONE);
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Get specific limit check enable state
|
||||
@param LimitCheckId Limit Check ID
|
||||
(0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ).
|
||||
@return current state of limit enabled
|
||||
*/
|
||||
/**************************************************************************/
|
||||
uint8_t Adafruit_VL53L0X::getLimitCheckEnable(uint16_t LimitCheckId) {
|
||||
|
||||
uint8_t cur_limit;
|
||||
Status = VL53L0X_GetLimitCheckEnable(pMyDevice, LimitCheckId, &cur_limit);
|
||||
return (cur_limit);
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Set a specific limit check value
|
||||
@param LimitCheckId Limit Check ID
|
||||
(0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ).
|
||||
LimitCheckId
|
||||
@param LimitCheckValue Limit Check Value
|
||||
@return true if succeeded.
|
||||
*/
|
||||
/**************************************************************************/
|
||||
|
||||
boolean Adafruit_VL53L0X::setLimitCheckValue(uint16_t LimitCheckId,
|
||||
FixPoint1616_t LimitCheckValue) {
|
||||
|
||||
Status = VL53L0X_SetLimitCheckValue(pMyDevice, LimitCheckId, LimitCheckValue);
|
||||
return (Status == VL53L0X_ERROR_NONE);
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Get a specific limit check value
|
||||
@param LimitCheckId Limit Check ID
|
||||
(0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ).
|
||||
@return limit check value in FixPoint1616
|
||||
*/
|
||||
/**************************************************************************/
|
||||
FixPoint1616_t Adafruit_VL53L0X::getLimitCheckValue(uint16_t LimitCheckId) {
|
||||
|
||||
FixPoint1616_t LimitCheckValue;
|
||||
Status =
|
||||
VL53L0X_GetLimitCheckValue(pMyDevice, LimitCheckId, &LimitCheckValue);
|
||||
return (LimitCheckValue);
|
||||
}
|
||||
164
code/lib/Adafruit_VL53L0X-1.2.3/src/Adafruit_VL53L0X.h
Normal file
164
code/lib/Adafruit_VL53L0X-1.2.3/src/Adafruit_VL53L0X.h
Normal file
@@ -0,0 +1,164 @@
|
||||
/*!
|
||||
* @file Adafruit_VL53L0X.h
|
||||
|
||||
This is a library for the Adafruit VL53L0X Sensor Breakout
|
||||
|
||||
Designed specifically to work with the VL53L0X sensor from Adafruit
|
||||
----> https://www.adafruit.com/products/3317
|
||||
|
||||
These sensors use I2C to communicate, 2 pins are required to
|
||||
interface
|
||||
Adafruit invests time and resources providing this open source code,
|
||||
please support Adafruit and open-source hardware by purchasing
|
||||
products from Adafruit!
|
||||
|
||||
Written by Limor Fried/Ladyada for Adafruit Industries.
|
||||
Updated by Andrew DeVries for Digital Example to include methods needed for
|
||||
Interrupt triggering.
|
||||
BSD license, all text above must be included in any
|
||||
redistribution
|
||||
****************************************************/
|
||||
|
||||
#ifndef ADAFRUIT_VL53L0X_H
|
||||
#define ADAFRUIT_VL53L0X_H
|
||||
|
||||
#if (ARDUINO >= 100)
|
||||
#include "Arduino.h"
|
||||
#else
|
||||
#include "WProgram.h"
|
||||
#endif
|
||||
|
||||
#include "Wire.h"
|
||||
#include "vl53l0x_api.h"
|
||||
|
||||
#define VL53L0X_I2C_ADDR 0x29 ///< Default sensor I2C address
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Class that stores state and functions for interacting with VL53L0X
|
||||
time-of-flight sensor chips
|
||||
*/
|
||||
/**************************************************************************/
|
||||
class Adafruit_VL53L0X {
|
||||
public:
|
||||
/** Sensor configurations */
|
||||
typedef enum {
|
||||
VL53L0X_SENSE_DEFAULT = 0,
|
||||
VL53L0X_SENSE_LONG_RANGE,
|
||||
VL53L0X_SENSE_HIGH_SPEED,
|
||||
VL53L0X_SENSE_HIGH_ACCURACY
|
||||
} VL53L0X_Sense_config_t;
|
||||
|
||||
boolean begin(uint8_t i2c_addr = VL53L0X_I2C_ADDR, boolean debug = false,
|
||||
TwoWire *i2c = &Wire,
|
||||
VL53L0X_Sense_config_t vl_config = VL53L0X_SENSE_DEFAULT);
|
||||
boolean setAddress(uint8_t newAddr);
|
||||
|
||||
// uint8_t getAddress(void); // not currently implemented
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief get a ranging measurement from the device
|
||||
@param pRangingMeasurementData the pointer to the struct the data will be
|
||||
stored in
|
||||
@param debug Optional debug flag. If true debug information will print via
|
||||
Serial.print during execution. Defaults to false.
|
||||
@returns True if address was set successfully, False otherwise
|
||||
*/
|
||||
/**************************************************************************/
|
||||
VL53L0X_Error
|
||||
rangingTest(VL53L0X_RangingMeasurementData_t *pRangingMeasurementData,
|
||||
boolean debug = false) {
|
||||
return getSingleRangingMeasurement(pRangingMeasurementData, debug);
|
||||
};
|
||||
|
||||
VL53L0X_Error getSingleRangingMeasurement(
|
||||
VL53L0X_RangingMeasurementData_t *pRangingMeasurementData,
|
||||
boolean debug = false);
|
||||
void
|
||||
printRangeStatus(VL53L0X_RangingMeasurementData_t *pRangingMeasurementData);
|
||||
|
||||
VL53L0X_Error getRangingMeasurement(
|
||||
VL53L0X_RangingMeasurementData_t *pRangingMeasurementData,
|
||||
boolean debug = false);
|
||||
VL53L0X_Error startMeasurement(boolean debug = false);
|
||||
VL53L0X_Error stopMeasurement(boolean debug = false);
|
||||
VL53L0X_Error getLimitCheckCurrent(uint8_t LimitCheckId,
|
||||
FixPoint1616_t *pLimitCheckCurrent,
|
||||
boolean debug = false);
|
||||
VL53L0X_Error getDeviceMode(VL53L0X_DeviceModes *pDeviceMode,
|
||||
boolean debug = false);
|
||||
VL53L0X_Error setDeviceMode(VL53L0X_DeviceModes DeviceMode,
|
||||
boolean debug = false);
|
||||
|
||||
VL53L0X_Error setInterruptThresholds(FixPoint1616_t ThresholdLow,
|
||||
FixPoint1616_t ThresholdHigh,
|
||||
boolean debug = false);
|
||||
VL53L0X_Error getInterruptThresholds(FixPoint1616_t *pThresholdLow,
|
||||
FixPoint1616_t *pThresholdHigh,
|
||||
boolean debug = false);
|
||||
VL53L0X_Error clearInterruptMask(boolean debug = false);
|
||||
|
||||
VL53L0X_Error getGpioConfig(VL53L0X_DeviceModes *pDeviceMode,
|
||||
VL53L0X_GpioFunctionality *pFunctionality,
|
||||
VL53L0X_InterruptPolarity *pPolarity,
|
||||
boolean debug = false);
|
||||
VL53L0X_Error setGpioConfig(VL53L0X_DeviceModes DeviceMode,
|
||||
VL53L0X_GpioFunctionality Functionality,
|
||||
VL53L0X_InterruptPolarity Polarity,
|
||||
boolean debug = false);
|
||||
|
||||
VL53L0X_Error Status =
|
||||
VL53L0X_ERROR_NONE; ///< indicates whether or not the sensor has
|
||||
///< encountered an error
|
||||
// Add similar methods as Adafruit_VL6180X class adapted to range of device
|
||||
uint16_t readRange(void);
|
||||
// float readLux(uint8_t gain);
|
||||
uint8_t readRangeStatus(void);
|
||||
|
||||
boolean startRange(void);
|
||||
boolean isRangeComplete(void);
|
||||
boolean waitRangeComplete(void);
|
||||
uint16_t readRangeResult(void);
|
||||
|
||||
boolean startRangeContinuous(uint16_t period_ms = 50);
|
||||
void stopRangeContinuous(void);
|
||||
|
||||
// void setTimeout(uint16_t timeout) { io_timeout = timeout; }
|
||||
// uint16_t getTimeout(void) { return io_timeout; }
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief timeout status
|
||||
@returns True if timeout has occurred, False otherwise
|
||||
*/
|
||||
/**************************************************************************/
|
||||
boolean timeoutOccurred(void) { return false; }
|
||||
|
||||
boolean configSensor(VL53L0X_Sense_config_t vl_config);
|
||||
|
||||
// Export some wrappers to internal setting functions
|
||||
// that are used by the above helper function to allow
|
||||
// more complete control.
|
||||
boolean setMeasurementTimingBudgetMicroSeconds(uint32_t budget_us);
|
||||
uint32_t getMeasurementTimingBudgetMicroSeconds(void);
|
||||
|
||||
boolean setVcselPulsePeriod(VL53L0X_VcselPeriod VcselPeriodType,
|
||||
uint8_t VCSELPulsePeriod);
|
||||
|
||||
uint8_t getVcselPulsePeriod(VL53L0X_VcselPeriod VcselPeriodType);
|
||||
|
||||
boolean setLimitCheckEnable(uint16_t LimitCheckId, uint8_t LimitCheckEnable);
|
||||
uint8_t getLimitCheckEnable(uint16_t LimitCheckId);
|
||||
boolean setLimitCheckValue(uint16_t LimitCheckId,
|
||||
FixPoint1616_t LimitCheckValue);
|
||||
FixPoint1616_t getLimitCheckValue(uint16_t LimitCheckId);
|
||||
|
||||
private:
|
||||
VL53L0X_Dev_t MyDevice;
|
||||
VL53L0X_Dev_t *pMyDevice = &MyDevice;
|
||||
VL53L0X_DeviceInfo_t DeviceInfo;
|
||||
|
||||
uint8_t _rangeStatus;
|
||||
};
|
||||
|
||||
#endif
|
||||
2811
code/lib/Adafruit_VL53L0X-1.2.3/src/core/src/vl53l0x_api.cpp
Normal file
2811
code/lib/Adafruit_VL53L0X-1.2.3/src/core/src/vl53l0x_api.cpp
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
2023
code/lib/Adafruit_VL53L0X-1.2.3/src/core/src/vl53l0x_api_core.cpp
Normal file
2023
code/lib/Adafruit_VL53L0X-1.2.3/src/core/src/vl53l0x_api_core.cpp
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,40 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2016, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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.
|
||||
******************************************************************************/
|
||||
|
||||
#include "../../vl53l0x_api.h"
|
||||
#include "../../vl53l0x_api_core.h"
|
||||
|
||||
#ifndef __KERNEL__
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
#define LOG_FUNCTION_START(fmt, ...) \
|
||||
_LOG_FUNCTION_START(TRACE_MODULE_API, fmt, ##__VA_ARGS__)
|
||||
#define LOG_FUNCTION_END(status, ...) \
|
||||
_LOG_FUNCTION_END(TRACE_MODULE_API, status, ##__VA_ARGS__)
|
||||
#define LOG_FUNCTION_END_FMT(status, fmt, ...) \
|
||||
_LOG_FUNCTION_END_FMT(TRACE_MODULE_API, status, fmt, ##__VA_ARGS__)
|
||||
@@ -0,0 +1,406 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2016, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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.
|
||||
******************************************************************************/
|
||||
|
||||
#include "../../vl53l0x_api_strings.h"
|
||||
#include "../../vl53l0x_api.h"
|
||||
#include "../../vl53l0x_api_core.h"
|
||||
|
||||
#ifndef __KERNEL__
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#define LOG_FUNCTION_START(fmt, ...) \
|
||||
_LOG_FUNCTION_START(TRACE_MODULE_API, fmt, ##__VA_ARGS__)
|
||||
#define LOG_FUNCTION_END(status, ...) \
|
||||
_LOG_FUNCTION_END(TRACE_MODULE_API, status, ##__VA_ARGS__)
|
||||
#define LOG_FUNCTION_END_FMT(status, fmt, ...) \
|
||||
_LOG_FUNCTION_END_FMT(TRACE_MODULE_API, status, fmt, ##__VA_ARGS__)
|
||||
|
||||
VL53L0X_Error
|
||||
VL53L0X_check_part_used(VL53L0X_DEV Dev, uint8_t *Revision,
|
||||
VL53L0X_DeviceInfo_t *pVL53L0X_DeviceInfo) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
uint8_t ModuleIdInt;
|
||||
char *ProductId_tmp;
|
||||
|
||||
LOG_FUNCTION_START("");
|
||||
|
||||
Status = VL53L0X_get_info_from_device(Dev, 2);
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
ModuleIdInt = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, ModuleId);
|
||||
|
||||
if (ModuleIdInt == 0) {
|
||||
*Revision = 0;
|
||||
VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->ProductId, "");
|
||||
} else {
|
||||
*Revision = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, Revision);
|
||||
ProductId_tmp = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, ProductId);
|
||||
VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->ProductId, ProductId_tmp);
|
||||
}
|
||||
}
|
||||
|
||||
LOG_FUNCTION_END(Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error
|
||||
VL53L0X_get_device_info(VL53L0X_DEV Dev,
|
||||
VL53L0X_DeviceInfo_t *pVL53L0X_DeviceInfo) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
uint8_t revision_id;
|
||||
uint8_t Revision;
|
||||
|
||||
Status = VL53L0X_check_part_used(Dev, &Revision, pVL53L0X_DeviceInfo);
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
if (Revision == 0) {
|
||||
VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->Name,
|
||||
VL53L0X_STRING_DEVICE_INFO_NAME_TS0);
|
||||
} else if ((Revision <= 34) && (Revision != 32)) {
|
||||
VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->Name,
|
||||
VL53L0X_STRING_DEVICE_INFO_NAME_TS1);
|
||||
} else if (Revision < 39) {
|
||||
VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->Name,
|
||||
VL53L0X_STRING_DEVICE_INFO_NAME_TS2);
|
||||
} else {
|
||||
VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->Name,
|
||||
VL53L0X_STRING_DEVICE_INFO_NAME_ES1);
|
||||
}
|
||||
|
||||
VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->Type,
|
||||
VL53L0X_STRING_DEVICE_INFO_TYPE);
|
||||
}
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status = VL53L0X_RdByte(Dev, VL53L0X_REG_IDENTIFICATION_MODEL_ID,
|
||||
&pVL53L0X_DeviceInfo->ProductType);
|
||||
}
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
Status = VL53L0X_RdByte(Dev, VL53L0X_REG_IDENTIFICATION_REVISION_ID,
|
||||
&revision_id);
|
||||
pVL53L0X_DeviceInfo->ProductRevisionMajor = 1;
|
||||
pVL53L0X_DeviceInfo->ProductRevisionMinor = (revision_id & 0xF0) >> 4;
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error VL53L0X_get_device_error_string(VL53L0X_DeviceError ErrorCode,
|
||||
char *pDeviceErrorString) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
|
||||
LOG_FUNCTION_START("");
|
||||
|
||||
switch (ErrorCode) {
|
||||
case VL53L0X_DEVICEERROR_NONE:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString, VL53L0X_STRING_DEVICEERROR_NONE);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_VCSELCONTINUITYTESTFAILURE:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString,
|
||||
VL53L0X_STRING_DEVICEERROR_VCSELCONTINUITYTESTFAILURE);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_VCSELWATCHDOGTESTFAILURE:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString,
|
||||
VL53L0X_STRING_DEVICEERROR_VCSELWATCHDOGTESTFAILURE);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_NOVHVVALUEFOUND:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString,
|
||||
VL53L0X_STRING_DEVICEERROR_NOVHVVALUEFOUND);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_MSRCNOTARGET:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString,
|
||||
VL53L0X_STRING_DEVICEERROR_MSRCNOTARGET);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_SNRCHECK:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString, VL53L0X_STRING_DEVICEERROR_SNRCHECK);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_RANGEPHASECHECK:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString,
|
||||
VL53L0X_STRING_DEVICEERROR_RANGEPHASECHECK);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_SIGMATHRESHOLDCHECK:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString,
|
||||
VL53L0X_STRING_DEVICEERROR_SIGMATHRESHOLDCHECK);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_TCC:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString, VL53L0X_STRING_DEVICEERROR_TCC);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_PHASECONSISTENCY:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString,
|
||||
VL53L0X_STRING_DEVICEERROR_PHASECONSISTENCY);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_MINCLIP:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString, VL53L0X_STRING_DEVICEERROR_MINCLIP);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_RANGECOMPLETE:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString,
|
||||
VL53L0X_STRING_DEVICEERROR_RANGECOMPLETE);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_ALGOUNDERFLOW:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString,
|
||||
VL53L0X_STRING_DEVICEERROR_ALGOUNDERFLOW);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_ALGOOVERFLOW:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString,
|
||||
VL53L0X_STRING_DEVICEERROR_ALGOOVERFLOW);
|
||||
break;
|
||||
case VL53L0X_DEVICEERROR_RANGEIGNORETHRESHOLD:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString,
|
||||
VL53L0X_STRING_DEVICEERROR_RANGEIGNORETHRESHOLD);
|
||||
break;
|
||||
|
||||
default:
|
||||
VL53L0X_COPYSTRING(pDeviceErrorString, VL53L0X_STRING_UNKNOW_ERROR_CODE);
|
||||
}
|
||||
|
||||
LOG_FUNCTION_END(Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error VL53L0X_get_range_status_string(uint8_t RangeStatus,
|
||||
char *pRangeStatusString) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
|
||||
LOG_FUNCTION_START("");
|
||||
|
||||
switch (RangeStatus) {
|
||||
case 0:
|
||||
VL53L0X_COPYSTRING(pRangeStatusString,
|
||||
VL53L0X_STRING_RANGESTATUS_RANGEVALID);
|
||||
break;
|
||||
case 1:
|
||||
VL53L0X_COPYSTRING(pRangeStatusString, VL53L0X_STRING_RANGESTATUS_SIGMA);
|
||||
break;
|
||||
case 2:
|
||||
VL53L0X_COPYSTRING(pRangeStatusString, VL53L0X_STRING_RANGESTATUS_SIGNAL);
|
||||
break;
|
||||
case 3:
|
||||
VL53L0X_COPYSTRING(pRangeStatusString, VL53L0X_STRING_RANGESTATUS_MINRANGE);
|
||||
break;
|
||||
case 4:
|
||||
VL53L0X_COPYSTRING(pRangeStatusString, VL53L0X_STRING_RANGESTATUS_PHASE);
|
||||
break;
|
||||
case 5:
|
||||
VL53L0X_COPYSTRING(pRangeStatusString, VL53L0X_STRING_RANGESTATUS_HW);
|
||||
break;
|
||||
|
||||
default: /**/
|
||||
VL53L0X_COPYSTRING(pRangeStatusString, VL53L0X_STRING_RANGESTATUS_NONE);
|
||||
}
|
||||
|
||||
LOG_FUNCTION_END(Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error VL53L0X_get_pal_error_string(VL53L0X_Error PalErrorCode,
|
||||
char *pPalErrorString) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
|
||||
LOG_FUNCTION_START("");
|
||||
|
||||
switch (PalErrorCode) {
|
||||
case VL53L0X_ERROR_NONE:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_NONE);
|
||||
break;
|
||||
case VL53L0X_ERROR_CALIBRATION_WARNING:
|
||||
VL53L0X_COPYSTRING(pPalErrorString,
|
||||
VL53L0X_STRING_ERROR_CALIBRATION_WARNING);
|
||||
break;
|
||||
case VL53L0X_ERROR_MIN_CLIPPED:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_MIN_CLIPPED);
|
||||
break;
|
||||
case VL53L0X_ERROR_UNDEFINED:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_UNDEFINED);
|
||||
break;
|
||||
case VL53L0X_ERROR_INVALID_PARAMS:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_INVALID_PARAMS);
|
||||
break;
|
||||
case VL53L0X_ERROR_NOT_SUPPORTED:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_NOT_SUPPORTED);
|
||||
break;
|
||||
case VL53L0X_ERROR_INTERRUPT_NOT_CLEARED:
|
||||
VL53L0X_COPYSTRING(pPalErrorString,
|
||||
VL53L0X_STRING_ERROR_INTERRUPT_NOT_CLEARED);
|
||||
break;
|
||||
case VL53L0X_ERROR_RANGE_ERROR:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_RANGE_ERROR);
|
||||
break;
|
||||
case VL53L0X_ERROR_TIME_OUT:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_TIME_OUT);
|
||||
break;
|
||||
case VL53L0X_ERROR_MODE_NOT_SUPPORTED:
|
||||
VL53L0X_COPYSTRING(pPalErrorString,
|
||||
VL53L0X_STRING_ERROR_MODE_NOT_SUPPORTED);
|
||||
break;
|
||||
case VL53L0X_ERROR_BUFFER_TOO_SMALL:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_BUFFER_TOO_SMALL);
|
||||
break;
|
||||
case VL53L0X_ERROR_GPIO_NOT_EXISTING:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_GPIO_NOT_EXISTING);
|
||||
break;
|
||||
case VL53L0X_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED:
|
||||
VL53L0X_COPYSTRING(pPalErrorString,
|
||||
VL53L0X_STRING_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED);
|
||||
break;
|
||||
case VL53L0X_ERROR_CONTROL_INTERFACE:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_CONTROL_INTERFACE);
|
||||
break;
|
||||
case VL53L0X_ERROR_INVALID_COMMAND:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_INVALID_COMMAND);
|
||||
break;
|
||||
case VL53L0X_ERROR_DIVISION_BY_ZERO:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_DIVISION_BY_ZERO);
|
||||
break;
|
||||
case VL53L0X_ERROR_REF_SPAD_INIT:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_REF_SPAD_INIT);
|
||||
break;
|
||||
case VL53L0X_ERROR_NOT_IMPLEMENTED:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_ERROR_NOT_IMPLEMENTED);
|
||||
break;
|
||||
|
||||
default:
|
||||
VL53L0X_COPYSTRING(pPalErrorString, VL53L0X_STRING_UNKNOW_ERROR_CODE);
|
||||
}
|
||||
|
||||
LOG_FUNCTION_END(Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error VL53L0X_get_pal_state_string(VL53L0X_State PalStateCode,
|
||||
char *pPalStateString) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
|
||||
LOG_FUNCTION_START("");
|
||||
|
||||
switch (PalStateCode) {
|
||||
case VL53L0X_STATE_POWERDOWN:
|
||||
VL53L0X_COPYSTRING(pPalStateString, VL53L0X_STRING_STATE_POWERDOWN);
|
||||
break;
|
||||
case VL53L0X_STATE_WAIT_STATICINIT:
|
||||
VL53L0X_COPYSTRING(pPalStateString, VL53L0X_STRING_STATE_WAIT_STATICINIT);
|
||||
break;
|
||||
case VL53L0X_STATE_STANDBY:
|
||||
VL53L0X_COPYSTRING(pPalStateString, VL53L0X_STRING_STATE_STANDBY);
|
||||
break;
|
||||
case VL53L0X_STATE_IDLE:
|
||||
VL53L0X_COPYSTRING(pPalStateString, VL53L0X_STRING_STATE_IDLE);
|
||||
break;
|
||||
case VL53L0X_STATE_RUNNING:
|
||||
VL53L0X_COPYSTRING(pPalStateString, VL53L0X_STRING_STATE_RUNNING);
|
||||
break;
|
||||
case VL53L0X_STATE_UNKNOWN:
|
||||
VL53L0X_COPYSTRING(pPalStateString, VL53L0X_STRING_STATE_UNKNOWN);
|
||||
break;
|
||||
case VL53L0X_STATE_ERROR:
|
||||
VL53L0X_COPYSTRING(pPalStateString, VL53L0X_STRING_STATE_ERROR);
|
||||
break;
|
||||
|
||||
default:
|
||||
VL53L0X_COPYSTRING(pPalStateString, VL53L0X_STRING_STATE_UNKNOWN);
|
||||
}
|
||||
|
||||
LOG_FUNCTION_END(Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error
|
||||
VL53L0X_get_sequence_steps_info(VL53L0X_SequenceStepId SequenceStepId,
|
||||
char *pSequenceStepsString) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
LOG_FUNCTION_START("");
|
||||
|
||||
switch (SequenceStepId) {
|
||||
case VL53L0X_SEQUENCESTEP_TCC:
|
||||
VL53L0X_COPYSTRING(pSequenceStepsString, VL53L0X_STRING_SEQUENCESTEP_TCC);
|
||||
break;
|
||||
case VL53L0X_SEQUENCESTEP_DSS:
|
||||
VL53L0X_COPYSTRING(pSequenceStepsString, VL53L0X_STRING_SEQUENCESTEP_DSS);
|
||||
break;
|
||||
case VL53L0X_SEQUENCESTEP_MSRC:
|
||||
VL53L0X_COPYSTRING(pSequenceStepsString, VL53L0X_STRING_SEQUENCESTEP_MSRC);
|
||||
break;
|
||||
case VL53L0X_SEQUENCESTEP_PRE_RANGE:
|
||||
VL53L0X_COPYSTRING(pSequenceStepsString,
|
||||
VL53L0X_STRING_SEQUENCESTEP_PRE_RANGE);
|
||||
break;
|
||||
case VL53L0X_SEQUENCESTEP_FINAL_RANGE:
|
||||
VL53L0X_COPYSTRING(pSequenceStepsString,
|
||||
VL53L0X_STRING_SEQUENCESTEP_FINAL_RANGE);
|
||||
break;
|
||||
|
||||
default:
|
||||
Status = VL53L0X_ERROR_INVALID_PARAMS;
|
||||
}
|
||||
|
||||
LOG_FUNCTION_END(Status);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error VL53L0X_get_limit_check_info(VL53L0X_DEV Dev,
|
||||
uint16_t LimitCheckId,
|
||||
char *pLimitCheckString) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
|
||||
LOG_FUNCTION_START("");
|
||||
|
||||
switch (LimitCheckId) {
|
||||
case VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE:
|
||||
VL53L0X_COPYSTRING(pLimitCheckString,
|
||||
VL53L0X_STRING_CHECKENABLE_SIGMA_FINAL_RANGE);
|
||||
break;
|
||||
case VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE:
|
||||
VL53L0X_COPYSTRING(pLimitCheckString,
|
||||
VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE);
|
||||
break;
|
||||
case VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP:
|
||||
VL53L0X_COPYSTRING(pLimitCheckString,
|
||||
VL53L0X_STRING_CHECKENABLE_SIGNAL_REF_CLIP);
|
||||
break;
|
||||
case VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD:
|
||||
VL53L0X_COPYSTRING(pLimitCheckString,
|
||||
VL53L0X_STRING_CHECKENABLE_RANGE_IGNORE_THRESHOLD);
|
||||
break;
|
||||
|
||||
case VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC:
|
||||
VL53L0X_COPYSTRING(pLimitCheckString,
|
||||
VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_MSRC);
|
||||
break;
|
||||
|
||||
case VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE:
|
||||
VL53L0X_COPYSTRING(pLimitCheckString,
|
||||
VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_PRE_RANGE);
|
||||
break;
|
||||
|
||||
default:
|
||||
VL53L0X_COPYSTRING(pLimitCheckString, VL53L0X_STRING_UNKNOW_ERROR_CODE);
|
||||
}
|
||||
|
||||
LOG_FUNCTION_END(Status);
|
||||
return Status;
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
#include "../../vl53l0x_def.h"
|
||||
#include "../../vl53l0x_i2c_platform.h"
|
||||
|
||||
//#define I2C_DEBUG
|
||||
|
||||
int VL53L0X_i2c_init(TwoWire *i2c) {
|
||||
i2c->begin();
|
||||
return VL53L0X_ERROR_NONE;
|
||||
}
|
||||
|
||||
int VL53L0X_write_multi(uint8_t deviceAddress, uint8_t index, uint8_t *pdata,
|
||||
uint32_t count, TwoWire *i2c) {
|
||||
i2c->beginTransmission(deviceAddress);
|
||||
i2c->write(index);
|
||||
#ifdef I2C_DEBUG
|
||||
Serial.print("\tWriting ");
|
||||
Serial.print(count);
|
||||
Serial.print(" to addr 0x");
|
||||
Serial.print(index, HEX);
|
||||
Serial.print(": ");
|
||||
#endif
|
||||
while (count--) {
|
||||
i2c->write((uint8_t)pdata[0]);
|
||||
#ifdef I2C_DEBUG
|
||||
Serial.print("0x");
|
||||
Serial.print(pdata[0], HEX);
|
||||
Serial.print(", ");
|
||||
#endif
|
||||
pdata++;
|
||||
}
|
||||
#ifdef I2C_DEBUG
|
||||
Serial.println();
|
||||
#endif
|
||||
i2c->endTransmission();
|
||||
return VL53L0X_ERROR_NONE;
|
||||
}
|
||||
|
||||
int VL53L0X_read_multi(uint8_t deviceAddress, uint8_t index, uint8_t *pdata,
|
||||
uint32_t count, TwoWire *i2c) {
|
||||
i2c->beginTransmission(deviceAddress);
|
||||
i2c->write(index);
|
||||
i2c->endTransmission();
|
||||
i2c->requestFrom(deviceAddress, (byte)count);
|
||||
#ifdef I2C_DEBUG
|
||||
Serial.print("\tReading ");
|
||||
Serial.print(count);
|
||||
Serial.print(" from addr 0x");
|
||||
Serial.print(index, HEX);
|
||||
Serial.print(": ");
|
||||
#endif
|
||||
|
||||
while (count--) {
|
||||
pdata[0] = i2c->read();
|
||||
#ifdef I2C_DEBUG
|
||||
Serial.print("0x");
|
||||
Serial.print(pdata[0], HEX);
|
||||
Serial.print(", ");
|
||||
#endif
|
||||
pdata++;
|
||||
}
|
||||
#ifdef I2C_DEBUG
|
||||
Serial.println();
|
||||
#endif
|
||||
return VL53L0X_ERROR_NONE;
|
||||
}
|
||||
|
||||
int VL53L0X_write_byte(uint8_t deviceAddress, uint8_t index, uint8_t data,
|
||||
TwoWire *i2c) {
|
||||
return VL53L0X_write_multi(deviceAddress, index, &data, 1, i2c);
|
||||
}
|
||||
|
||||
int VL53L0X_write_word(uint8_t deviceAddress, uint8_t index, uint16_t data,
|
||||
TwoWire *i2c) {
|
||||
uint8_t buff[2];
|
||||
buff[1] = data & 0xFF;
|
||||
buff[0] = data >> 8;
|
||||
return VL53L0X_write_multi(deviceAddress, index, buff, 2, i2c);
|
||||
}
|
||||
|
||||
int VL53L0X_write_dword(uint8_t deviceAddress, uint8_t index, uint32_t data,
|
||||
TwoWire *i2c) {
|
||||
uint8_t buff[4];
|
||||
|
||||
buff[3] = data & 0xFF;
|
||||
buff[2] = data >> 8;
|
||||
buff[1] = data >> 16;
|
||||
buff[0] = data >> 24;
|
||||
|
||||
return VL53L0X_write_multi(deviceAddress, index, buff, 4, i2c);
|
||||
}
|
||||
|
||||
int VL53L0X_read_byte(uint8_t deviceAddress, uint8_t index, uint8_t *data,
|
||||
TwoWire *i2c) {
|
||||
return VL53L0X_read_multi(deviceAddress, index, data, 1, i2c);
|
||||
}
|
||||
|
||||
int VL53L0X_read_word(uint8_t deviceAddress, uint8_t index, uint16_t *data,
|
||||
TwoWire *i2c) {
|
||||
uint8_t buff[2];
|
||||
int r = VL53L0X_read_multi(deviceAddress, index, buff, 2, i2c);
|
||||
|
||||
uint16_t tmp;
|
||||
tmp = buff[0];
|
||||
tmp <<= 8;
|
||||
tmp |= buff[1];
|
||||
*data = tmp;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int VL53L0X_read_dword(uint8_t deviceAddress, uint8_t index, uint32_t *data,
|
||||
TwoWire *i2c) {
|
||||
uint8_t buff[4];
|
||||
int r = VL53L0X_read_multi(deviceAddress, index, buff, 4, i2c);
|
||||
|
||||
uint32_t tmp;
|
||||
tmp = buff[0];
|
||||
tmp <<= 8;
|
||||
tmp |= buff[1];
|
||||
tmp <<= 8;
|
||||
tmp |= buff[2];
|
||||
tmp <<= 8;
|
||||
tmp |= buff[3];
|
||||
|
||||
*data = tmp;
|
||||
|
||||
return r;
|
||||
}
|
||||
@@ -0,0 +1,285 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2015, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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_i2c.c
|
||||
*
|
||||
* Copyright (C) 2014 ST MicroElectronics
|
||||
*
|
||||
* provide variable word size byte/Word/dword VL6180x register access via i2c
|
||||
*
|
||||
*/
|
||||
#include "../../vl53l0x_platform.h"
|
||||
#include "../../vl53l0x_api.h"
|
||||
#include "../../vl53l0x_i2c_platform.h"
|
||||
|
||||
#define LOG_FUNCTION_START(fmt, ...) \
|
||||
_LOG_FUNCTION_START(TRACE_MODULE_PLATFORM, fmt, ##__VA_ARGS__)
|
||||
#define LOG_FUNCTION_END(status, ...) \
|
||||
_LOG_FUNCTION_END(TRACE_MODULE_PLATFORM, status, ##__VA_ARGS__)
|
||||
#define LOG_FUNCTION_END_FMT(status, fmt, ...) \
|
||||
_LOG_FUNCTION_END_FMT(TRACE_MODULE_PLATFORM, status, fmt, ##__VA_ARGS__)
|
||||
|
||||
/**
|
||||
* @def I2C_BUFFER_CONFIG
|
||||
*
|
||||
* @brief Configure Device register I2C access
|
||||
*
|
||||
* @li 0 : one GLOBAL buffer \n
|
||||
* Use one global buffer of MAX_I2C_XFER_SIZE byte in data space \n
|
||||
* This solution is not multi-Device compliant nor multi-thread cpu safe \n
|
||||
* It can be the best option for small 8/16 bit MCU without stack and limited
|
||||
* ram (STM8s, 80C51 ...)
|
||||
*
|
||||
* @li 1 : ON_STACK/local \n
|
||||
* Use local variable (on stack) buffer \n
|
||||
* This solution is multi-thread with use of i2c resource lock or mutex see
|
||||
* VL6180x_GetI2CAccess() \n
|
||||
*
|
||||
* @li 2 : User defined \n
|
||||
* Per Device potentially dynamic allocated. Requires VL6180x_GetI2cBuffer()
|
||||
* to be implemented.
|
||||
* @ingroup Configuration
|
||||
*/
|
||||
#define I2C_BUFFER_CONFIG 1
|
||||
/** Maximum buffer size to be used in i2c */
|
||||
#define VL53L0X_MAX_I2C_XFER_SIZE \
|
||||
64 /* Maximum buffer size to be used in i2c \
|
||||
*/
|
||||
|
||||
#if I2C_BUFFER_CONFIG == 0
|
||||
/* GLOBAL config buffer */
|
||||
uint8_t i2c_global_buffer[VL53L0X_MAX_I2C_XFER_SIZE];
|
||||
|
||||
#define DECL_I2C_BUFFER
|
||||
#define VL53L0X_GetLocalBuffer(Dev, n_byte) i2c_global_buffer
|
||||
|
||||
#elif I2C_BUFFER_CONFIG == 1
|
||||
/* ON STACK */
|
||||
#define DECL_I2C_BUFFER uint8_t LocBuffer[VL53L0X_MAX_I2C_XFER_SIZE];
|
||||
#define VL53L0X_GetLocalBuffer(Dev, n_byte) LocBuffer
|
||||
#elif I2C_BUFFER_CONFIG == 2
|
||||
/* user define buffer type declare DECL_I2C_BUFFER as access via
|
||||
* VL53L0X_GetLocalBuffer */
|
||||
#define DECL_I2C_BUFFER
|
||||
#else
|
||||
#error "invalid I2C_BUFFER_CONFIG "
|
||||
#endif
|
||||
|
||||
#define VL53L0X_I2C_USER_VAR /* none but could be for a flag var to get/pass \
|
||||
to mutex interruptible return flags and try \
|
||||
again */
|
||||
#define VL53L0X_GetI2CAccess(Dev) /* todo mutex acquire */
|
||||
#define VL53L0X_DoneI2CAcces(Dev) /* todo mutex release */
|
||||
|
||||
VL53L0X_Error VL53L0X_LockSequenceAccess(VL53L0X_DEV Dev) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error VL53L0X_UnlockSequenceAccess(VL53L0X_DEV Dev) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
// the ranging_sensor_comms.dll will take care of the page selection
|
||||
VL53L0X_Error VL53L0X_WriteMulti(VL53L0X_DEV Dev, uint8_t index, uint8_t *pdata,
|
||||
uint32_t count) {
|
||||
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
int32_t status_int = 0;
|
||||
uint8_t deviceAddress;
|
||||
|
||||
if (count >= VL53L0X_MAX_I2C_XFER_SIZE) {
|
||||
Status = VL53L0X_ERROR_INVALID_PARAMS;
|
||||
}
|
||||
|
||||
deviceAddress = Dev->I2cDevAddr;
|
||||
|
||||
status_int =
|
||||
VL53L0X_write_multi(deviceAddress, index, pdata, count, Dev->i2c);
|
||||
|
||||
if (status_int != 0)
|
||||
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
// the ranging_sensor_comms.dll will take care of the page selection
|
||||
VL53L0X_Error VL53L0X_ReadMulti(VL53L0X_DEV Dev, uint8_t index, uint8_t *pdata,
|
||||
uint32_t count) {
|
||||
VL53L0X_I2C_USER_VAR
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
int32_t status_int;
|
||||
uint8_t deviceAddress;
|
||||
|
||||
if (count >= VL53L0X_MAX_I2C_XFER_SIZE) {
|
||||
Status = VL53L0X_ERROR_INVALID_PARAMS;
|
||||
}
|
||||
|
||||
deviceAddress = Dev->I2cDevAddr;
|
||||
|
||||
status_int = VL53L0X_read_multi(deviceAddress, index, pdata, count, Dev->i2c);
|
||||
|
||||
if (status_int != 0)
|
||||
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error VL53L0X_WrByte(VL53L0X_DEV Dev, uint8_t index, uint8_t data) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
int32_t status_int;
|
||||
uint8_t deviceAddress;
|
||||
|
||||
deviceAddress = Dev->I2cDevAddr;
|
||||
|
||||
status_int = VL53L0X_write_byte(deviceAddress, index, data, Dev->i2c);
|
||||
|
||||
if (status_int != 0)
|
||||
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error VL53L0X_WrWord(VL53L0X_DEV Dev, uint8_t index, uint16_t data) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
int32_t status_int;
|
||||
uint8_t deviceAddress;
|
||||
|
||||
deviceAddress = Dev->I2cDevAddr;
|
||||
|
||||
status_int = VL53L0X_write_word(deviceAddress, index, data, Dev->i2c);
|
||||
|
||||
if (status_int != 0)
|
||||
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error VL53L0X_WrDWord(VL53L0X_DEV Dev, uint8_t index, uint32_t data) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
int32_t status_int;
|
||||
uint8_t deviceAddress;
|
||||
|
||||
deviceAddress = Dev->I2cDevAddr;
|
||||
|
||||
status_int = VL53L0X_write_dword(deviceAddress, index, data, Dev->i2c);
|
||||
|
||||
if (status_int != 0)
|
||||
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error VL53L0X_UpdateByte(VL53L0X_DEV Dev, uint8_t index,
|
||||
uint8_t AndData, uint8_t OrData) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
int32_t status_int;
|
||||
uint8_t deviceAddress;
|
||||
uint8_t data;
|
||||
|
||||
deviceAddress = Dev->I2cDevAddr;
|
||||
|
||||
status_int = VL53L0X_read_byte(deviceAddress, index, &data, Dev->i2c);
|
||||
|
||||
if (status_int != 0)
|
||||
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
||||
|
||||
if (Status == VL53L0X_ERROR_NONE) {
|
||||
data = (data & AndData) | OrData;
|
||||
status_int = VL53L0X_write_byte(deviceAddress, index, data, Dev->i2c);
|
||||
|
||||
if (status_int != 0)
|
||||
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error VL53L0X_RdByte(VL53L0X_DEV Dev, uint8_t index, uint8_t *data) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
int32_t status_int;
|
||||
uint8_t deviceAddress;
|
||||
|
||||
deviceAddress = Dev->I2cDevAddr;
|
||||
|
||||
status_int = VL53L0X_read_byte(deviceAddress, index, data, Dev->i2c);
|
||||
|
||||
if (status_int != 0)
|
||||
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error VL53L0X_RdWord(VL53L0X_DEV Dev, uint8_t index, uint16_t *data) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
int32_t status_int;
|
||||
uint8_t deviceAddress;
|
||||
|
||||
deviceAddress = Dev->I2cDevAddr;
|
||||
|
||||
status_int = VL53L0X_read_word(deviceAddress, index, data, Dev->i2c);
|
||||
|
||||
if (status_int != 0)
|
||||
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
VL53L0X_Error VL53L0X_RdDWord(VL53L0X_DEV Dev, uint8_t index, uint32_t *data) {
|
||||
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
||||
int32_t status_int;
|
||||
uint8_t deviceAddress;
|
||||
|
||||
deviceAddress = Dev->I2cDevAddr;
|
||||
|
||||
status_int = VL53L0X_read_dword(deviceAddress, index, data, Dev->i2c);
|
||||
|
||||
if (status_int != 0)
|
||||
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
#define VL53L0X_POLLINGDELAY_LOOPNB 250
|
||||
VL53L0X_Error VL53L0X_PollingDelay(VL53L0X_DEV Dev) {
|
||||
VL53L0X_Error status = VL53L0X_ERROR_NONE;
|
||||
volatile uint32_t i;
|
||||
LOG_FUNCTION_START("");
|
||||
|
||||
for (i = 0; i < VL53L0X_POLLINGDELAY_LOOPNB; i++) {
|
||||
// Do nothing
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
LOG_FUNCTION_END(status);
|
||||
return status;
|
||||
}
|
||||
1972
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_api.h
Normal file
1972
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_api.h
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,87 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2016, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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.
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef _VL53L0X_API_CALIBRATION_H_
|
||||
#define _VL53L0X_API_CALIBRATION_H_
|
||||
|
||||
#include "vl53l0x_def.h"
|
||||
#include "vl53l0x_platform.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
VL53L0X_Error VL53L0X_perform_xtalk_calibration(
|
||||
VL53L0X_DEV Dev, FixPoint1616_t XTalkCalDistance,
|
||||
FixPoint1616_t *pXTalkCompensationRateMegaCps);
|
||||
|
||||
VL53L0X_Error
|
||||
VL53L0X_perform_offset_calibration(VL53L0X_DEV Dev,
|
||||
FixPoint1616_t CalDistanceMilliMeter,
|
||||
int32_t *pOffsetMicroMeter);
|
||||
|
||||
VL53L0X_Error VL53L0X_set_offset_calibration_data_micro_meter(
|
||||
VL53L0X_DEV Dev, int32_t OffsetCalibrationDataMicroMeter);
|
||||
|
||||
VL53L0X_Error VL53L0X_get_offset_calibration_data_micro_meter(
|
||||
VL53L0X_DEV Dev, int32_t *pOffsetCalibrationDataMicroMeter);
|
||||
|
||||
VL53L0X_Error VL53L0X_apply_offset_adjustment(VL53L0X_DEV Dev);
|
||||
|
||||
VL53L0X_Error VL53L0X_perform_ref_spad_management(VL53L0X_DEV Dev,
|
||||
uint32_t *refSpadCount,
|
||||
uint8_t *isApertureSpads);
|
||||
|
||||
VL53L0X_Error VL53L0X_set_reference_spads(VL53L0X_DEV Dev, uint32_t count,
|
||||
uint8_t isApertureSpads);
|
||||
|
||||
VL53L0X_Error VL53L0X_get_reference_spads(VL53L0X_DEV Dev, uint32_t *pSpadCount,
|
||||
uint8_t *pIsApertureSpads);
|
||||
|
||||
VL53L0X_Error VL53L0X_perform_phase_calibration(VL53L0X_DEV Dev,
|
||||
uint8_t *pPhaseCal,
|
||||
const uint8_t get_data_enable,
|
||||
const uint8_t restore_config);
|
||||
|
||||
VL53L0X_Error VL53L0X_perform_ref_calibration(VL53L0X_DEV Dev,
|
||||
uint8_t *pVhvSettings,
|
||||
uint8_t *pPhaseCal,
|
||||
uint8_t get_data_enable);
|
||||
|
||||
VL53L0X_Error VL53L0X_set_ref_calibration(VL53L0X_DEV Dev, uint8_t VhvSettings,
|
||||
uint8_t PhaseCal);
|
||||
|
||||
VL53L0X_Error VL53L0X_get_ref_calibration(VL53L0X_DEV Dev,
|
||||
uint8_t *pVhvSettings,
|
||||
uint8_t *pPhaseCal);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _VL53L0X_API_CALIBRATION_H_ */
|
||||
109
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_api_core.h
Normal file
109
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_api_core.h
Normal file
@@ -0,0 +1,109 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2016, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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.
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef _VL53L0X_API_CORE_H_
|
||||
#define _VL53L0X_API_CORE_H_
|
||||
|
||||
#include "vl53l0x_def.h"
|
||||
#include "vl53l0x_platform.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
VL53L0X_Error VL53L0X_reverse_bytes(uint8_t *data, uint32_t size);
|
||||
|
||||
VL53L0X_Error VL53L0X_measurement_poll_for_completion(VL53L0X_DEV Dev);
|
||||
|
||||
uint8_t VL53L0X_encode_vcsel_period(uint8_t vcsel_period_pclks);
|
||||
|
||||
uint8_t VL53L0X_decode_vcsel_period(uint8_t vcsel_period_reg);
|
||||
|
||||
uint32_t VL53L0X_isqrt(uint32_t num);
|
||||
|
||||
uint32_t VL53L0X_quadrature_sum(uint32_t a, uint32_t b);
|
||||
|
||||
VL53L0X_Error VL53L0X_get_info_from_device(VL53L0X_DEV Dev, uint8_t option);
|
||||
|
||||
VL53L0X_Error
|
||||
VL53L0X_set_vcsel_pulse_period(VL53L0X_DEV Dev,
|
||||
VL53L0X_VcselPeriod VcselPeriodType,
|
||||
uint8_t VCSELPulsePeriodPCLK);
|
||||
|
||||
VL53L0X_Error
|
||||
VL53L0X_get_vcsel_pulse_period(VL53L0X_DEV Dev,
|
||||
VL53L0X_VcselPeriod VcselPeriodType,
|
||||
uint8_t *pVCSELPulsePeriodPCLK);
|
||||
|
||||
uint32_t VL53L0X_decode_timeout(uint16_t encoded_timeout);
|
||||
|
||||
VL53L0X_Error get_sequence_step_timeout(VL53L0X_DEV Dev,
|
||||
VL53L0X_SequenceStepId SequenceStepId,
|
||||
uint32_t *pTimeOutMicroSecs);
|
||||
|
||||
VL53L0X_Error set_sequence_step_timeout(VL53L0X_DEV Dev,
|
||||
VL53L0X_SequenceStepId SequenceStepId,
|
||||
uint32_t TimeOutMicroSecs);
|
||||
|
||||
VL53L0X_Error VL53L0X_set_measurement_timing_budget_micro_seconds(
|
||||
VL53L0X_DEV Dev, uint32_t MeasurementTimingBudgetMicroSeconds);
|
||||
|
||||
VL53L0X_Error VL53L0X_get_measurement_timing_budget_micro_seconds(
|
||||
VL53L0X_DEV Dev, uint32_t *pMeasurementTimingBudgetMicroSeconds);
|
||||
|
||||
VL53L0X_Error VL53L0X_load_tuning_settings(VL53L0X_DEV Dev,
|
||||
uint8_t *pTuningSettingBuffer);
|
||||
|
||||
VL53L0X_Error VL53L0X_calc_sigma_estimate(
|
||||
VL53L0X_DEV Dev, VL53L0X_RangingMeasurementData_t *pRangingMeasurementData,
|
||||
FixPoint1616_t *pSigmaEstimate, uint32_t *pDmax_mm);
|
||||
|
||||
VL53L0X_Error VL53L0X_get_total_xtalk_rate(
|
||||
VL53L0X_DEV Dev, VL53L0X_RangingMeasurementData_t *pRangingMeasurementData,
|
||||
FixPoint1616_t *ptotal_xtalk_rate_mcps);
|
||||
|
||||
VL53L0X_Error VL53L0X_get_total_signal_rate(
|
||||
VL53L0X_DEV Dev, VL53L0X_RangingMeasurementData_t *pRangingMeasurementData,
|
||||
FixPoint1616_t *ptotal_signal_rate_mcps);
|
||||
|
||||
VL53L0X_Error VL53L0X_get_pal_range_status(
|
||||
VL53L0X_DEV Dev, uint8_t DeviceRangeStatus, FixPoint1616_t SignalRate,
|
||||
uint16_t EffectiveSpadRtnCount,
|
||||
VL53L0X_RangingMeasurementData_t *pRangingMeasurementData,
|
||||
uint8_t *pPalRangeStatus);
|
||||
|
||||
uint32_t VL53L0X_calc_timeout_mclks(VL53L0X_DEV Dev, uint32_t timeout_period_us,
|
||||
uint8_t vcsel_period_pclks);
|
||||
|
||||
uint16_t VL53L0X_encode_timeout(uint32_t timeout_macro_clks);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _VL53L0X_API_CORE_H_ */
|
||||
43
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_api_ranging.h
Normal file
43
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_api_ranging.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2016, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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.
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef _VL53L0X_API_RANGING_H_
|
||||
#define _VL53L0X_API_RANGING_H_
|
||||
|
||||
#include "vl53l0x_def.h"
|
||||
#include "vl53l0x_platform.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _VL53L0X_API_RANGING_H_ */
|
||||
233
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_api_strings.h
Normal file
233
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_api_strings.h
Normal file
@@ -0,0 +1,233 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2016, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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.
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef VL53L0X_API_STRINGS_H_
|
||||
#define VL53L0X_API_STRINGS_H_
|
||||
|
||||
#include "vl53l0x_def.h"
|
||||
#include "vl53l0x_platform.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
VL53L0X_Error
|
||||
VL53L0X_get_device_info(VL53L0X_DEV Dev,
|
||||
VL53L0X_DeviceInfo_t *pVL53L0X_DeviceInfo);
|
||||
|
||||
VL53L0X_Error VL53L0X_get_device_error_string(VL53L0X_DeviceError ErrorCode,
|
||||
char *pDeviceErrorString);
|
||||
|
||||
VL53L0X_Error VL53L0X_get_range_status_string(uint8_t RangeStatus,
|
||||
char *pRangeStatusString);
|
||||
|
||||
VL53L0X_Error VL53L0X_get_pal_error_string(VL53L0X_Error PalErrorCode,
|
||||
char *pPalErrorString);
|
||||
|
||||
VL53L0X_Error VL53L0X_get_pal_state_string(VL53L0X_State PalStateCode,
|
||||
char *pPalStateString);
|
||||
|
||||
VL53L0X_Error
|
||||
VL53L0X_get_sequence_steps_info(VL53L0X_SequenceStepId SequenceStepId,
|
||||
char *pSequenceStepsString);
|
||||
|
||||
VL53L0X_Error VL53L0X_get_limit_check_info(VL53L0X_DEV Dev,
|
||||
uint16_t LimitCheckId,
|
||||
char *pLimitCheckString);
|
||||
|
||||
#ifdef USE_EMPTY_STRING
|
||||
#define VL53L0X_STRING_DEVICE_INFO_NAME ""
|
||||
#define VL53L0X_STRING_DEVICE_INFO_NAME_TS0 ""
|
||||
#define VL53L0X_STRING_DEVICE_INFO_NAME_TS1 ""
|
||||
#define VL53L0X_STRING_DEVICE_INFO_NAME_TS2 ""
|
||||
#define VL53L0X_STRING_DEVICE_INFO_NAME_ES1 ""
|
||||
#define VL53L0X_STRING_DEVICE_INFO_TYPE ""
|
||||
|
||||
/* PAL ERROR strings */
|
||||
#define VL53L0X_STRING_ERROR_NONE ""
|
||||
#define VL53L0X_STRING_ERROR_CALIBRATION_WARNING ""
|
||||
#define VL53L0X_STRING_ERROR_MIN_CLIPPED ""
|
||||
#define VL53L0X_STRING_ERROR_UNDEFINED ""
|
||||
#define VL53L0X_STRING_ERROR_INVALID_PARAMS ""
|
||||
#define VL53L0X_STRING_ERROR_NOT_SUPPORTED ""
|
||||
#define VL53L0X_STRING_ERROR_RANGE_ERROR ""
|
||||
#define VL53L0X_STRING_ERROR_TIME_OUT ""
|
||||
#define VL53L0X_STRING_ERROR_MODE_NOT_SUPPORTED ""
|
||||
#define VL53L0X_STRING_ERROR_BUFFER_TOO_SMALL ""
|
||||
#define VL53L0X_STRING_ERROR_GPIO_NOT_EXISTING ""
|
||||
#define VL53L0X_STRING_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED ""
|
||||
#define VL53L0X_STRING_ERROR_CONTROL_INTERFACE ""
|
||||
#define VL53L0X_STRING_ERROR_INVALID_COMMAND ""
|
||||
#define VL53L0X_STRING_ERROR_DIVISION_BY_ZERO ""
|
||||
#define VL53L0X_STRING_ERROR_REF_SPAD_INIT ""
|
||||
#define VL53L0X_STRING_ERROR_NOT_IMPLEMENTED ""
|
||||
|
||||
#define VL53L0X_STRING_UNKNOW_ERROR_CODE ""
|
||||
|
||||
/* Range Status */
|
||||
#define VL53L0X_STRING_RANGESTATUS_NONE ""
|
||||
#define VL53L0X_STRING_RANGESTATUS_RANGEVALID ""
|
||||
#define VL53L0X_STRING_RANGESTATUS_SIGMA ""
|
||||
#define VL53L0X_STRING_RANGESTATUS_SIGNAL ""
|
||||
#define VL53L0X_STRING_RANGESTATUS_MINRANGE ""
|
||||
#define VL53L0X_STRING_RANGESTATUS_PHASE ""
|
||||
#define VL53L0X_STRING_RANGESTATUS_HW ""
|
||||
|
||||
/* Range Status */
|
||||
#define VL53L0X_STRING_STATE_POWERDOWN ""
|
||||
#define VL53L0X_STRING_STATE_WAIT_STATICINIT ""
|
||||
#define VL53L0X_STRING_STATE_STANDBY ""
|
||||
#define VL53L0X_STRING_STATE_IDLE ""
|
||||
#define VL53L0X_STRING_STATE_RUNNING ""
|
||||
#define VL53L0X_STRING_STATE_UNKNOWN ""
|
||||
#define VL53L0X_STRING_STATE_ERROR ""
|
||||
|
||||
/* Device Specific */
|
||||
#define VL53L0X_STRING_DEVICEERROR_NONE ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_VCSELCONTINUITYTESTFAILURE ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_VCSELWATCHDOGTESTFAILURE ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_NOVHVVALUEFOUND ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_MSRCNOTARGET ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_SNRCHECK ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_RANGEPHASECHECK ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_SIGMATHRESHOLDCHECK ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_TCC ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_PHASECONSISTENCY ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_MINCLIP ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_RANGECOMPLETE ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_ALGOUNDERFLOW ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_ALGOOVERFLOW ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_RANGEIGNORETHRESHOLD ""
|
||||
#define VL53L0X_STRING_DEVICEERROR_UNKNOWN ""
|
||||
|
||||
/* Check Enable */
|
||||
#define VL53L0X_STRING_CHECKENABLE_SIGMA_FINAL_RANGE ""
|
||||
#define VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE ""
|
||||
#define VL53L0X_STRING_CHECKENABLE_SIGNAL_REF_CLIP ""
|
||||
#define VL53L0X_STRING_CHECKENABLE_RANGE_IGNORE_THRESHOLD ""
|
||||
|
||||
/* Sequence Step */
|
||||
#define VL53L0X_STRING_SEQUENCESTEP_TCC ""
|
||||
#define VL53L0X_STRING_SEQUENCESTEP_DSS ""
|
||||
#define VL53L0X_STRING_SEQUENCESTEP_MSRC ""
|
||||
#define VL53L0X_STRING_SEQUENCESTEP_PRE_RANGE ""
|
||||
#define VL53L0X_STRING_SEQUENCESTEP_FINAL_RANGE ""
|
||||
#else
|
||||
#define VL53L0X_STRING_DEVICE_INFO_NAME "VL53L0X cut1.0"
|
||||
#define VL53L0X_STRING_DEVICE_INFO_NAME_TS0 "VL53L0X TS0"
|
||||
#define VL53L0X_STRING_DEVICE_INFO_NAME_TS1 "VL53L0X TS1"
|
||||
#define VL53L0X_STRING_DEVICE_INFO_NAME_TS2 "VL53L0X TS2"
|
||||
#define VL53L0X_STRING_DEVICE_INFO_NAME_ES1 "VL53L0X ES1 or later"
|
||||
#define VL53L0X_STRING_DEVICE_INFO_TYPE "VL53L0X"
|
||||
|
||||
/* PAL ERROR strings */
|
||||
#define VL53L0X_STRING_ERROR_NONE "No Error"
|
||||
#define VL53L0X_STRING_ERROR_CALIBRATION_WARNING "Calibration Warning Error"
|
||||
#define VL53L0X_STRING_ERROR_MIN_CLIPPED "Min clipped error"
|
||||
#define VL53L0X_STRING_ERROR_UNDEFINED "Undefined error"
|
||||
#define VL53L0X_STRING_ERROR_INVALID_PARAMS "Invalid parameters error"
|
||||
#define VL53L0X_STRING_ERROR_NOT_SUPPORTED "Not supported error"
|
||||
#define VL53L0X_STRING_ERROR_RANGE_ERROR "Range error"
|
||||
#define VL53L0X_STRING_ERROR_TIME_OUT "Time out error"
|
||||
#define VL53L0X_STRING_ERROR_MODE_NOT_SUPPORTED "Mode not supported error"
|
||||
#define VL53L0X_STRING_ERROR_BUFFER_TOO_SMALL "Buffer too small"
|
||||
#define VL53L0X_STRING_ERROR_GPIO_NOT_EXISTING "GPIO not existing"
|
||||
#define VL53L0X_STRING_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED \
|
||||
"GPIO funct not supported"
|
||||
#define VL53L0X_STRING_ERROR_INTERRUPT_NOT_CLEARED "Interrupt not Cleared"
|
||||
#define VL53L0X_STRING_ERROR_CONTROL_INTERFACE "Control Interface Error"
|
||||
#define VL53L0X_STRING_ERROR_INVALID_COMMAND "Invalid Command Error"
|
||||
#define VL53L0X_STRING_ERROR_DIVISION_BY_ZERO "Division by zero Error"
|
||||
#define VL53L0X_STRING_ERROR_REF_SPAD_INIT "Reference Spad Init Error"
|
||||
#define VL53L0X_STRING_ERROR_NOT_IMPLEMENTED "Not implemented error"
|
||||
|
||||
#define VL53L0X_STRING_UNKNOW_ERROR_CODE "Unknown Error Code"
|
||||
|
||||
/* Range Status */
|
||||
#define VL53L0X_STRING_RANGESTATUS_NONE "No Update"
|
||||
#define VL53L0X_STRING_RANGESTATUS_RANGEVALID "Range Valid"
|
||||
#define VL53L0X_STRING_RANGESTATUS_SIGMA "Sigma Fail"
|
||||
#define VL53L0X_STRING_RANGESTATUS_SIGNAL "Signal Fail"
|
||||
#define VL53L0X_STRING_RANGESTATUS_MINRANGE "Min Range Fail"
|
||||
#define VL53L0X_STRING_RANGESTATUS_PHASE "Phase Fail"
|
||||
#define VL53L0X_STRING_RANGESTATUS_HW "Hardware Fail"
|
||||
|
||||
/* Range Status */
|
||||
#define VL53L0X_STRING_STATE_POWERDOWN "POWERDOWN State"
|
||||
#define VL53L0X_STRING_STATE_WAIT_STATICINIT "Wait for staticinit State"
|
||||
#define VL53L0X_STRING_STATE_STANDBY "STANDBY State"
|
||||
#define VL53L0X_STRING_STATE_IDLE "IDLE State"
|
||||
#define VL53L0X_STRING_STATE_RUNNING "RUNNING State"
|
||||
#define VL53L0X_STRING_STATE_UNKNOWN "UNKNOWN State"
|
||||
#define VL53L0X_STRING_STATE_ERROR "ERROR State"
|
||||
|
||||
/* Device Specific */
|
||||
#define VL53L0X_STRING_DEVICEERROR_NONE "No Update"
|
||||
#define VL53L0X_STRING_DEVICEERROR_VCSELCONTINUITYTESTFAILURE \
|
||||
"VCSEL Continuity Test Failure"
|
||||
#define VL53L0X_STRING_DEVICEERROR_VCSELWATCHDOGTESTFAILURE \
|
||||
"VCSEL Watchdog Test Failure"
|
||||
#define VL53L0X_STRING_DEVICEERROR_NOVHVVALUEFOUND "No VHV Value found"
|
||||
#define VL53L0X_STRING_DEVICEERROR_MSRCNOTARGET "MSRC No Target Error"
|
||||
#define VL53L0X_STRING_DEVICEERROR_SNRCHECK "SNR Check Exit"
|
||||
#define VL53L0X_STRING_DEVICEERROR_RANGEPHASECHECK "Range Phase Check Error"
|
||||
#define VL53L0X_STRING_DEVICEERROR_SIGMATHRESHOLDCHECK \
|
||||
"Sigma Threshold Check Error"
|
||||
#define VL53L0X_STRING_DEVICEERROR_TCC "TCC Error"
|
||||
#define VL53L0X_STRING_DEVICEERROR_PHASECONSISTENCY "Phase Consistency Error"
|
||||
#define VL53L0X_STRING_DEVICEERROR_MINCLIP "Min Clip Error"
|
||||
#define VL53L0X_STRING_DEVICEERROR_RANGECOMPLETE "Range Complete"
|
||||
#define VL53L0X_STRING_DEVICEERROR_ALGOUNDERFLOW "Range Algo Underflow Error"
|
||||
#define VL53L0X_STRING_DEVICEERROR_ALGOOVERFLOW "Range Algo Overflow Error"
|
||||
#define VL53L0X_STRING_DEVICEERROR_RANGEIGNORETHRESHOLD \
|
||||
"Range Ignore Threshold Error"
|
||||
#define VL53L0X_STRING_DEVICEERROR_UNKNOWN "Unknown error code"
|
||||
|
||||
/* Check Enable */
|
||||
#define VL53L0X_STRING_CHECKENABLE_SIGMA_FINAL_RANGE "SIGMA FINAL RANGE"
|
||||
#define VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE \
|
||||
"SIGNAL RATE FINAL RANGE"
|
||||
#define VL53L0X_STRING_CHECKENABLE_SIGNAL_REF_CLIP "SIGNAL REF CLIP"
|
||||
#define VL53L0X_STRING_CHECKENABLE_RANGE_IGNORE_THRESHOLD \
|
||||
"RANGE IGNORE THRESHOLD"
|
||||
#define VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_MSRC "SIGNAL RATE MSRC"
|
||||
#define VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_PRE_RANGE "SIGNAL RATE PRE RANGE"
|
||||
|
||||
/* Sequence Step */
|
||||
#define VL53L0X_STRING_SEQUENCESTEP_TCC "TCC"
|
||||
#define VL53L0X_STRING_SEQUENCESTEP_DSS "DSS"
|
||||
#define VL53L0X_STRING_SEQUENCESTEP_MSRC "MSRC"
|
||||
#define VL53L0X_STRING_SEQUENCESTEP_PRE_RANGE "PRE RANGE"
|
||||
#define VL53L0X_STRING_SEQUENCESTEP_FINAL_RANGE "FINAL RANGE"
|
||||
#endif /* USE_EMPTY_STRING */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
602
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_def.h
Normal file
602
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_def.h
Normal file
@@ -0,0 +1,602 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2016, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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_def.h
|
||||
*
|
||||
* @brief Type definitions for VL53L0X API.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _VL53L0X_DEF_H_
|
||||
#define _VL53L0X_DEF_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** @defgroup VL53L0X_globaldefine_group VL53L0X Defines
|
||||
* @brief VL53L0X Defines
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** PAL SPECIFICATION major version */
|
||||
#define VL53L0X10_SPECIFICATION_VER_MAJOR 1
|
||||
/** PAL SPECIFICATION minor version */
|
||||
#define VL53L0X10_SPECIFICATION_VER_MINOR 2
|
||||
/** PAL SPECIFICATION sub version */
|
||||
#define VL53L0X10_SPECIFICATION_VER_SUB 7
|
||||
/** PAL SPECIFICATION sub version */
|
||||
#define VL53L0X10_SPECIFICATION_VER_REVISION 1440
|
||||
|
||||
/** VL53L0X PAL IMPLEMENTATION major version */
|
||||
#define VL53L0X10_IMPLEMENTATION_VER_MAJOR 1
|
||||
/** VL53L0X PAL IMPLEMENTATION minor version */
|
||||
#define VL53L0X10_IMPLEMENTATION_VER_MINOR 0
|
||||
/** VL53L0X PAL IMPLEMENTATION sub version */
|
||||
#define VL53L0X10_IMPLEMENTATION_VER_SUB 9
|
||||
/** VL53L0X PAL IMPLEMENTATION sub version */
|
||||
#define VL53L0X10_IMPLEMENTATION_VER_REVISION 3673
|
||||
|
||||
/** PAL SPECIFICATION major version */
|
||||
#define VL53L0X_SPECIFICATION_VER_MAJOR 1
|
||||
/** PAL SPECIFICATION minor version */
|
||||
#define VL53L0X_SPECIFICATION_VER_MINOR 2
|
||||
/** PAL SPECIFICATION sub version */
|
||||
#define VL53L0X_SPECIFICATION_VER_SUB 7
|
||||
/** PAL SPECIFICATION sub version */
|
||||
#define VL53L0X_SPECIFICATION_VER_REVISION 1440
|
||||
|
||||
/** VL53L0X PAL IMPLEMENTATION major version */
|
||||
#define VL53L0X_IMPLEMENTATION_VER_MAJOR 1
|
||||
/** VL53L0X PAL IMPLEMENTATION minor version */
|
||||
#define VL53L0X_IMPLEMENTATION_VER_MINOR 0
|
||||
/** VL53L0X PAL IMPLEMENTATION sub version */
|
||||
#define VL53L0X_IMPLEMENTATION_VER_SUB 1
|
||||
/** VL53L0X PAL IMPLEMENTATION sub version */
|
||||
#define VL53L0X_IMPLEMENTATION_VER_REVISION 4606
|
||||
#define VL53L0X_DEFAULT_MAX_LOOP 200
|
||||
#define VL53L0X_MAX_STRING_LENGTH 32
|
||||
|
||||
#include "vl53l0x_device.h"
|
||||
#include "vl53l0x_types.h"
|
||||
|
||||
/****************************************
|
||||
* PRIVATE define do not edit
|
||||
****************************************/
|
||||
|
||||
/** @brief Defines the parameters of the Get Version Functions
|
||||
*/
|
||||
typedef struct {
|
||||
uint32_t revision; /*!< revision number */
|
||||
uint8_t major; /*!< major number */
|
||||
uint8_t minor; /*!< minor number */
|
||||
uint8_t build; /*!< build number */
|
||||
} VL53L0X_Version_t;
|
||||
|
||||
/** @brief Defines the parameters of the Get Device Info Functions
|
||||
*/
|
||||
typedef struct {
|
||||
char Name[VL53L0X_MAX_STRING_LENGTH];
|
||||
/*!< Name of the Device e.g. Left_Distance */
|
||||
char Type[VL53L0X_MAX_STRING_LENGTH];
|
||||
/*!< Type of the Device e.g VL53L0X */
|
||||
char ProductId[VL53L0X_MAX_STRING_LENGTH];
|
||||
/*!< Product Identifier String */
|
||||
uint8_t ProductType;
|
||||
/*!< Product Type, VL53L0X = 1, VL53L1 = 2 */
|
||||
uint8_t ProductRevisionMajor;
|
||||
/*!< Product revision major */
|
||||
uint8_t ProductRevisionMinor;
|
||||
/*!< Product revision minor */
|
||||
} VL53L0X_DeviceInfo_t;
|
||||
|
||||
/** @defgroup VL53L0X_define_Error_group Error and Warning code returned by API
|
||||
* The following DEFINE are used to identify the PAL ERROR
|
||||
* @{
|
||||
*/
|
||||
|
||||
typedef int8_t VL53L0X_Error;
|
||||
|
||||
#define VL53L0X_ERROR_NONE ((VL53L0X_Error)0)
|
||||
#define VL53L0X_ERROR_CALIBRATION_WARNING ((VL53L0X_Error)-1)
|
||||
/*!< Warning invalid calibration data may be in used
|
||||
\a VL53L0X_InitData()
|
||||
\a VL53L0X_GetOffsetCalibrationData
|
||||
\a VL53L0X_SetOffsetCalibrationData */
|
||||
#define VL53L0X_ERROR_MIN_CLIPPED ((VL53L0X_Error)-2)
|
||||
/*!< Warning parameter passed was clipped to min before to be applied */
|
||||
|
||||
#define VL53L0X_ERROR_UNDEFINED ((VL53L0X_Error)-3)
|
||||
/*!< Unqualified error */
|
||||
#define VL53L0X_ERROR_INVALID_PARAMS ((VL53L0X_Error)-4)
|
||||
/*!< Parameter passed is invalid or out of range */
|
||||
#define VL53L0X_ERROR_NOT_SUPPORTED ((VL53L0X_Error)-5)
|
||||
/*!< Function is not supported in current mode or configuration */
|
||||
#define VL53L0X_ERROR_RANGE_ERROR ((VL53L0X_Error)-6)
|
||||
/*!< Device report a ranging error interrupt status */
|
||||
#define VL53L0X_ERROR_TIME_OUT ((VL53L0X_Error)-7)
|
||||
/*!< Aborted due to time out */
|
||||
#define VL53L0X_ERROR_MODE_NOT_SUPPORTED ((VL53L0X_Error)-8)
|
||||
/*!< Asked mode is not supported by the device */
|
||||
#define VL53L0X_ERROR_BUFFER_TOO_SMALL ((VL53L0X_Error)-9)
|
||||
/*!< ... */
|
||||
#define VL53L0X_ERROR_GPIO_NOT_EXISTING ((VL53L0X_Error)-10)
|
||||
/*!< User tried to setup a non-existing GPIO pin */
|
||||
#define VL53L0X_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED ((VL53L0X_Error)-11)
|
||||
/*!< unsupported GPIO functionality */
|
||||
#define VL53L0X_ERROR_INTERRUPT_NOT_CLEARED ((VL53L0X_Error)-12)
|
||||
/*!< Error during interrupt clear */
|
||||
#define VL53L0X_ERROR_CONTROL_INTERFACE ((VL53L0X_Error)-20)
|
||||
/*!< error reported from IO functions */
|
||||
#define VL53L0X_ERROR_INVALID_COMMAND ((VL53L0X_Error)-30)
|
||||
/*!< The command is not allowed in the current device state
|
||||
* (power down) */
|
||||
#define VL53L0X_ERROR_DIVISION_BY_ZERO ((VL53L0X_Error)-40)
|
||||
/*!< In the function a division by zero occurs */
|
||||
#define VL53L0X_ERROR_REF_SPAD_INIT ((VL53L0X_Error)-50)
|
||||
/*!< Error during reference SPAD initialization */
|
||||
#define VL53L0X_ERROR_NOT_IMPLEMENTED ((VL53L0X_Error)-99)
|
||||
/*!< Tells requested functionality has not been implemented yet or
|
||||
* not compatible with the device */
|
||||
/** @} VL53L0X_define_Error_group */
|
||||
|
||||
/** @defgroup VL53L0X_define_DeviceModes_group Defines Device modes
|
||||
* Defines all possible modes for the device
|
||||
* @{
|
||||
*/
|
||||
typedef uint8_t VL53L0X_DeviceModes;
|
||||
|
||||
#define VL53L0X_DEVICEMODE_SINGLE_RANGING ((VL53L0X_DeviceModes)0)
|
||||
#define VL53L0X_DEVICEMODE_CONTINUOUS_RANGING ((VL53L0X_DeviceModes)1)
|
||||
#define VL53L0X_DEVICEMODE_SINGLE_HISTOGRAM ((VL53L0X_DeviceModes)2)
|
||||
#define VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING ((VL53L0X_DeviceModes)3)
|
||||
#define VL53L0X_DEVICEMODE_SINGLE_ALS ((VL53L0X_DeviceModes)10)
|
||||
#define VL53L0X_DEVICEMODE_GPIO_DRIVE ((VL53L0X_DeviceModes)20)
|
||||
#define VL53L0X_DEVICEMODE_GPIO_OSC ((VL53L0X_DeviceModes)21)
|
||||
/* ... Modes to be added depending on device */
|
||||
/** @} VL53L0X_define_DeviceModes_group */
|
||||
|
||||
/** @defgroup VL53L0X_define_HistogramModes_group Defines Histogram modes
|
||||
* Defines all possible Histogram modes for the device
|
||||
* @{
|
||||
*/
|
||||
typedef uint8_t VL53L0X_HistogramModes;
|
||||
|
||||
#define VL53L0X_HISTOGRAMMODE_DISABLED ((VL53L0X_HistogramModes)0)
|
||||
/*!< Histogram Disabled */
|
||||
#define VL53L0X_HISTOGRAMMODE_REFERENCE_ONLY ((VL53L0X_HistogramModes)1)
|
||||
/*!< Histogram Reference array only */
|
||||
#define VL53L0X_HISTOGRAMMODE_RETURN_ONLY ((VL53L0X_HistogramModes)2)
|
||||
/*!< Histogram Return array only */
|
||||
#define VL53L0X_HISTOGRAMMODE_BOTH ((VL53L0X_HistogramModes)3)
|
||||
/*!< Histogram both Reference and Return Arrays */
|
||||
/* ... Modes to be added depending on device */
|
||||
/** @} VL53L0X_define_HistogramModes_group */
|
||||
|
||||
/** @defgroup VL53L0X_define_PowerModes_group List of available Power Modes
|
||||
* List of available Power Modes
|
||||
* @{
|
||||
*/
|
||||
|
||||
typedef uint8_t VL53L0X_PowerModes;
|
||||
|
||||
#define VL53L0X_POWERMODE_STANDBY_LEVEL1 ((VL53L0X_PowerModes)0)
|
||||
/*!< Standby level 1 */
|
||||
#define VL53L0X_POWERMODE_STANDBY_LEVEL2 ((VL53L0X_PowerModes)1)
|
||||
/*!< Standby level 2 */
|
||||
#define VL53L0X_POWERMODE_IDLE_LEVEL1 ((VL53L0X_PowerModes)2)
|
||||
/*!< Idle level 1 */
|
||||
#define VL53L0X_POWERMODE_IDLE_LEVEL2 ((VL53L0X_PowerModes)3)
|
||||
/*!< Idle level 2 */
|
||||
|
||||
/** @} VL53L0X_define_PowerModes_group */
|
||||
|
||||
/** @brief Defines all parameters for the device
|
||||
*/
|
||||
typedef struct {
|
||||
VL53L0X_DeviceModes DeviceMode;
|
||||
/*!< Defines type of measurement to be done for the next measure */
|
||||
VL53L0X_HistogramModes HistogramMode;
|
||||
/*!< Defines type of histogram measurement to be done for the next
|
||||
* measure */
|
||||
uint32_t MeasurementTimingBudgetMicroSeconds;
|
||||
/*!< Defines the allowed total time for a single measurement */
|
||||
uint32_t InterMeasurementPeriodMilliSeconds;
|
||||
/*!< Defines time between two consecutive measurements (between two
|
||||
* measurement starts). If set to 0 means back-to-back mode */
|
||||
uint8_t XTalkCompensationEnable;
|
||||
/*!< Tells if Crosstalk compensation shall be enable or not */
|
||||
uint16_t XTalkCompensationRangeMilliMeter;
|
||||
/*!< CrossTalk compensation range in millimeter */
|
||||
FixPoint1616_t XTalkCompensationRateMegaCps;
|
||||
/*!< CrossTalk compensation rate in Mega counts per seconds.
|
||||
* Expressed in 16.16 fixed point format. */
|
||||
int32_t RangeOffsetMicroMeters;
|
||||
/*!< Range offset adjustment (mm). */
|
||||
|
||||
uint8_t LimitChecksEnable[VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS];
|
||||
/*!< This Array store all the Limit Check enable for this device. */
|
||||
uint8_t LimitChecksStatus[VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS];
|
||||
/*!< This Array store all the Status of the check linked to last
|
||||
* measurement. */
|
||||
FixPoint1616_t LimitChecksValue[VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS];
|
||||
/*!< This Array store all the Limit Check value for this device */
|
||||
|
||||
uint8_t WrapAroundCheckEnable;
|
||||
/*!< Tells if Wrap Around Check shall be enable or not */
|
||||
} VL53L0X_DeviceParameters_t;
|
||||
|
||||
/** @defgroup VL53L0X_define_State_group Defines the current status of the
|
||||
*device Defines the current status of the device
|
||||
* @{
|
||||
*/
|
||||
|
||||
typedef uint8_t VL53L0X_State;
|
||||
|
||||
#define VL53L0X_STATE_POWERDOWN ((VL53L0X_State)0)
|
||||
/*!< Device is in HW reset */
|
||||
#define VL53L0X_STATE_WAIT_STATICINIT ((VL53L0X_State)1)
|
||||
/*!< Device is initialized and wait for static initialization */
|
||||
#define VL53L0X_STATE_STANDBY ((VL53L0X_State)2)
|
||||
/*!< Device is in Low power Standby mode */
|
||||
#define VL53L0X_STATE_IDLE ((VL53L0X_State)3)
|
||||
/*!< Device has been initialized and ready to do measurements */
|
||||
#define VL53L0X_STATE_RUNNING ((VL53L0X_State)4)
|
||||
/*!< Device is performing measurement */
|
||||
#define VL53L0X_STATE_UNKNOWN ((VL53L0X_State)98)
|
||||
/*!< Device is in unknown state and need to be rebooted */
|
||||
#define VL53L0X_STATE_ERROR ((VL53L0X_State)99)
|
||||
/*!< Device is in error state and need to be rebooted */
|
||||
|
||||
/** @} VL53L0X_define_State_group */
|
||||
|
||||
/** @brief Structure containing the Dmax computation parameters and data
|
||||
*/
|
||||
typedef struct {
|
||||
int32_t AmbTuningWindowFactor_K;
|
||||
/*!< internal algo tuning (*1000) */
|
||||
int32_t RetSignalAt0mm;
|
||||
/*!< intermediate dmax computation value caching */
|
||||
} VL53L0X_DMaxData_t;
|
||||
|
||||
/**
|
||||
* @struct VL53L0X_RangeData_t
|
||||
* @brief Range measurement data.
|
||||
*/
|
||||
typedef struct {
|
||||
uint32_t TimeStamp; /*!< 32-bit time stamp. */
|
||||
uint32_t MeasurementTimeUsec;
|
||||
/*!< Give the Measurement time needed by the device to do the
|
||||
* measurement.*/
|
||||
|
||||
uint16_t RangeMilliMeter; /*!< range distance in millimeter. */
|
||||
|
||||
uint16_t RangeDMaxMilliMeter;
|
||||
/*!< Tells what is the maximum detection distance of the device
|
||||
* in current setup and environment conditions (Filled when
|
||||
* applicable) */
|
||||
|
||||
FixPoint1616_t SignalRateRtnMegaCps;
|
||||
/*!< Return signal rate (MCPS)\n these is a 16.16 fix point
|
||||
* value, which is effectively a measure of target
|
||||
* reflectance.*/
|
||||
FixPoint1616_t AmbientRateRtnMegaCps;
|
||||
/*!< Return ambient rate (MCPS)\n these is a 16.16 fix point
|
||||
* value, which is effectively a measure of the ambien
|
||||
* t light.*/
|
||||
|
||||
uint16_t EffectiveSpadRtnCount;
|
||||
/*!< Return the effective SPAD count for the return signal.
|
||||
* To obtain Real value it should be divided by 256 */
|
||||
|
||||
uint8_t ZoneId;
|
||||
/*!< Denotes which zone and range scheduler stage the range
|
||||
* data relates to. */
|
||||
uint8_t RangeFractionalPart;
|
||||
/*!< Fractional part of range distance. Final value is a
|
||||
* FixPoint168 value. */
|
||||
uint8_t RangeStatus;
|
||||
/*!< Range Status for the current measurement. This is device
|
||||
* dependent. Value = 0 means value is valid.
|
||||
* See \ref RangeStatusPage */
|
||||
} VL53L0X_RangingMeasurementData_t;
|
||||
|
||||
#define VL53L0X_HISTOGRAM_BUFFER_SIZE 24
|
||||
|
||||
/**
|
||||
* @struct VL53L0X_HistogramData_t
|
||||
* @brief Histogram measurement data.
|
||||
*/
|
||||
typedef struct {
|
||||
/* Histogram Measurement data */
|
||||
uint32_t HistogramData[VL53L0X_HISTOGRAM_BUFFER_SIZE];
|
||||
/*!< Histogram data */
|
||||
uint8_t HistogramType; /*!< Indicate the types of histogram data :
|
||||
Return only, Reference only, both Return and Reference */
|
||||
uint8_t FirstBin; /*!< First Bin value */
|
||||
uint8_t BufferSize; /*!< Buffer Size - Set by the user.*/
|
||||
uint8_t NumberOfBins;
|
||||
/*!< Number of bins filled by the histogram measurement */
|
||||
|
||||
VL53L0X_DeviceError ErrorStatus;
|
||||
/*!< Error status of the current measurement. \n
|
||||
see @a ::VL53L0X_DeviceError @a VL53L0X_GetStatusErrorString() */
|
||||
} VL53L0X_HistogramMeasurementData_t;
|
||||
|
||||
#define VL53L0X_REF_SPAD_BUFFER_SIZE 6
|
||||
|
||||
/**
|
||||
* @struct VL53L0X_SpadData_t
|
||||
* @brief Spad Configuration Data.
|
||||
*/
|
||||
typedef struct {
|
||||
uint8_t RefSpadEnables[VL53L0X_REF_SPAD_BUFFER_SIZE];
|
||||
/*!< Reference Spad Enables */
|
||||
uint8_t RefGoodSpadMap[VL53L0X_REF_SPAD_BUFFER_SIZE];
|
||||
/*!< Reference Spad Good Spad Map */
|
||||
} VL53L0X_SpadData_t;
|
||||
|
||||
typedef struct {
|
||||
FixPoint1616_t OscFrequencyMHz; /* Frequency used */
|
||||
|
||||
uint16_t LastEncodedTimeout;
|
||||
/* last encoded Time out used for timing budget*/
|
||||
|
||||
VL53L0X_GpioFunctionality Pin0GpioFunctionality;
|
||||
/* store the functionality of the GPIO: pin0 */
|
||||
|
||||
uint32_t FinalRangeTimeoutMicroSecs;
|
||||
/*!< Execution time of the final range*/
|
||||
uint8_t FinalRangeVcselPulsePeriod;
|
||||
/*!< Vcsel pulse period (pll clocks) for the final range measurement*/
|
||||
uint32_t PreRangeTimeoutMicroSecs;
|
||||
/*!< Execution time of the final range*/
|
||||
uint8_t PreRangeVcselPulsePeriod;
|
||||
/*!< Vcsel pulse period (pll clocks) for the pre-range measurement*/
|
||||
|
||||
uint16_t SigmaEstRefArray;
|
||||
/*!< Reference array sigma value in 1/100th of [mm] e.g. 100 = 1mm */
|
||||
uint16_t SigmaEstEffPulseWidth;
|
||||
/*!< Effective Pulse width for sigma estimate in 1/100th
|
||||
* of ns e.g. 900 = 9.0ns */
|
||||
uint16_t SigmaEstEffAmbWidth;
|
||||
/*!< Effective Ambient width for sigma estimate in 1/100th of ns
|
||||
* e.g. 500 = 5.0ns */
|
||||
|
||||
uint8_t ReadDataFromDeviceDone; /* Indicate if read from device has
|
||||
been done (==1) or not (==0) */
|
||||
uint8_t ModuleId; /* Module ID */
|
||||
uint8_t Revision; /* test Revision */
|
||||
char ProductId[VL53L0X_MAX_STRING_LENGTH];
|
||||
/* Product Identifier String */
|
||||
uint8_t ReferenceSpadCount; /* used for ref spad management */
|
||||
uint8_t ReferenceSpadType; /* used for ref spad management */
|
||||
uint8_t RefSpadsInitialised; /* reports if ref spads are initialised. */
|
||||
uint32_t PartUIDUpper; /*!< Unique Part ID Upper */
|
||||
uint32_t PartUIDLower; /*!< Unique Part ID Lower */
|
||||
FixPoint1616_t SignalRateMeasFixed400mm; /*!< Peek Signal rate
|
||||
at 400 mm*/
|
||||
|
||||
} VL53L0X_DeviceSpecificParameters_t;
|
||||
|
||||
/**
|
||||
* @struct VL53L0X_DevData_t
|
||||
*
|
||||
* @brief VL53L0X PAL device ST private data structure \n
|
||||
* End user should never access any of these field directly
|
||||
*
|
||||
* These must never access directly but only via macro
|
||||
*/
|
||||
typedef struct {
|
||||
VL53L0X_DMaxData_t DMaxData;
|
||||
/*!< Dmax Data */
|
||||
int32_t Part2PartOffsetNVMMicroMeter;
|
||||
/*!< backed up NVM value */
|
||||
int32_t Part2PartOffsetAdjustmentNVMMicroMeter;
|
||||
/*!< backed up NVM value representing additional offset adjustment */
|
||||
VL53L0X_DeviceParameters_t CurrentParameters;
|
||||
/*!< Current Device Parameter */
|
||||
VL53L0X_RangingMeasurementData_t LastRangeMeasure;
|
||||
/*!< Ranging Data */
|
||||
VL53L0X_HistogramMeasurementData_t LastHistogramMeasure;
|
||||
/*!< Histogram Data */
|
||||
VL53L0X_DeviceSpecificParameters_t DeviceSpecificParameters;
|
||||
/*!< Parameters specific to the device */
|
||||
VL53L0X_SpadData_t SpadData;
|
||||
/*!< Spad Data */
|
||||
uint8_t SequenceConfig;
|
||||
/*!< Internal value for the sequence config */
|
||||
uint8_t RangeFractionalEnable;
|
||||
/*!< Enable/Disable fractional part of ranging data */
|
||||
VL53L0X_State PalState;
|
||||
/*!< Current state of the PAL for this device */
|
||||
VL53L0X_PowerModes PowerMode;
|
||||
/*!< Current Power Mode */
|
||||
uint16_t SigmaEstRefArray;
|
||||
/*!< Reference array sigma value in 1/100th of [mm] e.g. 100 = 1mm */
|
||||
uint16_t SigmaEstEffPulseWidth;
|
||||
/*!< Effective Pulse width for sigma estimate in 1/100th
|
||||
* of ns e.g. 900 = 9.0ns */
|
||||
uint16_t SigmaEstEffAmbWidth;
|
||||
/*!< Effective Ambient width for sigma estimate in 1/100th of ns
|
||||
* e.g. 500 = 5.0ns */
|
||||
uint8_t StopVariable;
|
||||
/*!< StopVariable used during the stop sequence */
|
||||
uint16_t targetRefRate;
|
||||
/*!< Target Ambient Rate for Ref spad management */
|
||||
FixPoint1616_t SigmaEstimate;
|
||||
/*!< Sigma Estimate - based on ambient & VCSEL rates and
|
||||
* signal_total_events */
|
||||
FixPoint1616_t SignalEstimate;
|
||||
/*!< Signal Estimate - based on ambient & VCSEL rates and cross talk */
|
||||
FixPoint1616_t LastSignalRefMcps;
|
||||
/*!< Latest Signal ref in Mcps */
|
||||
uint8_t *pTuningSettingsPointer;
|
||||
/*!< Pointer for Tuning Settings table */
|
||||
uint8_t UseInternalTuningSettings;
|
||||
/*!< Indicate if we use Tuning Settings table */
|
||||
uint16_t LinearityCorrectiveGain;
|
||||
/*!< Linearity Corrective Gain value in x1000 */
|
||||
uint16_t DmaxCalRangeMilliMeter;
|
||||
/*!< Dmax Calibration Range millimeter */
|
||||
FixPoint1616_t DmaxCalSignalRateRtnMegaCps;
|
||||
/*!< Dmax Calibration Signal Rate Return MegaCps */
|
||||
|
||||
} VL53L0X_DevData_t;
|
||||
|
||||
/** @defgroup VL53L0X_define_InterruptPolarity_group Defines the Polarity
|
||||
* of the Interrupt
|
||||
* Defines the Polarity of the Interrupt
|
||||
* @{
|
||||
*/
|
||||
typedef uint8_t VL53L0X_InterruptPolarity;
|
||||
|
||||
#define VL53L0X_INTERRUPTPOLARITY_LOW ((VL53L0X_InterruptPolarity)0)
|
||||
/*!< Set active low polarity best setup for falling edge. */
|
||||
#define VL53L0X_INTERRUPTPOLARITY_HIGH ((VL53L0X_InterruptPolarity)1)
|
||||
/*!< Set active high polarity best setup for rising edge. */
|
||||
|
||||
/** @} VL53L0X_define_InterruptPolarity_group */
|
||||
|
||||
/** @defgroup VL53L0X_define_VcselPeriod_group Vcsel Period Defines
|
||||
* Defines the range measurement for which to access the vcsel period.
|
||||
* @{
|
||||
*/
|
||||
typedef uint8_t VL53L0X_VcselPeriod;
|
||||
|
||||
#define VL53L0X_VCSEL_PERIOD_PRE_RANGE ((VL53L0X_VcselPeriod)0)
|
||||
/*!<Identifies the pre-range vcsel period. */
|
||||
#define VL53L0X_VCSEL_PERIOD_FINAL_RANGE ((VL53L0X_VcselPeriod)1)
|
||||
/*!<Identifies the final range vcsel period. */
|
||||
|
||||
/** @} VL53L0X_define_VcselPeriod_group */
|
||||
|
||||
/** @defgroup VL53L0X_define_SchedulerSequence_group Defines the steps
|
||||
* carried out by the scheduler during a range measurement.
|
||||
* @{
|
||||
* Defines the states of all the steps in the scheduler
|
||||
* i.e. enabled/disabled.
|
||||
*/
|
||||
typedef struct {
|
||||
uint8_t TccOn; /*!<Reports if Target Centre Check On */
|
||||
uint8_t MsrcOn; /*!<Reports if MSRC On */
|
||||
uint8_t DssOn; /*!<Reports if DSS On */
|
||||
uint8_t PreRangeOn; /*!<Reports if Pre-Range On */
|
||||
uint8_t FinalRangeOn; /*!<Reports if Final-Range On */
|
||||
} VL53L0X_SchedulerSequenceSteps_t;
|
||||
|
||||
/** @} VL53L0X_define_SchedulerSequence_group */
|
||||
|
||||
/** @defgroup VL53L0X_define_SequenceStepId_group Defines the Polarity
|
||||
* of the Interrupt
|
||||
* Defines the the sequence steps performed during ranging..
|
||||
* @{
|
||||
*/
|
||||
typedef uint8_t VL53L0X_SequenceStepId;
|
||||
|
||||
#define VL53L0X_SEQUENCESTEP_TCC ((VL53L0X_VcselPeriod)0)
|
||||
/*!<Target CentreCheck identifier. */
|
||||
#define VL53L0X_SEQUENCESTEP_DSS ((VL53L0X_VcselPeriod)1)
|
||||
/*!<Dynamic Spad Selection function Identifier. */
|
||||
#define VL53L0X_SEQUENCESTEP_MSRC ((VL53L0X_VcselPeriod)2)
|
||||
/*!<Minimum Signal Rate Check function Identifier. */
|
||||
#define VL53L0X_SEQUENCESTEP_PRE_RANGE ((VL53L0X_VcselPeriod)3)
|
||||
/*!<Pre-Range check Identifier. */
|
||||
#define VL53L0X_SEQUENCESTEP_FINAL_RANGE ((VL53L0X_VcselPeriod)4)
|
||||
/*!<Final Range Check Identifier. */
|
||||
|
||||
#define VL53L0X_SEQUENCESTEP_NUMBER_OF_CHECKS 5
|
||||
/*!<Number of Sequence Step Managed by the API. */
|
||||
|
||||
/** @} VL53L0X_define_SequenceStepId_group */
|
||||
|
||||
/* MACRO Definitions */
|
||||
/** @defgroup VL53L0X_define_GeneralMacro_group General Macro Defines
|
||||
* General Macro Defines
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Defines */
|
||||
#define VL53L0X_SETPARAMETERFIELD(Dev, field, value) \
|
||||
PALDevDataSet(Dev, CurrentParameters.field, value)
|
||||
|
||||
#define VL53L0X_GETPARAMETERFIELD(Dev, field, variable) \
|
||||
variable = PALDevDataGet(Dev, CurrentParameters).field
|
||||
|
||||
#define VL53L0X_SETARRAYPARAMETERFIELD(Dev, field, index, value) \
|
||||
PALDevDataSet(Dev, CurrentParameters.field[index], value)
|
||||
|
||||
#define VL53L0X_GETARRAYPARAMETERFIELD(Dev, field, index, variable) \
|
||||
variable = PALDevDataGet(Dev, CurrentParameters).field[index]
|
||||
|
||||
#define VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, field, value) \
|
||||
PALDevDataSet(Dev, DeviceSpecificParameters.field, value)
|
||||
|
||||
#define VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, field) \
|
||||
PALDevDataGet(Dev, DeviceSpecificParameters).field
|
||||
|
||||
#define VL53L0X_FIXPOINT1616TOFIXPOINT97(Value) \
|
||||
(uint16_t)((Value >> 9) & 0xFFFF)
|
||||
#define VL53L0X_FIXPOINT97TOFIXPOINT1616(Value) (FixPoint1616_t)(Value << 9)
|
||||
|
||||
#define VL53L0X_FIXPOINT1616TOFIXPOINT88(Value) \
|
||||
(uint16_t)((Value >> 8) & 0xFFFF)
|
||||
#define VL53L0X_FIXPOINT88TOFIXPOINT1616(Value) (FixPoint1616_t)(Value << 8)
|
||||
|
||||
#define VL53L0X_FIXPOINT1616TOFIXPOINT412(Value) \
|
||||
(uint16_t)((Value >> 4) & 0xFFFF)
|
||||
#define VL53L0X_FIXPOINT412TOFIXPOINT1616(Value) (FixPoint1616_t)(Value << 4)
|
||||
|
||||
#define VL53L0X_FIXPOINT1616TOFIXPOINT313(Value) \
|
||||
(uint16_t)((Value >> 3) & 0xFFFF)
|
||||
#define VL53L0X_FIXPOINT313TOFIXPOINT1616(Value) (FixPoint1616_t)(Value << 3)
|
||||
|
||||
#define VL53L0X_FIXPOINT1616TOFIXPOINT08(Value) (uint8_t)((Value >> 8) & 0x00FF)
|
||||
#define VL53L0X_FIXPOINT08TOFIXPOINT1616(Value) (FixPoint1616_t)(Value << 8)
|
||||
|
||||
#define VL53L0X_FIXPOINT1616TOFIXPOINT53(Value) \
|
||||
(uint8_t)((Value >> 13) & 0x00FF)
|
||||
#define VL53L0X_FIXPOINT53TOFIXPOINT1616(Value) (FixPoint1616_t)(Value << 13)
|
||||
|
||||
#define VL53L0X_FIXPOINT1616TOFIXPOINT102(Value) \
|
||||
(uint16_t)((Value >> 14) & 0x0FFF)
|
||||
#define VL53L0X_FIXPOINT102TOFIXPOINT1616(Value) (FixPoint1616_t)(Value << 12)
|
||||
|
||||
#define VL53L0X_MAKEUINT16(lsb, msb) \
|
||||
(uint16_t)((((uint16_t)msb) << 8) + (uint16_t)lsb)
|
||||
|
||||
/** @} VL53L0X_define_GeneralMacro_group */
|
||||
|
||||
/** @} VL53L0X_globaldefine_group */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _VL53L0X_DEF_H_ */
|
||||
243
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_device.h
Normal file
243
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_device.h
Normal file
@@ -0,0 +1,243 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2016, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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.
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* Device specific defines. To be adapted by implementer for the targeted
|
||||
* device.
|
||||
*/
|
||||
|
||||
#ifndef _VL53L0X_DEVICE_H_
|
||||
#define _VL53L0X_DEVICE_H_
|
||||
|
||||
#include "vl53l0x_types.h"
|
||||
|
||||
/** @defgroup VL53L0X_DevSpecDefines_group VL53L0X cut1.1 Device Specific
|
||||
* Defines
|
||||
* @brief VL53L0X cut1.1 Device Specific Defines
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup VL53L0X_DeviceError_group Device Error
|
||||
* @brief Device Error code
|
||||
*
|
||||
* This enum is Device specific it should be updated in the implementation
|
||||
* Use @a VL53L0X_GetStatusErrorString() to get the string.
|
||||
* It is related to Status Register of the Device.
|
||||
* @{
|
||||
*/
|
||||
typedef uint8_t VL53L0X_DeviceError;
|
||||
|
||||
#define VL53L0X_DEVICEERROR_NONE ((VL53L0X_DeviceError)0)
|
||||
/*!< 0 NoError */
|
||||
#define VL53L0X_DEVICEERROR_VCSELCONTINUITYTESTFAILURE ((VL53L0X_DeviceError)1)
|
||||
#define VL53L0X_DEVICEERROR_VCSELWATCHDOGTESTFAILURE ((VL53L0X_DeviceError)2)
|
||||
#define VL53L0X_DEVICEERROR_NOVHVVALUEFOUND ((VL53L0X_DeviceError)3)
|
||||
#define VL53L0X_DEVICEERROR_MSRCNOTARGET ((VL53L0X_DeviceError)4)
|
||||
#define VL53L0X_DEVICEERROR_SNRCHECK ((VL53L0X_DeviceError)5)
|
||||
#define VL53L0X_DEVICEERROR_RANGEPHASECHECK ((VL53L0X_DeviceError)6)
|
||||
#define VL53L0X_DEVICEERROR_SIGMATHRESHOLDCHECK ((VL53L0X_DeviceError)7)
|
||||
#define VL53L0X_DEVICEERROR_TCC ((VL53L0X_DeviceError)8)
|
||||
#define VL53L0X_DEVICEERROR_PHASECONSISTENCY ((VL53L0X_DeviceError)9)
|
||||
#define VL53L0X_DEVICEERROR_MINCLIP ((VL53L0X_DeviceError)10)
|
||||
#define VL53L0X_DEVICEERROR_RANGECOMPLETE ((VL53L0X_DeviceError)11)
|
||||
#define VL53L0X_DEVICEERROR_ALGOUNDERFLOW ((VL53L0X_DeviceError)12)
|
||||
#define VL53L0X_DEVICEERROR_ALGOOVERFLOW ((VL53L0X_DeviceError)13)
|
||||
#define VL53L0X_DEVICEERROR_RANGEIGNORETHRESHOLD ((VL53L0X_DeviceError)14)
|
||||
|
||||
/** @} end of VL53L0X_DeviceError_group */
|
||||
|
||||
/** @defgroup VL53L0X_CheckEnable_group Check Enable list
|
||||
* @brief Check Enable code
|
||||
*
|
||||
* Define used to specify the LimitCheckId.
|
||||
* Use @a VL53L0X_GetLimitCheckInfo() to get the string.
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE 0
|
||||
#define VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE 1
|
||||
#define VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP 2
|
||||
#define VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD 3
|
||||
#define VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC 4
|
||||
#define VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE 5
|
||||
|
||||
#define VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS 6
|
||||
|
||||
/** @} end of VL53L0X_CheckEnable_group */
|
||||
|
||||
/** @defgroup VL53L0X_GpioFunctionality_group Gpio Functionality
|
||||
* @brief Defines the different functionalities for the device GPIO(s)
|
||||
* @{
|
||||
*/
|
||||
typedef uint8_t VL53L0X_GpioFunctionality;
|
||||
|
||||
#define VL53L0X_GPIOFUNCTIONALITY_OFF \
|
||||
((VL53L0X_GpioFunctionality)0) /*!< NO Interrupt */
|
||||
#define VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_LOW \
|
||||
((VL53L0X_GpioFunctionality)1) /*!< Level Low (value < thresh_low) */
|
||||
#define VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_HIGH \
|
||||
((VL53L0X_GpioFunctionality)2) /*!< Level High (value > thresh_high) */
|
||||
#define VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_OUT \
|
||||
((VL53L0X_GpioFunctionality)3)
|
||||
/*!< Out Of Window (value < thresh_low OR value > thresh_high) */
|
||||
#define VL53L0X_GPIOFUNCTIONALITY_NEW_MEASURE_READY \
|
||||
((VL53L0X_GpioFunctionality)4) /*!< New Sample Ready */
|
||||
|
||||
/** @} end of VL53L0X_GpioFunctionality_group */
|
||||
|
||||
/* Device register map */
|
||||
|
||||
/** @defgroup VL53L0X_DefineRegisters_group Define Registers
|
||||
* @brief List of all the defined registers
|
||||
* @{
|
||||
*/
|
||||
#define VL53L0X_REG_SYSRANGE_START 0x000
|
||||
/** mask existing bit in #VL53L0X_REG_SYSRANGE_START*/
|
||||
#define VL53L0X_REG_SYSRANGE_MODE_MASK 0x0F
|
||||
/** bit 0 in #VL53L0X_REG_SYSRANGE_START write 1 toggle state in
|
||||
* continuous mode and arm next shot in single shot mode */
|
||||
#define VL53L0X_REG_SYSRANGE_MODE_START_STOP 0x01
|
||||
/** bit 1 write 0 in #VL53L0X_REG_SYSRANGE_START set single shot mode */
|
||||
#define VL53L0X_REG_SYSRANGE_MODE_SINGLESHOT 0x00
|
||||
/** bit 1 write 1 in #VL53L0X_REG_SYSRANGE_START set back-to-back
|
||||
* operation mode */
|
||||
#define VL53L0X_REG_SYSRANGE_MODE_BACKTOBACK 0x02
|
||||
/** bit 2 write 1 in #VL53L0X_REG_SYSRANGE_START set timed operation
|
||||
* mode */
|
||||
#define VL53L0X_REG_SYSRANGE_MODE_TIMED 0x04
|
||||
/** bit 3 write 1 in #VL53L0X_REG_SYSRANGE_START set histogram operation
|
||||
* mode */
|
||||
#define VL53L0X_REG_SYSRANGE_MODE_HISTOGRAM 0x08
|
||||
|
||||
#define VL53L0X_REG_SYSTEM_THRESH_HIGH 0x000C
|
||||
#define VL53L0X_REG_SYSTEM_THRESH_LOW 0x000E
|
||||
|
||||
#define VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG 0x0001
|
||||
#define VL53L0X_REG_SYSTEM_RANGE_CONFIG 0x0009
|
||||
#define VL53L0X_REG_SYSTEM_INTERMEASUREMENT_PERIOD 0x0004
|
||||
|
||||
#define VL53L0X_REG_SYSTEM_INTERRUPT_CONFIG_GPIO 0x000A
|
||||
#define VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_DISABLED 0x00
|
||||
#define VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_LEVEL_LOW 0x01
|
||||
#define VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_LEVEL_HIGH 0x02
|
||||
#define VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_OUT_OF_WINDOW 0x03
|
||||
#define VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY 0x04
|
||||
|
||||
#define VL53L0X_REG_GPIO_HV_MUX_ACTIVE_HIGH 0x0084
|
||||
|
||||
#define VL53L0X_REG_SYSTEM_INTERRUPT_CLEAR 0x000B
|
||||
|
||||
/* Result registers */
|
||||
#define VL53L0X_REG_RESULT_INTERRUPT_STATUS 0x0013
|
||||
#define VL53L0X_REG_RESULT_RANGE_STATUS 0x0014
|
||||
|
||||
#define VL53L0X_REG_RESULT_CORE_PAGE 1
|
||||
#define VL53L0X_REG_RESULT_CORE_AMBIENT_WINDOW_EVENTS_RTN 0x00BC
|
||||
#define VL53L0X_REG_RESULT_CORE_RANGING_TOTAL_EVENTS_RTN 0x00C0
|
||||
#define VL53L0X_REG_RESULT_CORE_AMBIENT_WINDOW_EVENTS_REF 0x00D0
|
||||
#define VL53L0X_REG_RESULT_CORE_RANGING_TOTAL_EVENTS_REF 0x00D4
|
||||
#define VL53L0X_REG_RESULT_PEAK_SIGNAL_RATE_REF 0x00B6
|
||||
|
||||
/* Algo register */
|
||||
|
||||
#define VL53L0X_REG_ALGO_PART_TO_PART_RANGE_OFFSET_MM 0x0028
|
||||
|
||||
#define VL53L0X_REG_I2C_SLAVE_DEVICE_ADDRESS 0x008a
|
||||
|
||||
/* Check Limit registers */
|
||||
#define VL53L0X_REG_MSRC_CONFIG_CONTROL 0x0060
|
||||
|
||||
#define VL53L0X_REG_PRE_RANGE_CONFIG_MIN_SNR 0X0027
|
||||
#define VL53L0X_REG_PRE_RANGE_CONFIG_VALID_PHASE_LOW 0x0056
|
||||
#define VL53L0X_REG_PRE_RANGE_CONFIG_VALID_PHASE_HIGH 0x0057
|
||||
#define VL53L0X_REG_PRE_RANGE_MIN_COUNT_RATE_RTN_LIMIT 0x0064
|
||||
|
||||
#define VL53L0X_REG_FINAL_RANGE_CONFIG_MIN_SNR 0X0067
|
||||
#define VL53L0X_REG_FINAL_RANGE_CONFIG_VALID_PHASE_LOW 0x0047
|
||||
#define VL53L0X_REG_FINAL_RANGE_CONFIG_VALID_PHASE_HIGH 0x0048
|
||||
#define VL53L0X_REG_FINAL_RANGE_CONFIG_MIN_COUNT_RATE_RTN_LIMIT 0x0044
|
||||
|
||||
#define VL53L0X_REG_PRE_RANGE_CONFIG_SIGMA_THRESH_HI 0X0061
|
||||
#define VL53L0X_REG_PRE_RANGE_CONFIG_SIGMA_THRESH_LO 0X0062
|
||||
|
||||
/* PRE RANGE registers */
|
||||
#define VL53L0X_REG_PRE_RANGE_CONFIG_VCSEL_PERIOD 0x0050
|
||||
#define VL53L0X_REG_PRE_RANGE_CONFIG_TIMEOUT_MACROP_HI 0x0051
|
||||
#define VL53L0X_REG_PRE_RANGE_CONFIG_TIMEOUT_MACROP_LO 0x0052
|
||||
|
||||
#define VL53L0X_REG_SYSTEM_HISTOGRAM_BIN 0x0081
|
||||
#define VL53L0X_REG_HISTOGRAM_CONFIG_INITIAL_PHASE_SELECT 0x0033
|
||||
#define VL53L0X_REG_HISTOGRAM_CONFIG_READOUT_CTRL 0x0055
|
||||
|
||||
#define VL53L0X_REG_FINAL_RANGE_CONFIG_VCSEL_PERIOD 0x0070
|
||||
#define VL53L0X_REG_FINAL_RANGE_CONFIG_TIMEOUT_MACROP_HI 0x0071
|
||||
#define VL53L0X_REG_FINAL_RANGE_CONFIG_TIMEOUT_MACROP_LO 0x0072
|
||||
#define VL53L0X_REG_CROSSTALK_COMPENSATION_PEAK_RATE_MCPS 0x0020
|
||||
|
||||
#define VL53L0X_REG_MSRC_CONFIG_TIMEOUT_MACROP 0x0046
|
||||
|
||||
#define VL53L0X_REG_SOFT_RESET_GO2_SOFT_RESET_N 0x00bf
|
||||
#define VL53L0X_REG_IDENTIFICATION_MODEL_ID 0x00c0
|
||||
#define VL53L0X_REG_IDENTIFICATION_REVISION_ID 0x00c2
|
||||
|
||||
#define VL53L0X_REG_OSC_CALIBRATE_VAL 0x00f8
|
||||
|
||||
#define VL53L0X_SIGMA_ESTIMATE_MAX_VALUE 65535
|
||||
/* equivalent to a range sigma of 655.35mm */
|
||||
|
||||
#define VL53L0X_REG_GLOBAL_CONFIG_VCSEL_WIDTH 0x032
|
||||
#define VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_0 0x0B0
|
||||
#define VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_1 0x0B1
|
||||
#define VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_2 0x0B2
|
||||
#define VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_3 0x0B3
|
||||
#define VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_4 0x0B4
|
||||
#define VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_5 0x0B5
|
||||
|
||||
#define VL53L0X_REG_GLOBAL_CONFIG_REF_EN_START_SELECT 0xB6
|
||||
#define VL53L0X_REG_DYNAMIC_SPAD_NUM_REQUESTED_REF_SPAD 0x4E /* 0x14E */
|
||||
#define VL53L0X_REG_DYNAMIC_SPAD_REF_EN_START_OFFSET 0x4F /* 0x14F */
|
||||
#define VL53L0X_REG_POWER_MANAGEMENT_GO1_POWER_FORCE 0x80
|
||||
|
||||
/*
|
||||
* Speed of light in um per 1E-10 Seconds
|
||||
*/
|
||||
|
||||
#define VL53L0X_SPEED_OF_LIGHT_IN_AIR 2997
|
||||
|
||||
#define VL53L0X_REG_VHV_CONFIG_PAD_SCL_SDA__EXTSUP_HV 0x0089
|
||||
|
||||
#define VL53L0X_REG_ALGO_PHASECAL_LIM 0x0030 /* 0x130 */
|
||||
#define VL53L0X_REG_ALGO_PHASECAL_CONFIG_TIMEOUT 0x0030
|
||||
|
||||
/** @} VL53L0X_DefineRegisters_group */
|
||||
|
||||
/** @} VL53L0X_DevSpecDefines_group */
|
||||
|
||||
#endif
|
||||
|
||||
/* _VL53L0X_DEVICE_H_ */
|
||||
21
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_i2c_platform.h
Normal file
21
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_i2c_platform.h
Normal file
@@ -0,0 +1,21 @@
|
||||
#include "Arduino.h"
|
||||
#include "Wire.h"
|
||||
|
||||
// initialize I2C
|
||||
int VL53L0X_i2c_init(TwoWire *i2c);
|
||||
int VL53L0X_write_multi(uint8_t deviceAddress, uint8_t index, uint8_t *pdata,
|
||||
uint32_t count, TwoWire *i2c);
|
||||
int VL53L0X_read_multi(uint8_t deviceAddress, uint8_t index, uint8_t *pdata,
|
||||
uint32_t count, TwoWire *i2c);
|
||||
int VL53L0X_write_byte(uint8_t deviceAddress, uint8_t index, uint8_t data,
|
||||
TwoWire *i2c);
|
||||
int VL53L0X_write_word(uint8_t deviceAddress, uint8_t index, uint16_t data,
|
||||
TwoWire *i2c);
|
||||
int VL53L0X_write_dword(uint8_t deviceAddress, uint8_t index, uint32_t data,
|
||||
TwoWire *i2c);
|
||||
int VL53L0X_read_byte(uint8_t deviceAddress, uint8_t index, uint8_t *data,
|
||||
TwoWire *i2c);
|
||||
int VL53L0X_read_word(uint8_t deviceAddress, uint8_t index, uint16_t *data,
|
||||
TwoWire *i2c);
|
||||
int VL53L0X_read_dword(uint8_t deviceAddress, uint8_t index, uint32_t *data,
|
||||
TwoWire *i2c);
|
||||
@@ -0,0 +1,81 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2016, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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.
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef _VL53L0X_INTERRUPT_THRESHOLD_SETTINGS_H_
|
||||
#define _VL53L0X_INTERRUPT_THRESHOLD_SETTINGS_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
uint8_t InterruptThresholdSettings[] = {
|
||||
|
||||
/* Start of Interrupt Threshold Settings */
|
||||
0x1, 0xff, 0x00, 0x1, 0x80, 0x01, 0x1, 0xff, 0x01, 0x1, 0x00, 0x00,
|
||||
0x1, 0xff, 0x01, 0x1, 0x4f, 0x02, 0x1, 0xFF, 0x0E, 0x1, 0x00, 0x03,
|
||||
0x1, 0x01, 0x84, 0x1, 0x02, 0x0A, 0x1, 0x03, 0x03, 0x1, 0x04, 0x08,
|
||||
0x1, 0x05, 0xC8, 0x1, 0x06, 0x03, 0x1, 0x07, 0x8D, 0x1, 0x08, 0x08,
|
||||
0x1, 0x09, 0xC6, 0x1, 0x0A, 0x01, 0x1, 0x0B, 0x02, 0x1, 0x0C, 0x00,
|
||||
0x1, 0x0D, 0xD5, 0x1, 0x0E, 0x18, 0x1, 0x0F, 0x12, 0x1, 0x10, 0x01,
|
||||
0x1, 0x11, 0x82, 0x1, 0x12, 0x00, 0x1, 0x13, 0xD5, 0x1, 0x14, 0x18,
|
||||
0x1, 0x15, 0x13, 0x1, 0x16, 0x03, 0x1, 0x17, 0x86, 0x1, 0x18, 0x0A,
|
||||
0x1, 0x19, 0x09, 0x1, 0x1A, 0x08, 0x1, 0x1B, 0xC2, 0x1, 0x1C, 0x03,
|
||||
0x1, 0x1D, 0x8F, 0x1, 0x1E, 0x0A, 0x1, 0x1F, 0x06, 0x1, 0x20, 0x01,
|
||||
0x1, 0x21, 0x02, 0x1, 0x22, 0x00, 0x1, 0x23, 0xD5, 0x1, 0x24, 0x18,
|
||||
0x1, 0x25, 0x22, 0x1, 0x26, 0x01, 0x1, 0x27, 0x82, 0x1, 0x28, 0x00,
|
||||
0x1, 0x29, 0xD5, 0x1, 0x2A, 0x18, 0x1, 0x2B, 0x0B, 0x1, 0x2C, 0x28,
|
||||
0x1, 0x2D, 0x78, 0x1, 0x2E, 0x28, 0x1, 0x2F, 0x91, 0x1, 0x30, 0x00,
|
||||
0x1, 0x31, 0x0B, 0x1, 0x32, 0x00, 0x1, 0x33, 0x0B, 0x1, 0x34, 0x00,
|
||||
0x1, 0x35, 0xA1, 0x1, 0x36, 0x00, 0x1, 0x37, 0xA0, 0x1, 0x38, 0x00,
|
||||
0x1, 0x39, 0x04, 0x1, 0x3A, 0x28, 0x1, 0x3B, 0x30, 0x1, 0x3C, 0x0C,
|
||||
0x1, 0x3D, 0x04, 0x1, 0x3E, 0x0F, 0x1, 0x3F, 0x79, 0x1, 0x40, 0x28,
|
||||
0x1, 0x41, 0x1E, 0x1, 0x42, 0x2F, 0x1, 0x43, 0x87, 0x1, 0x44, 0x00,
|
||||
0x1, 0x45, 0x0B, 0x1, 0x46, 0x00, 0x1, 0x47, 0x0B, 0x1, 0x48, 0x00,
|
||||
0x1, 0x49, 0xA7, 0x1, 0x4A, 0x00, 0x1, 0x4B, 0xA6, 0x1, 0x4C, 0x00,
|
||||
0x1, 0x4D, 0x04, 0x1, 0x4E, 0x01, 0x1, 0x4F, 0x00, 0x1, 0x50, 0x00,
|
||||
0x1, 0x51, 0x80, 0x1, 0x52, 0x09, 0x1, 0x53, 0x08, 0x1, 0x54, 0x01,
|
||||
0x1, 0x55, 0x00, 0x1, 0x56, 0x0F, 0x1, 0x57, 0x79, 0x1, 0x58, 0x09,
|
||||
0x1, 0x59, 0x05, 0x1, 0x5A, 0x00, 0x1, 0x5B, 0x60, 0x1, 0x5C, 0x05,
|
||||
0x1, 0x5D, 0xD1, 0x1, 0x5E, 0x0C, 0x1, 0x5F, 0x3C, 0x1, 0x60, 0x00,
|
||||
0x1, 0x61, 0xD0, 0x1, 0x62, 0x0B, 0x1, 0x63, 0x03, 0x1, 0x64, 0x28,
|
||||
0x1, 0x65, 0x10, 0x1, 0x66, 0x2A, 0x1, 0x67, 0x39, 0x1, 0x68, 0x0B,
|
||||
0x1, 0x69, 0x02, 0x1, 0x6A, 0x28, 0x1, 0x6B, 0x10, 0x1, 0x6C, 0x2A,
|
||||
0x1, 0x6D, 0x61, 0x1, 0x6E, 0x0C, 0x1, 0x6F, 0x00, 0x1, 0x70, 0x0F,
|
||||
0x1, 0x71, 0x79, 0x1, 0x72, 0x00, 0x1, 0x73, 0x0B, 0x1, 0x74, 0x00,
|
||||
0x1, 0x75, 0x0B, 0x1, 0x76, 0x00, 0x1, 0x77, 0xA1, 0x1, 0x78, 0x00,
|
||||
0x1, 0x79, 0xA0, 0x1, 0x7A, 0x00, 0x1, 0x7B, 0x04, 0x1, 0xFF, 0x04,
|
||||
0x1, 0x79, 0x1D, 0x1, 0x7B, 0x27, 0x1, 0x96, 0x0E, 0x1, 0x97, 0xFE,
|
||||
0x1, 0x98, 0x03, 0x1, 0x99, 0xEF, 0x1, 0x9A, 0x02, 0x1, 0x9B, 0x44,
|
||||
0x1, 0x73, 0x07, 0x1, 0x70, 0x01, 0x1, 0xff, 0x01, 0x1, 0x00, 0x01,
|
||||
0x1, 0xff, 0x00, 0x00, 0x00, 0x00};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _VL53L0X_INTERRUPT_THRESHOLD_SETTINGS_H_ */
|
||||
247
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_platform.h
Normal file
247
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_platform.h
Normal file
@@ -0,0 +1,247 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2015, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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.
|
||||
********************************************************************************/
|
||||
|
||||
#ifndef _VL53L0X_PLATFORM_H_
|
||||
#define _VL53L0X_PLATFORM_H_
|
||||
|
||||
#include "vl53l0x_def.h"
|
||||
#include "vl53l0x_i2c_platform.h"
|
||||
#include "vl53l0x_platform_log.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @file vl53l0_platform.h
|
||||
*
|
||||
* @brief All end user OS/platform/application porting
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup VL53L0X_platform_group VL53L0 Platform Functions
|
||||
* @brief VL53L0 Platform Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @struct VL53L0X_Dev_t
|
||||
* @brief Generic PAL device type that does link between API and platform
|
||||
* abstraction layer
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
VL53L0X_DevData_t Data; /*!< embed ST Ewok Dev data as "Data"*/
|
||||
|
||||
/*!< user specific field */
|
||||
uint8_t I2cDevAddr; /*!< i2c device address user specific field */
|
||||
uint8_t
|
||||
comms_type; /*!< Type of comms : VL53L0X_COMMS_I2C or VL53L0X_COMMS_SPI */
|
||||
uint16_t comms_speed_khz; /*!< Comms speed [kHz] : typically 400kHz for I2C */
|
||||
|
||||
TwoWire *i2c;
|
||||
|
||||
} VL53L0X_Dev_t;
|
||||
|
||||
/**
|
||||
* @brief Declare the device Handle as a pointer of the structure @a
|
||||
* VL53L0X_Dev_t.
|
||||
*
|
||||
*/
|
||||
typedef VL53L0X_Dev_t *VL53L0X_DEV;
|
||||
|
||||
/**
|
||||
* @def PALDevDataGet
|
||||
* @brief Get ST private structure @a VL53L0X_DevData_t data access
|
||||
*
|
||||
* @param Dev Device Handle
|
||||
* @param field ST structure field name
|
||||
* It maybe used and as real data "ref" not just as "get" for sub-structure item
|
||||
* like PALDevDataGet(FilterData.field)[i] or
|
||||
* PALDevDataGet(FilterData.MeasurementIndex)++
|
||||
*/
|
||||
#define PALDevDataGet(Dev, field) (Dev->Data.field)
|
||||
|
||||
/**
|
||||
* @def PALDevDataSet(Dev, field, data)
|
||||
* @brief Set ST private structure @a VL53L0X_DevData_t data field
|
||||
* @param Dev Device Handle
|
||||
* @param field ST structure field name
|
||||
* @param data Data to be set
|
||||
*/
|
||||
#define PALDevDataSet(Dev, field, data) (Dev->Data.field) = (data)
|
||||
|
||||
/**
|
||||
* @defgroup VL53L0X_registerAccess_group PAL Register Access Functions
|
||||
* @brief PAL Register Access Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Lock comms interface to serialize all commands to a shared I2C interface for
|
||||
* a specific device
|
||||
* @param Dev Device Handle
|
||||
* @return VL53L0X_ERROR_NONE Success
|
||||
* @return "Other error code" See ::VL53L0X_Error
|
||||
*/
|
||||
VL53L0X_Error VL53L0X_LockSequenceAccess(VL53L0X_DEV Dev);
|
||||
|
||||
/**
|
||||
* Unlock comms interface to serialize all commands to a shared I2C interface
|
||||
* for a specific device
|
||||
* @param Dev Device Handle
|
||||
* @return VL53L0X_ERROR_NONE Success
|
||||
* @return "Other error code" See ::VL53L0X_Error
|
||||
*/
|
||||
VL53L0X_Error VL53L0X_UnlockSequenceAccess(VL53L0X_DEV Dev);
|
||||
|
||||
/**
|
||||
* Writes the supplied byte buffer to the device
|
||||
* @param Dev Device Handle
|
||||
* @param index The register index
|
||||
* @param pdata Pointer to uint8_t buffer containing the data to be
|
||||
* written
|
||||
* @param count Number of bytes in the supplied byte buffer
|
||||
* @return VL53L0X_ERROR_NONE Success
|
||||
* @return "Other error code" See ::VL53L0X_Error
|
||||
*/
|
||||
VL53L0X_Error VL53L0X_WriteMulti(VL53L0X_DEV Dev, uint8_t index, uint8_t *pdata,
|
||||
uint32_t count);
|
||||
|
||||
/**
|
||||
* Reads the requested number of bytes from the device
|
||||
* @param Dev Device Handle
|
||||
* @param index The register index
|
||||
* @param pdata Pointer to the uint8_t buffer to store read data
|
||||
* @param count Number of uint8_t's to read
|
||||
* @return VL53L0X_ERROR_NONE Success
|
||||
* @return "Other error code" See ::VL53L0X_Error
|
||||
*/
|
||||
VL53L0X_Error VL53L0X_ReadMulti(VL53L0X_DEV Dev, uint8_t index, uint8_t *pdata,
|
||||
uint32_t count);
|
||||
|
||||
/**
|
||||
* Write single byte register
|
||||
* @param Dev Device Handle
|
||||
* @param index The register index
|
||||
* @param data 8 bit register data
|
||||
* @return VL53L0X_ERROR_NONE Success
|
||||
* @return "Other error code" See ::VL53L0X_Error
|
||||
*/
|
||||
VL53L0X_Error VL53L0X_WrByte(VL53L0X_DEV Dev, uint8_t index, uint8_t data);
|
||||
|
||||
/**
|
||||
* Write word register
|
||||
* @param Dev Device Handle
|
||||
* @param index The register index
|
||||
* @param data 16 bit register data
|
||||
* @return VL53L0X_ERROR_NONE Success
|
||||
* @return "Other error code" See ::VL53L0X_Error
|
||||
*/
|
||||
VL53L0X_Error VL53L0X_WrWord(VL53L0X_DEV Dev, uint8_t index, uint16_t data);
|
||||
|
||||
/**
|
||||
* Write double word (4 byte) register
|
||||
* @param Dev Device Handle
|
||||
* @param index The register index
|
||||
* @param data 32 bit register data
|
||||
* @return VL53L0X_ERROR_NONE Success
|
||||
* @return "Other error code" See ::VL53L0X_Error
|
||||
*/
|
||||
VL53L0X_Error VL53L0X_WrDWord(VL53L0X_DEV Dev, uint8_t index, uint32_t data);
|
||||
|
||||
/**
|
||||
* Read single byte register
|
||||
* @param Dev Device Handle
|
||||
* @param index The register index
|
||||
* @param data pointer to 8 bit data
|
||||
* @return VL53L0X_ERROR_NONE Success
|
||||
* @return "Other error code" See ::VL53L0X_Error
|
||||
*/
|
||||
VL53L0X_Error VL53L0X_RdByte(VL53L0X_DEV Dev, uint8_t index, uint8_t *data);
|
||||
|
||||
/**
|
||||
* Read word (2byte) register
|
||||
* @param Dev Device Handle
|
||||
* @param index The register index
|
||||
* @param data pointer to 16 bit data
|
||||
* @return VL53L0X_ERROR_NONE Success
|
||||
* @return "Other error code" See ::VL53L0X_Error
|
||||
*/
|
||||
VL53L0X_Error VL53L0X_RdWord(VL53L0X_DEV Dev, uint8_t index, uint16_t *data);
|
||||
|
||||
/**
|
||||
* Read dword (4byte) register
|
||||
* @param Dev Device Handle
|
||||
* @param index The register index
|
||||
* @param data pointer to 32 bit data
|
||||
* @return VL53L0X_ERROR_NONE Success
|
||||
* @return "Other error code" See ::VL53L0X_Error
|
||||
*/
|
||||
VL53L0X_Error VL53L0X_RdDWord(VL53L0X_DEV Dev, uint8_t index, uint32_t *data);
|
||||
|
||||
/**
|
||||
* Threat safe Update (read/modify/write) single byte register
|
||||
*
|
||||
* Final_reg = (Initial_reg & and_data) |or_data
|
||||
*
|
||||
* @param Dev Device Handle
|
||||
* @param index The register index
|
||||
* @param AndData 8 bit and data
|
||||
* @param OrData 8 bit or data
|
||||
* @return VL53L0X_ERROR_NONE Success
|
||||
* @return "Other error code" See ::VL53L0X_Error
|
||||
*/
|
||||
VL53L0X_Error VL53L0X_UpdateByte(VL53L0X_DEV Dev, uint8_t index,
|
||||
uint8_t AndData, uint8_t OrData);
|
||||
|
||||
/** @} end of VL53L0X_registerAccess_group */
|
||||
|
||||
/**
|
||||
* @brief execute delay in all polling API call
|
||||
*
|
||||
* A typical multi-thread or RTOs implementation is to sleep the task for some
|
||||
* 5ms (with 100Hz max rate faster polling is not needed) if nothing specific is
|
||||
* need you can define it as an empty/void macro
|
||||
* @code
|
||||
* #define VL53L0X_PollingDelay(...) (void)0
|
||||
* @endcode
|
||||
* @param Dev Device Handle
|
||||
* @return VL53L0X_ERROR_NONE Success
|
||||
* @return "Other error code" See ::VL53L0X_Error
|
||||
*/
|
||||
VL53L0X_Error VL53L0X_PollingDelay(
|
||||
VL53L0X_DEV Dev); /* usually best implemented as a real function */
|
||||
|
||||
/** @} end of VL53L0X_platform_group */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _VL53L0X_PLATFORM_H_ */
|
||||
119
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_platform_log.h
Normal file
119
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_platform_log.h
Normal file
@@ -0,0 +1,119 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2015, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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.
|
||||
********************************************************************************/
|
||||
|
||||
#ifndef _VL53L0X_PLATFORM_LOG_H_
|
||||
#define _VL53L0X_PLATFORM_LOG_H_
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
/* LOG Functions */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @file vl53l0_platform_log.h
|
||||
*
|
||||
* @brief platform log function definition
|
||||
*/
|
||||
|
||||
//#define VL53L0X_LOG_ENABLE 0
|
||||
|
||||
enum {
|
||||
TRACE_LEVEL_NONE,
|
||||
TRACE_LEVEL_ERRORS,
|
||||
TRACE_LEVEL_WARNING,
|
||||
TRACE_LEVEL_INFO,
|
||||
TRACE_LEVEL_DEBUG,
|
||||
TRACE_LEVEL_ALL,
|
||||
TRACE_LEVEL_IGNORE
|
||||
};
|
||||
|
||||
enum {
|
||||
TRACE_FUNCTION_NONE = 0,
|
||||
TRACE_FUNCTION_I2C = 1,
|
||||
TRACE_FUNCTION_ALL = 0x7fffffff // all bits except sign
|
||||
};
|
||||
|
||||
enum {
|
||||
TRACE_MODULE_NONE = 0x0,
|
||||
TRACE_MODULE_API = 0x1,
|
||||
TRACE_MODULE_PLATFORM = 0x2,
|
||||
TRACE_MODULE_ALL = 0x7fffffff // all bits except sign
|
||||
};
|
||||
|
||||
#ifdef VL53L0X_LOG_ENABLE
|
||||
|
||||
#include <sys/time.h>
|
||||
|
||||
extern uint32_t _trace_level;
|
||||
|
||||
int32_t VL53L0X_trace_config(char *filename, uint32_t modules, uint32_t level,
|
||||
uint32_t functions);
|
||||
|
||||
void trace_print_module_function(uint32_t module, uint32_t level,
|
||||
uint32_t function, const char *format, ...);
|
||||
|
||||
// extern FILE * log_file;
|
||||
|
||||
#define LOG_GET_TIME() (int)clock()
|
||||
|
||||
#define _LOG_FUNCTION_START(module, fmt, ...) \
|
||||
trace_print_module_function(module, _trace_level, TRACE_FUNCTION_ALL, \
|
||||
"%ld <START> %s " fmt "\n", LOG_GET_TIME(), \
|
||||
__FUNCTION__, ##__VA_ARGS__);
|
||||
|
||||
#define _LOG_FUNCTION_END(module, status, ...) \
|
||||
trace_print_module_function(module, _trace_level, TRACE_FUNCTION_ALL, \
|
||||
"%ld <END> %s %d\n", LOG_GET_TIME(), \
|
||||
__FUNCTION__, (int)status, ##__VA_ARGS__)
|
||||
|
||||
#define _LOG_FUNCTION_END_FMT(module, status, fmt, ...) \
|
||||
trace_print_module_function(module, _trace_level, TRACE_FUNCTION_ALL, \
|
||||
"%ld <END> %s %d " fmt "\n", LOG_GET_TIME(), \
|
||||
__FUNCTION__, (int)status, ##__VA_ARGS__)
|
||||
|
||||
// __func__ is gcc only
|
||||
//#define VL53L0X_ErrLog( fmt, ...) fprintf(stderr, "VL53L0X_ErrLog %s" fmt
|
||||
//"\n", __func__, ##__VA_ARGS__)
|
||||
|
||||
#else /* VL53L0X_LOG_ENABLE no logging */
|
||||
#define VL53L0X_ErrLog(...) (void)0
|
||||
#define _LOG_FUNCTION_START(module, fmt, ...) (void)0
|
||||
#define _LOG_FUNCTION_END(module, status, ...) (void)0
|
||||
#define _LOG_FUNCTION_END_FMT(module, status, fmt, ...) (void)0
|
||||
#endif /* else */
|
||||
|
||||
#define VL53L0X_COPYSTRING(str, ...) strcpy(str, ##__VA_ARGS__)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _VL53L0X_PLATFORM_LOG_H_ */
|
||||
87
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_tuning.h
Normal file
87
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_tuning.h
Normal file
@@ -0,0 +1,87 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2016, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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.
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef _VL53L0X_TUNING_H_
|
||||
#define _VL53L0X_TUNING_H_
|
||||
|
||||
#include "vl53l0x_def.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
uint8_t DefaultTuningSettings[] = {
|
||||
|
||||
/* update 02/11/2015_v36 */
|
||||
0x01, 0xFF, 0x01, 0x01, 0x00, 0x00,
|
||||
|
||||
0x01, 0xFF, 0x00, 0x01, 0x09, 0x00, 0x01, 0x10, 0x00, 0x01, 0x11, 0x00,
|
||||
|
||||
0x01, 0x24, 0x01, 0x01, 0x25, 0xff, 0x01, 0x75, 0x00,
|
||||
|
||||
0x01, 0xFF, 0x01, 0x01, 0x4e, 0x2c, 0x01, 0x48, 0x00, 0x01, 0x30, 0x20,
|
||||
|
||||
0x01, 0xFF, 0x00, 0x01, 0x30, 0x09, /* mja changed from 0x64. */
|
||||
0x01, 0x54, 0x00, 0x01, 0x31, 0x04, 0x01, 0x32, 0x03, 0x01, 0x40, 0x83,
|
||||
0x01, 0x46, 0x25, 0x01, 0x60, 0x00, 0x01, 0x27, 0x00, 0x01, 0x50, 0x06,
|
||||
0x01, 0x51, 0x00, 0x01, 0x52, 0x96, 0x01, 0x56, 0x08, 0x01, 0x57, 0x30,
|
||||
0x01, 0x61, 0x00, 0x01, 0x62, 0x00, 0x01, 0x64, 0x00, 0x01, 0x65, 0x00,
|
||||
0x01, 0x66, 0xa0,
|
||||
|
||||
0x01, 0xFF, 0x01, 0x01, 0x22, 0x32, 0x01, 0x47, 0x14, 0x01, 0x49, 0xff,
|
||||
0x01, 0x4a, 0x00,
|
||||
|
||||
0x01, 0xFF, 0x00, 0x01, 0x7a, 0x0a, 0x01, 0x7b, 0x00, 0x01, 0x78, 0x21,
|
||||
|
||||
0x01, 0xFF, 0x01, 0x01, 0x23, 0x34, 0x01, 0x42, 0x00, 0x01, 0x44, 0xff,
|
||||
0x01, 0x45, 0x26, 0x01, 0x46, 0x05, 0x01, 0x40, 0x40, 0x01, 0x0E, 0x06,
|
||||
0x01, 0x20, 0x1a, 0x01, 0x43, 0x40,
|
||||
|
||||
0x01, 0xFF, 0x00, 0x01, 0x34, 0x03, 0x01, 0x35, 0x44,
|
||||
|
||||
0x01, 0xFF, 0x01, 0x01, 0x31, 0x04, 0x01, 0x4b, 0x09, 0x01, 0x4c, 0x05,
|
||||
0x01, 0x4d, 0x04,
|
||||
|
||||
0x01, 0xFF, 0x00, 0x01, 0x44, 0x00, 0x01, 0x45, 0x20, 0x01, 0x47, 0x08,
|
||||
0x01, 0x48, 0x28, 0x01, 0x67, 0x00, 0x01, 0x70, 0x04, 0x01, 0x71, 0x01,
|
||||
0x01, 0x72, 0xfe, 0x01, 0x76, 0x00, 0x01, 0x77, 0x00,
|
||||
|
||||
0x01, 0xFF, 0x01, 0x01, 0x0d, 0x01,
|
||||
|
||||
0x01, 0xFF, 0x00, 0x01, 0x80, 0x01, 0x01, 0x01, 0xF8,
|
||||
|
||||
0x01, 0xFF, 0x01, 0x01, 0x8e, 0x01, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x00,
|
||||
0x01, 0x80, 0x00,
|
||||
|
||||
0x00, 0x00, 0x00};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _VL53L0X_TUNING_H_ */
|
||||
111
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_types.h
Normal file
111
code/lib/Adafruit_VL53L0X-1.2.3/src/vl53l0x_types.h
Normal file
@@ -0,0 +1,111 @@
|
||||
/*******************************************************************************
|
||||
Copyright 2015, STMicroelectronics International N.V.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* Neither the name of STMicroelectronics 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, FITNESS FOR A PARTICULAR PURPOSE, AND
|
||||
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. 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 vl53l0_types.h
|
||||
* @brief VL53L0 types definition
|
||||
*/
|
||||
|
||||
#ifndef VL53L0X_TYPES_H_
|
||||
#define VL53L0X_TYPES_H_
|
||||
|
||||
/** @defgroup porting_type Basic type definition
|
||||
* @ingroup VL53L0X_platform_group
|
||||
*
|
||||
* @brief file vl53l0_types.h files hold basic type definition that may
|
||||
* requires porting
|
||||
*
|
||||
* contains type that must be defined for the platform\n
|
||||
* when target platform and compiler provide stdint.h and stddef.h it is enough
|
||||
* to include it.\n If stdint.h is not available review and adapt all signed and
|
||||
* unsigned 8/16/32 bits basic types. \n If stddef.h is not available review and
|
||||
* adapt NULL definition .
|
||||
*/
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef NULL
|
||||
#error "Error NULL definition should be done. Please add required include "
|
||||
#endif
|
||||
|
||||
#if !defined(STDINT_H) && !defined(_STDINT_H) && !defined(_GCC_STDINT_H) && \
|
||||
!defined(__STDINT_DECLS) && !defined(_GCC_WRAP_STDINT_H)
|
||||
|
||||
#pragma message( \
|
||||
"Please review type definition of STDINT define for your platform and add to list above ")
|
||||
|
||||
/*
|
||||
* target platform do not provide stdint or use a different #define than above
|
||||
* to avoid seeing the message below adapt the #define list above or implement
|
||||
* all type and delete these pragma
|
||||
*/
|
||||
|
||||
/** \ingroup VL53L0X_portingType_group
|
||||
* @{
|
||||
*/
|
||||
|
||||
typedef unsigned long long uint64_t;
|
||||
|
||||
/** @brief Typedef defining 32 bit unsigned int type.\n
|
||||
* The developer should modify this to suit the platform being deployed.
|
||||
*/
|
||||
typedef unsigned int uint32_t;
|
||||
|
||||
/** @brief Typedef defining 32 bit int type.\n
|
||||
* The developer should modify this to suit the platform being deployed.
|
||||
*/
|
||||
typedef int int32_t;
|
||||
|
||||
/** @brief Typedef defining 16 bit unsigned short type.\n
|
||||
* The developer should modify this to suit the platform being deployed.
|
||||
*/
|
||||
typedef unsigned short uint16_t;
|
||||
|
||||
/** @brief Typedef defining 16 bit short type.\n
|
||||
* The developer should modify this to suit the platform being deployed.
|
||||
*/
|
||||
typedef short int16_t;
|
||||
|
||||
/** @brief Typedef defining 8 bit unsigned char type.\n
|
||||
* The developer should modify this to suit the platform being deployed.
|
||||
*/
|
||||
typedef unsigned char uint8_t;
|
||||
|
||||
/** @brief Typedef defining 8 bit char type.\n
|
||||
* The developer should modify this to suit the platform being deployed.
|
||||
*/
|
||||
typedef signed char int8_t;
|
||||
|
||||
/** @} */
|
||||
#endif /* _STDINT_H */
|
||||
|
||||
/** use where fractional values are expected
|
||||
*
|
||||
* Given a floating point value f it's .16 bit point is (int)(f*(1<<16))*/
|
||||
typedef uint32_t FixPoint1616_t;
|
||||
|
||||
#endif /* VL53L0X_TYPES_H_ */
|
||||
Reference in New Issue
Block a user