Garage Door Monitor and Opener

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Introduction

This system implements a simple garage door opener and environmental monitor. The hardware connects to the internet using Wi-Fi then on to the Pelion Device Management Platform which provides device monitoring and secure firmware updates over the air (FOTA). Pelion Device Management provides a flexible set of REST APIs which we will use to communicate to a web application running on an EC-2 instance in AWS. The web application will serve a web page where we can monitor and control our garage..

This project is intended to work on the DISCO-L475VG-IOT01A from ST Microelectronics It implements a simple actuator to drive a relay to simulate pushing the "open" button on older style garage doors which do not use a rolling code interface.

The system is designed to be mounted over the door so that the on board time of flight sensor can be used to detect if the door is open or closed.

The system also monitors temperature, humidity and barometric pressure.

https://os.mbed.com/media/uploads/JimCarver/garageopener.jpg

Hardware Requirements:

DISCO-L475G-IOT01A https://os.mbed.com/platforms/ST-Discovery-L475E-IOT01A/

Seeed Studio Grove Relay module https://www.seeedstudio.com/Grove-Relay.html

Seeed Studio Grove cable, I used this one: https://www.seeedstudio.com/Grove-4-pin-Male-Jumper-to-Grove-4-pin-Conversion-Cable-5-PCs-per-Pack.html

Connect to the PMOD connector like this:

https://os.mbed.com/media/uploads/JimCarver/opener.jpg

This shows how I installed so that the time of flight sensor can detect when the door is open

https://os.mbed.com/media/uploads/JimCarver/opener1.jpg https://os.mbed.com/media/uploads/JimCarver/opener2.jpg

To use the project:

You will also need a Pelion developers account.

I suggest you first use the Pelion quick state to become familiar with Pelion Device Management. https://os.mbed.com/guides/connect-device-to-pelion/1/?board=ST-Discovery-L475E-IOT01A

Web Interface

For my web interface I am running node-red under Ubuntu in an EC2 instance on AWS. This can run for 12 month within the constraints of their free tier. Here is a tutorial: https://nodered.org/docs/getting-started/aws

You will also need to install several node-red add ons:

sudo npm install -g node-red-dashboard

sudo npm install -g node-red-contrib-mbed-cloud

sudo npm istall -g node-red-contrib-moment

After starting node-red import the contents of GarageFlow.txt from the project, pin the flow into the page.

To enable your web app to access your Pelion account you need an API key.

First you will neet to use your Pelion account to create an API key.

https://os.mbed.com/media/uploads/JimCarver/api_portal.jpg

Now we need to apply that API key to your Node-Red flow.

https://os.mbed.com/media/uploads/JimCarver/api_node-red.jpg

Committer:
JimCarver
Date:
Thu Dec 05 19:03:48 2019 +0000
Revision:
37:ec1124e5ec1f
Parent:
18:a15bfe7aaebd
Bug fix

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_ */