Statistics
| Branch: | Tag: | Revision:

amiro-lld / drivers / VL53L1X / v1 / api / core / vl53l1_def.h @ 4dba9195

History | View | Annotate | Download (22.07 KB)

1
/*
2
* Copyright (c) 2017, STMicroelectronics - All Rights Reserved
3
*
4
* This file is part of VL53L1 Core and is dual licensed,
5
* either 'STMicroelectronics
6
* Proprietary license'
7
* or 'BSD 3-clause "New" or "Revised" License' , at your option.
8
*
9
********************************************************************************
10
*
11
* 'STMicroelectronics Proprietary license'
12
*
13
********************************************************************************
14
*
15
* License terms: STMicroelectronics Proprietary in accordance with licensing
16
* terms at www.st.com/sla0081
17
*
18
* STMicroelectronics confidential
19
* Reproduction and Communication of this document is strictly prohibited unless
20
* specifically authorized in writing by STMicroelectronics.
21
*
22
*
23
********************************************************************************
24
*
25
* Alternatively, VL53L1 Core may be distributed under the terms of
26
* 'BSD 3-clause "New" or "Revised" License', in which case the following
27
* provisions apply instead of the ones mentioned above :
28
*
29
********************************************************************************
30
*
31
* License terms: BSD 3-clause "New" or "Revised" License.
32
*
33
* Redistribution and use in source and binary forms, with or without
34
* modification, are permitted provided that the following conditions are met:
35
*
36
* 1. Redistributions of source code must retain the above copyright notice, this
37
* list of conditions and the following disclaimer.
38
*
39
* 2. Redistributions in binary form must reproduce the above copyright notice,
40
* this list of conditions and the following disclaimer in the documentation
41
* and/or other materials provided with the distribution.
42
*
43
* 3. Neither the name of the copyright holder nor the names of its contributors
44
* may be used to endorse or promote products derived from this software
45
* without specific prior written permission.
46
*
47
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
48
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
49
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
50
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
51
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
52
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
53
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
54
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
55
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
56
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
57
*
58
*
59
********************************************************************************
60
*
61
*/
62

    
63
/**
64
 * @file vl53l1_def.h
65
 *
66
 * @brief Type definitions for VL53L1 API.
67
 *
68
 */
