Fabio Brembilla / X_NUCLEO_6180XA1

Dependencies:   X_NUCLEO_COMMON

Fork of X_NUCLEO_6180XA1 by ST

Committer:
gallonm
Date:
Mon Oct 19 13:54:17 2015 +0200
Revision:
14:0effa0bbf192
Parent:
12:71d589e6fd2c
Child:
15:454710d17358
Fixed the function Prepare() (disabled gpio interrupt by default)
Introduced FIXME for the function AlsSetThreshold()
Fixed the function InitSensor()
Fixed the function StartMeasurement), introducing the operating modes with thresholds
Fixed GetRangeError and GetAlsError
By default if the measure is invalid the value is setted 0xFFFFFFFF
Introduced the function GetMeasurement with the operating mode as parameter
Introduced the function StopMeasurement with the operating mode as parameter
Fixed the function HandleIRQ
Introduced the functions that set low and high threshold

Delete MeasureType (we need only OperatingMode)
Fixed private and public functions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gallonm 1:1de1ea2994d9 1 /**
gallonm 1:1de1ea2994d9 2 ******************************************************************************
gallonm 1:1de1ea2994d9 3 * @file vl6180x_class.h
gallonm 1:1de1ea2994d9 4 * @author AST / EST
gallonm 1:1de1ea2994d9 5 * @version V0.0.1
gallonm 1:1de1ea2994d9 6 * @date 14-April-2015
gallonm 1:1de1ea2994d9 7 * @brief Header file for component VL6180X
gallonm 1:1de1ea2994d9 8 ******************************************************************************
gallonm 1:1de1ea2994d9 9 * @attention
gallonm 1:1de1ea2994d9 10 *
gallonm 1:1de1ea2994d9 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
gallonm 1:1de1ea2994d9 12 *
gallonm 1:1de1ea2994d9 13 * Redistribution and use in source and binary forms, with or without modification,
gallonm 1:1de1ea2994d9 14 * are permitted provided that the following conditions are met:
gallonm 1:1de1ea2994d9 15 * 1. Redistributions of source code must retain the above copyright notice,
gallonm 1:1de1ea2994d9 16 * this list of conditions and the following disclaimer.
gallonm 1:1de1ea2994d9 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
gallonm 1:1de1ea2994d9 18 * this list of conditions and the following disclaimer in the documentation
gallonm 1:1de1ea2994d9 19 * and/or other materials provided with the distribution.
gallonm 1:1de1ea2994d9 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
gallonm 1:1de1ea2994d9 21 * may be used to endorse or promote products derived from this software
gallonm 1:1de1ea2994d9 22 * without specific prior written permission.
gallonm 1:1de1ea2994d9 23 *
gallonm 1:1de1ea2994d9 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
gallonm 1:1de1ea2994d9 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
gallonm 1:1de1ea2994d9 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
gallonm 1:1de1ea2994d9 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
gallonm 1:1de1ea2994d9 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
gallonm 1:1de1ea2994d9 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
gallonm 1:1de1ea2994d9 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
gallonm 1:1de1ea2994d9 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
gallonm 1:1de1ea2994d9 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
gallonm 1:1de1ea2994d9 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
gallonm 1:1de1ea2994d9 34 *
gallonm 1:1de1ea2994d9 35 ******************************************************************************
gallonm 1:1de1ea2994d9 36 */
gallonm 1:1de1ea2994d9 37
gallonm 1:1de1ea2994d9 38 #ifndef __VL6180X_CLASS_H
gallonm 1:1de1ea2994d9 39 #define __VL6180X_CLASS_H
gallonm 1:1de1ea2994d9 40
gallonm 1:1de1ea2994d9 41 /* Includes ------------------------------------------------------------------*/
gallonm 1:1de1ea2994d9 42 #include "RangeSensor.h"
gallonm 1:1de1ea2994d9 43 #include "LightSensor.h"
gallonm 10:4954b09b72d8 44 #include "DevI2C.h"
gallonm 10:4954b09b72d8 45 #include "vl6180x_api.h"
gallonm 10:4954b09b72d8 46 #include "vl6180x_cfg.h"
gallonm 10:4954b09b72d8 47 #include "vl6180x_def.h"
gallonm 10:4954b09b72d8 48 #include "vl6180x_types.h"
gallonm 1:1de1ea2994d9 49 #include "vl6180x_platform.h"
licio.mapelli@st.com 8:f943a1fca15f 50 //#include "vl6180x_appcfg.h"
gallonm 7:2dc81120c917 51 #include "STMPE1600_class.h"
gallonm 1:1de1ea2994d9 52
gallonm 14:0effa0bbf192 53 /* data struct containing range measure, light measure and type of error provided to the user
gallonm 14:0effa0bbf192 54 in case of invalid data range_mm=0xFFFFFFFF and lux=0xFFFFFFFF */
gallonm 12:71d589e6fd2c 55 typedef struct MeasureData
gallonm 12:71d589e6fd2c 56 {
gallonm 12:71d589e6fd2c 57 int32_t range_mm;
gallonm 12:71d589e6fd2c 58 uint32_t lux;
gallonm 12:71d589e6fd2c 59 uint32_t range_error;
gallonm 12:71d589e6fd2c 60 uint32_t als_error;
gallonm 12:71d589e6fd2c 61 uint32_t int_error;
gallonm 12:71d589e6fd2c 62 }MeasureData_t;
gallonm 12:71d589e6fd2c 63
gallonm 12:71d589e6fd2c 64 /* sensor operating modes */
gallonm 12:71d589e6fd2c 65 typedef enum
gallonm 12:71d589e6fd2c 66 {
gallonm 12:71d589e6fd2c 67 range_single_shot_polling=1,
gallonm 12:71d589e6fd2c 68 als_single_shot_polling,
gallonm 12:71d589e6fd2c 69 range_continuous_polling,
gallonm 12:71d589e6fd2c 70 als_continuous_polling,
gallonm 12:71d589e6fd2c 71 range_continuous_interrupt,
gallonm 12:71d589e6fd2c 72 als_continuous_interrupt,
gallonm 14:0effa0bbf192 73 interleaved_mode_interrupt,
gallonm 14:0effa0bbf192 74 range_continuous_polling_low_threshold,
gallonm 14:0effa0bbf192 75 range_continuous_polling_high_threshold,
gallonm 14:0effa0bbf192 76 range_continuous_polling_out_of_window,
gallonm 14:0effa0bbf192 77 als_continuous_polling_low_threshold,
gallonm 14:0effa0bbf192 78 als_continuous_polling_high_threshold,
gallonm 14:0effa0bbf192 79 als_continuous_polling_out_of_window,
gallonm 14:0effa0bbf192 80 range_continuous_interrupt_low_threshold,
gallonm 14:0effa0bbf192 81 range_continuous_interrrupt_high_threshold,
gallonm 14:0effa0bbf192 82 range_continuous_interrupt_out_of_window,
gallonm 14:0effa0bbf192 83 als_continuous_interrupt_low_threshold,
gallonm 14:0effa0bbf192 84 als_continuous_interrupt_high_threshold,
gallonm 14:0effa0bbf192 85 als_continuous_interrupt_out_of_window,
gallonm 14:0effa0bbf192 86 //interleaved con soglie
gallonm 12:71d589e6fd2c 87 range_continuous_als_single_shot,
gallonm 12:71d589e6fd2c 88 range_single_shot_als_continuous,
gallonm 12:71d589e6fd2c 89 }OperatingMode;
gallonm 12:71d589e6fd2c 90
gallonm 4:a5abf7757947 91 /** default device address */
gallonm 4:a5abf7757947 92 #define DEFAULT_DEVICE_ADDRESS 0x29
gallonm 4:a5abf7757947 93
gallonm 1:1de1ea2994d9 94 /* Classes -------------------------------------------------------------------*/
gallonm 1:1de1ea2994d9 95 /** Class representing a VL6180X sensor component
gallonm 1:1de1ea2994d9 96 */
gallonm 7:2dc81120c917 97 class VL6180X : public RangeSensor, public LightSensor
gallonm 7:2dc81120c917 98 {
gallonm 1:1de1ea2994d9 99 public:
gallonm 1:1de1ea2994d9 100 /** Constructor
gallonm 1:1de1ea2994d9 101 * @param[in] i2c device I2C to be used for communication
gallonm 7:2dc81120c917 102 * @param[in] digital out pin/STMPE1600DigiOut pin to be used for GPIO expander communication
gallonm 12:71d589e6fd2c 103 * @param[in] gpio1 pin
gallonm 12:71d589e6fd2c 104 * @param[in] device address, 0x29 by default
gallonm 1:1de1ea2994d9 105 */
gallonm 12:71d589e6fd2c 106 VL6180X(DevI2C &i2c, DigitalOut &pin, PinName pin_gpio1, uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS) : RangeSensor(), LightSensor(), dev_i2c(i2c), gpio0(&pin), interrupt_measure(pin_gpio1)
gallonm 7:2dc81120c917 107 {
gallonm 10:4954b09b72d8 108 MyDevice.I2cAddr=DevAddr;
gallonm 10:4954b09b72d8 109 MyDevice.Present=0;
gallonm 10:4954b09b72d8 110 MyDevice.Ready=0;
gallonm 10:4954b09b72d8 111 Device=&MyDevice;;
gallonm 10:4954b09b72d8 112 expgpio0=NULL;
gallonm 7:2dc81120c917 113 }
gallonm 10:4954b09b72d8 114
gallonm 12:71d589e6fd2c 115 VL6180X(DevI2C &i2c, STMPE1600DigiOut &pin, PinName pin_gpio1, uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS) : RangeSensor(), LightSensor(), dev_i2c(i2c), expgpio0(&pin), interrupt_measure(pin_gpio1)
gallonm 7:2dc81120c917 116 {
gallonm 10:4954b09b72d8 117 MyDevice.I2cAddr=DevAddr;
gallonm 10:4954b09b72d8 118 MyDevice.Present=0;
gallonm 10:4954b09b72d8 119 MyDevice.Ready=0;
gallonm 10:4954b09b72d8 120 Device=&MyDevice;
gallonm 12:71d589e6fd2c 121 gpio0=NULL;
gallonm 12:71d589e6fd2c 122 }
gallonm 4:a5abf7757947 123
gallonm 7:2dc81120c917 124 /** Destructor
gallonm 7:2dc81120c917 125 */
gallonm 12:71d589e6fd2c 126 //~VL6180X(){}
gallonm 14:0effa0bbf192 127
gallonm 14:0effa0bbf192 128 /* turns on the sensor */
gallonm 14:0effa0bbf192 129 void VL6180x_On(void)
gallonm 14:0effa0bbf192 130 {
gallonm 7:2dc81120c917 131 if (gpio0) *gpio0=1;
gallonm 7:2dc81120c917 132 else if (expgpio0) *expgpio0=1;
gallonm 7:2dc81120c917 133 }
gallonm 7:2dc81120c917 134
gallonm 14:0effa0bbf192 135 /* turns off the sensor */
gallonm 14:0effa0bbf192 136 void VL6180x_Off(void)
gallonm 14:0effa0bbf192 137 {
gallonm 7:2dc81120c917 138 if (gpio0) *gpio0=0;
gallonm 7:2dc81120c917 139 else if (expgpio0) *expgpio0=0;
gallonm 7:2dc81120c917 140 }
gallonm 10:4954b09b72d8 141
gallonm 14:0effa0bbf192 142 int InitSensor(uint8_t NewAddr);
gallonm 14:0effa0bbf192 143 int StartMeasurement(OperatingMode operating_mode, void (*fptr)(void), MeasureData_t *Data, uint16_t low, uint16_t high);
gallonm 14:0effa0bbf192 144 int GetMeasurement(OperatingMode operating_mode, MeasureData_t *Data);
gallonm 14:0effa0bbf192 145 int StopMeasurement(OperatingMode operating_mode);
gallonm 12:71d589e6fd2c 146
gallonm 12:71d589e6fd2c 147 /* handling functions of the interrupt_measure */
gallonm 12:71d589e6fd2c 148
gallonm 12:71d589e6fd2c 149 /** Attach a function to call when an interrupt is detected, i.e. measurement is ready
gallonm 12:71d589e6fd2c 150 *
gallonm 12:71d589e6fd2c 151 * @param[in] fptr A pointer to a void function, or 0 to set as none
gallonm 12:71d589e6fd2c 152 */
gallonm 12:71d589e6fd2c 153 void AttachInterruptMeasureDetectionIRQ(void (*fptr)(void))
gallonm 7:2dc81120c917 154 {
gallonm 12:71d589e6fd2c 155 interrupt_measure.rise(fptr);
gallonm 12:71d589e6fd2c 156 }
gallonm 12:71d589e6fd2c 157
gallonm 12:71d589e6fd2c 158 /** Enable interrupt measure IRQ
gallonm 12:71d589e6fd2c 159 */
gallonm 12:71d589e6fd2c 160 void EnableInterruptMeasureDetectionIRQ(void)
gallonm 12:71d589e6fd2c 161 {
gallonm 12:71d589e6fd2c 162 interrupt_measure.enable_irq();
gallonm 12:71d589e6fd2c 163 }
gallonm 12:71d589e6fd2c 164
gallonm 12:71d589e6fd2c 165 /** Disable interrupt measure IRQ
gallonm 12:71d589e6fd2c 166 */
gallonm 12:71d589e6fd2c 167 void DisableInterruptMeasureDetectionIRQ(void)
gallonm 12:71d589e6fd2c 168 {
gallonm 12:71d589e6fd2c 169 interrupt_measure.disable_irq();
gallonm 12:71d589e6fd2c 170 }
gallonm 12:71d589e6fd2c 171
gallonm 14:0effa0bbf192 172 int HandleIRQ(OperatingMode operating_mode, MeasureData_t *Data);
gallonm 12:71d589e6fd2c 173
gallonm 12:71d589e6fd2c 174 /* Wrapper functions */
gallonm 12:71d589e6fd2c 175 int WaitDeviceBooted()
gallonm 12:71d589e6fd2c 176 {
gallonm 12:71d589e6fd2c 177 return VL6180x_WaitDeviceBooted(Device);
gallonm 12:71d589e6fd2c 178 }
gallonm 12:71d589e6fd2c 179
gallonm 12:71d589e6fd2c 180 int Init()
gallonm 12:71d589e6fd2c 181 {
gallonm 12:71d589e6fd2c 182 return VL6180x_InitData(Device);
gallonm 12:71d589e6fd2c 183 }
gallonm 12:71d589e6fd2c 184
gallonm 12:71d589e6fd2c 185 int SetupGPIO1(uint8_t InitFunction, int ActiveHigh)
gallonm 12:71d589e6fd2c 186 {
gallonm 12:71d589e6fd2c 187 return VL6180x_SetupGPIO1(Device, InitFunction, ActiveHigh);
gallonm 10:4954b09b72d8 188 }
gallonm 10:4954b09b72d8 189
gallonm 10:4954b09b72d8 190 int Prepare()
gallonm 10:4954b09b72d8 191 {
gallonm 10:4954b09b72d8 192 return VL6180x_Prepare(Device);
gallonm 10:4954b09b72d8 193 }
gallonm 10:4954b09b72d8 194
gallonm 12:71d589e6fd2c 195 int RangeStartContinuousMode()
gallonm 12:71d589e6fd2c 196 {
gallonm 12:71d589e6fd2c 197 return VL6180x_RangeStartContinuousMode(Device);
gallonm 12:71d589e6fd2c 198 }
gallonm 12:71d589e6fd2c 199
gallonm 12:71d589e6fd2c 200 int RangeStartSingleShot()
gallonm 12:71d589e6fd2c 201 {
gallonm 12:71d589e6fd2c 202 return VL6180x_RangeStartSingleShot(Device);
gallonm 12:71d589e6fd2c 203 }
gallonm 12:71d589e6fd2c 204
gallonm 12:71d589e6fd2c 205 int RangeSetMaxConvergenceTime(uint8_t MaxConTime_msec)
gallonm 12:71d589e6fd2c 206 {
gallonm 12:71d589e6fd2c 207 return VL6180x_RangeSetMaxConvergenceTime(Device, MaxConTime_msec);
gallonm 12:71d589e6fd2c 208 }
gallonm 12:71d589e6fd2c 209
gallonm 12:71d589e6fd2c 210 int RangePollMeasurement(VL6180x_RangeData_t *pRangeData)
gallonm 12:71d589e6fd2c 211 {
gallonm 12:71d589e6fd2c 212 return VL6180x_RangePollMeasurement(Device, pRangeData);
gallonm 12:71d589e6fd2c 213 }
gallonm 12:71d589e6fd2c 214
gallonm 12:71d589e6fd2c 215 int RangeGetMeasurementIfReady(VL6180x_RangeData_t *pRangeData)
gallonm 12:71d589e6fd2c 216 {
gallonm 12:71d589e6fd2c 217 return VL6180x_RangeGetMeasurementIfReady(Device, pRangeData);
gallonm 12:71d589e6fd2c 218 }
gallonm 12:71d589e6fd2c 219
gallonm 12:71d589e6fd2c 220 int RangeGetMeasurement(VL6180x_RangeData_t *pRangeData)
gallonm 12:71d589e6fd2c 221 {
gallonm 12:71d589e6fd2c 222 return VL6180x_RangeGetMeasurement(Device, pRangeData);
gallonm 12:71d589e6fd2c 223 }
gallonm 12:71d589e6fd2c 224
gallonm 12:71d589e6fd2c 225 int GetRange(int32_t *piData)
gallonm 12:71d589e6fd2c 226 {
gallonm 12:71d589e6fd2c 227 return VL6180x_RangeGetResult(Device, piData);
gallonm 12:71d589e6fd2c 228 }
gallonm 12:71d589e6fd2c 229
gallonm 12:71d589e6fd2c 230 int RangeConfigInterrupt(uint8_t ConfigGpioInt)
gallonm 12:71d589e6fd2c 231 {
gallonm 12:71d589e6fd2c 232 return VL6180x_RangeConfigInterrupt(Device, ConfigGpioInt);
gallonm 12:71d589e6fd2c 233 }
gallonm 12:71d589e6fd2c 234
gallonm 12:71d589e6fd2c 235 int RangeGetInterruptStatus(uint8_t *pIntStatus)
gallonm 12:71d589e6fd2c 236 {
gallonm 12:71d589e6fd2c 237 return VL6180x_RangeGetInterruptStatus(Device, pIntStatus);
gallonm 12:71d589e6fd2c 238 }
gallonm 12:71d589e6fd2c 239
gallonm 12:71d589e6fd2c 240 int AlsPollMeasurement(VL6180x_AlsData_t *pAlsData)
gallonm 12:71d589e6fd2c 241 {
gallonm 12:71d589e6fd2c 242 return VL6180x_AlsPollMeasurement(Device, pAlsData);
gallonm 12:71d589e6fd2c 243 }
gallonm 12:71d589e6fd2c 244
gallonm 12:71d589e6fd2c 245 int AlsGetMeasurement(VL6180x_AlsData_t *pAlsData)
gallonm 12:71d589e6fd2c 246 {
gallonm 12:71d589e6fd2c 247 return VL6180x_AlsGetMeasurement(Device, pAlsData);
gallonm 12:71d589e6fd2c 248 }
gallonm 12:71d589e6fd2c 249
gallonm 12:71d589e6fd2c 250 int AlsConfigInterrupt(uint8_t ConfigGpioInt)
gallonm 12:71d589e6fd2c 251 {
gallonm 12:71d589e6fd2c 252 return VL6180x_AlsConfigInterrupt(Device, ConfigGpioInt);
gallonm 12:71d589e6fd2c 253 }
gallonm 12:71d589e6fd2c 254
gallonm 12:71d589e6fd2c 255 int AlsSetIntegrationPeriod(uint16_t period_ms)
gallonm 12:71d589e6fd2c 256 {
gallonm 12:71d589e6fd2c 257 return VL6180x_AlsSetIntegrationPeriod(Device, period_ms);
gallonm 12:71d589e6fd2c 258 }
gallonm 12:71d589e6fd2c 259
gallonm 12:71d589e6fd2c 260 int AlsSetInterMeasurementPeriod(uint16_t intermeasurement_period_ms)
gallonm 12:71d589e6fd2c 261 {
gallonm 12:71d589e6fd2c 262 return VL6180x_AlsSetInterMeasurementPeriod(Device, intermeasurement_period_ms);
gallonm 12:71d589e6fd2c 263 }
gallonm 12:71d589e6fd2c 264
gallonm 12:71d589e6fd2c 265 int AlsSetAnalogueGain(uint8_t gain)
gallonm 12:71d589e6fd2c 266 {
gallonm 12:71d589e6fd2c 267 return VL6180x_AlsSetAnalogueGain(Device, gain);
gallonm 12:71d589e6fd2c 268 }
gallonm 12:71d589e6fd2c 269
gallonm 12:71d589e6fd2c 270 int AlsSetThresholds(uint8_t low, uint8_t high)
gallonm 12:71d589e6fd2c 271 {
gallonm 12:71d589e6fd2c 272 return VL6180x_AlsSetThresholds(Device, low, high);
gallonm 12:71d589e6fd2c 273 }
gallonm 12:71d589e6fd2c 274
gallonm 12:71d589e6fd2c 275 int AlsGetInterruptStatus(uint8_t *pIntStatus)
gallonm 12:71d589e6fd2c 276 {
gallonm 12:71d589e6fd2c 277 return VL6180x_AlsGetInterruptStatus(Device, pIntStatus);
gallonm 12:71d589e6fd2c 278 }
gallonm 12:71d589e6fd2c 279
gallonm 12:71d589e6fd2c 280 int StaticInit()
gallonm 12:71d589e6fd2c 281 {
gallonm 12:71d589e6fd2c 282 return VL6180x_StaticInit(Device);
gallonm 12:71d589e6fd2c 283 }
gallonm 12:71d589e6fd2c 284
gallonm 12:71d589e6fd2c 285 int RangeWaitDeviceReady(int MaxLoop )
gallonm 12:71d589e6fd2c 286 {
gallonm 12:71d589e6fd2c 287 return VL6180x_RangeWaitDeviceReady(Device, MaxLoop);
gallonm 12:71d589e6fd2c 288 }
gallonm 12:71d589e6fd2c 289
gallonm 12:71d589e6fd2c 290 int RangeSetInterMeasPeriod(uint32_t InterMeasTime_msec)
gallonm 12:71d589e6fd2c 291 {
gallonm 12:71d589e6fd2c 292 return VL6180x_RangeSetInterMeasPeriod(Device, InterMeasTime_msec);
gallonm 12:71d589e6fd2c 293 }
gallonm 12:71d589e6fd2c 294
gallonm 12:71d589e6fd2c 295 int UpscaleSetScaling(uint8_t scaling)
gallonm 12:71d589e6fd2c 296 {
gallonm 12:71d589e6fd2c 297 return VL6180x_UpscaleSetScaling(Device, scaling);
gallonm 12:71d589e6fd2c 298 }
gallonm 12:71d589e6fd2c 299
gallonm 12:71d589e6fd2c 300 int UpscaleGetScaling()
gallonm 12:71d589e6fd2c 301 {
gallonm 12:71d589e6fd2c 302 return VL6180x_UpscaleGetScaling(Device);
gallonm 12:71d589e6fd2c 303 }
gallonm 12:71d589e6fd2c 304
gallonm 12:71d589e6fd2c 305 uint16_t GetUpperLimit()
gallonm 12:71d589e6fd2c 306 {
gallonm 12:71d589e6fd2c 307 return VL6180x_GetUpperLimit(Device);
gallonm 12:71d589e6fd2c 308 }
gallonm 12:71d589e6fd2c 309
gallonm 12:71d589e6fd2c 310 int RangeSetThresholds(uint16_t low, uint16_t high, int SafeHold)
gallonm 12:71d589e6fd2c 311 {
gallonm 12:71d589e6fd2c 312 return VL6180x_RangeSetThresholds(Device, low, high, SafeHold);
gallonm 12:71d589e6fd2c 313 }
gallonm 12:71d589e6fd2c 314
gallonm 12:71d589e6fd2c 315 int RangeGetThresholds(uint16_t *low, uint16_t *high)
gallonm 12:71d589e6fd2c 316 {
gallonm 12:71d589e6fd2c 317 return VL6180x_RangeGetThresholds(Device, low, high);
gallonm 12:71d589e6fd2c 318 }
gallonm 12:71d589e6fd2c 319
gallonm 12:71d589e6fd2c 320 int RangeSetRawThresholds(uint8_t low, uint8_t high)
gallonm 12:71d589e6fd2c 321 {
gallonm 12:71d589e6fd2c 322 return VL6180x_RangeSetRawThresholds(Device, low, high);
gallonm 12:71d589e6fd2c 323 }
gallonm 12:71d589e6fd2c 324
gallonm 12:71d589e6fd2c 325 int RangeSetEceFactor(uint16_t FactorM, uint16_t FactorD)
gallonm 12:71d589e6fd2c 326 {
gallonm 12:71d589e6fd2c 327 return VL6180x_RangeSetEceFactor(Device, FactorM, FactorD);
gallonm 12:71d589e6fd2c 328 }
gallonm 12:71d589e6fd2c 329
gallonm 12:71d589e6fd2c 330 int RangeSetEceState(int enable)
gallonm 12:71d589e6fd2c 331 {
gallonm 12:71d589e6fd2c 332 return VL6180x_RangeSetEceState(Device, enable);
gallonm 12:71d589e6fd2c 333 }
gallonm 12:71d589e6fd2c 334
gallonm 12:71d589e6fd2c 335 int FilterSetState(int state)
gallonm 12:71d589e6fd2c 336 {
gallonm 12:71d589e6fd2c 337 return VL6180x_FilterSetState(Device, state);
gallonm 12:71d589e6fd2c 338 }
gallonm 12:71d589e6fd2c 339
gallonm 12:71d589e6fd2c 340 int FilterGetState()
gallonm 12:71d589e6fd2c 341 {
gallonm 12:71d589e6fd2c 342 return VL6180x_FilterGetState(Device);
gallonm 12:71d589e6fd2c 343 }
gallonm 12:71d589e6fd2c 344
gallonm 12:71d589e6fd2c 345 int DMaxSetState(int state)
gallonm 12:71d589e6fd2c 346 {
gallonm 12:71d589e6fd2c 347 return VL6180x_DMaxSetState(Device, state);
gallonm 12:71d589e6fd2c 348 }
gallonm 12:71d589e6fd2c 349
gallonm 12:71d589e6fd2c 350 int DMaxGetState()
gallonm 12:71d589e6fd2c 351 {
gallonm 12:71d589e6fd2c 352 return VL6180x_DMaxGetState(Device);
gallonm 12:71d589e6fd2c 353 }
gallonm 12:71d589e6fd2c 354
gallonm 12:71d589e6fd2c 355 int RangeSetSystemMode(uint8_t mode)
gallonm 12:71d589e6fd2c 356 {
gallonm 12:71d589e6fd2c 357 return VL6180x_RangeSetSystemMode(Device, mode);
gallonm 12:71d589e6fd2c 358 }
gallonm 12:71d589e6fd2c 359
gallonm 12:71d589e6fd2c 360 int8_t GetOffsetCalibrationData()
gallonm 12:71d589e6fd2c 361 {
gallonm 12:71d589e6fd2c 362 return VL6180x_GetOffsetCalibrationData(Device);
gallonm 12:71d589e6fd2c 363 }
gallonm 12:71d589e6fd2c 364
gallonm 12:71d589e6fd2c 365 void SetOffsetCalibrationData(int8_t offset)
gallonm 12:71d589e6fd2c 366 {
gallonm 12:71d589e6fd2c 367 return VL6180x_SetOffsetCalibrationData(Device, offset);
gallonm 12:71d589e6fd2c 368 }
gallonm 12:71d589e6fd2c 369
gallonm 12:71d589e6fd2c 370 int SetXTalkCompensationRate(FixPoint97_t Rate)
gallonm 12:71d589e6fd2c 371 {
gallonm 12:71d589e6fd2c 372 return VL6180x_SetXTalkCompensationRate(Device, Rate);
gallonm 12:71d589e6fd2c 373 }
gallonm 12:71d589e6fd2c 374
gallonm 12:71d589e6fd2c 375 int AlsWaitDeviceReady(int MaxLoop)
gallonm 12:71d589e6fd2c 376 {
gallonm 12:71d589e6fd2c 377 return VL6180x_AlsWaitDeviceReady(Device, MaxLoop);
gallonm 12:71d589e6fd2c 378 }
gallonm 12:71d589e6fd2c 379
gallonm 12:71d589e6fd2c 380 int AlsSetSystemMode(uint8_t mode)
gallonm 12:71d589e6fd2c 381 {
gallonm 12:71d589e6fd2c 382 return VL6180x_AlsSetSystemMode(Device, mode);
gallonm 12:71d589e6fd2c 383 }
gallonm 12:71d589e6fd2c 384
gallonm 12:71d589e6fd2c 385 int SetGroupParamHold(int Hold)
gallonm 12:71d589e6fd2c 386 {
gallonm 12:71d589e6fd2c 387 return VL6180x_SetGroupParamHold(Device, Hold);
gallonm 12:71d589e6fd2c 388 }
gallonm 12:71d589e6fd2c 389
gallonm 10:4954b09b72d8 390 int SetI2CAddress(int NewAddr)
gallonm 10:4954b09b72d8 391 {
gallonm 10:4954b09b72d8 392 int status;
gallonm 10:4954b09b72d8 393
gallonm 10:4954b09b72d8 394 status=VL6180x_SetI2CAddress(Device, NewAddr);
gallonm 10:4954b09b72d8 395 if(!status)
gallonm 11:88541229403e 396 Device->I2cAddr=NewAddr;
gallonm 10:4954b09b72d8 397 return status;
gallonm 10:4954b09b72d8 398 }
gallonm 10:4954b09b72d8 399
gallonm 12:71d589e6fd2c 400 int SetupGPIOx(int pin, uint8_t IntFunction, int ActiveHigh)
gallonm 10:4954b09b72d8 401 {
gallonm 12:71d589e6fd2c 402 return VL6180x_SetupGPIOx(Device, pin, IntFunction, ActiveHigh);
gallonm 10:4954b09b72d8 403 }
gallonm 10:4954b09b72d8 404
gallonm 12:71d589e6fd2c 405 int SetGPIOxPolarity(int pin, int active_high)
gallonm 12:71d589e6fd2c 406 {
gallonm 12:71d589e6fd2c 407 return VL6180x_SetGPIOxPolarity(Device, pin, active_high);
gallonm 12:71d589e6fd2c 408 }
gallonm 12:71d589e6fd2c 409
gallonm 12:71d589e6fd2c 410 int SetGPIOxFunctionality(int pin, uint8_t functionality)
gallonm 10:4954b09b72d8 411 {
gallonm 12:71d589e6fd2c 412 return VL6180x_SetGPIOxFunctionality(Device, pin, functionality);
gallonm 12:71d589e6fd2c 413 }
gallonm 12:71d589e6fd2c 414
gallonm 12:71d589e6fd2c 415 int DisableGPIOxOut(int pin)
gallonm 12:71d589e6fd2c 416 {
gallonm 12:71d589e6fd2c 417 return VL6180x_DisableGPIOxOut(Device, pin);
gallonm 10:4954b09b72d8 418 }
gallonm 10:4954b09b72d8 419
gallonm 12:71d589e6fd2c 420 int GetInterruptStatus(uint8_t *status)
gallonm 12:71d589e6fd2c 421 {
gallonm 12:71d589e6fd2c 422 return VL6180x_GetInterruptStatus(Device, status);
gallonm 12:71d589e6fd2c 423 }
gallonm 12:71d589e6fd2c 424
gallonm 12:71d589e6fd2c 425 int ClearInterrupt(uint8_t IntClear)
gallonm 12:71d589e6fd2c 426 {
gallonm 12:71d589e6fd2c 427 return VL6180x_ClearInterrupt(Device, IntClear );
gallonm 12:71d589e6fd2c 428 }
gallonm 12:71d589e6fd2c 429
gallonm 12:71d589e6fd2c 430 int GetLight(uint32_t *piData)
gallonm 12:71d589e6fd2c 431 {
gallonm 12:71d589e6fd2c 432 return VL6180x_AlsGetLux(Device, piData);
gallonm 12:71d589e6fd2c 433 }
gallonm 12:71d589e6fd2c 434
gallonm 14:0effa0bbf192 435 int AlsStartContinuousMode()
gallonm 14:0effa0bbf192 436 {
gallonm 14:0effa0bbf192 437 return VL6180x_AlsSetSystemMode(Device, MODE_START_STOP|MODE_CONTINUOUS);
gallonm 14:0effa0bbf192 438 }
gallonm 12:71d589e6fd2c 439
gallonm 14:0effa0bbf192 440 private:
gallonm 12:71d589e6fd2c 441 /* api.h functions */
gallonm 7:2dc81120c917 442 int VL6180x_WaitDeviceBooted(VL6180xDev_t dev);
gallonm 7:2dc81120c917 443 int VL6180x_InitData(VL6180xDev_t dev );
gallonm 7:2dc81120c917 444 int VL6180x_SetupGPIO1(VL6180xDev_t dev, uint8_t IntFunction, int ActiveHigh);
gallonm 7:2dc81120c917 445 int VL6180x_Prepare(VL6180xDev_t dev);
gallonm 7:2dc81120c917 446 int VL6180x_RangeStartContinuousMode(VL6180xDev_t dev);
gallonm 7:2dc81120c917 447 int VL6180x_RangeStartSingleShot(VL6180xDev_t dev);
gallonm 7:2dc81120c917 448 int VL6180x_RangeSetMaxConvergenceTime(VL6180xDev_t dev, uint8_t MaxConTime_msec);
gallonm 7:2dc81120c917 449 int VL6180x_RangePollMeasurement(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
gallonm 7:2dc81120c917 450 int VL6180x_RangeGetMeasurementIfReady(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
gallonm 7:2dc81120c917 451 int VL6180x_RangeGetMeasurement(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
gallonm 7:2dc81120c917 452 int VL6180x_RangeGetResult(VL6180xDev_t dev, int32_t *pRange_mm);
gallonm 7:2dc81120c917 453 int VL6180x_RangeConfigInterrupt(VL6180xDev_t dev, uint8_t ConfigGpioInt);
gallonm 7:2dc81120c917 454 int VL6180x_RangeGetInterruptStatus(VL6180xDev_t dev, uint8_t *pIntStatus);
gallonm 7:2dc81120c917 455 int VL6180x_AlsPollMeasurement(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData);
gallonm 7:2dc81120c917 456 int VL6180x_AlsGetMeasurement(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData);
gallonm 7:2dc81120c917 457 int VL6180x_AlsConfigInterrupt(VL6180xDev_t dev, uint8_t ConfigGpioInt);
gallonm 7:2dc81120c917 458 int VL6180x_AlsSetIntegrationPeriod(VL6180xDev_t dev, uint16_t period_ms);
gallonm 7:2dc81120c917 459 int VL6180x_AlsSetInterMeasurementPeriod(VL6180xDev_t dev, uint16_t intermeasurement_period_ms);
gallonm 7:2dc81120c917 460 int VL6180x_AlsSetAnalogueGain(VL6180xDev_t dev, uint8_t gain);
gallonm 7:2dc81120c917 461 int VL6180x_AlsSetThresholds(VL6180xDev_t dev, uint8_t low, uint8_t high);
gallonm 7:2dc81120c917 462 int VL6180x_AlsGetInterruptStatus(VL6180xDev_t dev, uint8_t *pIntStatus);
gallonm 7:2dc81120c917 463 int VL6180x_StaticInit(VL6180xDev_t dev);
gallonm 7:2dc81120c917 464 int VL6180x_RangeWaitDeviceReady(VL6180xDev_t dev, int MaxLoop );
gallonm 7:2dc81120c917 465 int VL6180x_RangeSetInterMeasPeriod(VL6180xDev_t dev, uint32_t InterMeasTime_msec);
gallonm 7:2dc81120c917 466 int VL6180x_UpscaleSetScaling(VL6180xDev_t dev, uint8_t scaling);
gallonm 7:2dc81120c917 467 int VL6180x_UpscaleGetScaling(VL6180xDev_t dev);
gallonm 7:2dc81120c917 468 uint16_t VL6180x_GetUpperLimit(VL6180xDev_t dev);
gallonm 7:2dc81120c917 469 int VL6180x_RangeSetThresholds(VL6180xDev_t dev, uint16_t low, uint16_t high, int SafeHold);
gallonm 7:2dc81120c917 470 int VL6180x_RangeGetThresholds(VL6180xDev_t dev, uint16_t *low, uint16_t *high);
gallonm 7:2dc81120c917 471 int VL6180x_RangeSetRawThresholds(VL6180xDev_t dev, uint8_t low, uint8_t high);
gallonm 7:2dc81120c917 472 int VL6180x_RangeSetEceFactor(VL6180xDev_t dev, uint16_t FactorM, uint16_t FactorD);
gallonm 7:2dc81120c917 473 int VL6180x_RangeSetEceState(VL6180xDev_t dev, int enable );
gallonm 7:2dc81120c917 474 int VL6180x_FilterSetState(VL6180xDev_t dev, int state);
gallonm 7:2dc81120c917 475 int VL6180x_FilterGetState(VL6180xDev_t dev);
gallonm 7:2dc81120c917 476 int VL6180x_DMaxSetState(VL6180xDev_t dev, int state);
gallonm 7:2dc81120c917 477 int VL6180x_DMaxGetState(VL6180xDev_t dev);
gallonm 7:2dc81120c917 478 int VL6180x_RangeSetSystemMode(VL6180xDev_t dev, uint8_t mode);
gallonm 7:2dc81120c917 479 int8_t VL6180x_GetOffsetCalibrationData(VL6180xDev_t dev);
gallonm 7:2dc81120c917 480 void VL6180x_SetOffsetCalibrationData(VL6180xDev_t dev, int8_t offset);
gallonm 7:2dc81120c917 481 int VL6180x_SetXTalkCompensationRate(VL6180xDev_t dev, FixPoint97_t Rate);
gallonm 7:2dc81120c917 482 int VL6180x_AlsWaitDeviceReady(VL6180xDev_t dev, int MaxLoop );
gallonm 7:2dc81120c917 483 int VL6180x_AlsSetSystemMode(VL6180xDev_t dev, uint8_t mode);
gallonm 7:2dc81120c917 484 int VL6180x_SetGroupParamHold(VL6180xDev_t dev, int Hold);
gallonm 7:2dc81120c917 485 int VL6180x_SetI2CAddress(VL6180xDev_t dev, uint8_t NewAddr);
gallonm 7:2dc81120c917 486 int VL6180x_SetupGPIOx(VL6180xDev_t dev, int pin, uint8_t IntFunction, int ActiveHigh);
gallonm 7:2dc81120c917 487 int VL6180x_SetGPIOxPolarity(VL6180xDev_t dev, int pin, int active_high);
gallonm 7:2dc81120c917 488 int VL6180x_SetGPIOxFunctionality(VL6180xDev_t dev, int pin, uint8_t functionality);
gallonm 7:2dc81120c917 489 int VL6180x_DisableGPIOxOut(VL6180xDev_t dev, int pin);
gallonm 7:2dc81120c917 490 int VL6180x_GetInterruptStatus(VL6180xDev_t dev, uint8_t *status);
gallonm 7:2dc81120c917 491 int VL6180x_ClearInterrupt(VL6180xDev_t dev, uint8_t IntClear );
gallonm 12:71d589e6fd2c 492
gallonm 12:71d589e6fd2c 493 /* Other functions defined in api.c */
gallonm 7:2dc81120c917 494 int VL6180x_RangeStaticInit(VL6180xDev_t dev);
gallonm 7:2dc81120c917 495 int VL6180x_UpscaleRegInit(VL6180xDev_t dev);
gallonm 7:2dc81120c917 496 int VL6180x_UpscaleStaticInit(VL6180xDev_t dev);
gallonm 7:2dc81120c917 497 int VL6180x_AlsGetLux(VL6180xDev_t dev, lux_t *pLux);
gallonm 7:2dc81120c917 498 int _UpscaleInitPatch0(VL6180xDev_t dev);
gallonm 7:2dc81120c917 499 int VL6180x_RangeGetDeviceReady(VL6180xDev_t dev, int * Ready);
gallonm 7:2dc81120c917 500 int VL6180x_RangeSetEarlyConvergenceEestimateThreshold(VL6180xDev_t dev);
gallonm 7:2dc81120c917 501 int32_t _GetAveTotalTime(VL6180xDev_t dev);
gallonm 7:2dc81120c917 502 int32_t _filter_Start(VL6180xDev_t dev, uint16_t m_trueRange_mm, uint16_t m_rawRange_mm, uint32_t m_rtnSignalRate, uint32_t m_rtnAmbientRate, uint16_t errorCode);
gallonm 7:2dc81120c917 503 int _filter_GetResult(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
gallonm 7:2dc81120c917 504 int _GetRateResult(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
gallonm 7:2dc81120c917 505 int _DMax_InitData(VL6180xDev_t dev);
gallonm 7:2dc81120c917 506
gallonm 10:4954b09b72d8 507 /* Read function of the ID device */
gallonm 10:4954b09b72d8 508 int ReadID();
gallonm 4:a5abf7757947 509
gallonm 4:a5abf7757947 510 /* Write and read functions from I2C */
gallonm 4:a5abf7757947 511 int VL6180x_WrByte(VL6180xDev_t dev, uint16_t index, uint8_t data);
gallonm 4:a5abf7757947 512 int VL6180x_WrWord(VL6180xDev_t dev, uint16_t index, uint16_t data);
gallonm 4:a5abf7757947 513 int VL6180x_WrDWord(VL6180xDev_t dev, uint16_t index, uint32_t data);
gallonm 4:a5abf7757947 514 int VL6180x_RdByte(VL6180xDev_t dev, uint16_t index, uint8_t *data);
gallonm 4:a5abf7757947 515 int VL6180x_RdWord(VL6180xDev_t dev, uint16_t index, uint16_t *data);
gallonm 4:a5abf7757947 516 int VL6180x_RdDWord(VL6180xDev_t dev, uint16_t index, uint32_t *data);
gallonm 7:2dc81120c917 517 int VL6180x_UpdateByte(VL6180xDev_t dev, uint16_t index, uint8_t AndData, uint8_t OrData);
gallonm 4:a5abf7757947 518 int VL6180x_I2CWrite(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t *pBuffer, uint16_t NumByteToWrite);
gallonm 4:a5abf7757947 519 int VL6180x_I2CRead(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t *pBuffer, uint16_t NumByteToRead);
gallonm 14:0effa0bbf192 520
gallonm 14:0effa0bbf192 521
gallonm 14:0effa0bbf192 522 int IsPresent()
gallonm 14:0effa0bbf192 523 {
gallonm 14:0effa0bbf192 524 int status;
gallonm 14:0effa0bbf192 525
gallonm 14:0effa0bbf192 526 status=ReadID();
gallonm 14:0effa0bbf192 527 if(status)
gallonm 14:0effa0bbf192 528 printf("Failed to read ID device! Device not present!\n"); //FIXME da sistemare la funzione di stampa errore ErrLog da platform.h
gallonm 14:0effa0bbf192 529 return status;
gallonm 14:0effa0bbf192 530 }
gallonm 14:0effa0bbf192 531 int StopRangeMeasurement(OperatingMode operating_mode);
gallonm 14:0effa0bbf192 532 int StopAlsMeasurement(OperatingMode operating_mode);
gallonm 14:0effa0bbf192 533 int GetRangeMeas(OperatingMode operating_mode, MeasureData_t *Data);
gallonm 14:0effa0bbf192 534 int GetAlsMeas(OperatingMode operating_mode, MeasureData_t *Data);
gallonm 14:0effa0bbf192 535 int GetRangeAlsMeas(MeasureData_t *Data);
gallonm 14:0effa0bbf192 536 int RangeSetLowThreshold(uint16_t threshold);
gallonm 14:0effa0bbf192 537 int RangeSetHighThreshold(uint16_t threshold);
gallonm 14:0effa0bbf192 538 int AlsSetLowThreshold(uint16_t threshold);
gallonm 14:0effa0bbf192 539 int AlsSetHighThreshold(uint16_t threshold);
gallonm 14:0effa0bbf192 540 int GetRangeError(MeasureData_t *Data, VL6180x_RangeData_t RangeData);
gallonm 14:0effa0bbf192 541 int GetAlsError(MeasureData_t *Data, VL6180x_AlsData_t AlsData);
gallonm 14:0effa0bbf192 542 int RangeMeasPollSingleShot(MeasureData_t *Data);
gallonm 14:0effa0bbf192 543 int AlsMeasPollSingleShot(MeasureData_t *Data);
gallonm 14:0effa0bbf192 544 int RangeMeasPollContinuousMode();
gallonm 14:0effa0bbf192 545 int AlsMeasPollContinuousMode();
gallonm 14:0effa0bbf192 546 int AlsGetMeasurementIfReady(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData);
gallonm 14:0effa0bbf192 547 int RangeMeasIntContinuousMode(void (*fptr)(void));
gallonm 14:0effa0bbf192 548 int AlsMeasIntContinuousMode(void (*fptr)(void));
gallonm 14:0effa0bbf192 549 int InterleavedMode(void (*fptr)(void));
gallonm 14:0effa0bbf192 550 int StartInterleavedMode();
gallonm 14:0effa0bbf192 551 int VL6180x_AlsGetThresholds(VL6180xDev_t dev, uint16_t *low, uint16_t *high);
licio.mapelli@st.com 9:9cbc1736f148 552
gallonm 10:4954b09b72d8 553
gallonm 1:1de1ea2994d9 554 /* IO Device */
gallonm 7:2dc81120c917 555 DevI2C &dev_i2c;
gallonm 10:4954b09b72d8 556 /* Digital out pin */
gallonm 7:2dc81120c917 557 DigitalOut *gpio0;
gallonm 10:4954b09b72d8 558 /* GPIO expander */
gallonm 10:4954b09b72d8 559 STMPE1600DigiOut *expgpio0;
gallonm 12:71d589e6fd2c 560 /* Measure detection IRQ */
gallonm 12:71d589e6fd2c 561 InterruptIn interrupt_measure;
gallonm 10:4954b09b72d8 562 /* Device data */
gallonm 10:4954b09b72d8 563 MyVL6180Dev_t MyDevice;
gallonm 10:4954b09b72d8 564 VL6180xDev_t Device;
gallonm 1:1de1ea2994d9 565 };
gallonm 1:1de1ea2994d9 566
gallonm 4:a5abf7757947 567 #endif // __VL6180X_CLASS_H