Fork, renaming of VL53L1CB-2

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   X_NUCLEO_53L1CB

Committer:
Charles MacNeill
Date:
Fri Jun 11 17:08:27 2021 +0100
Revision:
13:3f1b341901dd
changing case of vl53l1cb.* so it works in linux

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Charles MacNeill 13:3f1b341901dd 1 /*******************************************************************************
Charles MacNeill 13:3f1b341901dd 2 * @file vl53l1x_class.h
Charles MacNeill 13:3f1b341901dd 3 * @author JS
Charles MacNeill 13:3f1b341901dd 4 * @version V0.0.1
Charles MacNeill 13:3f1b341901dd 5 * @date 15-January-2019
Charles MacNeill 13:3f1b341901dd 6 * @brief Header file for VL53L1 sensor component
Charles MacNeill 13:3f1b341901dd 7 ******************************************************************************
Charles MacNeill 13:3f1b341901dd 8 Copyright © 2019, STMicroelectronics International N.V.
Charles MacNeill 13:3f1b341901dd 9 All rights reserved.
Charles MacNeill 13:3f1b341901dd 10 Redistribution and use in source and binary forms, with or without
Charles MacNeill 13:3f1b341901dd 11 modification, are permitted provided that the following conditions are met:
Charles MacNeill 13:3f1b341901dd 12 * Redistributions of source code must retain the above copyright
Charles MacNeill 13:3f1b341901dd 13 notice, this list of conditions and the following disclaimer.
Charles MacNeill 13:3f1b341901dd 14 * Redistributions in binary form must reproduce the above copyright
Charles MacNeill 13:3f1b341901dd 15 notice, this list of conditions and the following disclaimer in the
Charles MacNeill 13:3f1b341901dd 16 documentation and/or other materials provided with the distribution.
Charles MacNeill 13:3f1b341901dd 17 * Neither the name of STMicroelectronics nor the
Charles MacNeill 13:3f1b341901dd 18 names of its contributors may be used to endorse or promote products
Charles MacNeill 13:3f1b341901dd 19 derived from this software without specific prior written permission.
Charles MacNeill 13:3f1b341901dd 20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
Charles MacNeill 13:3f1b341901dd 21 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Charles MacNeill 13:3f1b341901dd 22 WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
Charles MacNeill 13:3f1b341901dd 23 NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
Charles MacNeill 13:3f1b341901dd 24 IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY
Charles MacNeill 13:3f1b341901dd 25 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
Charles MacNeill 13:3f1b341901dd 26 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
Charles MacNeill 13:3f1b341901dd 27 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
Charles MacNeill 13:3f1b341901dd 28 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Charles MacNeill 13:3f1b341901dd 29 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
Charles MacNeill 13:3f1b341901dd 30 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Charles MacNeill 13:3f1b341901dd 31 *****************************************************************************/
Charles MacNeill 13:3f1b341901dd 32
Charles MacNeill 13:3f1b341901dd 33 #ifndef __VL53L1X_CLASS_H
Charles MacNeill 13:3f1b341901dd 34 #define __VL53L1X_CLASS_H
Charles MacNeill 13:3f1b341901dd 35
Charles MacNeill 13:3f1b341901dd 36
Charles MacNeill 13:3f1b341901dd 37
Charles MacNeill 13:3f1b341901dd 38 /* Includes ------------------------------------------------------------------*/
Charles MacNeill 13:3f1b341901dd 39
Charles MacNeill 13:3f1b341901dd 40 #include "mbed.h"
Charles MacNeill 13:3f1b341901dd 41 #include "PinNames.h"
Charles MacNeill 13:3f1b341901dd 42
Charles MacNeill 13:3f1b341901dd 43 #include "RangeSensor.h"
Charles MacNeill 13:3f1b341901dd 44 #include "Stmpe1600.h"
Charles MacNeill 13:3f1b341901dd 45
Charles MacNeill 13:3f1b341901dd 46 #include "vl53l1_error_codes.h"
Charles MacNeill 13:3f1b341901dd 47 #include "vl53l1_platform_user_data.h"
Charles MacNeill 13:3f1b341901dd 48
Charles MacNeill 13:3f1b341901dd 49 //#include "DevI2C.h"
Charles MacNeill 13:3f1b341901dd 50 #include "ToF_I2C.h"
Charles MacNeill 13:3f1b341901dd 51 /**********************************************************/
Charles MacNeill 13:3f1b341901dd 52 #include "vl53l1_def.h"
Charles MacNeill 13:3f1b341901dd 53 /***********************************************************/
Charles MacNeill 13:3f1b341901dd 54
Charles MacNeill 13:3f1b341901dd 55
Charles MacNeill 13:3f1b341901dd 56 #define VL53L1CB_IMPLEMENTATION_VER_MAJOR 1
Charles MacNeill 13:3f1b341901dd 57 #define VL53L1CB_IMPLEMENTATION_VER_MINOR 0
Charles MacNeill 13:3f1b341901dd 58 #define VL53L1CB_IMPLEMENTATION_VER_SUB 1
Charles MacNeill 13:3f1b341901dd 59 #define VL53L1CB_IMPLEMENTATION_VER_REVISION 0000
Charles MacNeill 13:3f1b341901dd 60
Charles MacNeill 13:3f1b341901dd 61 typedef int8_t VL53L1CB_ERROR;
Charles MacNeill 13:3f1b341901dd 62
Charles MacNeill 13:3f1b341901dd 63 //#define SOFT_RESET 0x0000
Charles MacNeill 13:3f1b341901dd 64 #define VL53L1CB_I2C_SLAVE__DEVICE_ADDRESS 0x0001
Charles MacNeill 13:3f1b341901dd 65 #define VL53L1CB_VHV_CONFIG__TIMEOUT_MACROP_LOOP_BOUND 0x0008
Charles MacNeill 13:3f1b341901dd 66 #define ALGO__CROSSTALK_COMPENSATION_PLANE_OFFSET_KCPS 0x0016
Charles MacNeill 13:3f1b341901dd 67 #define ALGO__CROSSTALK_COMPENSATION_X_PLANE_GRADIENT_KCPS 0x0018
Charles MacNeill 13:3f1b341901dd 68 #define ALGO__CROSSTALK_COMPENSATION_Y_PLANE_GRADIENT_KCPS 0x001A
Charles MacNeill 13:3f1b341901dd 69 #define ALGO__PART_TO_PART_RANGE_OFFSET_MM 0x001E
Charles MacNeill 13:3f1b341901dd 70 #define MM_CONFIG__INNER_OFFSET_MM 0x0020
Charles MacNeill 13:3f1b341901dd 71 #define MM_CONFIG__OUTER_OFFSET_MM 0x0022
Charles MacNeill 13:3f1b341901dd 72 #define GPIO_HV_MUX__CTRL 0x0030
Charles MacNeill 13:3f1b341901dd 73 #define GPIO__TIO_HV_STATUS 0x0031
Charles MacNeill 13:3f1b341901dd 74 #define SYSTEM__INTERRUPT_CONFIG_GPIO 0x0046
Charles MacNeill 13:3f1b341901dd 75 #define PHASECAL_CONFIG__TIMEOUT_MACROP 0x004B
Charles MacNeill 13:3f1b341901dd 76 #define RANGE_CONFIG__TIMEOUT_MACROP_A_HI 0x005E
Charles MacNeill 13:3f1b341901dd 77 #define RANGE_CONFIG__VCSEL_PERIOD_A 0x0060
Charles MacNeill 13:3f1b341901dd 78 #define RANGE_CONFIG__VCSEL_PERIOD_B 0x0063
Charles MacNeill 13:3f1b341901dd 79 #define RANGE_CONFIG__TIMEOUT_MACROP_B_HI 0x0061
Charles MacNeill 13:3f1b341901dd 80 #define RANGE_CONFIG__TIMEOUT_MACROP_B_LO 0x0062
Charles MacNeill 13:3f1b341901dd 81 #define RANGE_CONFIG__SIGMA_THRESH 0x0064
Charles MacNeill 13:3f1b341901dd 82 #define RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS 0x0066
Charles MacNeill 13:3f1b341901dd 83 #define RANGE_CONFIG__VALID_PHASE_HIGH 0x0069
Charles MacNeill 13:3f1b341901dd 84 #define SYSTEM__THRESH_HIGH 0x0072
Charles MacNeill 13:3f1b341901dd 85 #define SYSTEM__THRESH_LOW 0x0074
Charles MacNeill 13:3f1b341901dd 86 #define SD_CONFIG__WOI_SD0 0x0078
Charles MacNeill 13:3f1b341901dd 87 #define SD_CONFIG__INITIAL_PHASE_SD0 0x007A
Charles MacNeill 13:3f1b341901dd 88 #define ROI_CONFIG__USER_ROI_CENTRE_SPAD 0x007F
Charles MacNeill 13:3f1b341901dd 89 #define ROI_CONFIG__USER_ROI_REQUESTED_GLOBAL_XY_SIZE 0x0080
Charles MacNeill 13:3f1b341901dd 90 #define SYSTEM__SEQUENCE_CONFIG 0x0081
Charles MacNeill 13:3f1b341901dd 91 #define SYSTEM__INTERRUPT_CLEAR 0x0086
Charles MacNeill 13:3f1b341901dd 92 #define SYSTEM__MODE_START 0x0087
Charles MacNeill 13:3f1b341901dd 93 #define RESULT__AMBIENT_COUNT_RATE_MCPS_SD 0x0090
Charles MacNeill 13:3f1b341901dd 94 #define VL53L1CB_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0 0x0096
Charles MacNeill 13:3f1b341901dd 95 #define VL53L1CB_FIRMWARE__SYSTEM_STATUS 0x00E5
Charles MacNeill 13:3f1b341901dd 96
Charles MacNeill 13:3f1b341901dd 97
Charles MacNeill 13:3f1b341901dd 98
Charles MacNeill 13:3f1b341901dd 99 #define VL53L1CB_DEFAULT_DEVICE_ADDRESS 0x52
Charles MacNeill 13:3f1b341901dd 100
Charles MacNeill 13:3f1b341901dd 101 #define VL53L1CB_REG_IDENTIFICATION_MODEL_ID 0x010F
Charles MacNeill 13:3f1b341901dd 102
Charles MacNeill 13:3f1b341901dd 103 /****************************************
Charles MacNeill 13:3f1b341901dd 104 * PRIVATE define do not edit
Charles MacNeill 13:3f1b341901dd 105 ****************************************/
Charles MacNeill 13:3f1b341901dd 106
Charles MacNeill 13:3f1b341901dd 107 /**
Charles MacNeill 13:3f1b341901dd 108 * @brief defines SW Version
Charles MacNeill 13:3f1b341901dd 109 */
Charles MacNeill 13:3f1b341901dd 110 //typedef struct {
Charles MacNeill 13:3f1b341901dd 111 // uint8_t major; /*!< major number */
Charles MacNeill 13:3f1b341901dd 112 // uint8_t minor; /*!< minor number */
Charles MacNeill 13:3f1b341901dd 113 // uint8_t build; /*!< build number */
Charles MacNeill 13:3f1b341901dd 114 // uint32_t revision; /*!< revision number */
Charles MacNeill 13:3f1b341901dd 115 //} VL53L1X_Version_t;
Charles MacNeill 13:3f1b341901dd 116
Charles MacNeill 13:3f1b341901dd 117
Charles MacNeill 13:3f1b341901dd 118 /* Classes -------------------------------------------------------------------*/
Charles MacNeill 13:3f1b341901dd 119 /** Class representing a VL53L1CB sensor component
Charles MacNeill 13:3f1b341901dd 120 */
Charles MacNeill 13:3f1b341901dd 121 class VL53L1CB : public RangeSensor
Charles MacNeill 13:3f1b341901dd 122 {
Charles MacNeill 13:3f1b341901dd 123
Charles MacNeill 13:3f1b341901dd 124
Charles MacNeill 13:3f1b341901dd 125
Charles MacNeill 13:3f1b341901dd 126 public:
Charles MacNeill 13:3f1b341901dd 127
Charles MacNeill 13:3f1b341901dd 128
Charles MacNeill 13:3f1b341901dd 129 #define VL53L1DevStructGetLLDriverHandle(Dev) (&Dev->Data.LLData)
Charles MacNeill 13:3f1b341901dd 130 /** Constructor
Charles MacNeill 13:3f1b341901dd 131 * @param[in] &i2c device I2C to be used for communication
Charles MacNeill 13:3f1b341901dd 132 * @param[in] &pin_gpio1 pin Mbed InterruptIn PinName to be used as component GPIO_1 INT
Charles MacNeill 13:3f1b341901dd 133 * @param[in] DevAddr device address, 0x52 by default
Charles MacNeill 13:3f1b341901dd 134 */
Charles MacNeill 13:3f1b341901dd 135 /*
Charles MacNeill 13:3f1b341901dd 136 VL53L1CB(ToF_DevI2C *i2c, DigitalOut *pin, PinName pin_gpio1, uint8_t dev_addr = VL53L1CB_DEFAULT_DEVICE_ADDRESS)
Charles MacNeill 13:3f1b341901dd 137 : RangeSensor(), dev_i2c(i2c), _gpio0(pin)
Charles MacNeill 13:3f1b341901dd 138 {
Charles MacNeill 13:3f1b341901dd 139 MyDevice.i2c_slave_address=dev_addr;
Charles MacNeill 13:3f1b341901dd 140 Device = &MyDevice;
Charles MacNeill 13:3f1b341901dd 141
Charles MacNeill 13:3f1b341901dd 142 _expgpio0 = NULL;
Charles MacNeill 13:3f1b341901dd 143 if (pin_gpio1 != NC) {
Charles MacNeill 13:3f1b341901dd 144 _gpio1Int = new InterruptIn(pin_gpio1);
Charles MacNeill 13:3f1b341901dd 145 } else {
Charles MacNeill 13:3f1b341901dd 146 _gpio1Int = NULL;
Charles MacNeill 13:3f1b341901dd 147 }
Charles MacNeill 13:3f1b341901dd 148 }
Charles MacNeill 13:3f1b341901dd 149 */
Charles MacNeill 13:3f1b341901dd 150
Charles MacNeill 13:3f1b341901dd 151 /** Constructor 2 (STMPE1600DigiOut)
Charles MacNeill 13:3f1b341901dd 152 * @param[in] i2c device I2C to be used for communication
Charles MacNeill 13:3f1b341901dd 153 * @param[in] &pin Gpio Expander STMPE1600DigiOut pin to be used as component GPIO_0 CE
Charles MacNeill 13:3f1b341901dd 154 * @param[in] pin_gpio1 pin Mbed InterruptIn PinName to be used as component GPIO_1 INT
Charles MacNeill 13:3f1b341901dd 155 * @param[in] device address, 0x29 by default
Charles MacNeill 13:3f1b341901dd 156 */
Charles MacNeill 13:3f1b341901dd 157 VL53L1CB(ToF_DevI2C *i2c, Stmpe1600DigiOut *pin, PinName pin_gpio1,
Charles MacNeill 13:3f1b341901dd 158 uint8_t dev_addr = VL53L1CB_DEFAULT_DEVICE_ADDRESS)
Charles MacNeill 13:3f1b341901dd 159 : dev_i2c(i2c), _expgpio0(pin)
Charles MacNeill 13:3f1b341901dd 160 {
Charles MacNeill 13:3f1b341901dd 161 MyDevice.i2c_slave_address=dev_addr;
Charles MacNeill 13:3f1b341901dd 162 Device = &MyDevice;
Charles MacNeill 13:3f1b341901dd 163
Charles MacNeill 13:3f1b341901dd 164 _gpio0 = NULL;
Charles MacNeill 13:3f1b341901dd 165 if (pin_gpio1 != NC) {
Charles MacNeill 13:3f1b341901dd 166 _gpio1Int = new InterruptIn(pin_gpio1);
Charles MacNeill 13:3f1b341901dd 167 } else {
Charles MacNeill 13:3f1b341901dd 168 _gpio1Int = NULL;
Charles MacNeill 13:3f1b341901dd 169 }
Charles MacNeill 13:3f1b341901dd 170 }
Charles MacNeill 13:3f1b341901dd 171
Charles MacNeill 13:3f1b341901dd 172 /** Destructor
Charles MacNeill 13:3f1b341901dd 173 */
Charles MacNeill 13:3f1b341901dd 174 virtual ~VL53L1CB()
Charles MacNeill 13:3f1b341901dd 175 {
Charles MacNeill 13:3f1b341901dd 176 if (_gpio1Int != NULL) {
Charles MacNeill 13:3f1b341901dd 177 delete _gpio1Int;
Charles MacNeill 13:3f1b341901dd 178 }
Charles MacNeill 13:3f1b341901dd 179 }
Charles MacNeill 13:3f1b341901dd 180
Charles MacNeill 13:3f1b341901dd 181
Charles MacNeill 13:3f1b341901dd 182
Charles MacNeill 13:3f1b341901dd 183 VL53L1_DEV getDevicePtr() { return Device; }
Charles MacNeill 13:3f1b341901dd 184
Charles MacNeill 13:3f1b341901dd 185
Charles MacNeill 13:3f1b341901dd 186 /* warning: VL53L1CB class inherits from GenericSensor, RangeSensor and LightSensor, that haven`t a destructor.
Charles MacNeill 13:3f1b341901dd 187 The warning should request to introduce a virtual destructor to make sure to delete the object */
Charles MacNeill 13:3f1b341901dd 188
Charles MacNeill 13:3f1b341901dd 189 /*** Interface Methods ***/
Charles MacNeill 13:3f1b341901dd 190 /*** High level API ***/
Charles MacNeill 13:3f1b341901dd 191 /**
Charles MacNeill 13:3f1b341901dd 192 * @brief PowerOn the sensor
Charles MacNeill 13:3f1b341901dd 193 * @return void
Charles MacNeill 13:3f1b341901dd 194 */
Charles MacNeill 13:3f1b341901dd 195 /* turns on the sensor */
Charles MacNeill 13:3f1b341901dd 196 virtual void VL53L1CB_On(void)
Charles MacNeill 13:3f1b341901dd 197 {
Charles MacNeill 13:3f1b341901dd 198 printf("VL53L1CB_On\r\n");
Charles MacNeill 13:3f1b341901dd 199 if (_gpio0) {
Charles MacNeill 13:3f1b341901dd 200 *_gpio0 = 1;
Charles MacNeill 13:3f1b341901dd 201 } else {
Charles MacNeill 13:3f1b341901dd 202 if (_expgpio0) {
Charles MacNeill 13:3f1b341901dd 203 *_expgpio0 = 1;
Charles MacNeill 13:3f1b341901dd 204 }
Charles MacNeill 13:3f1b341901dd 205 }
Charles MacNeill 13:3f1b341901dd 206 #if (MBED_VERSION > 60300)
Charles MacNeill 13:3f1b341901dd 207 thread_sleep_for(100);
Charles MacNeill 13:3f1b341901dd 208 #else
Charles MacNeill 13:3f1b341901dd 209 wait_ms(100); // NEEDS A DELAY BETWEEN SENSORS
Charles MacNeill 13:3f1b341901dd 210 #endif
Charles MacNeill 13:3f1b341901dd 211 }
Charles MacNeill 13:3f1b341901dd 212
Charles MacNeill 13:3f1b341901dd 213 /**
Charles MacNeill 13:3f1b341901dd 214 * @brief PowerOff the sensor
Charles MacNeill 13:3f1b341901dd 215 * @return void
Charles MacNeill 13:3f1b341901dd 216 */
Charles MacNeill 13:3f1b341901dd 217 /* turns off the sensor */
Charles MacNeill 13:3f1b341901dd 218 virtual void VL53L1CB_Off(void)
Charles MacNeill 13:3f1b341901dd 219 {
Charles MacNeill 13:3f1b341901dd 220 printf("VL53L1_Off\r\n");
Charles MacNeill 13:3f1b341901dd 221 if (_gpio0) {
Charles MacNeill 13:3f1b341901dd 222 *_gpio0 = 0;
Charles MacNeill 13:3f1b341901dd 223 } else {
Charles MacNeill 13:3f1b341901dd 224 if (_expgpio0) {
Charles MacNeill 13:3f1b341901dd 225 *_expgpio0 = 0;
Charles MacNeill 13:3f1b341901dd 226 }
Charles MacNeill 13:3f1b341901dd 227 }
Charles MacNeill 13:3f1b341901dd 228 #if (MBED_VERSION > 60300)
Charles MacNeill 13:3f1b341901dd 229 thread_sleep_for(100);
Charles MacNeill 13:3f1b341901dd 230 #else
Charles MacNeill 13:3f1b341901dd 231 wait_ms(100); // NEEDS A DELAY BETWEEN SENSORS
Charles MacNeill 13:3f1b341901dd 232 #endif
Charles MacNeill 13:3f1b341901dd 233 }
Charles MacNeill 13:3f1b341901dd 234
Charles MacNeill 13:3f1b341901dd 235 int is_present()
Charles MacNeill 13:3f1b341901dd 236 {
Charles MacNeill 13:3f1b341901dd 237 int status;
Charles MacNeill 13:3f1b341901dd 238 uint8_t id = 0;
Charles MacNeill 13:3f1b341901dd 239
Charles MacNeill 13:3f1b341901dd 240 status = read_id(&id);
Charles MacNeill 13:3f1b341901dd 241 if (status) {
Charles MacNeill 13:3f1b341901dd 242 printf("Failed to read ID device. Device not present!\n\r");
Charles MacNeill 13:3f1b341901dd 243 }
Charles MacNeill 13:3f1b341901dd 244 return status;
Charles MacNeill 13:3f1b341901dd 245 }
Charles MacNeill 13:3f1b341901dd 246
Charles MacNeill 13:3f1b341901dd 247 /**
Charles MacNeill 13:3f1b341901dd 248 * @brief Initialize the sensor with default values
Charles MacNeill 13:3f1b341901dd 249 * @return 0 on Success
Charles MacNeill 13:3f1b341901dd 250 */
Charles MacNeill 13:3f1b341901dd 251
Charles MacNeill 13:3f1b341901dd 252 VL53L1CB_ERROR InitSensor(uint8_t address){
Charles MacNeill 13:3f1b341901dd 253 VL53L1CB_ERROR status = 0;
Charles MacNeill 13:3f1b341901dd 254 uint8_t sensorState = 0;
Charles MacNeill 13:3f1b341901dd 255 VL53L1CB_Off();
Charles MacNeill 13:3f1b341901dd 256 VL53L1CB_On();
Charles MacNeill 13:3f1b341901dd 257 status = VL53L1CB_SetI2CAddress(address);
Charles MacNeill 13:3f1b341901dd 258 if(!status){
Charles MacNeill 13:3f1b341901dd 259 status = VL53L1CB_SensorInit();
Charles MacNeill 13:3f1b341901dd 260 }
Charles MacNeill 13:3f1b341901dd 261
Charles MacNeill 13:3f1b341901dd 262 while(!status && !sensorState) {
Charles MacNeill 13:3f1b341901dd 263 status = VL53L1CB_BootState(&sensorState);
Charles MacNeill 13:3f1b341901dd 264
Charles MacNeill 13:3f1b341901dd 265 #if (MBED_VERSION > 60300)
Charles MacNeill 13:3f1b341901dd 266 thread_sleep_for(2);
Charles MacNeill 13:3f1b341901dd 267 #else
Charles MacNeill 13:3f1b341901dd 268 wait_ms(2); // NEEDS A DELAY BETWEEN SENSORS
Charles MacNeill 13:3f1b341901dd 269 #endif
Charles MacNeill 13:3f1b341901dd 270 }
Charles MacNeill 13:3f1b341901dd 271 return status;
Charles MacNeill 13:3f1b341901dd 272 }
Charles MacNeill 13:3f1b341901dd 273
Charles MacNeill 13:3f1b341901dd 274
Charles MacNeill 13:3f1b341901dd 275
Charles MacNeill 13:3f1b341901dd 276 /**
Charles MacNeill 13:3f1b341901dd 277 *
Charles MacNeill 13:3f1b341901dd 278 * @brief One time device initialization
Charles MacNeill 13:3f1b341901dd 279 * @param void
Charles MacNeill 13:3f1b341901dd 280 * @return 0 on success, @a #CALIBRATION_WARNING if failed
Charles MacNeill 13:3f1b341901dd 281 */
Charles MacNeill 13:3f1b341901dd 282 virtual int init(void *init)
Charles MacNeill 13:3f1b341901dd 283 {
Charles MacNeill 13:3f1b341901dd 284 return VL53L1CB_SensorInit();
Charles MacNeill 13:3f1b341901dd 285 return 0;
Charles MacNeill 13:3f1b341901dd 286 }
Charles MacNeill 13:3f1b341901dd 287
Charles MacNeill 13:3f1b341901dd 288
Charles MacNeill 13:3f1b341901dd 289 /**
Charles MacNeill 13:3f1b341901dd 290 * @brief Initialize the sensor with default values
Charles MacNeill 13:3f1b341901dd 291 * @return "0" on success
Charles MacNeill 13:3f1b341901dd 292 */
Charles MacNeill 13:3f1b341901dd 293 int init_sensor(uint8_t new_addr);
Charles MacNeill 13:3f1b341901dd 294
Charles MacNeill 13:3f1b341901dd 295 /* Read function of the ID device */
Charles MacNeill 13:3f1b341901dd 296 virtual int read_id(uint8_t *id){
Charles MacNeill 13:3f1b341901dd 297 int status = 0;
Charles MacNeill 13:3f1b341901dd 298 uint16_t rl_id = 0;
Charles MacNeill 13:3f1b341901dd 299
Charles MacNeill 13:3f1b341901dd 300 uint8_t ExpanderData[2];
Charles MacNeill 13:3f1b341901dd 301
Charles MacNeill 13:3f1b341901dd 302 ExpanderData[0] = 0;
Charles MacNeill 13:3f1b341901dd 303 ExpanderData[1] = 0;
Charles MacNeill 13:3f1b341901dd 304 rl_id = 0;
Charles MacNeill 13:3f1b341901dd 305 dev_i2c->ToF_i2c_read(&ExpanderData[0], Device->i2c_slave_address, VL53L1CB_REG_IDENTIFICATION_MODEL_ID, 2);
Charles MacNeill 13:3f1b341901dd 306
Charles MacNeill 13:3f1b341901dd 307 rl_id = (ExpanderData[0] << 8) + ExpanderData[1];
Charles MacNeill 13:3f1b341901dd 308 printf("Model ID is: %d (%X) \r\n",rl_id, rl_id);
Charles MacNeill 13:3f1b341901dd 309
Charles MacNeill 13:3f1b341901dd 310 uint8_t tmp = 0;
Charles MacNeill 13:3f1b341901dd 311 ExpanderData[0] = VL53L1CB_FIRMWARE__SYSTEM_STATUS >> 8;
Charles MacNeill 13:3f1b341901dd 312 ExpanderData[1] = VL53L1CB_FIRMWARE__SYSTEM_STATUS & 0x0FF;
Charles MacNeill 13:3f1b341901dd 313 dev_i2c->ToF_i2c_read(&tmp, Device->i2c_slave_address, VL53L1CB_FIRMWARE__SYSTEM_STATUS, 1);
Charles MacNeill 13:3f1b341901dd 314
Charles MacNeill 13:3f1b341901dd 315 printf("Firmware system is: %d\r\n",tmp);
Charles MacNeill 13:3f1b341901dd 316
Charles MacNeill 13:3f1b341901dd 317 if (rl_id == 0xEACC) {
Charles MacNeill 13:3f1b341901dd 318 printf("Device is present %d:\r\n", rl_id);
Charles MacNeill 13:3f1b341901dd 319 return status;
Charles MacNeill 13:3f1b341901dd 320 }
Charles MacNeill 13:3f1b341901dd 321 return -1;
Charles MacNeill 13:3f1b341901dd 322 }
Charles MacNeill 13:3f1b341901dd 323
Charles MacNeill 13:3f1b341901dd 324
Charles MacNeill 13:3f1b341901dd 325 /**
Charles MacNeill 13:3f1b341901dd 326 * @brief Interrupt handling func to be called by user after an INT is occurred
Charles MacNeill 13:3f1b341901dd 327 * @param[out] Data pointer to the distance to read data in to
Charles MacNeill 13:3f1b341901dd 328 * @return 0 on Success
Charles MacNeill 13:3f1b341901dd 329 */
Charles MacNeill 13:3f1b341901dd 330 int handle_irq(uint16_t *distance);
Charles MacNeill 13:3f1b341901dd 331
Charles MacNeill 13:3f1b341901dd 332 /**
Charles MacNeill 13:3f1b341901dd 333 * @brief Start the measure indicated by operating mode
Charles MacNeill 13:3f1b341901dd 334 * @param[in] fptr specifies call back function must be !NULL in case of interrupt measure
Charles MacNeill 13:3f1b341901dd 335 * @return 0 on Success
Charles MacNeill 13:3f1b341901dd 336 */
Charles MacNeill 13:3f1b341901dd 337 int start_measurement(void (*fptr)(void));
Charles MacNeill 13:3f1b341901dd 338 /**
Charles MacNeill 13:3f1b341901dd 339 * @brief Stop the currently running measure indicate by operating_mode
Charles MacNeill 13:3f1b341901dd 340 * @return 0 on Success
Charles MacNeill 13:3f1b341901dd 341 */
Charles MacNeill 13:3f1b341901dd 342 int stop_measurement();
Charles MacNeill 13:3f1b341901dd 343 /**
Charles MacNeill 13:3f1b341901dd 344 * @brief Get results for the measure
Charles MacNeill 13:3f1b341901dd 345 * @param[out] Data pointer to the distance_data to read data in to
Charles MacNeill 13:3f1b341901dd 346 * @return 0 on Success
Charles MacNeill 13:3f1b341901dd 347 */
Charles MacNeill 13:3f1b341901dd 348 int get_measurement(uint16_t *distance);
Charles MacNeill 13:3f1b341901dd 349 /**
Charles MacNeill 13:3f1b341901dd 350 * @brief Enable interrupt measure IRQ
Charles MacNeill 13:3f1b341901dd 351 * @return 0 on Success
Charles MacNeill 13:3f1b341901dd 352 */
Charles MacNeill 13:3f1b341901dd 353 void enable_interrupt_measure_detection_irq(void)
Charles MacNeill 13:3f1b341901dd 354 {
Charles MacNeill 13:3f1b341901dd 355 if (_gpio1Int != NULL)
Charles MacNeill 13:3f1b341901dd 356 _gpio1Int->enable_irq();
Charles MacNeill 13:3f1b341901dd 357 }
Charles MacNeill 13:3f1b341901dd 358
Charles MacNeill 13:3f1b341901dd 359 /**
Charles MacNeill 13:3f1b341901dd 360 * @brief Disable interrupt measure IRQ
Charles MacNeill 13:3f1b341901dd 361 * @return 0 on Success
Charles MacNeill 13:3f1b341901dd 362 */
Charles MacNeill 13:3f1b341901dd 363 void disable_interrupt_measure_detection_irq(void)
Charles MacNeill 13:3f1b341901dd 364 {
Charles MacNeill 13:3f1b341901dd 365 if (_gpio1Int != NULL)
Charles MacNeill 13:3f1b341901dd 366 _gpio1Int->disable_irq();
Charles MacNeill 13:3f1b341901dd 367 }
Charles MacNeill 13:3f1b341901dd 368 /**
Charles MacNeill 13:3f1b341901dd 369 * @brief Attach a function to call when an interrupt is detected, i.e. measurement is ready
Charles MacNeill 13:3f1b341901dd 370 * @param[in] fptr pointer to call back function to be called whenever an interrupt occours
Charles MacNeill 13:3f1b341901dd 371 * @return 0 on Success
Charles MacNeill 13:3f1b341901dd 372 */
Charles MacNeill 13:3f1b341901dd 373 void attach_interrupt_measure_detection_irq(void (*fptr)(void))
Charles MacNeill 13:3f1b341901dd 374 {
Charles MacNeill 13:3f1b341901dd 375 if (_gpio1Int != NULL)
Charles MacNeill 13:3f1b341901dd 376 _gpio1Int->rise(fptr);
Charles MacNeill 13:3f1b341901dd 377 }
Charles MacNeill 13:3f1b341901dd 378
Charles MacNeill 13:3f1b341901dd 379 /**
Charles MacNeill 13:3f1b341901dd 380 * @brief Get ranging result and only that
Charles MacNeill 13:3f1b341901dd 381 * @param pRange_mm Pointer to range distance
Charles MacNeill 13:3f1b341901dd 382 * @return 0 on success
Charles MacNeill 13:3f1b341901dd 383 */
Charles MacNeill 13:3f1b341901dd 384 virtual int get_distance(uint32_t *piData)
Charles MacNeill 13:3f1b341901dd 385 {
Charles MacNeill 13:3f1b341901dd 386 int status;
Charles MacNeill 13:3f1b341901dd 387 uint16_t distance;
Charles MacNeill 13:3f1b341901dd 388 status = VL53L1CB_GetDistance(&distance);
Charles MacNeill 13:3f1b341901dd 389 *piData = (uint32_t) distance;
Charles MacNeill 13:3f1b341901dd 390 return status;
Charles MacNeill 13:3f1b341901dd 391 }
Charles MacNeill 13:3f1b341901dd 392
Charles MacNeill 13:3f1b341901dd 393
Charles MacNeill 13:3f1b341901dd 394 /* VL53L1X_api.h functions */
Charles MacNeill 13:3f1b341901dd 395
Charles MacNeill 13:3f1b341901dd 396
Charles MacNeill 13:3f1b341901dd 397
Charles MacNeill 13:3f1b341901dd 398 /**
Charles MacNeill 13:3f1b341901dd 399 * @brief This function returns the SW driver version
Charles MacNeill 13:3f1b341901dd 400 */
Charles MacNeill 13:3f1b341901dd 401 VL53L1CB_ERROR VL53L1CB_GetSWVersion(VL53L1_Version_t *pVersion);
Charles MacNeill 13:3f1b341901dd 402
Charles MacNeill 13:3f1b341901dd 403 /**
Charles MacNeill 13:3f1b341901dd 404 * @brief This function sets the sensor I2C address used in case multiple devices application, default address 0x52
Charles MacNeill 13:3f1b341901dd 405 */
Charles MacNeill 13:3f1b341901dd 406 VL53L1CB_ERROR VL53L1CB_SetI2CAddress(uint8_t new_address);
Charles MacNeill 13:3f1b341901dd 407
Charles MacNeill 13:3f1b341901dd 408 /**
Charles MacNeill 13:3f1b341901dd 409 * @brief This function loads the 135 bytes default values to initialize the sensor.
Charles MacNeill 13:3f1b341901dd 410 * @param dev Device address
Charles MacNeill 13:3f1b341901dd 411 * @return 0:success, != 0:failed
Charles MacNeill 13:3f1b341901dd 412 */
Charles MacNeill 13:3f1b341901dd 413 VL53L1CB_ERROR VL53L1CB_SensorInit();
Charles MacNeill 13:3f1b341901dd 414
Charles MacNeill 13:3f1b341901dd 415 /**
Charles MacNeill 13:3f1b341901dd 416 * @brief This function clears the interrupt, to be called after a ranging data reading
Charles MacNeill 13:3f1b341901dd 417 * to arm the interrupt for the next data ready event.
Charles MacNeill 13:3f1b341901dd 418 */
Charles MacNeill 13:3f1b341901dd 419 VL53L1CB_ERROR VL53L1CB_ClearInterrupt();
Charles MacNeill 13:3f1b341901dd 420
Charles MacNeill 13:3f1b341901dd 421
Charles MacNeill 13:3f1b341901dd 422 /**
Charles MacNeill 13:3f1b341901dd 423 * @brief This function returns the current interrupt polarity\n
Charles MacNeill 13:3f1b341901dd 424 * 1=active high (default), 0=active low
Charles MacNeill 13:3f1b341901dd 425 */
Charles MacNeill 13:3f1b341901dd 426 VL53L1CB_ERROR VL53L1CB_GetInterruptPolarity(uint8_t *pIntPol);
Charles MacNeill 13:3f1b341901dd 427
Charles MacNeill 13:3f1b341901dd 428 /**
Charles MacNeill 13:3f1b341901dd 429 * @brief This function starts the ranging distance operation\n
Charles MacNeill 13:3f1b341901dd 430 * 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
Charles MacNeill 13:3f1b341901dd 431 * 1=active high (default), 0=active low, use SetInterruptPolarity() to change the interrupt polarity if required.
Charles MacNeill 13:3f1b341901dd 432 */
Charles MacNeill 13:3f1b341901dd 433 VL53L1CB_ERROR VL53L1CB_StartRanging();
Charles MacNeill 13:3f1b341901dd 434
Charles MacNeill 13:3f1b341901dd 435 /**
Charles MacNeill 13:3f1b341901dd 436 * @brief This function stops the ranging.
Charles MacNeill 13:3f1b341901dd 437 */
Charles MacNeill 13:3f1b341901dd 438 VL53L1CB_ERROR VL53L1CB_StopRanging();
Charles MacNeill 13:3f1b341901dd 439
Charles MacNeill 13:3f1b341901dd 440
Charles MacNeill 13:3f1b341901dd 441
Charles MacNeill 13:3f1b341901dd 442 /**
Charles MacNeill 13:3f1b341901dd 443 * @brief This function returns the boot state of the device (1:booted, 0:not booted)
Charles MacNeill 13:3f1b341901dd 444 */
Charles MacNeill 13:3f1b341901dd 445 VL53L1CB_ERROR VL53L1CB_BootState(uint8_t *state);
Charles MacNeill 13:3f1b341901dd 446
Charles MacNeill 13:3f1b341901dd 447 /**
Charles MacNeill 13:3f1b341901dd 448 * @brief This function returns the sensor id, sensor Id must be 0xEEAC
Charles MacNeill 13:3f1b341901dd 449 */
Charles MacNeill 13:3f1b341901dd 450 // VL53L1CB_ERROR VL53L1X_GetSensorId(uint16_t *id);
Charles MacNeill 13:3f1b341901dd 451
Charles MacNeill 13:3f1b341901dd 452 /**
Charles MacNeill 13:3f1b341901dd 453 * @brief This function returns the distance measured by the sensor in mm
Charles MacNeill 13:3f1b341901dd 454 */
Charles MacNeill 13:3f1b341901dd 455 VL53L1CB_ERROR VL53L1CB_GetDistance(uint16_t *distance);
Charles MacNeill 13:3f1b341901dd 456
Charles MacNeill 13:3f1b341901dd 457
Charles MacNeill 13:3f1b341901dd 458
Charles MacNeill 13:3f1b341901dd 459
Charles MacNeill 13:3f1b341901dd 460 /**************************************************************************/
Charles MacNeill 13:3f1b341901dd 461 VL53L1CB_ERROR VL53L1CB_WaitDeviceBooted(VL53L1_DEV Dev);
Charles MacNeill 13:3f1b341901dd 462
Charles MacNeill 13:3f1b341901dd 463
Charles MacNeill 13:3f1b341901dd 464 VL53L1CB_ERROR VL53L1CB_GetCalibrationData(VL53L1_CalibrationData_t *pCalibrationData);
Charles MacNeill 13:3f1b341901dd 465
Charles MacNeill 13:3f1b341901dd 466
Charles MacNeill 13:3f1b341901dd 467
Charles MacNeill 13:3f1b341901dd 468 VL53L1_GPIO_Interrupt_Mode ConvertModeToLLD(VL53L1CB_ERROR *pStatus,
Charles MacNeill 13:3f1b341901dd 469 VL53L1_ThresholdMode CrossMode);
Charles MacNeill 13:3f1b341901dd 470
Charles MacNeill 13:3f1b341901dd 471 VL53L1CB_ERROR VL53L1CB_GetVersion(VL53L1_Version_t *pVersion);
Charles MacNeill 13:3f1b341901dd 472
Charles MacNeill 13:3f1b341901dd 473 VL53L1CB_ERROR VL53L1CB_GetProductRevision(
Charles MacNeill 13:3f1b341901dd 474 uint8_t *pProductRevisionMajor, uint8_t *pProductRevisionMinor);
Charles MacNeill 13:3f1b341901dd 475
Charles MacNeill 13:3f1b341901dd 476
Charles MacNeill 13:3f1b341901dd 477 VL53L1CB_ERROR VL53L1CB_GetDeviceInfo(
Charles MacNeill 13:3f1b341901dd 478 VL53L1_DeviceInfo_t *pVL53L1_DeviceInfo);
Charles MacNeill 13:3f1b341901dd 479
Charles MacNeill 13:3f1b341901dd 480 VL53L1CB_ERROR VL53L1CB_GetUID( uint64_t *pUid);
Charles MacNeill 13:3f1b341901dd 481
Charles MacNeill 13:3f1b341901dd 482 VL53L1CB_ERROR VL53L1CB_GetRangeStatusString(uint8_t RangeStatus,
Charles MacNeill 13:3f1b341901dd 483 char *pRangeStatusString);
Charles MacNeill 13:3f1b341901dd 484
Charles MacNeill 13:3f1b341901dd 485
Charles MacNeill 13:3f1b341901dd 486 VL53L1CB_ERROR VL53L1CB_GetPalErrorString(VL53L1CB_ERROR PalErrorCode,
Charles MacNeill 13:3f1b341901dd 487 char *pPalErrorString);
Charles MacNeill 13:3f1b341901dd 488
Charles MacNeill 13:3f1b341901dd 489
Charles MacNeill 13:3f1b341901dd 490 VL53L1CB_ERROR VL53L1CB_GetPalStateString(VL53L1_State PalStateCode,
Charles MacNeill 13:3f1b341901dd 491 char *pPalStateString);
Charles MacNeill 13:3f1b341901dd 492
Charles MacNeill 13:3f1b341901dd 493
Charles MacNeill 13:3f1b341901dd 494 VL53L1CB_ERROR VL53L1CB_GetPalState(VL53L1_DEV Dev, VL53L1_State *pPalState);
Charles MacNeill 13:3f1b341901dd 495
Charles MacNeill 13:3f1b341901dd 496 VL53L1CB_ERROR VL53L1CB_DataInit();
Charles MacNeill 13:3f1b341901dd 497
Charles MacNeill 13:3f1b341901dd 498 VL53L1CB_ERROR VL53L1CB_StaticInit();
Charles MacNeill 13:3f1b341901dd 499
Charles MacNeill 13:3f1b341901dd 500 VL53L1CB_ERROR VL53L1CB_ClearInterruptAndStartMeasurement();
Charles MacNeill 13:3f1b341901dd 501
Charles MacNeill 13:3f1b341901dd 502 VL53L1CB_ERROR VL53L1CB_GetRangingMeasurementData(
Charles MacNeill 13:3f1b341901dd 503 VL53L1_RangingMeasurementData_t *pRangingMeasurementData);
Charles MacNeill 13:3f1b341901dd 504
Charles MacNeill 13:3f1b341901dd 505 VL53L1CB_ERROR VL53L1CB_GetMultiRangingData(
Charles MacNeill 13:3f1b341901dd 506 VL53L1_MultiRangingData_t *pMultiRangingData);
Charles MacNeill 13:3f1b341901dd 507
Charles MacNeill 13:3f1b341901dd 508 VL53L1CB_ERROR VL53L1CB_GetAdditionalData(
Charles MacNeill 13:3f1b341901dd 509 VL53L1_AdditionalData_t *pAdditionalData);
Charles MacNeill 13:3f1b341901dd 510
Charles MacNeill 13:3f1b341901dd 511 VL53L1CB_ERROR VL53L1CB_SetTuningParameter(
Charles MacNeill 13:3f1b341901dd 512 uint16_t TuningParameterId, int32_t TuningParameterValue);
Charles MacNeill 13:3f1b341901dd 513
Charles MacNeill 13:3f1b341901dd 514 VL53L1CB_ERROR VL53L1CB_GetTuningParameter(
Charles MacNeill 13:3f1b341901dd 515 uint16_t TuningParameterId, int32_t *pTuningParameterValue);
Charles MacNeill 13:3f1b341901dd 516
Charles MacNeill 13:3f1b341901dd 517 VL53L1CB_ERROR VL53L1CB_SetXTalkCompensationEnable(
Charles MacNeill 13:3f1b341901dd 518 uint8_t XTalkCompensationEnable);
Charles MacNeill 13:3f1b341901dd 519
Charles MacNeill 13:3f1b341901dd 520
Charles MacNeill 13:3f1b341901dd 521 VL53L1CB_ERROR VL53L1CB_GetXTalkCompensationEnable(
Charles MacNeill 13:3f1b341901dd 522 uint8_t *pXTalkCompensationEnable);
Charles MacNeill 13:3f1b341901dd 523
Charles MacNeill 13:3f1b341901dd 524 VL53L1CB_ERROR VL53L1CB_PerformXTalkCalibration(
Charles MacNeill 13:3f1b341901dd 525 uint8_t CalibrationOption);
Charles MacNeill 13:3f1b341901dd 526
Charles MacNeill 13:3f1b341901dd 527 VL53L1CB_ERROR VL53L1CB_SetOffsetCalibrationMode(
Charles MacNeill 13:3f1b341901dd 528 VL53L1_OffsetCalibrationModes OffsetCalibrationMode);
Charles MacNeill 13:3f1b341901dd 529
Charles MacNeill 13:3f1b341901dd 530
Charles MacNeill 13:3f1b341901dd 531 VL53L1CB_ERROR VL53L1CB_SetOffsetCorrectionMode(
Charles MacNeill 13:3f1b341901dd 532 VL53L1_OffsetCorrectionModes OffsetCorrectionMode);
Charles MacNeill 13:3f1b341901dd 533
Charles MacNeill 13:3f1b341901dd 534 VL53L1CB_ERROR VL53L1CB_PerformOffsetCalibration(
Charles MacNeill 13:3f1b341901dd 535 int32_t CalDistanceMilliMeter, FixPoint1616_t CalReflectancePercent);
Charles MacNeill 13:3f1b341901dd 536
Charles MacNeill 13:3f1b341901dd 537 VL53L1CB_ERROR VL53L1CB_PerformOffsetSimpleCalibration(
Charles MacNeill 13:3f1b341901dd 538 int32_t CalDistanceMilliMeter);
Charles MacNeill 13:3f1b341901dd 539
Charles MacNeill 13:3f1b341901dd 540 VL53L1CB_ERROR VL53L1CB_PerformOffsetZeroDistanceCalibration();
Charles MacNeill 13:3f1b341901dd 541
Charles MacNeill 13:3f1b341901dd 542 VL53L1CB_ERROR VL53L1CB_SetCalibrationData(
Charles MacNeill 13:3f1b341901dd 543 VL53L1_CalibrationData_t *pCalibrationData);
Charles MacNeill 13:3f1b341901dd 544
Charles MacNeill 13:3f1b341901dd 545 VL53L1CB_ERROR VL53L1CB_SetZoneCalibrationData(
Charles MacNeill 13:3f1b341901dd 546 VL53L1_ZoneCalibrationData_t *pZoneCalibrationData);
Charles MacNeill 13:3f1b341901dd 547
Charles MacNeill 13:3f1b341901dd 548 VL53L1CB_ERROR VL53L1CB_GetZoneCalibrationData(
Charles MacNeill 13:3f1b341901dd 549 VL53L1_ZoneCalibrationData_t *pZoneCalibrationData);
Charles MacNeill 13:3f1b341901dd 550
Charles MacNeill 13:3f1b341901dd 551 VL53L1CB_ERROR VL53L1CB_GetOpticalCenter(
Charles MacNeill 13:3f1b341901dd 552 FixPoint1616_t *pOpticalCenterX,
Charles MacNeill 13:3f1b341901dd 553 FixPoint1616_t *pOpticalCenterY);
Charles MacNeill 13:3f1b341901dd 554
Charles MacNeill 13:3f1b341901dd 555 VL53L1CB_ERROR VL53L1CB_SetThresholdConfig(VL53L1_DetectionConfig_t *pConfig);
Charles MacNeill 13:3f1b341901dd 556
Charles MacNeill 13:3f1b341901dd 557
Charles MacNeill 13:3f1b341901dd 558 VL53L1CB_ERROR VL53L1CB_GetLimitCheckStatus( uint16_t LimitCheckId,
Charles MacNeill 13:3f1b341901dd 559 uint8_t *pLimitCheckStatus);
Charles MacNeill 13:3f1b341901dd 560
Charles MacNeill 13:3f1b341901dd 561
Charles MacNeill 13:3f1b341901dd 562 VL53L1CB_ERROR VL53L1CB_SetLimitCheckEnable( uint16_t LimitCheckId,
Charles MacNeill 13:3f1b341901dd 563 uint8_t LimitCheckEnable);
Charles MacNeill 13:3f1b341901dd 564
Charles MacNeill 13:3f1b341901dd 565 VL53L1CB_ERROR VL53L1CB_GetLimitCheckEnable(uint16_t LimitCheckId,
Charles MacNeill 13:3f1b341901dd 566 uint8_t *pLimitCheckEnable);
Charles MacNeill 13:3f1b341901dd 567
Charles MacNeill 13:3f1b341901dd 568 VL53L1CB_ERROR VL53L1CB_GetThresholdConfig(VL53L1_DetectionConfig_t *pConfig);
Charles MacNeill 13:3f1b341901dd 569
Charles MacNeill 13:3f1b341901dd 570
Charles MacNeill 13:3f1b341901dd 571 VL53L1CB_ERROR VL53L1CB_PerformOffsetPerVcselCalibration(int32_t CalDistanceMilliMeter);
Charles MacNeill 13:3f1b341901dd 572
Charles MacNeill 13:3f1b341901dd 573 VL53L1CB_ERROR VL53L1CB_GetNumberOfLimitCheck(uint16_t *pNumberOfLimitCheck);
Charles MacNeill 13:3f1b341901dd 574
Charles MacNeill 13:3f1b341901dd 575 VL53L1CB_ERROR VL53L1CB_GetLimitCheckInfo(uint16_t LimitCheckId,
Charles MacNeill 13:3f1b341901dd 576 char *pLimitCheckString);
Charles MacNeill 13:3f1b341901dd 577
Charles MacNeill 13:3f1b341901dd 578 VL53L1CB_ERROR VL53L1CB_SetPresetMode(VL53L1_PresetModes PresetMode);
Charles MacNeill 13:3f1b341901dd 579
Charles MacNeill 13:3f1b341901dd 580 VL53L1CB_ERROR VL53L1CB_GetPresetMode( VL53L1_PresetModes *pPresetMode);
Charles MacNeill 13:3f1b341901dd 581
Charles MacNeill 13:3f1b341901dd 582 VL53L1CB_ERROR VL53L1CB_SetDistanceMode( VL53L1_DistanceModes DistanceMode);
Charles MacNeill 13:3f1b341901dd 583
Charles MacNeill 13:3f1b341901dd 584 VL53L1CB_ERROR VL53L1CB_GetDistanceMode(VL53L1_DistanceModes *pDistanceMode);
Charles MacNeill 13:3f1b341901dd 585
Charles MacNeill 13:3f1b341901dd 586 VL53L1CB_ERROR VL53L1CB_SetOutputMode(VL53L1_OutputModes OutputMode);
Charles MacNeill 13:3f1b341901dd 587
Charles MacNeill 13:3f1b341901dd 588 VL53L1CB_ERROR VL53L1CB_GetOutputMode(VL53L1_OutputModes *pOutputMode);
Charles MacNeill 13:3f1b341901dd 589
Charles MacNeill 13:3f1b341901dd 590 VL53L1CB_ERROR VL53L1CB_SetMeasurementTimingBudgetMicroSeconds(uint32_t MeasurementTimingBudgetMicroSeconds);
Charles MacNeill 13:3f1b341901dd 591
Charles MacNeill 13:3f1b341901dd 592 VL53L1CB_ERROR VL53L1CB_SetInterMeasurementPeriodMilliSeconds(uint32_t InterMeasurementPeriodMilliSeconds);
Charles MacNeill 13:3f1b341901dd 593
Charles MacNeill 13:3f1b341901dd 594
Charles MacNeill 13:3f1b341901dd 595 VL53L1CB_ERROR VL53L1CB_GetInterMeasurementPeriodMilliSeconds(
Charles MacNeill 13:3f1b341901dd 596 uint32_t *pInterMeasurementPeriodMilliSeconds);
Charles MacNeill 13:3f1b341901dd 597
Charles MacNeill 13:3f1b341901dd 598
Charles MacNeill 13:3f1b341901dd 599 VL53L1CB_ERROR VL53L1CB_SetDmaxReflectance( FixPoint1616_t DmaxReflectance);
Charles MacNeill 13:3f1b341901dd 600
Charles MacNeill 13:3f1b341901dd 601 VL53L1CB_ERROR VL53L1CB_GetDmaxReflectance(FixPoint1616_t *pDmaxReflectance);
Charles MacNeill 13:3f1b341901dd 602
Charles MacNeill 13:3f1b341901dd 603
Charles MacNeill 13:3f1b341901dd 604 VL53L1CB_ERROR VL53L1CB_GetDmaxMode( VL53L1_DeviceDmaxModes *pDmaxMode);
Charles MacNeill 13:3f1b341901dd 605
Charles MacNeill 13:3f1b341901dd 606 VL53L1CB_ERROR VL53L1CB_GetMeasurementTimingBudgetMicroSeconds(
Charles MacNeill 13:3f1b341901dd 607 uint32_t *pMeasurementTimingBudgetMicroSeconds);
Charles MacNeill 13:3f1b341901dd 608
Charles MacNeill 13:3f1b341901dd 609 VL53L1CB_ERROR VL53L1CB_SetDmaxMode(VL53L1_DeviceDmaxModes DmaxMode);
Charles MacNeill 13:3f1b341901dd 610
Charles MacNeill 13:3f1b341901dd 611 VL53L1CB_ERROR VL53L1CB_SetLimitCheckValue( uint16_t LimitCheckId,
Charles MacNeill 13:3f1b341901dd 612 FixPoint1616_t LimitCheckValue);
Charles MacNeill 13:3f1b341901dd 613
Charles MacNeill 13:3f1b341901dd 614 VL53L1CB_ERROR VL53L1CB_GetLimitCheckValue(uint16_t LimitCheckId,
Charles MacNeill 13:3f1b341901dd 615 FixPoint1616_t *pLimitCheckValue);
Charles MacNeill 13:3f1b341901dd 616
Charles MacNeill 13:3f1b341901dd 617 VL53L1CB_ERROR VL53L1CB_GetLimitCheckCurrent( uint16_t LimitCheckId,
Charles MacNeill 13:3f1b341901dd 618 FixPoint1616_t *pLimitCheckCurrent);
Charles MacNeill 13:3f1b341901dd 619
Charles MacNeill 13:3f1b341901dd 620 VL53L1CB_ERROR VL53L1CB_GetMaxNumberOfROI( uint8_t *pMaxNumberOfROI);
Charles MacNeill 13:3f1b341901dd 621
Charles MacNeill 13:3f1b341901dd 622 VL53L1CB_ERROR VL53L1CB_SetROI(VL53L1_RoiConfig_t *pRoiConfig);
Charles MacNeill 13:3f1b341901dd 623
Charles MacNeill 13:3f1b341901dd 624 VL53L1CB_ERROR VL53L1CB_GetROI(VL53L1_RoiConfig_t *pRoiConfig);
Charles MacNeill 13:3f1b341901dd 625
Charles MacNeill 13:3f1b341901dd 626 VL53L1CB_ERROR VL53L1CB_GetNumberOfSequenceSteps(uint8_t *pNumberOfSequenceSteps);
Charles MacNeill 13:3f1b341901dd 627
Charles MacNeill 13:3f1b341901dd 628 VL53L1CB_ERROR VL53L1CB_GetSequenceStepsInfo(VL53L1_SequenceStepId SequenceStepId,
Charles MacNeill 13:3f1b341901dd 629 char *pSequenceStepsString);
Charles MacNeill 13:3f1b341901dd 630
Charles MacNeill 13:3f1b341901dd 631
Charles MacNeill 13:3f1b341901dd 632 VL53L1CB_ERROR VL53L1CB_SetSequenceStepEnable(VL53L1_SequenceStepId SequenceStepId, uint8_t SequenceStepEnabled);
Charles MacNeill 13:3f1b341901dd 633
Charles MacNeill 13:3f1b341901dd 634
Charles MacNeill 13:3f1b341901dd 635 VL53L1CB_ERROR VL53L1CB_GetSequenceStepEnable(VL53L1_SequenceStepId SequenceStepId, uint8_t *pSequenceStepEnabled);
Charles MacNeill 13:3f1b341901dd 636
Charles MacNeill 13:3f1b341901dd 637
Charles MacNeill 13:3f1b341901dd 638 VL53L1CB_ERROR VL53L1CB_StartMeasurement();
Charles MacNeill 13:3f1b341901dd 639
Charles MacNeill 13:3f1b341901dd 640 VL53L1CB_ERROR VL53L1CB_StopMeasurement();
Charles MacNeill 13:3f1b341901dd 641
Charles MacNeill 13:3f1b341901dd 642
Charles MacNeill 13:3f1b341901dd 643 VL53L1CB_ERROR VL53L1CB_GetMeasurementDataReady(uint8_t *pMeasurementDataReady);
Charles MacNeill 13:3f1b341901dd 644
Charles MacNeill 13:3f1b341901dd 645 VL53L1CB_ERROR VL53L1CB_WaitMeasurementDataReady();
Charles MacNeill 13:3f1b341901dd 646
Charles MacNeill 13:3f1b341901dd 647 VL53L1CB_ERROR VL53L1CB_SmudgeCorrectionEnable(VL53L1_SmudgeCorrectionModes Mode);
Charles MacNeill 13:3f1b341901dd 648 /***************************************************************************/
Charles MacNeill 13:3f1b341901dd 649
Charles MacNeill 13:3f1b341901dd 650
Charles MacNeill 13:3f1b341901dd 651 /* Write and read functions from I2C */
Charles MacNeill 13:3f1b341901dd 652
Charles MacNeill 13:3f1b341901dd 653 VL53L1CB_ERROR VL53L1CB_WrByte(VL53L1_DEV dev, uint16_t index, uint8_t data);
Charles MacNeill 13:3f1b341901dd 654 VL53L1CB_ERROR VL53L1CB_WrWord(VL53L1_DEV dev, uint16_t index, uint16_t data);
Charles MacNeill 13:3f1b341901dd 655 VL53L1CB_ERROR VL53L1CB_WrDWord(VL53L1_DEV dev, uint16_t index, uint32_t data);
Charles MacNeill 13:3f1b341901dd 656 VL53L1CB_ERROR VL53L1CB_RdByte(VL53L1_DEV dev, uint16_t index, uint8_t *data);
Charles MacNeill 13:3f1b341901dd 657 VL53L1CB_ERROR VL53L1CB_RdWord(VL53L1_DEV dev, uint16_t index, uint16_t *data);
Charles MacNeill 13:3f1b341901dd 658 VL53L1CB_ERROR VL53L1CB_RdDWord(VL53L1_DEV dev, uint16_t index, uint32_t *data);
Charles MacNeill 13:3f1b341901dd 659 VL53L1CB_ERROR VL53L1CB_UpdateByte(VL53L1_DEV dev, uint16_t index, uint8_t AndData, uint8_t OrData);
Charles MacNeill 13:3f1b341901dd 660
Charles MacNeill 13:3f1b341901dd 661 VL53L1CB_ERROR VL53L1CB_WriteMulti(VL53L1_DEV Dev, uint16_t index, uint8_t *pdata, uint32_t count);
Charles MacNeill 13:3f1b341901dd 662 VL53L1CB_ERROR VL53L1CB_ReadMulti(VL53L1_DEV Dev, uint16_t index, uint8_t *pdata, uint32_t count);
Charles MacNeill 13:3f1b341901dd 663
Charles MacNeill 13:3f1b341901dd 664 VL53L1CB_ERROR VL53L1CB_I2CWrite(uint8_t dev, uint16_t index, uint8_t *data, uint16_t number_of_bytes);
Charles MacNeill 13:3f1b341901dd 665 VL53L1CB_ERROR VL53L1CB_I2CRead(uint8_t dev, uint16_t index, uint8_t *data, uint16_t number_of_bytes);
Charles MacNeill 13:3f1b341901dd 666 VL53L1CB_ERROR VL53L1CB_GetTickCount(uint32_t *ptick_count_ms);
Charles MacNeill 13:3f1b341901dd 667 VL53L1CB_ERROR VL53L1CB_WaitUs(VL53L1_Dev_t *pdev, int32_t wait_us);
Charles MacNeill 13:3f1b341901dd 668 VL53L1CB_ERROR VL53L1CB_WaitMs(VL53L1_Dev_t *pdev, int32_t wait_ms);
Charles MacNeill 13:3f1b341901dd 669
Charles MacNeill 13:3f1b341901dd 670 VL53L1CB_ERROR VL53L1CB_WaitValueMaskEx(VL53L1_Dev_t *pdev, uint32_t timeout_ms, uint16_t index, uint8_t value, uint8_t mask, uint32_t poll_delay_ms);
Charles MacNeill 13:3f1b341901dd 671 VL53L1CB_ERROR VL53L1CB_SetDeviceAddress(VL53L1_DEV Dev, uint8_t DeviceAddress);
Charles MacNeill 13:3f1b341901dd 672
Charles MacNeill 13:3f1b341901dd 673 // from vl53l1_api_debug.c
Charles MacNeill 13:3f1b341901dd 674
Charles MacNeill 13:3f1b341901dd 675 VL53L1CB_ERROR VL53L1CB_get_additional_data(
Charles MacNeill 13:3f1b341901dd 676 VL53L1_DEV Dev,
Charles MacNeill 13:3f1b341901dd 677 VL53L1_additional_data_t *pdata);
Charles MacNeill 13:3f1b341901dd 678
Charles MacNeill 13:3f1b341901dd 679
Charles MacNeill 13:3f1b341901dd 680 protected:
Charles MacNeill 13:3f1b341901dd 681
Charles MacNeill 13:3f1b341901dd 682 /* IO Device */
Charles MacNeill 13:3f1b341901dd 683 ToF_DevI2C *dev_i2c;
Charles MacNeill 13:3f1b341901dd 684
Charles MacNeill 13:3f1b341901dd 685 /* Digital out pin */
Charles MacNeill 13:3f1b341901dd 686 DigitalOut *_gpio0;
Charles MacNeill 13:3f1b341901dd 687 /* GPIO expander */
Charles MacNeill 13:3f1b341901dd 688 Stmpe1600DigiOut *_expgpio0;
Charles MacNeill 13:3f1b341901dd 689 /* Measure detection IRQ */
Charles MacNeill 13:3f1b341901dd 690 InterruptIn *_gpio1Int;
Charles MacNeill 13:3f1b341901dd 691
Charles MacNeill 13:3f1b341901dd 692 ///* Digital out pin */
Charles MacNeill 13:3f1b341901dd 693 /* Device data */
Charles MacNeill 13:3f1b341901dd 694 VL53L1_Dev_t MyDevice;
Charles MacNeill 13:3f1b341901dd 695 VL53L1_DEV Device;
Charles MacNeill 13:3f1b341901dd 696 };
Charles MacNeill 13:3f1b341901dd 697
Charles MacNeill 13:3f1b341901dd 698
Charles MacNeill 13:3f1b341901dd 699 #endif /* _VL53L1X_CLASS_H_ */