Workshop example

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Committer:
JimCarver
Date:
Tue May 21 21:16:24 2019 +0000
Revision:
35:42b3fba640b1
Parent:
18:a15bfe7aaebd
Simple version for workshop

Who changed what in which revision?

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