VL53L1X sensor class, for ARM Mbed platform. Based on Ultra-lite, Mass-market C Driver.

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Committer:
dmathew
Date:
Fri May 17 09:07:55 2019 +0000
Revision:
6:aa13392d16bb
Parent:
5:f16727052990
Changes to class to allow interrupts

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JerrySzczurak 5:f16727052990 1 /*******************************************************************************
JerrySzczurak 5:f16727052990 2 * @file vl53l1x_class.h
JerrySzczurak 5:f16727052990 3 * @author JS
JerrySzczurak 5:f16727052990 4 * @version V0.0.1
JerrySzczurak 5:f16727052990 5 * @date 15-January-2019
JerrySzczurak 5:f16727052990 6 * @brief Header file for VL53L1 sensor component
JerrySzczurak 5:f16727052990 7 ******************************************************************************
dmathew 6:aa13392d16bb 8 Copyright © 2019, STMicroelectronics International N.V.
JerrySzczurak 5:f16727052990 9 All rights reserved.
JerrySzczurak 5:f16727052990 10 Redistribution and use in source and binary forms, with or without
JerrySzczurak 5:f16727052990 11 modification, are permitted provided that the following conditions are met:
JerrySzczurak 5:f16727052990 12 * Redistributions of source code must retain the above copyright
JerrySzczurak 5:f16727052990 13 notice, this list of conditions and the following disclaimer.
JerrySzczurak 5:f16727052990 14 * Redistributions in binary form must reproduce the above copyright
JerrySzczurak 5:f16727052990 15 notice, this list of conditions and the following disclaimer in the
JerrySzczurak 5:f16727052990 16 documentation and/or other materials provided with the distribution.
JerrySzczurak 5:f16727052990 17 * Neither the name of STMicroelectronics nor the
JerrySzczurak 5:f16727052990 18 names of its contributors may be used to endorse or promote products
JerrySzczurak 5:f16727052990 19 derived from this software without specific prior written permission.
JerrySzczurak 5:f16727052990 20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
JerrySzczurak 5:f16727052990 21 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
JerrySzczurak 5:f16727052990 22 WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
JerrySzczurak 5:f16727052990 23 NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
JerrySzczurak 5:f16727052990 24 IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY
JerrySzczurak 5:f16727052990 25 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
JerrySzczurak 5:f16727052990 26 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
JerrySzczurak 5:f16727052990 27 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
JerrySzczurak 5:f16727052990 28 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
JerrySzczurak 5:f16727052990 29 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
JerrySzczurak 5:f16727052990 30 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
JerrySzczurak 5:f16727052990 31 *****************************************************************************/
JerrySzczurak 5:f16727052990 32
JerrySzczurak 5:f16727052990 33 #ifndef __VL53L1X_CLASS_H
JerrySzczurak 5:f16727052990 34 #define __VL53L1X_CLASS_H
JerrySzczurak 5:f16727052990 35
JerrySzczurak 5:f16727052990 36
JerrySzczurak 5:f16727052990 37 #ifdef _MSC_VER
JerrySzczurak 5:f16727052990 38 # ifdef VL53L1X_API_EXPORTS
JerrySzczurak 5:f16727052990 39 # define VL53L1X_API __declspec(dllexport)
JerrySzczurak 5:f16727052990 40 # else
JerrySzczurak 5:f16727052990 41 # define VL53L1X_API
JerrySzczurak 5:f16727052990 42 # endif
JerrySzczurak 5:f16727052990 43 #else
JerrySzczurak 5:f16727052990 44 # define VL53L1X_API
JerrySzczurak 5:f16727052990 45 #endif
JerrySzczurak 5:f16727052990 46
JerrySzczurak 5:f16727052990 47
JerrySzczurak 5:f16727052990 48 /* Includes ------------------------------------------------------------------*/
JerrySzczurak 5:f16727052990 49 #include "mbed.h"
JerrySzczurak 5:f16727052990 50 #include "PinNames.h"
JerrySzczurak 5:f16727052990 51 #include "RangeSensor.h"
JerrySzczurak 5:f16727052990 52 #include "vl53l1x_error_codes.h"
JerrySzczurak 5:f16727052990 53 #include "vl53L1x_I2c.h"
JerrySzczurak 5:f16727052990 54 #include "Stmpe1600.h"
JerrySzczurak 5:f16727052990 55
JerrySzczurak 5:f16727052990 56
JerrySzczurak 5:f16727052990 57 #define VL53L1X_IMPLEMENTATION_VER_MAJOR 1
JerrySzczurak 5:f16727052990 58 #define VL53L1X_IMPLEMENTATION_VER_MINOR 0
JerrySzczurak 5:f16727052990 59 #define VL53L1X_IMPLEMENTATION_VER_SUB 1
JerrySzczurak 5:f16727052990 60 #define VL53L1X_IMPLEMENTATION_VER_REVISION 0000
JerrySzczurak 5:f16727052990 61
JerrySzczurak 5:f16727052990 62 typedef int8_t VL53L1X_ERROR;
JerrySzczurak 5:f16727052990 63
JerrySzczurak 5:f16727052990 64 #define VL53L1_I2C_SLAVE__DEVICE_ADDRESS 0x0001
JerrySzczurak 5:f16727052990 65 #define VL53L1_VHV_CONFIG__TIMEOUT_MACROP_LOOP_BOUND 0x0008
JerrySzczurak 5:f16727052990 66 #define ALGO__CROSSTALK_COMPENSATION_PLANE_OFFSET_KCPS 0x0016
JerrySzczurak 5:f16727052990 67 #define ALGO__CROSSTALK_COMPENSATION_X_PLANE_GRADIENT_KCPS 0x0018
JerrySzczurak 5:f16727052990 68 #define ALGO__CROSSTALK_COMPENSATION_Y_PLANE_GRADIENT_KCPS 0x001A
JerrySzczurak 5:f16727052990 69 #define ALGO__PART_TO_PART_RANGE_OFFSET_MM 0x001E
JerrySzczurak 5:f16727052990 70 #define MM_CONFIG__INNER_OFFSET_MM 0x0020
JerrySzczurak 5:f16727052990 71 #define MM_CONFIG__OUTER_OFFSET_MM 0x0022
JerrySzczurak 5:f16727052990 72 #define GPIO_HV_MUX__CTRL 0x0030
JerrySzczurak 5:f16727052990 73 #define GPIO__TIO_HV_STATUS 0x0031
JerrySzczurak 5:f16727052990 74 #define SYSTEM__INTERRUPT_CONFIG_GPIO 0x0046
JerrySzczurak 5:f16727052990 75 #define PHASECAL_CONFIG__TIMEOUT_MACROP 0x004B
JerrySzczurak 5:f16727052990 76 #define RANGE_CONFIG__TIMEOUT_MACROP_A_HI 0x005E
JerrySzczurak 5:f16727052990 77 #define RANGE_CONFIG__VCSEL_PERIOD_A 0x0060
JerrySzczurak 5:f16727052990 78 #define RANGE_CONFIG__VCSEL_PERIOD_B 0x0063
JerrySzczurak 5:f16727052990 79 #define RANGE_CONFIG__TIMEOUT_MACROP_B_HI 0x0061
JerrySzczurak 5:f16727052990 80 #define RANGE_CONFIG__TIMEOUT_MACROP_B_LO 0x0062
JerrySzczurak 5:f16727052990 81 #define RANGE_CONFIG__SIGMA_THRESH 0x0064
JerrySzczurak 5:f16727052990 82 #define RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS 0x0066
JerrySzczurak 5:f16727052990 83 #define RANGE_CONFIG__VALID_PHASE_HIGH 0x0069
JerrySzczurak 5:f16727052990 84 #define VL53L1_SYSTEM__INTERMEASUREMENT_PERIOD 0x006C
JerrySzczurak 5:f16727052990 85 #define SYSTEM__THRESH_HIGH 0x0072
JerrySzczurak 5:f16727052990 86 #define SYSTEM__THRESH_LOW 0x0074
JerrySzczurak 5:f16727052990 87 #define SD_CONFIG__WOI_SD0 0x0078
JerrySzczurak 5:f16727052990 88 #define SD_CONFIG__INITIAL_PHASE_SD0 0x007A
JerrySzczurak 5:f16727052990 89 #define ROI_CONFIG__USER_ROI_CENTRE_SPAD 0x007F
JerrySzczurak 5:f16727052990 90 #define ROI_CONFIG__USER_ROI_REQUESTED_GLOBAL_XY_SIZE 0x0080
JerrySzczurak 5:f16727052990 91 #define SYSTEM__SEQUENCE_CONFIG 0x0081
JerrySzczurak 5:f16727052990 92 #define VL53L1_SYSTEM__GROUPED_PARAMETER_HOLD 0x0082
JerrySzczurak 5:f16727052990 93 #define SYSTEM__INTERRUPT_CLEAR 0x0086
JerrySzczurak 5:f16727052990 94 #define SYSTEM__MODE_START 0x0087
JerrySzczurak 5:f16727052990 95 #define VL53L1_RESULT__RANGE_STATUS 0x0089
JerrySzczurak 5:f16727052990 96 #define VL53L1_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0 0x008C
JerrySzczurak 5:f16727052990 97 #define RESULT__AMBIENT_COUNT_RATE_MCPS_SD 0x0090
JerrySzczurak 5:f16727052990 98 #define VL53L1_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0 0x0096
JerrySzczurak 5:f16727052990 99 #define VL53L1_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0 0x0098
JerrySzczurak 5:f16727052990 100 #define VL53L1_RESULT__OSC_CALIBRATE_VAL 0x00DE
JerrySzczurak 5:f16727052990 101 #define VL53L1_FIRMWARE__SYSTEM_STATUS 0x00E5
JerrySzczurak 5:f16727052990 102 #define VL53L1_IDENTIFICATION__MODEL_ID 0x010F
JerrySzczurak 5:f16727052990 103 #define VL53L1_ROI_CONFIG__MODE_ROI_CENTRE_SPAD 0x013E
JerrySzczurak 5:f16727052990 104
JerrySzczurak 5:f16727052990 105
JerrySzczurak 5:f16727052990 106 #define VL53L1X_DEFAULT_DEVICE_ADDRESS 0x52
JerrySzczurak 5:f16727052990 107
JerrySzczurak 5:f16727052990 108 #define VL53L1X_REG_IDENTIFICATION_MODEL_ID 0x010F
JerrySzczurak 5:f16727052990 109 /****************************************
JerrySzczurak 5:f16727052990 110 * PRIVATE define do not edit
JerrySzczurak 5:f16727052990 111 ****************************************/
JerrySzczurak 5:f16727052990 112
JerrySzczurak 5:f16727052990 113 /**
JerrySzczurak 5:f16727052990 114 * @brief defines SW Version
JerrySzczurak 5:f16727052990 115 */
JerrySzczurak 5:f16727052990 116 typedef struct {
JerrySzczurak 5:f16727052990 117 uint8_t major; /*!< major number */
JerrySzczurak 5:f16727052990 118 uint8_t minor; /*!< minor number */
JerrySzczurak 5:f16727052990 119 uint8_t build; /*!< build number */
JerrySzczurak 5:f16727052990 120 uint32_t revision; /*!< revision number */
JerrySzczurak 5:f16727052990 121 } VL53L1X_Version_t;
JerrySzczurak 5:f16727052990 122
JerrySzczurak 5:f16727052990 123
JerrySzczurak 5:f16727052990 124 typedef struct {
JerrySzczurak 5:f16727052990 125
JerrySzczurak 5:f16727052990 126 uint8_t I2cDevAddr;
JerrySzczurak 5:f16727052990 127
JerrySzczurak 5:f16727052990 128 } VL53L1_Dev_t;
JerrySzczurak 5:f16727052990 129
JerrySzczurak 5:f16727052990 130 typedef VL53L1_Dev_t *VL53L1_DEV;
JerrySzczurak 5:f16727052990 131
JerrySzczurak 5:f16727052990 132
JerrySzczurak 5:f16727052990 133 /* Classes -------------------------------------------------------------------*/
JerrySzczurak 5:f16727052990 134 /** Class representing a VL53L1 sensor component
JerrySzczurak 5:f16727052990 135 */
JerrySzczurak 5:f16727052990 136 class VL53L1X : public RangeSensor
JerrySzczurak 5:f16727052990 137 {
JerrySzczurak 5:f16727052990 138 public:
JerrySzczurak 5:f16727052990 139 /** Constructor
JerrySzczurak 5:f16727052990 140 * @param[in] &i2c device I2C to be used for communication
JerrySzczurak 5:f16727052990 141 * @param[in] &pin_gpio1 pin Mbed InterruptIn PinName to be used as component GPIO_1 INT
JerrySzczurak 5:f16727052990 142 * @param[in] DevAddr device address, 0x52 by default
JerrySzczurak 5:f16727052990 143 */
JerrySzczurak 5:f16727052990 144 VL53L1X(vl53L1X_DevI2C *i2c, DigitalOut *pin, PinName pin_gpio1, uint8_t dev_addr = VL53L1X_DEFAULT_DEVICE_ADDRESS)
JerrySzczurak 5:f16727052990 145 : RangeSensor(), dev_i2c(i2c), _gpio0(pin)
JerrySzczurak 5:f16727052990 146 {
JerrySzczurak 5:f16727052990 147 MyDevice.I2cDevAddr=dev_addr;
JerrySzczurak 5:f16727052990 148 Device = &MyDevice;
JerrySzczurak 5:f16727052990 149
JerrySzczurak 5:f16727052990 150 _expgpio0 = NULL;
JerrySzczurak 5:f16727052990 151 if (pin_gpio1 != NC) {
JerrySzczurak 5:f16727052990 152 _gpio1Int = new InterruptIn(pin_gpio1);
JerrySzczurak 5:f16727052990 153 } else {
JerrySzczurak 5:f16727052990 154 _gpio1Int = NULL;
JerrySzczurak 5:f16727052990 155 }
JerrySzczurak 5:f16727052990 156 }
JerrySzczurak 5:f16727052990 157
JerrySzczurak 5:f16727052990 158 /** Constructor 2 (STMPE1600DigiOut)
JerrySzczurak 5:f16727052990 159 * @param[in] i2c device I2C to be used for communication
JerrySzczurak 5:f16727052990 160 * @param[in] &pin Gpio Expander STMPE1600DigiOut pin to be used as component GPIO_0 CE
JerrySzczurak 5:f16727052990 161 * @param[in] pin_gpio1 pin Mbed InterruptIn PinName to be used as component GPIO_1 INT
JerrySzczurak 5:f16727052990 162 * @param[in] device address, 0x29 by default
JerrySzczurak 5:f16727052990 163 */
JerrySzczurak 5:f16727052990 164 VL53L1X(vl53L1X_DevI2C *i2c, Stmpe1600DigiOut *pin, PinName pin_gpio1,
JerrySzczurak 5:f16727052990 165 uint8_t dev_addr = VL53L1X_DEFAULT_DEVICE_ADDRESS)
JerrySzczurak 5:f16727052990 166 : dev_i2c(i2c), _expgpio0(pin)
JerrySzczurak 5:f16727052990 167 {
JerrySzczurak 5:f16727052990 168 MyDevice.I2cDevAddr=dev_addr;
JerrySzczurak 5:f16727052990 169 Device = &MyDevice;
JerrySzczurak 5:f16727052990 170
JerrySzczurak 5:f16727052990 171 _gpio0 = NULL;
JerrySzczurak 5:f16727052990 172 if (pin_gpio1 != NC) {
JerrySzczurak 5:f16727052990 173 _gpio1Int = new InterruptIn(pin_gpio1);
JerrySzczurak 5:f16727052990 174 } else {
JerrySzczurak 5:f16727052990 175 _gpio1Int = NULL;
JerrySzczurak 5:f16727052990 176 }
JerrySzczurak 5:f16727052990 177 }
JerrySzczurak 5:f16727052990 178
JerrySzczurak 5:f16727052990 179 /** Destructor
JerrySzczurak 5:f16727052990 180 */
JerrySzczurak 5:f16727052990 181 virtual ~VL53L1X()
JerrySzczurak 5:f16727052990 182 {
JerrySzczurak 5:f16727052990 183 if (_gpio1Int != NULL) {
JerrySzczurak 5:f16727052990 184 delete _gpio1Int;
JerrySzczurak 5:f16727052990 185 }
JerrySzczurak 5:f16727052990 186 }
JerrySzczurak 5:f16727052990 187
JerrySzczurak 5:f16727052990 188
JerrySzczurak 5:f16727052990 189
JerrySzczurak 5:f16727052990 190 VL53L1_DEV getDevicePtr() { return Device; }
JerrySzczurak 5:f16727052990 191
JerrySzczurak 5:f16727052990 192
JerrySzczurak 5:f16727052990 193 /* warning: VL53L1 class inherits from GenericSensor, RangeSensor and LightSensor, that haven`t a destructor.
JerrySzczurak 5:f16727052990 194 The warning should request to introduce a virtual destructor to make sure to delete the object */
JerrySzczurak 5:f16727052990 195
JerrySzczurak 5:f16727052990 196 /*** Interface Methods ***/
JerrySzczurak 5:f16727052990 197 /*** High level API ***/
JerrySzczurak 5:f16727052990 198 /**
JerrySzczurak 5:f16727052990 199 * @brief PowerOn the sensor
JerrySzczurak 5:f16727052990 200 * @return void
JerrySzczurak 5:f16727052990 201 */
JerrySzczurak 5:f16727052990 202 /* turns on the sensor */
JerrySzczurak 5:f16727052990 203 virtual void VL53L1_On(void)
JerrySzczurak 5:f16727052990 204 {
JerrySzczurak 5:f16727052990 205 printf("VL53L1_On\r\n");
JerrySzczurak 5:f16727052990 206 if (_gpio0) {
JerrySzczurak 5:f16727052990 207 *_gpio0 = 1;
JerrySzczurak 5:f16727052990 208 } else {
JerrySzczurak 5:f16727052990 209 if (_expgpio0) {
JerrySzczurak 5:f16727052990 210 *_expgpio0 = 1;
JerrySzczurak 5:f16727052990 211 }
JerrySzczurak 5:f16727052990 212 }
JerrySzczurak 5:f16727052990 213 wait_ms(10);
JerrySzczurak 5:f16727052990 214 }
JerrySzczurak 5:f16727052990 215
JerrySzczurak 5:f16727052990 216 /**
JerrySzczurak 5:f16727052990 217 * @brief PowerOff the sensor
JerrySzczurak 5:f16727052990 218 * @return void
JerrySzczurak 5:f16727052990 219 */
JerrySzczurak 5:f16727052990 220 /* turns off the sensor */
JerrySzczurak 5:f16727052990 221 virtual void VL53L1_Off(void)
JerrySzczurak 5:f16727052990 222 {
JerrySzczurak 5:f16727052990 223 printf("VL53L1_Off\r\n");
JerrySzczurak 5:f16727052990 224 if (_gpio0) {
JerrySzczurak 5:f16727052990 225 *_gpio0 = 0;
JerrySzczurak 5:f16727052990 226 } else {
JerrySzczurak 5:f16727052990 227 if (_expgpio0) {
JerrySzczurak 5:f16727052990 228 *_expgpio0 = 0;
JerrySzczurak 5:f16727052990 229 }
JerrySzczurak 5:f16727052990 230 }
JerrySzczurak 5:f16727052990 231 wait_ms(10);
JerrySzczurak 5:f16727052990 232 }
JerrySzczurak 5:f16727052990 233
JerrySzczurak 5:f16727052990 234 int is_present()
JerrySzczurak 5:f16727052990 235 {
JerrySzczurak 5:f16727052990 236 int status;
JerrySzczurak 5:f16727052990 237 uint8_t id = 0;
JerrySzczurak 5:f16727052990 238
JerrySzczurak 5:f16727052990 239 status = read_id(&id);
JerrySzczurak 5:f16727052990 240 if (status) {
JerrySzczurak 5:f16727052990 241 printf("Failed to read ID device. Device not present!\n\r");
JerrySzczurak 5:f16727052990 242 }
JerrySzczurak 5:f16727052990 243 return status;
JerrySzczurak 5:f16727052990 244 }
JerrySzczurak 5:f16727052990 245
JerrySzczurak 5:f16727052990 246 /**
JerrySzczurak 5:f16727052990 247 * @brief Initialize the sensor with default values
JerrySzczurak 5:f16727052990 248 * @return 0 on Success
JerrySzczurak 5:f16727052990 249 */
JerrySzczurak 5:f16727052990 250
JerrySzczurak 5:f16727052990 251 VL53L1X_ERROR InitSensor(uint8_t address){
JerrySzczurak 5:f16727052990 252 VL53L1X_ERROR status = 0;
JerrySzczurak 5:f16727052990 253 uint8_t sensorState = 0;
JerrySzczurak 5:f16727052990 254 VL53L1_Off();
JerrySzczurak 5:f16727052990 255 VL53L1_On();
JerrySzczurak 5:f16727052990 256 status = VL53L1X_SetI2CAddress(address);
JerrySzczurak 5:f16727052990 257
JerrySzczurak 5:f16727052990 258 if(!status){
JerrySzczurak 5:f16727052990 259 status = VL53L1X_SensorInit();
JerrySzczurak 5:f16727052990 260 }
JerrySzczurak 5:f16727052990 261
JerrySzczurak 5:f16727052990 262 while(!status && !sensorState) {
JerrySzczurak 5:f16727052990 263 status = VL53L1X_BootState(&sensorState);
JerrySzczurak 5:f16727052990 264 wait_ms(2);
JerrySzczurak 5:f16727052990 265 }
JerrySzczurak 5:f16727052990 266
JerrySzczurak 5:f16727052990 267 return status;
JerrySzczurak 5:f16727052990 268 }
JerrySzczurak 5:f16727052990 269
JerrySzczurak 5:f16727052990 270
JerrySzczurak 5:f16727052990 271
dmathew 6:aa13392d16bb 272 /**
dmathew 6:aa13392d16bb 273 *
dmathew 6:aa13392d16bb 274 * @brief One time device initialization
dmathew 6:aa13392d16bb 275 * @param void
dmathew 6:aa13392d16bb 276 * @return 0 on success, @a #CALIBRATION_WARNING if failed
dmathew 6:aa13392d16bb 277 */
JerrySzczurak 5:f16727052990 278 virtual int init(void *init)
JerrySzczurak 5:f16727052990 279 {
JerrySzczurak 5:f16727052990 280 return VL53L1X_SensorInit();
dmathew 6:aa13392d16bb 281
JerrySzczurak 5:f16727052990 282 }
JerrySzczurak 5:f16727052990 283
JerrySzczurak 5:f16727052990 284 /**
JerrySzczurak 5:f16727052990 285 * @brief Initialize the sensor with default values
JerrySzczurak 5:f16727052990 286 * @return "0" on success
JerrySzczurak 5:f16727052990 287 */
JerrySzczurak 5:f16727052990 288 int init_sensor(uint8_t new_addr);
JerrySzczurak 5:f16727052990 289
JerrySzczurak 5:f16727052990 290 /* Read function of the ID device */
JerrySzczurak 5:f16727052990 291 virtual int read_id(uint8_t *id){
JerrySzczurak 5:f16727052990 292 int status = 0;
JerrySzczurak 5:f16727052990 293 uint16_t rl_id = 0;
JerrySzczurak 5:f16727052990 294
JerrySzczurak 5:f16727052990 295 uint8_t ExpanderData[2];
JerrySzczurak 5:f16727052990 296
JerrySzczurak 5:f16727052990 297 ExpanderData[0] = 0;
JerrySzczurak 5:f16727052990 298 ExpanderData[1] = 0;
JerrySzczurak 5:f16727052990 299 rl_id = 0;
JerrySzczurak 5:f16727052990 300 dev_i2c->v53l1x_i2c_read(&ExpanderData[0], Device->I2cDevAddr, VL53L1X_REG_IDENTIFICATION_MODEL_ID, 2);
JerrySzczurak 5:f16727052990 301
JerrySzczurak 5:f16727052990 302 rl_id = (ExpanderData[0] << 8) + ExpanderData[1];
JerrySzczurak 5:f16727052990 303 printf("Model ID is: %d (%X) \r\n",rl_id, rl_id);
JerrySzczurak 5:f16727052990 304
JerrySzczurak 5:f16727052990 305 uint8_t tmp = 0;
JerrySzczurak 5:f16727052990 306 ExpanderData[0] = VL53L1_FIRMWARE__SYSTEM_STATUS >> 8;
JerrySzczurak 5:f16727052990 307 ExpanderData[1] = VL53L1_FIRMWARE__SYSTEM_STATUS & 0x0FF;
JerrySzczurak 5:f16727052990 308 dev_i2c->v53l1x_i2c_read(&tmp, Device->I2cDevAddr, VL53L1_FIRMWARE__SYSTEM_STATUS, 1);
JerrySzczurak 5:f16727052990 309
JerrySzczurak 5:f16727052990 310 printf("Firmware system is: %d\r\n",tmp);
JerrySzczurak 5:f16727052990 311
JerrySzczurak 5:f16727052990 312 if (rl_id == 0xEACC) {
JerrySzczurak 5:f16727052990 313 printf("Device is present %d:\r\n", rl_id);
JerrySzczurak 5:f16727052990 314 return status;
JerrySzczurak 5:f16727052990 315 }
JerrySzczurak 5:f16727052990 316 return -1;
JerrySzczurak 5:f16727052990 317 }
JerrySzczurak 5:f16727052990 318
dmathew 6:aa13392d16bb 319 /**
dmathew 6:aa13392d16bb 320 * @brief Interrupt handling func to be called by user after an INT is occurred
dmathew 6:aa13392d16bb 321 * @param[out] Data pointer to the distance to read data in to
dmathew 6:aa13392d16bb 322 * @return 0 on Success
dmathew 6:aa13392d16bb 323 */
dmathew 6:aa13392d16bb 324 int handle_irq(uint16_t *distance);
JerrySzczurak 5:f16727052990 325
dmathew 6:aa13392d16bb 326 /**
dmathew 6:aa13392d16bb 327 * @brief Start the measure indicated by operating mode
dmathew 6:aa13392d16bb 328 * @param[in] fptr specifies call back function must be !NULL in case of interrupt measure
dmathew 6:aa13392d16bb 329 * @return 0 on Success
dmathew 6:aa13392d16bb 330 */
dmathew 6:aa13392d16bb 331 int start_measurement(void (*fptr)(void));
dmathew 6:aa13392d16bb 332 /**
dmathew 6:aa13392d16bb 333 * @brief Stop the currently running measure indicate by operating_mode
dmathew 6:aa13392d16bb 334 * @return 0 on Success
dmathew 6:aa13392d16bb 335 */
dmathew 6:aa13392d16bb 336 int stop_measurement();
dmathew 6:aa13392d16bb 337 /**
dmathew 6:aa13392d16bb 338 * @brief Get results for the measure
dmathew 6:aa13392d16bb 339 * @param[out] Data pointer to the distance_data to read data in to
dmathew 6:aa13392d16bb 340 * @return 0 on Success
dmathew 6:aa13392d16bb 341 */
dmathew 6:aa13392d16bb 342 int get_measurement(uint16_t *distance);
dmathew 6:aa13392d16bb 343 /**
dmathew 6:aa13392d16bb 344 * @brief Enable interrupt measure IRQ
dmathew 6:aa13392d16bb 345 * @return 0 on Success
dmathew 6:aa13392d16bb 346 */
dmathew 6:aa13392d16bb 347 void enable_interrupt_measure_detection_irq(void)
dmathew 6:aa13392d16bb 348 {
dmathew 6:aa13392d16bb 349 if (_gpio1Int != NULL)
dmathew 6:aa13392d16bb 350 _gpio1Int->enable_irq();
dmathew 6:aa13392d16bb 351 }
dmathew 6:aa13392d16bb 352
dmathew 6:aa13392d16bb 353 /**
dmathew 6:aa13392d16bb 354 * @brief Disable interrupt measure IRQ
dmathew 6:aa13392d16bb 355 * @return 0 on Success
dmathew 6:aa13392d16bb 356 */
dmathew 6:aa13392d16bb 357 void disable_interrupt_measure_detection_irq(void)
dmathew 6:aa13392d16bb 358 {
dmathew 6:aa13392d16bb 359 if (_gpio1Int != NULL)
dmathew 6:aa13392d16bb 360 _gpio1Int->disable_irq();
dmathew 6:aa13392d16bb 361 }
dmathew 6:aa13392d16bb 362 /**
dmathew 6:aa13392d16bb 363 * @brief Attach a function to call when an interrupt is detected, i.e. measurement is ready
dmathew 6:aa13392d16bb 364 * @param[in] fptr pointer to call back function to be called whenever an interrupt occours
dmathew 6:aa13392d16bb 365 * @return 0 on Success
dmathew 6:aa13392d16bb 366 */
dmathew 6:aa13392d16bb 367 void attach_interrupt_measure_detection_irq(void (*fptr)(void))
dmathew 6:aa13392d16bb 368 {
dmathew 6:aa13392d16bb 369 if (_gpio1Int != NULL)
dmathew 6:aa13392d16bb 370 _gpio1Int->rise(fptr);
dmathew 6:aa13392d16bb 371 }
dmathew 6:aa13392d16bb 372 /**
dmathew 6:aa13392d16bb 373 * @brief Get ranging result and only that
dmathew 6:aa13392d16bb 374 * @param pRange_mm Pointer to range distance
dmathew 6:aa13392d16bb 375 * @return 0 on success
dmathew 6:aa13392d16bb 376 */
JerrySzczurak 5:f16727052990 377 virtual int get_distance(uint32_t *piData)
JerrySzczurak 5:f16727052990 378 {
JerrySzczurak 5:f16727052990 379 int status;
JerrySzczurak 5:f16727052990 380 uint16_t distance;
JerrySzczurak 5:f16727052990 381 status = VL53L1X_GetDistance(&distance);
JerrySzczurak 5:f16727052990 382 *piData = (uint32_t) distance;
JerrySzczurak 5:f16727052990 383 return status;
JerrySzczurak 5:f16727052990 384 }
JerrySzczurak 5:f16727052990 385
JerrySzczurak 5:f16727052990 386
dmathew 6:aa13392d16bb 387 /* VL53L1X_api.h functions */
JerrySzczurak 5:f16727052990 388
JerrySzczurak 5:f16727052990 389 /**
JerrySzczurak 5:f16727052990 390 * @brief This function returns the SW driver version
JerrySzczurak 5:f16727052990 391 */
JerrySzczurak 5:f16727052990 392 VL53L1X_ERROR VL53L1X_GetSWVersion(VL53L1X_Version_t *pVersion);
JerrySzczurak 5:f16727052990 393
JerrySzczurak 5:f16727052990 394 /**
JerrySzczurak 5:f16727052990 395 * @brief This function sets the sensor I2C address used in case multiple devices application, default address 0x52
JerrySzczurak 5:f16727052990 396 */
JerrySzczurak 5:f16727052990 397 VL53L1X_ERROR VL53L1X_SetI2CAddress(uint8_t new_address);
JerrySzczurak 5:f16727052990 398
JerrySzczurak 5:f16727052990 399 /**
JerrySzczurak 5:f16727052990 400 * @brief This function loads the 135 bytes default values to initialize the sensor.
JerrySzczurak 5:f16727052990 401 * @param dev Device address
JerrySzczurak 5:f16727052990 402 * @return 0:success, != 0:failed
JerrySzczurak 5:f16727052990 403 */
JerrySzczurak 5:f16727052990 404 VL53L1X_ERROR VL53L1X_SensorInit();
JerrySzczurak 5:f16727052990 405
JerrySzczurak 5:f16727052990 406 /**
JerrySzczurak 5:f16727052990 407 * @brief This function clears the interrupt, to be called after a ranging data reading
JerrySzczurak 5:f16727052990 408 * to arm the interrupt for the next data ready event.
JerrySzczurak 5:f16727052990 409 */
JerrySzczurak 5:f16727052990 410 VL53L1X_ERROR VL53L1X_ClearInterrupt();
JerrySzczurak 5:f16727052990 411
JerrySzczurak 5:f16727052990 412 /**
JerrySzczurak 5:f16727052990 413 * @brief This function programs the interrupt polarity\n
JerrySzczurak 5:f16727052990 414 * 1=active high (default), 0=active low
JerrySzczurak 5:f16727052990 415 */
JerrySzczurak 5:f16727052990 416 VL53L1X_ERROR VL53L1X_SetInterruptPolarity(uint8_t IntPol);
JerrySzczurak 5:f16727052990 417
JerrySzczurak 5:f16727052990 418 /**
JerrySzczurak 5:f16727052990 419 * @brief This function returns the current interrupt polarity\n
JerrySzczurak 5:f16727052990 420 * 1=active high (default), 0=active low
JerrySzczurak 5:f16727052990 421 */
JerrySzczurak 5:f16727052990 422 VL53L1X_ERROR VL53L1X_GetInterruptPolarity(uint8_t *pIntPol);
JerrySzczurak 5:f16727052990 423
JerrySzczurak 5:f16727052990 424 /**
JerrySzczurak 5:f16727052990 425 * @brief This function starts the ranging distance operation\n
JerrySzczurak 5:f16727052990 426 * The ranging operation is continuous. The clear interrupt has to be done after each get data to allow the interrupt to raise when the next data is ready\n
JerrySzczurak 5:f16727052990 427 * 1=active high (default), 0=active low, use SetInterruptPolarity() to change the interrupt polarity if required.
JerrySzczurak 5:f16727052990 428 */
JerrySzczurak 5:f16727052990 429 VL53L1X_ERROR VL53L1X_StartRanging();
JerrySzczurak 5:f16727052990 430
JerrySzczurak 5:f16727052990 431 /**
JerrySzczurak 5:f16727052990 432 * @brief This function stops the ranging.
JerrySzczurak 5:f16727052990 433 */
JerrySzczurak 5:f16727052990 434 VL53L1X_ERROR VL53L1X_StopRanging();
JerrySzczurak 5:f16727052990 435
JerrySzczurak 5:f16727052990 436 /**
JerrySzczurak 5:f16727052990 437 * @brief This function checks if the new ranging data is available by polling the dedicated register.
JerrySzczurak 5:f16727052990 438 * @param : isDataReady==0 -> not ready; isDataReady==1 -> ready
JerrySzczurak 5:f16727052990 439 */
JerrySzczurak 5:f16727052990 440 VL53L1X_ERROR VL53L1X_CheckForDataReady(uint8_t *isDataReady);
JerrySzczurak 5:f16727052990 441
JerrySzczurak 5:f16727052990 442 /**
JerrySzczurak 5:f16727052990 443 * @brief This function programs the timing budget in ms.
JerrySzczurak 5:f16727052990 444 * Predefined values = 15, 20, 33, 50, 100(default), 200, 500.
JerrySzczurak 5:f16727052990 445 */
JerrySzczurak 5:f16727052990 446 VL53L1X_ERROR VL53L1X_SetTimingBudgetInMs(uint16_t TimingBudgetInMs);
JerrySzczurak 5:f16727052990 447
JerrySzczurak 5:f16727052990 448 /**
JerrySzczurak 5:f16727052990 449 * @brief This function returns the current timing budget in ms.
JerrySzczurak 5:f16727052990 450 */
JerrySzczurak 5:f16727052990 451 VL53L1X_ERROR VL53L1X_GetTimingBudgetInMs(uint16_t *pTimingBudgetInMs);
JerrySzczurak 5:f16727052990 452
JerrySzczurak 5:f16727052990 453 /**
JerrySzczurak 5:f16727052990 454 * @brief This function programs the distance mode (1=short, 2=long(default)).
JerrySzczurak 5:f16727052990 455 * Short mode max distance is limited to 1.3 m but better ambient immunity.\n
JerrySzczurak 5:f16727052990 456 * Long mode can range up to 4 m in the dark with 200 ms timing budget.
JerrySzczurak 5:f16727052990 457 */
JerrySzczurak 5:f16727052990 458 VL53L1X_ERROR VL53L1X_SetDistanceMode(uint16_t DistanceMode);
JerrySzczurak 5:f16727052990 459
JerrySzczurak 5:f16727052990 460 /**
JerrySzczurak 5:f16727052990 461 * @brief This function returns the current distance mode (1=short, 2=long).
JerrySzczurak 5:f16727052990 462 */
JerrySzczurak 5:f16727052990 463 VL53L1X_ERROR VL53L1X_GetDistanceMode(uint16_t *pDistanceMode);
JerrySzczurak 5:f16727052990 464
JerrySzczurak 5:f16727052990 465 /**
JerrySzczurak 5:f16727052990 466 * @brief This function programs the Intermeasurement period in ms\n
JerrySzczurak 5:f16727052990 467 * Intermeasurement period must be >/= timing budget. This condition is not checked by the API,
JerrySzczurak 5:f16727052990 468 * the customer has the duty to check the condition. Default = 100 ms
JerrySzczurak 5:f16727052990 469 */
JerrySzczurak 5:f16727052990 470 VL53L1X_ERROR VL53L1X_SetInterMeasurementInMs(uint16_t InterMeasurementInMs);
JerrySzczurak 5:f16727052990 471
JerrySzczurak 5:f16727052990 472 /**
JerrySzczurak 5:f16727052990 473 * @brief This function returns the Intermeasurement period in ms.
JerrySzczurak 5:f16727052990 474 */
JerrySzczurak 5:f16727052990 475 VL53L1X_ERROR VL53L1X_GetInterMeasurementInMs(uint16_t * pIM);
JerrySzczurak 5:f16727052990 476
JerrySzczurak 5:f16727052990 477 /**
JerrySzczurak 5:f16727052990 478 * @brief This function returns the boot state of the device (1:booted, 0:not booted)
JerrySzczurak 5:f16727052990 479 */
JerrySzczurak 5:f16727052990 480 VL53L1X_ERROR VL53L1X_BootState(uint8_t *state);
JerrySzczurak 5:f16727052990 481
JerrySzczurak 5:f16727052990 482 /**
JerrySzczurak 5:f16727052990 483 * @brief This function returns the sensor id, sensor Id must be 0xEEAC
JerrySzczurak 5:f16727052990 484 */
JerrySzczurak 5:f16727052990 485 VL53L1X_ERROR VL53L1X_GetSensorId(uint16_t *id);
JerrySzczurak 5:f16727052990 486
JerrySzczurak 5:f16727052990 487 /**
JerrySzczurak 5:f16727052990 488 * @brief This function returns the distance measured by the sensor in mm
JerrySzczurak 5:f16727052990 489 */
JerrySzczurak 5:f16727052990 490 VL53L1X_ERROR VL53L1X_GetDistance(uint16_t *distance);
JerrySzczurak 5:f16727052990 491
JerrySzczurak 5:f16727052990 492 /**
JerrySzczurak 5:f16727052990 493 * @brief This function returns the returned signal per SPAD in kcps/SPAD.
JerrySzczurak 5:f16727052990 494 * With kcps stands for Kilo Count Per Second
JerrySzczurak 5:f16727052990 495 */
JerrySzczurak 5:f16727052990 496 VL53L1X_ERROR VL53L1X_GetSignalPerSpad(uint16_t *signalPerSp);
JerrySzczurak 5:f16727052990 497
JerrySzczurak 5:f16727052990 498 /**
JerrySzczurak 5:f16727052990 499 * @brief This function returns the ambient per SPAD in kcps/SPAD
JerrySzczurak 5:f16727052990 500 */
JerrySzczurak 5:f16727052990 501 VL53L1X_ERROR VL53L1X_GetAmbientPerSpad(uint16_t *amb);
JerrySzczurak 5:f16727052990 502
JerrySzczurak 5:f16727052990 503 /**
JerrySzczurak 5:f16727052990 504 * @brief This function returns the returned signal in kcps.
JerrySzczurak 5:f16727052990 505 */
JerrySzczurak 5:f16727052990 506 VL53L1X_ERROR VL53L1X_GetSignalRate(uint16_t *signalRate);
JerrySzczurak 5:f16727052990 507
JerrySzczurak 5:f16727052990 508 /**
JerrySzczurak 5:f16727052990 509 * @brief This function returns the current number of enabled SPADs
JerrySzczurak 5:f16727052990 510 */
JerrySzczurak 5:f16727052990 511 VL53L1X_ERROR VL53L1X_GetSpadNb(uint16_t *spNb);
JerrySzczurak 5:f16727052990 512
JerrySzczurak 5:f16727052990 513 /**
JerrySzczurak 5:f16727052990 514 * @brief This function returns the ambient rate in kcps
JerrySzczurak 5:f16727052990 515 */
JerrySzczurak 5:f16727052990 516 VL53L1X_ERROR VL53L1X_GetAmbientRate(uint16_t *ambRate);
JerrySzczurak 5:f16727052990 517
JerrySzczurak 5:f16727052990 518 /**
JerrySzczurak 5:f16727052990 519 * @brief This function returns the ranging status error \n
JerrySzczurak 5:f16727052990 520 * (0:no error, 1:sigma failed, 2:signal failed, ..., 7:wrap-around)
JerrySzczurak 5:f16727052990 521 */
JerrySzczurak 5:f16727052990 522 VL53L1X_ERROR VL53L1X_GetRangeStatus(uint8_t *rangeStatus);
JerrySzczurak 5:f16727052990 523
JerrySzczurak 5:f16727052990 524 /**
JerrySzczurak 5:f16727052990 525 * @brief This function programs the offset correction in mm
JerrySzczurak 5:f16727052990 526 * @param OffsetValue:the offset correction value to program in mm
JerrySzczurak 5:f16727052990 527 */
JerrySzczurak 5:f16727052990 528 VL53L1X_ERROR VL53L1X_SetOffset(int16_t OffsetValue);
JerrySzczurak 5:f16727052990 529
JerrySzczurak 5:f16727052990 530 /**
JerrySzczurak 5:f16727052990 531 * @brief This function returns the programmed offset correction value in mm
JerrySzczurak 5:f16727052990 532 */
JerrySzczurak 5:f16727052990 533 VL53L1X_ERROR VL53L1X_GetOffset(int16_t *Offset);
JerrySzczurak 5:f16727052990 534
JerrySzczurak 5:f16727052990 535 /**
JerrySzczurak 5:f16727052990 536 * @brief This function programs the xtalk correction value in cps (Count Per Second).\n
JerrySzczurak 5:f16727052990 537 * This is the number of photons reflected back from the cover glass in cps.
JerrySzczurak 5:f16727052990 538 */
JerrySzczurak 5:f16727052990 539 VL53L1X_ERROR VL53L1X_SetXtalk(uint16_t XtalkValue);
JerrySzczurak 5:f16727052990 540
JerrySzczurak 5:f16727052990 541 /**
JerrySzczurak 5:f16727052990 542 * @brief This function returns the current programmed xtalk correction value in cps
JerrySzczurak 5:f16727052990 543 */
JerrySzczurak 5:f16727052990 544 VL53L1X_ERROR VL53L1X_GetXtalk(uint16_t *Xtalk);
JerrySzczurak 5:f16727052990 545
JerrySzczurak 5:f16727052990 546 /**
JerrySzczurak 5:f16727052990 547 * @brief This function programs the threshold detection mode\n
JerrySzczurak 5:f16727052990 548 * Example:\n
JerrySzczurak 5:f16727052990 549 * VL53L1X_SetDistanceThreshold(dev,100,300,0,1): Below 100 \n
JerrySzczurak 5:f16727052990 550 * VL53L1X_SetDistanceThreshold(dev,100,300,1,1): Above 300 \n
JerrySzczurak 5:f16727052990 551 * VL53L1X_SetDistanceThreshold(dev,100,300,2,1): Out of window \n
JerrySzczurak 5:f16727052990 552 * VL53L1X_SetDistanceThreshold(dev,100,300,3,1): In window \n
JerrySzczurak 5:f16727052990 553 * @param dev : device address
JerrySzczurak 5:f16727052990 554 * @param ThreshLow(in mm) : the threshold under which one the device raises an interrupt if Window = 0
JerrySzczurak 5:f16727052990 555 * @param ThreshHigh(in mm) : the threshold above which one the device raises an interrupt if Window = 1
JerrySzczurak 5:f16727052990 556 * @param Window detection mode : 0=below, 1=above, 2=out, 3=in
JerrySzczurak 5:f16727052990 557 * @param IntOnNoTarget = 1 (No longer used - just use 1)
JerrySzczurak 5:f16727052990 558 */
JerrySzczurak 5:f16727052990 559 VL53L1X_ERROR VL53L1X_SetDistanceThreshold(uint16_t ThreshLow,
JerrySzczurak 5:f16727052990 560 uint16_t ThreshHigh, uint8_t Window,
JerrySzczurak 5:f16727052990 561 uint8_t IntOnNoTarget);
JerrySzczurak 5:f16727052990 562
JerrySzczurak 5:f16727052990 563 /**
JerrySzczurak 5:f16727052990 564 * @brief This function returns the window detection mode (0=below; 1=above; 2=out; 3=in)
JerrySzczurak 5:f16727052990 565 */
JerrySzczurak 5:f16727052990 566 VL53L1X_ERROR VL53L1X_GetDistanceThresholdWindow(uint16_t *window);
JerrySzczurak 5:f16727052990 567
JerrySzczurak 5:f16727052990 568 /**
JerrySzczurak 5:f16727052990 569 * @brief This function returns the low threshold in mm
JerrySzczurak 5:f16727052990 570 */
JerrySzczurak 5:f16727052990 571 VL53L1X_ERROR VL53L1X_GetDistanceThresholdLow(uint16_t *low);
JerrySzczurak 5:f16727052990 572
JerrySzczurak 5:f16727052990 573 /**
JerrySzczurak 5:f16727052990 574 * @brief This function returns the high threshold in mm
JerrySzczurak 5:f16727052990 575 */
JerrySzczurak 5:f16727052990 576 VL53L1X_ERROR VL53L1X_GetDistanceThresholdHigh(uint16_t *high);
JerrySzczurak 5:f16727052990 577
JerrySzczurak 5:f16727052990 578 /**
JerrySzczurak 5:f16727052990 579 * @brief This function programs the ROI (Region of Interest)\n
JerrySzczurak 5:f16727052990 580 * The ROI position is centered, only the ROI size can be reprogrammed.\n
JerrySzczurak 5:f16727052990 581 * The smallest acceptable ROI size = 4\n
JerrySzczurak 5:f16727052990 582 * @param X:ROI Width; Y=ROI Height
JerrySzczurak 5:f16727052990 583 */
JerrySzczurak 5:f16727052990 584 VL53L1X_ERROR VL53L1X_SetROI(uint16_t X, uint16_t Y);
JerrySzczurak 5:f16727052990 585
JerrySzczurak 5:f16727052990 586 /**
JerrySzczurak 5:f16727052990 587 *@brief This function returns width X and height Y
JerrySzczurak 5:f16727052990 588 */
JerrySzczurak 5:f16727052990 589 VL53L1X_ERROR VL53L1X_GetROI_XY(uint16_t *ROI_X, uint16_t *ROI_Y);
JerrySzczurak 5:f16727052990 590
JerrySzczurak 5:f16727052990 591 /**
JerrySzczurak 5:f16727052990 592 * @brief This function programs a new signal threshold in kcps (default=1024 kcps\n
JerrySzczurak 5:f16727052990 593 */
JerrySzczurak 5:f16727052990 594 VL53L1X_ERROR VL53L1X_SetSignalThreshold(uint16_t signal);
JerrySzczurak 5:f16727052990 595
JerrySzczurak 5:f16727052990 596 /**
JerrySzczurak 5:f16727052990 597 * @brief This function returns the current signal threshold in kcps
JerrySzczurak 5:f16727052990 598 */
JerrySzczurak 5:f16727052990 599 VL53L1X_ERROR VL53L1X_GetSignalThreshold(uint16_t *signal);
JerrySzczurak 5:f16727052990 600
JerrySzczurak 5:f16727052990 601 /**
JerrySzczurak 5:f16727052990 602 * @brief This function programs a new sigma threshold in mm (default=15 mm)
JerrySzczurak 5:f16727052990 603 */
JerrySzczurak 5:f16727052990 604 VL53L1X_ERROR VL53L1X_SetSigmaThreshold(uint16_t sigma);
JerrySzczurak 5:f16727052990 605
JerrySzczurak 5:f16727052990 606 /**
JerrySzczurak 5:f16727052990 607 * @brief This function returns the current sigma threshold in mm
JerrySzczurak 5:f16727052990 608 */
JerrySzczurak 5:f16727052990 609 VL53L1X_ERROR VL53L1X_GetSigmaThreshold(uint16_t *signal);
JerrySzczurak 5:f16727052990 610
JerrySzczurak 5:f16727052990 611 /**
JerrySzczurak 5:f16727052990 612 * @brief This function performs the temperature calibration.
JerrySzczurak 5:f16727052990 613 * It is recommended to call this function any time the temperature might have changed by more than 8 deg C
JerrySzczurak 5:f16727052990 614 * without sensor ranging activity for an extended period.
JerrySzczurak 5:f16727052990 615 */
JerrySzczurak 5:f16727052990 616 VL53L1X_ERROR VL53L1X_StartTemperatureUpdate();
JerrySzczurak 5:f16727052990 617
JerrySzczurak 5:f16727052990 618
JerrySzczurak 5:f16727052990 619 /* VL53L1X_calibration.h functions */
JerrySzczurak 5:f16727052990 620
JerrySzczurak 5:f16727052990 621 /**
JerrySzczurak 5:f16727052990 622 * @brief This function performs the offset calibration.\n
JerrySzczurak 5:f16727052990 623 * The function returns the offset value found and programs the offset compensation into the device.
JerrySzczurak 5:f16727052990 624 * @param TargetDistInMm target distance in mm, ST recommended 100 mm
JerrySzczurak 5:f16727052990 625 * Target reflectance = grey17%
JerrySzczurak 5:f16727052990 626 * @return 0:success, !=0: failed
JerrySzczurak 5:f16727052990 627 * @return offset pointer contains the offset found in mm
JerrySzczurak 5:f16727052990 628 */
JerrySzczurak 5:f16727052990 629 int8_t VL53L1X_CalibrateOffset(uint16_t TargetDistInMm, int16_t *offset);
JerrySzczurak 5:f16727052990 630
JerrySzczurak 5:f16727052990 631 /**
JerrySzczurak 5:f16727052990 632 * @brief This function performs the xtalk calibration.\n
JerrySzczurak 5:f16727052990 633 * The function returns the xtalk value found and programs the xtalk compensation to the device
JerrySzczurak 5:f16727052990 634 * @param TargetDistInMm target distance in mm\n
JerrySzczurak 5:f16727052990 635 * The target distance : the distance where the sensor start to "under range"\n
JerrySzczurak 5:f16727052990 636 * due to the influence of the photons reflected back from the cover glass becoming strong\n
JerrySzczurak 5:f16727052990 637 * It's also called inflection point\n
JerrySzczurak 5:f16727052990 638 * Target reflectance = grey 17%
JerrySzczurak 5:f16727052990 639 * @return 0: success, !=0: failed
JerrySzczurak 5:f16727052990 640 * @return xtalk pointer contains the xtalk value found in cps (number of photons in count per second)
JerrySzczurak 5:f16727052990 641 */
JerrySzczurak 5:f16727052990 642 int8_t VL53L1X_CalibrateXtalk(uint16_t TargetDistInMm, uint16_t *xtalk);
JerrySzczurak 5:f16727052990 643
JerrySzczurak 5:f16727052990 644
JerrySzczurak 5:f16727052990 645 /* Write and read functions from I2C */
JerrySzczurak 5:f16727052990 646
JerrySzczurak 5:f16727052990 647 VL53L1X_ERROR VL53L1_WrByte(VL53L1_DEV dev, uint16_t index, uint8_t data);
JerrySzczurak 5:f16727052990 648 VL53L1X_ERROR VL53L1_WrWord(VL53L1_DEV dev, uint16_t index, uint16_t data);
JerrySzczurak 5:f16727052990 649 VL53L1X_ERROR VL53L1_WrDWord(VL53L1_DEV dev, uint16_t index, uint32_t data);
JerrySzczurak 5:f16727052990 650 VL53L1X_ERROR VL53L1_RdByte(VL53L1_DEV dev, uint16_t index, uint8_t *data);
JerrySzczurak 5:f16727052990 651 VL53L1X_ERROR VL53L1_RdWord(VL53L1_DEV dev, uint16_t index, uint16_t *data);
JerrySzczurak 5:f16727052990 652 VL53L1X_ERROR VL53L1_RdDWord(VL53L1_DEV dev, uint16_t index, uint32_t *data);
JerrySzczurak 5:f16727052990 653 VL53L1X_ERROR VL53L1_UpdateByte(VL53L1_DEV dev, uint16_t index, uint8_t AndData, uint8_t OrData);
JerrySzczurak 5:f16727052990 654
JerrySzczurak 5:f16727052990 655 VL53L1X_ERROR VL53L1_WriteMulti(VL53L1_DEV Dev, uint16_t index, uint8_t *pdata, uint32_t count);
JerrySzczurak 5:f16727052990 656 VL53L1X_ERROR VL53L1_ReadMulti(VL53L1_DEV Dev, uint16_t index, uint8_t *pdata, uint32_t count);
JerrySzczurak 5:f16727052990 657
JerrySzczurak 5:f16727052990 658 VL53L1X_ERROR VL53L1_I2CWrite(uint8_t dev, uint16_t index, uint8_t *data, uint16_t number_of_bytes);
JerrySzczurak 5:f16727052990 659 VL53L1X_ERROR VL53L1_I2CRead(uint8_t dev, uint16_t index, uint8_t *data, uint16_t number_of_bytes);
JerrySzczurak 5:f16727052990 660 VL53L1X_ERROR VL53L1_GetTickCount(uint32_t *ptick_count_ms);
JerrySzczurak 5:f16727052990 661 VL53L1X_ERROR VL53L1_WaitUs(VL53L1_Dev_t *pdev, int32_t wait_us);
JerrySzczurak 5:f16727052990 662 VL53L1X_ERROR VL53L1_WaitMs(VL53L1_Dev_t *pdev, int32_t wait_ms);
JerrySzczurak 5:f16727052990 663
JerrySzczurak 5:f16727052990 664 VL53L1X_ERROR VL53L1_WaitValueMaskEx(VL53L1_Dev_t *pdev, uint32_t timeout_ms, uint16_t index, uint8_t value, uint8_t mask, uint32_t poll_delay_ms);
JerrySzczurak 5:f16727052990 665
JerrySzczurak 5:f16727052990 666 protected:
JerrySzczurak 5:f16727052990 667
JerrySzczurak 5:f16727052990 668 /* IO Device */
JerrySzczurak 5:f16727052990 669 vl53L1X_DevI2C *dev_i2c;
JerrySzczurak 5:f16727052990 670
JerrySzczurak 5:f16727052990 671 /* Digital out pin */
JerrySzczurak 5:f16727052990 672 DigitalOut *_gpio0;
JerrySzczurak 5:f16727052990 673 /* GPIO expander */
JerrySzczurak 5:f16727052990 674 Stmpe1600DigiOut *_expgpio0;
JerrySzczurak 5:f16727052990 675 /* Measure detection IRQ */
JerrySzczurak 5:f16727052990 676 InterruptIn *_gpio1Int;
JerrySzczurak 5:f16727052990 677
JerrySzczurak 5:f16727052990 678 /* Device data */
JerrySzczurak 5:f16727052990 679 VL53L1_Dev_t MyDevice;
JerrySzczurak 5:f16727052990 680 VL53L1_DEV Device;
JerrySzczurak 5:f16727052990 681 };
JerrySzczurak 5:f16727052990 682
JerrySzczurak 5:f16727052990 683
dmathew 6:aa13392d16bb 684 #endif /* _VL53L1X_CLASS_H_ */