Library for use with VL53L0X, cut 1.1, based on mass-market API v1.1.

Dependencies:   ST_INTERFACES X_NUCLEO_COMMON

Dependents:   ConcorsoFinal HelloWorld_IHM01A1 m3pi_BT m3pi_LIDAR ... more

Fork of X_NUCLEO_53L0A1 by ST Expansion SW Team

X-NUCLEO-53L0A1 Proximity Sensor Expansion Board Firmware Package

Introduction

This firmware package includes Component Device Drivers and the Board Support Package for STMicroelectronics' X-NUCLEO-53L0A1 Proximity sensor expansion board based on VL53L0X.

Firmware Library

Class X_NUCLEO_53L0A1 is intended to represent the Proximity sensor expansion board with the same name.

The expansion board provides support for the following components:

  1. on-board VL53L0X proximity sensor,
  2. up to two additional VL53L0X Satellites,
  3. on-board 4-digit display

It is intentionally implemented as a singleton because only one X-NUCLEO-VL53L0A1 may be deployed at a time in a HW component stack. In order to get the singleton instance you have to call class method `Instance()`, e.g.:

// Sensors expansion board singleton instance
static X_NUCLEO_53L0A1 *board = X_NUCLEO_53L0A1::Instance(device_i2c, A2, D8, D2);

Example Applications

The library and sample application code were tested against mbed revision 143, dated 26th May 2017.