69

    
70

    
71
#ifndef _VL53L1_DEF_H_
72
#define _VL53L1_DEF_H_
73

    
74
#include "vl53l1_ll_def.h"
75

    
76
#ifdef __cplusplus
77
extern "C" {
78
#endif
79

    
80
/** @defgroup VL53L1_globaldefine_group VL53L1 Defines
81
 *  @brief    VL53L1 Defines
82
 *  @{
83
 */
84

    
85

    
86
/** VL53L1 IMPLEMENTATION major version */
87
#define VL53L1_IMPLEMENTATION_VER_MAJOR       2
88
/** VL53L1 IMPLEMENTATION minor version */
89
#define VL53L1_IMPLEMENTATION_VER_MINOR       3
90
/** VL53L1 IMPLEMENTATION sub version */
91
#define VL53L1_IMPLEMENTATION_VER_SUB         3
92
/** VL53L1 IMPLEMENTATION sub version */
93
#define VL53L1_IMPLEMENTATION_VER_REVISION  1885
94

    
95
/****************************************
96
 * PRIVATE define do not edit
97
 ****************************************/
98

    
99
/** @brief Defines the parameters of the Get Version Functions
100
 */
101
typedef struct {
102
        uint32_t     revision; /*!< revision number */
103
        uint8_t      major;    /*!< major number */
104
        uint8_t      minor;    /*!< minor number */
105
        uint8_t      build;    /*!< build number */
106
} VL53L1_Version_t;
107

    
108

    
109
#define VL53L1_DEVINFO_STRLEN 32
110

    
111
/** @brief Defines the parameters of the Get Device Info Functions
112
 */
113
typedef struct {
114
        char Name[VL53L1_DEVINFO_STRLEN];
115
                /*!< Name of the Device e.g. Left_Distance */
116
        char Type[VL53L1_DEVINFO_STRLEN];
117
                /*!< Type of the Device e.g VL53L1 */
118
        char ProductId[VL53L1_DEVINFO_STRLEN];
119
                /*!< Product Identifier String
120
                 * @warning Not yet implemented
121
                 */
122
        uint8_t ProductType;
123
                /*!< Product Type, VL53L1 = 1, VL53L1 = 2*/
124
        uint8_t ProductRevisionMajor;
125
                /*!< Product revision major */
126
        uint8_t ProductRevisionMinor;
127
                /*!< Product revision minor */
128
} VL53L1_DeviceInfo_t;
129

    
130

    
131

    
132
/** @defgroup VL53L1_define_PresetModes_group Defines Preset modes
133
 *  Defines all possible preset modes for the device
134
 *  @{
135
 */
136
typedef uint8_t VL53L1_PresetModes;
137

    
138
#define VL53L1_PRESETMODE_AUTONOMOUS                ((VL53L1_PresetModes)  3)
139
#define VL53L1_PRESETMODE_LITE_RANGING              ((VL53L1_PresetModes)  4)
140
#define VL53L1_PRESETMODE_LOWPOWER_AUTONOMOUS       ((VL53L1_PresetModes)  8)
141

    
142
        /* ... Modes to be added depending on device */
143
/** @} VL53L1_define_PresetModes_group */
144

    
145

    
146
/** @defgroup VL53L1_define_DistanceModes_group Defines Distance modes
147
 *  Defines all possible Distance modes for the device
148
 *  @{
149
 */
150
typedef uint8_t VL53L1_DistanceModes;
151

    
152
#define VL53L1_DISTANCEMODE_SHORT             ((VL53L1_DistanceModes)  1)
153
#define VL53L1_DISTANCEMODE_MEDIUM            ((VL53L1_DistanceModes)  2)
154
#define VL53L1_DISTANCEMODE_LONG              ((VL53L1_DistanceModes)  3)
155
/** @} VL53L1_define_DistanceModes_group */
156

    
157

    
158
/** @defgroup VL53L1_define_XtalkCal_group Defines Xtalk Calibration modes
159
*  Defines all possible Offset Calibration modes for the device
160
*  @{
161
*/
162
typedef uint8_t VL53L1_XtalkCalibrationModes;
163

    
164
#define VL53L1_XTALKCALIBRATIONMODE_NO_TARGET \
165
        ((VL53L1_OffsetCalibrationModes) 0)
166
/*!< To perform Xtalk calibration with no target below 80 cm */
167
#define VL53L1_XTALKCALIBRATIONMODE_SINGLE_TARGET \
168
        ((VL53L1_OffsetCalibrationModes)  1)
169
/*!< To perform Xtalk calibration with one target */
170
#define VL53L1_XTALKCALIBRATIONMODE_FULL_ROI \
171
        ((VL53L1_OffsetCalibrationModes)  2)
172
/*!< To perform Xtalk calibration based on histogram with full ROI */
173

    
174
/** @} VL53L1_define_XtalkCal_group */
175

    
176
/** @defgroup VL53L1_define_OffsetCal_group Defines Offset Calibration modes
177
*  Defines all possible Offset Calibration modes for the device
178
*  @{
179
*/
180
typedef uint8_t VL53L1_OffsetCalibrationModes;
181

    
182
#define VL53L1_OFFSETCALIBRATIONMODE_STANDARD \
183
        ((VL53L1_OffsetCalibrationModes)  1)
184
#define VL53L1_OFFSETCALIBRATIONMODE_PRERANGE_ONLY  \
185
        ((VL53L1_OffsetCalibrationModes)  2)
186

    
187
/** @} VL53L1_define_OffsetCal_group */
188

    
189

    
190

    
191

    
192

    
193
/** @defgroup VL53L1_CheckEnable_group Check Enable list
194
 *  @brief Check Enable code
195
 *
196
 *  Define used to specify the LimitCheckId.
197
 *  Use @a VL53L1_GetLimitCheckInfo() to get the string.
198
 *  @{
199
 */
200

    
201
#define VL53L1_CHECKENABLE_SIGMA_FINAL_RANGE           0
202
#define VL53L1_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE     1
203

    
204
#define VL53L1_CHECKENABLE_NUMBER_OF_CHECKS            2
205

    
206
/** @}  end of VL53L1_CheckEnable_group */
207

    
208

    
209
/** @defgroup VL53L1_ThresholdMode_gropup Detection Functionality
210
 *  @brief Defines the different functionalities for the detection feature
211
 *  @{
212
 */
213
typedef uint8_t VL53L1_ThresholdMode;
214

    
215
#define VL53L1_THRESHOLD_CROSSED_LOW   \
216
        ((VL53L1_ThresholdMode)  0)
217
        /*!< Trigger interrupt if value < thresh_low */
218
#define VL53L1_THRESHOLD_CROSSED_HIGH   \
219
        ((VL53L1_ThresholdMode)  1)
220
        /*!< Trigger interrupt if value > thresh_high */
221
#define VL53L1_THRESHOLD_OUT_OF_WINDOW    \
222
        ((VL53L1_ThresholdMode)  2)
223
        /*!< Trigger interrupt if value < thresh_low OR value > thresh_high */
224
#define VL53L1_THRESHOLD_IN_WINDOW        \
225
        ((VL53L1_ThresholdMode)  3)
226
        /*!< Trigger interrupt if value > thresh_low AND value < thresh_high */
227

    
228
/** @} end of VL53L1_ThresholdMode_gropup */
229

    
230
/** @brief Defines parameters for Distance detection Thresholds configuration
231
 */
232
typedef struct {
233
        VL53L1_ThresholdMode CrossMode;
234
        uint16_t High; /*!< Distance threshold high limit in mm */
235
        uint16_t Low;  /*!< Distance threshold low limit  in mm */
236
} VL53L1_DistanceThreshold_t;
237

    
238
/** @brief Defines parameters for Signal rate detection Thresholds configuration
239
 */
240
typedef struct {
241
        VL53L1_ThresholdMode CrossMode;
242
        FixPoint1616_t High; /*!< Signal rate threshold high limit */
243
        FixPoint1616_t Low;  /*!< Signal rate threshold low limit */
244
} VL53L1_RateThreshold_t;
245

    
246
/** @defgroup VL53L1_DetectionMode_group Gpio Functionality
247
 *  @brief Defines conditions leading to device's IT on GPIO
248
 *  @{
249
 */
250
typedef uint8_t VL53L1_DetectionMode;
251

    
252
#define VL53L1_DETECTION_NORMAL_RUN   \
253
        ((VL53L1_DetectionMode)  0)
254
        /*!< Trigger interrupt on new measurement regardless of threshold
255
         * just like after a VL53L1_SetPresetMode() call
256
         */
257
#define VL53L1_DETECTION_DISTANCE_ONLY   \
258
        ((VL53L1_DetectionMode)  1)
259
        /*!< Trigger interrupt if "threshold event" occurs on distance */
260
#define VL53L1_DETECTION_RATE_ONLY   \
261
        ((VL53L1_DetectionMode)  2)
262
        /*!< Trigger interrupt if "threshold event" occurs on signal rate */
263
#define VL53L1_DETECTION_DISTANCE_AND_RATE   \
264
        ((VL53L1_DetectionMode)  3)
265
        /*!< Trigger interrupt if "threshold event" occurs on distance AND rate
266
         */
267
#define VL53L1_DETECTION_DISTANCE_OR_RATE   \
268
        ((VL53L1_DetectionMode)  4)
269
        /*!< Trigger interrupt if "threshold event" occurs on distance OR rate
270
        */
271

    
272
/** @} end of VL53L1_DetectionMode_group */
273

    
274
/** @brief Defines parameters for User/object Detection configuration
275
 */
276
typedef struct {
277
        VL53L1_DetectionMode DetectionMode;        /*!< See #VL53L1_DetectionMode*/
278
        uint8_t IntrNoTarget; /*!< 1 to trigger IT in case of no target found */
279
        VL53L1_DistanceThreshold_t Distance; /*!< limits in mm */
280
        VL53L1_RateThreshold_t Rate;/*!< limits in FixPoint1616_t */
281
} VL53L1_DetectionConfig_t;
282

    
283

    
284
/** @brief Defines all parameters for the device
285
 */
286
typedef struct {
287
        VL53L1_PresetModes PresetMode;
288
        /*!< Defines the operating mode to be used for the next measure */
289
        VL53L1_DistanceModes DistanceMode;
290
        /*!< Defines the operating mode to be used for the next measure */
291
        VL53L1_DistanceModes InternalDistanceMode;
292
        /*!< Defines the internal operating mode to be used for the next
293
         * measure
294
         */
295
        VL53L1_DistanceModes NewDistanceMode;
296
        /*!< Defines the new operating mode to be programmed for the next
297
         * measure
298
         */
299
        uint32_t MeasurementTimingBudgetMicroSeconds;
300
        /*!< Defines the allowed total time for a single measurement */
301
        uint8_t LimitChecksEnable[VL53L1_CHECKENABLE_NUMBER_OF_CHECKS];
302
        /*!< This Array store all the Limit Check enable for this device. */
303
        uint8_t LimitChecksStatus[VL53L1_CHECKENABLE_NUMBER_OF_CHECKS];
304
        /*!< This Array stores all the Status of the check linked to last
305
        * measurement.
306
        */
307
        FixPoint1616_t LimitChecksValue[VL53L1_CHECKENABLE_NUMBER_OF_CHECKS];
308
        /*!< This Array stores all the Limit Check value for this device */
309
        FixPoint1616_t LimitChecksCurrent[VL53L1_CHECKENABLE_NUMBER_OF_CHECKS];
310
        /*!< This Array stores all the Limit Check current value from latest
311
         * ranging
312
         */
313
} VL53L1_DeviceParameters_t;
314

    
315

    
316
/** @defgroup VL53L1_define_State_group Defines the current status of the device
317
 *  Defines the current status of the device
318
 *  @{
319
 */
320

    
321
typedef uint8_t VL53L1_State;
322

    
323
#define VL53L1_STATE_POWERDOWN       ((VL53L1_State)  0)
324
        /*!< Device is in HW reset  */
325
#define VL53L1_STATE_WAIT_STATICINIT ((VL53L1_State)  1)
326
        /*!< Device is initialized and wait for static initialization  */
327
#define VL53L1_STATE_STANDBY         ((VL53L1_State)  2)
328
        /*!< Device is in Low power Standby mode   */
329
#define VL53L1_STATE_IDLE            ((VL53L1_State)  3)
330
        /*!< Device has been initialized and ready to do measurements  */
331
#define VL53L1_STATE_RUNNING         ((VL53L1_State)  4)
332
        /*!< Device is performing measurement */
333
#define VL53L1_STATE_RESET           ((VL53L1_State)  5)
334
        /*!< Soft reset has been run on Device */
335
#define VL53L1_STATE_UNKNOWN         ((VL53L1_State)  98)
336
        /*!< Device is in unknown state and need to be rebooted  */
337
#define VL53L1_STATE_ERROR           ((VL53L1_State)  99)
338
        /*!< Device is in error state and need to be rebooted  */
339

    
340
/** @} VL53L1_define_State_group */
341

    
342

    
343

    
344
/**
345
 * @struct VL53L1_RangingMeasurementData_t
346
 * @brief Single Range measurement data.
347
 */
348
typedef struct {
349
        uint32_t TimeStamp;
350
                /*!< 32-bit time stamp.
351
                 * @warning Not yet implemented
352
                 */
353

    
354
        uint8_t StreamCount;
355
                /*!< 8-bit Stream Count. */
356

    
357
        uint8_t RangeQualityLevel;
358
                /*!< indicate a quality level in percentage from 0 to 100
359
                 * @warning Not yet implemented
360
                 */
361

    
362
        FixPoint1616_t SignalRateRtnMegaCps;
363
                /*!< Return signal rate (MCPS)\n these is a 16.16 fix point
364
                 *  value, which is effectively a measure of target
365
                 *   reflectance.
366
                 */
367

    
368
        FixPoint1616_t AmbientRateRtnMegaCps;
369
                /*!< Return ambient rate (MCPS)\n these is a 16.16 fix point
370
                 *  value, which is effectively a measure of the ambien
371
                 *  t light.
372
                 */
373

    
374
        uint16_t EffectiveSpadRtnCount;
375
                /*!< Return the effective SPAD count for the return signal.
376
                 *  To obtain Real value it should be divided by 256
377
                 */
378

    
379
        FixPoint1616_t SigmaMilliMeter;
380
                /*!< Return the Sigma value in millimeter */
381

    
382
        int16_t RangeMilliMeter;
383
                /*!< range distance in millimeter. This should be between
384
                 *  RangeMinMilliMeter and RangeMaxMilliMeter
385
                 */
386

    
387
        uint8_t RangeFractionalPart;
388
                /*!< Fractional part of range distance. Final value is a
389
                 *  RangeMilliMeter + RangeFractionalPart/256.
390
                 *  @warning Not yet implemented
391
                 */
392

    
393
        uint8_t RangeStatus;
394
                /*!< Range Status for the current measurement. This is device
395
                 *  dependent. Value = 0 means value is valid.
396
                 */
397
} VL53L1_RangingMeasurementData_t;
398

    
399

    
400

    
401
/** @brief Defines User Zone(ROI) parameters
402
 *
403
 */
404
typedef struct {
405

    
406
        uint8_t   TopLeftX;   /*!< Top Left x coordinate:  0-15 range */
407
        uint8_t   TopLeftY;   /*!< Top Left y coordinate:  0-15 range */
408
        uint8_t   BotRightX;  /*!< Bot Right x coordinate: 0-15 range */
409
        uint8_t   BotRightY;  /*!< Bot Right y coordinate: 0-15 range */
410

    
411
} VL53L1_UserRoi_t;
412

    
413

    
414
/** @brief Defines ROI configuration parameters
415
 *
416
 *  Support up a max of 16 zones, Each Zone has the same size
417
 *
418
 */
419

    
420
/**
421
 * @struct VL53L1_CustomerNvmManaged_t
422
 *
423
 */
424

    
425
typedef struct {
426
        uint8_t   global_config__spad_enables_ref_0;
427
        uint8_t   global_config__spad_enables_ref_1;
428
        uint8_t   global_config__spad_enables_ref_2;
429
        uint8_t   global_config__spad_enables_ref_3;
430
        uint8_t   global_config__spad_enables_ref_4;
431
        uint8_t   global_config__spad_enables_ref_5;
432
        uint8_t   global_config__ref_en_start_select;
433
        uint8_t   ref_spad_man__num_requested_ref_spads;
434
        uint8_t   ref_spad_man__ref_location;
435
        uint32_t  algo__crosstalk_compensation_plane_offset_kcps;
436
        int16_t   algo__crosstalk_compensation_x_plane_gradient_kcps;
437
        int16_t   algo__crosstalk_compensation_y_plane_gradient_kcps;
438
        uint16_t  ref_spad_char__total_rate_target_mcps;
439
        int16_t   algo__part_to_part_range_offset_mm;
440
        int16_t   mm_config__inner_offset_mm;
441
        int16_t   mm_config__outer_offset_mm;
442
} VL53L1_CustomerNvmManaged_t;
443

    
444
/**
445
 * @struct  VL53L1_CalibrationData_t
446
 * @brief   Structure for storing the Calibration Data
447
 *
448
 */
449

    
450
typedef struct {
451

    
452
        uint32_t                             struct_version;
453
        VL53L1_CustomerNvmManaged_t          customer;
454
        VL53L1_additional_offset_cal_data_t  add_off_cal_data;
455
        VL53L1_optical_centre_t              optical_centre;
456
        VL53L1_gain_calibration_data_t       gain_cal;
457
        VL53L1_cal_peak_rate_map_t           cal_peak_rate_map;
458

    
459
} VL53L1_CalibrationData_t;
460

    
461
#define VL53L1_ADDITIONAL_CALIBRATION_DATA_STRUCT_VERSION  0x10
462
/** VL53L1 additional Calibration Data struct version final struct version
463
 * is given by adding it to  VL53L1_LL_CALIBRATION_DATA_STRUCT_VERSION
464
 */
465

    
466
#define VL53L1_CALIBRATION_DATA_STRUCT_VERSION \
467
                (VL53L1_LL_CALIBRATION_DATA_STRUCT_VERSION + \
468
                VL53L1_ADDITIONAL_CALIBRATION_DATA_STRUCT_VERSION)
469
/* VL53L1 Calibration Data struct version */
470

    
471
/**
472
 * @struct  VL53L1_AdditionalData_t
473
 * @brief   Structure for storing the Additional Data
474
 *
475
 */
476
typedef VL53L1_additional_data_t VL53L1_AdditionalData_t;
477

    
478

    
479
typedef uint8_t VL53L1_SequenceStepId;
480

    
481
#define         VL53L1_SEQUENCESTEP_VHV                 ((VL53L1_SequenceStepId) 0)
482
/*!<VHV. */
483
#define         VL53L1_SEQUENCESTEP_PHASECAL                 ((VL53L1_SequenceStepId) 1)
484
/*!<Phase Calibration. */
485
#define         VL53L1_SEQUENCESTEP_REFPHASE                 ((VL53L1_SequenceStepId) 2)
486
/*!<Reference Phase. */
487
#define         VL53L1_SEQUENCESTEP_DSS1                 ((VL53L1_SequenceStepId) 3)
488
/*!<DSS1. */
489
#define         VL53L1_SEQUENCESTEP_DSS2                 ((VL53L1_SequenceStepId) 4)
490
/*!<DSS2. */
491
#define         VL53L1_SEQUENCESTEP_MM1                 ((VL53L1_SequenceStepId) 5)
492
/*!<Mode Mitigation 1. */
493
#define         VL53L1_SEQUENCESTEP_MM2                 ((VL53L1_SequenceStepId) 6)
494
/*!<Mode Mitigation 2. */
495
#define         VL53L1_SEQUENCESTEP_RANGE                 ((VL53L1_SequenceStepId) 7)
496
/*!<Final Range step. */
497

    
498
#define         VL53L1_SEQUENCESTEP_NUMBER_OF_ITEMS                         8
499
/*!<Number of Sequence Step Managed by the API. */
500

    
501

    
502
/** @defgroup VL53L1_define_RangeStatus_group Defines the Range Status
503
 *        @{
504
 */
505
#define         VL53L1_RANGESTATUS_RANGE_VALID                                0
506
/*!<The Range is valid. */
507
#define         VL53L1_RANGESTATUS_SIGMA_FAIL                                1
508
/*!<Sigma Fail. */
509
#define         VL53L1_RANGESTATUS_SIGNAL_FAIL                                2
510
/*!<Signal fail. */
511
#define         VL53L1_RANGESTATUS_RANGE_VALID_MIN_RANGE_CLIPPED        3
512
/*!<Target is below minimum detection threshold. */
513
#define         VL53L1_RANGESTATUS_OUTOFBOUNDS_FAIL                        4
514
/*!<Phase out of valid limits -  different to a wrap exit. */
515
#define         VL53L1_RANGESTATUS_HARDWARE_FAIL                        5
516
/*!<Hardware fail. */
517
#define         VL53L1_RANGESTATUS_RANGE_VALID_NO_WRAP_CHECK_FAIL        6
518
/*!<The Range is valid but the wraparound check has not been done. */
519
#define        VL53L1_RANGESTATUS_WRAP_TARGET_FAIL                        7
520
/*!<Wrapped target - no matching phase in other VCSEL period timing. */
521
#define        VL53L1_RANGESTATUS_PROCESSING_FAIL                        8
522
/*!<Internal algo underflow or overflow in lite ranging. */
523
#define        VL53L1_RANGESTATUS_XTALK_SIGNAL_FAIL                        9
524
/*!<Specific to lite ranging. */
525
#define        VL53L1_RANGESTATUS_SYNCRONISATION_INT                        10
526
/*!<1st interrupt when starting ranging in back to back mode. Ignore data. */
527
#define        VL53L1_RANGESTATUS_RANGE_VALID_MERGED_PULSE                11
528
/*!<All Range ok but object is result of multiple pulses merging together.
529
 * Used by RQL for merged pulse detection
530
 */
531
#define        VL53L1_RANGESTATUS_TARGET_PRESENT_LACK_OF_SIGNAL        12
532
/*!<Used  by RQL  as different to phase fail. */
533
#define        VL53L1_RANGESTATUS_MIN_RANGE_FAIL                        13
534
/*!<User ROI input is not valid e.g. beyond SPAD Array.*/
535
#define        VL53L1_RANGESTATUS_RANGE_INVALID                        14
536
/*!<lld returned valid range but negative value ! */
537
#define         VL53L1_RANGESTATUS_NONE                                255
538
/*!<No Update. */
539

    
540
/** @} VL53L1_define_RangeStatus_group */
541

    
542

    
543
/** @brief  Contains the Internal data of the Bare Driver
544
 */
545

    
546
typedef struct {
547
        VL53L1_LLDriverData_t   LLData;
548
        /*!< Low Level Driver data structure */
549

    
550
        VL53L1_LLDriverResults_t llresults;
551
        /*!< Low Level Driver data structure */
552

    
553
        VL53L1_State      PalState; /* Store the pal state */
554
        VL53L1_DeviceParameters_t CurrentParameters;
555
        /*!< Current Device Parameter */
556

    
557
} VL53L1_DevData_t;
558

    
559

    
560
/* MACRO Definitions */
561
/** @defgroup VL53L1_define_GeneralMacro_group General Macro Defines
562
 *  General Macro Defines
563
 *  @{
564
 */
565

    
566
/* Defines */
567
#define VL53L1_SETPARAMETERFIELD(Dev, field, value) \
568
        (VL53L1DevDataSet(Dev, CurrentParameters.field, value))
569

    
570
#define VL53L1_GETPARAMETERFIELD(Dev, field, variable) \
571
        (variable = VL53L1DevDataGet(Dev, CurrentParameters).field)
572

    
573

    
574
#define VL53L1_SETARRAYPARAMETERFIELD(Dev, field, index, value) \
575
        (VL53L1DevDataSet(Dev, CurrentParameters.field[index], value))
576

    
577
#define VL53L1_GETARRAYPARAMETERFIELD(Dev, field, index, variable) \
578
        (variable = VL53L1DevDataGet(Dev, CurrentParameters).field[index])
579

    
580

    
581
#define VL53L1_SETDEVICESPECIFICPARAMETER(Dev, field, value) \
582
        (VL53L1DevDataSet(Dev, DeviceSpecificParameters.field, value))
583

    
584
#define VL53L1_GETDEVICESPECIFICPARAMETER(Dev, field) \
585
        (VL53L1DevDataGet(Dev, DeviceSpecificParameters).field)
586

    
587

    
588
#define VL53L1_FIXPOINT1616TOFIXPOINT44(Value) \
589
        (uint16_t)((Value>>12)&0xFFFF)
590
#define VL53L1_FIXPOINT44TOFIXPOINT1616(Value) \
591
        (FixPoint1616_t)((uint32_t)Value<<12)
592

    
593
#define VL53L1_FIXPOINT1616TOFIXPOINT72(Value) \
594
        (uint16_t)((Value>>14)&0xFFFF)
595
#define VL53L1_FIXPOINT72TOFIXPOINT1616(Value) \
596
        (FixPoint1616_t)((uint32_t)Value<<14)
597

    
598
#define VL53L1_FIXPOINT1616TOFIXPOINT97(Value) \
599
        (uint16_t)((Value>>9)&0xFFFF)
600
#define VL53L1_FIXPOINT97TOFIXPOINT1616(Value) \
601
        (FixPoint1616_t)((uint32_t)Value<<9)
602

    
603
#define VL53L1_FIXPOINT1616TOFIXPOINT88(Value) \
604
        (uint16_t)((Value>>8)&0xFFFF)
605
#define VL53L1_FIXPOINT88TOFIXPOINT1616(Value) \
606
        (FixPoint1616_t)((uint32_t)Value<<8)
607

    
608
#define VL53L1_FIXPOINT1616TOFIXPOINT412(Value) \
609
        (uint16_t)((Value>>4)&0xFFFF)
610
#define VL53L1_FIXPOINT412TOFIXPOINT1616(Value) \
611
        (FixPoint1616_t)((uint32_t)Value<<4)
612

    
613
#define VL53L1_FIXPOINT1616TOFIXPOINT313(Value) \
614
        (uint16_t)((Value>>3)&0xFFFF)
615
#define VL53L1_FIXPOINT313TOFIXPOINT1616(Value) \
616
        (FixPoint1616_t)((uint32_t)Value<<3)
617

    
618
#define VL53L1_FIXPOINT1616TOFIXPOINT08(Value) \
619
        (uint8_t)((Value>>8)&0x00FF)
620
#define VL53L1_FIXPOINT08TOFIXPOINT1616(Value) \
621
        (FixPoint1616_t)((uint32_t)Value<<8)
622

    
623
#define VL53L1_FIXPOINT1616TOFIXPOINT53(Value) \
624
        (uint8_t)((Value>>13)&0x00FF)
625
#define VL53L1_FIXPOINT53TOFIXPOINT1616(Value) \
626
        (FixPoint1616_t)((uint32_t)Value<<13)
627

    
628
#define VL53L1_FIXPOINT1616TOFIXPOINT102(Value) \
629
        (uint16_t)((Value>>14)&0x0FFF)
630
#define VL53L1_FIXPOINT102TOFIXPOINT1616(Value) \
631
        (FixPoint1616_t)((uint32_t)Value<<14)
632

    
633
#define VL53L1_FIXPOINT1616TOFIXPOINT142(Value) \
634
        (uint16_t)((Value>>14)&0xFFFF)
635
#define VL53L1_FIXPOINT142TOFIXPOINT1616(Value) \
636
        (FixPoint1616_t)((uint32_t)Value<<14)
637

    
638
#define VL53L1_FIXPOINT1616TOFIXPOINT160(Value) \
639
        (uint16_t)((Value>>16)&0xFFFF)
640
#define VL53L1_FIXPOINT160TOFIXPOINT1616(Value) \
641
        (FixPoint1616_t)((uint32_t)Value<<16)
642

    
643
#define VL53L1_MAKEUINT16(lsb, msb) (uint16_t)((((uint16_t)msb)<<8) + \
644
                (uint16_t)lsb)
645

    
646
#ifndef SUPPRESS_UNUSED_WARNING
647
#define SUPPRESS_UNUSED_WARNING(x) ((void) (x))
648
#endif
649

    
650
#define CHECK_ERROR_GO_ENDFUNC do {\
651
                if (Status != VL53L1_ERROR_NONE) \
652
                        goto ENDFUNC; \
653
        } while (0)
654

    
655
/** @} VL53L1_define_GeneralMacro_group */
656

    
657
/** @} VL53L1_globaldefine_group */
658

    
659

    
660

    
661
#ifdef __cplusplus
662
}
663
#endif
664

    
665

    
666
#endif /* _VL53L1_DEF_H_ */