MRMS
vl53l0x_def.h
Go to the documentation of this file.
1 /*******************************************************************************
2 Copyright © 2016, STMicroelectronics International N.V.
3 All rights reserved.
4 
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions are met:
7  * Redistributions of source code must retain the above copyright
8  notice, this list of conditions and the following disclaimer.
9  * Redistributions in binary form must reproduce the above copyright
10  notice, this list of conditions and the following disclaimer in the
11  documentation and/or other materials provided with the distribution.
12  * Neither the name of STMicroelectronics nor the
13  names of its contributors may be used to endorse or promote products
14  derived from this software without specific prior written permission.
15 
16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
19 NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
20 IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY
21 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *******************************************************************************/
28 
37 #ifndef _VL53L0X_DEF_H_
38 #define _VL53L0X_DEF_H_
39 
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
52 #define VL53L0X10_SPECIFICATION_VER_MAJOR 1
54 #define VL53L0X10_SPECIFICATION_VER_MINOR 2
56 #define VL53L0X10_SPECIFICATION_VER_SUB 7
58 #define VL53L0X10_SPECIFICATION_VER_REVISION 1440
59 
61 #define VL53L0X10_IMPLEMENTATION_VER_MAJOR 1
63 #define VL53L0X10_IMPLEMENTATION_VER_MINOR 0
65 #define VL53L0X10_IMPLEMENTATION_VER_SUB 9
67 #define VL53L0X10_IMPLEMENTATION_VER_REVISION 3673
68 
70 #define VL53L0X_SPECIFICATION_VER_MAJOR 1
72 #define VL53L0X_SPECIFICATION_VER_MINOR 2
74 #define VL53L0X_SPECIFICATION_VER_SUB 7
76 #define VL53L0X_SPECIFICATION_VER_REVISION 1440
77 
79 #define VL53L0X_IMPLEMENTATION_VER_MAJOR 1
81 #define VL53L0X_IMPLEMENTATION_VER_MINOR 0
83 #define VL53L0X_IMPLEMENTATION_VER_SUB 1
85 #define VL53L0X_IMPLEMENTATION_VER_REVISION 4606
86 #define VL53L0X_DEFAULT_MAX_LOOP 200
87 #define VL53L0X_MAX_STRING_LENGTH 32
88 
89 
90 #include "vl53l0x_device.h"
91 #include "vl53l0x_types.h"
92 
93 
94 /****************************************
95  * PRIVATE define do not edit
96  ****************************************/
97 
100 typedef struct {
101  uint32_t revision;
102  uint8_t major;
103  uint8_t minor;
104  uint8_t build;
106 
107 
110 typedef struct {
111  char Name[VL53L0X_MAX_STRING_LENGTH];
113  char Type[VL53L0X_MAX_STRING_LENGTH];
115  char ProductId[VL53L0X_MAX_STRING_LENGTH];
117  uint8_t ProductType;
124 
125 
131 typedef int8_t VL53L0X_Error;
132 
133 #define VL53L0X_ERROR_NONE ((VL53L0X_Error) 0)
134 #define VL53L0X_ERROR_CALIBRATION_WARNING ((VL53L0X_Error) -1)
139 #define VL53L0X_ERROR_MIN_CLIPPED ((VL53L0X_Error) -2)
142 #define VL53L0X_ERROR_UNDEFINED ((VL53L0X_Error) -3)
144 #define VL53L0X_ERROR_INVALID_PARAMS ((VL53L0X_Error) -4)
146 #define VL53L0X_ERROR_NOT_SUPPORTED ((VL53L0X_Error) -5)
148 #define VL53L0X_ERROR_RANGE_ERROR ((VL53L0X_Error) -6)
150 #define VL53L0X_ERROR_TIME_OUT ((VL53L0X_Error) -7)
152 #define VL53L0X_ERROR_MODE_NOT_SUPPORTED ((VL53L0X_Error) -8)
154 #define VL53L0X_ERROR_BUFFER_TOO_SMALL ((VL53L0X_Error) -9)
156 #define VL53L0X_ERROR_GPIO_NOT_EXISTING ((VL53L0X_Error) -10)
158 #define VL53L0X_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED ((VL53L0X_Error) -11)
160 #define VL53L0X_ERROR_INTERRUPT_NOT_CLEARED ((VL53L0X_Error) -12)
162 #define VL53L0X_ERROR_CONTROL_INTERFACE ((VL53L0X_Error) -20)
164 #define VL53L0X_ERROR_INVALID_COMMAND ((VL53L0X_Error) -30)
167 #define VL53L0X_ERROR_DIVISION_BY_ZERO ((VL53L0X_Error) -40)
169 #define VL53L0X_ERROR_REF_SPAD_INIT ((VL53L0X_Error) -50)
171 #define VL53L0X_ERROR_NOT_IMPLEMENTED ((VL53L0X_Error) -99)
181 typedef uint8_t VL53L0X_DeviceModes;
182 
183 #define VL53L0X_DEVICEMODE_SINGLE_RANGING ((VL53L0X_DeviceModes) 0)
184 #define VL53L0X_DEVICEMODE_CONTINUOUS_RANGING ((VL53L0X_DeviceModes) 1)
185 #define VL53L0X_DEVICEMODE_SINGLE_HISTOGRAM ((VL53L0X_DeviceModes) 2)
186 #define VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING ((VL53L0X_DeviceModes) 3)
187 #define VL53L0X_DEVICEMODE_SINGLE_ALS ((VL53L0X_DeviceModes) 10)
188 #define VL53L0X_DEVICEMODE_GPIO_DRIVE ((VL53L0X_DeviceModes) 20)
189 #define VL53L0X_DEVICEMODE_GPIO_OSC ((VL53L0X_DeviceModes) 21)
190  /* ... Modes to be added depending on device */
199 typedef uint8_t VL53L0X_HistogramModes;
200 
201 #define VL53L0X_HISTOGRAMMODE_DISABLED ((VL53L0X_HistogramModes) 0)
203 #define VL53L0X_HISTOGRAMMODE_REFERENCE_ONLY ((VL53L0X_HistogramModes) 1)
205 #define VL53L0X_HISTOGRAMMODE_RETURN_ONLY ((VL53L0X_HistogramModes) 2)
207 #define VL53L0X_HISTOGRAMMODE_BOTH ((VL53L0X_HistogramModes) 3)
209  /* ... Modes to be added depending on device */
218 typedef uint8_t VL53L0X_PowerModes;
219 
220 #define VL53L0X_POWERMODE_STANDBY_LEVEL1 ((VL53L0X_PowerModes) 0)
222 #define VL53L0X_POWERMODE_STANDBY_LEVEL2 ((VL53L0X_PowerModes) 1)
224 #define VL53L0X_POWERMODE_IDLE_LEVEL1 ((VL53L0X_PowerModes) 2)
226 #define VL53L0X_POWERMODE_IDLE_LEVEL2 ((VL53L0X_PowerModes) 3)
234 typedef struct {
235  VL53L0X_DeviceModes DeviceMode;
237  VL53L0X_HistogramModes HistogramMode;
255  uint8_t LimitChecksEnable[VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS];
257  uint8_t LimitChecksStatus[VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS];
260  FixPoint1616_t LimitChecksValue[VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS];
266 
267 
273 typedef uint8_t VL53L0X_State;
274 
275 #define VL53L0X_STATE_POWERDOWN ((VL53L0X_State) 0)
277 #define VL53L0X_STATE_WAIT_STATICINIT ((VL53L0X_State) 1)
279 #define VL53L0X_STATE_STANDBY ((VL53L0X_State) 2)
281 #define VL53L0X_STATE_IDLE ((VL53L0X_State) 3)
283 #define VL53L0X_STATE_RUNNING ((VL53L0X_State) 4)
285 #define VL53L0X_STATE_UNKNOWN ((VL53L0X_State) 98)
287 #define VL53L0X_STATE_ERROR ((VL53L0X_State) 99)
295 typedef struct {
298  int32_t RetSignalAt0mm;
301 
306 typedef struct {
307  uint32_t TimeStamp;
313  uint16_t RangeMilliMeter;
320  FixPoint1616_t SignalRateRtnMegaCps;
324  FixPoint1616_t AmbientRateRtnMegaCps;
333  uint8_t ZoneId;
339  uint8_t RangeStatus;
344 
345 
346 #define VL53L0X_HISTOGRAM_BUFFER_SIZE 24
347 
352 typedef struct {
353  /* Histogram Measurement data */
354  uint32_t HistogramData[VL53L0X_HISTOGRAM_BUFFER_SIZE];
356  uint8_t HistogramType;
358  uint8_t FirstBin;
359  uint8_t BufferSize;
360  uint8_t NumberOfBins;
363  VL53L0X_DeviceError ErrorStatus;
367 
368 #define VL53L0X_REF_SPAD_BUFFER_SIZE 6
369 
374 typedef struct {
375  uint8_t RefSpadEnables[VL53L0X_REF_SPAD_BUFFER_SIZE];
377  uint8_t RefGoodSpadMap[VL53L0X_REF_SPAD_BUFFER_SIZE];
380 
381 typedef struct {
382  FixPoint1616_t OscFrequencyMHz; /* Frequency used */
383 
384  uint16_t LastEncodedTimeout;
385  /* last encoded Time out used for timing budget*/
386 
387  VL53L0X_GpioFunctionality Pin0GpioFunctionality;
388  /* store the functionality of the GPIO: pin0 */
389 
409  uint8_t ReadDataFromDeviceDone; /* Indicate if read from device has
410  been done (==1) or not (==0) */
411  uint8_t ModuleId; /* Module ID */
412  uint8_t Revision; /* test Revision */
413  char ProductId[VL53L0X_MAX_STRING_LENGTH];
414  /* Product Identifier String */
415  uint8_t ReferenceSpadCount; /* used for ref spad management */
416  uint8_t ReferenceSpadType; /* used for ref spad management */
417  uint8_t RefSpadsInitialised; /* reports if ref spads are initialised. */
418  uint32_t PartUIDUpper;
419  uint32_t PartUIDLower;
420  FixPoint1616_t SignalRateMeasFixed400mm;
424 
433 typedef struct {
450  uint8_t SequenceConfig;
454  VL53L0X_State PalState;
456  VL53L0X_PowerModes PowerMode;
466  uint8_t StopVariable;
468  uint16_t targetRefRate;
470  FixPoint1616_t SigmaEstimate;
473  FixPoint1616_t SignalEstimate;
475  FixPoint1616_t LastSignalRefMcps;
489 
490 
496 typedef uint8_t VL53L0X_InterruptPolarity;
497 
498 #define VL53L0X_INTERRUPTPOLARITY_LOW ((VL53L0X_InterruptPolarity) 0)
500 #define VL53L0X_INTERRUPTPOLARITY_HIGH ((VL53L0X_InterruptPolarity) 1)
510 typedef uint8_t VL53L0X_VcselPeriod;
511 
512 #define VL53L0X_VCSEL_PERIOD_PRE_RANGE ((VL53L0X_VcselPeriod) 0)
514 #define VL53L0X_VCSEL_PERIOD_FINAL_RANGE ((VL53L0X_VcselPeriod) 1)
525 typedef struct {
526  uint8_t TccOn;
527  uint8_t MsrcOn;
528  uint8_t DssOn;
529  uint8_t PreRangeOn;
530  uint8_t FinalRangeOn;
532 
540 typedef uint8_t VL53L0X_SequenceStepId;
541 
542 #define VL53L0X_SEQUENCESTEP_TCC ((VL53L0X_VcselPeriod) 0)
544 #define VL53L0X_SEQUENCESTEP_DSS ((VL53L0X_VcselPeriod) 1)
546 #define VL53L0X_SEQUENCESTEP_MSRC ((VL53L0X_VcselPeriod) 2)
548 #define VL53L0X_SEQUENCESTEP_PRE_RANGE ((VL53L0X_VcselPeriod) 3)
550 #define VL53L0X_SEQUENCESTEP_FINAL_RANGE ((VL53L0X_VcselPeriod) 4)
553 #define VL53L0X_SEQUENCESTEP_NUMBER_OF_CHECKS 5
559 /* MACRO Definitions */
565 /* Defines */
566 #define VL53L0X_SETPARAMETERFIELD(Dev, field, value) \
567  PALDevDataSet(Dev, CurrentParameters.field, value)
568 
569 #define VL53L0X_GETPARAMETERFIELD(Dev, field, variable) \
570  variable = PALDevDataGet(Dev, CurrentParameters).field
571 
572 
573 #define VL53L0X_SETARRAYPARAMETERFIELD(Dev, field, index, value) \
574  PALDevDataSet(Dev, CurrentParameters.field[index], value)
575 
576 #define VL53L0X_GETARRAYPARAMETERFIELD(Dev, field, index, variable) \
577  variable = PALDevDataGet(Dev, CurrentParameters).field[index]
578 
579 
580 #define VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, field, value) \
581  PALDevDataSet(Dev, DeviceSpecificParameters.field, value)
582 
583 #define VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, field) \
584  PALDevDataGet(Dev, DeviceSpecificParameters).field
585 
586 
587 #define VL53L0X_FIXPOINT1616TOFIXPOINT97(Value) \
588  (uint16_t)((Value>>9)&0xFFFF)
589 #define VL53L0X_FIXPOINT97TOFIXPOINT1616(Value) \
590  (FixPoint1616_t)(Value<<9)
591 
592 #define VL53L0X_FIXPOINT1616TOFIXPOINT88(Value) \
593  (uint16_t)((Value>>8)&0xFFFF)
594 #define VL53L0X_FIXPOINT88TOFIXPOINT1616(Value) \
595  (FixPoint1616_t)(Value<<8)
596 
597 #define VL53L0X_FIXPOINT1616TOFIXPOINT412(Value) \
598  (uint16_t)((Value>>4)&0xFFFF)
599 #define VL53L0X_FIXPOINT412TOFIXPOINT1616(Value) \
600  (FixPoint1616_t)(Value<<4)
601 
602 #define VL53L0X_FIXPOINT1616TOFIXPOINT313(Value) \
603  (uint16_t)((Value>>3)&0xFFFF)
604 #define VL53L0X_FIXPOINT313TOFIXPOINT1616(Value) \
605  (FixPoint1616_t)(Value<<3)
606 
607 #define VL53L0X_FIXPOINT1616TOFIXPOINT08(Value) \
608  (uint8_t)((Value>>8)&0x00FF)
609 #define VL53L0X_FIXPOINT08TOFIXPOINT1616(Value) \
610  (FixPoint1616_t)(Value<<8)
611 
612 #define VL53L0X_FIXPOINT1616TOFIXPOINT53(Value) \
613  (uint8_t)((Value>>13)&0x00FF)
614 #define VL53L0X_FIXPOINT53TOFIXPOINT1616(Value) \
615  (FixPoint1616_t)(Value<<13)
616 
617 #define VL53L0X_FIXPOINT1616TOFIXPOINT102(Value) \
618  (uint16_t)((Value>>14)&0x0FFF)
619 #define VL53L0X_FIXPOINT102TOFIXPOINT1616(Value) \
620  (FixPoint1616_t)(Value<<12)
621 
622 #define VL53L0X_MAKEUINT16(lsb, msb) (uint16_t)((((uint16_t)msb)<<8) + \
623  (uint16_t)lsb)
624 
635 #ifdef __cplusplus
636 }
637 #endif
638 
639 
640 #endif /* _VL53L0X_DEF_H_ */
Structure containing the Dmax computation parameters and data.
Definition: vl53l0x_def.h:295
int32_t AmbTuningWindowFactor_K
Definition: vl53l0x_def.h:296
int32_t RetSignalAt0mm
Definition: vl53l0x_def.h:298
VL53L0X PAL device ST private data structure End user should never access any of these field directl...
Definition: vl53l0x_def.h:433
int32_t Part2PartOffsetAdjustmentNVMMicroMeter
Definition: vl53l0x_def.h:438
VL53L0X_DeviceSpecificParameters_t DeviceSpecificParameters
Definition: vl53l0x_def.h:446
uint16_t DmaxCalRangeMilliMeter
Definition: vl53l0x_def.h:483
VL53L0X_DMaxData_t DMaxData
Definition: vl53l0x_def.h:434
VL53L0X_State PalState
Definition: vl53l0x_def.h:454
FixPoint1616_t LastSignalRefMcps
Definition: vl53l0x_def.h:475
FixPoint1616_t DmaxCalSignalRateRtnMegaCps
Definition: vl53l0x_def.h:485
VL53L0X_SpadData_t SpadData
Definition: vl53l0x_def.h:448
FixPoint1616_t SigmaEstimate
Definition: vl53l0x_def.h:470
VL53L0X_DeviceParameters_t CurrentParameters
Definition: vl53l0x_def.h:440
uint16_t SigmaEstRefArray
Definition: vl53l0x_def.h:458
VL53L0X_HistogramMeasurementData_t LastHistogramMeasure
Definition: vl53l0x_def.h:444
uint8_t StopVariable
Definition: vl53l0x_def.h:466
int32_t Part2PartOffsetNVMMicroMeter
Definition: vl53l0x_def.h:436
VL53L0X_RangingMeasurementData_t LastRangeMeasure
Definition: vl53l0x_def.h:442
uint16_t SigmaEstEffPulseWidth
Definition: vl53l0x_def.h:460
uint8_t SequenceConfig
Definition: vl53l0x_def.h:450
uint16_t LinearityCorrectiveGain
Definition: vl53l0x_def.h:481
uint16_t SigmaEstEffAmbWidth
Definition: vl53l0x_def.h:463
VL53L0X_PowerModes PowerMode
Definition: vl53l0x_def.h:456
uint8_t RangeFractionalEnable
Definition: vl53l0x_def.h:452
uint8_t * pTuningSettingsPointer
Definition: vl53l0x_def.h:477
uint16_t targetRefRate
Definition: vl53l0x_def.h:468
FixPoint1616_t SignalEstimate
Definition: vl53l0x_def.h:473
uint8_t UseInternalTuningSettings
Definition: vl53l0x_def.h:479
Defines the parameters of the Get Device Info Functions.
Definition: vl53l0x_def.h:110
uint8_t ProductRevisionMinor
Definition: vl53l0x_def.h:121
uint8_t ProductRevisionMajor
Definition: vl53l0x_def.h:119
uint8_t ProductType
Definition: vl53l0x_def.h:117
Defines all parameters for the device.
Definition: vl53l0x_def.h:234
VL53L0X_DeviceModes DeviceMode
Definition: vl53l0x_def.h:235
int32_t RangeOffsetMicroMeters
Definition: vl53l0x_def.h:252
uint8_t XTalkCompensationEnable
Definition: vl53l0x_def.h:245
uint32_t InterMeasurementPeriodMilliSeconds
Definition: vl53l0x_def.h:242
uint32_t MeasurementTimingBudgetMicroSeconds
Definition: vl53l0x_def.h:240
FixPoint1616_t XTalkCompensationRateMegaCps
Definition: vl53l0x_def.h:249
VL53L0X_HistogramModes HistogramMode
Definition: vl53l0x_def.h:237
uint8_t WrapAroundCheckEnable
Definition: vl53l0x_def.h:263
uint16_t XTalkCompensationRangeMilliMeter
Definition: vl53l0x_def.h:247
Definition: vl53l0x_def.h:381
uint16_t SigmaEstEffPulseWidth
Definition: vl53l0x_def.h:401
uint32_t FinalRangeTimeoutMicroSecs
Definition: vl53l0x_def.h:390
uint32_t PartUIDLower
Definition: vl53l0x_def.h:419
uint16_t SigmaEstRefArray
Definition: vl53l0x_def.h:399
uint8_t FinalRangeVcselPulsePeriod
Definition: vl53l0x_def.h:392
FixPoint1616_t SignalRateMeasFixed400mm
Definition: vl53l0x_def.h:420
uint16_t SigmaEstEffAmbWidth
Definition: vl53l0x_def.h:404
uint32_t PartUIDUpper
Definition: vl53l0x_def.h:418
uint8_t PreRangeVcselPulsePeriod
Definition: vl53l0x_def.h:396
uint32_t PreRangeTimeoutMicroSecs
Definition: vl53l0x_def.h:394
Definition: vl53l0x_def.h:352
VL53L0X_DeviceError ErrorStatus
Definition: vl53l0x_def.h:363
uint8_t FirstBin
Definition: vl53l0x_def.h:358
uint8_t BufferSize
Definition: vl53l0x_def.h:359
uint8_t NumberOfBins
Definition: vl53l0x_def.h:360
uint8_t HistogramType
Definition: vl53l0x_def.h:356
Definition: vl53l0x_def.h:306
uint8_t RangeStatus
Definition: vl53l0x_def.h:339
uint32_t TimeStamp
Definition: vl53l0x_def.h:307
FixPoint1616_t SignalRateRtnMegaCps
Definition: vl53l0x_def.h:320
uint8_t ZoneId
Definition: vl53l0x_def.h:333
uint32_t MeasurementTimeUsec
Definition: vl53l0x_def.h:308
uint16_t EffectiveSpadRtnCount
Definition: vl53l0x_def.h:329
uint16_t RangeMilliMeter
Definition: vl53l0x_def.h:313
uint8_t RangeFractionalPart
Definition: vl53l0x_def.h:336
uint16_t RangeDMaxMilliMeter
Definition: vl53l0x_def.h:315
FixPoint1616_t AmbientRateRtnMegaCps
Definition: vl53l0x_def.h:324
Definition: vl53l0x_def.h:525
uint8_t DssOn
Definition: vl53l0x_def.h:528
uint8_t FinalRangeOn
Definition: vl53l0x_def.h:530
uint8_t PreRangeOn
Definition: vl53l0x_def.h:529
uint8_t MsrcOn
Definition: vl53l0x_def.h:527
uint8_t TccOn
Definition: vl53l0x_def.h:526
Spad Configuration Data.
Definition: vl53l0x_def.h:374
Defines the parameters of the Get Version Functions.
Definition: vl53l0x_def.h:100
uint8_t minor
Definition: vl53l0x_def.h:103
uint8_t build
Definition: vl53l0x_def.h:104
uint8_t major
Definition: vl53l0x_def.h:102
uint32_t revision
Definition: vl53l0x_def.h:101