Rename library

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   VL53L3CX_NoShield_1Sensor_poll_Mb06x VL53L3_NoShield_1Sensor_polling_Mb63 X_NUCLEO_53L3A2 53L3A2_Ranging

Committer:
charlesmn
Date:
Wed Jul 21 14:07:59 2021 +0000
Revision:
7:7f1bbf370283
Parent:
5:89031b2f5316
Moved vl53l3cx_class.cpp and .h to 53l3a2_RangingClass

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Charles MacNeill 5:89031b2f5316 1 /* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
Charles MacNeill 5:89031b2f5316 2 /******************************************************************************
Charles MacNeill 5:89031b2f5316 3 * Copyright (c) 2020, STMicroelectronics - All Rights Reserved
Charles MacNeill 5:89031b2f5316 4
Charles MacNeill 5:89031b2f5316 5 This file is part of VL53LX and is dual licensed,
Charles MacNeill 5:89031b2f5316 6 either GPL-2.0+
Charles MacNeill 5:89031b2f5316 7 or 'BSD 3-clause "New" or "Revised" License' , at your option.
Charles MacNeill 5:89031b2f5316 8 ******************************************************************************
Charles MacNeill 5:89031b2f5316 9 */
Charles MacNeill 5:89031b2f5316 10
Charles MacNeill 5:89031b2f5316 11 /**
Charles MacNeill 5:89031b2f5316 12 * @file vl53lx_def.h
Charles MacNeill 5:89031b2f5316 13 *
Charles MacNeill 5:89031b2f5316 14 * @brief Type definitions for VL53LX API.
Charles MacNeill 5:89031b2f5316 15 *
Charles MacNeill 5:89031b2f5316 16 */
Charles MacNeill 5:89031b2f5316 17
Charles MacNeill 5:89031b2f5316 18
Charles MacNeill 5:89031b2f5316 19 #ifndef _VL53LX_DEF_H_
Charles MacNeill 5:89031b2f5316 20 #define _VL53LX_DEF_H_
Charles MacNeill 5:89031b2f5316 21
Charles MacNeill 5:89031b2f5316 22 #include "vl53lx_ll_def.h"
Charles MacNeill 5:89031b2f5316 23
Charles MacNeill 5:89031b2f5316 24 #ifdef __cplusplus
Charles MacNeill 5:89031b2f5316 25 extern "C" {
Charles MacNeill 5:89031b2f5316 26 #endif
Charles MacNeill 5:89031b2f5316 27
Charles MacNeill 5:89031b2f5316 28 /** @defgroup VL53LX_globaldefine_group VL53LX Defines
Charles MacNeill 5:89031b2f5316 29 * @brief VL53LX Defines
Charles MacNeill 5:89031b2f5316 30 * @{
Charles MacNeill 5:89031b2f5316 31 */
Charles MacNeill 5:89031b2f5316 32
Charles MacNeill 5:89031b2f5316 33
Charles MacNeill 5:89031b2f5316 34 /** VL53LX IMPLEMENTATION major version */
Charles MacNeill 5:89031b2f5316 35 #define VL53LX_IMPLEMENTATION_VER_MAJOR 1
Charles MacNeill 5:89031b2f5316 36 /** VL53LX IMPLEMENTATION minor version */
Charles MacNeill 5:89031b2f5316 37 #define VL53LX_IMPLEMENTATION_VER_MINOR 2
Charles MacNeill 5:89031b2f5316 38 /** VL53LX IMPLEMENTATION sub version */
Charles MacNeill 5:89031b2f5316 39 #define VL53LX_IMPLEMENTATION_VER_SUB 3
Charles MacNeill 5:89031b2f5316 40 /** VL53LX IMPLEMENTATION sub version */
Charles MacNeill 5:89031b2f5316 41 #define VL53LX_IMPLEMENTATION_VER_REVISION 2488
Charles MacNeill 5:89031b2f5316 42
Charles MacNeill 5:89031b2f5316 43 /****************************************
Charles MacNeill 5:89031b2f5316 44 * PRIVATE define do not edit
Charles MacNeill 5:89031b2f5316 45 ****************************************/
Charles MacNeill 5:89031b2f5316 46
Charles MacNeill 5:89031b2f5316 47 /** @brief Defines the parameters of the Get Version Functions
Charles MacNeill 5:89031b2f5316 48 */
Charles MacNeill 5:89031b2f5316 49 typedef struct {
Charles MacNeill 5:89031b2f5316 50 uint32_t revision; /*!< revision number */
Charles MacNeill 5:89031b2f5316 51 uint8_t major; /*!< major number */
Charles MacNeill 5:89031b2f5316 52 uint8_t minor; /*!< minor number */
Charles MacNeill 5:89031b2f5316 53 uint8_t build; /*!< build number */
Charles MacNeill 5:89031b2f5316 54 } VL53LX_Version_t;
Charles MacNeill 5:89031b2f5316 55
Charles MacNeill 5:89031b2f5316 56
Charles MacNeill 5:89031b2f5316 57 /** @brief Defines the parameters of the Get Device Info Functions
Charles MacNeill 5:89031b2f5316 58 */
Charles MacNeill 5:89031b2f5316 59 typedef struct {
Charles MacNeill 5:89031b2f5316 60 uint8_t ProductType;
Charles MacNeill 5:89031b2f5316 61 /*!< Product Type, VL53LX = 0xAA
Charles MacNeill 5:89031b2f5316 62 * Stands as module_type in the datasheet
Charles MacNeill 5:89031b2f5316 63 */
Charles MacNeill 5:89031b2f5316 64 uint8_t ProductRevisionMajor;
Charles MacNeill 5:89031b2f5316 65 /*!< Product revision major */
Charles MacNeill 5:89031b2f5316 66 uint8_t ProductRevisionMinor;
Charles MacNeill 5:89031b2f5316 67 /*!< Product revision minor */
Charles MacNeill 5:89031b2f5316 68 } VL53LX_DeviceInfo_t;
Charles MacNeill 5:89031b2f5316 69
Charles MacNeill 5:89031b2f5316 70 /** @defgroup VL53LX_define_DistanceModes_group Defines Distance modes
Charles MacNeill 5:89031b2f5316 71 * Defines all possible Distance modes for the device
Charles MacNeill 5:89031b2f5316 72 * @{
Charles MacNeill 5:89031b2f5316 73 */
Charles MacNeill 5:89031b2f5316 74 typedef uint8_t VL53LX_DistanceModes;
Charles MacNeill 5:89031b2f5316 75
Charles MacNeill 5:89031b2f5316 76 #define VL53LX_DISTANCEMODE_SHORT ((VL53LX_DistanceModes) 1)
Charles MacNeill 5:89031b2f5316 77 #define VL53LX_DISTANCEMODE_MEDIUM ((VL53LX_DistanceModes) 2)
Charles MacNeill 5:89031b2f5316 78 #define VL53LX_DISTANCEMODE_LONG ((VL53LX_DistanceModes) 3)
Charles MacNeill 5:89031b2f5316 79 /** @} VL53LX_define_DistanceModes_group */
Charles MacNeill 5:89031b2f5316 80
Charles MacNeill 5:89031b2f5316 81 /** @defgroup VL53LX_define_OffsetCorrectionModes_group Defines Offset Correction modes
Charles MacNeill 5:89031b2f5316 82 * Device Offset Correction Mode
Charles MacNeill 5:89031b2f5316 83 *
Charles MacNeill 5:89031b2f5316 84 * @brief Defines all possible offset correction modes for the device
Charles MacNeill 5:89031b2f5316 85 * @{
Charles MacNeill 5:89031b2f5316 86 */
Charles MacNeill 5:89031b2f5316 87 typedef uint8_t VL53LX_OffsetCorrectionModes;
Charles MacNeill 5:89031b2f5316 88
Charles MacNeill 5:89031b2f5316 89 #define VL53LX_OFFSETCORRECTIONMODE_STANDARD ((VL53LX_OffsetCorrectionModes) 1)
Charles MacNeill 5:89031b2f5316 90 #define VL53LX_OFFSETCORRECTIONMODE_PERVCSEL ((VL53LX_OffsetCorrectionModes) 3)
Charles MacNeill 5:89031b2f5316 91
Charles MacNeill 5:89031b2f5316 92 /** @} VL53LX_define_OffsetCorrectionModes_group */
Charles MacNeill 5:89031b2f5316 93
Charles MacNeill 5:89031b2f5316 94 /** @brief Defines all parameters for the device
Charles MacNeill 5:89031b2f5316 95 */
Charles MacNeill 5:89031b2f5316 96 typedef struct {
Charles MacNeill 5:89031b2f5316 97 VL53LX_DistanceModes DistanceMode;
Charles MacNeill 5:89031b2f5316 98 /*!< Defines the operating mode to be used for the next measure */
Charles MacNeill 5:89031b2f5316 99 uint32_t MeasurementTimingBudgetMicroSeconds;
Charles MacNeill 5:89031b2f5316 100 /*!< Defines the allowed total time for a single measurement */
Charles MacNeill 5:89031b2f5316 101 } VL53LX_DeviceParameters_t;
Charles MacNeill 5:89031b2f5316 102
Charles MacNeill 5:89031b2f5316 103
Charles MacNeill 5:89031b2f5316 104 /** @defgroup VL53LX_define_Smudge_Mode_group Defines smudge correction modes
Charles MacNeill 5:89031b2f5316 105 * Defines the smudge correction modes
Charles MacNeill 5:89031b2f5316 106 * @{
Charles MacNeill 5:89031b2f5316 107 */
Charles MacNeill 5:89031b2f5316 108
Charles MacNeill 5:89031b2f5316 109 typedef uint8_t VL53LX_SmudgeCorrectionModes;
Charles MacNeill 5:89031b2f5316 110
Charles MacNeill 5:89031b2f5316 111 #define VL53LX_SMUDGE_CORRECTION_NONE ((VL53LX_SmudgeCorrectionModes) 0)
Charles MacNeill 5:89031b2f5316 112 /*!< Smudge correction is applied continously accross the rangings */
Charles MacNeill 5:89031b2f5316 113 #define VL53LX_SMUDGE_CORRECTION_CONTINUOUS ((VL53LX_SmudgeCorrectionModes) 1)
Charles MacNeill 5:89031b2f5316 114 /*!< Smudge correction is applied continously accross the rangings */
Charles MacNeill 5:89031b2f5316 115 #define VL53LX_SMUDGE_CORRECTION_SINGLE ((VL53LX_SmudgeCorrectionModes) 2)
Charles MacNeill 5:89031b2f5316 116 /*!< Smudge correction is applied only once accross the rangings */
Charles MacNeill 5:89031b2f5316 117 #define VL53LX_SMUDGE_CORRECTION_DEBUG ((VL53LX_SmudgeCorrectionModes) 3)
Charles MacNeill 5:89031b2f5316 118 /*!< Smudge detection is applied continously but Xtalk values are not
Charles MacNeill 5:89031b2f5316 119 * updated automatically within the driver
Charles MacNeill 5:89031b2f5316 120 */
Charles MacNeill 5:89031b2f5316 121
Charles MacNeill 5:89031b2f5316 122 /** @} VL53LX_define_Smudge_Correction_Mode_group */
Charles MacNeill 5:89031b2f5316 123
Charles MacNeill 5:89031b2f5316 124 /**
Charles MacNeill 5:89031b2f5316 125 * @struct VL53LX_TargetRangeData_t
Charles MacNeill 5:89031b2f5316 126 * @brief One Range measurement data for each target.
Charles MacNeill 5:89031b2f5316 127 */
Charles MacNeill 5:89031b2f5316 128 typedef struct {
Charles MacNeill 5:89031b2f5316 129 int16_t RangeMaxMilliMeter;
Charles MacNeill 5:89031b2f5316 130 /*!< Tells what is the maximum detection distance of the object
Charles MacNeill 5:89031b2f5316 131 * in current setup and environment conditions (Filled when
Charles MacNeill 5:89031b2f5316 132 * applicable)
Charles MacNeill 5:89031b2f5316 133 */
Charles MacNeill 5:89031b2f5316 134
Charles MacNeill 5:89031b2f5316 135 int16_t RangeMinMilliMeter;
Charles MacNeill 5:89031b2f5316 136 /*!< Tells what is the minimum detection distance of the object
Charles MacNeill 5:89031b2f5316 137 * in current setup and environment conditions (Filled when
Charles MacNeill 5:89031b2f5316 138 * applicable)
Charles MacNeill 5:89031b2f5316 139 */
Charles MacNeill 5:89031b2f5316 140
Charles MacNeill 5:89031b2f5316 141 FixPoint1616_t SignalRateRtnMegaCps;
Charles MacNeill 5:89031b2f5316 142 /*!< Return signal rate (MCPS)\n these is a 16.16 fix point
Charles MacNeill 5:89031b2f5316 143 * value, which is effectively a measure of target
Charles MacNeill 5:89031b2f5316 144 * reflectance.
Charles MacNeill 5:89031b2f5316 145 */
Charles MacNeill 5:89031b2f5316 146
Charles MacNeill 5:89031b2f5316 147 FixPoint1616_t AmbientRateRtnMegaCps;
Charles MacNeill 5:89031b2f5316 148 /*!< Return ambient rate (MCPS)\n these is a 16.16 fix point
Charles MacNeill 5:89031b2f5316 149 * value, which is effectively a measure of the ambien
Charles MacNeill 5:89031b2f5316 150 * t light.
Charles MacNeill 5:89031b2f5316 151 */
Charles MacNeill 5:89031b2f5316 152
Charles MacNeill 5:89031b2f5316 153 FixPoint1616_t SigmaMilliMeter;
Charles MacNeill 5:89031b2f5316 154 /*!< Return the Sigma value in millimeter */
Charles MacNeill 5:89031b2f5316 155
Charles MacNeill 5:89031b2f5316 156 int16_t RangeMilliMeter;
Charles MacNeill 5:89031b2f5316 157 /*!< range distance in millimeter. This should be between
Charles MacNeill 5:89031b2f5316 158 * RangeMinMilliMeter and RangeMaxMilliMeter
Charles MacNeill 5:89031b2f5316 159 */
Charles MacNeill 5:89031b2f5316 160
Charles MacNeill 5:89031b2f5316 161 uint8_t RangeStatus;
Charles MacNeill 5:89031b2f5316 162 /*!< Range Status for the current measurement. This is device
Charles MacNeill 5:89031b2f5316 163 * dependent. Value = 0 means value is valid.
Charles MacNeill 5:89031b2f5316 164 */
Charles MacNeill 5:89031b2f5316 165
Charles MacNeill 5:89031b2f5316 166 uint8_t ExtendedRange;
Charles MacNeill 5:89031b2f5316 167 /*!< Extended range flag for the current measurement.
Charles MacNeill 5:89031b2f5316 168 * Value = 1 means timings A&B are combined to increase the
Charles MacNeill 5:89031b2f5316 169 * maximum distance range.
Charles MacNeill 5:89031b2f5316 170 */
Charles MacNeill 5:89031b2f5316 171 } VL53LX_TargetRangeData_t;
Charles MacNeill 5:89031b2f5316 172 /**
Charles MacNeill 5:89031b2f5316 173 * @struct VL53LX_MultiRangingData_t
Charles MacNeill 5:89031b2f5316 174 * @brief Structure for storing the set of range results
Charles MacNeill 5:89031b2f5316 175 *
Charles MacNeill 5:89031b2f5316 176 */
Charles MacNeill 5:89031b2f5316 177 typedef struct {
Charles MacNeill 5:89031b2f5316 178 uint32_t TimeStamp;
Charles MacNeill 5:89031b2f5316 179 /*!< 32-bit time stamp.
Charles MacNeill 5:89031b2f5316 180 * @warning Not yet implemented
Charles MacNeill 5:89031b2f5316 181 */
Charles MacNeill 5:89031b2f5316 182
Charles MacNeill 5:89031b2f5316 183 uint8_t StreamCount;
Charles MacNeill 5:89031b2f5316 184 /*!< 8-bit Stream Count. */
Charles MacNeill 5:89031b2f5316 185
Charles MacNeill 5:89031b2f5316 186 uint8_t NumberOfObjectsFound;
Charles MacNeill 5:89031b2f5316 187 /*!< Indicate the number of objects found.
Charles MacNeill 5:89031b2f5316 188 * This is used to know how many ranging data should be get.
Charles MacNeill 5:89031b2f5316 189 * NumberOfObjectsFound is in the range 0 to
Charles MacNeill 5:89031b2f5316 190 * VL53LX_MAX_RANGE_RESULTS.
Charles MacNeill 5:89031b2f5316 191 */
Charles MacNeill 5:89031b2f5316 192 VL53LX_TargetRangeData_t RangeData[VL53LX_MAX_RANGE_RESULTS];
Charles MacNeill 5:89031b2f5316 193 /*!< Range data each target distance */
Charles MacNeill 5:89031b2f5316 194 uint8_t HasXtalkValueChanged;
Charles MacNeill 5:89031b2f5316 195 /*!< set to 1 if a new Xtalk value has been computed whilst
Charles MacNeill 5:89031b2f5316 196 * smudge correction mode enable by with
Charles MacNeill 5:89031b2f5316 197 * VL53LX_SmudgeCorrectionEnable() function is either
Charles MacNeill 5:89031b2f5316 198 * VL53LX_SMUDGE_CORRECTION_CONTINUOUS or
Charles MacNeill 5:89031b2f5316 199 * VL53LX_SMUDGE_CORRECTION_SINGLE.
Charles MacNeill 5:89031b2f5316 200 */
Charles MacNeill 5:89031b2f5316 201 uint16_t EffectiveSpadRtnCount;
Charles MacNeill 5:89031b2f5316 202 /*!< Return the effective SPAD count for the return signal.
Charles MacNeill 5:89031b2f5316 203 * To obtain Real value it should be divided by 256
Charles MacNeill 5:89031b2f5316 204 */
Charles MacNeill 5:89031b2f5316 205 } VL53LX_MultiRangingData_t;
Charles MacNeill 5:89031b2f5316 206
Charles MacNeill 5:89031b2f5316 207
Charles MacNeill 5:89031b2f5316 208 /**
Charles MacNeill 5:89031b2f5316 209 * @struct VL53LX_UserRoi_t
Charles MacNeill 5:89031b2f5316 210 * @brief Defines User Zone(ROI) parameters
Charles MacNeill 5:89031b2f5316 211 *
Charles MacNeill 5:89031b2f5316 212 */
Charles MacNeill 5:89031b2f5316 213 typedef struct {
Charles MacNeill 5:89031b2f5316 214
Charles MacNeill 5:89031b2f5316 215 uint8_t TopLeftX; /*!< Top Left x coordinate: 0-15 range */
Charles MacNeill 5:89031b2f5316 216 uint8_t TopLeftY; /*!< Top Left y coordinate: 0-15 range */
Charles MacNeill 5:89031b2f5316 217 uint8_t BotRightX; /*!< Bot Right x coordinate: 0-15 range */
Charles MacNeill 5:89031b2f5316 218 uint8_t BotRightY; /*!< Bot Right y coordinate: 0-15 range */
Charles MacNeill 5:89031b2f5316 219
Charles MacNeill 5:89031b2f5316 220 } VL53LX_UserRoi_t;
Charles MacNeill 5:89031b2f5316 221
Charles MacNeill 5:89031b2f5316 222
Charles MacNeill 5:89031b2f5316 223 /**
Charles MacNeill 5:89031b2f5316 224 * @struct VL53LX_CustomerNvmManaged_t
Charles MacNeill 5:89031b2f5316 225 *
Charles MacNeill 5:89031b2f5316 226 */
Charles MacNeill 5:89031b2f5316 227
Charles MacNeill 5:89031b2f5316 228 typedef struct {
Charles MacNeill 5:89031b2f5316 229 uint8_t global_config__spad_enables_ref_0;
Charles MacNeill 5:89031b2f5316 230 uint8_t global_config__spad_enables_ref_1;
Charles MacNeill 5:89031b2f5316 231 uint8_t global_config__spad_enables_ref_2;
Charles MacNeill 5:89031b2f5316 232 uint8_t global_config__spad_enables_ref_3;
Charles MacNeill 5:89031b2f5316 233 uint8_t global_config__spad_enables_ref_4;
Charles MacNeill 5:89031b2f5316 234 uint8_t global_config__spad_enables_ref_5;
Charles MacNeill 5:89031b2f5316 235 uint8_t global_config__ref_en_start_select;
Charles MacNeill 5:89031b2f5316 236 uint8_t ref_spad_man__num_requested_ref_spads;
Charles MacNeill 5:89031b2f5316 237 uint8_t ref_spad_man__ref_location;
Charles MacNeill 5:89031b2f5316 238 uint32_t algo__crosstalk_compensation_plane_offset_kcps;
Charles MacNeill 5:89031b2f5316 239 int16_t algo__crosstalk_compensation_x_plane_gradient_kcps;
Charles MacNeill 5:89031b2f5316 240 int16_t algo__crosstalk_compensation_y_plane_gradient_kcps;
Charles MacNeill 5:89031b2f5316 241 uint16_t ref_spad_char__total_rate_target_mcps;
Charles MacNeill 5:89031b2f5316 242 int16_t algo__part_to_part_range_offset_mm;
Charles MacNeill 5:89031b2f5316 243 int16_t mm_config__inner_offset_mm;
Charles MacNeill 5:89031b2f5316 244 int16_t mm_config__outer_offset_mm;
Charles MacNeill 5:89031b2f5316 245 } VL53LX_CustomerNvmManaged_t;
Charles MacNeill 5:89031b2f5316 246
Charles MacNeill 5:89031b2f5316 247 /**
Charles MacNeill 5:89031b2f5316 248 * @struct VL53LX_CalibrationData_t
Charles MacNeill 5:89031b2f5316 249 * @brief Structure for storing the Calibration Data
Charles MacNeill 5:89031b2f5316 250 *
Charles MacNeill 5:89031b2f5316 251 */
Charles MacNeill 5:89031b2f5316 252
Charles MacNeill 5:89031b2f5316 253 typedef struct {
Charles MacNeill 5:89031b2f5316 254
Charles MacNeill 5:89031b2f5316 255 uint32_t struct_version;
Charles MacNeill 5:89031b2f5316 256 VL53LX_CustomerNvmManaged_t customer;
Charles MacNeill 5:89031b2f5316 257 VL53LX_additional_offset_cal_data_t add_off_cal_data;
Charles MacNeill 5:89031b2f5316 258 VL53LX_optical_centre_t optical_centre;
Charles MacNeill 5:89031b2f5316 259 VL53LX_xtalk_histogram_data_t xtalkhisto;
Charles MacNeill 5:89031b2f5316 260 VL53LX_gain_calibration_data_t gain_cal;
Charles MacNeill 5:89031b2f5316 261 VL53LX_cal_peak_rate_map_t cal_peak_rate_map;
Charles MacNeill 5:89031b2f5316 262 VL53LX_per_vcsel_period_offset_cal_data_t per_vcsel_cal_data;
Charles MacNeill 5:89031b2f5316 263 uint32_t algo__xtalk_cpo_HistoMerge_kcps[VL53LX_BIN_REC_SIZE];
Charles MacNeill 5:89031b2f5316 264 } VL53LX_CalibrationData_t;
Charles MacNeill 5:89031b2f5316 265
Charles MacNeill 5:89031b2f5316 266 #define VL53LX_ADDITIONAL_CALIBRATION_DATA_STRUCT_VERSION 0x20
Charles MacNeill 5:89031b2f5316 267 /** VL53LX additional Calibration Data struct version final struct version
Charles MacNeill 5:89031b2f5316 268 * is given by adding it to VL53LX_LL_CALIBRATION_DATA_STRUCT_VERSION
Charles MacNeill 5:89031b2f5316 269 */
Charles MacNeill 5:89031b2f5316 270
Charles MacNeill 5:89031b2f5316 271 #define VL53LX_CALIBRATION_DATA_STRUCT_VERSION \
Charles MacNeill 5:89031b2f5316 272 (VL53LX_LL_CALIBRATION_DATA_STRUCT_VERSION + \
Charles MacNeill 5:89031b2f5316 273 VL53LX_ADDITIONAL_CALIBRATION_DATA_STRUCT_VERSION)
Charles MacNeill 5:89031b2f5316 274 /* VL53LX Calibration Data struct version */
Charles MacNeill 5:89031b2f5316 275
Charles MacNeill 5:89031b2f5316 276 /**
Charles MacNeill 5:89031b2f5316 277 * @struct VL53LX_AdditionalData_t
Charles MacNeill 5:89031b2f5316 278 * @brief Structure for storing the Additional Data
Charles MacNeill 5:89031b2f5316 279 *
Charles MacNeill 5:89031b2f5316 280 */
Charles MacNeill 5:89031b2f5316 281 typedef VL53LX_additional_data_t VL53LX_AdditionalData_t;
Charles MacNeill 5:89031b2f5316 282
Charles MacNeill 5:89031b2f5316 283
Charles MacNeill 5:89031b2f5316 284 /** @defgroup VL53LX_define_RangeStatus_group Defines the Range Status
Charles MacNeill 5:89031b2f5316 285 * @{
Charles MacNeill 5:89031b2f5316 286 */
Charles MacNeill 5:89031b2f5316 287 #define VL53LX_RANGESTATUS_RANGE_VALID 0
Charles MacNeill 5:89031b2f5316 288 /*!<The Range is valid. */
Charles MacNeill 5:89031b2f5316 289 #define VL53LX_RANGESTATUS_SIGMA_FAIL 1
Charles MacNeill 5:89031b2f5316 290 /*!<Sigma Fail. */
Charles MacNeill 5:89031b2f5316 291 #define VL53LX_RANGESTATUS_SIGNAL_FAIL 2
Charles MacNeill 5:89031b2f5316 292 /*!<Signal fail. */
Charles MacNeill 5:89031b2f5316 293 #define VL53LX_RANGESTATUS_RANGE_VALID_MIN_RANGE_CLIPPED 3
Charles MacNeill 5:89031b2f5316 294 /*!<Target is below minimum detection threshold. */
Charles MacNeill 5:89031b2f5316 295 #define VL53LX_RANGESTATUS_OUTOFBOUNDS_FAIL 4
Charles MacNeill 5:89031b2f5316 296 /*!<Phase out of valid limits - different to a wrap exit. */
Charles MacNeill 5:89031b2f5316 297 #define VL53LX_RANGESTATUS_HARDWARE_FAIL 5
Charles MacNeill 5:89031b2f5316 298 /*!<Hardware fail. */
Charles MacNeill 5:89031b2f5316 299 #define VL53LX_RANGESTATUS_RANGE_VALID_NO_WRAP_CHECK_FAIL 6
Charles MacNeill 5:89031b2f5316 300 /*!<The Range is valid but the wraparound check has not been done. */
Charles MacNeill 5:89031b2f5316 301 #define VL53LX_RANGESTATUS_WRAP_TARGET_FAIL 7
Charles MacNeill 5:89031b2f5316 302 /*!<Wrapped target - no matching phase in other VCSEL period timing. */
Charles MacNeill 5:89031b2f5316 303 #define VL53LX_RANGESTATUS_PROCESSING_FAIL 8
Charles MacNeill 5:89031b2f5316 304 /*!<Internal algo underflow or overflow in lite ranging. */
Charles MacNeill 5:89031b2f5316 305 #define VL53LX_RANGESTATUS_XTALK_SIGNAL_FAIL 9
Charles MacNeill 5:89031b2f5316 306 /*!<Specific to lite ranging. */
Charles MacNeill 5:89031b2f5316 307 #define VL53LX_RANGESTATUS_SYNCRONISATION_INT 10
Charles MacNeill 5:89031b2f5316 308 /*!<1st interrupt when starting ranging in back to back mode. Ignore data. */
Charles MacNeill 5:89031b2f5316 309 #define VL53LX_RANGESTATUS_RANGE_VALID_MERGED_PULSE 11
Charles MacNeill 5:89031b2f5316 310 /*!<All Range ok but object is result of multiple pulses merging together.
Charles MacNeill 5:89031b2f5316 311 * Used by RQL for merged pulse detection
Charles MacNeill 5:89031b2f5316 312 */
Charles MacNeill 5:89031b2f5316 313 #define VL53LX_RANGESTATUS_TARGET_PRESENT_LACK_OF_SIGNAL 12
Charles MacNeill 5:89031b2f5316 314 /*!<Used by RQL as different to phase fail. */
Charles MacNeill 5:89031b2f5316 315 #define VL53LX_RANGESTATUS_MIN_RANGE_FAIL 13
Charles MacNeill 5:89031b2f5316 316 /*!<Unexpected error in SPAD Array.*/
Charles MacNeill 5:89031b2f5316 317 #define VL53LX_RANGESTATUS_RANGE_INVALID 14
Charles MacNeill 5:89031b2f5316 318 /*!<lld returned valid range but negative value ! */
Charles MacNeill 5:89031b2f5316 319 #define VL53LX_RANGESTATUS_NONE 255
Charles MacNeill 5:89031b2f5316 320 /*!<No Update. */
Charles MacNeill 5:89031b2f5316 321
Charles MacNeill 5:89031b2f5316 322 /** @} VL53LX_define_RangeStatus_group */
Charles MacNeill 5:89031b2f5316 323
Charles MacNeill 5:89031b2f5316 324
Charles MacNeill 5:89031b2f5316 325 /** @brief Contains the Internal data of the Bare Driver
Charles MacNeill 5:89031b2f5316 326 */
Charles MacNeill 5:89031b2f5316 327
Charles MacNeill 5:89031b2f5316 328 typedef struct {
Charles MacNeill 5:89031b2f5316 329 VL53LX_LLDriverData_t LLData;
Charles MacNeill 5:89031b2f5316 330 /*!< Low Level Driver data structure */
Charles MacNeill 5:89031b2f5316 331
Charles MacNeill 5:89031b2f5316 332 VL53LX_LLDriverResults_t llresults;
Charles MacNeill 5:89031b2f5316 333 /*!< Low Level Driver data structure */
Charles MacNeill 5:89031b2f5316 334
Charles MacNeill 5:89031b2f5316 335 VL53LX_DeviceParameters_t CurrentParameters;
Charles MacNeill 5:89031b2f5316 336 /*!< Current Device Parameter */
Charles MacNeill 5:89031b2f5316 337
Charles MacNeill 5:89031b2f5316 338 } VL53LX_DevData_t;
Charles MacNeill 5:89031b2f5316 339
Charles MacNeill 5:89031b2f5316 340
Charles MacNeill 5:89031b2f5316 341 /* MACRO Definitions */
Charles MacNeill 5:89031b2f5316 342 /** @defgroup VL53LX_define_GeneralMacro_group General Macro Defines
Charles MacNeill 5:89031b2f5316 343 * General Macro Defines
Charles MacNeill 5:89031b2f5316 344 * @{
Charles MacNeill 5:89031b2f5316 345 */
Charles MacNeill 5:89031b2f5316 346
Charles MacNeill 5:89031b2f5316 347 /* Defines */
Charles MacNeill 5:89031b2f5316 348 #define VL53LX_SETPARAMETERFIELD(Dev, field, value) \
Charles MacNeill 5:89031b2f5316 349 (VL53LXDevDataSet(Dev, CurrentParameters.field, value))
Charles MacNeill 5:89031b2f5316 350
Charles MacNeill 5:89031b2f5316 351 #define VL53LX_GETPARAMETERFIELD(Dev, field, variable) \
Charles MacNeill 5:89031b2f5316 352 (variable = VL53LXDevDataGet(Dev, CurrentParameters).field)
Charles MacNeill 5:89031b2f5316 353
Charles MacNeill 5:89031b2f5316 354 #define VL53LX_SETARRAYPARAMETERFIELD(Dev, field, index, value) \
Charles MacNeill 5:89031b2f5316 355 (VL53LXDevDataSet(Dev, CurrentParameters.field[index], value))
Charles MacNeill 5:89031b2f5316 356
Charles MacNeill 5:89031b2f5316 357 #define VL53LX_GETARRAYPARAMETERFIELD(Dev, field, index, variable) \
Charles MacNeill 5:89031b2f5316 358 (variable = VL53LXDevDataGet(Dev, CurrentParameters).field[index])
Charles MacNeill 5:89031b2f5316 359
Charles MacNeill 5:89031b2f5316 360 #define VL53LX_SETDEVICESPECIFICPARAMETER(Dev, field, value) \
Charles MacNeill 5:89031b2f5316 361 (VL53LXDevDataSet(Dev, DeviceSpecificParameters.field, value))
Charles MacNeill 5:89031b2f5316 362
Charles MacNeill 5:89031b2f5316 363 #define VL53LX_GETDEVICESPECIFICPARAMETER(Dev, field) \
Charles MacNeill 5:89031b2f5316 364 (VL53LXDevDataGet(Dev, DeviceSpecificParameters).field)
Charles MacNeill 5:89031b2f5316 365
Charles MacNeill 5:89031b2f5316 366
Charles MacNeill 5:89031b2f5316 367 #define VL53LX_FIXPOINT1616TOFIXPOINT44(Value) \
Charles MacNeill 5:89031b2f5316 368 (uint16_t)((Value>>12)&0xFFFF)
Charles MacNeill 5:89031b2f5316 369 #define VL53LX_FIXPOINT44TOFIXPOINT1616(Value) \
Charles MacNeill 5:89031b2f5316 370 (FixPoint1616_t)((uint32_t)Value<<12)
Charles MacNeill 5:89031b2f5316 371
Charles MacNeill 5:89031b2f5316 372 #define VL53LX_FIXPOINT1616TOFIXPOINT72(Value) \
Charles MacNeill 5:89031b2f5316 373 (uint16_t)((Value>>14)&0xFFFF)
Charles MacNeill 5:89031b2f5316 374 #define VL53LX_FIXPOINT72TOFIXPOINT1616(Value) \
Charles MacNeill 5:89031b2f5316 375 (FixPoint1616_t)((uint32_t)Value<<14)
Charles MacNeill 5:89031b2f5316 376
Charles MacNeill 5:89031b2f5316 377 #define VL53LX_FIXPOINT1616TOFIXPOINT97(Value) \
Charles MacNeill 5:89031b2f5316 378 (uint16_t)((Value>>9)&0xFFFF)
Charles MacNeill 5:89031b2f5316 379 #define VL53LX_FIXPOINT97TOFIXPOINT1616(Value) \
Charles MacNeill 5:89031b2f5316 380 (FixPoint1616_t)((uint32_t)Value<<9)
Charles MacNeill 5:89031b2f5316 381
Charles MacNeill 5:89031b2f5316 382 #define VL53LX_FIXPOINT1616TOFIXPOINT88(Value) \
Charles MacNeill 5:89031b2f5316 383 (uint16_t)((Value>>8)&0xFFFF)
Charles MacNeill 5:89031b2f5316 384 #define VL53LX_FIXPOINT88TOFIXPOINT1616(Value) \
Charles MacNeill 5:89031b2f5316 385 (FixPoint1616_t)((uint32_t)Value<<8)
Charles MacNeill 5:89031b2f5316 386
Charles MacNeill 5:89031b2f5316 387 #define VL53LX_FIXPOINT1616TOFIXPOINT412(Value) \
Charles MacNeill 5:89031b2f5316 388 (uint16_t)((Value>>4)&0xFFFF)
Charles MacNeill 5:89031b2f5316 389 #define VL53LX_FIXPOINT412TOFIXPOINT1616(Value) \
Charles MacNeill 5:89031b2f5316 390 (FixPoint1616_t)((uint32_t)Value<<4)
Charles MacNeill 5:89031b2f5316 391
Charles MacNeill 5:89031b2f5316 392 #define VL53LX_FIXPOINT1616TOFIXPOINT313(Value) \
Charles MacNeill 5:89031b2f5316 393 (uint16_t)((Value>>3)&0xFFFF)
Charles MacNeill 5:89031b2f5316 394 #define VL53LX_FIXPOINT313TOFIXPOINT1616(Value) \
Charles MacNeill 5:89031b2f5316 395 (FixPoint1616_t)((uint32_t)Value<<3)
Charles MacNeill 5:89031b2f5316 396
Charles MacNeill 5:89031b2f5316 397 #define VL53LX_FIXPOINT1616TOFIXPOINT08(Value) \
Charles MacNeill 5:89031b2f5316 398 (uint8_t)((Value>>8)&0x00FF)
Charles MacNeill 5:89031b2f5316 399 #define VL53LX_FIXPOINT08TOFIXPOINT1616(Value) \
Charles MacNeill 5:89031b2f5316 400 (FixPoint1616_t)((uint32_t)Value<<8)
Charles MacNeill 5:89031b2f5316 401
Charles MacNeill 5:89031b2f5316 402 #define VL53LX_FIXPOINT1616TOFIXPOINT53(Value) \
Charles MacNeill 5:89031b2f5316 403 (uint8_t)((Value>>13)&0x00FF)
Charles MacNeill 5:89031b2f5316 404 #define VL53LX_FIXPOINT53TOFIXPOINT1616(Value) \
Charles MacNeill 5:89031b2f5316 405 (FixPoint1616_t)((uint32_t)Value<<13)
Charles MacNeill 5:89031b2f5316 406
Charles MacNeill 5:89031b2f5316 407 #define VL53LX_FIXPOINT1616TOFIXPOINT102(Value) \
Charles MacNeill 5:89031b2f5316 408 (uint16_t)((Value>>14)&0x0FFF)
Charles MacNeill 5:89031b2f5316 409 #define VL53LX_FIXPOINT102TOFIXPOINT1616(Value) \
Charles MacNeill 5:89031b2f5316 410 (FixPoint1616_t)((uint32_t)Value<<14)
Charles MacNeill 5:89031b2f5316 411
Charles MacNeill 5:89031b2f5316 412 #define VL53LX_FIXPOINT1616TOFIXPOINT142(Value) \
Charles MacNeill 5:89031b2f5316 413 (uint16_t)((Value>>14)&0xFFFF)
Charles MacNeill 5:89031b2f5316 414 #define VL53LX_FIXPOINT142TOFIXPOINT1616(Value) \
Charles MacNeill 5:89031b2f5316 415 (FixPoint1616_t)((uint32_t)Value<<14)
Charles MacNeill 5:89031b2f5316 416
Charles MacNeill 5:89031b2f5316 417 #define VL53LX_FIXPOINT1616TOFIXPOINT160(Value) \
Charles MacNeill 5:89031b2f5316 418 (uint16_t)((Value>>16)&0xFFFF)
Charles MacNeill 5:89031b2f5316 419 #define VL53LX_FIXPOINT160TOFIXPOINT1616(Value) \
Charles MacNeill 5:89031b2f5316 420 (FixPoint1616_t)((uint32_t)Value<<16)
Charles MacNeill 5:89031b2f5316 421
Charles MacNeill 5:89031b2f5316 422 #define VL53LX_MAKEUINT16(lsb, msb) (uint16_t)((((uint16_t)msb)<<8) + \
Charles MacNeill 5:89031b2f5316 423 (uint16_t)lsb)
Charles MacNeill 5:89031b2f5316 424
Charles MacNeill 5:89031b2f5316 425 #ifndef SUPPRESS_UNUSED_WARNING
Charles MacNeill 5:89031b2f5316 426 #define SUPPRESS_UNUSED_WARNING(x) ((void) (x))
Charles MacNeill 5:89031b2f5316 427 #endif
Charles MacNeill 5:89031b2f5316 428
Charles MacNeill 5:89031b2f5316 429 /** @} VL53LX_define_GeneralMacro_group */
Charles MacNeill 5:89031b2f5316 430
Charles MacNeill 5:89031b2f5316 431 /** @} VL53LX_globaldefine_group */
Charles MacNeill 5:89031b2f5316 432
Charles MacNeill 5:89031b2f5316 433
Charles MacNeill 5:89031b2f5316 434
Charles MacNeill 5:89031b2f5316 435 #ifdef __cplusplus
Charles MacNeill 5:89031b2f5316 436 }
Charles MacNeill 5:89031b2f5316 437 #endif
Charles MacNeill 5:89031b2f5316 438
Charles MacNeill 5:89031b2f5316 439
Charles MacNeill 5:89031b2f5316 440 #endif /* _VL53LX_DEF_H_ */