The VL53L1CB proximity sensor, based on ST’s FlightSense™, Time-of-Flight technology.
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Dependents: VL53L1CB_noshield_1sensor_polls_auton VL53L1CB_noshield_1sensor_interrupt_auton X_NUCLEO_53L1A2
Based on VL53L1 library, this is a library for the VL53L1CB ToF chip.
Diff: inc/VL53L1CB.h
- Revision:
- 12:885f56f79742
- Parent:
- 11:be14e3591d65
- Child:
- 13:ea6d0e60fd02
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/inc/VL53L1CB.h Mon Jun 14 07:51:09 2021 +0000 @@ -0,0 +1,699 @@ +/******************************************************************************* + * @file vl53l1x_class.h + * @author JS + * @version V0.0.1 + * @date 15-January-2019 + * @brief Header file for VL53L1 sensor component + ****************************************************************************** + Copyright © 2019, STMicroelectronics International N.V. + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND + NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. + IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#ifndef __VL53L1X_CLASS_H +#define __VL53L1X_CLASS_H + + + +/* Includes ------------------------------------------------------------------*/ + +#include "mbed.h" +#include "PinNames.h" + +#include "RangeSensor.h" +#include "Stmpe1600.h" + +#include "vl53l1_error_codes.h" +#include "vl53l1_platform_user_data.h" + +//#include "DevI2C.h" +#include "ToF_I2C.h" +/**********************************************************/ +#include "vl53l1_def.h" +/***********************************************************/ + + +#define VL53L1CB_IMPLEMENTATION_VER_MAJOR 1 +#define VL53L1CB_IMPLEMENTATION_VER_MINOR 0 +#define VL53L1CB_IMPLEMENTATION_VER_SUB 1 +#define VL53L1CB_IMPLEMENTATION_VER_REVISION 0000 + +typedef int8_t VL53L1CB_ERROR; + +//#define SOFT_RESET 0x0000 +#define VL53L1CB_I2C_SLAVE__DEVICE_ADDRESS 0x0001 +#define VL53L1CB_VHV_CONFIG__TIMEOUT_MACROP_LOOP_BOUND 0x0008 +#define ALGO__CROSSTALK_COMPENSATION_PLANE_OFFSET_KCPS 0x0016 +#define ALGO__CROSSTALK_COMPENSATION_X_PLANE_GRADIENT_KCPS 0x0018 +#define ALGO__CROSSTALK_COMPENSATION_Y_PLANE_GRADIENT_KCPS 0x001A +#define ALGO__PART_TO_PART_RANGE_OFFSET_MM 0x001E +#define MM_CONFIG__INNER_OFFSET_MM 0x0020 +#define MM_CONFIG__OUTER_OFFSET_MM 0x0022 +#define GPIO_HV_MUX__CTRL 0x0030 +#define GPIO__TIO_HV_STATUS 0x0031 +#define SYSTEM__INTERRUPT_CONFIG_GPIO 0x0046 +#define PHASECAL_CONFIG__TIMEOUT_MACROP 0x004B +#define RANGE_CONFIG__TIMEOUT_MACROP_A_HI 0x005E +#define RANGE_CONFIG__VCSEL_PERIOD_A 0x0060 +#define RANGE_CONFIG__VCSEL_PERIOD_B 0x0063 +#define RANGE_CONFIG__TIMEOUT_MACROP_B_HI 0x0061 +#define RANGE_CONFIG__TIMEOUT_MACROP_B_LO 0x0062 +#define RANGE_CONFIG__SIGMA_THRESH 0x0064 +#define RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS 0x0066 +#define RANGE_CONFIG__VALID_PHASE_HIGH 0x0069 +#define SYSTEM__THRESH_HIGH 0x0072 +#define SYSTEM__THRESH_LOW 0x0074 +#define SD_CONFIG__WOI_SD0 0x0078 +#define SD_CONFIG__INITIAL_PHASE_SD0 0x007A +#define ROI_CONFIG__USER_ROI_CENTRE_SPAD 0x007F +#define ROI_CONFIG__USER_ROI_REQUESTED_GLOBAL_XY_SIZE 0x0080 +#define SYSTEM__SEQUENCE_CONFIG 0x0081 +#define SYSTEM__INTERRUPT_CLEAR 0x0086 +#define SYSTEM__MODE_START 0x0087 +#define RESULT__AMBIENT_COUNT_RATE_MCPS_SD 0x0090 +#define VL53L1CB_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0 0x0096 +#define VL53L1CB_FIRMWARE__SYSTEM_STATUS 0x00E5 + + + +#define VL53L1CB_DEFAULT_DEVICE_ADDRESS 0x52 + +#define VL53L1CB_REG_IDENTIFICATION_MODEL_ID 0x010F + +/**************************************** + * PRIVATE define do not edit + ****************************************/ + +/** + * @brief defines SW Version + */ +//typedef struct { + // uint8_t major; /*!< major number */ +// uint8_t minor; /*!< minor number */ +// uint8_t build; /*!< build number */ +// uint32_t revision; /*!< revision number */ +//} VL53L1X_Version_t; + + +/* Classes -------------------------------------------------------------------*/ +/** Class representing a VL53L1CB sensor component + */ +class VL53L1CB : public RangeSensor +{ + + + + public: + + + #define VL53L1DevStructGetLLDriverHandle(Dev) (&Dev->Data.LLData) + /** Constructor + * @param[in] &i2c device I2C to be used for communication + * @param[in] &pin_gpio1 pin Mbed InterruptIn PinName to be used as component GPIO_1 INT + * @param[in] DevAddr device address, 0x52 by default + */ + + VL53L1CB(ToF_DevI2C *i2c, DigitalOut *pin, PinName pin_gpio1, uint8_t dev_addr = VL53L1CB_DEFAULT_DEVICE_ADDRESS) + : RangeSensor(), dev_i2c(i2c), _gpio0(pin) + { + MyDevice.i2c_slave_address=dev_addr; + Device = &MyDevice; + + _expgpio0 = NULL; + if (pin_gpio1 != NC) { + _gpio1Int = new InterruptIn(pin_gpio1); + } else { + _gpio1Int = NULL; + } + } + + + /** Constructor 2 (STMPE1600DigiOut) + * @param[in] i2c device I2C to be used for communication + * @param[in] &pin Gpio Expander STMPE1600DigiOut pin to be used as component GPIO_0 CE + * @param[in] pin_gpio1 pin Mbed InterruptIn PinName to be used as component GPIO_1 INT + * @param[in] device address, 0x29 by default + */ + VL53L1CB(ToF_DevI2C *i2c, Stmpe1600DigiOut *pin, PinName pin_gpio1, + uint8_t dev_addr = VL53L1CB_DEFAULT_DEVICE_ADDRESS) + : dev_i2c(i2c), _expgpio0(pin) + { + MyDevice.i2c_slave_address=dev_addr; + Device = &MyDevice; + + _gpio0 = NULL; + if (pin_gpio1 != NC) { + _gpio1Int = new InterruptIn(pin_gpio1); + } else { + _gpio1Int = NULL; + } + } + + /** Destructor + */ + virtual ~VL53L1CB() + { + if (_gpio1Int != NULL) { + delete _gpio1Int; + } + } + + + + VL53L1_DEV getDevicePtr() { return Device; } + + + /* warning: VL53L1CB class inherits from GenericSensor, RangeSensor and LightSensor, that haven`t a destructor. + The warning should request to introduce a virtual destructor to make sure to delete the object */ + + /*** Interface Methods ***/ + /*** High level API ***/ + /** + * @brief PowerOn the sensor + * @return void + */ + /* turns on the sensor */ + virtual void VL53L1CB_On(void) + { + printf("VL53L1CB_On\r\n"); + if (_gpio0) { + *_gpio0 = 1; + } else { + if (_expgpio0) { + *_expgpio0 = 1; + } + } +#if (MBED_VERSION > 60300) + thread_sleep_for(100); +#else + wait_ms(100); // NEEDS A DELAY BETWEEN SENSORS +#endif + } + + /** + * @brief PowerOff the sensor + * @return void + */ + /* turns off the sensor */ + virtual void VL53L1CB_Off(void) + { + printf("VL53L1_Off\r\n"); + if (_gpio0) { + *_gpio0 = 0; + } else { + if (_expgpio0) { + *_expgpio0 = 0; + } + } +#if (MBED_VERSION > 60300) + thread_sleep_for(100); +#else + wait_ms(100); // NEEDS A DELAY BETWEEN SENSORS +#endif + } + + int is_present() + { + int status; + uint8_t id = 0; + + status = read_id(&id); + if (status) { + printf("Failed to read ID device. Device not present!\n\r"); + } + return status; + } + + /** + * @brief Initialize the sensor with default values + * @return 0 on Success + */ + + VL53L1CB_ERROR InitSensor(uint8_t address){ + VL53L1CB_ERROR status = 0; + uint8_t sensorState = 0; + VL53L1CB_Off(); + VL53L1CB_On(); + status = VL53L1CB_SetI2CAddress(address); + if(!status){ + status = VL53L1CB_SensorInit(); + } + + while(!status && !sensorState) { + status = VL53L1CB_BootState(&sensorState); + +#if (MBED_VERSION > 60300) + thread_sleep_for(2); +#else + wait_ms(2); // NEEDS A DELAY BETWEEN SENSORS +#endif + } + return status; + } + + + +/** + * + * @brief One time device initialization + * @param void + * @return 0 on success, @a #CALIBRATION_WARNING if failed + */ + virtual int init(void *init) + { + return VL53L1CB_SensorInit(); + return 0; + } + + + /** + * @brief Initialize the sensor with default values + * @return "0" on success + */ + int init_sensor(uint8_t new_addr); + + /* Read function of the ID device */ + virtual int read_id(uint8_t *id){ + int status = 0; + uint16_t rl_id = 0; + + uint8_t ExpanderData[2]; + + ExpanderData[0] = 0; + ExpanderData[1] = 0; + rl_id = 0; + dev_i2c->ToF_i2c_read(&ExpanderData[0], Device->i2c_slave_address, VL53L1CB_REG_IDENTIFICATION_MODEL_ID, 2); + + rl_id = (ExpanderData[0] << 8) + ExpanderData[1]; + printf("Model ID is: %d (%X) \r\n",rl_id, rl_id); + + uint8_t tmp = 0; + ExpanderData[0] = VL53L1CB_FIRMWARE__SYSTEM_STATUS >> 8; + ExpanderData[1] = VL53L1CB_FIRMWARE__SYSTEM_STATUS & 0x0FF; + dev_i2c->ToF_i2c_read(&tmp, Device->i2c_slave_address, VL53L1CB_FIRMWARE__SYSTEM_STATUS, 1); + + printf("Firmware system is: %d\r\n",tmp); + + if (rl_id == 0xEACC) { + printf("Device is present %d:\r\n", rl_id); + return status; + } + return -1; + } + + + /** + * @brief Interrupt handling func to be called by user after an INT is occurred + * @param[out] Data pointer to the distance to read data in to + * @return 0 on Success + */ + int handle_irq(uint16_t *distance); + + /** + * @brief Start the measure indicated by operating mode + * @param[in] fptr specifies call back function must be !NULL in case of interrupt measure + * @return 0 on Success + */ + int start_measurement(void (*fptr)(void)); + /** + * @brief Stop the currently running measure indicate by operating_mode + * @return 0 on Success + */ + int stop_measurement(); + /** + * @brief Get results for the measure + * @param[out] Data pointer to the distance_data to read data in to + * @return 0 on Success + */ + int get_measurement(uint16_t *distance); + /** + * @brief Enable interrupt measure IRQ + * @return 0 on Success + */ + void enable_interrupt_measure_detection_irq(void) + { + if (_gpio1Int != NULL) + _gpio1Int->enable_irq(); + } + + /** + * @brief Disable interrupt measure IRQ + * @return 0 on Success + */ + void disable_interrupt_measure_detection_irq(void) + { + if (_gpio1Int != NULL) + _gpio1Int->disable_irq(); + } + /** + * @brief Attach a function to call when an interrupt is detected, i.e. measurement is ready + * @param[in] fptr pointer to call back function to be called whenever an interrupt occours + * @return 0 on Success + */ + void attach_interrupt_measure_detection_irq(void (*fptr)(void)) + { + if (_gpio1Int != NULL) + _gpio1Int->rise(fptr); + } + +/** + * @brief Get ranging result and only that + * @param pRange_mm Pointer to range distance + * @return 0 on success + */ + virtual int get_distance(uint32_t *piData) + { + int status; + uint16_t distance; + status = VL53L1CB_GetDistance(&distance); + *piData = (uint32_t) distance; + return status; + } + + +/* VL53L1X_api.h functions */ + + + + /** + * @brief This function returns the SW driver version + */ + VL53L1CB_ERROR VL53L1CB_GetSWVersion(VL53L1_Version_t *pVersion); + + /** + * @brief This function sets the sensor I2C address used in case multiple devices application, default address 0x52 + */ + VL53L1CB_ERROR VL53L1CB_SetI2CAddress(uint8_t new_address); + + /** + * @brief This function loads the 135 bytes default values to initialize the sensor. + * @param dev Device address + * @return 0:success, != 0:failed + */ + VL53L1CB_ERROR VL53L1CB_SensorInit(); + + /** + * @brief This function clears the interrupt, to be called after a ranging data reading + * to arm the interrupt for the next data ready event. + */ + VL53L1CB_ERROR VL53L1CB_ClearInterrupt(); + + + /** + * @brief This function returns the current interrupt polarity\n + * 1=active high (default), 0=active low + */ + VL53L1CB_ERROR VL53L1CB_GetInterruptPolarity(uint8_t *pIntPol); + + /** + * @brief This function starts the ranging distance operation\n + * 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 + * 1=active high (default), 0=active low, use SetInterruptPolarity() to change the interrupt polarity if required. + */ + VL53L1CB_ERROR VL53L1CB_StartRanging(); + + /** + * @brief This function stops the ranging. + */ + VL53L1CB_ERROR VL53L1CB_StopRanging(); + + + + /** + * @brief This function returns the boot state of the device (1:booted, 0:not booted) + */ + VL53L1CB_ERROR VL53L1CB_BootState(uint8_t *state); + + /** + * @brief This function returns the sensor id, sensor Id must be 0xEEAC + */ + // VL53L1CB_ERROR VL53L1X_GetSensorId(uint16_t *id); + + /** + * @brief This function returns the distance measured by the sensor in mm + */ + VL53L1CB_ERROR VL53L1CB_GetDistance(uint16_t *distance); + + + + + /**************************************************************************/ + VL53L1CB_ERROR VL53L1CB_WaitDeviceBooted(VL53L1_DEV Dev); + + + VL53L1CB_ERROR VL53L1CB_GetCalibrationData(VL53L1_CalibrationData_t *pCalibrationData); + + + + VL53L1_GPIO_Interrupt_Mode ConvertModeToLLD(VL53L1CB_ERROR *pStatus, + VL53L1_ThresholdMode CrossMode); + + VL53L1CB_ERROR VL53L1CB_GetVersion(VL53L1_Version_t *pVersion); + + VL53L1CB_ERROR VL53L1CB_GetProductRevision( + uint8_t *pProductRevisionMajor, uint8_t *pProductRevisionMinor); + + + VL53L1CB_ERROR VL53L1CB_GetDeviceInfo( + VL53L1_DeviceInfo_t *pVL53L1_DeviceInfo); + + VL53L1CB_ERROR VL53L1CB_GetUID( uint64_t *pUid); + + VL53L1CB_ERROR VL53L1CB_GetRangeStatusString(uint8_t RangeStatus, + char *pRangeStatusString); + + + VL53L1CB_ERROR VL53L1CB_GetPalErrorString(VL53L1CB_ERROR PalErrorCode, + char *pPalErrorString); + + + VL53L1CB_ERROR VL53L1CB_GetPalStateString(VL53L1_State PalStateCode, + char *pPalStateString); + + + VL53L1CB_ERROR VL53L1CB_GetPalState(VL53L1_DEV Dev, VL53L1_State *pPalState); + + VL53L1CB_ERROR VL53L1CB_DataInit(); + + VL53L1CB_ERROR VL53L1CB_StaticInit(); + + VL53L1CB_ERROR VL53L1CB_ClearInterruptAndStartMeasurement(); + + VL53L1CB_ERROR VL53L1CB_GetRangingMeasurementData( + VL53L1_RangingMeasurementData_t *pRangingMeasurementData); + + VL53L1CB_ERROR VL53L1CB_GetMultiRangingData( + VL53L1_MultiRangingData_t *pMultiRangingData); + + VL53L1CB_ERROR VL53L1CB_GetAdditionalData( + VL53L1_AdditionalData_t *pAdditionalData); + + VL53L1CB_ERROR VL53L1CB_SetTuningParameter( + uint16_t TuningParameterId, int32_t TuningParameterValue); + + VL53L1CB_ERROR VL53L1CB_GetTuningParameter( + uint16_t TuningParameterId, int32_t *pTuningParameterValue); + + VL53L1CB_ERROR VL53L1CB_SetXTalkCompensationEnable( + uint8_t XTalkCompensationEnable); + + + VL53L1CB_ERROR VL53L1CB_GetXTalkCompensationEnable( + uint8_t *pXTalkCompensationEnable); + + VL53L1CB_ERROR VL53L1CB_PerformXTalkCalibration( + uint8_t CalibrationOption); + + VL53L1CB_ERROR VL53L1CB_SetOffsetCalibrationMode( + VL53L1_OffsetCalibrationModes OffsetCalibrationMode); + + + VL53L1CB_ERROR VL53L1CB_SetOffsetCorrectionMode( + VL53L1_OffsetCorrectionModes OffsetCorrectionMode); + + VL53L1CB_ERROR VL53L1CB_PerformOffsetCalibration( + int32_t CalDistanceMilliMeter, FixPoint1616_t CalReflectancePercent); + + VL53L1CB_ERROR VL53L1CB_PerformOffsetSimpleCalibration( + int32_t CalDistanceMilliMeter); + + VL53L1CB_ERROR VL53L1CB_PerformOffsetZeroDistanceCalibration(); + + VL53L1CB_ERROR VL53L1CB_SetCalibrationData( + VL53L1_CalibrationData_t *pCalibrationData); + + VL53L1CB_ERROR VL53L1CB_SetZoneCalibrationData( + VL53L1_ZoneCalibrationData_t *pZoneCalibrationData); + + VL53L1CB_ERROR VL53L1CB_GetZoneCalibrationData( + VL53L1_ZoneCalibrationData_t *pZoneCalibrationData); + + VL53L1CB_ERROR VL53L1CB_GetOpticalCenter( + FixPoint1616_t *pOpticalCenterX, + FixPoint1616_t *pOpticalCenterY); + + VL53L1CB_ERROR VL53L1CB_SetThresholdConfig(VL53L1_DetectionConfig_t *pConfig); + + + VL53L1CB_ERROR VL53L1CB_GetLimitCheckStatus( uint16_t LimitCheckId, + uint8_t *pLimitCheckStatus); + + + VL53L1CB_ERROR VL53L1CB_SetLimitCheckEnable( uint16_t LimitCheckId, + uint8_t LimitCheckEnable); + + VL53L1CB_ERROR VL53L1CB_GetLimitCheckEnable(uint16_t LimitCheckId, + uint8_t *pLimitCheckEnable); + + VL53L1CB_ERROR VL53L1CB_GetThresholdConfig(VL53L1_DetectionConfig_t *pConfig); + + + VL53L1CB_ERROR VL53L1CB_PerformOffsetPerVcselCalibration(int32_t CalDistanceMilliMeter); + + VL53L1CB_ERROR VL53L1CB_GetNumberOfLimitCheck(uint16_t *pNumberOfLimitCheck); + + VL53L1CB_ERROR VL53L1CB_GetLimitCheckInfo(uint16_t LimitCheckId, + char *pLimitCheckString); + + VL53L1CB_ERROR VL53L1CB_SetPresetMode(VL53L1_PresetModes PresetMode); + + VL53L1CB_ERROR VL53L1CB_GetPresetMode( VL53L1_PresetModes *pPresetMode); + + VL53L1CB_ERROR VL53L1CB_SetDistanceMode( VL53L1_DistanceModes DistanceMode); + + VL53L1CB_ERROR VL53L1CB_GetDistanceMode(VL53L1_DistanceModes *pDistanceMode); + + VL53L1CB_ERROR VL53L1CB_SetOutputMode(VL53L1_OutputModes OutputMode); + + VL53L1CB_ERROR VL53L1CB_GetOutputMode(VL53L1_OutputModes *pOutputMode); + + VL53L1CB_ERROR VL53L1CB_SetMeasurementTimingBudgetMicroSeconds(uint32_t MeasurementTimingBudgetMicroSeconds); + + VL53L1CB_ERROR VL53L1CB_SetInterMeasurementPeriodMilliSeconds(uint32_t InterMeasurementPeriodMilliSeconds); + + + VL53L1CB_ERROR VL53L1CB_GetInterMeasurementPeriodMilliSeconds( + uint32_t *pInterMeasurementPeriodMilliSeconds); + + + VL53L1CB_ERROR VL53L1CB_SetDmaxReflectance( FixPoint1616_t DmaxReflectance); + + VL53L1CB_ERROR VL53L1CB_GetDmaxReflectance(FixPoint1616_t *pDmaxReflectance); + + + VL53L1CB_ERROR VL53L1CB_GetDmaxMode( VL53L1_DeviceDmaxModes *pDmaxMode); + + VL53L1CB_ERROR VL53L1CB_GetMeasurementTimingBudgetMicroSeconds( + uint32_t *pMeasurementTimingBudgetMicroSeconds); + + VL53L1CB_ERROR VL53L1CB_SetDmaxMode(VL53L1_DeviceDmaxModes DmaxMode); + + VL53L1CB_ERROR VL53L1CB_SetLimitCheckValue( uint16_t LimitCheckId, + FixPoint1616_t LimitCheckValue); + + VL53L1CB_ERROR VL53L1CB_GetLimitCheckValue(uint16_t LimitCheckId, + FixPoint1616_t *pLimitCheckValue); + + VL53L1CB_ERROR VL53L1CB_GetLimitCheckCurrent( uint16_t LimitCheckId, + FixPoint1616_t *pLimitCheckCurrent); + + VL53L1CB_ERROR VL53L1CB_GetMaxNumberOfROI( uint8_t *pMaxNumberOfROI); + + VL53L1CB_ERROR VL53L1CB_SetROI(VL53L1_RoiConfig_t *pRoiConfig); + + VL53L1CB_ERROR VL53L1CB_GetROI(VL53L1_RoiConfig_t *pRoiConfig); + + VL53L1CB_ERROR VL53L1CB_GetNumberOfSequenceSteps(uint8_t *pNumberOfSequenceSteps); + + VL53L1CB_ERROR VL53L1CB_GetSequenceStepsInfo(VL53L1_SequenceStepId SequenceStepId, + char *pSequenceStepsString); + + + VL53L1CB_ERROR VL53L1CB_SetSequenceStepEnable(VL53L1_SequenceStepId SequenceStepId, uint8_t SequenceStepEnabled); + + + VL53L1CB_ERROR VL53L1CB_GetSequenceStepEnable(VL53L1_SequenceStepId SequenceStepId, uint8_t *pSequenceStepEnabled); + + + VL53L1CB_ERROR VL53L1CB_StartMeasurement(); + + VL53L1CB_ERROR VL53L1CB_StopMeasurement(); + + + VL53L1CB_ERROR VL53L1CB_GetMeasurementDataReady(uint8_t *pMeasurementDataReady); + + VL53L1CB_ERROR VL53L1CB_WaitMeasurementDataReady(); + + VL53L1CB_ERROR VL53L1CB_SmudgeCorrectionEnable(VL53L1_SmudgeCorrectionModes Mode); + /***************************************************************************/ + + + /* Write and read functions from I2C */ + + VL53L1CB_ERROR VL53L1CB_WrByte(VL53L1_DEV dev, uint16_t index, uint8_t data); + VL53L1CB_ERROR VL53L1CB_WrWord(VL53L1_DEV dev, uint16_t index, uint16_t data); + VL53L1CB_ERROR VL53L1CB_WrDWord(VL53L1_DEV dev, uint16_t index, uint32_t data); + VL53L1CB_ERROR VL53L1CB_RdByte(VL53L1_DEV dev, uint16_t index, uint8_t *data); + VL53L1CB_ERROR VL53L1CB_RdWord(VL53L1_DEV dev, uint16_t index, uint16_t *data); + VL53L1CB_ERROR VL53L1CB_RdDWord(VL53L1_DEV dev, uint16_t index, uint32_t *data); + VL53L1CB_ERROR VL53L1CB_UpdateByte(VL53L1_DEV dev, uint16_t index, uint8_t AndData, uint8_t OrData); + + VL53L1CB_ERROR VL53L1CB_WriteMulti(VL53L1_DEV Dev, uint16_t index, uint8_t *pdata, uint32_t count); + VL53L1CB_ERROR VL53L1CB_ReadMulti(VL53L1_DEV Dev, uint16_t index, uint8_t *pdata, uint32_t count); + + VL53L1CB_ERROR VL53L1CB_I2CWrite(uint8_t dev, uint16_t index, uint8_t *data, uint16_t number_of_bytes); + VL53L1CB_ERROR VL53L1CB_I2CRead(uint8_t dev, uint16_t index, uint8_t *data, uint16_t number_of_bytes); + VL53L1CB_ERROR VL53L1CB_GetTickCount(uint32_t *ptick_count_ms); + VL53L1CB_ERROR VL53L1CB_WaitUs(VL53L1_Dev_t *pdev, int32_t wait_us); + VL53L1CB_ERROR VL53L1CB_WaitMs(VL53L1_Dev_t *pdev, int32_t wait_ms); + + 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); + VL53L1CB_ERROR VL53L1CB_SetDeviceAddress(VL53L1_DEV Dev, uint8_t DeviceAddress); + + // from vl53l1_api_debug.c + + VL53L1CB_ERROR VL53L1CB_get_additional_data( + VL53L1_DEV Dev, + VL53L1_additional_data_t *pdata); + + + protected: + + /* IO Device */ + ToF_DevI2C *dev_i2c; + + /* Digital out pin */ + DigitalOut *_gpio0; + /* GPIO expander */ + Stmpe1600DigiOut *_expgpio0; + /* Measure detection IRQ */ + InterruptIn *_gpio1Int; + + ///* Digital out pin */ + /* Device data */ + VL53L1_Dev_t MyDevice; + VL53L1_DEV Device; +}; + + +#endif /* _VL53L1X_CLASS_H_ */ \ No newline at end of file