Committer:
Davidroid
Date:
Tue Aug 22 14:39:51 2017 +0000
Revision:
16:27d3d95c8593
Aligning to ARM mbed coding style.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Davidroid 16:27d3d95c8593 1 /*******************************************************************************
Davidroid 16:27d3d95c8593 2 Copyright © 2016, STMicroelectronics International N.V.
Davidroid 16:27d3d95c8593 3 All rights reserved.
Davidroid 16:27d3d95c8593 4
Davidroid 16:27d3d95c8593 5 Redistribution and use in source and binary forms, with or without
Davidroid 16:27d3d95c8593 6 modification, are permitted provided that the following conditions are met:
Davidroid 16:27d3d95c8593 7 * Redistributions of source code must retain the above copyright
Davidroid 16:27d3d95c8593 8 notice, this list of conditions and the following disclaimer.
Davidroid 16:27d3d95c8593 9 * Redistributions in binary form must reproduce the above copyright
Davidroid 16:27d3d95c8593 10 notice, this list of conditions and the following disclaimer in the
Davidroid 16:27d3d95c8593 11 documentation and/or other materials provided with the distribution.
Davidroid 16:27d3d95c8593 12 * Neither the name of STMicroelectronics nor the
Davidroid 16:27d3d95c8593 13 names of its contributors may be used to endorse or promote products
Davidroid 16:27d3d95c8593 14 derived from this software without specific prior written permission.
Davidroid 16:27d3d95c8593 15
Davidroid 16:27d3d95c8593 16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
Davidroid 16:27d3d95c8593 17 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Davidroid 16:27d3d95c8593 18 WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
Davidroid 16:27d3d95c8593 19 NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
Davidroid 16:27d3d95c8593 20 IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY
Davidroid 16:27d3d95c8593 21 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
Davidroid 16:27d3d95c8593 22 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
Davidroid 16:27d3d95c8593 23 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
Davidroid 16:27d3d95c8593 24 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Davidroid 16:27d3d95c8593 25 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
Davidroid 16:27d3d95c8593 26 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Davidroid 16:27d3d95c8593 27 *****************************************************************************/
Davidroid 16:27d3d95c8593 28
Davidroid 16:27d3d95c8593 29 #ifndef __VL53L0X_CLASS_H
Davidroid 16:27d3d95c8593 30 #define __VL53L0X_CLASS_H
Davidroid 16:27d3d95c8593 31
Davidroid 16:27d3d95c8593 32
Davidroid 16:27d3d95c8593 33 #ifdef _MSC_VER
Davidroid 16:27d3d95c8593 34 # ifdef VL53L0X_API_EXPORTS
Davidroid 16:27d3d95c8593 35 # define VL53L0X_API __declspec(dllexport)
Davidroid 16:27d3d95c8593 36 # else
Davidroid 16:27d3d95c8593 37 # define VL53L0X_API
Davidroid 16:27d3d95c8593 38 # endif
Davidroid 16:27d3d95c8593 39 #else
Davidroid 16:27d3d95c8593 40 # define VL53L0X_API
Davidroid 16:27d3d95c8593 41 #endif
Davidroid 16:27d3d95c8593 42
Davidroid 16:27d3d95c8593 43
Davidroid 16:27d3d95c8593 44 /* Includes ------------------------------------------------------------------*/
Davidroid 16:27d3d95c8593 45 #include "mbed.h"
Davidroid 16:27d3d95c8593 46 #include "RangeSensor.h"
Davidroid 16:27d3d95c8593 47 #include "DevI2C.h"
Davidroid 16:27d3d95c8593 48 #include "PinNames.h"
Davidroid 16:27d3d95c8593 49 #include "VL53L0X_def.h"
Davidroid 16:27d3d95c8593 50 #include "VL53L0X_platform.h"
Davidroid 16:27d3d95c8593 51 #include "Stmpe1600.h"
Davidroid 16:27d3d95c8593 52
Davidroid 16:27d3d95c8593 53
Davidroid 16:27d3d95c8593 54 /**
Davidroid 16:27d3d95c8593 55 * The device model ID
Davidroid 16:27d3d95c8593 56 */
Davidroid 16:27d3d95c8593 57 #define IDENTIFICATION_MODEL_ID 0x000
Davidroid 16:27d3d95c8593 58
Davidroid 16:27d3d95c8593 59
Davidroid 16:27d3d95c8593 60 #define STATUS_OK 0x00
Davidroid 16:27d3d95c8593 61 #define STATUS_FAIL 0x01
Davidroid 16:27d3d95c8593 62
Davidroid 16:27d3d95c8593 63 #define VL53L0X_OsDelay(...) wait_ms(2) // 2 msec delay. can also use wait(float secs)/wait_us(int)
Davidroid 16:27d3d95c8593 64
Davidroid 16:27d3d95c8593 65 #ifdef USE_EMPTY_STRING
Davidroid 16:27d3d95c8593 66 #define VL53L0X_STRING_DEVICE_INFO_NAME ""
Davidroid 16:27d3d95c8593 67 #define VL53L0X_STRING_DEVICE_INFO_NAME_TS0 ""
Davidroid 16:27d3d95c8593 68 #define VL53L0X_STRING_DEVICE_INFO_NAME_TS1 ""
Davidroid 16:27d3d95c8593 69 #define VL53L0X_STRING_DEVICE_INFO_NAME_TS2 ""
Davidroid 16:27d3d95c8593 70 #define VL53L0X_STRING_DEVICE_INFO_NAME_ES1 ""
Davidroid 16:27d3d95c8593 71 #define VL53L0X_STRING_DEVICE_INFO_TYPE ""
Davidroid 16:27d3d95c8593 72
Davidroid 16:27d3d95c8593 73 /* PAL ERROR strings */
Davidroid 16:27d3d95c8593 74 #define VL53L0X_STRING_ERROR_NONE ""
Davidroid 16:27d3d95c8593 75 #define VL53L0X_STRING_ERROR_CALIBRATION_WARNING ""
Davidroid 16:27d3d95c8593 76 #define VL53L0X_STRING_ERROR_MIN_CLIPPED ""
Davidroid 16:27d3d95c8593 77 #define VL53L0X_STRING_ERROR_UNDEFINED ""
Davidroid 16:27d3d95c8593 78 #define VL53L0X_STRING_ERROR_INVALID_PARAMS ""
Davidroid 16:27d3d95c8593 79 #define VL53L0X_STRING_ERROR_NOT_SUPPORTED ""
Davidroid 16:27d3d95c8593 80 #define VL53L0X_STRING_ERROR_RANGE_ERROR ""
Davidroid 16:27d3d95c8593 81 #define VL53L0X_STRING_ERROR_TIME_OUT ""
Davidroid 16:27d3d95c8593 82 #define VL53L0X_STRING_ERROR_MODE_NOT_SUPPORTED ""
Davidroid 16:27d3d95c8593 83 #define VL53L0X_STRING_ERROR_BUFFER_TOO_SMALL ""
Davidroid 16:27d3d95c8593 84 #define VL53L0X_STRING_ERROR_GPIO_NOT_EXISTING ""
Davidroid 16:27d3d95c8593 85 #define VL53L0X_STRING_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED ""
Davidroid 16:27d3d95c8593 86 #define VL53L0X_STRING_ERROR_CONTROL_INTERFACE ""
Davidroid 16:27d3d95c8593 87 #define VL53L0X_STRING_ERROR_INVALID_COMMAND ""
Davidroid 16:27d3d95c8593 88 #define VL53L0X_STRING_ERROR_DIVISION_BY_ZERO ""
Davidroid 16:27d3d95c8593 89 #define VL53L0X_STRING_ERROR_REF_SPAD_INIT ""
Davidroid 16:27d3d95c8593 90 #define VL53L0X_STRING_ERROR_NOT_IMPLEMENTED ""
Davidroid 16:27d3d95c8593 91
Davidroid 16:27d3d95c8593 92 #define VL53L0X_STRING_UNKNOW_ERROR_CODE ""
Davidroid 16:27d3d95c8593 93
Davidroid 16:27d3d95c8593 94
Davidroid 16:27d3d95c8593 95
Davidroid 16:27d3d95c8593 96 /* Range Status */
Davidroid 16:27d3d95c8593 97 #define VL53L0X_STRING_RANGESTATUS_NONE ""
Davidroid 16:27d3d95c8593 98 #define VL53L0X_STRING_RANGESTATUS_RANGEVALID ""
Davidroid 16:27d3d95c8593 99 #define VL53L0X_STRING_RANGESTATUS_SIGMA ""
Davidroid 16:27d3d95c8593 100 #define VL53L0X_STRING_RANGESTATUS_SIGNAL ""
Davidroid 16:27d3d95c8593 101 #define VL53L0X_STRING_RANGESTATUS_MINRANGE ""
Davidroid 16:27d3d95c8593 102 #define VL53L0X_STRING_RANGESTATUS_PHASE ""
Davidroid 16:27d3d95c8593 103 #define VL53L0X_STRING_RANGESTATUS_HW ""
Davidroid 16:27d3d95c8593 104
Davidroid 16:27d3d95c8593 105
Davidroid 16:27d3d95c8593 106 /* Range Status */
Davidroid 16:27d3d95c8593 107 #define VL53L0X_STRING_STATE_POWERDOWN ""
Davidroid 16:27d3d95c8593 108 #define VL53L0X_STRING_STATE_WAIT_STATICINIT ""
Davidroid 16:27d3d95c8593 109 #define VL53L0X_STRING_STATE_STANDBY ""
Davidroid 16:27d3d95c8593 110 #define VL53L0X_STRING_STATE_IDLE ""
Davidroid 16:27d3d95c8593 111 #define VL53L0X_STRING_STATE_RUNNING ""
Davidroid 16:27d3d95c8593 112 #define VL53L0X_STRING_STATE_UNKNOWN ""
Davidroid 16:27d3d95c8593 113 #define VL53L0X_STRING_STATE_ERROR ""
Davidroid 16:27d3d95c8593 114
Davidroid 16:27d3d95c8593 115
Davidroid 16:27d3d95c8593 116 /* Device Specific */
Davidroid 16:27d3d95c8593 117 #define VL53L0X_STRING_DEVICEERROR_NONE ""
Davidroid 16:27d3d95c8593 118 #define VL53L0X_STRING_DEVICEERROR_VCSELCONTINUITYTESTFAILURE ""
Davidroid 16:27d3d95c8593 119 #define VL53L0X_STRING_DEVICEERROR_VCSELWATCHDOGTESTFAILURE ""
Davidroid 16:27d3d95c8593 120 #define VL53L0X_STRING_DEVICEERROR_NOVHVVALUEFOUND ""
Davidroid 16:27d3d95c8593 121 #define VL53L0X_STRING_DEVICEERROR_MSRCNOTARGET ""
Davidroid 16:27d3d95c8593 122 #define VL53L0X_STRING_DEVICEERROR_SNRCHECK ""
Davidroid 16:27d3d95c8593 123 #define VL53L0X_STRING_DEVICEERROR_RANGEPHASECHECK ""
Davidroid 16:27d3d95c8593 124 #define VL53L0X_STRING_DEVICEERROR_SIGMATHRESHOLDCHECK ""
Davidroid 16:27d3d95c8593 125 #define VL53L0X_STRING_DEVICEERROR_TCC ""
Davidroid 16:27d3d95c8593 126 #define VL53L0X_STRING_DEVICEERROR_PHASECONSISTENCY ""
Davidroid 16:27d3d95c8593 127 #define VL53L0X_STRING_DEVICEERROR_MINCLIP ""
Davidroid 16:27d3d95c8593 128 #define VL53L0X_STRING_DEVICEERROR_RANGECOMPLETE ""
Davidroid 16:27d3d95c8593 129 #define VL53L0X_STRING_DEVICEERROR_ALGOUNDERFLOW ""
Davidroid 16:27d3d95c8593 130 #define VL53L0X_STRING_DEVICEERROR_ALGOOVERFLOW ""
Davidroid 16:27d3d95c8593 131 #define VL53L0X_STRING_DEVICEERROR_RANGEIGNORETHRESHOLD ""
Davidroid 16:27d3d95c8593 132 #define VL53L0X_STRING_DEVICEERROR_UNKNOWN ""
Davidroid 16:27d3d95c8593 133
Davidroid 16:27d3d95c8593 134 /* Check Enable */
Davidroid 16:27d3d95c8593 135 #define VL53L0X_STRING_CHECKENABLE_SIGMA_FINAL_RANGE ""
Davidroid 16:27d3d95c8593 136 #define VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE ""
Davidroid 16:27d3d95c8593 137 #define VL53L0X_STRING_CHECKENABLE_SIGNAL_REF_CLIP ""
Davidroid 16:27d3d95c8593 138 #define VL53L0X_STRING_CHECKENABLE_RANGE_IGNORE_THRESHOLD ""
Davidroid 16:27d3d95c8593 139
Davidroid 16:27d3d95c8593 140 /* Sequence Step */
Davidroid 16:27d3d95c8593 141 #define VL53L0X_STRING_SEQUENCESTEP_TCC ""
Davidroid 16:27d3d95c8593 142 #define VL53L0X_STRING_SEQUENCESTEP_DSS ""
Davidroid 16:27d3d95c8593 143 #define VL53L0X_STRING_SEQUENCESTEP_MSRC ""
Davidroid 16:27d3d95c8593 144 #define VL53L0X_STRING_SEQUENCESTEP_PRE_RANGE ""
Davidroid 16:27d3d95c8593 145 #define VL53L0X_STRING_SEQUENCESTEP_FINAL_RANGE ""
Davidroid 16:27d3d95c8593 146 #else
Davidroid 16:27d3d95c8593 147 #define VL53L0X_STRING_DEVICE_INFO_NAME "VL53L0X cut1.0"
Davidroid 16:27d3d95c8593 148 #define VL53L0X_STRING_DEVICE_INFO_NAME_TS0 "VL53L0X TS0"
Davidroid 16:27d3d95c8593 149 #define VL53L0X_STRING_DEVICE_INFO_NAME_TS1 "VL53L0X TS1"
Davidroid 16:27d3d95c8593 150 #define VL53L0X_STRING_DEVICE_INFO_NAME_TS2 "VL53L0X TS2"
Davidroid 16:27d3d95c8593 151 #define VL53L0X_STRING_DEVICE_INFO_NAME_ES1 "VL53L0X ES1 or later"
Davidroid 16:27d3d95c8593 152 #define VL53L0X_STRING_DEVICE_INFO_TYPE "VL53L0X"
Davidroid 16:27d3d95c8593 153
Davidroid 16:27d3d95c8593 154 /* PAL ERROR strings */
Davidroid 16:27d3d95c8593 155 #define VL53L0X_STRING_ERROR_NONE \
Davidroid 16:27d3d95c8593 156 "No Error"
Davidroid 16:27d3d95c8593 157 #define VL53L0X_STRING_ERROR_CALIBRATION_WARNING \
Davidroid 16:27d3d95c8593 158 "Calibration Warning Error"
Davidroid 16:27d3d95c8593 159 #define VL53L0X_STRING_ERROR_MIN_CLIPPED \
Davidroid 16:27d3d95c8593 160 "Min clipped error"
Davidroid 16:27d3d95c8593 161 #define VL53L0X_STRING_ERROR_UNDEFINED \
Davidroid 16:27d3d95c8593 162 "Undefined error"
Davidroid 16:27d3d95c8593 163 #define VL53L0X_STRING_ERROR_INVALID_PARAMS \
Davidroid 16:27d3d95c8593 164 "Invalid parameters error"
Davidroid 16:27d3d95c8593 165 #define VL53L0X_STRING_ERROR_NOT_SUPPORTED \
Davidroid 16:27d3d95c8593 166 "Not supported error"
Davidroid 16:27d3d95c8593 167 #define VL53L0X_STRING_ERROR_RANGE_ERROR \
Davidroid 16:27d3d95c8593 168 "Range error"
Davidroid 16:27d3d95c8593 169 #define VL53L0X_STRING_ERROR_TIME_OUT \
Davidroid 16:27d3d95c8593 170 "Time out error"
Davidroid 16:27d3d95c8593 171 #define VL53L0X_STRING_ERROR_MODE_NOT_SUPPORTED \
Davidroid 16:27d3d95c8593 172 "Mode not supported error"
Davidroid 16:27d3d95c8593 173 #define VL53L0X_STRING_ERROR_BUFFER_TOO_SMALL \
Davidroid 16:27d3d95c8593 174 "Buffer too small"
Davidroid 16:27d3d95c8593 175 #define VL53L0X_STRING_ERROR_GPIO_NOT_EXISTING \
Davidroid 16:27d3d95c8593 176 "GPIO not existing"
Davidroid 16:27d3d95c8593 177 #define VL53L0X_STRING_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED \
Davidroid 16:27d3d95c8593 178 "GPIO funct not supported"
Davidroid 16:27d3d95c8593 179 #define VL53L0X_STRING_ERROR_INTERRUPT_NOT_CLEARED \
Davidroid 16:27d3d95c8593 180 "Interrupt not Cleared"
Davidroid 16:27d3d95c8593 181 #define VL53L0X_STRING_ERROR_CONTROL_INTERFACE \
Davidroid 16:27d3d95c8593 182 "Control Interface Error"
Davidroid 16:27d3d95c8593 183 #define VL53L0X_STRING_ERROR_INVALID_COMMAND \
Davidroid 16:27d3d95c8593 184 "Invalid Command Error"
Davidroid 16:27d3d95c8593 185 #define VL53L0X_STRING_ERROR_DIVISION_BY_ZERO \
Davidroid 16:27d3d95c8593 186 "Division by zero Error"
Davidroid 16:27d3d95c8593 187 #define VL53L0X_STRING_ERROR_REF_SPAD_INIT \
Davidroid 16:27d3d95c8593 188 "Reference Spad Init Error"
Davidroid 16:27d3d95c8593 189 #define VL53L0X_STRING_ERROR_NOT_IMPLEMENTED \
Davidroid 16:27d3d95c8593 190 "Not implemented error"
Davidroid 16:27d3d95c8593 191
Davidroid 16:27d3d95c8593 192 #define VL53L0X_STRING_UNKNOW_ERROR_CODE \
Davidroid 16:27d3d95c8593 193 "Unknown Error Code"
Davidroid 16:27d3d95c8593 194
Davidroid 16:27d3d95c8593 195
Davidroid 16:27d3d95c8593 196
Davidroid 16:27d3d95c8593 197 /* Range Status */
Davidroid 16:27d3d95c8593 198 #define VL53L0X_STRING_RANGESTATUS_NONE "No Update"
Davidroid 16:27d3d95c8593 199 #define VL53L0X_STRING_RANGESTATUS_RANGEVALID "Range Valid"
Davidroid 16:27d3d95c8593 200 #define VL53L0X_STRING_RANGESTATUS_SIGMA "Sigma Fail"
Davidroid 16:27d3d95c8593 201 #define VL53L0X_STRING_RANGESTATUS_SIGNAL "Signal Fail"
Davidroid 16:27d3d95c8593 202 #define VL53L0X_STRING_RANGESTATUS_MINRANGE "Min Range Fail"
Davidroid 16:27d3d95c8593 203 #define VL53L0X_STRING_RANGESTATUS_PHASE "Phase Fail"
Davidroid 16:27d3d95c8593 204 #define VL53L0X_STRING_RANGESTATUS_HW "Hardware Fail"
Davidroid 16:27d3d95c8593 205
Davidroid 16:27d3d95c8593 206
Davidroid 16:27d3d95c8593 207 /* Range Status */
Davidroid 16:27d3d95c8593 208 #define VL53L0X_STRING_STATE_POWERDOWN "POWERDOWN State"
Davidroid 16:27d3d95c8593 209 #define VL53L0X_STRING_STATE_WAIT_STATICINIT \
Davidroid 16:27d3d95c8593 210 "Wait for staticinit State"
Davidroid 16:27d3d95c8593 211 #define VL53L0X_STRING_STATE_STANDBY "STANDBY State"
Davidroid 16:27d3d95c8593 212 #define VL53L0X_STRING_STATE_IDLE "IDLE State"
Davidroid 16:27d3d95c8593 213 #define VL53L0X_STRING_STATE_RUNNING "RUNNING State"
Davidroid 16:27d3d95c8593 214 #define VL53L0X_STRING_STATE_UNKNOWN "UNKNOWN State"
Davidroid 16:27d3d95c8593 215 #define VL53L0X_STRING_STATE_ERROR "ERROR State"
Davidroid 16:27d3d95c8593 216
Davidroid 16:27d3d95c8593 217
Davidroid 16:27d3d95c8593 218 /* Device Specific */
Davidroid 16:27d3d95c8593 219 #define VL53L0X_STRING_DEVICEERROR_NONE "No Update"
Davidroid 16:27d3d95c8593 220 #define VL53L0X_STRING_DEVICEERROR_VCSELCONTINUITYTESTFAILURE \
Davidroid 16:27d3d95c8593 221 "VCSEL Continuity Test Failure"
Davidroid 16:27d3d95c8593 222 #define VL53L0X_STRING_DEVICEERROR_VCSELWATCHDOGTESTFAILURE \
Davidroid 16:27d3d95c8593 223 "VCSEL Watchdog Test Failure"
Davidroid 16:27d3d95c8593 224 #define VL53L0X_STRING_DEVICEERROR_NOVHVVALUEFOUND \
Davidroid 16:27d3d95c8593 225 "No VHV Value found"
Davidroid 16:27d3d95c8593 226 #define VL53L0X_STRING_DEVICEERROR_MSRCNOTARGET \
Davidroid 16:27d3d95c8593 227 "MSRC No Target Error"
Davidroid 16:27d3d95c8593 228 #define VL53L0X_STRING_DEVICEERROR_SNRCHECK \
Davidroid 16:27d3d95c8593 229 "SNR Check Exit"
Davidroid 16:27d3d95c8593 230 #define VL53L0X_STRING_DEVICEERROR_RANGEPHASECHECK \
Davidroid 16:27d3d95c8593 231 "Range Phase Check Error"
Davidroid 16:27d3d95c8593 232 #define VL53L0X_STRING_DEVICEERROR_SIGMATHRESHOLDCHECK \
Davidroid 16:27d3d95c8593 233 "Sigma Threshold Check Error"
Davidroid 16:27d3d95c8593 234 #define VL53L0X_STRING_DEVICEERROR_TCC \
Davidroid 16:27d3d95c8593 235 "TCC Error"
Davidroid 16:27d3d95c8593 236 #define VL53L0X_STRING_DEVICEERROR_PHASECONSISTENCY \
Davidroid 16:27d3d95c8593 237 "Phase Consistency Error"
Davidroid 16:27d3d95c8593 238 #define VL53L0X_STRING_DEVICEERROR_MINCLIP \
Davidroid 16:27d3d95c8593 239 "Min Clip Error"
Davidroid 16:27d3d95c8593 240 #define VL53L0X_STRING_DEVICEERROR_RANGECOMPLETE \
Davidroid 16:27d3d95c8593 241 "Range Complete"
Davidroid 16:27d3d95c8593 242 #define VL53L0X_STRING_DEVICEERROR_ALGOUNDERFLOW \
Davidroid 16:27d3d95c8593 243 "Range Algo Underflow Error"
Davidroid 16:27d3d95c8593 244 #define VL53L0X_STRING_DEVICEERROR_ALGOOVERFLOW \
Davidroid 16:27d3d95c8593 245 "Range Algo Overlow Error"
Davidroid 16:27d3d95c8593 246 #define VL53L0X_STRING_DEVICEERROR_RANGEIGNORETHRESHOLD \
Davidroid 16:27d3d95c8593 247 "Range Ignore Threshold Error"
Davidroid 16:27d3d95c8593 248 #define VL53L0X_STRING_DEVICEERROR_UNKNOWN \
Davidroid 16:27d3d95c8593 249 "Unknown error code"
Davidroid 16:27d3d95c8593 250
Davidroid 16:27d3d95c8593 251 /* Check Enable */
Davidroid 16:27d3d95c8593 252 #define VL53L0X_STRING_CHECKENABLE_SIGMA_FINAL_RANGE \
Davidroid 16:27d3d95c8593 253 "SIGMA FINAL RANGE"
Davidroid 16:27d3d95c8593 254 #define VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE \
Davidroid 16:27d3d95c8593 255 "SIGNAL RATE FINAL RANGE"
Davidroid 16:27d3d95c8593 256 #define VL53L0X_STRING_CHECKENABLE_SIGNAL_REF_CLIP \
Davidroid 16:27d3d95c8593 257 "SIGNAL REF CLIP"
Davidroid 16:27d3d95c8593 258 #define VL53L0X_STRING_CHECKENABLE_RANGE_IGNORE_THRESHOLD \
Davidroid 16:27d3d95c8593 259 "RANGE IGNORE THRESHOLD"
Davidroid 16:27d3d95c8593 260 #define VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_MSRC \
Davidroid 16:27d3d95c8593 261 "SIGNAL RATE MSRC"
Davidroid 16:27d3d95c8593 262 #define VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_PRE_RANGE \
Davidroid 16:27d3d95c8593 263 "SIGNAL RATE PRE RANGE"
Davidroid 16:27d3d95c8593 264
Davidroid 16:27d3d95c8593 265 /* Sequence Step */
Davidroid 16:27d3d95c8593 266 #define VL53L0X_STRING_SEQUENCESTEP_TCC "TCC"
Davidroid 16:27d3d95c8593 267 #define VL53L0X_STRING_SEQUENCESTEP_DSS "DSS"
Davidroid 16:27d3d95c8593 268 #define VL53L0X_STRING_SEQUENCESTEP_MSRC "MSRC"
Davidroid 16:27d3d95c8593 269 #define VL53L0X_STRING_SEQUENCESTEP_PRE_RANGE "PRE RANGE"
Davidroid 16:27d3d95c8593 270 #define VL53L0X_STRING_SEQUENCESTEP_FINAL_RANGE "FINAL RANGE"
Davidroid 16:27d3d95c8593 271 #endif /* USE_EMPTY_STRING */
Davidroid 16:27d3d95c8593 272
Davidroid 16:27d3d95c8593 273 /* sensor operating modes */
Davidroid 16:27d3d95c8593 274 typedef enum {
Davidroid 16:27d3d95c8593 275 range_single_shot_polling = 1,
Davidroid 16:27d3d95c8593 276 range_continuous_polling,
Davidroid 16:27d3d95c8593 277 range_continuous_interrupt,
Davidroid 16:27d3d95c8593 278 range_continuous_polling_low_threshold,
Davidroid 16:27d3d95c8593 279 range_continuous_polling_high_threshold,
Davidroid 16:27d3d95c8593 280 range_continuous_polling_out_of_window,
Davidroid 16:27d3d95c8593 281 range_continuous_interrupt_low_threshold,
Davidroid 16:27d3d95c8593 282 range_continuous_interrupt_high_threshold,
Davidroid 16:27d3d95c8593 283 range_continuous_interrupt_out_of_window,
Davidroid 16:27d3d95c8593 284 } OperatingMode;
Davidroid 16:27d3d95c8593 285
Davidroid 16:27d3d95c8593 286 /** default device address */
Davidroid 16:27d3d95c8593 287 #define DEFAULT_DEVICE_ADDRESS 0x52 /* (8-bit) */
Davidroid 16:27d3d95c8593 288
Davidroid 16:27d3d95c8593 289 /* Classes -------------------------------------------------------------------*/
Davidroid 16:27d3d95c8593 290 /** Class representing a VL53L0 sensor component
Davidroid 16:27d3d95c8593 291 */
Davidroid 16:27d3d95c8593 292 class VL53L0X : public RangeSensor
Davidroid 16:27d3d95c8593 293 {
Davidroid 16:27d3d95c8593 294 public:
Davidroid 16:27d3d95c8593 295 /** Constructor
Davidroid 16:27d3d95c8593 296 * @param[in] &i2c device I2C to be used for communication
Davidroid 16:27d3d95c8593 297 * @param[in] &pin_gpio1 pin Mbed InterruptIn PinName to be used as component GPIO_1 INT
Davidroid 16:27d3d95c8593 298 * @param[in] dev_addr device address, 0x29 by default
Davidroid 16:27d3d95c8593 299 */
Davidroid 16:27d3d95c8593 300 VL53L0X(DevI2C &i2c, DigitalOut &pin, PinName pin_gpio1, uint8_t dev_addr = DEFAULT_DEVICE_ADDRESS) : _dev_i2c(&i2c),
Davidroid 16:27d3d95c8593 301 _gpio0(&pin)
Davidroid 16:27d3d95c8593 302 {
Davidroid 16:27d3d95c8593 303 _my_device.I2cDevAddr = dev_addr;
Davidroid 16:27d3d95c8593 304 _my_device.comms_type = 1; // VL53L0X_COMMS_I2C
Davidroid 16:27d3d95c8593 305 _my_device.comms_speed_khz = 400;
Davidroid 16:27d3d95c8593 306 _device = &_my_device;
Davidroid 16:27d3d95c8593 307 _expgpio0 = NULL;
Davidroid 16:27d3d95c8593 308 if (pin_gpio1 != NC) {
Davidroid 16:27d3d95c8593 309 _gpio1Int = new InterruptIn(pin_gpio1);
Davidroid 16:27d3d95c8593 310 } else {
Davidroid 16:27d3d95c8593 311 _gpio1Int = NULL;
Davidroid 16:27d3d95c8593 312 }
Davidroid 16:27d3d95c8593 313 }
Davidroid 16:27d3d95c8593 314
Davidroid 16:27d3d95c8593 315 /** Constructor 2 (STMPE1600DigiOut)
Davidroid 16:27d3d95c8593 316 * @param[in] i2c device I2C to be used for communication
Davidroid 16:27d3d95c8593 317 * @param[in] &pin Gpio Expander STMPE1600DigiOut pin to be used as component GPIO_0 CE
Davidroid 16:27d3d95c8593 318 * @param[in] pin_gpio1 pin Mbed InterruptIn PinName to be used as component GPIO_1 INT
Davidroid 16:27d3d95c8593 319 * @param[in] device address, 0x29 by default
Davidroid 16:27d3d95c8593 320 */
Davidroid 16:27d3d95c8593 321 VL53L0X(DevI2C &i2c, Stmpe1600DigiOut &pin, PinName pin_gpio1,
Davidroid 16:27d3d95c8593 322 uint8_t dev_addr = DEFAULT_DEVICE_ADDRESS) : _dev_i2c(&i2c), _expgpio0(&pin)
Davidroid 16:27d3d95c8593 323 {
Davidroid 16:27d3d95c8593 324 _my_device.I2cDevAddr = dev_addr;
Davidroid 16:27d3d95c8593 325 _my_device.comms_type = 1; // VL53L0X_COMMS_I2C
Davidroid 16:27d3d95c8593 326 _my_device.comms_speed_khz = 400;
Davidroid 16:27d3d95c8593 327 _device = &_my_device;
Davidroid 16:27d3d95c8593 328 _gpio0 = NULL;
Davidroid 16:27d3d95c8593 329 if (pin_gpio1 != NC) {
Davidroid 16:27d3d95c8593 330 _gpio1Int = new InterruptIn(pin_gpio1);
Davidroid 16:27d3d95c8593 331 } else {
Davidroid 16:27d3d95c8593 332 _gpio1Int = NULL;
Davidroid 16:27d3d95c8593 333 }
Davidroid 16:27d3d95c8593 334 }
Davidroid 16:27d3d95c8593 335
Davidroid 16:27d3d95c8593 336 /** Destructor
Davidroid 16:27d3d95c8593 337 */
Davidroid 16:27d3d95c8593 338 virtual ~VL53L0X()
Davidroid 16:27d3d95c8593 339 {
Davidroid 16:27d3d95c8593 340 if (_gpio1Int != NULL) {
Davidroid 16:27d3d95c8593 341 delete _gpio1Int;
Davidroid 16:27d3d95c8593 342 }
Davidroid 16:27d3d95c8593 343 }
Davidroid 16:27d3d95c8593 344
Davidroid 16:27d3d95c8593 345 /*** Interface Methods ***/
Davidroid 16:27d3d95c8593 346 /*** High level API ***/
Davidroid 16:27d3d95c8593 347 /**
Davidroid 16:27d3d95c8593 348 * @brief PowerOn the sensor
Davidroid 16:27d3d95c8593 349 * @return void
Davidroid 16:27d3d95c8593 350 */
Davidroid 16:27d3d95c8593 351 /* turns on the sensor */
Davidroid 16:27d3d95c8593 352 void VL53L0X_on(void)
Davidroid 16:27d3d95c8593 353 {
Davidroid 16:27d3d95c8593 354 if (_gpio0) {
Davidroid 16:27d3d95c8593 355 *_gpio0 = 1;
Davidroid 16:27d3d95c8593 356 } else {
Davidroid 16:27d3d95c8593 357 if (_expgpio0) {
Davidroid 16:27d3d95c8593 358 *_expgpio0 = 1;
Davidroid 16:27d3d95c8593 359 }
Davidroid 16:27d3d95c8593 360 }
Davidroid 16:27d3d95c8593 361 wait_ms(10);
Davidroid 16:27d3d95c8593 362 }
Davidroid 16:27d3d95c8593 363
Davidroid 16:27d3d95c8593 364 /**
Davidroid 16:27d3d95c8593 365 * @brief PowerOff the sensor
Davidroid 16:27d3d95c8593 366 * @return void
Davidroid 16:27d3d95c8593 367 */
Davidroid 16:27d3d95c8593 368 /* turns off the sensor */
Davidroid 16:27d3d95c8593 369 void VL53L0X_off(void)
Davidroid 16:27d3d95c8593 370 {
Davidroid 16:27d3d95c8593 371 if (_gpio0) {
Davidroid 16:27d3d95c8593 372 *_gpio0 = 0;
Davidroid 16:27d3d95c8593 373 } else {
Davidroid 16:27d3d95c8593 374 if (_expgpio0) {
Davidroid 16:27d3d95c8593 375 *_expgpio0 = 0;
Davidroid 16:27d3d95c8593 376 }
Davidroid 16:27d3d95c8593 377 }
Davidroid 16:27d3d95c8593 378 wait_ms(10);
Davidroid 16:27d3d95c8593 379 }
Davidroid 16:27d3d95c8593 380
Davidroid 16:27d3d95c8593 381 /**
Davidroid 16:27d3d95c8593 382 * @brief Initialize the sensor with default values
Davidroid 16:27d3d95c8593 383 * @return "0" on success
Davidroid 16:27d3d95c8593 384 */
Davidroid 16:27d3d95c8593 385 int init_sensor(uint8_t new_addr);
Davidroid 16:27d3d95c8593 386
Davidroid 16:27d3d95c8593 387 /**
Davidroid 16:27d3d95c8593 388 * @brief Start the measure indicated by operating mode
Davidroid 16:27d3d95c8593 389 * @param[in] operating_mode specifies requested measure
Davidroid 16:27d3d95c8593 390 * @param[in] fptr specifies call back function must be !NULL in case of interrupt measure
Davidroid 16:27d3d95c8593 391 * @return "0" on success
Davidroid 16:27d3d95c8593 392 */
Davidroid 16:27d3d95c8593 393 int start_measurement(OperatingMode operating_mode, void (*fptr)(void));
Davidroid 16:27d3d95c8593 394
Davidroid 16:27d3d95c8593 395 /**
Davidroid 16:27d3d95c8593 396 * @brief Get results for the measure indicated by operating mode
Davidroid 16:27d3d95c8593 397 * @param[in] operating_mode specifies requested measure results
Davidroid 16:27d3d95c8593 398 * @param[out] p_data pointer to the MeasureData_t structure to read data in to
Davidroid 16:27d3d95c8593 399 * @return "0" on success
Davidroid 16:27d3d95c8593 400 */
Davidroid 16:27d3d95c8593 401 int get_measurement(OperatingMode operating_mode, VL53L0X_RangingMeasurementData_t *p_data);
Davidroid 16:27d3d95c8593 402
Davidroid 16:27d3d95c8593 403 /**
Davidroid 16:27d3d95c8593 404 * @brief Stop the currently running measure indicate by operating_mode
Davidroid 16:27d3d95c8593 405 * @param[in] operating_mode specifies requested measure to stop
Davidroid 16:27d3d95c8593 406 * @return "0" on success
Davidroid 16:27d3d95c8593 407 */
Davidroid 16:27d3d95c8593 408 int stop_measurement(OperatingMode operating_mode);
Davidroid 16:27d3d95c8593 409
Davidroid 16:27d3d95c8593 410 /**
Davidroid 16:27d3d95c8593 411 * @brief Interrupt handling func to be called by user after an INT is occourred
Davidroid 16:27d3d95c8593 412 * @param[in] opeating_mode indicating the in progress measure
Davidroid 16:27d3d95c8593 413 * @param[out] Data pointer to the MeasureData_t structure to read data in to
Davidroid 16:27d3d95c8593 414 * @return "0" on success
Davidroid 16:27d3d95c8593 415 */
Davidroid 16:27d3d95c8593 416 int handle_irq(OperatingMode operating_mode, VL53L0X_RangingMeasurementData_t *data);
Davidroid 16:27d3d95c8593 417
Davidroid 16:27d3d95c8593 418 /**
Davidroid 16:27d3d95c8593 419 * @brief Enable interrupt measure IRQ
Davidroid 16:27d3d95c8593 420 * @return "0" on success
Davidroid 16:27d3d95c8593 421 */
Davidroid 16:27d3d95c8593 422 void enable_interrupt_measure_detection_irq(void)
Davidroid 16:27d3d95c8593 423 {
Davidroid 16:27d3d95c8593 424 if (_gpio1Int != NULL) {
Davidroid 16:27d3d95c8593 425 _gpio1Int->enable_irq();
Davidroid 16:27d3d95c8593 426 }
Davidroid 16:27d3d95c8593 427 }
Davidroid 16:27d3d95c8593 428
Davidroid 16:27d3d95c8593 429 /**
Davidroid 16:27d3d95c8593 430 * @brief Disable interrupt measure IRQ
Davidroid 16:27d3d95c8593 431 * @return "0" on success
Davidroid 16:27d3d95c8593 432 */
Davidroid 16:27d3d95c8593 433 void disable_interrupt_measure_detection_irq(void)
Davidroid 16:27d3d95c8593 434 {
Davidroid 16:27d3d95c8593 435 if (_gpio1Int != NULL) {
Davidroid 16:27d3d95c8593 436 _gpio1Int->disable_irq();
Davidroid 16:27d3d95c8593 437 }
Davidroid 16:27d3d95c8593 438 }
Davidroid 16:27d3d95c8593 439
Davidroid 16:27d3d95c8593 440 /**
Davidroid 16:27d3d95c8593 441 * @brief Attach a function to call when an interrupt is detected, i.e. measurement is ready
Davidroid 16:27d3d95c8593 442 * @param[in] fptr pointer to call back function to be called whenever an interrupt occours
Davidroid 16:27d3d95c8593 443 * @return "0" on success
Davidroid 16:27d3d95c8593 444 */
Davidroid 16:27d3d95c8593 445 void attach_interrupt_measure_detection_irq(void (*fptr)(void))
Davidroid 16:27d3d95c8593 446 {
Davidroid 16:27d3d95c8593 447 if (_gpio1Int != NULL) {
Davidroid 16:27d3d95c8593 448 _gpio1Int->rise(fptr);
Davidroid 16:27d3d95c8593 449 }
Davidroid 16:27d3d95c8593 450 }
Davidroid 16:27d3d95c8593 451
Davidroid 16:27d3d95c8593 452 /** Wrapper functions */
Davidroid 16:27d3d95c8593 453 /** @defgroup api_init Init functions
Davidroid 16:27d3d95c8593 454 * @brief API init functions
Davidroid 16:27d3d95c8593 455 * @ingroup api_hl
Davidroid 16:27d3d95c8593 456 * @{
Davidroid 16:27d3d95c8593 457 */
Davidroid 16:27d3d95c8593 458
Davidroid 16:27d3d95c8593 459 /**
Davidroid 16:27d3d95c8593 460 *
Davidroid 16:27d3d95c8593 461 * @brief One time device initialization
Davidroid 16:27d3d95c8593 462 *
Davidroid 16:27d3d95c8593 463 * To be called once and only once after device is brought out of reset (Chip enable) and booted.
Davidroid 16:27d3d95c8593 464 *
Davidroid 16:27d3d95c8593 465 * @par Function Description
Davidroid 16:27d3d95c8593 466 * When not used after a fresh device "power up" or reset, it may return @a #CALIBRATION_WARNING
Davidroid 16:27d3d95c8593 467 * meaning wrong calibration data may have been fetched from device that can result in ranging offset error\n
Davidroid 16:27d3d95c8593 468 * If application cannot execute device reset or need to run VL53L0X_data_init multiple time
Davidroid 16:27d3d95c8593 469 * then it must ensure proper offset calibration saving and restore on its own
Davidroid 16:27d3d95c8593 470 * by using @a VL53L0X_get_offset_calibration_data_micro_meter() on first power up and then @a VL53L0X_set_offset_calibration_data_micro_meter() all all subsequent init
Davidroid 16:27d3d95c8593 471 *
Davidroid 16:27d3d95c8593 472 * @param void
Davidroid 16:27d3d95c8593 473 * @return "0" on success, @a #CALIBRATION_WARNING if failed
Davidroid 16:27d3d95c8593 474 */
Davidroid 16:27d3d95c8593 475 virtual int init(void *init)
Davidroid 16:27d3d95c8593 476 {
Davidroid 16:27d3d95c8593 477 return VL53L0X_data_init(_device);
Davidroid 16:27d3d95c8593 478 }
Davidroid 16:27d3d95c8593 479
Davidroid 16:27d3d95c8593 480 /**
Davidroid 16:27d3d95c8593 481 * @brief Prepare device for operation
Davidroid 16:27d3d95c8593 482 * @par Function Description
Davidroid 16:27d3d95c8593 483 * Does static initialization and reprogram common default settings \n
Davidroid 16:27d3d95c8593 484 * Device is prepared for new measure, ready single shot ranging or ALS typical polling operation\n
Davidroid 16:27d3d95c8593 485 * After prepare user can : \n
Davidroid 16:27d3d95c8593 486 * @li Call other API function to set other settings\n
Davidroid 16:27d3d95c8593 487 * @li Configure the interrupt pins, etc... \n
Davidroid 16:27d3d95c8593 488 * @li Then start ranging or ALS operations in single shot or continuous mode
Davidroid 16:27d3d95c8593 489 *
Davidroid 16:27d3d95c8593 490 * @param void
Davidroid 16:27d3d95c8593 491 * @return "0" on success
Davidroid 16:27d3d95c8593 492 */
Davidroid 16:27d3d95c8593 493 int prepare()
Davidroid 16:27d3d95c8593 494 {
Davidroid 16:27d3d95c8593 495 VL53L0X_Error status = VL53L0X_ERROR_NONE;
Davidroid 16:27d3d95c8593 496 uint32_t ref_spad_count;
Davidroid 16:27d3d95c8593 497 uint8_t is_aperture_spads;
Davidroid 16:27d3d95c8593 498 uint8_t vhv_settings;
Davidroid 16:27d3d95c8593 499 uint8_t phase_cal;
Davidroid 16:27d3d95c8593 500
Davidroid 16:27d3d95c8593 501 if (status == VL53L0X_ERROR_NONE) {
Davidroid 16:27d3d95c8593 502 printf("Call of VL53L0X_StaticInit\r\n");
Davidroid 16:27d3d95c8593 503 status = VL53L0X_static_init(_device); // Device Initialization
Davidroid 16:27d3d95c8593 504 }
Davidroid 16:27d3d95c8593 505
Davidroid 16:27d3d95c8593 506 if (status == VL53L0X_ERROR_NONE) {
Davidroid 16:27d3d95c8593 507 printf("Call of VL53L0X_PerformRefCalibration\r\n");
Davidroid 16:27d3d95c8593 508 status = VL53L0X_perform_ref_calibration(_device,
Davidroid 16:27d3d95c8593 509 &vhv_settings, &phase_cal); // Device Initialization
Davidroid 16:27d3d95c8593 510 }
Davidroid 16:27d3d95c8593 511
Davidroid 16:27d3d95c8593 512 if (status == VL53L0X_ERROR_NONE) {
Davidroid 16:27d3d95c8593 513 printf("Call of VL53L0X_PerformRefSpadManagement\r\n");
Davidroid 16:27d3d95c8593 514 status = VL53L0X_perform_ref_spad_management(_device,
Davidroid 16:27d3d95c8593 515 &ref_spad_count, &is_aperture_spads); // Device Initialization
Davidroid 16:27d3d95c8593 516 // printf ("refSpadCount = %d, isApertureSpads = %d\r\n", refSpadCount, isApertureSpads);
Davidroid 16:27d3d95c8593 517 }
Davidroid 16:27d3d95c8593 518
Davidroid 16:27d3d95c8593 519 return status;
Davidroid 16:27d3d95c8593 520 }
Davidroid 16:27d3d95c8593 521
Davidroid 16:27d3d95c8593 522 /**
Davidroid 16:27d3d95c8593 523 * @brief Start continuous ranging mode
Davidroid 16:27d3d95c8593 524 *
Davidroid 16:27d3d95c8593 525 * @details End user should ensure device is in idle state and not already running
Davidroid 16:27d3d95c8593 526 * @return "0" on success
Davidroid 16:27d3d95c8593 527 */
Davidroid 16:27d3d95c8593 528 int range_start_continuous_mode()
Davidroid 16:27d3d95c8593 529 {
Davidroid 16:27d3d95c8593 530 int status;
Davidroid 16:27d3d95c8593 531 status = VL53L0X_set_device_mode(_device, VL53L0X_DEVICEMODE_CONTINUOUS_RANGING);
Davidroid 16:27d3d95c8593 532
Davidroid 16:27d3d95c8593 533 if (status == VL53L0X_ERROR_NONE) {
Davidroid 16:27d3d95c8593 534 printf ("Call of VL53L0X_StartMeasurement\r\n");
Davidroid 16:27d3d95c8593 535 status = VL53L0X_start_measurement(_device);
Davidroid 16:27d3d95c8593 536 }
Davidroid 16:27d3d95c8593 537
Davidroid 16:27d3d95c8593 538 return status;
Davidroid 16:27d3d95c8593 539 }
Davidroid 16:27d3d95c8593 540
Davidroid 16:27d3d95c8593 541 /**
Davidroid 16:27d3d95c8593 542 * @brief Get ranging result and only that
Davidroid 16:27d3d95c8593 543 *
Davidroid 16:27d3d95c8593 544 * @par Function Description
Davidroid 16:27d3d95c8593 545 * Unlike @a VL53L0X_get_ranging_measurement_data() this function only retrieves the range in millimeter \n
Davidroid 16:27d3d95c8593 546 * It does any required up-scale translation\n
Davidroid 16:27d3d95c8593 547 * It can be called after success status polling or in interrupt mode \n
Davidroid 16:27d3d95c8593 548 * @warning these function is not doing wrap around filtering \n
Davidroid 16:27d3d95c8593 549 * This function doesn't perform any data ready check!
Davidroid 16:27d3d95c8593 550 *
Davidroid 16:27d3d95c8593 551 * @param p_data Pointer to range distance
Davidroid 16:27d3d95c8593 552 * @return "0" on success
Davidroid 16:27d3d95c8593 553 */
Davidroid 16:27d3d95c8593 554 virtual int get_distance(uint32_t *p_data)
Davidroid 16:27d3d95c8593 555 {
Davidroid 16:27d3d95c8593 556 int status = 0;
Davidroid 16:27d3d95c8593 557 VL53L0X_RangingMeasurementData_t p_ranging_measurement_data;
Davidroid 16:27d3d95c8593 558
Davidroid 16:27d3d95c8593 559 status = start_measurement(range_single_shot_polling, NULL);
Davidroid 16:27d3d95c8593 560 if (!status) {
Davidroid 16:27d3d95c8593 561 status = get_measurement(range_single_shot_polling, &p_ranging_measurement_data);
Davidroid 16:27d3d95c8593 562 }
Davidroid 16:27d3d95c8593 563 if (p_ranging_measurement_data.RangeStatus == 0) {
Davidroid 16:27d3d95c8593 564 // we have a valid range.
Davidroid 16:27d3d95c8593 565 *p_data = p_ranging_measurement_data.RangeMilliMeter;
Davidroid 16:27d3d95c8593 566 } else {
Davidroid 16:27d3d95c8593 567 *p_data = 0;
Davidroid 16:27d3d95c8593 568 status = VL53L0X_ERROR_RANGE_ERROR;
Davidroid 16:27d3d95c8593 569 }
Davidroid 16:27d3d95c8593 570 stop_measurement(range_single_shot_polling);
Davidroid 16:27d3d95c8593 571 return status;
Davidroid 16:27d3d95c8593 572 }
Davidroid 16:27d3d95c8593 573
Davidroid 16:27d3d95c8593 574 /** @} */
Davidroid 16:27d3d95c8593 575
Davidroid 16:27d3d95c8593 576 /**
Davidroid 16:27d3d95c8593 577 * @brief Set new device i2c address
Davidroid 16:27d3d95c8593 578 *
Davidroid 16:27d3d95c8593 579 * After completion the device will answer to the new address programmed.
Davidroid 16:27d3d95c8593 580 *
Davidroid 16:27d3d95c8593 581 * @param new_addr The new i2c address (7bit)
Davidroid 16:27d3d95c8593 582 * @return "0" on success
Davidroid 16:27d3d95c8593 583 */
Davidroid 16:27d3d95c8593 584 int set_device_address(int new_addr)
Davidroid 16:27d3d95c8593 585 {
Davidroid 16:27d3d95c8593 586 int status;
Davidroid 16:27d3d95c8593 587
Davidroid 16:27d3d95c8593 588 status = VL53L0X_set_device_address(_device, new_addr);
Davidroid 16:27d3d95c8593 589 if (!status) {
Davidroid 16:27d3d95c8593 590 _device->I2cDevAddr = new_addr;
Davidroid 16:27d3d95c8593 591 }
Davidroid 16:27d3d95c8593 592 return status;
Davidroid 16:27d3d95c8593 593
Davidroid 16:27d3d95c8593 594 }
Davidroid 16:27d3d95c8593 595
Davidroid 16:27d3d95c8593 596 /**
Davidroid 16:27d3d95c8593 597 * @brief Clear given system interrupt condition
Davidroid 16:27d3d95c8593 598 *
Davidroid 16:27d3d95c8593 599 * @par Function Description
Davidroid 16:27d3d95c8593 600 * Clear given interrupt cause by writing into register #SYSTEM_INTERRUPT_CLEAR register.
Davidroid 16:27d3d95c8593 601 * @param dev The device
Davidroid 16:27d3d95c8593 602 * @param int_clear Which interrupt source to clear. Use any combinations of #INTERRUPT_CLEAR_RANGING , #INTERRUPT_CLEAR_ALS , #INTERRUPT_CLEAR_ERROR.
Davidroid 16:27d3d95c8593 603 * @return "0" on success
Davidroid 16:27d3d95c8593 604 */
Davidroid 16:27d3d95c8593 605 int clear_interrupt(uint8_t int_clear)
Davidroid 16:27d3d95c8593 606 {
Davidroid 16:27d3d95c8593 607 return VL53L0X_clear_interrupt_mask(_device, int_clear);
Davidroid 16:27d3d95c8593 608 }
Davidroid 16:27d3d95c8593 609
Davidroid 16:27d3d95c8593 610 /**
Davidroid 16:27d3d95c8593 611 *
Davidroid 16:27d3d95c8593 612 * @brief One time device initialization
Davidroid 16:27d3d95c8593 613 *
Davidroid 16:27d3d95c8593 614 * To be called once and only once after device is brought out of reset
Davidroid 16:27d3d95c8593 615 * (Chip enable) and booted see @a VL53L0X_WaitDeviceBooted()
Davidroid 16:27d3d95c8593 616 *
Davidroid 16:27d3d95c8593 617 * @par Function Description
Davidroid 16:27d3d95c8593 618 * When not used after a fresh device "power up" or reset, it may return
Davidroid 16:27d3d95c8593 619 * @a #VL53L0X_ERROR_CALIBRATION_WARNING meaning wrong calibration data
Davidroid 16:27d3d95c8593 620 * may have been fetched from device that can result in ranging offset error\n
Davidroid 16:27d3d95c8593 621 * If application cannot execute device reset or need to run VL53L0X_DataInit
Davidroid 16:27d3d95c8593 622 * multiple time then it must ensure proper offset calibration saving and
Davidroid 16:27d3d95c8593 623 * restore on its own by using @a VL53L0X_GetOffsetCalibrationData() on first
Davidroid 16:27d3d95c8593 624 * power up and then @a VL53L0X_SetOffsetCalibrationData() in all subsequent init
Davidroid 16:27d3d95c8593 625 * This function will change the VL53L0X_State from VL53L0X_STATE_POWERDOWN to
Davidroid 16:27d3d95c8593 626 * VL53L0X_STATE_WAIT_STATICINIT.
Davidroid 16:27d3d95c8593 627 *
Davidroid 16:27d3d95c8593 628 * @note This function accesses to the device
Davidroid 16:27d3d95c8593 629 *
Davidroid 16:27d3d95c8593 630 * @param dev Device Handle
Davidroid 16:27d3d95c8593 631 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 632 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 633 */
Davidroid 16:27d3d95c8593 634 VL53L0X_Error VL53L0X_data_init(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 635
Davidroid 16:27d3d95c8593 636 /**
Davidroid 16:27d3d95c8593 637 * @brief Do basic device init (and eventually patch loading)
Davidroid 16:27d3d95c8593 638 * This function will change the VL53L0X_State from
Davidroid 16:27d3d95c8593 639 * VL53L0X_STATE_WAIT_STATICINIT to VL53L0X_STATE_IDLE.
Davidroid 16:27d3d95c8593 640 * In this stage all default setting will be applied.
Davidroid 16:27d3d95c8593 641 *
Davidroid 16:27d3d95c8593 642 * @note This function Access to the device
Davidroid 16:27d3d95c8593 643 *
Davidroid 16:27d3d95c8593 644 * @param dev Device Handle
Davidroid 16:27d3d95c8593 645 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 646 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 647 */
Davidroid 16:27d3d95c8593 648 VL53L0X_Error VL53L0X_static_init(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 649
Davidroid 16:27d3d95c8593 650 /**
Davidroid 16:27d3d95c8593 651 * @brief Perform Reference Calibration
Davidroid 16:27d3d95c8593 652 *
Davidroid 16:27d3d95c8593 653 * @details Perform a reference calibration of the Device.
Davidroid 16:27d3d95c8593 654 * This function should be run from time to time before doing
Davidroid 16:27d3d95c8593 655 * a ranging measurement.
Davidroid 16:27d3d95c8593 656 * This function will launch a special ranging measurement, so
Davidroid 16:27d3d95c8593 657 * if interrupt are enable an interrupt will be done.
Davidroid 16:27d3d95c8593 658 * This function will clear the interrupt generated automatically.
Davidroid 16:27d3d95c8593 659 *
Davidroid 16:27d3d95c8593 660 * @warning This function is a blocking function
Davidroid 16:27d3d95c8593 661 *
Davidroid 16:27d3d95c8593 662 * @note This function Access to the device
Davidroid 16:27d3d95c8593 663 *
Davidroid 16:27d3d95c8593 664 * @param dev Device Handle
Davidroid 16:27d3d95c8593 665 * @param p_vhv_settings Pointer to vhv settings parameter.
Davidroid 16:27d3d95c8593 666 * @param p_phase_cal Pointer to PhaseCal parameter.
Davidroid 16:27d3d95c8593 667 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 668 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 669 */
Davidroid 16:27d3d95c8593 670 VL53L0X_Error VL53L0X_perform_ref_calibration(VL53L0X_DEV dev, uint8_t *p_vhv_settings,
Davidroid 16:27d3d95c8593 671 uint8_t *p_phase_cal);
Davidroid 16:27d3d95c8593 672
Davidroid 16:27d3d95c8593 673 /**
Davidroid 16:27d3d95c8593 674 * @brief Get Reference Calibration Parameters
Davidroid 16:27d3d95c8593 675 *
Davidroid 16:27d3d95c8593 676 * @par Function Description
Davidroid 16:27d3d95c8593 677 * Get Reference Calibration Parameters.
Davidroid 16:27d3d95c8593 678 *
Davidroid 16:27d3d95c8593 679 * @note This function Access to the device
Davidroid 16:27d3d95c8593 680 *
Davidroid 16:27d3d95c8593 681 * @param dev Device Handle
Davidroid 16:27d3d95c8593 682 * @param p_vhv_settings Pointer to VHV parameter
Davidroid 16:27d3d95c8593 683 * @param p_phase_cal Pointer to PhaseCal Parameter
Davidroid 16:27d3d95c8593 684 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 685 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 686 */
Davidroid 16:27d3d95c8593 687 VL53L0X_Error VL53L0X_get_ref_calibration(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 688 uint8_t *p_vhv_settings, uint8_t *p_phase_cal);
Davidroid 16:27d3d95c8593 689
Davidroid 16:27d3d95c8593 690 VL53L0X_Error VL53L0X_set_ref_calibration(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 691 uint8_t vhv_settings, uint8_t phase_cal);
Davidroid 16:27d3d95c8593 692
Davidroid 16:27d3d95c8593 693 /**
Davidroid 16:27d3d95c8593 694 * @brief Performs Reference Spad Management
Davidroid 16:27d3d95c8593 695 *
Davidroid 16:27d3d95c8593 696 * @par Function Description
Davidroid 16:27d3d95c8593 697 * The reference SPAD initialization procedure determines the minimum amount
Davidroid 16:27d3d95c8593 698 * of reference spads to be enables to achieve a target reference signal rate
Davidroid 16:27d3d95c8593 699 * and should be performed once during initialization.
Davidroid 16:27d3d95c8593 700 *
Davidroid 16:27d3d95c8593 701 * @note This function Access to the device
Davidroid 16:27d3d95c8593 702 *
Davidroid 16:27d3d95c8593 703 * @note This function change the device mode to
Davidroid 16:27d3d95c8593 704 * VL53L0X_DEVICEMODE_SINGLE_RANGING
Davidroid 16:27d3d95c8593 705 *
Davidroid 16:27d3d95c8593 706 * @param dev Device Handle
Davidroid 16:27d3d95c8593 707 * @param ref_spad_count Reports ref Spad Count
Davidroid 16:27d3d95c8593 708 * @param is_aperture_spads Reports if spads are of type
Davidroid 16:27d3d95c8593 709 * aperture or non-aperture.
Davidroid 16:27d3d95c8593 710 * 1:=aperture, 0:=Non-Aperture
Davidroid 16:27d3d95c8593 711 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 712 * @return VL53L0X_ERROR_REF_SPAD_INIT Error in the Ref Spad procedure.
Davidroid 16:27d3d95c8593 713 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 714 */
Davidroid 16:27d3d95c8593 715 VL53L0X_Error VL53L0X_perform_ref_spad_management(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 716 uint32_t *ref_spad_count, uint8_t *is_aperture_spads);
Davidroid 16:27d3d95c8593 717
Davidroid 16:27d3d95c8593 718 /**
Davidroid 16:27d3d95c8593 719 * @brief Applies Reference SPAD configuration
Davidroid 16:27d3d95c8593 720 *
Davidroid 16:27d3d95c8593 721 * @par Function Description
Davidroid 16:27d3d95c8593 722 * This function applies a given number of reference spads, identified as
Davidroid 16:27d3d95c8593 723 * either Aperture or Non-Aperture.
Davidroid 16:27d3d95c8593 724 * The requested spad count and type are stored within the device specific
Davidroid 16:27d3d95c8593 725 * parameters data for access by the host.
Davidroid 16:27d3d95c8593 726 *
Davidroid 16:27d3d95c8593 727 * @note This function Access to the device
Davidroid 16:27d3d95c8593 728 *
Davidroid 16:27d3d95c8593 729 * @param dev Device Handle
Davidroid 16:27d3d95c8593 730 * @param refSpadCount Number of ref spads.
Davidroid 16:27d3d95c8593 731 * @param is_aperture_spads Defines if spads are of type
Davidroid 16:27d3d95c8593 732 * aperture or non-aperture.
Davidroid 16:27d3d95c8593 733 * 1:=aperture, 0:=Non-Aperture
Davidroid 16:27d3d95c8593 734 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 735 * @return VL53L0X_ERROR_REF_SPAD_INIT Error in the in the reference
Davidroid 16:27d3d95c8593 736 * spad configuration.
Davidroid 16:27d3d95c8593 737 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 738 */
Davidroid 16:27d3d95c8593 739 VL53L0X_Error VL53L0X_set_reference_spads(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 740 uint32_t refSpadCount, uint8_t is_aperture_spads);
Davidroid 16:27d3d95c8593 741
Davidroid 16:27d3d95c8593 742 /**
Davidroid 16:27d3d95c8593 743 * @brief Retrieves SPAD configuration
Davidroid 16:27d3d95c8593 744 *
Davidroid 16:27d3d95c8593 745 * @par Function Description
Davidroid 16:27d3d95c8593 746 * This function retrieves the current number of applied reference spads
Davidroid 16:27d3d95c8593 747 * and also their type : Aperture or Non-Aperture.
Davidroid 16:27d3d95c8593 748 *
Davidroid 16:27d3d95c8593 749 * @note This function Access to the device
Davidroid 16:27d3d95c8593 750 *
Davidroid 16:27d3d95c8593 751 * @param dev Device Handle
Davidroid 16:27d3d95c8593 752 * @param p_spad_count Number ref Spad Count
Davidroid 16:27d3d95c8593 753 * @param p_is_aperture_spads Reports if spads are of type
Davidroid 16:27d3d95c8593 754 * aperture or non-aperture.
Davidroid 16:27d3d95c8593 755 * 1:=aperture, 0:=Non-Aperture
Davidroid 16:27d3d95c8593 756 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 757 * @return VL53L0X_ERROR_REF_SPAD_INIT Error in the in the reference
Davidroid 16:27d3d95c8593 758 * spad configuration.
Davidroid 16:27d3d95c8593 759 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 760 */
Davidroid 16:27d3d95c8593 761 VL53L0X_Error VL53L0X_get_reference_spads(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 762 uint32_t *p_spad_count, uint8_t *p_is_aperture_spads);
Davidroid 16:27d3d95c8593 763
Davidroid 16:27d3d95c8593 764 /**
Davidroid 16:27d3d95c8593 765 * @brief Get part to part calibration offset
Davidroid 16:27d3d95c8593 766 *
Davidroid 16:27d3d95c8593 767 * @par Function Description
Davidroid 16:27d3d95c8593 768 * Should only be used after a successful call to @a VL53L0X_DataInit to backup
Davidroid 16:27d3d95c8593 769 * device NVM value
Davidroid 16:27d3d95c8593 770 *
Davidroid 16:27d3d95c8593 771 * @note This function Access to the device
Davidroid 16:27d3d95c8593 772 *
Davidroid 16:27d3d95c8593 773 * @param dev Device Handle
Davidroid 16:27d3d95c8593 774 * @param p_offset_calibration_data_micro_meter Return part to part
Davidroid 16:27d3d95c8593 775 * calibration offset from device (microns)
Davidroid 16:27d3d95c8593 776 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 777 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 778 */
Davidroid 16:27d3d95c8593 779 VL53L0X_Error VL53L0X_get_offset_calibration_data_micro_meter(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 780 int32_t *p_offset_calibration_data_micro_meter);
Davidroid 16:27d3d95c8593 781 /**
Davidroid 16:27d3d95c8593 782 * Set or over-hide part to part calibration offset
Davidroid 16:27d3d95c8593 783 * \sa VL53L0X_DataInit() VL53L0X_GetOffsetCalibrationDataMicroMeter()
Davidroid 16:27d3d95c8593 784 *
Davidroid 16:27d3d95c8593 785 * @note This function Access to the device
Davidroid 16:27d3d95c8593 786 *
Davidroid 16:27d3d95c8593 787 * @param dev Device Handle
Davidroid 16:27d3d95c8593 788 * @param p_offset_calibration_data_micro_meter Offset (microns)
Davidroid 16:27d3d95c8593 789 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 790 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 791 */
Davidroid 16:27d3d95c8593 792 VL53L0X_Error VL53L0X_set_offset_calibration_data_micro_meter(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 793 int32_t offset_calibration_data_micro_meter);
Davidroid 16:27d3d95c8593 794
Davidroid 16:27d3d95c8593 795 VL53L0X_Error VL53L0X_perform_offset_calibration(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 796 FixPoint1616_t cal_distance_milli_meter,
Davidroid 16:27d3d95c8593 797 int32_t *p_offset_micro_meter);
Davidroid 16:27d3d95c8593 798
Davidroid 16:27d3d95c8593 799 VL53L0X_Error VL53L0X_perform_xtalk_calibration(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 800 FixPoint1616_t xtalk_cal_distance,
Davidroid 16:27d3d95c8593 801 FixPoint1616_t *p_xtalk_compensation_rate_mega_cps);
Davidroid 16:27d3d95c8593 802
Davidroid 16:27d3d95c8593 803 /**
Davidroid 16:27d3d95c8593 804 * @brief Perform XTalk Measurement
Davidroid 16:27d3d95c8593 805 *
Davidroid 16:27d3d95c8593 806 * @details Measures the current cross talk from glass in front
Davidroid 16:27d3d95c8593 807 * of the sensor.
Davidroid 16:27d3d95c8593 808 * This functions performs a histogram measurement and uses the results
Davidroid 16:27d3d95c8593 809 * to measure the crosstalk. For the function to be successful, there
Davidroid 16:27d3d95c8593 810 * must be no target in front of the sensor.
Davidroid 16:27d3d95c8593 811 *
Davidroid 16:27d3d95c8593 812 * @warning This function is a blocking function
Davidroid 16:27d3d95c8593 813 *
Davidroid 16:27d3d95c8593 814 * @warning This function is not supported when the final range
Davidroid 16:27d3d95c8593 815 * vcsel clock period is set below 10 PCLKS.
Davidroid 16:27d3d95c8593 816 *
Davidroid 16:27d3d95c8593 817 * @note This function Access to the device
Davidroid 16:27d3d95c8593 818 *
Davidroid 16:27d3d95c8593 819 * @param dev Device Handle
Davidroid 16:27d3d95c8593 820 * @param timeout_ms Histogram measurement duration.
Davidroid 16:27d3d95c8593 821 * @param p_xtalk_per_spad Output parameter containing the crosstalk
Davidroid 16:27d3d95c8593 822 * measurement result, in MCPS/Spad.
Davidroid 16:27d3d95c8593 823 * Format fixpoint 16:16.
Davidroid 16:27d3d95c8593 824 * @param p_ambient_too_high Output parameter which indicate that
Davidroid 16:27d3d95c8593 825 * pXtalkPerSpad is not good if the Ambient
Davidroid 16:27d3d95c8593 826 * is too high.
Davidroid 16:27d3d95c8593 827 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 828 * @return VL53L0X_ERROR_INVALID_PARAMS vcsel clock period not supported
Davidroid 16:27d3d95c8593 829 * for this operation.
Davidroid 16:27d3d95c8593 830 * Must not be less than 10PCLKS.
Davidroid 16:27d3d95c8593 831 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 832 */
Davidroid 16:27d3d95c8593 833 VL53L0X_Error VL53L0X_perform_xtalk_measurement(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 834 uint32_t timeout_ms, FixPoint1616_t *p_xtalk_per_spad,
Davidroid 16:27d3d95c8593 835 uint8_t *p_ambient_too_high);
Davidroid 16:27d3d95c8593 836
Davidroid 16:27d3d95c8593 837 /**
Davidroid 16:27d3d95c8593 838 * @brief Enable/Disable Cross talk compensation feature
Davidroid 16:27d3d95c8593 839 *
Davidroid 16:27d3d95c8593 840 * @note This function is not Implemented.
Davidroid 16:27d3d95c8593 841 * Enable/Disable Cross Talk by set to zero the Cross Talk value
Davidroid 16:27d3d95c8593 842 * by using @a VL53L0X_SetXTalkCompensationRateMegaCps().
Davidroid 16:27d3d95c8593 843 *
Davidroid 16:27d3d95c8593 844 * @param dev Device Handle
Davidroid 16:27d3d95c8593 845 * @param x_talk_compensation_enable Cross talk compensation
Davidroid 16:27d3d95c8593 846 * to be set 0=disabled else = enabled
Davidroid 16:27d3d95c8593 847 * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented
Davidroid 16:27d3d95c8593 848 */
Davidroid 16:27d3d95c8593 849 VL53L0X_Error VL53L0X_set_x_talk_compensation_enable(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 850 uint8_t x_talk_compensation_enable);
Davidroid 16:27d3d95c8593 851
Davidroid 16:27d3d95c8593 852 /**
Davidroid 16:27d3d95c8593 853 * @brief Get Cross talk compensation rate
Davidroid 16:27d3d95c8593 854 *
Davidroid 16:27d3d95c8593 855 * @note This function is not Implemented.
Davidroid 16:27d3d95c8593 856 * Enable/Disable Cross Talk by set to zero the Cross Talk value by
Davidroid 16:27d3d95c8593 857 * using @a VL53L0X_SetXTalkCompensationRateMegaCps().
Davidroid 16:27d3d95c8593 858 *
Davidroid 16:27d3d95c8593 859 * @param dev Device Handle
Davidroid 16:27d3d95c8593 860 * @param p_x_talk_compensation_enable Pointer to the Cross talk compensation
Davidroid 16:27d3d95c8593 861 * state 0=disabled or 1 = enabled
Davidroid 16:27d3d95c8593 862 * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented
Davidroid 16:27d3d95c8593 863 */
Davidroid 16:27d3d95c8593 864 VL53L0X_Error VL53L0X_get_x_talk_compensation_enable(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 865 uint8_t *p_x_talk_compensation_enable);
Davidroid 16:27d3d95c8593 866 /**
Davidroid 16:27d3d95c8593 867 * @brief Set Cross talk compensation rate
Davidroid 16:27d3d95c8593 868 *
Davidroid 16:27d3d95c8593 869 * @par Function Description
Davidroid 16:27d3d95c8593 870 * Set Cross talk compensation rate.
Davidroid 16:27d3d95c8593 871 *
Davidroid 16:27d3d95c8593 872 * @note This function Access to the device
Davidroid 16:27d3d95c8593 873 *
Davidroid 16:27d3d95c8593 874 * @param dev Device Handle
Davidroid 16:27d3d95c8593 875 * @param x_talk_compensation_rate_mega_cps Compensation rate in
Davidroid 16:27d3d95c8593 876 * Mega counts per second
Davidroid 16:27d3d95c8593 877 * (16.16 fix point) see
Davidroid 16:27d3d95c8593 878 * datasheet for details
Davidroid 16:27d3d95c8593 879 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 880 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 881 */
Davidroid 16:27d3d95c8593 882 VL53L0X_Error VL53L0X_set_x_talk_compensation_rate_mega_cps(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 883 FixPoint1616_t x_talk_compensation_rate_mega_cps);
Davidroid 16:27d3d95c8593 884
Davidroid 16:27d3d95c8593 885 /**
Davidroid 16:27d3d95c8593 886 * @brief Get Cross talk compensation rate
Davidroid 16:27d3d95c8593 887 *
Davidroid 16:27d3d95c8593 888 * @par Function Description
Davidroid 16:27d3d95c8593 889 * Get Cross talk compensation rate.
Davidroid 16:27d3d95c8593 890 *
Davidroid 16:27d3d95c8593 891 * @note This function Access to the device
Davidroid 16:27d3d95c8593 892 *
Davidroid 16:27d3d95c8593 893 * @param dev Device Handle
Davidroid 16:27d3d95c8593 894 * @param p_xtalk_compensation_rate_mega_cps Pointer to Compensation rate
Davidroid 16:27d3d95c8593 895 * in Mega counts per second
Davidroid 16:27d3d95c8593 896 * (16.16 fix point) see
Davidroid 16:27d3d95c8593 897 * datasheet for details
Davidroid 16:27d3d95c8593 898 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 899 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 900 */
Davidroid 16:27d3d95c8593 901 VL53L0X_Error VL53L0X_get_x_talk_compensation_rate_mega_cps(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 902 FixPoint1616_t *p_xtalk_compensation_rate_mega_cps);
Davidroid 16:27d3d95c8593 903
Davidroid 16:27d3d95c8593 904 /**
Davidroid 16:27d3d95c8593 905 * @brief Set a new device mode
Davidroid 16:27d3d95c8593 906 * @par Function Description
Davidroid 16:27d3d95c8593 907 * Set device to a new mode (ranging, histogram ...)
Davidroid 16:27d3d95c8593 908 *
Davidroid 16:27d3d95c8593 909 * @note This function doesn't Access to the device
Davidroid 16:27d3d95c8593 910 *
Davidroid 16:27d3d95c8593 911 * @param dev Device Handle
Davidroid 16:27d3d95c8593 912 * @param device_mode New device mode to apply
Davidroid 16:27d3d95c8593 913 * Valid values are:
Davidroid 16:27d3d95c8593 914 * VL53L0X_DEVICEMODE_SINGLE_RANGING
Davidroid 16:27d3d95c8593 915 * VL53L0X_DEVICEMODE_CONTINUOUS_RANGING
Davidroid 16:27d3d95c8593 916 * VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING
Davidroid 16:27d3d95c8593 917 * VL53L0X_DEVICEMODE_SINGLE_HISTOGRAM
Davidroid 16:27d3d95c8593 918 * VL53L0X_HISTOGRAMMODE_REFERENCE_ONLY
Davidroid 16:27d3d95c8593 919 * VL53L0X_HISTOGRAMMODE_RETURN_ONLY
Davidroid 16:27d3d95c8593 920 * VL53L0X_HISTOGRAMMODE_BOTH
Davidroid 16:27d3d95c8593 921 *
Davidroid 16:27d3d95c8593 922 *
Davidroid 16:27d3d95c8593 923 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 924 * @return VL53L0X_ERROR_MODE_NOT_SUPPORTED This error occurs when
Davidroid 16:27d3d95c8593 925 * DeviceMode is not in the
Davidroid 16:27d3d95c8593 926 * supported list
Davidroid 16:27d3d95c8593 927 */
Davidroid 16:27d3d95c8593 928 VL53L0X_Error VL53L0X_set_device_mode(VL53L0X_DEV dev, VL53L0X_DeviceModes device_mode);
Davidroid 16:27d3d95c8593 929
Davidroid 16:27d3d95c8593 930 /**
Davidroid 16:27d3d95c8593 931 * @brief Get current new device mode
Davidroid 16:27d3d95c8593 932 * @par Function Description
Davidroid 16:27d3d95c8593 933 * Get actual mode of the device(ranging, histogram ...)
Davidroid 16:27d3d95c8593 934 *
Davidroid 16:27d3d95c8593 935 * @note This function doesn't Access to the device
Davidroid 16:27d3d95c8593 936 *
Davidroid 16:27d3d95c8593 937 * @param dev Device Handle
Davidroid 16:27d3d95c8593 938 * @param p_device_mode Pointer to current apply mode value
Davidroid 16:27d3d95c8593 939 * Valid values are:
Davidroid 16:27d3d95c8593 940 * VL53L0X_DEVICEMODE_SINGLE_RANGING
Davidroid 16:27d3d95c8593 941 * VL53L0X_DEVICEMODE_CONTINUOUS_RANGING
Davidroid 16:27d3d95c8593 942 * VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING
Davidroid 16:27d3d95c8593 943 * VL53L0X_DEVICEMODE_SINGLE_HISTOGRAM
Davidroid 16:27d3d95c8593 944 * VL53L0X_HISTOGRAMMODE_REFERENCE_ONLY
Davidroid 16:27d3d95c8593 945 * VL53L0X_HISTOGRAMMODE_RETURN_ONLY
Davidroid 16:27d3d95c8593 946 * VL53L0X_HISTOGRAMMODE_BOTH
Davidroid 16:27d3d95c8593 947 *
Davidroid 16:27d3d95c8593 948 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 949 * @return VL53L0X_ERROR_MODE_NOT_SUPPORTED This error occurs when
Davidroid 16:27d3d95c8593 950 * DeviceMode is not in the
Davidroid 16:27d3d95c8593 951 * supported list
Davidroid 16:27d3d95c8593 952 */
Davidroid 16:27d3d95c8593 953 VL53L0X_Error VL53L0X_get_device_mode(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 954 VL53L0X_DeviceModes *p_device_mode);
Davidroid 16:27d3d95c8593 955
Davidroid 16:27d3d95c8593 956 /**
Davidroid 16:27d3d95c8593 957 * @brief Get current configuration for GPIO pin for a given device
Davidroid 16:27d3d95c8593 958 *
Davidroid 16:27d3d95c8593 959 * @note This function Access to the device
Davidroid 16:27d3d95c8593 960 *
Davidroid 16:27d3d95c8593 961 * @param dev Device Handle
Davidroid 16:27d3d95c8593 962 * @param pin ID of the GPIO Pin
Davidroid 16:27d3d95c8593 963 * @param p_device_mode Pointer to Device Mode associated to the Gpio.
Davidroid 16:27d3d95c8593 964 * @param p_functionality Pointer to Pin functionality.
Davidroid 16:27d3d95c8593 965 * Refer to ::VL53L0X_GpioFunctionality
Davidroid 16:27d3d95c8593 966 * @param p_polarity Pointer to interrupt polarity.
Davidroid 16:27d3d95c8593 967 * Active high or active low see
Davidroid 16:27d3d95c8593 968 * ::VL53L0X_InterruptPolarity
Davidroid 16:27d3d95c8593 969 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 970 * @return VL53L0X_ERROR_GPIO_NOT_EXISTING Only Pin=0 is accepted.
Davidroid 16:27d3d95c8593 971 * @return VL53L0X_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED
Davidroid 16:27d3d95c8593 972 * This error occurs
Davidroid 16:27d3d95c8593 973 * when Funcionality programmed is not in the supported list:
Davidroid 16:27d3d95c8593 974 * Supported value are:
Davidroid 16:27d3d95c8593 975 * VL53L0X_GPIOFUNCTIONALITY_OFF,
Davidroid 16:27d3d95c8593 976 * VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_LOW,
Davidroid 16:27d3d95c8593 977 * VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_HIGH,
Davidroid 16:27d3d95c8593 978 * VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_OUT,
Davidroid 16:27d3d95c8593 979 * VL53L0X_GPIOFUNCTIONALITY_NEW_MEASURE_READY
Davidroid 16:27d3d95c8593 980 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 981 */
Davidroid 16:27d3d95c8593 982 VL53L0X_Error VL53L0X_get_gpio_config(VL53L0X_DEV dev, uint8_t pin,
Davidroid 16:27d3d95c8593 983 VL53L0X_DeviceModes *p_device_mode,
Davidroid 16:27d3d95c8593 984 VL53L0X_GpioFunctionality *p_functionality,
Davidroid 16:27d3d95c8593 985 VL53L0X_InterruptPolarity *p_polarity);
Davidroid 16:27d3d95c8593 986
Davidroid 16:27d3d95c8593 987 /**
Davidroid 16:27d3d95c8593 988 * @brief Set the configuration of GPIO pin for a given device
Davidroid 16:27d3d95c8593 989 *
Davidroid 16:27d3d95c8593 990 * @note This function Access to the device
Davidroid 16:27d3d95c8593 991 *
Davidroid 16:27d3d95c8593 992 * @param dev Device Handle
Davidroid 16:27d3d95c8593 993 * @param pin ID of the GPIO Pin
Davidroid 16:27d3d95c8593 994 * @param functionality Select Pin functionality.
Davidroid 16:27d3d95c8593 995 * Refer to ::VL53L0X_GpioFunctionality
Davidroid 16:27d3d95c8593 996 * @param device_mode Device Mode associated to the Gpio.
Davidroid 16:27d3d95c8593 997 * @param polarity Set interrupt polarity. Active high
Davidroid 16:27d3d95c8593 998 * or active low see ::VL53L0X_InterruptPolarity
Davidroid 16:27d3d95c8593 999 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1000 * @return VL53L0X_ERROR_GPIO_NOT_EXISTING Only Pin=0 is accepted.
Davidroid 16:27d3d95c8593 1001 * @return VL53L0X_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED This error occurs
Davidroid 16:27d3d95c8593 1002 * when Functionality programmed is not in the supported list:
Davidroid 16:27d3d95c8593 1003 * Supported value are:
Davidroid 16:27d3d95c8593 1004 * VL53L0X_GPIOFUNCTIONALITY_OFF,
Davidroid 16:27d3d95c8593 1005 * VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_LOW,
Davidroid 16:27d3d95c8593 1006 * VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_HIGH,
Davidroid 16:27d3d95c8593 1007 VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_OUT,
Davidroid 16:27d3d95c8593 1008 * VL53L0X_GPIOFUNCTIONALITY_NEW_MEASURE_READY
Davidroid 16:27d3d95c8593 1009 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1010 */
Davidroid 16:27d3d95c8593 1011 VL53L0X_Error VL53L0X_set_gpio_config(VL53L0X_DEV dev, uint8_t pin,
Davidroid 16:27d3d95c8593 1012 VL53L0X_DeviceModes device_mode, VL53L0X_GpioFunctionality functionality,
Davidroid 16:27d3d95c8593 1013 VL53L0X_InterruptPolarity polarity);
Davidroid 16:27d3d95c8593 1014
Davidroid 16:27d3d95c8593 1015 /**
Davidroid 16:27d3d95c8593 1016 * @brief Start device measurement
Davidroid 16:27d3d95c8593 1017 *
Davidroid 16:27d3d95c8593 1018 * @details Started measurement will depend on device parameters set through
Davidroid 16:27d3d95c8593 1019 * @a VL53L0X_SetParameters()
Davidroid 16:27d3d95c8593 1020 * This is a non-blocking function.
Davidroid 16:27d3d95c8593 1021 * This function will change the VL53L0X_State from VL53L0X_STATE_IDLE to
Davidroid 16:27d3d95c8593 1022 * VL53L0X_STATE_RUNNING.
Davidroid 16:27d3d95c8593 1023 *
Davidroid 16:27d3d95c8593 1024 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1025 *
Davidroid 16:27d3d95c8593 1026
Davidroid 16:27d3d95c8593 1027 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1028 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1029 * @return VL53L0X_ERROR_MODE_NOT_SUPPORTED This error occurs when
Davidroid 16:27d3d95c8593 1030 * DeviceMode programmed with @a VL53L0X_SetDeviceMode is not in the supported
Davidroid 16:27d3d95c8593 1031 * list:
Davidroid 16:27d3d95c8593 1032 * Supported mode are:
Davidroid 16:27d3d95c8593 1033 * VL53L0X_DEVICEMODE_SINGLE_RANGING,
Davidroid 16:27d3d95c8593 1034 * VL53L0X_DEVICEMODE_CONTINUOUS_RANGING,
Davidroid 16:27d3d95c8593 1035 * VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING
Davidroid 16:27d3d95c8593 1036 * @return VL53L0X_ERROR_TIME_OUT Time out on start measurement
Davidroid 16:27d3d95c8593 1037 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1038 */
Davidroid 16:27d3d95c8593 1039 VL53L0X_Error VL53L0X_start_measurement(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 1040
Davidroid 16:27d3d95c8593 1041 /**
Davidroid 16:27d3d95c8593 1042 * @brief Stop device measurement
Davidroid 16:27d3d95c8593 1043 *
Davidroid 16:27d3d95c8593 1044 * @details Will set the device in standby mode at end of current measurement\n
Davidroid 16:27d3d95c8593 1045 * Not necessary in single mode as device shall return automatically
Davidroid 16:27d3d95c8593 1046 * in standby mode at end of measurement.
Davidroid 16:27d3d95c8593 1047 * This function will change the VL53L0X_State from VL53L0X_STATE_RUNNING
Davidroid 16:27d3d95c8593 1048 * to VL53L0X_STATE_IDLE.
Davidroid 16:27d3d95c8593 1049 *
Davidroid 16:27d3d95c8593 1050 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1051 *
Davidroid 16:27d3d95c8593 1052 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1053 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1054 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1055 */
Davidroid 16:27d3d95c8593 1056 VL53L0X_Error VL53L0X_stop_measurement(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 1057
Davidroid 16:27d3d95c8593 1058 /**
Davidroid 16:27d3d95c8593 1059 * @brief Return device stop completion status
Davidroid 16:27d3d95c8593 1060 *
Davidroid 16:27d3d95c8593 1061 * @par Function Description
Davidroid 16:27d3d95c8593 1062 * Returns stop completiob status.
Davidroid 16:27d3d95c8593 1063 * User shall call this function after a stop command
Davidroid 16:27d3d95c8593 1064 *
Davidroid 16:27d3d95c8593 1065 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1066 *
Davidroid 16:27d3d95c8593 1067 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1068 * @param p_stop_status Pointer to status variable to update
Davidroid 16:27d3d95c8593 1069 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1070 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1071 */
Davidroid 16:27d3d95c8593 1072 VL53L0X_Error VL53L0X_get_stop_completed_status(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1073 uint32_t *p_stop_status);
Davidroid 16:27d3d95c8593 1074
Davidroid 16:27d3d95c8593 1075 /**
Davidroid 16:27d3d95c8593 1076 * @brief Return Measurement Data Ready
Davidroid 16:27d3d95c8593 1077 *
Davidroid 16:27d3d95c8593 1078 * @par Function Description
Davidroid 16:27d3d95c8593 1079 * This function indicate that a measurement data is ready.
Davidroid 16:27d3d95c8593 1080 * This function check if interrupt mode is used then check is done accordingly.
Davidroid 16:27d3d95c8593 1081 * If perform function clear the interrupt, this function will not work,
Davidroid 16:27d3d95c8593 1082 * like in case of @a VL53L0X_PerformSingleRangingMeasurement().
Davidroid 16:27d3d95c8593 1083 * The previous function is blocking function, VL53L0X_GetMeasurementDataReady
Davidroid 16:27d3d95c8593 1084 * is used for non-blocking capture.
Davidroid 16:27d3d95c8593 1085 *
Davidroid 16:27d3d95c8593 1086 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1087 *
Davidroid 16:27d3d95c8593 1088 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1089 * @param p_measurement_data_ready Pointer to Measurement Data Ready.
Davidroid 16:27d3d95c8593 1090 * 0=data not ready, 1 = data ready
Davidroid 16:27d3d95c8593 1091 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1092 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1093 */
Davidroid 16:27d3d95c8593 1094 VL53L0X_Error VL53L0X_get_measurement_data_ready(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1095 uint8_t *p_measurement_data_ready);
Davidroid 16:27d3d95c8593 1096
Davidroid 16:27d3d95c8593 1097 /**
Davidroid 16:27d3d95c8593 1098 * @brief Retrieve the measurements from device for a given setup
Davidroid 16:27d3d95c8593 1099 *
Davidroid 16:27d3d95c8593 1100 * @par Function Description
Davidroid 16:27d3d95c8593 1101 * Get data from last successful Ranging measurement
Davidroid 16:27d3d95c8593 1102 * @warning USER should take care about @a VL53L0X_GetNumberOfROIZones()
Davidroid 16:27d3d95c8593 1103 * before get data.
Davidroid 16:27d3d95c8593 1104 * PAL will fill a NumberOfROIZones times the corresponding data
Davidroid 16:27d3d95c8593 1105 * structure used in the measurement function.
Davidroid 16:27d3d95c8593 1106 *
Davidroid 16:27d3d95c8593 1107 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1108 *
Davidroid 16:27d3d95c8593 1109 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1110 * @param p_ranging_measurement_data Pointer to the data structure to fill up.
Davidroid 16:27d3d95c8593 1111 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1112 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1113 */
Davidroid 16:27d3d95c8593 1114 VL53L0X_Error VL53L0X_get_ranging_measurement_data(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1115 VL53L0X_RangingMeasurementData_t *p_ranging_measurement_data);
Davidroid 16:27d3d95c8593 1116
Davidroid 16:27d3d95c8593 1117 /**
Davidroid 16:27d3d95c8593 1118 * @brief Clear given system interrupt condition
Davidroid 16:27d3d95c8593 1119 *
Davidroid 16:27d3d95c8593 1120 * @par Function Description
Davidroid 16:27d3d95c8593 1121 * Clear given interrupt(s).
Davidroid 16:27d3d95c8593 1122 *
Davidroid 16:27d3d95c8593 1123 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1124 *
Davidroid 16:27d3d95c8593 1125 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1126 * @param interrupt_mask Mask of interrupts to clear
Davidroid 16:27d3d95c8593 1127 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1128 * @return VL53L0X_ERROR_INTERRUPT_NOT_CLEARED Cannot clear interrupts
Davidroid 16:27d3d95c8593 1129 *
Davidroid 16:27d3d95c8593 1130 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1131 */
Davidroid 16:27d3d95c8593 1132 VL53L0X_Error VL53L0X_clear_interrupt_mask(VL53L0X_DEV dev, uint32_t interrupt_mask);
Davidroid 16:27d3d95c8593 1133
Davidroid 16:27d3d95c8593 1134 /**
Davidroid 16:27d3d95c8593 1135 * @brief Return device interrupt status
Davidroid 16:27d3d95c8593 1136 *
Davidroid 16:27d3d95c8593 1137 * @par Function Description
Davidroid 16:27d3d95c8593 1138 * Returns currently raised interrupts by the device.
Davidroid 16:27d3d95c8593 1139 * User shall be able to activate/deactivate interrupts through
Davidroid 16:27d3d95c8593 1140 * @a VL53L0X_SetGpioConfig()
Davidroid 16:27d3d95c8593 1141 *
Davidroid 16:27d3d95c8593 1142 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1143 *
Davidroid 16:27d3d95c8593 1144 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1145 * @param p_interrupt_mask_status Pointer to status variable to update
Davidroid 16:27d3d95c8593 1146 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1147 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1148 */
Davidroid 16:27d3d95c8593 1149 VL53L0X_Error VL53L0X_get_interrupt_mask_status(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1150 uint32_t *p_interrupt_mask_status);
Davidroid 16:27d3d95c8593 1151
Davidroid 16:27d3d95c8593 1152 /**
Davidroid 16:27d3d95c8593 1153 * @brief Performs a single ranging measurement and retrieve the ranging
Davidroid 16:27d3d95c8593 1154 * measurement data
Davidroid 16:27d3d95c8593 1155 *
Davidroid 16:27d3d95c8593 1156 * @par Function Description
Davidroid 16:27d3d95c8593 1157 * This function will change the device mode to VL53L0X_DEVICEMODE_SINGLE_RANGING
Davidroid 16:27d3d95c8593 1158 * with @a VL53L0X_SetDeviceMode(),
Davidroid 16:27d3d95c8593 1159 * It performs measurement with @a VL53L0X_PerformSingleMeasurement()
Davidroid 16:27d3d95c8593 1160 * It get data from last successful Ranging measurement with
Davidroid 16:27d3d95c8593 1161 * @a VL53L0X_GetRangingMeasurementData.
Davidroid 16:27d3d95c8593 1162 * Finally it clear the interrupt with @a VL53L0X_ClearInterruptMask().
Davidroid 16:27d3d95c8593 1163 *
Davidroid 16:27d3d95c8593 1164 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1165 *
Davidroid 16:27d3d95c8593 1166 * @note This function change the device mode to
Davidroid 16:27d3d95c8593 1167 * VL53L0X_DEVICEMODE_SINGLE_RANGING
Davidroid 16:27d3d95c8593 1168 *
Davidroid 16:27d3d95c8593 1169 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1170 * @param p_ranging_measurement_data Pointer to the data structure to fill up.
Davidroid 16:27d3d95c8593 1171 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1172 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1173 */
Davidroid 16:27d3d95c8593 1174 VL53L0X_Error VL53L0X_perform_single_ranging_measurement(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1175 VL53L0X_RangingMeasurementData_t *p_ranging_measurement_data);
Davidroid 16:27d3d95c8593 1176
Davidroid 16:27d3d95c8593 1177 /**
Davidroid 16:27d3d95c8593 1178 * @brief Single shot measurement.
Davidroid 16:27d3d95c8593 1179 *
Davidroid 16:27d3d95c8593 1180 * @par Function Description
Davidroid 16:27d3d95c8593 1181 * Perform simple measurement sequence (Start measure, Wait measure to end,
Davidroid 16:27d3d95c8593 1182 * and returns when measurement is done).
Davidroid 16:27d3d95c8593 1183 * Once function returns, user can get valid data by calling
Davidroid 16:27d3d95c8593 1184 * VL53L0X_GetRangingMeasurement or VL53L0X_GetHistogramMeasurement
Davidroid 16:27d3d95c8593 1185 * depending on defined measurement mode
Davidroid 16:27d3d95c8593 1186 * User should Clear the interrupt in case this are enabled by using the
Davidroid 16:27d3d95c8593 1187 * function VL53L0X_ClearInterruptMask().
Davidroid 16:27d3d95c8593 1188 *
Davidroid 16:27d3d95c8593 1189 * @warning This function is a blocking function
Davidroid 16:27d3d95c8593 1190 *
Davidroid 16:27d3d95c8593 1191 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1192 *
Davidroid 16:27d3d95c8593 1193 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1194 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1195 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1196 */
Davidroid 16:27d3d95c8593 1197 VL53L0X_Error VL53L0X_perform_single_measurement(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 1198
Davidroid 16:27d3d95c8593 1199 /**
Davidroid 16:27d3d95c8593 1200 * @brief Read current status of the error register for the selected device
Davidroid 16:27d3d95c8593 1201 *
Davidroid 16:27d3d95c8593 1202 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1203 *
Davidroid 16:27d3d95c8593 1204 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1205 * @param p_device_error_status Pointer to current error code of the device
Davidroid 16:27d3d95c8593 1206 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1207 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1208 */
Davidroid 16:27d3d95c8593 1209 VL53L0X_Error VL53L0X_get_device_error_status(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1210 VL53L0X_DeviceError *p_device_error_status);
Davidroid 16:27d3d95c8593 1211
Davidroid 16:27d3d95c8593 1212 /**
Davidroid 16:27d3d95c8593 1213 * @brief Human readable error string for a given Error Code
Davidroid 16:27d3d95c8593 1214 *
Davidroid 16:27d3d95c8593 1215 * @note This function doesn't access to the device
Davidroid 16:27d3d95c8593 1216 *
Davidroid 16:27d3d95c8593 1217 * @param error_code The error code as stored on ::VL53L0X_DeviceError
Davidroid 16:27d3d95c8593 1218 * @param p_device_error_string The error string corresponding to the ErrorCode
Davidroid 16:27d3d95c8593 1219 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1220 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1221 */
Davidroid 16:27d3d95c8593 1222 VL53L0X_Error VL53L0X_get_device_error_string(
Davidroid 16:27d3d95c8593 1223 VL53L0X_DeviceError error_code, char *p_device_error_string);
Davidroid 16:27d3d95c8593 1224
Davidroid 16:27d3d95c8593 1225 /**
Davidroid 16:27d3d95c8593 1226 * @brief Human readable Range Status string for a given RangeStatus
Davidroid 16:27d3d95c8593 1227 *
Davidroid 16:27d3d95c8593 1228 * @note This function doesn't access to the device
Davidroid 16:27d3d95c8593 1229 *
Davidroid 16:27d3d95c8593 1230 * @param range_status The RangeStatus code as stored on
Davidroid 16:27d3d95c8593 1231 * @a VL53L0X_RangingMeasurementData_t
Davidroid 16:27d3d95c8593 1232 * @param p_range_status_string The returned RangeStatus string.
Davidroid 16:27d3d95c8593 1233 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1234 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1235 */
Davidroid 16:27d3d95c8593 1236 VL53L0X_Error VL53L0X_get_range_status_string(uint8_t range_status,
Davidroid 16:27d3d95c8593 1237 char *p_range_status_string);
Davidroid 16:27d3d95c8593 1238
Davidroid 16:27d3d95c8593 1239 VL53L0X_Error VL53L0X_get_total_signal_rate(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1240 VL53L0X_RangingMeasurementData_t *p_ranging_measurement_data,
Davidroid 16:27d3d95c8593 1241 FixPoint1616_t *p_total_signal_rate_mcps);
Davidroid 16:27d3d95c8593 1242
Davidroid 16:27d3d95c8593 1243 VL53L0X_Error VL53L0X_get_total_xtalk_rate(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1244 VL53L0X_RangingMeasurementData_t *p_ranging_measurement_data,
Davidroid 16:27d3d95c8593 1245 FixPoint1616_t *p_total_xtalk_rate_mcps);
Davidroid 16:27d3d95c8593 1246
Davidroid 16:27d3d95c8593 1247 /**
Davidroid 16:27d3d95c8593 1248 * @brief Get Ranging Timing Budget in microseconds
Davidroid 16:27d3d95c8593 1249 *
Davidroid 16:27d3d95c8593 1250 * @par Function Description
Davidroid 16:27d3d95c8593 1251 * Returns the programmed the maximum time allowed by the user to the
Davidroid 16:27d3d95c8593 1252 * device to run a full ranging sequence for the current mode
Davidroid 16:27d3d95c8593 1253 * (ranging, histogram, ASL ...)
Davidroid 16:27d3d95c8593 1254 *
Davidroid 16:27d3d95c8593 1255 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1256 *
Davidroid 16:27d3d95c8593 1257 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1258 * @param p_measurement_timing_budget_micro_seconds Max measurement time in
Davidroid 16:27d3d95c8593 1259 * microseconds.
Davidroid 16:27d3d95c8593 1260 * Valid values are:
Davidroid 16:27d3d95c8593 1261 * >= 17000 microsecs when wraparound enabled
Davidroid 16:27d3d95c8593 1262 * >= 12000 microsecs when wraparound disabled
Davidroid 16:27d3d95c8593 1263 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1264 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1265 */
Davidroid 16:27d3d95c8593 1266 VL53L0X_Error VL53L0X_get_measurement_timing_budget_micro_seconds(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1267 uint32_t *p_measurement_timing_budget_micro_seconds);
Davidroid 16:27d3d95c8593 1268
Davidroid 16:27d3d95c8593 1269 /**
Davidroid 16:27d3d95c8593 1270 * @brief Set Ranging Timing Budget in microseconds
Davidroid 16:27d3d95c8593 1271 *
Davidroid 16:27d3d95c8593 1272 * @par Function Description
Davidroid 16:27d3d95c8593 1273 * Defines the maximum time allowed by the user to the device to run a
Davidroid 16:27d3d95c8593 1274 * full ranging sequence for the current mode (ranging, histogram, ASL ...)
Davidroid 16:27d3d95c8593 1275 *
Davidroid 16:27d3d95c8593 1276 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1277 *
Davidroid 16:27d3d95c8593 1278 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1279 * @param measurement_timing_budget_micro_seconds Max measurement time in
Davidroid 16:27d3d95c8593 1280 * microseconds.
Davidroid 16:27d3d95c8593 1281 * Valid values are:
Davidroid 16:27d3d95c8593 1282 * >= 17000 microsecs when wraparound enabled
Davidroid 16:27d3d95c8593 1283 * >= 12000 microsecs when wraparound disabled
Davidroid 16:27d3d95c8593 1284 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1285 * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned if
Davidroid 16:27d3d95c8593 1286 MeasurementTimingBudgetMicroSeconds out of range
Davidroid 16:27d3d95c8593 1287 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1288 */
Davidroid 16:27d3d95c8593 1289 VL53L0X_Error VL53L0X_set_measurement_timing_budget_micro_seconds(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1290 uint32_t measurement_timing_budget_micro_seconds);
Davidroid 16:27d3d95c8593 1291
Davidroid 16:27d3d95c8593 1292 /**
Davidroid 16:27d3d95c8593 1293 * @brief Get specific limit check enable state
Davidroid 16:27d3d95c8593 1294 *
Davidroid 16:27d3d95c8593 1295 * @par Function Description
Davidroid 16:27d3d95c8593 1296 * This function get the enable state of a specific limit check.
Davidroid 16:27d3d95c8593 1297 * The limit check is identified with the LimitCheckId.
Davidroid 16:27d3d95c8593 1298 *
Davidroid 16:27d3d95c8593 1299 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1300 *
Davidroid 16:27d3d95c8593 1301 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1302 * @param limit_check_id Limit Check ID
Davidroid 16:27d3d95c8593 1303 * (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ).
Davidroid 16:27d3d95c8593 1304 * @param p_limit_check_enable Pointer to the check limit enable
Davidroid 16:27d3d95c8593 1305 * value.
Davidroid 16:27d3d95c8593 1306 * if 1 the check limit
Davidroid 16:27d3d95c8593 1307 * corresponding to LimitCheckId is Enabled
Davidroid 16:27d3d95c8593 1308 * if 0 the check limit
Davidroid 16:27d3d95c8593 1309 * corresponding to LimitCheckId is disabled
Davidroid 16:27d3d95c8593 1310 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1311 * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned
Davidroid 16:27d3d95c8593 1312 * when LimitCheckId value is out of range.
Davidroid 16:27d3d95c8593 1313 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1314 */
Davidroid 16:27d3d95c8593 1315 VL53L0X_Error VL53L0X_get_limit_check_enable(VL53L0X_DEV dev, uint16_t limit_check_id,
Davidroid 16:27d3d95c8593 1316 uint8_t *p_limit_check_enable);
Davidroid 16:27d3d95c8593 1317
Davidroid 16:27d3d95c8593 1318 /**
Davidroid 16:27d3d95c8593 1319 * @brief Enable/Disable a specific limit check
Davidroid 16:27d3d95c8593 1320 *
Davidroid 16:27d3d95c8593 1321 * @par Function Description
Davidroid 16:27d3d95c8593 1322 * This function Enable/Disable a specific limit check.
Davidroid 16:27d3d95c8593 1323 * The limit check is identified with the LimitCheckId.
Davidroid 16:27d3d95c8593 1324 *
Davidroid 16:27d3d95c8593 1325 * @note This function doesn't Access to the device
Davidroid 16:27d3d95c8593 1326 *
Davidroid 16:27d3d95c8593 1327 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1328 * @param limit_check_id Limit Check ID
Davidroid 16:27d3d95c8593 1329 * (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ).
Davidroid 16:27d3d95c8593 1330 * @param limit_check_enable if 1 the check limit
Davidroid 16:27d3d95c8593 1331 * corresponding to LimitCheckId is Enabled
Davidroid 16:27d3d95c8593 1332 * if 0 the check limit
Davidroid 16:27d3d95c8593 1333 * corresponding to LimitCheckId is disabled
Davidroid 16:27d3d95c8593 1334 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1335 * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned
Davidroid 16:27d3d95c8593 1336 * when LimitCheckId value is out of range.
Davidroid 16:27d3d95c8593 1337 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1338 */
Davidroid 16:27d3d95c8593 1339 VL53L0X_Error VL53L0X_set_limit_check_enable(VL53L0X_DEV dev, uint16_t limit_check_id,
Davidroid 16:27d3d95c8593 1340 uint8_t limit_check_enable);
Davidroid 16:27d3d95c8593 1341
Davidroid 16:27d3d95c8593 1342 /**
Davidroid 16:27d3d95c8593 1343 * @brief Get a specific limit check value
Davidroid 16:27d3d95c8593 1344 *
Davidroid 16:27d3d95c8593 1345 * @par Function Description
Davidroid 16:27d3d95c8593 1346 * This function get a specific limit check value from device then it updates
Davidroid 16:27d3d95c8593 1347 * internal values and check enables.
Davidroid 16:27d3d95c8593 1348 * The limit check is identified with the LimitCheckId.
Davidroid 16:27d3d95c8593 1349 *
Davidroid 16:27d3d95c8593 1350 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1351 *
Davidroid 16:27d3d95c8593 1352 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1353 * @param limit_check_id Limit Check ID
Davidroid 16:27d3d95c8593 1354 * (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ).
Davidroid 16:27d3d95c8593 1355 * @param p_limit_check_value Pointer to Limit
Davidroid 16:27d3d95c8593 1356 * check Value for a given LimitCheckId.
Davidroid 16:27d3d95c8593 1357 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1358 * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned
Davidroid 16:27d3d95c8593 1359 * when LimitCheckId value is out of range.
Davidroid 16:27d3d95c8593 1360 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1361 */
Davidroid 16:27d3d95c8593 1362 VL53L0X_Error VL53L0X_get_limit_check_value(VL53L0X_DEV dev, uint16_t limit_check_id,
Davidroid 16:27d3d95c8593 1363 FixPoint1616_t *p_limit_check_value);
Davidroid 16:27d3d95c8593 1364
Davidroid 16:27d3d95c8593 1365 /**
Davidroid 16:27d3d95c8593 1366 * @brief Set a specific limit check value
Davidroid 16:27d3d95c8593 1367 *
Davidroid 16:27d3d95c8593 1368 * @par Function Description
Davidroid 16:27d3d95c8593 1369 * This function set a specific limit check value.
Davidroid 16:27d3d95c8593 1370 * The limit check is identified with the LimitCheckId.
Davidroid 16:27d3d95c8593 1371 *
Davidroid 16:27d3d95c8593 1372 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1373 *
Davidroid 16:27d3d95c8593 1374 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1375 * @param limit_check_id Limit Check ID
Davidroid 16:27d3d95c8593 1376 * (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ).
Davidroid 16:27d3d95c8593 1377 * @param limit_check_value Limit check Value for a given
Davidroid 16:27d3d95c8593 1378 * LimitCheckId
Davidroid 16:27d3d95c8593 1379 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1380 * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned when either
Davidroid 16:27d3d95c8593 1381 * LimitCheckId or LimitCheckValue value is out of range.
Davidroid 16:27d3d95c8593 1382 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1383 */
Davidroid 16:27d3d95c8593 1384 VL53L0X_Error VL53L0X_set_limit_check_value(VL53L0X_DEV dev, uint16_t limit_check_id,
Davidroid 16:27d3d95c8593 1385 FixPoint1616_t limit_check_value);
Davidroid 16:27d3d95c8593 1386
Davidroid 16:27d3d95c8593 1387 /**
Davidroid 16:27d3d95c8593 1388 * @brief Get the current value of the signal used for the limit check
Davidroid 16:27d3d95c8593 1389 *
Davidroid 16:27d3d95c8593 1390 * @par Function Description
Davidroid 16:27d3d95c8593 1391 * This function get a the current value of the signal used for the limit check.
Davidroid 16:27d3d95c8593 1392 * To obtain the latest value you should run a ranging before.
Davidroid 16:27d3d95c8593 1393 * The value reported is linked to the limit check identified with the
Davidroid 16:27d3d95c8593 1394 * LimitCheckId.
Davidroid 16:27d3d95c8593 1395 *
Davidroid 16:27d3d95c8593 1396 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1397 *
Davidroid 16:27d3d95c8593 1398 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1399 * @param limit_check_id Limit Check ID
Davidroid 16:27d3d95c8593 1400 * (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ).
Davidroid 16:27d3d95c8593 1401 * @param p_limit_check_current Pointer to current Value for a
Davidroid 16:27d3d95c8593 1402 * given LimitCheckId.
Davidroid 16:27d3d95c8593 1403 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1404 * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned when
Davidroid 16:27d3d95c8593 1405 * LimitCheckId value is out of range.
Davidroid 16:27d3d95c8593 1406 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1407 */
Davidroid 16:27d3d95c8593 1408 VL53L0X_Error VL53L0X_get_limit_check_current(VL53L0X_DEV dev, uint16_t limit_check_id,
Davidroid 16:27d3d95c8593 1409 FixPoint1616_t *p_limit_check_current);
Davidroid 16:27d3d95c8593 1410
Davidroid 16:27d3d95c8593 1411 /**
Davidroid 16:27d3d95c8593 1412 * @brief Return a the Status of the specified check limit
Davidroid 16:27d3d95c8593 1413 *
Davidroid 16:27d3d95c8593 1414 * @par Function Description
Davidroid 16:27d3d95c8593 1415 * This function returns the Status of the specified check limit.
Davidroid 16:27d3d95c8593 1416 * The value indicate if the check is fail or not.
Davidroid 16:27d3d95c8593 1417 * The limit check is identified with the LimitCheckId.
Davidroid 16:27d3d95c8593 1418 *
Davidroid 16:27d3d95c8593 1419 * @note This function doesn't Access to the device
Davidroid 16:27d3d95c8593 1420 *
Davidroid 16:27d3d95c8593 1421 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1422 * @param limit_check_id Limit Check ID
Davidroid 16:27d3d95c8593 1423 (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ).
Davidroid 16:27d3d95c8593 1424 * @param p_limit_check_status Pointer to the
Davidroid 16:27d3d95c8593 1425 Limit Check Status of the given check limit.
Davidroid 16:27d3d95c8593 1426 * LimitCheckStatus :
Davidroid 16:27d3d95c8593 1427 * 0 the check is not fail
Davidroid 16:27d3d95c8593 1428 * 1 the check if fail or not enabled
Davidroid 16:27d3d95c8593 1429 *
Davidroid 16:27d3d95c8593 1430 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1431 * @return VL53L0X_ERROR_INVALID_PARAMS This error is
Davidroid 16:27d3d95c8593 1432 returned when LimitCheckId value is out of range.
Davidroid 16:27d3d95c8593 1433 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1434 */
Davidroid 16:27d3d95c8593 1435 VL53L0X_Error VL53L0X_get_limit_check_status(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1436 uint16_t limit_check_id, uint8_t *p_limit_check_status);
Davidroid 16:27d3d95c8593 1437
Davidroid 16:27d3d95c8593 1438 /**
Davidroid 16:27d3d95c8593 1439 * Get continuous mode Inter-Measurement period in milliseconds
Davidroid 16:27d3d95c8593 1440 *
Davidroid 16:27d3d95c8593 1441 * @par Function Description
Davidroid 16:27d3d95c8593 1442 * When trying to set too short time return INVALID_PARAMS minimal value
Davidroid 16:27d3d95c8593 1443 *
Davidroid 16:27d3d95c8593 1444 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1445 *
Davidroid 16:27d3d95c8593 1446 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1447 * @param p_inter_measurement_period_milli_seconds Pointer to programmed
Davidroid 16:27d3d95c8593 1448 * Inter-Measurement Period in milliseconds.
Davidroid 16:27d3d95c8593 1449 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1450 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1451 */
Davidroid 16:27d3d95c8593 1452 VL53L0X_Error VL53L0X_get_inter_measurement_period_milli_seconds(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1453 uint32_t *p_inter_measurement_period_milli_seconds);
Davidroid 16:27d3d95c8593 1454
Davidroid 16:27d3d95c8593 1455 /**
Davidroid 16:27d3d95c8593 1456 * Program continuous mode Inter-Measurement period in milliseconds
Davidroid 16:27d3d95c8593 1457 *
Davidroid 16:27d3d95c8593 1458 * @par Function Description
Davidroid 16:27d3d95c8593 1459 * When trying to set too short time return INVALID_PARAMS minimal value
Davidroid 16:27d3d95c8593 1460 *
Davidroid 16:27d3d95c8593 1461 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1462 *
Davidroid 16:27d3d95c8593 1463 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1464 * @param inter_measurement_period_milli_seconds Inter-Measurement Period in ms.
Davidroid 16:27d3d95c8593 1465 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1466 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1467 */
Davidroid 16:27d3d95c8593 1468 VL53L0X_Error VL53L0X_set_inter_measurement_period_milli_seconds(
Davidroid 16:27d3d95c8593 1469 VL53L0X_DEV dev, uint32_t inter_measurement_period_milli_seconds);
Davidroid 16:27d3d95c8593 1470
Davidroid 16:27d3d95c8593 1471 /**
Davidroid 16:27d3d95c8593 1472 * @brief Set new device address
Davidroid 16:27d3d95c8593 1473 *
Davidroid 16:27d3d95c8593 1474 * After completion the device will answer to the new address programmed.
Davidroid 16:27d3d95c8593 1475 * This function should be called when several devices are used in parallel
Davidroid 16:27d3d95c8593 1476 * before start programming the sensor.
Davidroid 16:27d3d95c8593 1477 * When a single device us used, there is no need to call this function.
Davidroid 16:27d3d95c8593 1478 *
Davidroid 16:27d3d95c8593 1479 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1480 *
Davidroid 16:27d3d95c8593 1481 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1482 * @param device_address The new Device address
Davidroid 16:27d3d95c8593 1483 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1484 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1485 */
Davidroid 16:27d3d95c8593 1486 VL53L0X_Error VL53L0X_set_device_address(VL53L0X_DEV dev, uint8_t device_address);
Davidroid 16:27d3d95c8593 1487
Davidroid 16:27d3d95c8593 1488 /**
Davidroid 16:27d3d95c8593 1489 * @brief Do an hard reset or soft reset (depending on implementation) of the
Davidroid 16:27d3d95c8593 1490 * device \nAfter call of this function, device must be in same state as right
Davidroid 16:27d3d95c8593 1491 * after a power-up sequence.This function will change the VL53L0X_State to
Davidroid 16:27d3d95c8593 1492 * VL53L0X_STATE_POWERDOWN.
Davidroid 16:27d3d95c8593 1493 *
Davidroid 16:27d3d95c8593 1494 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1495 *
Davidroid 16:27d3d95c8593 1496 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1497 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1498 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1499 */
Davidroid 16:27d3d95c8593 1500 VL53L0X_Error VL53L0X_reset_device(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 1501
Davidroid 16:27d3d95c8593 1502 /**
Davidroid 16:27d3d95c8593 1503 * @brief Get setup of Wrap around Check
Davidroid 16:27d3d95c8593 1504 *
Davidroid 16:27d3d95c8593 1505 * @par Function Description
Davidroid 16:27d3d95c8593 1506 * This function get the wrapAround check enable parameters
Davidroid 16:27d3d95c8593 1507 *
Davidroid 16:27d3d95c8593 1508 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1509 *
Davidroid 16:27d3d95c8593 1510 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1511 * @param p_wrap_around_check_enable Pointer to the Wrap around Check state
Davidroid 16:27d3d95c8593 1512 * 0=disabled or 1 = enabled
Davidroid 16:27d3d95c8593 1513 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1514 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1515 */
Davidroid 16:27d3d95c8593 1516 VL53L0X_Error VL53L0X_get_wrap_around_check_enable(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1517 uint8_t *p_wrap_around_check_enable);
Davidroid 16:27d3d95c8593 1518
Davidroid 16:27d3d95c8593 1519 /**
Davidroid 16:27d3d95c8593 1520 * @brief Enable (or disable) Wrap around Check
Davidroid 16:27d3d95c8593 1521 *
Davidroid 16:27d3d95c8593 1522 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1523 *
Davidroid 16:27d3d95c8593 1524 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1525 * @param wrap_around_check_enable Wrap around Check to be set
Davidroid 16:27d3d95c8593 1526 * 0=disabled, other = enabled
Davidroid 16:27d3d95c8593 1527 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1528 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1529 */
Davidroid 16:27d3d95c8593 1530 VL53L0X_Error VL53L0X_set_wrap_around_check_enable(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1531 uint8_t wrap_around_check_enable);
Davidroid 16:27d3d95c8593 1532
Davidroid 16:27d3d95c8593 1533 /**
Davidroid 16:27d3d95c8593 1534 * @brief Gets the VCSEL pulse period.
Davidroid 16:27d3d95c8593 1535 *
Davidroid 16:27d3d95c8593 1536 * @par Function Description
Davidroid 16:27d3d95c8593 1537 * This function retrieves the VCSEL pulse period for the given period type.
Davidroid 16:27d3d95c8593 1538 *
Davidroid 16:27d3d95c8593 1539 * @note This function Accesses the device
Davidroid 16:27d3d95c8593 1540 *
Davidroid 16:27d3d95c8593 1541 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1542 * @param vcsel_period_type VCSEL period identifier (pre-range|final).
Davidroid 16:27d3d95c8593 1543 * @param p_vcsel_pulse_period_pclk Pointer to VCSEL period value.
Davidroid 16:27d3d95c8593 1544 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1545 * @return VL53L0X_ERROR_INVALID_PARAMS Error VcselPeriodType parameter not
Davidroid 16:27d3d95c8593 1546 * supported.
Davidroid 16:27d3d95c8593 1547 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1548 */
Davidroid 16:27d3d95c8593 1549 VL53L0X_Error VL53L0X_get_vcsel_pulse_period(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1550 VL53L0X_VcselPeriod vcsel_period_type, uint8_t *p_vcsel_pulse_period_pclk);
Davidroid 16:27d3d95c8593 1551
Davidroid 16:27d3d95c8593 1552 /**
Davidroid 16:27d3d95c8593 1553 * @brief Sets the VCSEL pulse period.
Davidroid 16:27d3d95c8593 1554 *
Davidroid 16:27d3d95c8593 1555 * @par Function Description
Davidroid 16:27d3d95c8593 1556 * This function retrieves the VCSEL pulse period for the given period type.
Davidroid 16:27d3d95c8593 1557 *
Davidroid 16:27d3d95c8593 1558 * @note This function Accesses the device
Davidroid 16:27d3d95c8593 1559 *
Davidroid 16:27d3d95c8593 1560 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1561 * @param vcsel_period_type VCSEL period identifier (pre-range|final).
Davidroid 16:27d3d95c8593 1562 * @param vcsel_pulse_period VCSEL period value
Davidroid 16:27d3d95c8593 1563 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1564 * @return VL53L0X_ERROR_INVALID_PARAMS Error VcselPeriodType parameter not
Davidroid 16:27d3d95c8593 1565 * supported.
Davidroid 16:27d3d95c8593 1566 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1567 */
Davidroid 16:27d3d95c8593 1568 VL53L0X_Error VL53L0X_set_vcsel_pulse_period(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1569 VL53L0X_VcselPeriod vcsel_period_type, uint8_t vcsel_pulse_period);
Davidroid 16:27d3d95c8593 1570
Davidroid 16:27d3d95c8593 1571 /**
Davidroid 16:27d3d95c8593 1572 * @brief Set low and high Interrupt thresholds for a given mode
Davidroid 16:27d3d95c8593 1573 * (ranging, ALS, ...) for a given device
Davidroid 16:27d3d95c8593 1574 *
Davidroid 16:27d3d95c8593 1575 * @par Function Description
Davidroid 16:27d3d95c8593 1576 * Set low and high Interrupt thresholds for a given mode (ranging, ALS, ...)
Davidroid 16:27d3d95c8593 1577 * for a given device
Davidroid 16:27d3d95c8593 1578 *
Davidroid 16:27d3d95c8593 1579 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1580 *
Davidroid 16:27d3d95c8593 1581 * @note DeviceMode is ignored for the current device
Davidroid 16:27d3d95c8593 1582 *
Davidroid 16:27d3d95c8593 1583 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1584 * @param device_mode Device Mode for which change thresholds
Davidroid 16:27d3d95c8593 1585 * @param threshold_low Low threshold (mm, lux ..., depending on the mode)
Davidroid 16:27d3d95c8593 1586 * @param threshold_high High threshold (mm, lux ..., depending on the mode)
Davidroid 16:27d3d95c8593 1587 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1588 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1589 */
Davidroid 16:27d3d95c8593 1590 VL53L0X_Error VL53L0X_set_interrupt_thresholds(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1591 VL53L0X_DeviceModes device_mode, FixPoint1616_t threshold_low,
Davidroid 16:27d3d95c8593 1592 FixPoint1616_t threshold_high);
Davidroid 16:27d3d95c8593 1593
Davidroid 16:27d3d95c8593 1594 /**
Davidroid 16:27d3d95c8593 1595 * @brief Get high and low Interrupt thresholds for a given mode
Davidroid 16:27d3d95c8593 1596 * (ranging, ALS, ...) for a given device
Davidroid 16:27d3d95c8593 1597 *
Davidroid 16:27d3d95c8593 1598 * @par Function Description
Davidroid 16:27d3d95c8593 1599 * Get high and low Interrupt thresholds for a given mode (ranging, ALS, ...)
Davidroid 16:27d3d95c8593 1600 * for a given device
Davidroid 16:27d3d95c8593 1601 *
Davidroid 16:27d3d95c8593 1602 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1603 *
Davidroid 16:27d3d95c8593 1604 * @note DeviceMode is ignored for the current device
Davidroid 16:27d3d95c8593 1605 *
Davidroid 16:27d3d95c8593 1606 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1607 * @param device_mode Device Mode from which read thresholds
Davidroid 16:27d3d95c8593 1608 * @param p_threshold_low Low threshold (mm, lux ..., depending on the mode)
Davidroid 16:27d3d95c8593 1609 * @param p_threshold_high High threshold (mm, lux ..., depending on the mode)
Davidroid 16:27d3d95c8593 1610 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1611 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1612 */
Davidroid 16:27d3d95c8593 1613 VL53L0X_Error VL53L0X_get_interrupt_thresholds(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1614 VL53L0X_DeviceModes device_mode, FixPoint1616_t *p_threshold_low,
Davidroid 16:27d3d95c8593 1615 FixPoint1616_t *p_threshold_high);
Davidroid 16:27d3d95c8593 1616
Davidroid 16:27d3d95c8593 1617 /**
Davidroid 16:27d3d95c8593 1618 * @brief Reads the Device information for given Device
Davidroid 16:27d3d95c8593 1619 *
Davidroid 16:27d3d95c8593 1620 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1621 *
Davidroid 16:27d3d95c8593 1622 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1623 * @param p_VL53L0X_device_info Pointer to current device info for a given
Davidroid 16:27d3d95c8593 1624 * Device
Davidroid 16:27d3d95c8593 1625 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1626 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1627 */
Davidroid 16:27d3d95c8593 1628 VL53L0X_Error VL53L0X_get_device_info(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1629 VL53L0X_DeviceInfo_t *p_VL53L0X_device_info);
Davidroid 16:27d3d95c8593 1630
Davidroid 16:27d3d95c8593 1631 /**
Davidroid 16:27d3d95c8593 1632 * @brief Gets the (on/off) state of all sequence steps.
Davidroid 16:27d3d95c8593 1633 *
Davidroid 16:27d3d95c8593 1634 * @par Function Description
Davidroid 16:27d3d95c8593 1635 * This function retrieves the state of all sequence step in the scheduler.
Davidroid 16:27d3d95c8593 1636 *
Davidroid 16:27d3d95c8593 1637 * @note This function Accesses the device
Davidroid 16:27d3d95c8593 1638 *
Davidroid 16:27d3d95c8593 1639 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1640 * @param p_scheduler_sequence_steps Pointer to struct containing result.
Davidroid 16:27d3d95c8593 1641 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1642 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1643 */
Davidroid 16:27d3d95c8593 1644 VL53L0X_Error VL53L0X_get_sequence_step_enables(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1645 VL53L0X_SchedulerSequenceSteps_t *p_scheduler_sequence_steps);
Davidroid 16:27d3d95c8593 1646
Davidroid 16:27d3d95c8593 1647 /**
Davidroid 16:27d3d95c8593 1648 * @brief Sets the (on/off) state of a requested sequence step.
Davidroid 16:27d3d95c8593 1649 *
Davidroid 16:27d3d95c8593 1650 * @par Function Description
Davidroid 16:27d3d95c8593 1651 * This function enables/disables a requested sequence step.
Davidroid 16:27d3d95c8593 1652 *
Davidroid 16:27d3d95c8593 1653 * @note This function Accesses the device
Davidroid 16:27d3d95c8593 1654 *
Davidroid 16:27d3d95c8593 1655 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1656 * @param sequence_step_id Sequence step identifier.
Davidroid 16:27d3d95c8593 1657 * @param sequence_step_enabled Demanded state {0=Off,1=On}
Davidroid 16:27d3d95c8593 1658 * is enabled.
Davidroid 16:27d3d95c8593 1659 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1660 * @return VL53L0X_ERROR_INVALID_PARAMS Error SequenceStepId parameter not
Davidroid 16:27d3d95c8593 1661 * supported.
Davidroid 16:27d3d95c8593 1662 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1663 */
Davidroid 16:27d3d95c8593 1664 VL53L0X_Error VL53L0X_set_sequence_step_enable(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1665 VL53L0X_SequenceStepId sequence_step_id, uint8_t sequence_step_enabled);
Davidroid 16:27d3d95c8593 1666
Davidroid 16:27d3d95c8593 1667 /**
Davidroid 16:27d3d95c8593 1668 * @brief Gets the fraction enable parameter indicating the resolution of
Davidroid 16:27d3d95c8593 1669 * range measurements.
Davidroid 16:27d3d95c8593 1670 *
Davidroid 16:27d3d95c8593 1671 * @par Function Description
Davidroid 16:27d3d95c8593 1672 * Gets the fraction enable state, which translates to the resolution of
Davidroid 16:27d3d95c8593 1673 * range measurements as follows :Enabled:=0.25mm resolution,
Davidroid 16:27d3d95c8593 1674 * Not Enabled:=1mm resolution.
Davidroid 16:27d3d95c8593 1675 *
Davidroid 16:27d3d95c8593 1676 * @note This function Accesses the device
Davidroid 16:27d3d95c8593 1677 *
Davidroid 16:27d3d95c8593 1678 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1679 * @param p_enabled Output Parameter reporting the fraction enable state.
Davidroid 16:27d3d95c8593 1680 *
Davidroid 16:27d3d95c8593 1681 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1682 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1683 */
Davidroid 16:27d3d95c8593 1684 VL53L0X_Error VL53L0X_get_fraction_enable(VL53L0X_DEV dev, uint8_t *p_enabled);
Davidroid 16:27d3d95c8593 1685
Davidroid 16:27d3d95c8593 1686 /**
Davidroid 16:27d3d95c8593 1687 * @brief Sets the resolution of range measurements.
Davidroid 16:27d3d95c8593 1688 * @par Function Description
Davidroid 16:27d3d95c8593 1689 * Set resolution of range measurements to either 0.25mm if
Davidroid 16:27d3d95c8593 1690 * fraction enabled or 1mm if not enabled.
Davidroid 16:27d3d95c8593 1691 *
Davidroid 16:27d3d95c8593 1692 * @note This function Accesses the device
Davidroid 16:27d3d95c8593 1693 *
Davidroid 16:27d3d95c8593 1694 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1695 * @param enable Enable high resolution
Davidroid 16:27d3d95c8593 1696 *
Davidroid 16:27d3d95c8593 1697 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1698 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1699 */
Davidroid 16:27d3d95c8593 1700 VL53L0X_Error VL53L0X_set_range_fraction_enable(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1701 uint8_t enable);
Davidroid 16:27d3d95c8593 1702
Davidroid 16:27d3d95c8593 1703 /**
Davidroid 16:27d3d95c8593 1704 * @brief Return the VL53L0X PAL Implementation Version
Davidroid 16:27d3d95c8593 1705 *
Davidroid 16:27d3d95c8593 1706 * @note This function doesn't access to the device
Davidroid 16:27d3d95c8593 1707 *
Davidroid 16:27d3d95c8593 1708 * @param p_version Pointer to current PAL Implementation Version
Davidroid 16:27d3d95c8593 1709 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1710 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1711 */
Davidroid 16:27d3d95c8593 1712 VL53L0X_Error VL53L0X_get_version(VL53L0X_Version_t *p_version);
Davidroid 16:27d3d95c8593 1713
Davidroid 16:27d3d95c8593 1714 /**
Davidroid 16:27d3d95c8593 1715 * @brief Reads the Product Revision for a for given Device
Davidroid 16:27d3d95c8593 1716 * This function can be used to distinguish cut1.0 from cut1.1.
Davidroid 16:27d3d95c8593 1717 *
Davidroid 16:27d3d95c8593 1718 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1719 *
Davidroid 16:27d3d95c8593 1720 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1721 * @param p_product_revision_major Pointer to Product Revision Major
Davidroid 16:27d3d95c8593 1722 * for a given Device
Davidroid 16:27d3d95c8593 1723 * @param p_product_revision_minor Pointer to Product Revision Minor
Davidroid 16:27d3d95c8593 1724 * for a given Device
Davidroid 16:27d3d95c8593 1725 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1726 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1727 */
Davidroid 16:27d3d95c8593 1728 VL53L0X_Error VL53L0X_get_product_revision(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1729 uint8_t *p_product_revision_major, uint8_t *p_product_revision_minor);
Davidroid 16:27d3d95c8593 1730
Davidroid 16:27d3d95c8593 1731 /**
Davidroid 16:27d3d95c8593 1732 * @brief Retrieve current device parameters
Davidroid 16:27d3d95c8593 1733 * @par Function Description
Davidroid 16:27d3d95c8593 1734 * Get actual parameters of the device
Davidroid 16:27d3d95c8593 1735 * @li Then start ranging operation.
Davidroid 16:27d3d95c8593 1736 *
Davidroid 16:27d3d95c8593 1737 * @note This function Access to the device
Davidroid 16:27d3d95c8593 1738 *
Davidroid 16:27d3d95c8593 1739 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1740 * @param p_device_parameters Pointer to store current device parameters.
Davidroid 16:27d3d95c8593 1741 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1742 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1743 */
Davidroid 16:27d3d95c8593 1744 VL53L0X_Error VL53L0X_get_device_parameters(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1745 VL53L0X_DeviceParameters_t *p_device_parameters);
Davidroid 16:27d3d95c8593 1746
Davidroid 16:27d3d95c8593 1747 /**
Davidroid 16:27d3d95c8593 1748 * @brief Human readable error string for current PAL error status
Davidroid 16:27d3d95c8593 1749 *
Davidroid 16:27d3d95c8593 1750 * @note This function doesn't access to the device
Davidroid 16:27d3d95c8593 1751 *
Davidroid 16:27d3d95c8593 1752 * @param pal_error_code The error code as stored on @a VL53L0X_Error
Davidroid 16:27d3d95c8593 1753 * @param p_pal_error_string The error string corresponding to the
Davidroid 16:27d3d95c8593 1754 * PalErrorCode
Davidroid 16:27d3d95c8593 1755 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1756 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1757 */
Davidroid 16:27d3d95c8593 1758 VL53L0X_Error VL53L0X_get_pal_error_string(VL53L0X_Error pal_error_code,
Davidroid 16:27d3d95c8593 1759 char *p_pal_error_string);
Davidroid 16:27d3d95c8593 1760
Davidroid 16:27d3d95c8593 1761 /**
Davidroid 16:27d3d95c8593 1762 * @brief Return the PAL Specification Version used for the current
Davidroid 16:27d3d95c8593 1763 * implementation.
Davidroid 16:27d3d95c8593 1764 *
Davidroid 16:27d3d95c8593 1765 * @note This function doesn't access to the device
Davidroid 16:27d3d95c8593 1766 *
Davidroid 16:27d3d95c8593 1767 * @param p_pal_spec_version Pointer to current PAL Specification Version
Davidroid 16:27d3d95c8593 1768 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1769 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1770 */
Davidroid 16:27d3d95c8593 1771 VL53L0X_Error VL53L0X_get_pal_spec_version(
Davidroid 16:27d3d95c8593 1772 VL53L0X_Version_t *p_pal_spec_version);
Davidroid 16:27d3d95c8593 1773
Davidroid 16:27d3d95c8593 1774 /**
Davidroid 16:27d3d95c8593 1775 * @brief Reads the internal state of the PAL for a given Device
Davidroid 16:27d3d95c8593 1776 *
Davidroid 16:27d3d95c8593 1777 * @note This function doesn't access to the device
Davidroid 16:27d3d95c8593 1778 *
Davidroid 16:27d3d95c8593 1779 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1780 * @param p_pal_state Pointer to current state of the PAL for a
Davidroid 16:27d3d95c8593 1781 * given Device
Davidroid 16:27d3d95c8593 1782 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1783 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1784 */
Davidroid 16:27d3d95c8593 1785 VL53L0X_Error VL53L0X_get_pal_state(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1786 VL53L0X_State *p_pal_state);
Davidroid 16:27d3d95c8593 1787
Davidroid 16:27d3d95c8593 1788 /**
Davidroid 16:27d3d95c8593 1789 * @brief Human readable PAL State string
Davidroid 16:27d3d95c8593 1790 *
Davidroid 16:27d3d95c8593 1791 * @note This function doesn't access to the device
Davidroid 16:27d3d95c8593 1792 *
Davidroid 16:27d3d95c8593 1793 * @param pal_state_code The State code as stored on @a VL53L0X_State
Davidroid 16:27d3d95c8593 1794 * @param p_pal_state_string The State string corresponding to the
Davidroid 16:27d3d95c8593 1795 * PalStateCode
Davidroid 16:27d3d95c8593 1796 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1797 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1798 */
Davidroid 16:27d3d95c8593 1799 VL53L0X_Error VL53L0X_get_pal_state_string(VL53L0X_State pal_state_code,
Davidroid 16:27d3d95c8593 1800 char *p_pal_state_string);
Davidroid 16:27d3d95c8593 1801
Davidroid 16:27d3d95c8593 1802 /*** End High level API ***/
Davidroid 16:27d3d95c8593 1803 private:
Davidroid 16:27d3d95c8593 1804 /* api.h functions */
Davidroid 16:27d3d95c8593 1805
Davidroid 16:27d3d95c8593 1806 /**
Davidroid 16:27d3d95c8593 1807 * @brief Wait for device booted after chip enable (hardware standby)
Davidroid 16:27d3d95c8593 1808 * This function can be run only when VL53L0X_State is VL53L0X_STATE_POWERDOWN.
Davidroid 16:27d3d95c8593 1809 *
Davidroid 16:27d3d95c8593 1810 * @note This function is not Implemented
Davidroid 16:27d3d95c8593 1811 *
Davidroid 16:27d3d95c8593 1812 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1813 * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented
Davidroid 16:27d3d95c8593 1814 *
Davidroid 16:27d3d95c8593 1815 */
Davidroid 16:27d3d95c8593 1816 VL53L0X_Error VL53L0X_wait_device_booted(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 1817
Davidroid 16:27d3d95c8593 1818
Davidroid 16:27d3d95c8593 1819 VL53L0X_Error sequence_step_enabled(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1820 VL53L0X_SequenceStepId sequence_step_id, uint8_t sequence_config,
Davidroid 16:27d3d95c8593 1821 uint8_t *p_sequence_step_enabled);
Davidroid 16:27d3d95c8593 1822
Davidroid 16:27d3d95c8593 1823 VL53L0X_Error VL53L0X_check_and_load_interrupt_settings(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1824 uint8_t start_not_stopflag);
Davidroid 16:27d3d95c8593 1825
Davidroid 16:27d3d95c8593 1826
Davidroid 16:27d3d95c8593 1827 /* api_core.h functions */
Davidroid 16:27d3d95c8593 1828
Davidroid 16:27d3d95c8593 1829 VL53L0X_Error VL53L0X_get_info_from_device(VL53L0X_DEV dev, uint8_t option);
Davidroid 16:27d3d95c8593 1830
Davidroid 16:27d3d95c8593 1831 VL53L0X_Error VL53L0X_device_read_strobe(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 1832
Davidroid 16:27d3d95c8593 1833 VL53L0X_Error wrapped_VL53L0X_get_measurement_timing_budget_micro_seconds(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1834 uint32_t *p_measurement_timing_budget_micro_seconds);
Davidroid 16:27d3d95c8593 1835
Davidroid 16:27d3d95c8593 1836 VL53L0X_Error wrapped_VL53L0X_get_vcsel_pulse_period(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1837 VL53L0X_VcselPeriod vcsel_period_type, uint8_t *p_vcsel_pulse_period_pclk);
Davidroid 16:27d3d95c8593 1838
Davidroid 16:27d3d95c8593 1839 uint8_t VL53L0X_decode_vcsel_period(uint8_t vcsel_period_reg);
Davidroid 16:27d3d95c8593 1840
Davidroid 16:27d3d95c8593 1841 uint32_t VL53L0X_decode_timeout(uint16_t encoded_timeout);
Davidroid 16:27d3d95c8593 1842
Davidroid 16:27d3d95c8593 1843 uint32_t VL53L0X_calc_timeout_us(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1844 uint16_t timeout_period_mclks,
Davidroid 16:27d3d95c8593 1845 uint8_t vcsel_period_pclks);
Davidroid 16:27d3d95c8593 1846
Davidroid 16:27d3d95c8593 1847 uint32_t VL53L0X_calc_macro_period_ps(VL53L0X_DEV dev, uint8_t vcsel_period_pclks);
Davidroid 16:27d3d95c8593 1848
Davidroid 16:27d3d95c8593 1849 VL53L0X_Error VL53L0X_measurement_poll_for_completion(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 1850
Davidroid 16:27d3d95c8593 1851 VL53L0X_Error VL53L0X_load_tuning_settings(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1852 uint8_t *p_tuning_setting_buffer);
Davidroid 16:27d3d95c8593 1853
Davidroid 16:27d3d95c8593 1854 VL53L0X_Error VL53L0X_get_pal_range_status(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1855 uint8_t device_range_status,
Davidroid 16:27d3d95c8593 1856 FixPoint1616_t signal_rate,
Davidroid 16:27d3d95c8593 1857 uint16_t effective_spad_rtn_count,
Davidroid 16:27d3d95c8593 1858 VL53L0X_RangingMeasurementData_t *p_ranging_measurement_data,
Davidroid 16:27d3d95c8593 1859 uint8_t *p_pal_range_status);
Davidroid 16:27d3d95c8593 1860 VL53L0X_Error VL53L0X_calc_sigma_estimate(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1861 VL53L0X_RangingMeasurementData_t *p_ranging_measurement_data,
Davidroid 16:27d3d95c8593 1862 FixPoint1616_t *p_sigma_estimate,
Davidroid 16:27d3d95c8593 1863 uint32_t *p_dmax_mm);
Davidroid 16:27d3d95c8593 1864 uint32_t VL53L0X_calc_timeout_mclks(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1865 uint32_t timeout_period_us,
Davidroid 16:27d3d95c8593 1866 uint8_t vcsel_period_pclks);
Davidroid 16:27d3d95c8593 1867 uint32_t VL53L0X_isqrt(uint32_t num);
Davidroid 16:27d3d95c8593 1868
Davidroid 16:27d3d95c8593 1869 uint32_t VL53L0X_quadrature_sum(uint32_t a, uint32_t b);
Davidroid 16:27d3d95c8593 1870
Davidroid 16:27d3d95c8593 1871 VL53L0X_Error VL53L0X_calc_dmax(
Davidroid 16:27d3d95c8593 1872 VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1873 FixPoint1616_t total_signal_rate_mcps,
Davidroid 16:27d3d95c8593 1874 FixPoint1616_t total_corr_signal_rate_mcps,
Davidroid 16:27d3d95c8593 1875 FixPoint1616_t pw_mult,
Davidroid 16:27d3d95c8593 1876 uint32_t sigma_estimate_p1,
Davidroid 16:27d3d95c8593 1877 FixPoint1616_t sigma_estimate_p2,
Davidroid 16:27d3d95c8593 1878 uint32_t peak_vcsel_duration_us,
Davidroid 16:27d3d95c8593 1879 uint32_t *pd_max_mm);
Davidroid 16:27d3d95c8593 1880 VL53L0X_Error wrapped_VL53L0X_set_measurement_timing_budget_micro_seconds(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1881 uint32_t measurement_timing_budget_micro_seconds);
Davidroid 16:27d3d95c8593 1882 VL53L0X_Error get_sequence_step_timeout(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1883 VL53L0X_SequenceStepId sequence_step_id,
Davidroid 16:27d3d95c8593 1884 uint32_t *p_time_out_micro_secs);
Davidroid 16:27d3d95c8593 1885 VL53L0X_Error set_sequence_step_timeout(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1886 VL53L0X_SequenceStepId sequence_step_id,
Davidroid 16:27d3d95c8593 1887 uint32_t timeout_micro_secs);
Davidroid 16:27d3d95c8593 1888 uint16_t VL53L0X_encode_timeout(uint32_t timeout_macro_clks);
Davidroid 16:27d3d95c8593 1889 VL53L0X_Error wrapped_VL53L0X_set_vcsel_pulse_period(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1890 VL53L0X_VcselPeriod vcsel_period_type, uint8_t vcsel_pulse_period_pclk);
Davidroid 16:27d3d95c8593 1891 uint8_t lv53l0x_encode_vcsel_period(uint8_t vcsel_period_pclks);
Davidroid 16:27d3d95c8593 1892
Davidroid 16:27d3d95c8593 1893 /* api_calibration.h functions */
Davidroid 16:27d3d95c8593 1894 VL53L0X_Error VL53L0X_apply_offset_adjustment(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 1895 VL53L0X_Error wrapped_VL53L0X_get_offset_calibration_data_micro_meter(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1896 int32_t *p_offset_calibration_data_micro_meter);
Davidroid 16:27d3d95c8593 1897 VL53L0X_Error wrapped_VL53L0X_set_offset_calibration_data_micro_meter(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1898 int32_t offset_calibration_data_micro_meter);
Davidroid 16:27d3d95c8593 1899 VL53L0X_Error wrapped_VL53L0X_perform_ref_spad_management(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1900 uint32_t *ref_spad_count,
Davidroid 16:27d3d95c8593 1901 uint8_t *is_aperture_spads);
Davidroid 16:27d3d95c8593 1902 VL53L0X_Error VL53L0X_perform_ref_calibration(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1903 uint8_t *p_vhv_settings, uint8_t *p_phase_cal, uint8_t get_data_enable);
Davidroid 16:27d3d95c8593 1904 VL53L0X_Error VL53L0X_perform_vhv_calibration(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1905 uint8_t *p_vhv_settings, const uint8_t get_data_enable,
Davidroid 16:27d3d95c8593 1906 const uint8_t restore_config);
Davidroid 16:27d3d95c8593 1907 VL53L0X_Error VL53L0X_perform_single_ref_calibration(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1908 uint8_t vhv_init_byte);
Davidroid 16:27d3d95c8593 1909 VL53L0X_Error VL53L0X_ref_calibration_io(VL53L0X_DEV dev, uint8_t read_not_write,
Davidroid 16:27d3d95c8593 1910 uint8_t vhv_settings, uint8_t phase_cal,
Davidroid 16:27d3d95c8593 1911 uint8_t *p_vhv_settings, uint8_t *p_phase_cal,
Davidroid 16:27d3d95c8593 1912 const uint8_t vhv_enable, const uint8_t phase_enable);
Davidroid 16:27d3d95c8593 1913 VL53L0X_Error VL53L0X_perform_phase_calibration(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1914 uint8_t *p_phase_cal, const uint8_t get_data_enable,
Davidroid 16:27d3d95c8593 1915 const uint8_t restore_config);
Davidroid 16:27d3d95c8593 1916 VL53L0X_Error enable_ref_spads(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1917 uint8_t aperture_spads,
Davidroid 16:27d3d95c8593 1918 uint8_t good_spad_array[],
Davidroid 16:27d3d95c8593 1919 uint8_t spad_array[],
Davidroid 16:27d3d95c8593 1920 uint32_t size,
Davidroid 16:27d3d95c8593 1921 uint32_t start,
Davidroid 16:27d3d95c8593 1922 uint32_t offset,
Davidroid 16:27d3d95c8593 1923 uint32_t spad_count,
Davidroid 16:27d3d95c8593 1924 uint32_t *p_last_spad);
Davidroid 16:27d3d95c8593 1925 void get_next_good_spad(uint8_t good_spad_array[], uint32_t size,
Davidroid 16:27d3d95c8593 1926 uint32_t curr, int32_t *p_next);
Davidroid 16:27d3d95c8593 1927 uint8_t is_aperture(uint32_t spad_index);
Davidroid 16:27d3d95c8593 1928 VL53L0X_Error enable_spad_bit(uint8_t spad_array[], uint32_t size,
Davidroid 16:27d3d95c8593 1929 uint32_t spad_index);
Davidroid 16:27d3d95c8593 1930 VL53L0X_Error set_ref_spad_map(VL53L0X_DEV dev, uint8_t *p_ref_spad_array);
Davidroid 16:27d3d95c8593 1931 VL53L0X_Error get_ref_spad_map(VL53L0X_DEV dev, uint8_t *p_ref_spad_array);
Davidroid 16:27d3d95c8593 1932 VL53L0X_Error perform_ref_signal_measurement(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1933 uint16_t *p_ref_signal_rate);
Davidroid 16:27d3d95c8593 1934 VL53L0X_Error wrapped_VL53L0X_set_reference_spads(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1935 uint32_t count, uint8_t is_aperture_spads);
Davidroid 16:27d3d95c8593 1936
Davidroid 16:27d3d95c8593 1937 /* api_strings.h functions */
Davidroid 16:27d3d95c8593 1938 VL53L0X_Error wrapped_VL53L0X_get_device_info(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1939 VL53L0X_DeviceInfo_t *p_VL53L0X_device_info);
Davidroid 16:27d3d95c8593 1940 VL53L0X_Error VL53L0X_check_part_used(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 1941 uint8_t *revision,
Davidroid 16:27d3d95c8593 1942 VL53L0X_DeviceInfo_t *p_VL53L0X_device_info);
Davidroid 16:27d3d95c8593 1943
Davidroid 16:27d3d95c8593 1944 /* Read function of the ID device */
Davidroid 16:27d3d95c8593 1945 // virtual int read_id();
Davidroid 16:27d3d95c8593 1946 virtual int read_id(uint8_t *id);
Davidroid 16:27d3d95c8593 1947
Davidroid 16:27d3d95c8593 1948 VL53L0X_Error wait_measurement_data_ready(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 1949
Davidroid 16:27d3d95c8593 1950 VL53L0X_Error wait_stop_completed(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 1951
Davidroid 16:27d3d95c8593 1952 /* Write and read functions from I2C */
Davidroid 16:27d3d95c8593 1953 /**
Davidroid 16:27d3d95c8593 1954 * Write single byte register
Davidroid 16:27d3d95c8593 1955 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1956 * @param index The register index
Davidroid 16:27d3d95c8593 1957 * @param data 8 bit register data
Davidroid 16:27d3d95c8593 1958 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1959 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1960 */
Davidroid 16:27d3d95c8593 1961 VL53L0X_Error VL53L0X_write_byte(VL53L0X_DEV dev, uint8_t index, uint8_t data);
Davidroid 16:27d3d95c8593 1962 /**
Davidroid 16:27d3d95c8593 1963 * Write word register
Davidroid 16:27d3d95c8593 1964 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1965 * @param index The register index
Davidroid 16:27d3d95c8593 1966 * @param data 16 bit register data
Davidroid 16:27d3d95c8593 1967 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1968 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1969 */
Davidroid 16:27d3d95c8593 1970 VL53L0X_Error VL53L0X_write_word(VL53L0X_DEV dev, uint8_t index, uint16_t data);
Davidroid 16:27d3d95c8593 1971 /**
Davidroid 16:27d3d95c8593 1972 * Write double word (4 byte) register
Davidroid 16:27d3d95c8593 1973 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1974 * @param index The register index
Davidroid 16:27d3d95c8593 1975 * @param data 32 bit register data
Davidroid 16:27d3d95c8593 1976 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1977 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1978 */
Davidroid 16:27d3d95c8593 1979 VL53L0X_Error VL53L0X_write_dword(VL53L0X_DEV dev, uint8_t index, uint32_t data);
Davidroid 16:27d3d95c8593 1980 /**
Davidroid 16:27d3d95c8593 1981 * Read single byte register
Davidroid 16:27d3d95c8593 1982 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1983 * @param index The register index
Davidroid 16:27d3d95c8593 1984 * @param data pointer to 8 bit data
Davidroid 16:27d3d95c8593 1985 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1986 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1987 */
Davidroid 16:27d3d95c8593 1988 VL53L0X_Error VL53L0X_read_byte(VL53L0X_DEV dev, uint8_t index, uint8_t *p_data);
Davidroid 16:27d3d95c8593 1989 /**
Davidroid 16:27d3d95c8593 1990 * Read word (2byte) register
Davidroid 16:27d3d95c8593 1991 * @param dev Device Handle
Davidroid 16:27d3d95c8593 1992 * @param index The register index
Davidroid 16:27d3d95c8593 1993 * @param data pointer to 16 bit data
Davidroid 16:27d3d95c8593 1994 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 1995 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 1996 */
Davidroid 16:27d3d95c8593 1997 VL53L0X_Error VL53L0X_read_word(VL53L0X_DEV dev, uint8_t index, uint16_t *p_data);
Davidroid 16:27d3d95c8593 1998 /**
Davidroid 16:27d3d95c8593 1999 * Read dword (4byte) register
Davidroid 16:27d3d95c8593 2000 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2001 * @param index The register index
Davidroid 16:27d3d95c8593 2002 * @param data pointer to 32 bit data
Davidroid 16:27d3d95c8593 2003 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2004 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2005 */
Davidroid 16:27d3d95c8593 2006 VL53L0X_Error VL53L0X_read_dword(VL53L0X_DEV dev, uint8_t index, uint32_t *p_data);
Davidroid 16:27d3d95c8593 2007 /**
Davidroid 16:27d3d95c8593 2008 * Threat safe Update (read/modify/write) single byte register
Davidroid 16:27d3d95c8593 2009 *
Davidroid 16:27d3d95c8593 2010 * Final_reg = (Initial_reg & and_data) |or_data
Davidroid 16:27d3d95c8593 2011 *
Davidroid 16:27d3d95c8593 2012 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2013 * @param index The register index
Davidroid 16:27d3d95c8593 2014 * @param and_data 8 bit and data
Davidroid 16:27d3d95c8593 2015 * @param or_data 8 bit or data
Davidroid 16:27d3d95c8593 2016 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2017 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2018 */
Davidroid 16:27d3d95c8593 2019 VL53L0X_Error VL53L0X_update_byte(VL53L0X_DEV dev, uint8_t index, uint8_t and_data, uint8_t or_data);
Davidroid 16:27d3d95c8593 2020 /**
Davidroid 16:27d3d95c8593 2021 * Writes the supplied byte buffer to the device
Davidroid 16:27d3d95c8593 2022 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2023 * @param index The register index
Davidroid 16:27d3d95c8593 2024 * @param p_data Pointer to uint8_t buffer containing the data to be written
Davidroid 16:27d3d95c8593 2025 * @param count Number of bytes in the supplied byte buffer
Davidroid 16:27d3d95c8593 2026 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2027 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2028 */
Davidroid 16:27d3d95c8593 2029 VL53L0X_Error VL53L0X_write_multi(VL53L0X_DEV dev, uint8_t index, uint8_t *p_data, uint32_t count);
Davidroid 16:27d3d95c8593 2030 /**
Davidroid 16:27d3d95c8593 2031 * Reads the requested number of bytes from the device
Davidroid 16:27d3d95c8593 2032 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2033 * @param index The register index
Davidroid 16:27d3d95c8593 2034 * @param p_data Pointer to the uint8_t buffer to store read data
Davidroid 16:27d3d95c8593 2035 * @param count Number of uint8_t's to read
Davidroid 16:27d3d95c8593 2036 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2037 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2038 */
Davidroid 16:27d3d95c8593 2039 VL53L0X_Error VL53L0X_read_multi(VL53L0X_DEV dev, uint8_t index, uint8_t *p_data, uint32_t count);
Davidroid 16:27d3d95c8593 2040
Davidroid 16:27d3d95c8593 2041 /**
Davidroid 16:27d3d95c8593 2042 * @brief Writes a buffer towards the I2C peripheral device.
Davidroid 16:27d3d95c8593 2043 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2044 * @param p_data pointer to the byte-array data to send
Davidroid 16:27d3d95c8593 2045 * @param number_of_bytes number of bytes to be written.
Davidroid 16:27d3d95c8593 2046 * @retval 0 if ok,
Davidroid 16:27d3d95c8593 2047 * @retval -1 if an I2C error has occured
Davidroid 16:27d3d95c8593 2048 * @note On some devices if NumByteToWrite is greater
Davidroid 16:27d3d95c8593 2049 * than one, the RegisterAddr must be masked correctly!
Davidroid 16:27d3d95c8593 2050 */
Davidroid 16:27d3d95c8593 2051 VL53L0X_Error VL53L0X_i2c_write(uint8_t dev, uint8_t index, uint8_t *p_data, uint16_t number_of_bytes);
Davidroid 16:27d3d95c8593 2052
Davidroid 16:27d3d95c8593 2053 /**
Davidroid 16:27d3d95c8593 2054 * @brief Reads a buffer from the I2C peripheral device.
Davidroid 16:27d3d95c8593 2055 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2056 * @param p_data pointer to the byte-array to read data in to
Davidroid 16:27d3d95c8593 2057 * @param number_of_bytes number of bytes to be read.
Davidroid 16:27d3d95c8593 2058 * @retval 0 if ok,
Davidroid 16:27d3d95c8593 2059 * @retval -1 if an I2C error has occured
Davidroid 16:27d3d95c8593 2060 * @note On some devices if NumByteToWrite is greater
Davidroid 16:27d3d95c8593 2061 * than one, the RegisterAddr must be masked correctly!
Davidroid 16:27d3d95c8593 2062 */
Davidroid 16:27d3d95c8593 2063 VL53L0X_Error VL53L0X_i2c_read(uint8_t dev, uint8_t index, uint8_t *p_data, uint16_t number_of_bytes);
Davidroid 16:27d3d95c8593 2064
Davidroid 16:27d3d95c8593 2065 /**
Davidroid 16:27d3d95c8593 2066 * @brief execute delay in all polling API call
Davidroid 16:27d3d95c8593 2067 *
Davidroid 16:27d3d95c8593 2068 * A typical multi-thread or RTOs implementation is to sleep the task for some 5ms (with 100Hz max rate faster polling is not needed)
Davidroid 16:27d3d95c8593 2069 * if nothing specific is need you can define it as an empty/void macro
Davidroid 16:27d3d95c8593 2070 * @code
Davidroid 16:27d3d95c8593 2071 * #define VL53L0X_PollingDelay(...) (void)0
Davidroid 16:27d3d95c8593 2072 * @endcode
Davidroid 16:27d3d95c8593 2073 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2074 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2075 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2076 */
Davidroid 16:27d3d95c8593 2077 VL53L0X_Error VL53L0X_polling_delay(VL53L0X_DEV dev); /* usually best implemented as a real function */
Davidroid 16:27d3d95c8593 2078
Davidroid 16:27d3d95c8593 2079 int is_present()
Davidroid 16:27d3d95c8593 2080 {
Davidroid 16:27d3d95c8593 2081 int status;
Davidroid 16:27d3d95c8593 2082 uint8_t id = 0;
Davidroid 16:27d3d95c8593 2083
Davidroid 16:27d3d95c8593 2084 status = read_id(&id);
Davidroid 16:27d3d95c8593 2085 if (status) {
Davidroid 16:27d3d95c8593 2086 VL53L0X_ErrLog("Failed to read ID device. Device not present!\n\r");
Davidroid 16:27d3d95c8593 2087 }
Davidroid 16:27d3d95c8593 2088 return status;
Davidroid 16:27d3d95c8593 2089 }
Davidroid 16:27d3d95c8593 2090
Davidroid 16:27d3d95c8593 2091 ///////////////////////////////////////////////////////////////////////////////////////////////////////
Davidroid 16:27d3d95c8593 2092 //Added functions //
Davidroid 16:27d3d95c8593 2093 ///////////////////////////////////////////////////////////////////////////////////////////////////////
Davidroid 16:27d3d95c8593 2094
Davidroid 16:27d3d95c8593 2095 /**
Davidroid 16:27d3d95c8593 2096 * @brief Cycle Power to Device
Davidroid 16:27d3d95c8593 2097 *
Davidroid 16:27d3d95c8593 2098 * @return status - status 0 = ok, 1 = error
Davidroid 16:27d3d95c8593 2099 *
Davidroid 16:27d3d95c8593 2100 */
Davidroid 16:27d3d95c8593 2101 int32_t VL53L0X_cycle_power(void);
Davidroid 16:27d3d95c8593 2102
Davidroid 16:27d3d95c8593 2103 uint8_t VL53L0X_encode_vcsel_period(uint8_t vcsel_period_pclks);
Davidroid 16:27d3d95c8593 2104
Davidroid 16:27d3d95c8593 2105 VL53L0X_Error wrapped_VL53L0X_get_device_error_string(VL53L0X_DeviceError error_code,
Davidroid 16:27d3d95c8593 2106 char *p_device_error_string);
Davidroid 16:27d3d95c8593 2107
Davidroid 16:27d3d95c8593 2108 VL53L0X_Error wrapped_VL53L0X_get_limit_check_info(VL53L0X_DEV dev, uint16_t limit_check_id,
Davidroid 16:27d3d95c8593 2109 char *p_limit_check_string);
Davidroid 16:27d3d95c8593 2110
Davidroid 16:27d3d95c8593 2111 VL53L0X_Error wrapped_VL53L0X_get_pal_error_string(VL53L0X_Error pal_error_code,
Davidroid 16:27d3d95c8593 2112 char *p_pal_error_string);
Davidroid 16:27d3d95c8593 2113
Davidroid 16:27d3d95c8593 2114 VL53L0X_Error wrapped_VL53L0X_get_pal_state_string(VL53L0X_State pal_state_code,
Davidroid 16:27d3d95c8593 2115 char *p_pal_state_string);
Davidroid 16:27d3d95c8593 2116
Davidroid 16:27d3d95c8593 2117 VL53L0X_Error wrapped_VL53L0X_get_range_status_string(uint8_t range_status,
Davidroid 16:27d3d95c8593 2118 char *p_range_status_string);
Davidroid 16:27d3d95c8593 2119
Davidroid 16:27d3d95c8593 2120 VL53L0X_Error wrapped_VL53L0X_get_ref_calibration(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2121 uint8_t *p_vhv_settings, uint8_t *p_phase_cal);
Davidroid 16:27d3d95c8593 2122
Davidroid 16:27d3d95c8593 2123
Davidroid 16:27d3d95c8593 2124 VL53L0X_Error count_enabled_spads(uint8_t spad_array[],
Davidroid 16:27d3d95c8593 2125 uint32_t byte_count, uint32_t max_spads,
Davidroid 16:27d3d95c8593 2126 uint32_t *p_total_spads_enabled, uint8_t *p_is_aperture);
Davidroid 16:27d3d95c8593 2127
Davidroid 16:27d3d95c8593 2128 VL53L0X_Error wrapped_VL53L0X_get_sequence_steps_info(VL53L0X_SequenceStepId sequence_step_id,
Davidroid 16:27d3d95c8593 2129 char *p_sequence_steps_string);
Davidroid 16:27d3d95c8593 2130
Davidroid 16:27d3d95c8593 2131
Davidroid 16:27d3d95c8593 2132 /**
Davidroid 16:27d3d95c8593 2133 * @brief Gets the name of a given sequence step.
Davidroid 16:27d3d95c8593 2134 *
Davidroid 16:27d3d95c8593 2135 * @par Function Description
Davidroid 16:27d3d95c8593 2136 * This function retrieves the name of sequence steps corresponding to
Davidroid 16:27d3d95c8593 2137 * SequenceStepId.
Davidroid 16:27d3d95c8593 2138 *
Davidroid 16:27d3d95c8593 2139 * @note This function doesn't Accesses the device
Davidroid 16:27d3d95c8593 2140 *
Davidroid 16:27d3d95c8593 2141 * @param sequence_step_id Sequence step identifier.
Davidroid 16:27d3d95c8593 2142 * @param p_sequence_steps_string Pointer to Info string
Davidroid 16:27d3d95c8593 2143 *
Davidroid 16:27d3d95c8593 2144 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2145 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2146 */
Davidroid 16:27d3d95c8593 2147 VL53L0X_Error VL53L0X_get_sequence_steps_info(VL53L0X_SequenceStepId sequence_step_id,
Davidroid 16:27d3d95c8593 2148 char *p_sequence_steps_string);
Davidroid 16:27d3d95c8593 2149
Davidroid 16:27d3d95c8593 2150 /**
Davidroid 16:27d3d95c8593 2151 * @brief Get the frequency of the timer used for ranging results time stamps
Davidroid 16:27d3d95c8593 2152 *
Davidroid 16:27d3d95c8593 2153 * @param[out] p_timer_freq_hz : pointer for timer frequency
Davidroid 16:27d3d95c8593 2154 *
Davidroid 16:27d3d95c8593 2155 * @return status : 0 = ok, 1 = error
Davidroid 16:27d3d95c8593 2156 *
Davidroid 16:27d3d95c8593 2157 */
Davidroid 16:27d3d95c8593 2158 int32_t VL53L0X_get_timer_frequency(int32_t *p_timer_freq_hz);
Davidroid 16:27d3d95c8593 2159
Davidroid 16:27d3d95c8593 2160 /**
Davidroid 16:27d3d95c8593 2161 * @brief Get the timer value in units of timer_freq_hz (see VL53L0X_get_timestamp_frequency())
Davidroid 16:27d3d95c8593 2162 *
Davidroid 16:27d3d95c8593 2163 * @param[out] p_timer_count : pointer for timer count value
Davidroid 16:27d3d95c8593 2164 *
Davidroid 16:27d3d95c8593 2165 * @return status : 0 = ok, 1 = error
Davidroid 16:27d3d95c8593 2166 *
Davidroid 16:27d3d95c8593 2167 */
Davidroid 16:27d3d95c8593 2168 int32_t VL53L0X_get_timer_value(int32_t *p_timer_count);
Davidroid 16:27d3d95c8593 2169
Davidroid 16:27d3d95c8593 2170 /**
Davidroid 16:27d3d95c8593 2171 * @brief Configure ranging interrupt reported to system
Davidroid 16:27d3d95c8593 2172 *
Davidroid 16:27d3d95c8593 2173 * @note This function is not Implemented
Davidroid 16:27d3d95c8593 2174 *
Davidroid 16:27d3d95c8593 2175 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2176 * @param interrupt_mask Mask of interrupt to Enable/disable
Davidroid 16:27d3d95c8593 2177 * (0:interrupt disabled or 1: interrupt enabled)
Davidroid 16:27d3d95c8593 2178 * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented
Davidroid 16:27d3d95c8593 2179 */
Davidroid 16:27d3d95c8593 2180 VL53L0X_Error VL53L0X_enable_interrupt_mask(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2181 uint32_t interrupt_mask);
Davidroid 16:27d3d95c8593 2182
Davidroid 16:27d3d95c8593 2183 /**
Davidroid 16:27d3d95c8593 2184 * @brief Get Dmax Calibration Parameters for a given device
Davidroid 16:27d3d95c8593 2185 *
Davidroid 16:27d3d95c8593 2186 *
Davidroid 16:27d3d95c8593 2187 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2188 *
Davidroid 16:27d3d95c8593 2189 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2190 * @param p_range_milli_meter Pointer to Calibration Distance
Davidroid 16:27d3d95c8593 2191 * @param p_signal_rate_rtn_mega_cps Pointer to Signal rate return
Davidroid 16:27d3d95c8593 2192 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2193 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2194 */
Davidroid 16:27d3d95c8593 2195 VL53L0X_Error VL53L0X_get_dmax_cal_parameters(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2196 uint16_t *p_range_milli_meter, FixPoint1616_t *p_signal_rate_rtn_mega_cps);
Davidroid 16:27d3d95c8593 2197
Davidroid 16:27d3d95c8593 2198 /**
Davidroid 16:27d3d95c8593 2199 * @brief Set Dmax Calibration Parameters for a given device
Davidroid 16:27d3d95c8593 2200 * When one of the parameter is zero, this function will get parameter
Davidroid 16:27d3d95c8593 2201 * from NVM.
Davidroid 16:27d3d95c8593 2202 * @note This function doesn't Access to the device
Davidroid 16:27d3d95c8593 2203 *
Davidroid 16:27d3d95c8593 2204 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2205 * @param range_milli_meter Calibration Distance
Davidroid 16:27d3d95c8593 2206 * @param signal_rate_rtn_mega_cps Signal rate return read at CalDistance
Davidroid 16:27d3d95c8593 2207 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2208 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2209 */
Davidroid 16:27d3d95c8593 2210 VL53L0X_Error VL53L0X_get_dmax_cal_parameters(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2211 uint16_t range_milli_meter, FixPoint1616_t signal_rate_rtn_mega_cps);
Davidroid 16:27d3d95c8593 2212
Davidroid 16:27d3d95c8593 2213 /**
Davidroid 16:27d3d95c8593 2214 * @brief Retrieve the measurements from device for a given setup
Davidroid 16:27d3d95c8593 2215 *
Davidroid 16:27d3d95c8593 2216 * @par Function Description
Davidroid 16:27d3d95c8593 2217 * Get data from last successful Histogram measurement
Davidroid 16:27d3d95c8593 2218 * @warning USER should take care about @a VL53L0X_GetNumberOfROIZones()
Davidroid 16:27d3d95c8593 2219 * before get data.
Davidroid 16:27d3d95c8593 2220 * PAL will fill a NumberOfROIZones times the corresponding data structure
Davidroid 16:27d3d95c8593 2221 * used in the measurement function.
Davidroid 16:27d3d95c8593 2222 *
Davidroid 16:27d3d95c8593 2223 * @note This function is not Implemented
Davidroid 16:27d3d95c8593 2224 *
Davidroid 16:27d3d95c8593 2225 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2226 * @param p_histogram_measurement_data Pointer to the histogram data structure.
Davidroid 16:27d3d95c8593 2227 * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented
Davidroid 16:27d3d95c8593 2228 */
Davidroid 16:27d3d95c8593 2229 VL53L0X_Error VL53L0X_get_histogram_measurement_data(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2230 VL53L0X_HistogramMeasurementData_t *p_histogram_measurement_data);
Davidroid 16:27d3d95c8593 2231
Davidroid 16:27d3d95c8593 2232 /**
Davidroid 16:27d3d95c8593 2233 * @brief Get current new device mode
Davidroid 16:27d3d95c8593 2234 * @par Function Description
Davidroid 16:27d3d95c8593 2235 * Get current Histogram mode of a Device
Davidroid 16:27d3d95c8593 2236 *
Davidroid 16:27d3d95c8593 2237 * @note This function doesn't Access to the device
Davidroid 16:27d3d95c8593 2238 *
Davidroid 16:27d3d95c8593 2239 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2240 * @param p_histogram_mode Pointer to current Histogram Mode value
Davidroid 16:27d3d95c8593 2241 * Valid values are:
Davidroid 16:27d3d95c8593 2242 * VL53L0X_HISTOGRAMMODE_DISABLED
Davidroid 16:27d3d95c8593 2243 * VL53L0X_DEVICEMODE_SINGLE_HISTOGRAM
Davidroid 16:27d3d95c8593 2244 * VL53L0X_HISTOGRAMMODE_REFERENCE_ONLY
Davidroid 16:27d3d95c8593 2245 * VL53L0X_HISTOGRAMMODE_RETURN_ONLY
Davidroid 16:27d3d95c8593 2246 * VL53L0X_HISTOGRAMMODE_BOTH
Davidroid 16:27d3d95c8593 2247 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2248 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2249 */
Davidroid 16:27d3d95c8593 2250 VL53L0X_Error VL53L0X_get_histogram_mode(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2251 VL53L0X_HistogramModes *p_histogram_mode);
Davidroid 16:27d3d95c8593 2252
Davidroid 16:27d3d95c8593 2253 /**
Davidroid 16:27d3d95c8593 2254 * @brief Set a new Histogram mode
Davidroid 16:27d3d95c8593 2255 * @par Function Description
Davidroid 16:27d3d95c8593 2256 * Set device to a new Histogram mode
Davidroid 16:27d3d95c8593 2257 *
Davidroid 16:27d3d95c8593 2258 * @note This function doesn't Access to the device
Davidroid 16:27d3d95c8593 2259 *
Davidroid 16:27d3d95c8593 2260 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2261 * @param histogram_mode New device mode to apply
Davidroid 16:27d3d95c8593 2262 * Valid values are:
Davidroid 16:27d3d95c8593 2263 * VL53L0X_HISTOGRAMMODE_DISABLED
Davidroid 16:27d3d95c8593 2264 * VL53L0X_DEVICEMODE_SINGLE_HISTOGRAM
Davidroid 16:27d3d95c8593 2265 * VL53L0X_HISTOGRAMMODE_REFERENCE_ONLY
Davidroid 16:27d3d95c8593 2266 * VL53L0X_HISTOGRAMMODE_RETURN_ONLY
Davidroid 16:27d3d95c8593 2267 * VL53L0X_HISTOGRAMMODE_BOTH
Davidroid 16:27d3d95c8593 2268 *
Davidroid 16:27d3d95c8593 2269 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2270 * @return VL53L0X_ERROR_MODE_NOT_SUPPORTED This error occurs when
Davidroid 16:27d3d95c8593 2271 * HistogramMode is not in the supported list
Davidroid 16:27d3d95c8593 2272 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2273 */
Davidroid 16:27d3d95c8593 2274 VL53L0X_Error VL53L0X_set_histogram_mode(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2275 VL53L0X_HistogramModes histogram_mode);
Davidroid 16:27d3d95c8593 2276
Davidroid 16:27d3d95c8593 2277 /**
Davidroid 16:27d3d95c8593 2278 * @brief Return a description string for a given limit check number
Davidroid 16:27d3d95c8593 2279 *
Davidroid 16:27d3d95c8593 2280 * @par Function Description
Davidroid 16:27d3d95c8593 2281 * This function returns a description string for a given limit check number.
Davidroid 16:27d3d95c8593 2282 * The limit check is identified with the LimitCheckId.
Davidroid 16:27d3d95c8593 2283 *
Davidroid 16:27d3d95c8593 2284 * @note This function doesn't Access to the device
Davidroid 16:27d3d95c8593 2285 *
Davidroid 16:27d3d95c8593 2286 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2287 * @param limit_check_id Limit Check ID
Davidroid 16:27d3d95c8593 2288 (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ).
Davidroid 16:27d3d95c8593 2289 * @param p_limit_check_string Pointer to the
Davidroid 16:27d3d95c8593 2290 description string of the given check limit.
Davidroid 16:27d3d95c8593 2291 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2292 * @return VL53L0X_ERROR_INVALID_PARAMS This error is
Davidroid 16:27d3d95c8593 2293 returned when LimitCheckId value is out of range.
Davidroid 16:27d3d95c8593 2294 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2295 */
Davidroid 16:27d3d95c8593 2296 VL53L0X_Error VL53L0X_get_limit_check_info(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2297 uint16_t limit_check_id, char *p_limit_check_string);
Davidroid 16:27d3d95c8593 2298
Davidroid 16:27d3d95c8593 2299 /**
Davidroid 16:27d3d95c8593 2300 * @brief Get the linearity corrective gain
Davidroid 16:27d3d95c8593 2301 *
Davidroid 16:27d3d95c8593 2302 * @par Function Description
Davidroid 16:27d3d95c8593 2303 * Should only be used after a successful call to @a VL53L0X_DataInit to backup
Davidroid 16:27d3d95c8593 2304 * device NVM value
Davidroid 16:27d3d95c8593 2305 *
Davidroid 16:27d3d95c8593 2306 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2307 *
Davidroid 16:27d3d95c8593 2308 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2309 * @param p_linearity_corrective_gain Pointer to the linearity
Davidroid 16:27d3d95c8593 2310 * corrective gain in x1000
Davidroid 16:27d3d95c8593 2311 * if value is 1000 then no modification is applied.
Davidroid 16:27d3d95c8593 2312 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2313 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2314 */
Davidroid 16:27d3d95c8593 2315 VL53L0X_Error VL53L0X_get_linearity_corrective_gain(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2316 uint16_t *p_linearity_corrective_gain);
Davidroid 16:27d3d95c8593 2317
Davidroid 16:27d3d95c8593 2318 /**
Davidroid 16:27d3d95c8593 2319 * Set the linearity corrective gain
Davidroid 16:27d3d95c8593 2320 *
Davidroid 16:27d3d95c8593 2321 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2322 *
Davidroid 16:27d3d95c8593 2323 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2324 * @param linearity_corrective_gain Linearity corrective
Davidroid 16:27d3d95c8593 2325 * gain in x1000
Davidroid 16:27d3d95c8593 2326 * if value is 1000 then no modification is applied.
Davidroid 16:27d3d95c8593 2327 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2328 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2329 */
Davidroid 16:27d3d95c8593 2330 VL53L0X_Error VL53L0X_set_linearity_corrective_gain(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2331 int16_t linearity_corrective_gain);
Davidroid 16:27d3d95c8593 2332
Davidroid 16:27d3d95c8593 2333 /**
Davidroid 16:27d3d95c8593 2334 * @brief Get the Maximum number of ROI Zones managed by the Device
Davidroid 16:27d3d95c8593 2335 *
Davidroid 16:27d3d95c8593 2336 * @par Function Description
Davidroid 16:27d3d95c8593 2337 * Get Maximum number of ROI Zones managed by the Device.
Davidroid 16:27d3d95c8593 2338 *
Davidroid 16:27d3d95c8593 2339 * @note This function doesn't Access to the device
Davidroid 16:27d3d95c8593 2340 *
Davidroid 16:27d3d95c8593 2341 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2342 * @param p_max_number_of_roi_zones Pointer to the Maximum Number
Davidroid 16:27d3d95c8593 2343 * of ROI Zones value.
Davidroid 16:27d3d95c8593 2344 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2345 */
Davidroid 16:27d3d95c8593 2346 VL53L0X_Error VL53L0X_get_max_number_of_roi_zones(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2347 uint8_t *p_max_number_of_roi_zones);
Davidroid 16:27d3d95c8593 2348
Davidroid 16:27d3d95c8593 2349 /**
Davidroid 16:27d3d95c8593 2350 * @brief Retrieve the Reference Signal after a measurements
Davidroid 16:27d3d95c8593 2351 *
Davidroid 16:27d3d95c8593 2352 * @par Function Description
Davidroid 16:27d3d95c8593 2353 * Get Reference Signal from last successful Ranging measurement
Davidroid 16:27d3d95c8593 2354 * This function return a valid value after that you call the
Davidroid 16:27d3d95c8593 2355 * @a VL53L0X_GetRangingMeasurementData().
Davidroid 16:27d3d95c8593 2356 *
Davidroid 16:27d3d95c8593 2357 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2358 *
Davidroid 16:27d3d95c8593 2359 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2360 * @param p_measurement_ref_signal Pointer to the Ref Signal to fill up.
Davidroid 16:27d3d95c8593 2361 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2362 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2363 */
Davidroid 16:27d3d95c8593 2364 VL53L0X_Error VL53L0X_get_measurement_ref_signal(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2365 FixPoint1616_t *p_measurement_ref_signal);
Davidroid 16:27d3d95c8593 2366
Davidroid 16:27d3d95c8593 2367 /**
Davidroid 16:27d3d95c8593 2368 * @brief Get the number of the check limit managed by a given Device
Davidroid 16:27d3d95c8593 2369 *
Davidroid 16:27d3d95c8593 2370 * @par Function Description
Davidroid 16:27d3d95c8593 2371 * This function give the number of the check limit managed by the Device
Davidroid 16:27d3d95c8593 2372 *
Davidroid 16:27d3d95c8593 2373 * @note This function doesn't Access to the device
Davidroid 16:27d3d95c8593 2374 *
Davidroid 16:27d3d95c8593 2375 * @param p_number_of_limit_check Pointer to the number of check limit.
Davidroid 16:27d3d95c8593 2376 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2377 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2378 */
Davidroid 16:27d3d95c8593 2379 VL53L0X_Error VL53L0X_get_number_of_limit_check(
Davidroid 16:27d3d95c8593 2380 uint16_t *p_number_of_limit_check);
Davidroid 16:27d3d95c8593 2381
Davidroid 16:27d3d95c8593 2382 /**
Davidroid 16:27d3d95c8593 2383 * @brief Get the number of ROI Zones managed by the Device
Davidroid 16:27d3d95c8593 2384 *
Davidroid 16:27d3d95c8593 2385 * @par Function Description
Davidroid 16:27d3d95c8593 2386 * Get number of ROI Zones managed by the Device
Davidroid 16:27d3d95c8593 2387 * USER should take care about @a VL53L0X_GetNumberOfROIZones()
Davidroid 16:27d3d95c8593 2388 * before get data after a perform measurement.
Davidroid 16:27d3d95c8593 2389 * PAL will fill a NumberOfROIZones times the corresponding data
Davidroid 16:27d3d95c8593 2390 * structure used in the measurement function.
Davidroid 16:27d3d95c8593 2391 *
Davidroid 16:27d3d95c8593 2392 * @note This function doesn't Access to the device
Davidroid 16:27d3d95c8593 2393 *
Davidroid 16:27d3d95c8593 2394 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2395 * @param p_number_of_roi_zones Pointer to the Number of ROI Zones value.
Davidroid 16:27d3d95c8593 2396 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2397 */
Davidroid 16:27d3d95c8593 2398 VL53L0X_Error VL53L0X_get_number_of_roi_zones(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2399 uint8_t *p_number_of_roi_zones);
Davidroid 16:27d3d95c8593 2400
Davidroid 16:27d3d95c8593 2401 /**
Davidroid 16:27d3d95c8593 2402 * @brief Set the number of ROI Zones to be used for a specific Device
Davidroid 16:27d3d95c8593 2403 *
Davidroid 16:27d3d95c8593 2404 * @par Function Description
Davidroid 16:27d3d95c8593 2405 * Set the number of ROI Zones to be used for a specific Device.
Davidroid 16:27d3d95c8593 2406 * The programmed value should be less than the max number of ROI Zones given
Davidroid 16:27d3d95c8593 2407 * with @a VL53L0X_GetMaxNumberOfROIZones().
Davidroid 16:27d3d95c8593 2408 * This version of API manage only one zone.
Davidroid 16:27d3d95c8593 2409 *
Davidroid 16:27d3d95c8593 2410 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2411 * @param number_of_roi_zones Number of ROI Zones to be used for a
Davidroid 16:27d3d95c8593 2412 * specific Device.
Davidroid 16:27d3d95c8593 2413 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2414 * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned if
Davidroid 16:27d3d95c8593 2415 * NumberOfROIZones != 1
Davidroid 16:27d3d95c8593 2416 */
Davidroid 16:27d3d95c8593 2417 VL53L0X_Error VL53L0X_set_number_of_roi_zones(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2418 uint8_t number_of_roi_zones);
Davidroid 16:27d3d95c8593 2419
Davidroid 16:27d3d95c8593 2420 /**
Davidroid 16:27d3d95c8593 2421 * @brief Gets number of sequence steps managed by the API.
Davidroid 16:27d3d95c8593 2422 *
Davidroid 16:27d3d95c8593 2423 * @par Function Description
Davidroid 16:27d3d95c8593 2424 * This function retrieves the number of sequence steps currently managed
Davidroid 16:27d3d95c8593 2425 * by the API
Davidroid 16:27d3d95c8593 2426 *
Davidroid 16:27d3d95c8593 2427 * @note This function Accesses the device
Davidroid 16:27d3d95c8593 2428 *
Davidroid 16:27d3d95c8593 2429 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2430 * @param p_number_of_sequence_steps Out parameter reporting the number of
Davidroid 16:27d3d95c8593 2431 * sequence steps.
Davidroid 16:27d3d95c8593 2432 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2433 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2434 */
Davidroid 16:27d3d95c8593 2435 VL53L0X_Error VL53L0X_get_number_of_sequence_steps(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2436 uint8_t *p_number_of_sequence_steps);
Davidroid 16:27d3d95c8593 2437 /**
Davidroid 16:27d3d95c8593 2438 * @brief Get the power mode for a given Device
Davidroid 16:27d3d95c8593 2439 *
Davidroid 16:27d3d95c8593 2440 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2441 *
Davidroid 16:27d3d95c8593 2442 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2443 * @param p_power_mode Pointer to the current value of the power
Davidroid 16:27d3d95c8593 2444 * mode. see ::VL53L0X_PowerModes
Davidroid 16:27d3d95c8593 2445 * Valid values are:
Davidroid 16:27d3d95c8593 2446 * VL53L0X_POWERMODE_STANDBY_LEVEL1,
Davidroid 16:27d3d95c8593 2447 * VL53L0X_POWERMODE_IDLE_LEVEL1
Davidroid 16:27d3d95c8593 2448 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2449 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2450 */
Davidroid 16:27d3d95c8593 2451 VL53L0X_Error VL53L0X_get_power_mode(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2452 VL53L0X_PowerModes *p_power_mode);
Davidroid 16:27d3d95c8593 2453
Davidroid 16:27d3d95c8593 2454 /**
Davidroid 16:27d3d95c8593 2455 * @brief Set the power mode for a given Device
Davidroid 16:27d3d95c8593 2456 * The power mode can be Standby or Idle. Different level of both Standby and
Davidroid 16:27d3d95c8593 2457 * Idle can exists.
Davidroid 16:27d3d95c8593 2458 * This function should not be used when device is in Ranging state.
Davidroid 16:27d3d95c8593 2459 *
Davidroid 16:27d3d95c8593 2460 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2461 *
Davidroid 16:27d3d95c8593 2462 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2463 * @param power_mode The value of the power mode to set.
Davidroid 16:27d3d95c8593 2464 * see ::VL53L0X_PowerModes
Davidroid 16:27d3d95c8593 2465 * Valid values are:
Davidroid 16:27d3d95c8593 2466 * VL53L0X_POWERMODE_STANDBY_LEVEL1,
Davidroid 16:27d3d95c8593 2467 * VL53L0X_POWERMODE_IDLE_LEVEL1
Davidroid 16:27d3d95c8593 2468 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2469 * @return VL53L0X_ERROR_MODE_NOT_SUPPORTED This error occurs when PowerMode
Davidroid 16:27d3d95c8593 2470 * is not in the supported list
Davidroid 16:27d3d95c8593 2471 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2472 */
Davidroid 16:27d3d95c8593 2473 VL53L0X_Error VL53L0X_set_power_mode(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2474 VL53L0X_PowerModes power_mode);
Davidroid 16:27d3d95c8593 2475
Davidroid 16:27d3d95c8593 2476 /**
Davidroid 16:27d3d95c8593 2477 * @brief Retrieves SPAD configuration
Davidroid 16:27d3d95c8593 2478 *
Davidroid 16:27d3d95c8593 2479 * @par Function Description
Davidroid 16:27d3d95c8593 2480 * This function retrieves the current number of applied reference spads
Davidroid 16:27d3d95c8593 2481 * and also their type : Aperture or Non-Aperture.
Davidroid 16:27d3d95c8593 2482 *
Davidroid 16:27d3d95c8593 2483 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2484 *
Davidroid 16:27d3d95c8593 2485 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2486 * @param p_spad_count Number ref Spad Count
Davidroid 16:27d3d95c8593 2487 * @param p_is_aperture_spads Reports if spads are of type
Davidroid 16:27d3d95c8593 2488 * aperture or non-aperture.
Davidroid 16:27d3d95c8593 2489 * 1:=aperture, 0:=Non-Aperture
Davidroid 16:27d3d95c8593 2490 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2491 * @return VL53L0X_ERROR_REF_SPAD_INIT Error in the in the reference
Davidroid 16:27d3d95c8593 2492 * spad configuration.
Davidroid 16:27d3d95c8593 2493 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2494 */
Davidroid 16:27d3d95c8593 2495 VL53L0X_Error wrapped_VL53L0X_get_reference_spads(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2496 uint32_t *p_spad_count, uint8_t *p_is_aperture_spads);
Davidroid 16:27d3d95c8593 2497
Davidroid 16:27d3d95c8593 2498 /**
Davidroid 16:27d3d95c8593 2499 * @brief Gets the (on/off) state of a requested sequence step.
Davidroid 16:27d3d95c8593 2500 *
Davidroid 16:27d3d95c8593 2501 * @par Function Description
Davidroid 16:27d3d95c8593 2502 * This function retrieves the state of a requested sequence step, i.e. on/off.
Davidroid 16:27d3d95c8593 2503 *
Davidroid 16:27d3d95c8593 2504 * @note This function Accesses the device
Davidroid 16:27d3d95c8593 2505 *
Davidroid 16:27d3d95c8593 2506 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2507 * @param sequence_step_id Sequence step identifier.
Davidroid 16:27d3d95c8593 2508 * @param p_sequence_step_enabled Out parameter reporting if the sequence step
Davidroid 16:27d3d95c8593 2509 * is enabled {0=Off,1=On}.
Davidroid 16:27d3d95c8593 2510 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2511 * @return VL53L0X_ERROR_INVALID_PARAMS Error SequenceStepId parameter not
Davidroid 16:27d3d95c8593 2512 * supported.
Davidroid 16:27d3d95c8593 2513 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2514 */
Davidroid 16:27d3d95c8593 2515 VL53L0X_Error VL53L0X_get_sequence_step_enable(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2516 VL53L0X_SequenceStepId sequence_step_id, uint8_t *p_sequence_step_enabled);
Davidroid 16:27d3d95c8593 2517
Davidroid 16:27d3d95c8593 2518
Davidroid 16:27d3d95c8593 2519 /**
Davidroid 16:27d3d95c8593 2520 * @brief Gets the timeout of a requested sequence step.
Davidroid 16:27d3d95c8593 2521 *
Davidroid 16:27d3d95c8593 2522 * @par Function Description
Davidroid 16:27d3d95c8593 2523 * This function retrieves the timeout of a requested sequence step.
Davidroid 16:27d3d95c8593 2524 *
Davidroid 16:27d3d95c8593 2525 * @note This function Accesses the device
Davidroid 16:27d3d95c8593 2526 *
Davidroid 16:27d3d95c8593 2527 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2528 * @param sequence_step_id Sequence step identifier.
Davidroid 16:27d3d95c8593 2529 * @param p_time_out_milli_secs Timeout value.
Davidroid 16:27d3d95c8593 2530 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2531 * @return VL53L0X_ERROR_INVALID_PARAMS Error SequenceStepId parameter not
Davidroid 16:27d3d95c8593 2532 * supported.
Davidroid 16:27d3d95c8593 2533 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2534 */
Davidroid 16:27d3d95c8593 2535 VL53L0X_Error VL53L0X_get_sequence_step_timeout(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2536 VL53L0X_SequenceStepId sequence_step_id,
Davidroid 16:27d3d95c8593 2537 FixPoint1616_t *p_time_out_milli_secs);
Davidroid 16:27d3d95c8593 2538
Davidroid 16:27d3d95c8593 2539 /**
Davidroid 16:27d3d95c8593 2540 * @brief Sets the timeout of a requested sequence step.
Davidroid 16:27d3d95c8593 2541 *
Davidroid 16:27d3d95c8593 2542 * @par Function Description
Davidroid 16:27d3d95c8593 2543 * This function sets the timeout of a requested sequence step.
Davidroid 16:27d3d95c8593 2544 *
Davidroid 16:27d3d95c8593 2545 * @note This function Accesses the device
Davidroid 16:27d3d95c8593 2546 *
Davidroid 16:27d3d95c8593 2547 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2548 * @param sequence_step_id Sequence step identifier.
Davidroid 16:27d3d95c8593 2549 * @param time_out_milli_secs Demanded timeout
Davidroid 16:27d3d95c8593 2550 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2551 * @return VL53L0X_ERROR_INVALID_PARAMS Error SequenceStepId parameter not
Davidroid 16:27d3d95c8593 2552 * supported.
Davidroid 16:27d3d95c8593 2553 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2554 */
Davidroid 16:27d3d95c8593 2555 VL53L0X_Error VL53L0X_set_sequence_step_timeout(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2556 VL53L0X_SequenceStepId sequence_step_id, FixPoint1616_t time_out_milli_secs);
Davidroid 16:27d3d95c8593 2557
Davidroid 16:27d3d95c8593 2558 /**
Davidroid 16:27d3d95c8593 2559 * @brief Get the current SPAD Ambient Damper Factor value
Davidroid 16:27d3d95c8593 2560 *
Davidroid 16:27d3d95c8593 2561 * @par Function Description
Davidroid 16:27d3d95c8593 2562 * This function get the SPAD Ambient Damper Factor value
Davidroid 16:27d3d95c8593 2563 *
Davidroid 16:27d3d95c8593 2564 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2565 *
Davidroid 16:27d3d95c8593 2566 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2567 * @param p_spad_ambient_damper_factor Pointer to programmed SPAD Ambient
Davidroid 16:27d3d95c8593 2568 * Damper Factor value
Davidroid 16:27d3d95c8593 2569 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2570 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2571 */
Davidroid 16:27d3d95c8593 2572 VL53L0X_Error VL53L0X_get_spad_ambient_damper_factor(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2573 uint16_t *p_spad_ambient_damper_factor);
Davidroid 16:27d3d95c8593 2574 /**
Davidroid 16:27d3d95c8593 2575 * @brief Set the SPAD Ambient Damper Factor value
Davidroid 16:27d3d95c8593 2576 *
Davidroid 16:27d3d95c8593 2577 * @par Function Description
Davidroid 16:27d3d95c8593 2578 * This function set the SPAD Ambient Damper Factor value
Davidroid 16:27d3d95c8593 2579 *
Davidroid 16:27d3d95c8593 2580 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2581 *
Davidroid 16:27d3d95c8593 2582 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2583 * @param spad_ambient_damper_factor SPAD Ambient Damper Factor value
Davidroid 16:27d3d95c8593 2584 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2585 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2586 */
Davidroid 16:27d3d95c8593 2587 VL53L0X_Error VL53L0X_set_spad_ambient_damper_factor(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2588 uint16_t spad_ambient_damper_factor);
Davidroid 16:27d3d95c8593 2589
Davidroid 16:27d3d95c8593 2590 /**
Davidroid 16:27d3d95c8593 2591 * @brief Get the current SPAD Ambient Damper Threshold value
Davidroid 16:27d3d95c8593 2592 *
Davidroid 16:27d3d95c8593 2593 * @par Function Description
Davidroid 16:27d3d95c8593 2594 * This function get the SPAD Ambient Damper Threshold value
Davidroid 16:27d3d95c8593 2595 *
Davidroid 16:27d3d95c8593 2596 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2597 *
Davidroid 16:27d3d95c8593 2598 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2599 * @param p_spad_ambient_damper_threshold Pointer to programmed
Davidroid 16:27d3d95c8593 2600 * SPAD Ambient Damper Threshold value
Davidroid 16:27d3d95c8593 2601 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2602 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2603 */
Davidroid 16:27d3d95c8593 2604 VL53L0X_Error VL53L0X_get_spad_ambient_damper_threshold(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2605 uint16_t *p_spad_ambient_damper_threshold);
Davidroid 16:27d3d95c8593 2606
Davidroid 16:27d3d95c8593 2607 /**
Davidroid 16:27d3d95c8593 2608 * @brief Set the SPAD Ambient Damper Threshold value
Davidroid 16:27d3d95c8593 2609 *
Davidroid 16:27d3d95c8593 2610 * @par Function Description
Davidroid 16:27d3d95c8593 2611 * This function set the SPAD Ambient Damper Threshold value
Davidroid 16:27d3d95c8593 2612 *
Davidroid 16:27d3d95c8593 2613 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2614 *
Davidroid 16:27d3d95c8593 2615 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2616 * @param spad_ambient_damper_threshold SPAD Ambient Damper Threshold value
Davidroid 16:27d3d95c8593 2617 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2618 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2619 */
Davidroid 16:27d3d95c8593 2620 VL53L0X_Error VL53L0X_set_spad_ambient_damper_threshold(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2621 uint16_t spad_ambient_damper_threshold);
Davidroid 16:27d3d95c8593 2622
Davidroid 16:27d3d95c8593 2623 /**
Davidroid 16:27d3d95c8593 2624 * @brief Get the maximal distance for actual setup
Davidroid 16:27d3d95c8593 2625 * @par Function Description
Davidroid 16:27d3d95c8593 2626 * Device must be initialized through @a VL53L0X_SetParameters() prior calling
Davidroid 16:27d3d95c8593 2627 * this function.
Davidroid 16:27d3d95c8593 2628 *
Davidroid 16:27d3d95c8593 2629 * Any range value more than the value returned is to be considered as
Davidroid 16:27d3d95c8593 2630 * "no target detected" or
Davidroid 16:27d3d95c8593 2631 * "no target in detectable range"\n
Davidroid 16:27d3d95c8593 2632 * @warning The maximal distance depends on the setup
Davidroid 16:27d3d95c8593 2633 *
Davidroid 16:27d3d95c8593 2634 * @note This function is not Implemented
Davidroid 16:27d3d95c8593 2635 *
Davidroid 16:27d3d95c8593 2636 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2637 * @param p_upper_limit_milli_meter The maximal range limit for actual setup
Davidroid 16:27d3d95c8593 2638 * (in millimeter)
Davidroid 16:27d3d95c8593 2639 * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented
Davidroid 16:27d3d95c8593 2640 */
Davidroid 16:27d3d95c8593 2641 VL53L0X_Error VL53L0X_get_upper_limit_milli_meter(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2642 uint16_t *p_upper_limit_milli_meter);
Davidroid 16:27d3d95c8593 2643
Davidroid 16:27d3d95c8593 2644 /**
Davidroid 16:27d3d95c8593 2645 * @brief Get the tuning settings pointer and the internal external switch
Davidroid 16:27d3d95c8593 2646 * value.
Davidroid 16:27d3d95c8593 2647 *
Davidroid 16:27d3d95c8593 2648 * This function is used to get the Tuning settings buffer pointer and the
Davidroid 16:27d3d95c8593 2649 * value.
Davidroid 16:27d3d95c8593 2650 * of the switch to select either external or internal tuning settings.
Davidroid 16:27d3d95c8593 2651 *
Davidroid 16:27d3d95c8593 2652 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2653 *
Davidroid 16:27d3d95c8593 2654 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2655 * @param pp_tuning_setting_buffer Pointer to tuning settings buffer.
Davidroid 16:27d3d95c8593 2656 * @param p_use_internal_tuning_settings Pointer to store Use internal tuning
Davidroid 16:27d3d95c8593 2657 * settings value.
Davidroid 16:27d3d95c8593 2658 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2659 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2660 */
Davidroid 16:27d3d95c8593 2661 VL53L0X_Error VL53L0X_get_tuning_setting_buffer(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2662 uint8_t **pp_tuning_setting_buffer, uint8_t *p_use_internal_tuning_settings);
Davidroid 16:27d3d95c8593 2663
Davidroid 16:27d3d95c8593 2664 /**
Davidroid 16:27d3d95c8593 2665 * @brief Set the tuning settings pointer
Davidroid 16:27d3d95c8593 2666 *
Davidroid 16:27d3d95c8593 2667 * This function is used to specify the Tuning settings buffer to be used
Davidroid 16:27d3d95c8593 2668 * for a given device. The buffer contains all the necessary data to permit
Davidroid 16:27d3d95c8593 2669 * the API to write tuning settings.
Davidroid 16:27d3d95c8593 2670 * This function permit to force the usage of either external or internal
Davidroid 16:27d3d95c8593 2671 * tuning settings.
Davidroid 16:27d3d95c8593 2672 *
Davidroid 16:27d3d95c8593 2673 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2674 *
Davidroid 16:27d3d95c8593 2675 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2676 * @param p_tuning_setting_buffer Pointer to tuning settings buffer.
Davidroid 16:27d3d95c8593 2677 * @param use_internal_tuning_settings Use internal tuning settings value.
Davidroid 16:27d3d95c8593 2678 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2679 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2680 */
Davidroid 16:27d3d95c8593 2681 VL53L0X_Error VL53L0X_set_tuning_setting_buffer(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2682 uint8_t *p_tuning_setting_buffer, uint8_t use_internal_tuning_settings);
Davidroid 16:27d3d95c8593 2683
Davidroid 16:27d3d95c8593 2684 /**
Davidroid 16:27d3d95c8593 2685 * @defgroup VL53L0X_registerAccess_group PAL Register Access Functions
Davidroid 16:27d3d95c8593 2686 * @brief PAL Register Access Functions
Davidroid 16:27d3d95c8593 2687 * @{
Davidroid 16:27d3d95c8593 2688 */
Davidroid 16:27d3d95c8593 2689
Davidroid 16:27d3d95c8593 2690 /**
Davidroid 16:27d3d95c8593 2691 * Lock comms interface to serialize all commands to a shared I2C interface for a specific device
Davidroid 16:27d3d95c8593 2692 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2693 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2694 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2695 */
Davidroid 16:27d3d95c8593 2696 VL53L0X_Error VL53L0X_lock_sequence_access(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 2697
Davidroid 16:27d3d95c8593 2698 /**
Davidroid 16:27d3d95c8593 2699 * Unlock comms interface to serialize all commands to a shared I2C interface for a specific device
Davidroid 16:27d3d95c8593 2700 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2701 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2702 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2703 */
Davidroid 16:27d3d95c8593 2704 VL53L0X_Error VL53L0X_unlock_sequence_access(VL53L0X_DEV dev);
Davidroid 16:27d3d95c8593 2705
Davidroid 16:27d3d95c8593 2706 /**
Davidroid 16:27d3d95c8593 2707 * @brief Prepare device for operation
Davidroid 16:27d3d95c8593 2708 * @par Function Description
Davidroid 16:27d3d95c8593 2709 * Update device with provided parameters
Davidroid 16:27d3d95c8593 2710 * @li Then start ranging operation.
Davidroid 16:27d3d95c8593 2711 *
Davidroid 16:27d3d95c8593 2712 * @note This function Access to the device
Davidroid 16:27d3d95c8593 2713 *
Davidroid 16:27d3d95c8593 2714 * @param Dev Device Handle
Davidroid 16:27d3d95c8593 2715 * @param pDeviceParameters Pointer to store current device parameters.
Davidroid 16:27d3d95c8593 2716 * @return VL53L0X_ERROR_NONE Success
Davidroid 16:27d3d95c8593 2717 * @return "Other error code" See ::VL53L0X_Error
Davidroid 16:27d3d95c8593 2718 */
Davidroid 16:27d3d95c8593 2719 VL53L0X_Error vl53L0x_set_device_parameters(VL53L0X_DEV Dev,
Davidroid 16:27d3d95c8593 2720 const VL53L0X_DeviceParameters_t *pDeviceParameters);
Davidroid 16:27d3d95c8593 2721
Davidroid 16:27d3d95c8593 2722 /**
Davidroid 16:27d3d95c8593 2723 * Set Group parameter Hold state
Davidroid 16:27d3d95c8593 2724 *
Davidroid 16:27d3d95c8593 2725 * @par Function Description
Davidroid 16:27d3d95c8593 2726 * Set or remove device internal group parameter hold
Davidroid 16:27d3d95c8593 2727 *
Davidroid 16:27d3d95c8593 2728 * @note This function is not Implemented
Davidroid 16:27d3d95c8593 2729 *
Davidroid 16:27d3d95c8593 2730 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2731 * @param group_param_hold Group parameter Hold state to be set (on/off)
Davidroid 16:27d3d95c8593 2732 * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented
Davidroid 16:27d3d95c8593 2733 */
Davidroid 16:27d3d95c8593 2734 VL53L0X_Error VL53L0X_set_group_param_hold(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2735 uint8_t group_param_hold);
Davidroid 16:27d3d95c8593 2736
Davidroid 16:27d3d95c8593 2737
Davidroid 16:27d3d95c8593 2738 /**
Davidroid 16:27d3d95c8593 2739 * @brief Wait for device ready for a new measurement command.
Davidroid 16:27d3d95c8593 2740 * Blocking function.
Davidroid 16:27d3d95c8593 2741 *
Davidroid 16:27d3d95c8593 2742 * @note This function is not Implemented
Davidroid 16:27d3d95c8593 2743 *
Davidroid 16:27d3d95c8593 2744 * @param dev Device Handle
Davidroid 16:27d3d95c8593 2745 * @param max_loop Max Number of polling loop (timeout).
Davidroid 16:27d3d95c8593 2746 * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented
Davidroid 16:27d3d95c8593 2747 */
Davidroid 16:27d3d95c8593 2748 VL53L0X_Error VL53L0X_wait_device_ready_for_new_measurement(VL53L0X_DEV dev,
Davidroid 16:27d3d95c8593 2749 uint32_t max_loop);
Davidroid 16:27d3d95c8593 2750
Davidroid 16:27d3d95c8593 2751 VL53L0X_Error VL53L0X_reverse_bytes(uint8_t *data, uint32_t size);
Davidroid 16:27d3d95c8593 2752
Davidroid 16:27d3d95c8593 2753 int range_meas_int_continuous_mode(void (*fptr)(void));
Davidroid 16:27d3d95c8593 2754
Davidroid 16:27d3d95c8593 2755
Davidroid 16:27d3d95c8593 2756 VL53L0X_DeviceInfo_t _device_info;
Davidroid 16:27d3d95c8593 2757
Davidroid 16:27d3d95c8593 2758 /* IO Device */
Davidroid 16:27d3d95c8593 2759 DevI2C *_dev_i2c;
Davidroid 16:27d3d95c8593 2760 /* Digital out pin */
Davidroid 16:27d3d95c8593 2761 DigitalOut *_gpio0;
Davidroid 16:27d3d95c8593 2762 /* GPIO expander */
Davidroid 16:27d3d95c8593 2763 Stmpe1600DigiOut *_expgpio0;
Davidroid 16:27d3d95c8593 2764 /* Measure detection IRQ */
Davidroid 16:27d3d95c8593 2765 InterruptIn *_gpio1Int;
Davidroid 16:27d3d95c8593 2766 /* Device data */
Davidroid 16:27d3d95c8593 2767 VL53L0X_Dev_t _my_device;
Davidroid 16:27d3d95c8593 2768 VL53L0X_DEV _device;
Davidroid 16:27d3d95c8593 2769 };
Davidroid 16:27d3d95c8593 2770
Davidroid 16:27d3d95c8593 2771
Davidroid 16:27d3d95c8593 2772 #endif /* _VL53L0X_CLASS_H_ */