INSAT Mini Project

Dependencies:   ST_INTERFACES X_NUCLEO_COMMON

Fork of X_NUCLEO_6180XA1 by ST

Committer:
gallonm
Date:
Tue Oct 20 16:44:28 2015 +0200
Revision:
15:454710d17358
Parent:
14:0effa0bbf192
Child:
16:0d4776564733
Fixed the function StartMeasurement

Added the other sensors (bottom, left and right)
Introduced the function InitSensor for each sensors
At the start we turn off all sensors
Fixed the function InitBoard
Added the other STMPE1600DigiOut for bottom, left and right sensor
Update the destructor

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 15:454710d17358 131 if(gpio0)
gallonm 15:454710d17358 132 *gpio0=1;
gallonm 15:454710d17358 133 else if(expgpio0)
gallonm 15:454710d17358 134 *expgpio0=1;
gallonm 7:2dc81120c917 135 }
gallonm 7:2dc81120c917 136
gallonm 14:0effa0bbf192 137 /* turns off the sensor */
gallonm 14:0effa0bbf192 138 void VL6180x_Off(void)
gallonm 14:0effa0bbf192 139 {
gallonm 15:454710d17358 140 if(gpio0)
gallonm 15:454710d17358 141 *gpio0=0;
gallonm 15:454710d17358 142 else if(expgpio0)
gallonm 15:454710d17358 143 *expgpio0=0;
gallonm 7:2dc81120c917 144 }
gallonm 10:4954b09b72d8 145
gallonm 14:0effa0bbf192 146 int InitSensor(uint8_t NewAddr);
gallonm 14:0effa0bbf192 147 int StartMeasurement(OperatingMode operating_mode, void (*fptr)(void), MeasureData_t *Data, uint16_t low, uint16_t high);
gallonm 14:0effa0bbf192 148 int GetMeasurement(OperatingMode operating_mode, MeasureData_t *Data);
gallonm 14:0effa0bbf192 149 int StopMeasurement(OperatingMode operating_mode);
gallonm 12:71d589e6fd2c 150
gallonm 12:71d589e6fd2c 151 /* handling functions of the interrupt_measure */
gallonm 12:71d589e6fd2c 152
gallonm 12:71d589e6fd2c 153 /** Attach a function to call when an interrupt is detected, i.e. measurement is ready
gallonm 12:71d589e6fd2c 154 *
gallonm 12:71d589e6fd2c 155 * @param[in] fptr A pointer to a void function, or 0 to set as none
gallonm 12:71d589e6fd2c 156 */
gallonm 12:71d589e6fd2c 157 void AttachInterruptMeasureDetectionIRQ(void (*fptr)(void))
gallonm 7:2dc81120c917 158 {
gallonm 12:71d589e6fd2c 159 interrupt_measure.rise(fptr);
gallonm 12:71d589e6fd2c 160 }
gallonm 12:71d589e6fd2c 161
gallonm 12:71d589e6fd2c 162 /** Enable interrupt measure IRQ
gallonm 12:71d589e6fd2c 163 */
gallonm 12:71d589e6fd2c 164 void EnableInterruptMeasureDetectionIRQ(void)
gallonm 12:71d589e6fd2c 165 {
gallonm 12:71d589e6fd2c 166 interrupt_measure.enable_irq();
gallonm 12:71d589e6fd2c 167 }
gallonm 12:71d589e6fd2c 168
gallonm 12:71d589e6fd2c 169 /** Disable interrupt measure IRQ
gallonm 12:71d589e6fd2c 170 */
gallonm 12:71d589e6fd2c 171 void DisableInterruptMeasureDetectionIRQ(void)
gallonm 12:71d589e6fd2c 172 {
gallonm 12:71d589e6fd2c 173 interrupt_measure.disable_irq();
gallonm 12:71d589e6fd2c 174 }
gallonm 12:71d589e6fd2c 175
gallonm 14:0effa0bbf192 176 int HandleIRQ(OperatingMode operating_mode, MeasureData_t *Data);
gallonm 12:71d589e6fd2c 177
gallonm 15:454710d17358 178 unsigned Present()
gallonm 15:454710d17358 179 {
gallonm 15:454710d17358 180 return Device->Present;
gallonm 15:454710d17358 181 }
gallonm 15:454710d17358 182
gallonm 12:71d589e6fd2c 183 /* Wrapper functions */
gallonm 12:71d589e6fd2c 184 int WaitDeviceBooted()
gallonm 12:71d589e6fd2c 185 {
gallonm 12:71d589e6fd2c 186 return VL6180x_WaitDeviceBooted(Device);
gallonm 12:71d589e6fd2c 187 }
gallonm 12:71d589e6fd2c 188
gallonm 12:71d589e6fd2c 189 int Init()
gallonm 12:71d589e6fd2c 190 {
gallonm 12:71d589e6fd2c 191 return VL6180x_InitData(Device);
gallonm 12:71d589e6fd2c 192 }
gallonm 12:71d589e6fd2c 193
gallonm 12:71d589e6fd2c 194 int SetupGPIO1(uint8_t InitFunction, int ActiveHigh)
gallonm 12:71d589e6fd2c 195 {
gallonm 12:71d589e6fd2c 196 return VL6180x_SetupGPIO1(Device, InitFunction, ActiveHigh);
gallonm 10:4954b09b72d8 197 }
gallonm 10:4954b09b72d8 198
gallonm 10:4954b09b72d8 199 int Prepare()
gallonm 10:4954b09b72d8 200 {
gallonm 10:4954b09b72d8 201 return VL6180x_Prepare(Device);
gallonm 10:4954b09b72d8 202 }
gallonm 10:4954b09b72d8 203
gallonm 12:71d589e6fd2c 204 int RangeStartContinuousMode()
gallonm 12:71d589e6fd2c 205 {
gallonm 12:71d589e6fd2c 206 return VL6180x_RangeStartContinuousMode(Device);
gallonm 12:71d589e6fd2c 207 }
gallonm 12:71d589e6fd2c 208
gallonm 12:71d589e6fd2c 209 int RangeStartSingleShot()
gallonm 12:71d589e6fd2c 210 {
gallonm 12:71d589e6fd2c 211 return VL6180x_RangeStartSingleShot(Device);
gallonm 12:71d589e6fd2c 212 }
gallonm 12:71d589e6fd2c 213
gallonm 12:71d589e6fd2c 214 int RangeSetMaxConvergenceTime(uint8_t MaxConTime_msec)
gallonm 12:71d589e6fd2c 215 {
gallonm 12:71d589e6fd2c 216 return VL6180x_RangeSetMaxConvergenceTime(Device, MaxConTime_msec);
gallonm 12:71d589e6fd2c 217 }
gallonm 12:71d589e6fd2c 218
gallonm 12:71d589e6fd2c 219 int RangePollMeasurement(VL6180x_RangeData_t *pRangeData)
gallonm 12:71d589e6fd2c 220 {
gallonm 12:71d589e6fd2c 221 return VL6180x_RangePollMeasurement(Device, pRangeData);
gallonm 12:71d589e6fd2c 222 }
gallonm 12:71d589e6fd2c 223
gallonm 12:71d589e6fd2c 224 int RangeGetMeasurementIfReady(VL6180x_RangeData_t *pRangeData)
gallonm 12:71d589e6fd2c 225 {
gallonm 12:71d589e6fd2c 226 return VL6180x_RangeGetMeasurementIfReady(Device, pRangeData);
gallonm 12:71d589e6fd2c 227 }
gallonm 12:71d589e6fd2c 228
gallonm 12:71d589e6fd2c 229 int RangeGetMeasurement(VL6180x_RangeData_t *pRangeData)
gallonm 12:71d589e6fd2c 230 {
gallonm 12:71d589e6fd2c 231 return VL6180x_RangeGetMeasurement(Device, pRangeData);
gallonm 12:71d589e6fd2c 232 }
gallonm 12:71d589e6fd2c 233
gallonm 12:71d589e6fd2c 234 int GetRange(int32_t *piData)
gallonm 12:71d589e6fd2c 235 {
gallonm 12:71d589e6fd2c 236 return VL6180x_RangeGetResult(Device, piData);
gallonm 12:71d589e6fd2c 237 }
gallonm 12:71d589e6fd2c 238
gallonm 12:71d589e6fd2c 239 int RangeConfigInterrupt(uint8_t ConfigGpioInt)
gallonm 12:71d589e6fd2c 240 {
gallonm 12:71d589e6fd2c 241 return VL6180x_RangeConfigInterrupt(Device, ConfigGpioInt);
gallonm 12:71d589e6fd2c 242 }
gallonm 12:71d589e6fd2c 243
gallonm 12:71d589e6fd2c 244 int RangeGetInterruptStatus(uint8_t *pIntStatus)
gallonm 12:71d589e6fd2c 245 {
gallonm 12:71d589e6fd2c 246 return VL6180x_RangeGetInterruptStatus(Device, pIntStatus);
gallonm 12:71d589e6fd2c 247 }
gallonm 12:71d589e6fd2c 248
gallonm 12:71d589e6fd2c 249 int AlsPollMeasurement(VL6180x_AlsData_t *pAlsData)
gallonm 12:71d589e6fd2c 250 {
gallonm 12:71d589e6fd2c 251 return VL6180x_AlsPollMeasurement(Device, pAlsData);
gallonm 12:71d589e6fd2c 252 }
gallonm 12:71d589e6fd2c 253
gallonm 12:71d589e6fd2c 254 int AlsGetMeasurement(VL6180x_AlsData_t *pAlsData)
gallonm 12:71d589e6fd2c 255 {
gallonm 12:71d589e6fd2c 256 return VL6180x_AlsGetMeasurement(Device, pAlsData);
gallonm 12:71d589e6fd2c 257 }
gallonm 12:71d589e6fd2c 258
gallonm 12:71d589e6fd2c 259 int AlsConfigInterrupt(uint8_t ConfigGpioInt)
gallonm 12:71d589e6fd2c 260 {
gallonm 12:71d589e6fd2c 261 return VL6180x_AlsConfigInterrupt(Device, ConfigGpioInt);
gallonm 12:71d589e6fd2c 262 }
gallonm 12:71d589e6fd2c 263
gallonm 12:71d589e6fd2c 264 int AlsSetIntegrationPeriod(uint16_t period_ms)
gallonm 12:71d589e6fd2c 265 {
gallonm 12:71d589e6fd2c 266 return VL6180x_AlsSetIntegrationPeriod(Device, period_ms);
gallonm 12:71d589e6fd2c 267 }
gallonm 12:71d589e6fd2c 268
gallonm 12:71d589e6fd2c 269 int AlsSetInterMeasurementPeriod(uint16_t intermeasurement_period_ms)
gallonm 12:71d589e6fd2c 270 {
gallonm 12:71d589e6fd2c 271 return VL6180x_AlsSetInterMeasurementPeriod(Device, intermeasurement_period_ms);
gallonm 12:71d589e6fd2c 272 }
gallonm 12:71d589e6fd2c 273
gallonm 12:71d589e6fd2c 274 int AlsSetAnalogueGain(uint8_t gain)
gallonm 12:71d589e6fd2c 275 {
gallonm 12:71d589e6fd2c 276 return VL6180x_AlsSetAnalogueGain(Device, gain);
gallonm 12:71d589e6fd2c 277 }
gallonm 12:71d589e6fd2c 278
gallonm 12:71d589e6fd2c 279 int AlsSetThresholds(uint8_t low, uint8_t high)
gallonm 12:71d589e6fd2c 280 {
gallonm 12:71d589e6fd2c 281 return VL6180x_AlsSetThresholds(Device, low, high);
gallonm 12:71d589e6fd2c 282 }
gallonm 12:71d589e6fd2c 283
gallonm 12:71d589e6fd2c 284 int AlsGetInterruptStatus(uint8_t *pIntStatus)
gallonm 12:71d589e6fd2c 285 {
gallonm 12:71d589e6fd2c 286 return VL6180x_AlsGetInterruptStatus(Device, pIntStatus);
gallonm 12:71d589e6fd2c 287 }
gallonm 12:71d589e6fd2c 288
gallonm 12:71d589e6fd2c 289 int StaticInit()
gallonm 12:71d589e6fd2c 290 {
gallonm 12:71d589e6fd2c 291 return VL6180x_StaticInit(Device);
gallonm 12:71d589e6fd2c 292 }
gallonm 12:71d589e6fd2c 293
gallonm 12:71d589e6fd2c 294 int RangeWaitDeviceReady(int MaxLoop )
gallonm 12:71d589e6fd2c 295 {
gallonm 12:71d589e6fd2c 296 return VL6180x_RangeWaitDeviceReady(Device, MaxLoop);
gallonm 12:71d589e6fd2c 297 }
gallonm 12:71d589e6fd2c 298
gallonm 12:71d589e6fd2c 299 int RangeSetInterMeasPeriod(uint32_t InterMeasTime_msec)
gallonm 12:71d589e6fd2c 300 {
gallonm 12:71d589e6fd2c 301 return VL6180x_RangeSetInterMeasPeriod(Device, InterMeasTime_msec);
gallonm 12:71d589e6fd2c 302 }
gallonm 12:71d589e6fd2c 303
gallonm 12:71d589e6fd2c 304 int UpscaleSetScaling(uint8_t scaling)
gallonm 12:71d589e6fd2c 305 {
gallonm 12:71d589e6fd2c 306 return VL6180x_UpscaleSetScaling(Device, scaling);
gallonm 12:71d589e6fd2c 307 }
gallonm 12:71d589e6fd2c 308
gallonm 12:71d589e6fd2c 309 int UpscaleGetScaling()
gallonm 12:71d589e6fd2c 310 {
gallonm 12:71d589e6fd2c 311 return VL6180x_UpscaleGetScaling(Device);
gallonm 12:71d589e6fd2c 312 }
gallonm 12:71d589e6fd2c 313
gallonm 12:71d589e6fd2c 314 uint16_t GetUpperLimit()
gallonm 12:71d589e6fd2c 315 {
gallonm 12:71d589e6fd2c 316 return VL6180x_GetUpperLimit(Device);
gallonm 12:71d589e6fd2c 317 }
gallonm 12:71d589e6fd2c 318
gallonm 12:71d589e6fd2c 319 int RangeSetThresholds(uint16_t low, uint16_t high, int SafeHold)
gallonm 12:71d589e6fd2c 320 {
gallonm 12:71d589e6fd2c 321 return VL6180x_RangeSetThresholds(Device, low, high, SafeHold);
gallonm 12:71d589e6fd2c 322 }
gallonm 12:71d589e6fd2c 323
gallonm 12:71d589e6fd2c 324 int RangeGetThresholds(uint16_t *low, uint16_t *high)
gallonm 12:71d589e6fd2c 325 {
gallonm 12:71d589e6fd2c 326 return VL6180x_RangeGetThresholds(Device, low, high);
gallonm 12:71d589e6fd2c 327 }
gallonm 12:71d589e6fd2c 328
gallonm 12:71d589e6fd2c 329 int RangeSetRawThresholds(uint8_t low, uint8_t high)
gallonm 12:71d589e6fd2c 330 {
gallonm 12:71d589e6fd2c 331 return VL6180x_RangeSetRawThresholds(Device, low, high);
gallonm 12:71d589e6fd2c 332 }
gallonm 12:71d589e6fd2c 333
gallonm 12:71d589e6fd2c 334 int RangeSetEceFactor(uint16_t FactorM, uint16_t FactorD)
gallonm 12:71d589e6fd2c 335 {
gallonm 12:71d589e6fd2c 336 return VL6180x_RangeSetEceFactor(Device, FactorM, FactorD);
gallonm 12:71d589e6fd2c 337 }
gallonm 12:71d589e6fd2c 338
gallonm 12:71d589e6fd2c 339 int RangeSetEceState(int enable)
gallonm 12:71d589e6fd2c 340 {
gallonm 12:71d589e6fd2c 341 return VL6180x_RangeSetEceState(Device, enable);
gallonm 12:71d589e6fd2c 342 }
gallonm 12:71d589e6fd2c 343
gallonm 12:71d589e6fd2c 344 int FilterSetState(int state)
gallonm 12:71d589e6fd2c 345 {
gallonm 12:71d589e6fd2c 346 return VL6180x_FilterSetState(Device, state);
gallonm 12:71d589e6fd2c 347 }
gallonm 12:71d589e6fd2c 348
gallonm 12:71d589e6fd2c 349 int FilterGetState()
gallonm 12:71d589e6fd2c 350 {
gallonm 12:71d589e6fd2c 351 return VL6180x_FilterGetState(Device);
gallonm 12:71d589e6fd2c 352 }
gallonm 12:71d589e6fd2c 353
gallonm 12:71d589e6fd2c 354 int DMaxSetState(int state)
gallonm 12:71d589e6fd2c 355 {
gallonm 12:71d589e6fd2c 356 return VL6180x_DMaxSetState(Device, state);
gallonm 12:71d589e6fd2c 357 }
gallonm 12:71d589e6fd2c 358
gallonm 12:71d589e6fd2c 359 int DMaxGetState()
gallonm 12:71d589e6fd2c 360 {
gallonm 12:71d589e6fd2c 361 return VL6180x_DMaxGetState(Device);
gallonm 12:71d589e6fd2c 362 }
gallonm 12:71d589e6fd2c 363
gallonm 12:71d589e6fd2c 364 int RangeSetSystemMode(uint8_t mode)
gallonm 12:71d589e6fd2c 365 {
gallonm 12:71d589e6fd2c 366 return VL6180x_RangeSetSystemMode(Device, mode);
gallonm 12:71d589e6fd2c 367 }
gallonm 12:71d589e6fd2c 368
gallonm 12:71d589e6fd2c 369 int8_t GetOffsetCalibrationData()
gallonm 12:71d589e6fd2c 370 {
gallonm 12:71d589e6fd2c 371 return VL6180x_GetOffsetCalibrationData(Device);
gallonm 12:71d589e6fd2c 372 }
gallonm 12:71d589e6fd2c 373
gallonm 12:71d589e6fd2c 374 void SetOffsetCalibrationData(int8_t offset)
gallonm 12:71d589e6fd2c 375 {
gallonm 12:71d589e6fd2c 376 return VL6180x_SetOffsetCalibrationData(Device, offset);
gallonm 12:71d589e6fd2c 377 }
gallonm 12:71d589e6fd2c 378
gallonm 12:71d589e6fd2c 379 int SetXTalkCompensationRate(FixPoint97_t Rate)
gallonm 12:71d589e6fd2c 380 {
gallonm 12:71d589e6fd2c 381 return VL6180x_SetXTalkCompensationRate(Device, Rate);
gallonm 12:71d589e6fd2c 382 }
gallonm 12:71d589e6fd2c 383
gallonm 12:71d589e6fd2c 384 int AlsWaitDeviceReady(int MaxLoop)
gallonm 12:71d589e6fd2c 385 {
gallonm 12:71d589e6fd2c 386 return VL6180x_AlsWaitDeviceReady(Device, MaxLoop);
gallonm 12:71d589e6fd2c 387 }
gallonm 12:71d589e6fd2c 388
gallonm 12:71d589e6fd2c 389 int AlsSetSystemMode(uint8_t mode)
gallonm 12:71d589e6fd2c 390 {
gallonm 12:71d589e6fd2c 391 return VL6180x_AlsSetSystemMode(Device, mode);
gallonm 12:71d589e6fd2c 392 }
gallonm 12:71d589e6fd2c 393
gallonm 12:71d589e6fd2c 394 int SetGroupParamHold(int Hold)
gallonm 12:71d589e6fd2c 395 {
gallonm 12:71d589e6fd2c 396 return VL6180x_SetGroupParamHold(Device, Hold);
gallonm 12:71d589e6fd2c 397 }
gallonm 12:71d589e6fd2c 398
gallonm 10:4954b09b72d8 399 int SetI2CAddress(int NewAddr)
gallonm 10:4954b09b72d8 400 {
gallonm 10:4954b09b72d8 401 int status;
gallonm 10:4954b09b72d8 402
gallonm 10:4954b09b72d8 403 status=VL6180x_SetI2CAddress(Device, NewAddr);
gallonm 10:4954b09b72d8 404 if(!status)
gallonm 11:88541229403e 405 Device->I2cAddr=NewAddr;
gallonm 10:4954b09b72d8 406 return status;
gallonm 10:4954b09b72d8 407 }
gallonm 10:4954b09b72d8 408
gallonm 12:71d589e6fd2c 409 int SetupGPIOx(int pin, uint8_t IntFunction, int ActiveHigh)
gallonm 10:4954b09b72d8 410 {
gallonm 12:71d589e6fd2c 411 return VL6180x_SetupGPIOx(Device, pin, IntFunction, ActiveHigh);
gallonm 10:4954b09b72d8 412 }
gallonm 10:4954b09b72d8 413
gallonm 12:71d589e6fd2c 414 int SetGPIOxPolarity(int pin, int active_high)
gallonm 12:71d589e6fd2c 415 {
gallonm 12:71d589e6fd2c 416 return VL6180x_SetGPIOxPolarity(Device, pin, active_high);
gallonm 12:71d589e6fd2c 417 }
gallonm 12:71d589e6fd2c 418
gallonm 12:71d589e6fd2c 419 int SetGPIOxFunctionality(int pin, uint8_t functionality)
gallonm 10:4954b09b72d8 420 {
gallonm 12:71d589e6fd2c 421 return VL6180x_SetGPIOxFunctionality(Device, pin, functionality);
gallonm 12:71d589e6fd2c 422 }
gallonm 12:71d589e6fd2c 423
gallonm 12:71d589e6fd2c 424 int DisableGPIOxOut(int pin)
gallonm 12:71d589e6fd2c 425 {
gallonm 12:71d589e6fd2c 426 return VL6180x_DisableGPIOxOut(Device, pin);
gallonm 10:4954b09b72d8 427 }
gallonm 10:4954b09b72d8 428
gallonm 12:71d589e6fd2c 429 int GetInterruptStatus(uint8_t *status)
gallonm 12:71d589e6fd2c 430 {
gallonm 12:71d589e6fd2c 431 return VL6180x_GetInterruptStatus(Device, status);
gallonm 12:71d589e6fd2c 432 }
gallonm 12:71d589e6fd2c 433
gallonm 12:71d589e6fd2c 434 int ClearInterrupt(uint8_t IntClear)
gallonm 12:71d589e6fd2c 435 {
gallonm 12:71d589e6fd2c 436 return VL6180x_ClearInterrupt(Device, IntClear );
gallonm 12:71d589e6fd2c 437 }
gallonm 12:71d589e6fd2c 438
gallonm 12:71d589e6fd2c 439 int GetLight(uint32_t *piData)
gallonm 12:71d589e6fd2c 440 {
gallonm 12:71d589e6fd2c 441 return VL6180x_AlsGetLux(Device, piData);
gallonm 12:71d589e6fd2c 442 }
gallonm 12:71d589e6fd2c 443
gallonm 14:0effa0bbf192 444 int AlsStartContinuousMode()
gallonm 14:0effa0bbf192 445 {
gallonm 14:0effa0bbf192 446 return VL6180x_AlsSetSystemMode(Device, MODE_START_STOP|MODE_CONTINUOUS);
gallonm 14:0effa0bbf192 447 }
gallonm 12:71d589e6fd2c 448
gallonm 14:0effa0bbf192 449 private:
gallonm 12:71d589e6fd2c 450 /* api.h functions */
gallonm 7:2dc81120c917 451 int VL6180x_WaitDeviceBooted(VL6180xDev_t dev);
gallonm 7:2dc81120c917 452 int VL6180x_InitData(VL6180xDev_t dev );
gallonm 7:2dc81120c917 453 int VL6180x_SetupGPIO1(VL6180xDev_t dev, uint8_t IntFunction, int ActiveHigh);
gallonm 7:2dc81120c917 454 int VL6180x_Prepare(VL6180xDev_t dev);
gallonm 7:2dc81120c917 455 int VL6180x_RangeStartContinuousMode(VL6180xDev_t dev);
gallonm 7:2dc81120c917 456 int VL6180x_RangeStartSingleShot(VL6180xDev_t dev);
gallonm 7:2dc81120c917 457 int VL6180x_RangeSetMaxConvergenceTime(VL6180xDev_t dev, uint8_t MaxConTime_msec);
gallonm 7:2dc81120c917 458 int VL6180x_RangePollMeasurement(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
gallonm 7:2dc81120c917 459 int VL6180x_RangeGetMeasurementIfReady(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
gallonm 7:2dc81120c917 460 int VL6180x_RangeGetMeasurement(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
gallonm 7:2dc81120c917 461 int VL6180x_RangeGetResult(VL6180xDev_t dev, int32_t *pRange_mm);
gallonm 7:2dc81120c917 462 int VL6180x_RangeConfigInterrupt(VL6180xDev_t dev, uint8_t ConfigGpioInt);
gallonm 7:2dc81120c917 463 int VL6180x_RangeGetInterruptStatus(VL6180xDev_t dev, uint8_t *pIntStatus);
gallonm 7:2dc81120c917 464 int VL6180x_AlsPollMeasurement(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData);
gallonm 7:2dc81120c917 465 int VL6180x_AlsGetMeasurement(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData);
gallonm 7:2dc81120c917 466 int VL6180x_AlsConfigInterrupt(VL6180xDev_t dev, uint8_t ConfigGpioInt);
gallonm 7:2dc81120c917 467 int VL6180x_AlsSetIntegrationPeriod(VL6180xDev_t dev, uint16_t period_ms);
gallonm 7:2dc81120c917 468 int VL6180x_AlsSetInterMeasurementPeriod(VL6180xDev_t dev, uint16_t intermeasurement_period_ms);
gallonm 7:2dc81120c917 469 int VL6180x_AlsSetAnalogueGain(VL6180xDev_t dev, uint8_t gain);
gallonm 7:2dc81120c917 470 int VL6180x_AlsSetThresholds(VL6180xDev_t dev, uint8_t low, uint8_t high);
gallonm 7:2dc81120c917 471 int VL6180x_AlsGetInterruptStatus(VL6180xDev_t dev, uint8_t *pIntStatus);
gallonm 7:2dc81120c917 472 int VL6180x_StaticInit(VL6180xDev_t dev);
gallonm 7:2dc81120c917 473 int VL6180x_RangeWaitDeviceReady(VL6180xDev_t dev, int MaxLoop );
gallonm 7:2dc81120c917 474 int VL6180x_RangeSetInterMeasPeriod(VL6180xDev_t dev, uint32_t InterMeasTime_msec);
gallonm 7:2dc81120c917 475 int VL6180x_UpscaleSetScaling(VL6180xDev_t dev, uint8_t scaling);
gallonm 7:2dc81120c917 476 int VL6180x_UpscaleGetScaling(VL6180xDev_t dev);
gallonm 7:2dc81120c917 477 uint16_t VL6180x_GetUpperLimit(VL6180xDev_t dev);
gallonm 7:2dc81120c917 478 int VL6180x_RangeSetThresholds(VL6180xDev_t dev, uint16_t low, uint16_t high, int SafeHold);
gallonm 7:2dc81120c917 479 int VL6180x_RangeGetThresholds(VL6180xDev_t dev, uint16_t *low, uint16_t *high);
gallonm 7:2dc81120c917 480 int VL6180x_RangeSetRawThresholds(VL6180xDev_t dev, uint8_t low, uint8_t high);
gallonm 7:2dc81120c917 481 int VL6180x_RangeSetEceFactor(VL6180xDev_t dev, uint16_t FactorM, uint16_t FactorD);
gallonm 7:2dc81120c917 482 int VL6180x_RangeSetEceState(VL6180xDev_t dev, int enable );
gallonm 7:2dc81120c917 483 int VL6180x_FilterSetState(VL6180xDev_t dev, int state);
gallonm 7:2dc81120c917 484 int VL6180x_FilterGetState(VL6180xDev_t dev);
gallonm 7:2dc81120c917 485 int VL6180x_DMaxSetState(VL6180xDev_t dev, int state);
gallonm 7:2dc81120c917 486 int VL6180x_DMaxGetState(VL6180xDev_t dev);
gallonm 7:2dc81120c917 487 int VL6180x_RangeSetSystemMode(VL6180xDev_t dev, uint8_t mode);
gallonm 7:2dc81120c917 488 int8_t VL6180x_GetOffsetCalibrationData(VL6180xDev_t dev);
gallonm 7:2dc81120c917 489 void VL6180x_SetOffsetCalibrationData(VL6180xDev_t dev, int8_t offset);
gallonm 7:2dc81120c917 490 int VL6180x_SetXTalkCompensationRate(VL6180xDev_t dev, FixPoint97_t Rate);
gallonm 7:2dc81120c917 491 int VL6180x_AlsWaitDeviceReady(VL6180xDev_t dev, int MaxLoop );
gallonm 7:2dc81120c917 492 int VL6180x_AlsSetSystemMode(VL6180xDev_t dev, uint8_t mode);
gallonm 7:2dc81120c917 493 int VL6180x_SetGroupParamHold(VL6180xDev_t dev, int Hold);
gallonm 7:2dc81120c917 494 int VL6180x_SetI2CAddress(VL6180xDev_t dev, uint8_t NewAddr);
gallonm 7:2dc81120c917 495 int VL6180x_SetupGPIOx(VL6180xDev_t dev, int pin, uint8_t IntFunction, int ActiveHigh);
gallonm 7:2dc81120c917 496 int VL6180x_SetGPIOxPolarity(VL6180xDev_t dev, int pin, int active_high);
gallonm 7:2dc81120c917 497 int VL6180x_SetGPIOxFunctionality(VL6180xDev_t dev, int pin, uint8_t functionality);
gallonm 7:2dc81120c917 498 int VL6180x_DisableGPIOxOut(VL6180xDev_t dev, int pin);
gallonm 7:2dc81120c917 499 int VL6180x_GetInterruptStatus(VL6180xDev_t dev, uint8_t *status);
gallonm 7:2dc81120c917 500 int VL6180x_ClearInterrupt(VL6180xDev_t dev, uint8_t IntClear );
gallonm 12:71d589e6fd2c 501
gallonm 12:71d589e6fd2c 502 /* Other functions defined in api.c */
gallonm 7:2dc81120c917 503 int VL6180x_RangeStaticInit(VL6180xDev_t dev);
gallonm 7:2dc81120c917 504 int VL6180x_UpscaleRegInit(VL6180xDev_t dev);
gallonm 7:2dc81120c917 505 int VL6180x_UpscaleStaticInit(VL6180xDev_t dev);
gallonm 7:2dc81120c917 506 int VL6180x_AlsGetLux(VL6180xDev_t dev, lux_t *pLux);
gallonm 7:2dc81120c917 507 int _UpscaleInitPatch0(VL6180xDev_t dev);
gallonm 7:2dc81120c917 508 int VL6180x_RangeGetDeviceReady(VL6180xDev_t dev, int * Ready);
gallonm 7:2dc81120c917 509 int VL6180x_RangeSetEarlyConvergenceEestimateThreshold(VL6180xDev_t dev);
gallonm 7:2dc81120c917 510 int32_t _GetAveTotalTime(VL6180xDev_t dev);
gallonm 7:2dc81120c917 511 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 512 int _filter_GetResult(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
gallonm 7:2dc81120c917 513 int _GetRateResult(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
gallonm 7:2dc81120c917 514 int _DMax_InitData(VL6180xDev_t dev);
gallonm 7:2dc81120c917 515
gallonm 10:4954b09b72d8 516 /* Read function of the ID device */
gallonm 10:4954b09b72d8 517 int ReadID();
gallonm 4:a5abf7757947 518
gallonm 4:a5abf7757947 519 /* Write and read functions from I2C */
gallonm 4:a5abf7757947 520 int VL6180x_WrByte(VL6180xDev_t dev, uint16_t index, uint8_t data);
gallonm 4:a5abf7757947 521 int VL6180x_WrWord(VL6180xDev_t dev, uint16_t index, uint16_t data);
gallonm 4:a5abf7757947 522 int VL6180x_WrDWord(VL6180xDev_t dev, uint16_t index, uint32_t data);
gallonm 4:a5abf7757947 523 int VL6180x_RdByte(VL6180xDev_t dev, uint16_t index, uint8_t *data);
gallonm 4:a5abf7757947 524 int VL6180x_RdWord(VL6180xDev_t dev, uint16_t index, uint16_t *data);
gallonm 4:a5abf7757947 525 int VL6180x_RdDWord(VL6180xDev_t dev, uint16_t index, uint32_t *data);
gallonm 7:2dc81120c917 526 int VL6180x_UpdateByte(VL6180xDev_t dev, uint16_t index, uint8_t AndData, uint8_t OrData);
gallonm 4:a5abf7757947 527 int VL6180x_I2CWrite(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t *pBuffer, uint16_t NumByteToWrite);
gallonm 4:a5abf7757947 528 int VL6180x_I2CRead(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t *pBuffer, uint16_t NumByteToRead);
gallonm 14:0effa0bbf192 529
gallonm 14:0effa0bbf192 530
gallonm 14:0effa0bbf192 531 int IsPresent()
gallonm 14:0effa0bbf192 532 {
gallonm 14:0effa0bbf192 533 int status;
gallonm 14:0effa0bbf192 534
gallonm 14:0effa0bbf192 535 status=ReadID();
gallonm 14:0effa0bbf192 536 if(status)
gallonm 15:454710d17358 537 printf("Failed to read ID device! Device not present!\n\r"); //FIXME da sistemare la funzione di stampa errore ErrLog da platform.h
gallonm 14:0effa0bbf192 538 return status;
gallonm 14:0effa0bbf192 539 }
gallonm 14:0effa0bbf192 540 int StopRangeMeasurement(OperatingMode operating_mode);
gallonm 14:0effa0bbf192 541 int StopAlsMeasurement(OperatingMode operating_mode);
gallonm 14:0effa0bbf192 542 int GetRangeMeas(OperatingMode operating_mode, MeasureData_t *Data);
gallonm 14:0effa0bbf192 543 int GetAlsMeas(OperatingMode operating_mode, MeasureData_t *Data);
gallonm 14:0effa0bbf192 544 int GetRangeAlsMeas(MeasureData_t *Data);
gallonm 14:0effa0bbf192 545 int RangeSetLowThreshold(uint16_t threshold);
gallonm 14:0effa0bbf192 546 int RangeSetHighThreshold(uint16_t threshold);
gallonm 14:0effa0bbf192 547 int AlsSetLowThreshold(uint16_t threshold);
gallonm 14:0effa0bbf192 548 int AlsSetHighThreshold(uint16_t threshold);
gallonm 14:0effa0bbf192 549 int GetRangeError(MeasureData_t *Data, VL6180x_RangeData_t RangeData);
gallonm 14:0effa0bbf192 550 int GetAlsError(MeasureData_t *Data, VL6180x_AlsData_t AlsData);
gallonm 14:0effa0bbf192 551 int RangeMeasPollSingleShot(MeasureData_t *Data);
gallonm 14:0effa0bbf192 552 int AlsMeasPollSingleShot(MeasureData_t *Data);
gallonm 14:0effa0bbf192 553 int RangeMeasPollContinuousMode();
gallonm 14:0effa0bbf192 554 int AlsMeasPollContinuousMode();
gallonm 14:0effa0bbf192 555 int AlsGetMeasurementIfReady(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData);
gallonm 14:0effa0bbf192 556 int RangeMeasIntContinuousMode(void (*fptr)(void));
gallonm 14:0effa0bbf192 557 int AlsMeasIntContinuousMode(void (*fptr)(void));
gallonm 14:0effa0bbf192 558 int InterleavedMode(void (*fptr)(void));
gallonm 14:0effa0bbf192 559 int StartInterleavedMode();
gallonm 14:0effa0bbf192 560 int VL6180x_AlsGetThresholds(VL6180xDev_t dev, uint16_t *low, uint16_t *high);
licio.mapelli@st.com 9:9cbc1736f148 561
gallonm 10:4954b09b72d8 562
gallonm 1:1de1ea2994d9 563 /* IO Device */
gallonm 7:2dc81120c917 564 DevI2C &dev_i2c;
gallonm 10:4954b09b72d8 565 /* Digital out pin */
gallonm 7:2dc81120c917 566 DigitalOut *gpio0;
gallonm 10:4954b09b72d8 567 /* GPIO expander */
gallonm 10:4954b09b72d8 568 STMPE1600DigiOut *expgpio0;
gallonm 12:71d589e6fd2c 569 /* Measure detection IRQ */
gallonm 12:71d589e6fd2c 570 InterruptIn interrupt_measure;
gallonm 10:4954b09b72d8 571 /* Device data */
gallonm 10:4954b09b72d8 572 MyVL6180Dev_t MyDevice;
gallonm 10:4954b09b72d8 573 VL6180xDev_t Device;
gallonm 1:1de1ea2994d9 574 };
gallonm 1:1de1ea2994d9 575
gallonm 4:a5abf7757947 576 #endif // __VL6180X_CLASS_H