ST / X_NUCLEO_6180XA1

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   HelloWorld_6180XA1 SunTracker_BLE Servo_6180XA1 BLE_HR_Light ... more

Fork of X_NUCLEO_6180XA1 by ST Expansion SW Team

X-NUCLEO-6180XA1 Proximity and Ambient Light Sensor Expansion Board Firmware Package

Introduction

This firmware package includes Components Device Drivers and Board Support Package for STMicroelectronics' X-NUCLEO-6180XA1 Proximity and ambient light sensor expansion board based on VL6180X.

Firmware Library

Class X_NUCLEO_6180XA1 is intended to represent the Proximity and ambient light sensor expansion board with the same name.

The expansion board is providing the support of the following components:

  1. on-board VL6180X proximity and ambient light sensor,
  2. up to three additional VL6180X Satellites,
  3. on-board 4-digit display

It is intentionally implemented as a singleton because only one X-NUCLEO-VL6180XA1 at a time might be deployed in a HW component stack. In order to get the singleton instance you have to call class method `Instance()`, e.g.:

// Sensors expansion board singleton instance
static X_NUCLEO_6180XA1 *6180X_expansion_board = X_NUCLEO_6180XA1::Instance();

Arduino Connector Compatibility Warning

Using the X-NUCLEO-6180XA1 expansion board with the NUCLEO-F429ZI requires adopting the following patch:

  • to remove R46 resistor connected to A3 pin;
  • to solder R47 resistor connected to A5 pin.

Alternatively, you can route the Nucleo board’s A5 pin directly to the expansion board’s A3 pin with a wire. In case you patch your expansion board or route the pin, the interrupt signal for the front sensor will be driven on A5 pin rather than on A3 pin.


Example Applications

Committer:
gallonm
Date:
Thu Nov 05 17:20:03 2015 +0100
Revision:
28:7c9031e96c22
Parent:
27:22c6f69967d9
Child:
30:75bf50276881
Settled AlsSetThresholds function that takes the parameters in lux.
VL6180x_AlsSetThresholds takes the parameters in raw device value.

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