INSAT Mini Project
Dependencies: ST_INTERFACES X_NUCLEO_COMMON
Fork of X_NUCLEO_6180XA1 by
Components/VL6180X/vl6180x_class.h@41:2e00362bdb8e, 2016-03-03 (annotated)
- Committer:
- mapellil
- Date:
- Thu Mar 03 10:43:01 2016 +0000
- Revision:
- 41:2e00362bdb8e
- Parent:
- 38:18abb7f7dcb2
- Child:
- 42:692c6223dc24
Check if 6180 InterruptIn pin is NC do not register call back function.
Who changed what in which revision?
User | Revision | Line number | New 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 |
mapellil | 30:75bf50276881 | 6 | * @date 9-November-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>© 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" |
mapellil | 35:407b0b127eb8 | 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" |
gallonm | 18:c98aa73dc4a5 | 50 | #include "stmpe1600_class.h" |
gallonm | 1:1de1ea2994d9 | 51 | |
mapellil | 35:407b0b127eb8 | 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 | */ |
mapellil | 38:18abb7f7dcb2 | 96 | class VL6180X : public RangeSensor, public LightSensor |
gallonm | 7:2dc81120c917 | 97 | { |
gallonm | 1:1de1ea2994d9 | 98 | public: |
mapellil | 30:75bf50276881 | 99 | /** Constructor 1 |
mapellil | 30:75bf50276881 | 100 | * @param[in] &i2c device I2C to be used for communication |
mapellil | 30:75bf50276881 | 101 | * @param[in] &pin Mbed DigitalOut pin to be used as component GPIO_0 CE |
mapellil | 30:75bf50276881 | 102 | * @param[in] pin_gpio1 pin Mbed InterruptIn PinName to be used as component GPIO_1 INT |
mapellil | 30:75bf50276881 | 103 | * @param[in] DevAddr device address, 0x29 by default |
gallonm | 1:1de1ea2994d9 | 104 | */ |
mapellil | 32:ef97c377d27b | 105 | VL6180X(DevI2C &i2c, DigitalOut &pin, PinName pin_gpio1, uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS) : RangeSensor(), LightSensor(), dev_i2c(i2c), gpio0(&pin), gpio1Int(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; |
mapellil | 41:2e00362bdb8e | 112 | gpio1Pin=pin_gpio1; |
gallonm | 16:0d4776564733 | 113 | } |
mapellil | 30:75bf50276881 | 114 | /** Constructor 2 |
mapellil | 30:75bf50276881 | 115 | * @param[in] i2c device I2C to be used for communication |
mapellil | 30:75bf50276881 | 116 | * @param[in] &pin Gpio Expander STMPE1600DigiOut pin to be used as component GPIO_0 CE |
mapellil | 30:75bf50276881 | 117 | * @param[in] pin_gpio1 pin Mbed InterruptIn PinName to be used as component GPIO_1 INT |
mapellil | 30:75bf50276881 | 118 | * @param[in] device address, 0x29 by default |
mapellil | 30:75bf50276881 | 119 | */ |
mapellil | 32:ef97c377d27b | 120 | VL6180X(DevI2C &i2c, STMPE1600DigiOut &pin, PinName pin_gpio1, uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS) : RangeSensor(), LightSensor(), dev_i2c(i2c), expgpio0(&pin), gpio1Int(pin_gpio1) |
gallonm | 16:0d4776564733 | 121 | { |
gallonm | 16:0d4776564733 | 122 | MyDevice.I2cAddr=DevAddr; |
gallonm | 16:0d4776564733 | 123 | MyDevice.Present=0; |
gallonm | 16:0d4776564733 | 124 | MyDevice.Ready=0; |
gallonm | 16:0d4776564733 | 125 | Device=&MyDevice; |
mapellil | 41:2e00362bdb8e | 126 | gpio0=NULL; |
mapellil | 41:2e00362bdb8e | 127 | gpio1Pin=pin_gpio1; |
gallonm | 16:0d4776564733 | 128 | } |
gallonm | 4:a5abf7757947 | 129 | |
gallonm | 7:2dc81120c917 | 130 | /** Destructor |
gallonm | 7:2dc81120c917 | 131 | */ |
mapellil | 31:f99c53a51917 | 132 | virtual ~VL6180X(){} |
gallonm | 28:7c9031e96c22 | 133 | /* warning: VL6180X class inherits from GenericSensor, RangeSensor and LightSensor, that haven`t a destructor. |
gallonm | 23:dfb5ccc7b780 | 134 | The warning should request to introduce a virtual destructor to make sure to delete the object */ |
mapellil | 31:f99c53a51917 | 135 | |
mapellil | 31:f99c53a51917 | 136 | /*** Interface Methods ***/ |
mapellil | 32:ef97c377d27b | 137 | /*** High level API ***/ |
mapellil | 31:f99c53a51917 | 138 | /** |
mapellil | 31:f99c53a51917 | 139 | * @brief PowerOn the sensor |
mapellil | 31:f99c53a51917 | 140 | * @return void |
mapellil | 31:f99c53a51917 | 141 | */ |
gallonm | 14:0effa0bbf192 | 142 | /* turns on the sensor */ |
gallonm | 16:0d4776564733 | 143 | void VL6180x_On(void) |
gallonm | 16:0d4776564733 | 144 | { |
gallonm | 16:0d4776564733 | 145 | if(gpio0) |
gallonm | 16:0d4776564733 | 146 | *gpio0=1; |
gallonm | 16:0d4776564733 | 147 | else if(expgpio0) |
gallonm | 16:0d4776564733 | 148 | *expgpio0=1; |
gallonm | 16:0d4776564733 | 149 | } |
mapellil | 31:f99c53a51917 | 150 | |
mapellil | 31:f99c53a51917 | 151 | /** |
mapellil | 31:f99c53a51917 | 152 | * @brief PowerOff the sensor |
mapellil | 31:f99c53a51917 | 153 | * @return void |
mapellil | 31:f99c53a51917 | 154 | */ |
gallonm | 16:0d4776564733 | 155 | /* turns off the sensor */ |
gallonm | 14:0effa0bbf192 | 156 | void VL6180x_Off(void) |
gallonm | 16:0d4776564733 | 157 | { |
gallonm | 16:0d4776564733 | 158 | if(gpio0) |
gallonm | 16:0d4776564733 | 159 | *gpio0=0; |
gallonm | 16:0d4776564733 | 160 | else if(expgpio0) |
gallonm | 16:0d4776564733 | 161 | *expgpio0=0; |
gallonm | 16:0d4776564733 | 162 | } |
mapellil | 31:f99c53a51917 | 163 | |
mapellil | 31:f99c53a51917 | 164 | /** |
mapellil | 31:f99c53a51917 | 165 | * @brief Initialize the sensor with default values |
mapellil | 31:f99c53a51917 | 166 | * @return 0 on Success |
mapellil | 31:f99c53a51917 | 167 | */ |
gallonm | 16:0d4776564733 | 168 | int InitSensor(uint8_t NewAddr); |
mapellil | 31:f99c53a51917 | 169 | |
mapellil | 31:f99c53a51917 | 170 | /** |
mapellil | 31:f99c53a51917 | 171 | * @brief Start the measure indicated by operating mode |
mapellil | 31:f99c53a51917 | 172 | * @param[in] operating_mode specifies requested measure |
mapellil | 32:ef97c377d27b | 173 | * @param[in] fptr specifies call back function must be !NULL in case of interrupt measure |
mapellil | 32:ef97c377d27b | 174 | * @param[in] low specifies measure low threashold in Lux or in mm according to measure |
mapellil | 32:ef97c377d27b | 175 | * @param[in] high specifies measure high threashold in Lux or in mm according to measure |
mapellil | 31:f99c53a51917 | 176 | * @return 0 on Success |
mapellil | 31:f99c53a51917 | 177 | */ |
gallonm | 24:025afc3fe30f | 178 | int StartMeasurement(OperatingMode operating_mode, void (*fptr)(void), uint16_t low, uint16_t high); |
gallonm | 12:71d589e6fd2c | 179 | |
mapellil | 31:f99c53a51917 | 180 | /** |
mapellil | 31:f99c53a51917 | 181 | * @brief Get results for the measure indicated by operating mode |
mapellil | 31:f99c53a51917 | 182 | * @param[in] operating_mode specifies requested measure results |
mapellil | 31:f99c53a51917 | 183 | * @param[out] Data pointer to the MeasureData_t structure to read data in to |
mapellil | 31:f99c53a51917 | 184 | * @return 0 on Success |
mapellil | 31:f99c53a51917 | 185 | */ |
mapellil | 31:f99c53a51917 | 186 | int GetMeasurement(OperatingMode operating_mode, MeasureData_t *Data); |
mapellil | 31:f99c53a51917 | 187 | |
mapellil | 31:f99c53a51917 | 188 | /** |
mapellil | 31:f99c53a51917 | 189 | * @brief Stop the currently running measure indicate by operating_mode |
mapellil | 31:f99c53a51917 | 190 | * @param[in] operating_mode specifies requested measure to stop |
mapellil | 31:f99c53a51917 | 191 | * @return 0 on Success |
mapellil | 31:f99c53a51917 | 192 | */ |
mapellil | 31:f99c53a51917 | 193 | int StopMeasurement(OperatingMode operating_mode); |
mapellil | 31:f99c53a51917 | 194 | |
mapellil | 32:ef97c377d27b | 195 | /** |
mapellil | 32:ef97c377d27b | 196 | * @brief Interrupt handling func to be called by user after an INT is occourred |
mapellil | 32:ef97c377d27b | 197 | * @param[in] opeating_mode indicating the in progress measure |
mapellil | 32:ef97c377d27b | 198 | * @param[out] Data pointer to the MeasureData_t structure to read data in to |
mapellil | 31:f99c53a51917 | 199 | * @return 0 on Success |
mapellil | 32:ef97c377d27b | 200 | */ |
mapellil | 32:ef97c377d27b | 201 | int HandleIRQ(OperatingMode operating_mode, MeasureData_t *Data); |
gallonm | 12:71d589e6fd2c | 202 | |
mapellil | 31:f99c53a51917 | 203 | /** |
mapellil | 31:f99c53a51917 | 204 | * @brief Enable interrupt measure IRQ |
mapellil | 31:f99c53a51917 | 205 | * @return 0 on Success |
mapellil | 31:f99c53a51917 | 206 | */ |
gallonm | 16:0d4776564733 | 207 | void EnableInterruptMeasureDetectionIRQ(void) |
gallonm | 16:0d4776564733 | 208 | { |
mapellil | 41:2e00362bdb8e | 209 | if (gpio1Pin != NC) gpio1Int.enable_irq(); |
gallonm | 16:0d4776564733 | 210 | } |
gallonm | 12:71d589e6fd2c | 211 | |
mapellil | 31:f99c53a51917 | 212 | /** |
mapellil | 31:f99c53a51917 | 213 | * @brief Disable interrupt measure IRQ |
mapellil | 31:f99c53a51917 | 214 | * @return 0 on Success |
mapellil | 31:f99c53a51917 | 215 | */ |
gallonm | 16:0d4776564733 | 216 | void DisableInterruptMeasureDetectionIRQ(void) |
gallonm | 16:0d4776564733 | 217 | { |
mapellil | 41:2e00362bdb8e | 218 | if (gpio1Pin != NC) gpio1Int.disable_irq(); |
mapellil | 32:ef97c377d27b | 219 | } |
mapellil | 32:ef97c377d27b | 220 | /*** End High level API ***/ |
mapellil | 32:ef97c377d27b | 221 | |
mapellil | 32:ef97c377d27b | 222 | /** |
mapellil | 32:ef97c377d27b | 223 | * @brief Attach a function to call when an interrupt is detected, i.e. measurement is ready |
mapellil | 32:ef97c377d27b | 224 | * @param[in] fptr pointer to call back function to be called whenever an interrupt occours |
mapellil | 32:ef97c377d27b | 225 | * @return 0 on Success |
mapellil | 32:ef97c377d27b | 226 | */ |
mapellil | 32:ef97c377d27b | 227 | void AttachInterruptMeasureDetectionIRQ(void (*fptr)(void)) |
mapellil | 32:ef97c377d27b | 228 | { |
mapellil | 41:2e00362bdb8e | 229 | if (gpio1Pin != NC) gpio1Int.rise(fptr); |
gallonm | 16:0d4776564733 | 230 | } |
mapellil | 31:f99c53a51917 | 231 | |
mapellil | 31:f99c53a51917 | 232 | /** |
mapellil | 31:f99c53a51917 | 233 | * @brief Check the sensor presence |
mapellil | 31:f99c53a51917 | 234 | * @return 1 when device is present |
mapellil | 31:f99c53a51917 | 235 | */ |
gallonm | 16:0d4776564733 | 236 | unsigned Present() |
gallonm | 16:0d4776564733 | 237 | { |
gallonm | 16:0d4776564733 | 238 | return Device->Present; |
gallonm | 16:0d4776564733 | 239 | } |
gallonm | 15:454710d17358 | 240 | |
mapellil | 32:ef97c377d27b | 241 | /** Wrapper functions */ |
mapellil | 35:407b0b127eb8 | 242 | /** @defgroup api_init Init functions |
mapellil | 35:407b0b127eb8 | 243 | * @brief API init functions |
mapellil | 35:407b0b127eb8 | 244 | * @ingroup api_hl |
mapellil | 35:407b0b127eb8 | 245 | * @{ |
mapellil | 35:407b0b127eb8 | 246 | */ |
mapellil | 35:407b0b127eb8 | 247 | /** |
mapellil | 35:407b0b127eb8 | 248 | * @brief Wait for device booted after chip enable (hardware standby) |
mapellil | 35:407b0b127eb8 | 249 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 250 | * After Chip enable Application you can also simply wait at least 1ms to ensure device is ready |
mapellil | 35:407b0b127eb8 | 251 | * @warning After device chip enable (gpio0) de-asserted user must wait gpio1 to get asserted (hardware standby). |
mapellil | 35:407b0b127eb8 | 252 | * or wait at least 400usec prior to do any low level access or api call . |
mapellil | 35:407b0b127eb8 | 253 | * |
mapellil | 35:407b0b127eb8 | 254 | * This function implements polling for standby but you must ensure 400usec from chip enable passed\n |
mapellil | 35:407b0b127eb8 | 255 | * @warning if device get prepared @a VL6180x_Prepare() re-using these function can hold indefinitely\n |
mapellil | 35:407b0b127eb8 | 256 | * |
mapellil | 35:407b0b127eb8 | 257 | * @param void |
mapellil | 35:407b0b127eb8 | 258 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 259 | */ |
gallonm | 16:0d4776564733 | 260 | int WaitDeviceBooted() |
gallonm | 16:0d4776564733 | 261 | { |
gallonm | 16:0d4776564733 | 262 | return VL6180x_WaitDeviceBooted(Device); |
gallonm | 16:0d4776564733 | 263 | } |
mapellil | 35:407b0b127eb8 | 264 | |
mapellil | 35:407b0b127eb8 | 265 | /** |
mapellil | 35:407b0b127eb8 | 266 | * |
mapellil | 35:407b0b127eb8 | 267 | * @brief One time device initialization |
mapellil | 35:407b0b127eb8 | 268 | * |
mapellil | 35:407b0b127eb8 | 269 | * To be called once and only once after device is brought out of reset (Chip enable) and booted see @a VL6180x_WaitDeviceBooted() |
mapellil | 35:407b0b127eb8 | 270 | * |
mapellil | 35:407b0b127eb8 | 271 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 272 | * When not used after a fresh device "power up" or reset, it may return @a #CALIBRATION_WARNING |
mapellil | 35:407b0b127eb8 | 273 | * meaning wrong calibration data may have been fetched from device that can result in ranging offset error\n |
mapellil | 35:407b0b127eb8 | 274 | * If application cannot execute device reset or need to run VL6180x_InitData multiple time |
mapellil | 35:407b0b127eb8 | 275 | * then it must ensure proper offset calibration saving and restore on its own |
mapellil | 35:407b0b127eb8 | 276 | * by using @a VL6180x_GetOffsetCalibrationData() on first power up and then @a VL6180x_SetOffsetCalibrationData() all all subsequent init |
mapellil | 35:407b0b127eb8 | 277 | * |
mapellil | 35:407b0b127eb8 | 278 | * @param void |
mapellil | 35:407b0b127eb8 | 279 | * @return 0 on success, @a #CALIBRATION_WARNING if failed |
mapellil | 35:407b0b127eb8 | 280 | */ |
mapellil | 38:18abb7f7dcb2 | 281 | virtual int Init() |
gallonm | 12:71d589e6fd2c | 282 | { |
gallonm | 12:71d589e6fd2c | 283 | return VL6180x_InitData(Device); |
gallonm | 12:71d589e6fd2c | 284 | } |
mapellil | 35:407b0b127eb8 | 285 | |
mapellil | 35:407b0b127eb8 | 286 | /** |
mapellil | 35:407b0b127eb8 | 287 | * @brief Configure GPIO1 function and set polarity. |
mapellil | 35:407b0b127eb8 | 288 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 289 | * To be used prior to arm single shot measure or start continuous mode. |
mapellil | 35:407b0b127eb8 | 290 | * |
mapellil | 35:407b0b127eb8 | 291 | * The function uses @a VL6180x_SetupGPIOx() for setting gpio 1. |
mapellil | 35:407b0b127eb8 | 292 | * @warning changing polarity can generate a spurious interrupt on pins. |
mapellil | 35:407b0b127eb8 | 293 | * It sets an interrupt flags condition that must be cleared to avoid polling hangs. \n |
mapellil | 35:407b0b127eb8 | 294 | * It is safe to run VL6180x_ClearAllInterrupt() just after. |
mapellil | 35:407b0b127eb8 | 295 | * |
mapellil | 35:407b0b127eb8 | 296 | * @param IntFunction The interrupt functionality to use one of :\n |
mapellil | 35:407b0b127eb8 | 297 | * @a #GPIOx_SELECT_OFF \n |
mapellil | 35:407b0b127eb8 | 298 | * @a #GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT |
mapellil | 35:407b0b127eb8 | 299 | * @param ActiveHigh The interrupt line polarity see ::IntrPol_e |
mapellil | 35:407b0b127eb8 | 300 | * use @a #INTR_POL_LOW (falling edge) or @a #INTR_POL_HIGH (rising edge) |
mapellil | 35:407b0b127eb8 | 301 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 302 | */ |
gallonm | 16:0d4776564733 | 303 | int SetupGPIO1(uint8_t InitFunction, int ActiveHigh) |
gallonm | 16:0d4776564733 | 304 | { |
gallonm | 16:0d4776564733 | 305 | return VL6180x_SetupGPIO1(Device, InitFunction, ActiveHigh); |
gallonm | 16:0d4776564733 | 306 | } |
mapellil | 35:407b0b127eb8 | 307 | |
mapellil | 35:407b0b127eb8 | 308 | /** |
mapellil | 35:407b0b127eb8 | 309 | * @brief Prepare device for operation |
mapellil | 35:407b0b127eb8 | 310 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 311 | * Does static initialization and reprogram common default settings \n |
mapellil | 35:407b0b127eb8 | 312 | * Device is prepared for new measure, ready single shot ranging or ALS typical polling operation\n |
mapellil | 35:407b0b127eb8 | 313 | * After prepare user can : \n |
mapellil | 35:407b0b127eb8 | 314 | * @li Call other API function to set other settings\n |
mapellil | 35:407b0b127eb8 | 315 | * @li Configure the interrupt pins, etc... \n |
mapellil | 35:407b0b127eb8 | 316 | * @li Then start ranging or ALS operations in single shot or continuous mode |
mapellil | 35:407b0b127eb8 | 317 | * |
mapellil | 35:407b0b127eb8 | 318 | * @param void |
mapellil | 35:407b0b127eb8 | 319 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 320 | */ |
gallonm | 16:0d4776564733 | 321 | int Prepare() |
gallonm | 16:0d4776564733 | 322 | { |
gallonm | 16:0d4776564733 | 323 | return VL6180x_Prepare(Device); |
gallonm | 16:0d4776564733 | 324 | } |
mapellil | 35:407b0b127eb8 | 325 | |
mapellil | 35:407b0b127eb8 | 326 | /** |
mapellil | 35:407b0b127eb8 | 327 | * @brief Start continuous ranging mode |
mapellil | 35:407b0b127eb8 | 328 | * |
mapellil | 35:407b0b127eb8 | 329 | * @details End user should ensure device is in idle state and not already running |
mapellil | 35:407b0b127eb8 | 330 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 331 | */ |
gallonm | 16:0d4776564733 | 332 | int RangeStartContinuousMode() |
gallonm | 16:0d4776564733 | 333 | { |
gallonm | 16:0d4776564733 | 334 | return VL6180x_RangeStartContinuousMode(Device); |
gallonm | 16:0d4776564733 | 335 | } |
mapellil | 35:407b0b127eb8 | 336 | |
mapellil | 35:407b0b127eb8 | 337 | /** |
mapellil | 35:407b0b127eb8 | 338 | * @brief Start single shot ranging measure |
mapellil | 35:407b0b127eb8 | 339 | * |
mapellil | 35:407b0b127eb8 | 340 | * @details End user should ensure device is in idle state and not already running |
mapellil | 35:407b0b127eb8 | 341 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 342 | */ |
gallonm | 16:0d4776564733 | 343 | int RangeStartSingleShot() |
gallonm | 16:0d4776564733 | 344 | { |
gallonm | 16:0d4776564733 | 345 | return VL6180x_RangeStartSingleShot(Device); |
gallonm | 16:0d4776564733 | 346 | } |
mapellil | 35:407b0b127eb8 | 347 | |
mapellil | 35:407b0b127eb8 | 348 | /** |
mapellil | 35:407b0b127eb8 | 349 | * @brief Set maximum convergence time |
mapellil | 35:407b0b127eb8 | 350 | * |
mapellil | 35:407b0b127eb8 | 351 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 352 | * Setting a low convergence time can impact maximal detectable distance. |
mapellil | 35:407b0b127eb8 | 353 | * Refer to VL6180x Datasheet Table 7 : Typical range convergence time. |
mapellil | 35:407b0b127eb8 | 354 | * A typical value for up to x3 scaling is 50 ms |
mapellil | 35:407b0b127eb8 | 355 | * |
mapellil | 35:407b0b127eb8 | 356 | * @param MaxConTime_msec |
mapellil | 35:407b0b127eb8 | 357 | * @return 0 on success. <0 on error. >0 for calibration warning status |
mapellil | 35:407b0b127eb8 | 358 | */ |
gallonm | 16:0d4776564733 | 359 | int RangeSetMaxConvergenceTime(uint8_t MaxConTime_msec) |
gallonm | 16:0d4776564733 | 360 | { |
gallonm | 16:0d4776564733 | 361 | return VL6180x_RangeSetMaxConvergenceTime(Device, MaxConTime_msec); |
gallonm | 16:0d4776564733 | 362 | } |
mapellil | 35:407b0b127eb8 | 363 | |
mapellil | 35:407b0b127eb8 | 364 | /** |
mapellil | 35:407b0b127eb8 | 365 | * @brief Single shot Range measurement in polling mode. |
mapellil | 35:407b0b127eb8 | 366 | * |
mapellil | 35:407b0b127eb8 | 367 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 368 | * Kick off a new single shot range then wait for ready to retrieve it by polling interrupt status \n |
mapellil | 35:407b0b127eb8 | 369 | * Ranging must be prepared by a first call to @a VL6180x_Prepare() and it is safer to clear very first poll call \n |
mapellil | 35:407b0b127eb8 | 370 | * This function reference VL6180x_PollDelay(dev) porting macro/call on each polling loop, |
mapellil | 35:407b0b127eb8 | 371 | * but PollDelay(dev) may never be called if measure in ready on first poll loop \n |
mapellil | 35:407b0b127eb8 | 372 | * Should not be use in continuous mode operation as it will stop it and cause stop/start misbehaviour \n |
mapellil | 35:407b0b127eb8 | 373 | * \n This function clears Range Interrupt status , but not error one. For that uses @a VL6180x_ClearErrorInterrupt() \n |
mapellil | 35:407b0b127eb8 | 374 | * This range error is not related VL6180x_RangeData_t::errorStatus that refer measure status \n |
mapellil | 35:407b0b127eb8 | 375 | * |
mapellil | 35:407b0b127eb8 | 376 | * @param pRangeData Will be populated with the result ranging data @a VL6180x_RangeData_t |
mapellil | 35:407b0b127eb8 | 377 | * @return 0 on success , @a #RANGE_ERROR if device reports an error case in it status (not cleared) use |
mapellil | 35:407b0b127eb8 | 378 | * |
mapellil | 35:407b0b127eb8 | 379 | * \sa ::VL6180x_RangeData_t |
mapellil | 35:407b0b127eb8 | 380 | */ |
gallonm | 16:0d4776564733 | 381 | int RangePollMeasurement(VL6180x_RangeData_t *pRangeData) |
gallonm | 16:0d4776564733 | 382 | { |
gallonm | 16:0d4776564733 | 383 | return VL6180x_RangePollMeasurement(Device, pRangeData); |
gallonm | 16:0d4776564733 | 384 | } |
mapellil | 35:407b0b127eb8 | 385 | |
mapellil | 35:407b0b127eb8 | 386 | /** |
mapellil | 35:407b0b127eb8 | 387 | * @brief Check for measure readiness and get it if ready |
mapellil | 35:407b0b127eb8 | 388 | * |
mapellil | 35:407b0b127eb8 | 389 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 390 | * Using this function is an alternative to @a VL6180x_RangePollMeasurement() to avoid polling operation. This is suitable for applications |
mapellil | 35:407b0b127eb8 | 391 | * where host CPU is triggered on a interrupt (not from VL6180X) to perform ranging operation. In this scenario, we assume that the very first ranging |
mapellil | 35:407b0b127eb8 | 392 | * operation is triggered by a call to @a VL6180x_RangeStartSingleShot(). Then, host CPU regularly calls @a VL6180x_RangeGetMeasurementIfReady() to |
mapellil | 35:407b0b127eb8 | 393 | * get a distance measure if ready. In case the distance is not ready, host may get it at the next call.\n |
mapellil | 35:407b0b127eb8 | 394 | * |
mapellil | 35:407b0b127eb8 | 395 | * @warning |
mapellil | 35:407b0b127eb8 | 396 | * This function does not re-start a new measurement : this is up to the host CPU to do it.\n |
mapellil | 35:407b0b127eb8 | 397 | * This function clears Range Interrupt for measure ready , but not error interrupts. For that, uses @a VL6180x_ClearErrorInterrupt() \n |
mapellil | 35:407b0b127eb8 | 398 | * |
mapellil | 35:407b0b127eb8 | 399 | * @param pRangeData Will be populated with the result ranging data if available |
mapellil | 35:407b0b127eb8 | 400 | * @return 0 when measure is ready pRange data is updated (untouched when not ready), >0 for warning and @a #NOT_READY if measurement not yet ready, <0 for error @a #RANGE_ERROR if device report an error, |
mapellil | 35:407b0b127eb8 | 401 | */ |
gallonm | 16:0d4776564733 | 402 | int RangeGetMeasurementIfReady(VL6180x_RangeData_t *pRangeData) |
gallonm | 16:0d4776564733 | 403 | { |
gallonm | 16:0d4776564733 | 404 | return VL6180x_RangeGetMeasurementIfReady(Device, pRangeData); |
gallonm | 16:0d4776564733 | 405 | } |
mapellil | 35:407b0b127eb8 | 406 | |
mapellil | 35:407b0b127eb8 | 407 | /** |
mapellil | 35:407b0b127eb8 | 408 | * @brief Retrieve range measurements set from device |
mapellil | 35:407b0b127eb8 | 409 | * |
mapellil | 35:407b0b127eb8 | 410 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 411 | * The measurement is made of range_mm status and error code @a VL6180x_RangeData_t \n |
mapellil | 35:407b0b127eb8 | 412 | * Based on configuration selected extra measures are included. |
mapellil | 35:407b0b127eb8 | 413 | * |
mapellil | 35:407b0b127eb8 | 414 | * @warning should not be used in continuous if wrap around filter is active \n |
mapellil | 35:407b0b127eb8 | 415 | * Does not perform any wait nor check for result availability or validity. |
mapellil | 35:407b0b127eb8 | 416 | *\sa VL6180x_RangeGetResult for "range only" measurement |
mapellil | 35:407b0b127eb8 | 417 | * |
mapellil | 35:407b0b127eb8 | 418 | * @param pRangeData Pointer to the data structure to fill up |
mapellil | 35:407b0b127eb8 | 419 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 420 | */ |
gallonm | 16:0d4776564733 | 421 | int RangeGetMeasurement(VL6180x_RangeData_t *pRangeData) |
gallonm | 16:0d4776564733 | 422 | { |
gallonm | 16:0d4776564733 | 423 | return VL6180x_RangeGetMeasurement(Device, pRangeData); |
gallonm | 16:0d4776564733 | 424 | } |
mapellil | 35:407b0b127eb8 | 425 | |
mapellil | 35:407b0b127eb8 | 426 | /** |
mapellil | 35:407b0b127eb8 | 427 | * @brief Get ranging result and only that |
mapellil | 35:407b0b127eb8 | 428 | * |
mapellil | 35:407b0b127eb8 | 429 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 430 | * Unlike @a VL6180x_RangeGetMeasurement() this function only retrieves the range in millimeter \n |
mapellil | 35:407b0b127eb8 | 431 | * It does any required up-scale translation\n |
mapellil | 35:407b0b127eb8 | 432 | * It can be called after success status polling or in interrupt mode \n |
mapellil | 35:407b0b127eb8 | 433 | * @warning these function is not doing wrap around filtering \n |
mapellil | 35:407b0b127eb8 | 434 | * This function doesn't perform any data ready check! |
mapellil | 35:407b0b127eb8 | 435 | * |
mapellil | 35:407b0b127eb8 | 436 | * @param pRange_mm Pointer to range distance |
mapellil | 35:407b0b127eb8 | 437 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 438 | */ |
mapellil | 38:18abb7f7dcb2 | 439 | virtual int GetRange(int32_t *piData) |
gallonm | 16:0d4776564733 | 440 | { |
gallonm | 16:0d4776564733 | 441 | return VL6180x_RangeGetResult(Device, piData); |
gallonm | 16:0d4776564733 | 442 | } |
gallonm | 12:71d589e6fd2c | 443 | |
mapellil | 35:407b0b127eb8 | 444 | /** |
mapellil | 35:407b0b127eb8 | 445 | * @brief Configure ranging interrupt reported to application |
mapellil | 35:407b0b127eb8 | 446 | * |
mapellil | 35:407b0b127eb8 | 447 | * @param ConfigGpioInt Select ranging report\n select one (and only one) of:\n |
mapellil | 35:407b0b127eb8 | 448 | * @a #CONFIG_GPIO_INTERRUPT_DISABLED \n |
mapellil | 35:407b0b127eb8 | 449 | * @a #CONFIG_GPIO_INTERRUPT_LEVEL_LOW \n |
mapellil | 35:407b0b127eb8 | 450 | * @a #CONFIG_GPIO_INTERRUPT_LEVEL_HIGH \n |
mapellil | 35:407b0b127eb8 | 451 | * @a #CONFIG_GPIO_INTERRUPT_OUT_OF_WINDOW \n |
mapellil | 35:407b0b127eb8 | 452 | * @a #CONFIG_GPIO_INTERRUPT_NEW_SAMPLE_READY |
mapellil | 35:407b0b127eb8 | 453 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 454 | */ |
gallonm | 16:0d4776564733 | 455 | int RangeConfigInterrupt(uint8_t ConfigGpioInt) |
gallonm | 16:0d4776564733 | 456 | { |
gallonm | 16:0d4776564733 | 457 | return VL6180x_RangeConfigInterrupt(Device, ConfigGpioInt); |
gallonm | 16:0d4776564733 | 458 | } |
mapellil | 35:407b0b127eb8 | 459 | |
mapellil | 35:407b0b127eb8 | 460 | /** |
mapellil | 35:407b0b127eb8 | 461 | * @brief Return ranging error interrupt status |
mapellil | 35:407b0b127eb8 | 462 | * |
mapellil | 35:407b0b127eb8 | 463 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 464 | * Appropriate Interrupt report must have been selected first by @a VL6180x_RangeConfigInterrupt() or @a VL6180x_Prepare() \n |
mapellil | 35:407b0b127eb8 | 465 | * |
mapellil | 35:407b0b127eb8 | 466 | * Can be used in polling loop to wait for a given ranging event or in interrupt to read the trigger \n |
mapellil | 35:407b0b127eb8 | 467 | * Events triggers are : \n |
mapellil | 35:407b0b127eb8 | 468 | * @a #RES_INT_STAT_GPIO_LOW_LEVEL_THRESHOLD \n |
mapellil | 35:407b0b127eb8 | 469 | * @a #RES_INT_STAT_GPIO_HIGH_LEVEL_THRESHOLD \n |
mapellil | 35:407b0b127eb8 | 470 | * @a #RES_INT_STAT_GPIO_OUT_OF_WINDOW \n (RES_INT_STAT_GPIO_LOW_LEVEL_THRESHOLD|RES_INT_STAT_GPIO_HIGH_LEVEL_THRESHOLD) |
mapellil | 35:407b0b127eb8 | 471 | * @a #RES_INT_STAT_GPIO_NEW_SAMPLE_READY \n |
mapellil | 35:407b0b127eb8 | 472 | * |
mapellil | 35:407b0b127eb8 | 473 | * @sa IntrStatus_t |
mapellil | 35:407b0b127eb8 | 474 | * @param pIntStatus Pointer to status variable to update |
mapellil | 35:407b0b127eb8 | 475 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 476 | */ |
gallonm | 16:0d4776564733 | 477 | int RangeGetInterruptStatus(uint8_t *pIntStatus) |
gallonm | 16:0d4776564733 | 478 | { |
gallonm | 16:0d4776564733 | 479 | return VL6180x_RangeGetInterruptStatus(Device, pIntStatus); |
gallonm | 16:0d4776564733 | 480 | } |
mapellil | 35:407b0b127eb8 | 481 | |
mapellil | 35:407b0b127eb8 | 482 | /** |
mapellil | 35:407b0b127eb8 | 483 | * @brief Run a single ALS measurement in single shot polling mode |
mapellil | 35:407b0b127eb8 | 484 | * |
mapellil | 35:407b0b127eb8 | 485 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 486 | * Kick off a new single shot ALS then wait new measurement ready to retrieve it ( polling system interrupt status register for als) \n |
mapellil | 35:407b0b127eb8 | 487 | * ALS must be prepared by a first call to @a VL6180x_Prepare() \n |
mapellil | 35:407b0b127eb8 | 488 | * \n Should not be used in continuous or interrupt mode it will break it and create hazard in start/stop \n |
mapellil | 35:407b0b127eb8 | 489 | * |
mapellil | 35:407b0b127eb8 | 490 | * @param dev The device |
mapellil | 35:407b0b127eb8 | 491 | * @param pAlsData Als data structure to fill up @a VL6180x_AlsData_t |
mapellil | 35:407b0b127eb8 | 492 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 493 | */ |
gallonm | 16:0d4776564733 | 494 | int AlsPollMeasurement(VL6180x_AlsData_t *pAlsData) |
gallonm | 16:0d4776564733 | 495 | { |
gallonm | 16:0d4776564733 | 496 | return VL6180x_AlsPollMeasurement(Device, pAlsData); |
gallonm | 16:0d4776564733 | 497 | } |
mapellil | 35:407b0b127eb8 | 498 | |
mapellil | 35:407b0b127eb8 | 499 | /** |
mapellil | 35:407b0b127eb8 | 500 | * @brief Get actual ALS measurement |
mapellil | 35:407b0b127eb8 | 501 | * |
mapellil | 35:407b0b127eb8 | 502 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 503 | * Can be called after success status polling or in interrupt mode to retrieve ALS measurement from device \n |
mapellil | 35:407b0b127eb8 | 504 | * This function doesn't perform any data ready check ! |
mapellil | 35:407b0b127eb8 | 505 | * |
mapellil | 35:407b0b127eb8 | 506 | * @param pAlsData Pointer to measurement struct @a VL6180x_AlsData_t |
mapellil | 35:407b0b127eb8 | 507 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 508 | */ |
gallonm | 16:0d4776564733 | 509 | int AlsGetMeasurement(VL6180x_AlsData_t *pAlsData) |
gallonm | 16:0d4776564733 | 510 | { |
gallonm | 16:0d4776564733 | 511 | return VL6180x_AlsGetMeasurement(Device, pAlsData); |
gallonm | 16:0d4776564733 | 512 | } |
mapellil | 35:407b0b127eb8 | 513 | |
mapellil | 35:407b0b127eb8 | 514 | /** |
mapellil | 35:407b0b127eb8 | 515 | * @brief Configure ALS interrupts provide to application |
mapellil | 35:407b0b127eb8 | 516 | * |
mapellil | 35:407b0b127eb8 | 517 | * @param ConfigGpioInt Select one (and only one) of : \n |
mapellil | 35:407b0b127eb8 | 518 | * @a #CONFIG_GPIO_INTERRUPT_DISABLED \n |
mapellil | 35:407b0b127eb8 | 519 | * @a #CONFIG_GPIO_INTERRUPT_LEVEL_LOW \n |
mapellil | 35:407b0b127eb8 | 520 | * @a #CONFIG_GPIO_INTERRUPT_LEVEL_HIGH \n |
mapellil | 35:407b0b127eb8 | 521 | * @a #CONFIG_GPIO_INTERRUPT_OUT_OF_WINDOW \n |
mapellil | 35:407b0b127eb8 | 522 | * @a #CONFIG_GPIO_INTERRUPT_NEW_SAMPLE_READY |
mapellil | 35:407b0b127eb8 | 523 | * @return 0 on success may return #INVALID_PARAMS for invalid mode |
mapellil | 35:407b0b127eb8 | 524 | */ |
gallonm | 16:0d4776564733 | 525 | int AlsConfigInterrupt(uint8_t ConfigGpioInt) |
gallonm | 16:0d4776564733 | 526 | { |
gallonm | 16:0d4776564733 | 527 | return VL6180x_AlsConfigInterrupt(Device, ConfigGpioInt); |
gallonm | 16:0d4776564733 | 528 | } |
mapellil | 35:407b0b127eb8 | 529 | |
mapellil | 35:407b0b127eb8 | 530 | /** |
mapellil | 35:407b0b127eb8 | 531 | * @brief Set ALS integration period |
mapellil | 35:407b0b127eb8 | 532 | * |
mapellil | 35:407b0b127eb8 | 533 | * @param period_ms Integration period in msec. Value in between 50 to 100 msec is recommended\n |
mapellil | 35:407b0b127eb8 | 534 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 535 | */ |
gallonm | 16:0d4776564733 | 536 | int AlsSetIntegrationPeriod(uint16_t period_ms) |
gallonm | 16:0d4776564733 | 537 | { |
gallonm | 12:71d589e6fd2c | 538 | return VL6180x_AlsSetIntegrationPeriod(Device, period_ms); |
gallonm | 16:0d4776564733 | 539 | } |
mapellil | 35:407b0b127eb8 | 540 | |
mapellil | 35:407b0b127eb8 | 541 | /** |
mapellil | 35:407b0b127eb8 | 542 | * @brief Set ALS "inter-measurement period" |
mapellil | 35:407b0b127eb8 | 543 | * |
mapellil | 35:407b0b127eb8 | 544 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 545 | * The so call data-sheet "inter measurement period" is actually an extra inter-measurement delay |
mapellil | 35:407b0b127eb8 | 546 | * |
mapellil | 35:407b0b127eb8 | 547 | * @param intermeasurement_period_ms Inter measurement time in milli second\n |
mapellil | 35:407b0b127eb8 | 548 | * @warning applied value is clipped to 2550 ms\n |
mapellil | 35:407b0b127eb8 | 549 | * @return 0 on success if value is |
mapellil | 35:407b0b127eb8 | 550 | */ |
gallonm | 16:0d4776564733 | 551 | int AlsSetInterMeasurementPeriod(uint16_t intermeasurement_period_ms) |
gallonm | 16:0d4776564733 | 552 | { |
gallonm | 12:71d589e6fd2c | 553 | return VL6180x_AlsSetInterMeasurementPeriod(Device, intermeasurement_period_ms); |
gallonm | 12:71d589e6fd2c | 554 | } |
gallonm | 12:71d589e6fd2c | 555 | |
mapellil | 35:407b0b127eb8 | 556 | /** |
mapellil | 35:407b0b127eb8 | 557 | * @brief Set ALS analog gain code |
mapellil | 35:407b0b127eb8 | 558 | * |
mapellil | 35:407b0b127eb8 | 559 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 560 | * ALS gain code value programmed in @a SYSALS_ANALOGUE_GAIN . |
mapellil | 35:407b0b127eb8 | 561 | * @param gain Gain code see datasheet or AlsGainLookUp for real value. Value is clipped to 7. |
mapellil | 35:407b0b127eb8 | 562 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 563 | */ |
gallonm | 12:71d589e6fd2c | 564 | int AlsSetAnalogueGain(uint8_t gain) |
gallonm | 16:0d4776564733 | 565 | { |
gallonm | 16:0d4776564733 | 566 | return VL6180x_AlsSetAnalogueGain(Device, gain); |
gallonm | 16:0d4776564733 | 567 | } |
mapellil | 35:407b0b127eb8 | 568 | |
mapellil | 35:407b0b127eb8 | 569 | /** |
mapellil | 35:407b0b127eb8 | 570 | * @brief Set thresholds for ALS continuous mode |
mapellil | 35:407b0b127eb8 | 571 | * @warning Threshold are raw device value not lux! |
mapellil | 35:407b0b127eb8 | 572 | * |
mapellil | 35:407b0b127eb8 | 573 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 574 | * Basically value programmed in @a SYSALS_THRESH_LOW and @a SYSALS_THRESH_HIGH registers |
mapellil | 35:407b0b127eb8 | 575 | * @param low ALS low raw threshold for @a SYSALS_THRESH_LOW |
mapellil | 35:407b0b127eb8 | 576 | * @param high ALS high raw threshold for @a SYSALS_THRESH_HIGH |
mapellil | 35:407b0b127eb8 | 577 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 578 | */ |
gallonm | 28:7c9031e96c22 | 579 | int AlsSetThresholds(uint16_t lux_threshold_low, uint16_t lux_threshold_high); |
gallonm | 12:71d589e6fd2c | 580 | |
mapellil | 35:407b0b127eb8 | 581 | /** |
mapellil | 35:407b0b127eb8 | 582 | * Read ALS interrupt status |
mapellil | 35:407b0b127eb8 | 583 | * @param pIntStatus Pointer to status |
mapellil | 35:407b0b127eb8 | 584 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 585 | */ |
gallonm | 12:71d589e6fd2c | 586 | int AlsGetInterruptStatus(uint8_t *pIntStatus) |
gallonm | 28:7c9031e96c22 | 587 | { |
gallonm | 12:71d589e6fd2c | 588 | return VL6180x_AlsGetInterruptStatus(Device, pIntStatus); |
gallonm | 12:71d589e6fd2c | 589 | } |
gallonm | 12:71d589e6fd2c | 590 | |
mapellil | 35:407b0b127eb8 | 591 | /** |
mapellil | 35:407b0b127eb8 | 592 | * @brief Low level ranging and ALS register static settings (you should call @a VL6180x_Prepare() function instead) |
mapellil | 35:407b0b127eb8 | 593 | * |
mapellil | 35:407b0b127eb8 | 594 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 595 | */ |
gallonm | 12:71d589e6fd2c | 596 | int StaticInit() |
gallonm | 16:0d4776564733 | 597 | { |
gallonm | 16:0d4776564733 | 598 | return VL6180x_StaticInit(Device); |
gallonm | 16:0d4776564733 | 599 | } |
mapellil | 35:407b0b127eb8 | 600 | |
mapellil | 35:407b0b127eb8 | 601 | /** |
mapellil | 35:407b0b127eb8 | 602 | * @brief Wait for device to be ready (before a new ranging command can be issued by application) |
mapellil | 35:407b0b127eb8 | 603 | * @param MaxLoop Max Number of i2c polling loop see @a #msec_2_i2cloop |
mapellil | 35:407b0b127eb8 | 604 | * @return 0 on success. <0 when fail \n |
mapellil | 35:407b0b127eb8 | 605 | * @ref VL6180x_ErrCode_t::TIME_OUT for time out \n |
mapellil | 35:407b0b127eb8 | 606 | * @ref VL6180x_ErrCode_t::INVALID_PARAMS if MaxLop<1 |
mapellil | 35:407b0b127eb8 | 607 | */ |
gallonm | 16:0d4776564733 | 608 | int RangeWaitDeviceReady(int MaxLoop ) |
gallonm | 16:0d4776564733 | 609 | { |
gallonm | 16:0d4776564733 | 610 | return VL6180x_RangeWaitDeviceReady(Device, MaxLoop); |
gallonm | 16:0d4776564733 | 611 | } |
mapellil | 35:407b0b127eb8 | 612 | |
mapellil | 35:407b0b127eb8 | 613 | /** |
mapellil | 35:407b0b127eb8 | 614 | * @brief Program Inter measurement period (used only in continuous mode) |
mapellil | 35:407b0b127eb8 | 615 | * |
mapellil | 35:407b0b127eb8 | 616 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 617 | * When trying to set too long time, it returns #INVALID_PARAMS |
mapellil | 35:407b0b127eb8 | 618 | * |
mapellil | 35:407b0b127eb8 | 619 | * @param InterMeasTime_msec Requires inter-measurement time in msec |
mapellil | 35:407b0b127eb8 | 620 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 621 | */ |
gallonm | 16:0d4776564733 | 622 | int RangeSetInterMeasPeriod(uint32_t InterMeasTime_msec) |
gallonm | 16:0d4776564733 | 623 | { |
gallonm | 16:0d4776564733 | 624 | return VL6180x_RangeSetInterMeasPeriod(Device, InterMeasTime_msec); |
gallonm | 16:0d4776564733 | 625 | } |
mapellil | 35:407b0b127eb8 | 626 | |
mapellil | 35:407b0b127eb8 | 627 | /** |
mapellil | 35:407b0b127eb8 | 628 | * @brief Set device ranging scaling factor |
mapellil | 35:407b0b127eb8 | 629 | * |
mapellil | 35:407b0b127eb8 | 630 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 631 | * The ranging scaling factor is applied on the raw distance measured by the device to increase operating ranging at the price of the precision. |
mapellil | 35:407b0b127eb8 | 632 | * Changing the scaling factor when device is not in f/w standby state (free running) is not safe. |
mapellil | 35:407b0b127eb8 | 633 | * It can be source of spurious interrupt, wrongly scaled range etc ... |
mapellil | 35:407b0b127eb8 | 634 | * @warning __This function doesns't update high/low threshold and other programmed settings linked to scaling factor__. |
mapellil | 35:407b0b127eb8 | 635 | * To ensure proper operation, threshold and scaling changes should be done following this procedure: \n |
mapellil | 35:407b0b127eb8 | 636 | * @li Set Group hold : @a VL6180x_SetGroupParamHold() \n |
mapellil | 35:407b0b127eb8 | 637 | * @li Get Threshold @a VL6180x_RangeGetThresholds() \n |
mapellil | 35:407b0b127eb8 | 638 | * @li Change scaling : @a VL6180x_UpscaleSetScaling() \n |
mapellil | 35:407b0b127eb8 | 639 | * @li Set Threshold : @a VL6180x_RangeSetThresholds() \n |
mapellil | 35:407b0b127eb8 | 640 | * @li Unset Group Hold : @a VL6180x_SetGroupParamHold() |
mapellil | 35:407b0b127eb8 | 641 | * |
mapellil | 35:407b0b127eb8 | 642 | * @param scaling Scaling factor to apply (1,2 or 3) |
mapellil | 35:407b0b127eb8 | 643 | * @return 0 on success when up-scale support is not configured it fail for any |
mapellil | 35:407b0b127eb8 | 644 | * scaling than the one statically configured. |
mapellil | 35:407b0b127eb8 | 645 | */ |
gallonm | 16:0d4776564733 | 646 | int UpscaleSetScaling(uint8_t scaling) |
gallonm | 16:0d4776564733 | 647 | { |
gallonm | 16:0d4776564733 | 648 | return VL6180x_UpscaleSetScaling(Device, scaling); |
gallonm | 16:0d4776564733 | 649 | } |
mapellil | 35:407b0b127eb8 | 650 | |
mapellil | 35:407b0b127eb8 | 651 | /** |
mapellil | 35:407b0b127eb8 | 652 | * @brief Get current ranging scaling factor |
mapellil | 35:407b0b127eb8 | 653 | * |
mapellil | 35:407b0b127eb8 | 654 | * @return The current scaling factor |
mapellil | 35:407b0b127eb8 | 655 | */ |
gallonm | 16:0d4776564733 | 656 | int UpscaleGetScaling() |
gallonm | 16:0d4776564733 | 657 | { |
gallonm | 16:0d4776564733 | 658 | return VL6180x_UpscaleGetScaling(Device); |
gallonm | 16:0d4776564733 | 659 | } |
mapellil | 35:407b0b127eb8 | 660 | |
mapellil | 35:407b0b127eb8 | 661 | /** |
mapellil | 35:407b0b127eb8 | 662 | * @brief Get the maximal distance for actual scaling |
mapellil | 35:407b0b127eb8 | 663 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 664 | * Do not use prior to @a VL6180x_Prepare() or at least @a VL6180x_InitData() |
mapellil | 35:407b0b127eb8 | 665 | * |
mapellil | 35:407b0b127eb8 | 666 | * Any range value more than the value returned by this function is to be considered as "no target detected" |
mapellil | 35:407b0b127eb8 | 667 | * or "no target in detectable range" \n |
mapellil | 35:407b0b127eb8 | 668 | * @warning The maximal distance depends on the scaling |
mapellil | 35:407b0b127eb8 | 669 | * |
mapellil | 35:407b0b127eb8 | 670 | * @return The maximal range limit for actual mode and scaling |
mapellil | 35:407b0b127eb8 | 671 | */ |
gallonm | 16:0d4776564733 | 672 | uint16_t GetUpperLimit() |
gallonm | 16:0d4776564733 | 673 | { |
gallonm | 16:0d4776564733 | 674 | return VL6180x_GetUpperLimit(Device); |
gallonm | 16:0d4776564733 | 675 | } |
mapellil | 35:407b0b127eb8 | 676 | |
mapellil | 35:407b0b127eb8 | 677 | /** |
mapellil | 35:407b0b127eb8 | 678 | * @brief Apply low and high ranging thresholds that are considered only in continuous mode |
mapellil | 35:407b0b127eb8 | 679 | * |
mapellil | 35:407b0b127eb8 | 680 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 681 | * This function programs low and high ranging thresholds that are considered in continuous mode : |
mapellil | 35:407b0b127eb8 | 682 | * interrupt will be raised only when an object is detected at a distance inside this [low:high] range. |
mapellil | 35:407b0b127eb8 | 683 | * The function takes care of applying current scaling factor if any.\n |
mapellil | 35:407b0b127eb8 | 684 | * To be safe, in continuous operation, thresholds must be changed under "group parameter hold" cover. |
mapellil | 35:407b0b127eb8 | 685 | * Group hold can be activated/deactivated directly in the function or externally (then set 0) |
mapellil | 35:407b0b127eb8 | 686 | * using /a VL6180x_SetGroupParamHold() function. |
mapellil | 35:407b0b127eb8 | 687 | * |
mapellil | 35:407b0b127eb8 | 688 | * @param low Low threshold in mm |
mapellil | 35:407b0b127eb8 | 689 | * @param high High threshold in mm |
mapellil | 35:407b0b127eb8 | 690 | * @param SafeHold Use of group parameters hold to surround threshold programming. |
mapellil | 35:407b0b127eb8 | 691 | * @return 0 On success |
mapellil | 35:407b0b127eb8 | 692 | */ |
gallonm | 16:0d4776564733 | 693 | int RangeSetThresholds(uint16_t low, uint16_t high, int SafeHold) |
gallonm | 16:0d4776564733 | 694 | { |
gallonm | 16:0d4776564733 | 695 | return VL6180x_RangeSetThresholds(Device, low, high, SafeHold); |
gallonm | 16:0d4776564733 | 696 | } |
gallonm | 12:71d589e6fd2c | 697 | |
mapellil | 35:407b0b127eb8 | 698 | /** |
mapellil | 35:407b0b127eb8 | 699 | * @brief Get scaled high and low threshold from device |
mapellil | 35:407b0b127eb8 | 700 | * |
mapellil | 35:407b0b127eb8 | 701 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 702 | * Due to scaling factor, the returned value may be different from what has been programmed first (precision lost). |
mapellil | 35:407b0b127eb8 | 703 | * For instance VL6180x_RangeSetThresholds(dev,11,22) with scale 3 |
mapellil | 35:407b0b127eb8 | 704 | * will read back 9 ((11/3)x3) and 21 ((22/3)x3). |
mapellil | 35:407b0b127eb8 | 705 | * |
mapellil | 35:407b0b127eb8 | 706 | * @param low scaled low Threshold ptr can be NULL if not needed |
mapellil | 35:407b0b127eb8 | 707 | * @param high scaled High Threshold ptr can be NULL if not needed |
mapellil | 35:407b0b127eb8 | 708 | * @return 0 on success, return value is undefined if both low and high are NULL |
mapellil | 35:407b0b127eb8 | 709 | * @warning return value is undefined if both low and high are NULL |
mapellil | 35:407b0b127eb8 | 710 | */ |
gallonm | 16:0d4776564733 | 711 | int RangeGetThresholds(uint16_t *low, uint16_t *high) |
gallonm | 16:0d4776564733 | 712 | { |
gallonm | 16:0d4776564733 | 713 | return VL6180x_RangeGetThresholds(Device, low, high); |
gallonm | 16:0d4776564733 | 714 | } |
mapellil | 35:407b0b127eb8 | 715 | |
mapellil | 35:407b0b127eb8 | 716 | /** |
mapellil | 35:407b0b127eb8 | 717 | * @brief Set ranging raw thresholds (scaling not considered so not recommended to use it) |
mapellil | 35:407b0b127eb8 | 718 | * |
mapellil | 35:407b0b127eb8 | 719 | * @param low raw low threshold set to raw register |
mapellil | 35:407b0b127eb8 | 720 | * @param high raw high threshold set to raw register |
mapellil | 35:407b0b127eb8 | 721 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 722 | */ |
gallonm | 16:0d4776564733 | 723 | int RangeSetRawThresholds(uint8_t low, uint8_t high) |
gallonm | 16:0d4776564733 | 724 | { |
gallonm | 16:0d4776564733 | 725 | return VL6180x_RangeSetRawThresholds(Device, low, high); |
gallonm | 16:0d4776564733 | 726 | } |
mapellil | 35:407b0b127eb8 | 727 | |
mapellil | 35:407b0b127eb8 | 728 | /** |
mapellil | 35:407b0b127eb8 | 729 | * @brief Set Early Convergence Estimate ratio |
mapellil | 35:407b0b127eb8 | 730 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 731 | * For more information on ECE check datasheet |
mapellil | 35:407b0b127eb8 | 732 | * @warning May return a calibration warning in some use cases |
mapellil | 35:407b0b127eb8 | 733 | * |
mapellil | 35:407b0b127eb8 | 734 | * @param FactorM ECE factor M in M/D |
mapellil | 35:407b0b127eb8 | 735 | * @param FactorD ECE factor D in M/D |
mapellil | 35:407b0b127eb8 | 736 | * @return 0 on success. <0 on error. >0 on warning |
mapellil | 35:407b0b127eb8 | 737 | */ |
gallonm | 16:0d4776564733 | 738 | int RangeSetEceFactor(uint16_t FactorM, uint16_t FactorD) |
gallonm | 16:0d4776564733 | 739 | { |
gallonm | 16:0d4776564733 | 740 | return VL6180x_RangeSetEceFactor(Device, FactorM, FactorD); |
gallonm | 16:0d4776564733 | 741 | } |
mapellil | 35:407b0b127eb8 | 742 | |
mapellil | 35:407b0b127eb8 | 743 | /** |
mapellil | 35:407b0b127eb8 | 744 | * @brief Set Early Convergence Estimate state (See #SYSRANGE_RANGE_CHECK_ENABLES register) |
mapellil | 35:407b0b127eb8 | 745 | * @param enable State to be set 0=disabled, otherwise enabled |
mapellil | 35:407b0b127eb8 | 746 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 747 | */ |
gallonm | 16:0d4776564733 | 748 | int RangeSetEceState(int enable) |
gallonm | 16:0d4776564733 | 749 | { |
gallonm | 16:0d4776564733 | 750 | return VL6180x_RangeSetEceState(Device, enable); |
gallonm | 16:0d4776564733 | 751 | } |
mapellil | 35:407b0b127eb8 | 752 | |
mapellil | 35:407b0b127eb8 | 753 | /** |
mapellil | 35:407b0b127eb8 | 754 | * @brief Set activation state of the wrap around filter |
mapellil | 35:407b0b127eb8 | 755 | * @param state New activation state (0=off, otherwise on) |
mapellil | 35:407b0b127eb8 | 756 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 757 | */ |
gallonm | 16:0d4776564733 | 758 | int FilterSetState(int state) |
gallonm | 16:0d4776564733 | 759 | { |
gallonm | 16:0d4776564733 | 760 | return VL6180x_FilterSetState(Device, state); |
gallonm | 16:0d4776564733 | 761 | } |
mapellil | 35:407b0b127eb8 | 762 | |
mapellil | 35:407b0b127eb8 | 763 | /** |
mapellil | 35:407b0b127eb8 | 764 | * Get activation state of the wrap around filter |
mapellil | 35:407b0b127eb8 | 765 | * @return Filter enabled or not, when filter is not supported it always returns 0S |
mapellil | 35:407b0b127eb8 | 766 | */ |
gallonm | 16:0d4776564733 | 767 | int FilterGetState() |
gallonm | 16:0d4776564733 | 768 | { |
gallonm | 16:0d4776564733 | 769 | return VL6180x_FilterGetState(Device); |
gallonm | 16:0d4776564733 | 770 | } |
mapellil | 35:407b0b127eb8 | 771 | |
mapellil | 35:407b0b127eb8 | 772 | /** |
mapellil | 35:407b0b127eb8 | 773 | * @brief Set activation state of DMax computation |
mapellil | 35:407b0b127eb8 | 774 | * @param state New activation state (0=off, otherwise on) |
mapellil | 35:407b0b127eb8 | 775 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 776 | */ |
gallonm | 16:0d4776564733 | 777 | int DMaxSetState(int state) |
gallonm | 16:0d4776564733 | 778 | { |
gallonm | 16:0d4776564733 | 779 | return VL6180x_DMaxSetState(Device, state); |
gallonm | 16:0d4776564733 | 780 | } |
mapellil | 35:407b0b127eb8 | 781 | |
mapellil | 35:407b0b127eb8 | 782 | /** |
mapellil | 35:407b0b127eb8 | 783 | * Get activation state of DMax computation |
mapellil | 35:407b0b127eb8 | 784 | * @return Filter enabled or not, when filter is not supported it always returns 0S |
mapellil | 35:407b0b127eb8 | 785 | */ |
gallonm | 16:0d4776564733 | 786 | int DMaxGetState() |
gallonm | 16:0d4776564733 | 787 | { |
gallonm | 16:0d4776564733 | 788 | return VL6180x_DMaxGetState(Device); |
gallonm | 16:0d4776564733 | 789 | } |
mapellil | 35:407b0b127eb8 | 790 | |
mapellil | 35:407b0b127eb8 | 791 | /** |
mapellil | 35:407b0b127eb8 | 792 | * @brief Set ranging mode and start/stop measure (use high level functions instead : @a VL6180x_RangeStartSingleShot() or @a VL6180x_RangeStartContinuousMode()) |
mapellil | 35:407b0b127eb8 | 793 | * |
mapellil | 35:407b0b127eb8 | 794 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 795 | * When used outside scope of known polling single shot stopped state, \n |
mapellil | 35:407b0b127eb8 | 796 | * user must ensure the device state is "idle" before to issue a new command. |
mapellil | 35:407b0b127eb8 | 797 | * |
mapellil | 35:407b0b127eb8 | 798 | * @param mode A combination of working mode (#MODE_SINGLESHOT or #MODE_CONTINUOUS) and start/stop condition (#MODE_START_STOP) \n |
mapellil | 35:407b0b127eb8 | 799 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 800 | */ |
gallonm | 16:0d4776564733 | 801 | int RangeSetSystemMode(uint8_t mode) |
gallonm | 16:0d4776564733 | 802 | { |
gallonm | 16:0d4776564733 | 803 | return VL6180x_RangeSetSystemMode(Device, mode); |
gallonm | 16:0d4776564733 | 804 | } |
mapellil | 35:407b0b127eb8 | 805 | |
mapellil | 35:407b0b127eb8 | 806 | /** @} */ |
mapellil | 35:407b0b127eb8 | 807 | |
mapellil | 35:407b0b127eb8 | 808 | /** @defgroup api_ll_range_calibration Ranging calibration functions |
mapellil | 35:407b0b127eb8 | 809 | * @brief Ranging calibration functions |
mapellil | 35:407b0b127eb8 | 810 | * @ingroup api_ll |
mapellil | 35:407b0b127eb8 | 811 | * @{ |
mapellil | 35:407b0b127eb8 | 812 | */ |
mapellil | 35:407b0b127eb8 | 813 | /** |
mapellil | 35:407b0b127eb8 | 814 | * @brief Get part to part calibration offset |
mapellil | 35:407b0b127eb8 | 815 | * |
mapellil | 35:407b0b127eb8 | 816 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 817 | * Should only be used after a successful call to @a VL6180x_InitData to backup device nvm value |
mapellil | 35:407b0b127eb8 | 818 | * |
mapellil | 35:407b0b127eb8 | 819 | * @return part to part calibration offset from device |
mapellil | 35:407b0b127eb8 | 820 | */ |
gallonm | 16:0d4776564733 | 821 | int8_t GetOffsetCalibrationData() |
gallonm | 16:0d4776564733 | 822 | { |
gallonm | 16:0d4776564733 | 823 | return VL6180x_GetOffsetCalibrationData(Device); |
gallonm | 16:0d4776564733 | 824 | } |
mapellil | 35:407b0b127eb8 | 825 | |
mapellil | 35:407b0b127eb8 | 826 | /** |
mapellil | 35:407b0b127eb8 | 827 | * Set or over-write part to part calibration offset |
mapellil | 35:407b0b127eb8 | 828 | * \sa VL6180x_InitData(), VL6180x_GetOffsetCalibrationData() |
mapellil | 35:407b0b127eb8 | 829 | * @param offset Offset |
mapellil | 35:407b0b127eb8 | 830 | */ |
gallonm | 16:0d4776564733 | 831 | void SetOffsetCalibrationData(int8_t offset) |
gallonm | 16:0d4776564733 | 832 | { |
gallonm | 16:0d4776564733 | 833 | return VL6180x_SetOffsetCalibrationData(Device, offset); |
gallonm | 16:0d4776564733 | 834 | } |
mapellil | 35:407b0b127eb8 | 835 | |
mapellil | 35:407b0b127eb8 | 836 | /** |
mapellil | 35:407b0b127eb8 | 837 | * @brief Set Cross talk compensation rate |
mapellil | 35:407b0b127eb8 | 838 | * |
mapellil | 35:407b0b127eb8 | 839 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 840 | * It programs register @a #SYSRANGE_CROSSTALK_COMPENSATION_RATE |
mapellil | 35:407b0b127eb8 | 841 | * |
mapellil | 35:407b0b127eb8 | 842 | * @param Rate Compensation rate (9.7 fix point) see datasheet for details |
mapellil | 35:407b0b127eb8 | 843 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 844 | */ |
gallonm | 16:0d4776564733 | 845 | int SetXTalkCompensationRate(FixPoint97_t Rate) |
gallonm | 16:0d4776564733 | 846 | { |
gallonm | 16:0d4776564733 | 847 | return VL6180x_SetXTalkCompensationRate(Device, Rate); |
gallonm | 16:0d4776564733 | 848 | } |
mapellil | 35:407b0b127eb8 | 849 | /** @} */ |
mapellil | 35:407b0b127eb8 | 850 | |
mapellil | 35:407b0b127eb8 | 851 | /** @defgroup api_ll_als ALS functions |
mapellil | 35:407b0b127eb8 | 852 | * @brief ALS functions |
mapellil | 35:407b0b127eb8 | 853 | * @ingroup api_ll |
mapellil | 35:407b0b127eb8 | 854 | * @{ |
mapellil | 35:407b0b127eb8 | 855 | */ |
mapellil | 35:407b0b127eb8 | 856 | |
mapellil | 35:407b0b127eb8 | 857 | /** |
mapellil | 35:407b0b127eb8 | 858 | * @brief Wait for device to be ready for new als operation or max pollign loop (time out) |
mapellil | 35:407b0b127eb8 | 859 | * @param MaxLoop Max Number of i2c polling loop see @a #msec_2_i2cloop |
mapellil | 35:407b0b127eb8 | 860 | * @return 0 on success. <0 when @a VL6180x_ErrCode_t::TIME_OUT if timed out |
mapellil | 35:407b0b127eb8 | 861 | */ |
gallonm | 16:0d4776564733 | 862 | int AlsWaitDeviceReady(int MaxLoop) |
gallonm | 16:0d4776564733 | 863 | { |
gallonm | 16:0d4776564733 | 864 | return VL6180x_AlsWaitDeviceReady(Device, MaxLoop); |
gallonm | 16:0d4776564733 | 865 | } |
gallonm | 12:71d589e6fd2c | 866 | |
mapellil | 35:407b0b127eb8 | 867 | /** |
mapellil | 35:407b0b127eb8 | 868 | * @brief Set ALS system mode and start/stop measure |
mapellil | 35:407b0b127eb8 | 869 | * |
mapellil | 35:407b0b127eb8 | 870 | * @warning When used outside after single shot polling, \n |
mapellil | 35:407b0b127eb8 | 871 | * User must ensure the device state is ready before issuing a new command (using @a VL6180x_AlsWaitDeviceReady()). \n |
mapellil | 35:407b0b127eb8 | 872 | * Non respect of this, can cause loss of interrupt or device hanging. |
mapellil | 35:407b0b127eb8 | 873 | * |
mapellil | 35:407b0b127eb8 | 874 | * @param mode A combination of working mode (#MODE_SINGLESHOT or #MODE_CONTINUOUS) and start condition (#MODE_START_STOP) \n |
mapellil | 35:407b0b127eb8 | 875 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 876 | */ |
gallonm | 16:0d4776564733 | 877 | int AlsSetSystemMode(uint8_t mode) |
gallonm | 16:0d4776564733 | 878 | { |
gallonm | 16:0d4776564733 | 879 | return VL6180x_AlsSetSystemMode(Device, mode); |
gallonm | 16:0d4776564733 | 880 | } |
gallonm | 12:71d589e6fd2c | 881 | |
mapellil | 35:407b0b127eb8 | 882 | /** @defgroup api_ll_misc Misc functions |
mapellil | 35:407b0b127eb8 | 883 | * @brief Misc functions |
mapellil | 35:407b0b127eb8 | 884 | * @ingroup api_ll |
mapellil | 35:407b0b127eb8 | 885 | * @{ |
mapellil | 35:407b0b127eb8 | 886 | */ |
mapellil | 35:407b0b127eb8 | 887 | |
mapellil | 35:407b0b127eb8 | 888 | /** |
mapellil | 35:407b0b127eb8 | 889 | * Set Group parameter Hold state |
mapellil | 35:407b0b127eb8 | 890 | * |
mapellil | 35:407b0b127eb8 | 891 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 892 | * Group parameter holds @a #SYSTEM_GROUPED_PARAMETER_HOLD enable safe update (non atomic across multiple measure) by host |
mapellil | 35:407b0b127eb8 | 893 | * \n The critical register group is composed of: \n |
mapellil | 35:407b0b127eb8 | 894 | * #SYSTEM_INTERRUPT_CONFIG_GPIO \n |
mapellil | 35:407b0b127eb8 | 895 | * #SYSRANGE_THRESH_HIGH \n |
mapellil | 35:407b0b127eb8 | 896 | * #SYSRANGE_THRESH_LOW \n |
mapellil | 35:407b0b127eb8 | 897 | * #SYSALS_INTEGRATION_PERIOD \n |
mapellil | 35:407b0b127eb8 | 898 | * #SYSALS_ANALOGUE_GAIN \n |
mapellil | 35:407b0b127eb8 | 899 | * #SYSALS_THRESH_HIGH \n |
mapellil | 35:407b0b127eb8 | 900 | * #SYSALS_THRESH_LOW |
mapellil | 35:407b0b127eb8 | 901 | * |
mapellil | 35:407b0b127eb8 | 902 | * |
mapellil | 35:407b0b127eb8 | 903 | * @param Hold Group parameter Hold state to be set (on/off) |
mapellil | 35:407b0b127eb8 | 904 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 905 | */ |
gallonm | 16:0d4776564733 | 906 | int SetGroupParamHold(int Hold) |
gallonm | 16:0d4776564733 | 907 | { |
gallonm | 16:0d4776564733 | 908 | return VL6180x_SetGroupParamHold(Device, Hold); |
gallonm | 16:0d4776564733 | 909 | } |
mapellil | 35:407b0b127eb8 | 910 | |
mapellil | 35:407b0b127eb8 | 911 | /** |
mapellil | 35:407b0b127eb8 | 912 | * @brief Set new device i2c address |
mapellil | 35:407b0b127eb8 | 913 | * |
mapellil | 35:407b0b127eb8 | 914 | * After completion the device will answer to the new address programmed. |
mapellil | 35:407b0b127eb8 | 915 | * |
mapellil | 35:407b0b127eb8 | 916 | * @sa AN4478: Using multiple VL6180X's in a single design |
mapellil | 35:407b0b127eb8 | 917 | * @param NewAddr The new i2c address (7bit) |
mapellil | 35:407b0b127eb8 | 918 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 919 | */ |
gallonm | 16:0d4776564733 | 920 | int SetI2CAddress(int NewAddr) |
gallonm | 16:0d4776564733 | 921 | { |
gallonm | 16:0d4776564733 | 922 | int status; |
gallonm | 10:4954b09b72d8 | 923 | |
gallonm | 16:0d4776564733 | 924 | status=VL6180x_SetI2CAddress(Device, NewAddr); |
gallonm | 16:0d4776564733 | 925 | if(!status) |
gallonm | 16:0d4776564733 | 926 | Device->I2cAddr=NewAddr; |
gallonm | 16:0d4776564733 | 927 | return status; |
gallonm | 16:0d4776564733 | 928 | } |
mapellil | 35:407b0b127eb8 | 929 | |
mapellil | 35:407b0b127eb8 | 930 | /** |
mapellil | 35:407b0b127eb8 | 931 | * @brief Fully configure gpio 0/1 pin : polarity and functionality |
mapellil | 35:407b0b127eb8 | 932 | * |
mapellil | 35:407b0b127eb8 | 933 | * @param pin gpio pin 0 or 1 |
mapellil | 35:407b0b127eb8 | 934 | * @param IntFunction Pin functionality : either #GPIOx_SELECT_OFF or #GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT (refer to #SYSTEM_MODE_GPIO1 register definition) |
mapellil | 35:407b0b127eb8 | 935 | * @param ActiveHigh Set active high polarity, or active low see @a ::IntrPol_e |
mapellil | 35:407b0b127eb8 | 936 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 937 | */ |
gallonm | 16:0d4776564733 | 938 | int SetupGPIOx(int pin, uint8_t IntFunction, int ActiveHigh) |
gallonm | 16:0d4776564733 | 939 | { |
gallonm | 16:0d4776564733 | 940 | return VL6180x_SetupGPIOx(Device, pin, IntFunction, ActiveHigh); |
gallonm | 16:0d4776564733 | 941 | } |
mapellil | 35:407b0b127eb8 | 942 | |
mapellil | 35:407b0b127eb8 | 943 | /** |
mapellil | 35:407b0b127eb8 | 944 | * @brief Set interrupt pin polarity for the given GPIO |
mapellil | 35:407b0b127eb8 | 945 | * |
mapellil | 35:407b0b127eb8 | 946 | * @param pin Pin 0 or 1 |
mapellil | 35:407b0b127eb8 | 947 | * @param active_high select active high or low polarity using @ref IntrPol_e |
mapellil | 35:407b0b127eb8 | 948 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 949 | */ |
gallonm | 16:0d4776564733 | 950 | int SetGPIOxPolarity(int pin, int active_high) |
gallonm | 16:0d4776564733 | 951 | { |
gallonm | 16:0d4776564733 | 952 | return VL6180x_SetGPIOxPolarity(Device, pin, active_high); |
gallonm | 16:0d4776564733 | 953 | } |
mapellil | 35:407b0b127eb8 | 954 | |
mapellil | 35:407b0b127eb8 | 955 | /** |
mapellil | 35:407b0b127eb8 | 956 | * Select interrupt functionality for the given GPIO |
mapellil | 35:407b0b127eb8 | 957 | * |
mapellil | 35:407b0b127eb8 | 958 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 959 | * Functionality refer to @a SYSTEM_MODE_GPIO0 |
mapellil | 35:407b0b127eb8 | 960 | * |
mapellil | 35:407b0b127eb8 | 961 | * @param pin Pin to configure 0 or 1 (gpio0 or gpio1)\nNote that gpio0 is chip enable at power up ! |
mapellil | 35:407b0b127eb8 | 962 | * @param functionality Pin functionality : either #GPIOx_SELECT_OFF or #GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT (refer to #SYSTEM_MODE_GPIO1 register definition) |
mapellil | 35:407b0b127eb8 | 963 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 964 | */ |
gallonm | 16:0d4776564733 | 965 | int SetGPIOxFunctionality(int pin, uint8_t functionality) |
gallonm | 16:0d4776564733 | 966 | { |
gallonm | 16:0d4776564733 | 967 | return VL6180x_SetGPIOxFunctionality(Device, pin, functionality); |
gallonm | 16:0d4776564733 | 968 | } |
mapellil | 35:407b0b127eb8 | 969 | |
mapellil | 35:407b0b127eb8 | 970 | /** |
mapellil | 35:407b0b127eb8 | 971 | * #brief Disable and turn to Hi-Z gpio output pin |
mapellil | 35:407b0b127eb8 | 972 | * |
mapellil | 35:407b0b127eb8 | 973 | * @param pin The pin number to disable 0 or 1 |
mapellil | 35:407b0b127eb8 | 974 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 975 | */ |
gallonm | 16:0d4776564733 | 976 | int DisableGPIOxOut(int pin) |
gallonm | 16:0d4776564733 | 977 | { |
gallonm | 16:0d4776564733 | 978 | return VL6180x_DisableGPIOxOut(Device, pin); |
gallonm | 16:0d4776564733 | 979 | } |
mapellil | 35:407b0b127eb8 | 980 | |
mapellil | 35:407b0b127eb8 | 981 | /** @} */ |
mapellil | 35:407b0b127eb8 | 982 | |
mapellil | 35:407b0b127eb8 | 983 | /** @defgroup api_ll_intr Interrupts management functions |
mapellil | 35:407b0b127eb8 | 984 | * @brief Interrupts management functions |
mapellil | 35:407b0b127eb8 | 985 | * @ingroup api_ll |
mapellil | 35:407b0b127eb8 | 986 | * @{ |
mapellil | 35:407b0b127eb8 | 987 | */ |
mapellil | 35:407b0b127eb8 | 988 | |
mapellil | 35:407b0b127eb8 | 989 | /** |
mapellil | 35:407b0b127eb8 | 990 | * @brief Get all interrupts cause |
mapellil | 35:407b0b127eb8 | 991 | * |
mapellil | 35:407b0b127eb8 | 992 | * @param status Ptr to interrupt status. You can use @a IntrStatus_t::val |
mapellil | 35:407b0b127eb8 | 993 | * @return 0 on success |
mapellil | 35:407b0b127eb8 | 994 | */ |
gallonm | 16:0d4776564733 | 995 | int GetInterruptStatus(uint8_t *status) |
gallonm | 16:0d4776564733 | 996 | { |
gallonm | 16:0d4776564733 | 997 | return VL6180x_GetInterruptStatus(Device, status); |
gallonm | 16:0d4776564733 | 998 | } |
mapellil | 35:407b0b127eb8 | 999 | |
mapellil | 35:407b0b127eb8 | 1000 | /** |
mapellil | 35:407b0b127eb8 | 1001 | * @brief Clear given system interrupt condition |
mapellil | 35:407b0b127eb8 | 1002 | * |
mapellil | 35:407b0b127eb8 | 1003 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 1004 | * Clear given interrupt cause by writing into register #SYSTEM_INTERRUPT_CLEAR register. |
mapellil | 35:407b0b127eb8 | 1005 | * @param dev The device |
mapellil | 35:407b0b127eb8 | 1006 | * @param IntClear Which interrupt source to clear. Use any combinations of #INTERRUPT_CLEAR_RANGING , #INTERRUPT_CLEAR_ALS , #INTERRUPT_CLEAR_ERROR. |
mapellil | 35:407b0b127eb8 | 1007 | * @return 0 On success |
mapellil | 35:407b0b127eb8 | 1008 | */ |
gallonm | 16:0d4776564733 | 1009 | int ClearInterrupt(uint8_t IntClear) |
gallonm | 16:0d4776564733 | 1010 | { |
gallonm | 16:0d4776564733 | 1011 | return VL6180x_ClearInterrupt(Device, IntClear ); |
gallonm | 16:0d4776564733 | 1012 | } |
mapellil | 35:407b0b127eb8 | 1013 | |
mapellil | 35:407b0b127eb8 | 1014 | /** |
mapellil | 35:407b0b127eb8 | 1015 | * @brief Clear error interrupt |
mapellil | 35:407b0b127eb8 | 1016 | * |
mapellil | 35:407b0b127eb8 | 1017 | * @param dev The device |
mapellil | 35:407b0b127eb8 | 1018 | * @return 0 On success |
mapellil | 35:407b0b127eb8 | 1019 | */ |
mapellil | 35:407b0b127eb8 | 1020 | #define VL6180x_ClearErrorInterrupt(dev) VL6180x_ClearInterrupt(dev, INTERRUPT_CLEAR_ERROR) |
mapellil | 35:407b0b127eb8 | 1021 | |
mapellil | 35:407b0b127eb8 | 1022 | /** |
mapellil | 35:407b0b127eb8 | 1023 | * @brief Clear All interrupt causes (als+range+error) |
mapellil | 35:407b0b127eb8 | 1024 | * |
mapellil | 35:407b0b127eb8 | 1025 | * @param dev The device |
mapellil | 35:407b0b127eb8 | 1026 | * @return 0 On success |
mapellil | 35:407b0b127eb8 | 1027 | */ |
mapellil | 35:407b0b127eb8 | 1028 | #define VL6180x_ClearAllInterrupt(dev) VL6180x_ClearInterrupt(dev, INTERRUPT_CLEAR_ERROR|INTERRUPT_CLEAR_RANGING|INTERRUPT_CLEAR_ALS) |
mapellil | 35:407b0b127eb8 | 1029 | |
mapellil | 35:407b0b127eb8 | 1030 | /** @} */ |
mapellil | 35:407b0b127eb8 | 1031 | |
mapellil | 35:407b0b127eb8 | 1032 | /** |
mapellil | 35:407b0b127eb8 | 1033 | * @brief Get the ALS (light in Lux) level |
mapellil | 35:407b0b127eb8 | 1034 | * |
mapellil | 35:407b0b127eb8 | 1035 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 1036 | * Get the ALS (light in Lux) level |
mapellil | 35:407b0b127eb8 | 1037 | * @param *piData The pointer to variable to write in the measure in Lux |
mapellil | 35:407b0b127eb8 | 1038 | * @return 0 On success |
mapellil | 35:407b0b127eb8 | 1039 | */ |
mapellil | 38:18abb7f7dcb2 | 1040 | virtual int GetLight(uint32_t *piData) |
gallonm | 16:0d4776564733 | 1041 | { |
gallonm | 16:0d4776564733 | 1042 | return VL6180x_AlsGetLux(Device, piData); |
gallonm | 16:0d4776564733 | 1043 | } |
mapellil | 35:407b0b127eb8 | 1044 | |
mapellil | 35:407b0b127eb8 | 1045 | /** |
mapellil | 35:407b0b127eb8 | 1046 | * @brief Start the ALS (light) measure in continous mode |
mapellil | 35:407b0b127eb8 | 1047 | * |
mapellil | 35:407b0b127eb8 | 1048 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 1049 | * Start the ALS (light) measure in continous mode |
mapellil | 35:407b0b127eb8 | 1050 | * @return 0 On success |
mapellil | 35:407b0b127eb8 | 1051 | */ |
gallonm | 16:0d4776564733 | 1052 | int AlsStartContinuousMode() |
gallonm | 16:0d4776564733 | 1053 | { |
gallonm | 16:0d4776564733 | 1054 | return VL6180x_AlsSetSystemMode(Device, MODE_START_STOP|MODE_CONTINUOUS); |
gallonm | 16:0d4776564733 | 1055 | } |
mapellil | 35:407b0b127eb8 | 1056 | |
mapellil | 35:407b0b127eb8 | 1057 | /** |
mapellil | 35:407b0b127eb8 | 1058 | * @brief Start the ALS (light) measure in single shot mode |
mapellil | 35:407b0b127eb8 | 1059 | * |
mapellil | 35:407b0b127eb8 | 1060 | * @par Function Description |
mapellil | 35:407b0b127eb8 | 1061 | * Start the ALS (light) measure in single shot mode |
mapellil | 35:407b0b127eb8 | 1062 | * @return 0 On success |
mapellil | 35:407b0b127eb8 | 1063 | */ |
gallonm | 24:025afc3fe30f | 1064 | int AlsStartSingleShot() |
gallonm | 24:025afc3fe30f | 1065 | { |
gallonm | 24:025afc3fe30f | 1066 | return VL6180x_AlsSetSystemMode(Device, MODE_START_STOP|MODE_SINGLESHOT); |
gallonm | 24:025afc3fe30f | 1067 | } |
gallonm | 12:71d589e6fd2c | 1068 | |
gallonm | 16:0d4776564733 | 1069 | private: |
gallonm | 16:0d4776564733 | 1070 | /* api.h functions */ |
gallonm | 16:0d4776564733 | 1071 | int VL6180x_WaitDeviceBooted(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1072 | int VL6180x_InitData(VL6180xDev_t dev ); |
gallonm | 16:0d4776564733 | 1073 | int VL6180x_SetupGPIO1(VL6180xDev_t dev, uint8_t IntFunction, int ActiveHigh); |
gallonm | 16:0d4776564733 | 1074 | int VL6180x_Prepare(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1075 | int VL6180x_RangeStartContinuousMode(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1076 | int VL6180x_RangeStartSingleShot(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1077 | int VL6180x_RangeSetMaxConvergenceTime(VL6180xDev_t dev, uint8_t MaxConTime_msec); |
gallonm | 16:0d4776564733 | 1078 | int VL6180x_RangePollMeasurement(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData); |
gallonm | 16:0d4776564733 | 1079 | int VL6180x_RangeGetMeasurementIfReady(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData); |
gallonm | 16:0d4776564733 | 1080 | int VL6180x_RangeGetMeasurement(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData); |
gallonm | 16:0d4776564733 | 1081 | int VL6180x_RangeGetResult(VL6180xDev_t dev, int32_t *pRange_mm); |
gallonm | 16:0d4776564733 | 1082 | int VL6180x_RangeConfigInterrupt(VL6180xDev_t dev, uint8_t ConfigGpioInt); |
gallonm | 16:0d4776564733 | 1083 | int VL6180x_RangeGetInterruptStatus(VL6180xDev_t dev, uint8_t *pIntStatus); |
gallonm | 16:0d4776564733 | 1084 | int VL6180x_AlsPollMeasurement(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData); |
gallonm | 16:0d4776564733 | 1085 | int VL6180x_AlsGetMeasurement(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData); |
gallonm | 16:0d4776564733 | 1086 | int VL6180x_AlsConfigInterrupt(VL6180xDev_t dev, uint8_t ConfigGpioInt); |
gallonm | 16:0d4776564733 | 1087 | int VL6180x_AlsSetIntegrationPeriod(VL6180xDev_t dev, uint16_t period_ms); |
gallonm | 16:0d4776564733 | 1088 | int VL6180x_AlsSetInterMeasurementPeriod(VL6180xDev_t dev, uint16_t intermeasurement_period_ms); |
gallonm | 16:0d4776564733 | 1089 | int VL6180x_AlsSetAnalogueGain(VL6180xDev_t dev, uint8_t gain); |
gallonm | 28:7c9031e96c22 | 1090 | int VL6180x_AlsSetThresholds(VL6180xDev_t dev, uint16_t low, uint16_t high); |
gallonm | 16:0d4776564733 | 1091 | int VL6180x_AlsGetInterruptStatus(VL6180xDev_t dev, uint8_t *pIntStatus); |
gallonm | 16:0d4776564733 | 1092 | int VL6180x_StaticInit(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1093 | int VL6180x_RangeWaitDeviceReady(VL6180xDev_t dev, int MaxLoop ); |
gallonm | 16:0d4776564733 | 1094 | int VL6180x_RangeSetInterMeasPeriod(VL6180xDev_t dev, uint32_t InterMeasTime_msec); |
gallonm | 16:0d4776564733 | 1095 | int VL6180x_UpscaleSetScaling(VL6180xDev_t dev, uint8_t scaling); |
gallonm | 16:0d4776564733 | 1096 | int VL6180x_UpscaleGetScaling(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1097 | uint16_t VL6180x_GetUpperLimit(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1098 | int VL6180x_RangeSetThresholds(VL6180xDev_t dev, uint16_t low, uint16_t high, int SafeHold); |
gallonm | 16:0d4776564733 | 1099 | int VL6180x_RangeGetThresholds(VL6180xDev_t dev, uint16_t *low, uint16_t *high); |
gallonm | 16:0d4776564733 | 1100 | int VL6180x_RangeSetRawThresholds(VL6180xDev_t dev, uint8_t low, uint8_t high); |
gallonm | 16:0d4776564733 | 1101 | int VL6180x_RangeSetEceFactor(VL6180xDev_t dev, uint16_t FactorM, uint16_t FactorD); |
gallonm | 16:0d4776564733 | 1102 | int VL6180x_RangeSetEceState(VL6180xDev_t dev, int enable ); |
gallonm | 16:0d4776564733 | 1103 | int VL6180x_FilterSetState(VL6180xDev_t dev, int state); |
gallonm | 16:0d4776564733 | 1104 | int VL6180x_FilterGetState(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1105 | int VL6180x_DMaxSetState(VL6180xDev_t dev, int state); |
gallonm | 16:0d4776564733 | 1106 | int VL6180x_DMaxGetState(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1107 | int VL6180x_RangeSetSystemMode(VL6180xDev_t dev, uint8_t mode); |
gallonm | 16:0d4776564733 | 1108 | int8_t VL6180x_GetOffsetCalibrationData(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1109 | void VL6180x_SetOffsetCalibrationData(VL6180xDev_t dev, int8_t offset); |
gallonm | 16:0d4776564733 | 1110 | int VL6180x_SetXTalkCompensationRate(VL6180xDev_t dev, FixPoint97_t Rate); |
gallonm | 16:0d4776564733 | 1111 | int VL6180x_AlsWaitDeviceReady(VL6180xDev_t dev, int MaxLoop ); |
gallonm | 16:0d4776564733 | 1112 | int VL6180x_AlsSetSystemMode(VL6180xDev_t dev, uint8_t mode); |
gallonm | 16:0d4776564733 | 1113 | int VL6180x_SetGroupParamHold(VL6180xDev_t dev, int Hold); |
gallonm | 16:0d4776564733 | 1114 | int VL6180x_SetI2CAddress(VL6180xDev_t dev, uint8_t NewAddr); |
gallonm | 16:0d4776564733 | 1115 | int VL6180x_SetupGPIOx(VL6180xDev_t dev, int pin, uint8_t IntFunction, int ActiveHigh); |
gallonm | 16:0d4776564733 | 1116 | int VL6180x_SetGPIOxPolarity(VL6180xDev_t dev, int pin, int active_high); |
gallonm | 16:0d4776564733 | 1117 | int VL6180x_SetGPIOxFunctionality(VL6180xDev_t dev, int pin, uint8_t functionality); |
gallonm | 16:0d4776564733 | 1118 | int VL6180x_DisableGPIOxOut(VL6180xDev_t dev, int pin); |
gallonm | 16:0d4776564733 | 1119 | int VL6180x_GetInterruptStatus(VL6180xDev_t dev, uint8_t *status); |
gallonm | 16:0d4776564733 | 1120 | int VL6180x_ClearInterrupt(VL6180xDev_t dev, uint8_t IntClear ); |
gallonm | 12:71d589e6fd2c | 1121 | |
gallonm | 16:0d4776564733 | 1122 | /* Other functions defined in api.c */ |
gallonm | 16:0d4776564733 | 1123 | int VL6180x_RangeStaticInit(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1124 | int VL6180x_UpscaleRegInit(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1125 | int VL6180x_UpscaleStaticInit(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1126 | int VL6180x_AlsGetLux(VL6180xDev_t dev, lux_t *pLux); |
gallonm | 16:0d4776564733 | 1127 | int _UpscaleInitPatch0(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1128 | int VL6180x_RangeGetDeviceReady(VL6180xDev_t dev, int * Ready); |
gallonm | 16:0d4776564733 | 1129 | int VL6180x_RangeSetEarlyConvergenceEestimateThreshold(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1130 | int32_t _GetAveTotalTime(VL6180xDev_t dev); |
gallonm | 16:0d4776564733 | 1131 | 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 | 1132 | int _filter_GetResult(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData); |
gallonm | 16:0d4776564733 | 1133 | int _GetRateResult(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData); |
gallonm | 16:0d4776564733 | 1134 | int _DMax_InitData(VL6180xDev_t dev); |
gallonm | 7:2dc81120c917 | 1135 | |
gallonm | 10:4954b09b72d8 | 1136 | /* Read function of the ID device */ |
mapellil | 38:18abb7f7dcb2 | 1137 | virtual int ReadID(); |
gallonm | 4:a5abf7757947 | 1138 | |
gallonm | 4:a5abf7757947 | 1139 | /* Write and read functions from I2C */ |
gallonm | 4:a5abf7757947 | 1140 | int VL6180x_WrByte(VL6180xDev_t dev, uint16_t index, uint8_t data); |
gallonm | 4:a5abf7757947 | 1141 | int VL6180x_WrWord(VL6180xDev_t dev, uint16_t index, uint16_t data); |
gallonm | 4:a5abf7757947 | 1142 | int VL6180x_WrDWord(VL6180xDev_t dev, uint16_t index, uint32_t data); |
gallonm | 4:a5abf7757947 | 1143 | int VL6180x_RdByte(VL6180xDev_t dev, uint16_t index, uint8_t *data); |
gallonm | 4:a5abf7757947 | 1144 | int VL6180x_RdWord(VL6180xDev_t dev, uint16_t index, uint16_t *data); |
gallonm | 4:a5abf7757947 | 1145 | int VL6180x_RdDWord(VL6180xDev_t dev, uint16_t index, uint32_t *data); |
gallonm | 16:0d4776564733 | 1146 | int VL6180x_UpdateByte(VL6180xDev_t dev, uint16_t index, uint8_t AndData, uint8_t OrData); |
gallonm | 4:a5abf7757947 | 1147 | int VL6180x_I2CWrite(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t *pBuffer, uint16_t NumByteToWrite); |
gallonm | 4:a5abf7757947 | 1148 | int VL6180x_I2CRead(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t *pBuffer, uint16_t NumByteToRead); |
gallonm | 14:0effa0bbf192 | 1149 | |
gallonm | 14:0effa0bbf192 | 1150 | |
gallonm | 16:0d4776564733 | 1151 | int IsPresent() |
gallonm | 16:0d4776564733 | 1152 | { |
gallonm | 16:0d4776564733 | 1153 | int status; |
gallonm | 14:0effa0bbf192 | 1154 | |
gallonm | 16:0d4776564733 | 1155 | status=ReadID(); |
gallonm | 14:0effa0bbf192 | 1156 | if(status) |
gallonm | 27:22c6f69967d9 | 1157 | VL6180x_ErrLog("Failed to read ID device. Device not present!\n\r"); |
gallonm | 16:0d4776564733 | 1158 | return status; |
gallonm | 16:0d4776564733 | 1159 | } |
gallonm | 16:0d4776564733 | 1160 | int StopRangeMeasurement(OperatingMode operating_mode); |
gallonm | 16:0d4776564733 | 1161 | int StopAlsMeasurement(OperatingMode operating_mode); |
gallonm | 16:0d4776564733 | 1162 | int GetRangeMeas(OperatingMode operating_mode, MeasureData_t *Data); |
gallonm | 16:0d4776564733 | 1163 | int GetAlsMeas(OperatingMode operating_mode, MeasureData_t *Data); |
gallonm | 16:0d4776564733 | 1164 | int GetRangeAlsMeas(MeasureData_t *Data); |
gallonm | 16:0d4776564733 | 1165 | int RangeSetLowThreshold(uint16_t threshold); |
gallonm | 16:0d4776564733 | 1166 | int RangeSetHighThreshold(uint16_t threshold); |
gallonm | 16:0d4776564733 | 1167 | int AlsSetLowThreshold(uint16_t threshold); |
gallonm | 16:0d4776564733 | 1168 | int AlsSetHighThreshold(uint16_t threshold); |
gallonm | 16:0d4776564733 | 1169 | int GetRangeError(MeasureData_t *Data, VL6180x_RangeData_t RangeData); |
gallonm | 16:0d4776564733 | 1170 | int GetAlsError(MeasureData_t *Data, VL6180x_AlsData_t AlsData); |
gallonm | 24:025afc3fe30f | 1171 | int RangeMeasPollSingleShot(); |
gallonm | 24:025afc3fe30f | 1172 | int AlsMeasPollSingleShot(); |
gallonm | 16:0d4776564733 | 1173 | int RangeMeasPollContinuousMode(); |
gallonm | 16:0d4776564733 | 1174 | int AlsMeasPollContinuousMode(); |
gallonm | 16:0d4776564733 | 1175 | int AlsGetMeasurementIfReady(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData); |
gallonm | 16:0d4776564733 | 1176 | int RangeMeasIntContinuousMode(void (*fptr)(void)); |
gallonm | 16:0d4776564733 | 1177 | int AlsMeasIntContinuousMode(void (*fptr)(void)); |
gallonm | 16:0d4776564733 | 1178 | int InterleavedMode(void (*fptr)(void)); |
gallonm | 16:0d4776564733 | 1179 | int StartInterleavedMode(); |
gallonm | 26:db0cdc5ecc0a | 1180 | int AlsGetThresholds(VL6180xDev_t dev, lux_t *low, lux_t *high); |
licio.mapelli@st.com | 9:9cbc1736f148 | 1181 | |
gallonm | 10:4954b09b72d8 | 1182 | |
gallonm | 1:1de1ea2994d9 | 1183 | /* IO Device */ |
gallonm | 7:2dc81120c917 | 1184 | DevI2C &dev_i2c; |
gallonm | 10:4954b09b72d8 | 1185 | /* Digital out pin */ |
gallonm | 7:2dc81120c917 | 1186 | DigitalOut *gpio0; |
gallonm | 10:4954b09b72d8 | 1187 | /* GPIO expander */ |
gallonm | 10:4954b09b72d8 | 1188 | STMPE1600DigiOut *expgpio0; |
gallonm | 12:71d589e6fd2c | 1189 | /* Measure detection IRQ */ |
mapellil | 32:ef97c377d27b | 1190 | InterruptIn gpio1Int; |
mapellil | 41:2e00362bdb8e | 1191 | PinName gpio1Pin; |
gallonm | 10:4954b09b72d8 | 1192 | /* Device data */ |
gallonm | 10:4954b09b72d8 | 1193 | MyVL6180Dev_t MyDevice; |
gallonm | 10:4954b09b72d8 | 1194 | VL6180xDev_t Device; |
gallonm | 1:1de1ea2994d9 | 1195 | }; |
gallonm | 1:1de1ea2994d9 | 1196 | |
gallonm | 4:a5abf7757947 | 1197 | #endif // __VL6180X_CLASS_H |