INSAT Mini Project
Dependencies: ST_INTERFACES X_NUCLEO_COMMON
Fork of X_NUCLEO_6180XA1 by
Components/VL6180X/vl6180x_api.h@7:2dc81120c917, 2015-09-25 (annotated)
- Committer:
- gallonm
- Date:
- Fri Sep 25 12:12:51 2015 +0200
- Revision:
- 7:2dc81120c917
- Parent:
- 1:1de1ea2994d9
- Child:
- 8:f943a1fca15f
update files
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gallonm | 1:1de1ea2994d9 | 1 | /******************************************************************************* |
gallonm | 1:1de1ea2994d9 | 2 | Copyright © 2014, STMicroelectronics International N.V. |
gallonm | 1:1de1ea2994d9 | 3 | All rights reserved. |
gallonm | 1:1de1ea2994d9 | 4 | |
gallonm | 1:1de1ea2994d9 | 5 | Redistribution and use in source and binary forms, with or without |
gallonm | 1:1de1ea2994d9 | 6 | modification, are permitted provided that the following conditions are met: |
gallonm | 1:1de1ea2994d9 | 7 | * Redistributions of source code must retain the above copyright |
gallonm | 1:1de1ea2994d9 | 8 | notice, this list of conditions and the following disclaimer. |
gallonm | 1:1de1ea2994d9 | 9 | * Redistributions in binary form must reproduce the above copyright |
gallonm | 1:1de1ea2994d9 | 10 | notice, this list of conditions and the following disclaimer in the |
gallonm | 1:1de1ea2994d9 | 11 | documentation and/or other materials provided with the distribution. |
gallonm | 1:1de1ea2994d9 | 12 | * Neither the name of STMicroelectronics nor the |
gallonm | 1:1de1ea2994d9 | 13 | names of its contributors may be used to endorse or promote products |
gallonm | 1:1de1ea2994d9 | 14 | derived from this software without specific prior written permission. |
gallonm | 1:1de1ea2994d9 | 15 | |
gallonm | 1:1de1ea2994d9 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
gallonm | 1:1de1ea2994d9 | 17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
gallonm | 1:1de1ea2994d9 | 18 | WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND |
gallonm | 1:1de1ea2994d9 | 19 | NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. |
gallonm | 1:1de1ea2994d9 | 20 | IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY |
gallonm | 1:1de1ea2994d9 | 21 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
gallonm | 1:1de1ea2994d9 | 22 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
gallonm | 1:1de1ea2994d9 | 23 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
gallonm | 1:1de1ea2994d9 | 24 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
gallonm | 1:1de1ea2994d9 | 25 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
gallonm | 1:1de1ea2994d9 | 26 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
gallonm | 1:1de1ea2994d9 | 27 | ********************************************************************************/ |
gallonm | 1:1de1ea2994d9 | 28 | /* |
gallonm | 1:1de1ea2994d9 | 29 | * @file VL6180x_api.h |
gallonm | 1:1de1ea2994d9 | 30 | * $Date: 2015-03-24 14:15:14 +0100 (Tue, 24 Mar 2015) $ |
gallonm | 1:1de1ea2994d9 | 31 | * $Revision: 2213 $ |
gallonm | 1:1de1ea2994d9 | 32 | */ |
gallonm | 1:1de1ea2994d9 | 33 | |
gallonm | 1:1de1ea2994d9 | 34 | |
gallonm | 1:1de1ea2994d9 | 35 | |
gallonm | 1:1de1ea2994d9 | 36 | #ifndef VL6180x_API_H_ |
gallonm | 1:1de1ea2994d9 | 37 | #define VL6180x_API_H_ |
gallonm | 1:1de1ea2994d9 | 38 | |
gallonm | 1:1de1ea2994d9 | 39 | #include "vl6180x_def.h" |
gallonm | 1:1de1ea2994d9 | 40 | #include "vl6180x_platform.h" |
gallonm | 1:1de1ea2994d9 | 41 | |
gallonm | 1:1de1ea2994d9 | 42 | #ifdef __cplusplus |
gallonm | 1:1de1ea2994d9 | 43 | extern "C" { |
gallonm | 1:1de1ea2994d9 | 44 | #endif |
gallonm | 1:1de1ea2994d9 | 45 | |
gallonm | 1:1de1ea2994d9 | 46 | /** @defgroup api_ll API Low Level Functions |
gallonm | 1:1de1ea2994d9 | 47 | * @brief API Low level functions |
gallonm | 1:1de1ea2994d9 | 48 | */ |
gallonm | 1:1de1ea2994d9 | 49 | |
gallonm | 1:1de1ea2994d9 | 50 | /** @defgroup api_hl API High Level Functions |
gallonm | 1:1de1ea2994d9 | 51 | * @brief API High level functions |
gallonm | 1:1de1ea2994d9 | 52 | */ |
gallonm | 1:1de1ea2994d9 | 53 | |
gallonm | 1:1de1ea2994d9 | 54 | |
gallonm | 1:1de1ea2994d9 | 55 | /* |
gallonm | 1:1de1ea2994d9 | 56 | * Check and set default platform dependent configuration |
gallonm | 1:1de1ea2994d9 | 57 | */ |
gallonm | 1:1de1ea2994d9 | 58 | #ifndef VL6180x_SINGLE_DEVICE_DRIVER |
gallonm | 1:1de1ea2994d9 | 59 | #error "VL6180x_SINGLE_DEVICE_DRIVER not defined" |
gallonm | 1:1de1ea2994d9 | 60 | /* TODO you may remove or comment these #error but it is best you update your vl6180x_platform.h file to define it*/ |
gallonm | 1:1de1ea2994d9 | 61 | #endif |
gallonm | 1:1de1ea2994d9 | 62 | |
gallonm | 1:1de1ea2994d9 | 63 | |
gallonm | 1:1de1ea2994d9 | 64 | #ifndef VL6180x_RANGE_STATUS_ERRSTRING |
gallonm | 1:1de1ea2994d9 | 65 | #warning "VL6180x_RANGE_STATUS_ERRSTRING not defined ?" |
gallonm | 1:1de1ea2994d9 | 66 | /* TODO you may remove or comment these #warning and keep the default below to keep compatibility |
gallonm | 1:1de1ea2994d9 | 67 | or update your vl6180x_platform.h file */ |
gallonm | 1:1de1ea2994d9 | 68 | /** |
gallonm | 1:1de1ea2994d9 | 69 | * force VL6180x_RANGE_STATUS_ERRSTRING to not supported when not part of any cfg file |
gallonm | 1:1de1ea2994d9 | 70 | */ |
gallonm | 1:1de1ea2994d9 | 71 | #define VL6180x_RANGE_STATUS_ERRSTRING 0 |
gallonm | 1:1de1ea2994d9 | 72 | #endif |
gallonm | 1:1de1ea2994d9 | 73 | |
gallonm | 1:1de1ea2994d9 | 74 | #ifndef VL6180X_SAFE_POLLING_ENTER |
gallonm | 1:1de1ea2994d9 | 75 | #warning "VL6180X_SAFE_POLLING_ENTER not defined, likely old vl6180x_cfg.h file ?" |
gallonm | 1:1de1ea2994d9 | 76 | /* TODO you may remove or comment these #warning and keep the default below to keep compatibility |
gallonm | 1:1de1ea2994d9 | 77 | or update your vl6180x_platform.h file */ |
gallonm | 1:1de1ea2994d9 | 78 | /** |
gallonm | 1:1de1ea2994d9 | 79 | * force VL6180X_SAFE_POLLING_ENTER to off when not in cfg file |
gallonm | 1:1de1ea2994d9 | 80 | */ |
gallonm | 1:1de1ea2994d9 | 81 | #define VL6180X_SAFE_POLLING_ENTER 0 /* off by default as in api 2.0 */ |
gallonm | 1:1de1ea2994d9 | 82 | #endif |
gallonm | 1:1de1ea2994d9 | 83 | |
gallonm | 1:1de1ea2994d9 | 84 | #ifndef VL6180X_LOG_ENABLE |
gallonm | 1:1de1ea2994d9 | 85 | /** |
gallonm | 1:1de1ea2994d9 | 86 | * Force VL6180X_LOG_ENABLE to none as default |
gallonm | 1:1de1ea2994d9 | 87 | */ |
gallonm | 1:1de1ea2994d9 | 88 | #define VL6180X_LOG_ENABLE 0 |
gallonm | 1:1de1ea2994d9 | 89 | #endif |
gallonm | 1:1de1ea2994d9 | 90 | |
gallonm | 1:1de1ea2994d9 | 91 | #if VL6180x_RANGE_STATUS_ERRSTRING |
gallonm | 1:1de1ea2994d9 | 92 | /**@def VL6180x_HAVE_RANGE_STATUS_ERRSTRING |
gallonm | 1:1de1ea2994d9 | 93 | * @brief is defined when @a #VL6180x_RANGE_STATUS_ERRSTRING is enable |
gallonm | 1:1de1ea2994d9 | 94 | */ |
gallonm | 1:1de1ea2994d9 | 95 | #define VL6180x_HAVE_RANGE_STATUS_ERRSTRING |
gallonm | 1:1de1ea2994d9 | 96 | #endif |
gallonm | 1:1de1ea2994d9 | 97 | |
gallonm | 1:1de1ea2994d9 | 98 | |
gallonm | 1:1de1ea2994d9 | 99 | /** @brief Get API version as "hex integer" 0xMMnnss |
gallonm | 1:1de1ea2994d9 | 100 | */ |
gallonm | 1:1de1ea2994d9 | 101 | #define VL6180x_ApiRevInt ((VL6180x_API_REV_MAJOR<<24)+(VL6180x_API_REV_MINOR<<16)+VL6180x_API_REV_SUB) |
gallonm | 1:1de1ea2994d9 | 102 | |
gallonm | 1:1de1ea2994d9 | 103 | /** Get API version as string for exe "2.1.12" " |
gallonm | 1:1de1ea2994d9 | 104 | */ |
gallonm | 1:1de1ea2994d9 | 105 | #define VL6180x_ApiRevStr VL6180X_STR(VL6180x_API_REV_MAJOR) "." VL6180X_STR(VL6180x_API_REV_MINOR) "." VL6180X_STR(VL6180x_API_REV_SUB) |
gallonm | 1:1de1ea2994d9 | 106 | |
gallonm | 1:1de1ea2994d9 | 107 | /** @defgroup api_init Init functions |
gallonm | 1:1de1ea2994d9 | 108 | * @brief API init functions |
gallonm | 1:1de1ea2994d9 | 109 | * @ingroup api_hl |
gallonm | 1:1de1ea2994d9 | 110 | * @{ |
gallonm | 1:1de1ea2994d9 | 111 | */ |
gallonm | 1:1de1ea2994d9 | 112 | /** |
gallonm | 1:1de1ea2994d9 | 113 | * @brief Wait for device booted after chip enable (hardware standby) |
gallonm | 1:1de1ea2994d9 | 114 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 115 | * After Chip enable Application you can also simply wait at least 1ms to ensure device is ready |
gallonm | 1:1de1ea2994d9 | 116 | * @warning After device chip enable (gpio0) de-asserted user must wait gpio1 to get asserted (hardware standby). |
gallonm | 1:1de1ea2994d9 | 117 | * or wait at least 400usec prior to do any low level access or api call . |
gallonm | 1:1de1ea2994d9 | 118 | * |
gallonm | 1:1de1ea2994d9 | 119 | * This function implements polling for standby but you must ensure 400usec from chip enable passed\n |
gallonm | 1:1de1ea2994d9 | 120 | * @warning if device get prepared @a VL6180x_Prepare() re-using these function can hold indefinitely\n |
gallonm | 1:1de1ea2994d9 | 121 | * |
gallonm | 1:1de1ea2994d9 | 122 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 123 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 124 | */ |
gallonm | 1:1de1ea2994d9 | 125 | int VL6180x_WaitDeviceBooted(VL6180xDev_t dev); |
gallonm | 1:1de1ea2994d9 | 126 | |
gallonm | 1:1de1ea2994d9 | 127 | /** |
gallonm | 1:1de1ea2994d9 | 128 | * |
gallonm | 1:1de1ea2994d9 | 129 | * @brief One time device initialization |
gallonm | 1:1de1ea2994d9 | 130 | * |
gallonm | 1:1de1ea2994d9 | 131 | * To be called once and only once after device is brought out of reset (Chip enable) and booted see @a VL6180x_WaitDeviceBooted() |
gallonm | 1:1de1ea2994d9 | 132 | * |
gallonm | 1:1de1ea2994d9 | 133 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 134 | * When not used after a fresh device "power up" or reset, it may return @a #CALIBRATION_WARNING |
gallonm | 1:1de1ea2994d9 | 135 | * meaning wrong calibration data may have been fetched from device that can result in ranging offset error\n |
gallonm | 1:1de1ea2994d9 | 136 | * If application cannot execute device reset or need to run VL6180x_InitData multiple time |
gallonm | 1:1de1ea2994d9 | 137 | * then it must ensure proper offset calibration saving and restore on its own |
gallonm | 1:1de1ea2994d9 | 138 | * by using @a VL6180x_GetOffsetCalibrationData() on first power up and then @a VL6180x_SetOffsetCalibrationData() all all subsequent init |
gallonm | 1:1de1ea2994d9 | 139 | * |
gallonm | 1:1de1ea2994d9 | 140 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 141 | * @return 0 on success, @a #CALIBRATION_WARNING if failed |
gallonm | 1:1de1ea2994d9 | 142 | */ |
gallonm | 1:1de1ea2994d9 | 143 | int VL6180x_InitData(VL6180xDev_t dev ); |
gallonm | 1:1de1ea2994d9 | 144 | |
gallonm | 1:1de1ea2994d9 | 145 | /** |
gallonm | 1:1de1ea2994d9 | 146 | * @brief Configure GPIO1 function and set polarity. |
gallonm | 1:1de1ea2994d9 | 147 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 148 | * To be used prior to arm single shot measure or start continuous mode. |
gallonm | 1:1de1ea2994d9 | 149 | * |
gallonm | 1:1de1ea2994d9 | 150 | * The function uses @a VL6180x_SetupGPIOx() for setting gpio 1. |
gallonm | 1:1de1ea2994d9 | 151 | * @warning changing polarity can generate a spurious interrupt on pins. |
gallonm | 1:1de1ea2994d9 | 152 | * It sets an interrupt flags condition that must be cleared to avoid polling hangs. \n |
gallonm | 1:1de1ea2994d9 | 153 | * It is safe to run VL6180x_ClearAllInterrupt() just after. |
gallonm | 1:1de1ea2994d9 | 154 | * |
gallonm | 1:1de1ea2994d9 | 155 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 156 | * @param IntFunction The interrupt functionality to use one of :\n |
gallonm | 1:1de1ea2994d9 | 157 | * @a #GPIOx_SELECT_OFF \n |
gallonm | 1:1de1ea2994d9 | 158 | * @a #GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT |
gallonm | 1:1de1ea2994d9 | 159 | * @param ActiveHigh The interrupt line polarity see ::IntrPol_e |
gallonm | 1:1de1ea2994d9 | 160 | * use @a #INTR_POL_LOW (falling edge) or @a #INTR_POL_HIGH (rising edge) |
gallonm | 1:1de1ea2994d9 | 161 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 162 | */ |
gallonm | 1:1de1ea2994d9 | 163 | int VL6180x_SetupGPIO1(VL6180xDev_t dev, uint8_t IntFunction, int ActiveHigh); |
gallonm | 1:1de1ea2994d9 | 164 | |
gallonm | 1:1de1ea2994d9 | 165 | /** |
gallonm | 1:1de1ea2994d9 | 166 | * @brief Prepare device for operation |
gallonm | 1:1de1ea2994d9 | 167 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 168 | * Does static initialization and reprogram common default settings \n |
gallonm | 1:1de1ea2994d9 | 169 | * Device is prepared for new measure, ready single shot ranging or ALS typical polling operation\n |
gallonm | 1:1de1ea2994d9 | 170 | * After prepare user can : \n |
gallonm | 1:1de1ea2994d9 | 171 | * @li Call other API function to set other settings\n |
gallonm | 1:1de1ea2994d9 | 172 | * @li Configure the interrupt pins, etc... \n |
gallonm | 1:1de1ea2994d9 | 173 | * @li Then start ranging or ALS operations in single shot or continuous mode |
gallonm | 1:1de1ea2994d9 | 174 | * |
gallonm | 1:1de1ea2994d9 | 175 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 176 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 177 | */ |
gallonm | 7:2dc81120c917 | 178 | int VL6180x_Prepare(VL6180xDev_t dev); |
gallonm | 1:1de1ea2994d9 | 179 | |
gallonm | 1:1de1ea2994d9 | 180 | /** @} */ |
gallonm | 1:1de1ea2994d9 | 181 | |
gallonm | 1:1de1ea2994d9 | 182 | |
gallonm | 1:1de1ea2994d9 | 183 | /** @defgroup api_hl_range Ranging functions |
gallonm | 1:1de1ea2994d9 | 184 | * @brief Ranging functions |
gallonm | 1:1de1ea2994d9 | 185 | * @ingroup api_hl |
gallonm | 1:1de1ea2994d9 | 186 | * @{ |
gallonm | 1:1de1ea2994d9 | 187 | */ |
gallonm | 1:1de1ea2994d9 | 188 | |
gallonm | 1:1de1ea2994d9 | 189 | /** |
gallonm | 1:1de1ea2994d9 | 190 | * @brief Start continuous ranging mode |
gallonm | 1:1de1ea2994d9 | 191 | * |
gallonm | 1:1de1ea2994d9 | 192 | * @details End user should ensure device is in idle state and not already running |
gallonm | 1:1de1ea2994d9 | 193 | */ |
gallonm | 1:1de1ea2994d9 | 194 | int VL6180x_RangeStartContinuousMode(VL6180xDev_t dev); |
gallonm | 1:1de1ea2994d9 | 195 | |
gallonm | 1:1de1ea2994d9 | 196 | /** |
gallonm | 1:1de1ea2994d9 | 197 | * @brief Start single shot ranging measure |
gallonm | 1:1de1ea2994d9 | 198 | * |
gallonm | 1:1de1ea2994d9 | 199 | * @details End user should ensure device is in idle state and not already running |
gallonm | 1:1de1ea2994d9 | 200 | */ |
gallonm | 1:1de1ea2994d9 | 201 | int VL6180x_RangeStartSingleShot(VL6180xDev_t dev); |
gallonm | 1:1de1ea2994d9 | 202 | |
gallonm | 1:1de1ea2994d9 | 203 | /** |
gallonm | 1:1de1ea2994d9 | 204 | * @brief Set maximum convergence time |
gallonm | 1:1de1ea2994d9 | 205 | * |
gallonm | 1:1de1ea2994d9 | 206 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 207 | * Setting a low convergence time can impact maximal detectable distance. |
gallonm | 1:1de1ea2994d9 | 208 | * Refer to VL6180x Datasheet Table 7 : Typical range convergence time. |
gallonm | 1:1de1ea2994d9 | 209 | * A typical value for up to x3 scaling is 50 ms |
gallonm | 1:1de1ea2994d9 | 210 | * |
gallonm | 1:1de1ea2994d9 | 211 | * @param dev |
gallonm | 1:1de1ea2994d9 | 212 | * @param MaxConTime_msec |
gallonm | 1:1de1ea2994d9 | 213 | * @return 0 on success. <0 on error. >0 for calibration warning status |
gallonm | 1:1de1ea2994d9 | 214 | */ |
gallonm | 1:1de1ea2994d9 | 215 | int VL6180x_RangeSetMaxConvergenceTime(VL6180xDev_t dev, uint8_t MaxConTime_msec); |
gallonm | 1:1de1ea2994d9 | 216 | |
gallonm | 1:1de1ea2994d9 | 217 | /** |
gallonm | 1:1de1ea2994d9 | 218 | * @brief Single shot Range measurement in polling mode. |
gallonm | 1:1de1ea2994d9 | 219 | * |
gallonm | 1:1de1ea2994d9 | 220 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 221 | * Kick off a new single shot range then wait for ready to retrieve it by polling interrupt status \n |
gallonm | 1:1de1ea2994d9 | 222 | * Ranging must be prepared by a first call to @a VL6180x_Prepare() and it is safer to clear very first poll call \n |
gallonm | 1:1de1ea2994d9 | 223 | * This function reference VL6180x_PollDelay(dev) porting macro/call on each polling loop, |
gallonm | 1:1de1ea2994d9 | 224 | * but PollDelay(dev) may never be called if measure in ready on first poll loop \n |
gallonm | 1:1de1ea2994d9 | 225 | * Should not be use in continuous mode operation as it will stop it and cause stop/start misbehaviour \n |
gallonm | 1:1de1ea2994d9 | 226 | * \n This function clears Range Interrupt status , but not error one. For that uses @a VL6180x_ClearErrorInterrupt() \n |
gallonm | 1:1de1ea2994d9 | 227 | * This range error is not related VL6180x_RangeData_t::errorStatus that refer measure status \n |
gallonm | 1:1de1ea2994d9 | 228 | * |
gallonm | 1:1de1ea2994d9 | 229 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 230 | * @param pRangeData Will be populated with the result ranging data @a VL6180x_RangeData_t |
gallonm | 1:1de1ea2994d9 | 231 | * @return 0 on success , @a #RANGE_ERROR if device reports an error case in it status (not cleared) use |
gallonm | 1:1de1ea2994d9 | 232 | * |
gallonm | 1:1de1ea2994d9 | 233 | * \sa ::VL6180x_RangeData_t |
gallonm | 1:1de1ea2994d9 | 234 | */ |
gallonm | 1:1de1ea2994d9 | 235 | int VL6180x_RangePollMeasurement(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData); |
gallonm | 1:1de1ea2994d9 | 236 | |
gallonm | 1:1de1ea2994d9 | 237 | /** |
gallonm | 1:1de1ea2994d9 | 238 | * @brief Check for measure readiness and get it if ready |
gallonm | 1:1de1ea2994d9 | 239 | * |
gallonm | 1:1de1ea2994d9 | 240 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 241 | * Using this function is an alternative to @a VL6180x_RangePollMeasurement() to avoid polling operation. This is suitable for applications |
gallonm | 1:1de1ea2994d9 | 242 | * 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 |
gallonm | 1:1de1ea2994d9 | 243 | * operation is triggered by a call to @a VL6180x_RangeStartSingleShot(). Then, host CPU regularly calls @a VL6180x_RangeGetMeasurementIfReady() to |
gallonm | 1:1de1ea2994d9 | 244 | * get a distance measure if ready. In case the distance is not ready, host may get it at the next call.\n |
gallonm | 1:1de1ea2994d9 | 245 | * |
gallonm | 1:1de1ea2994d9 | 246 | * @warning |
gallonm | 1:1de1ea2994d9 | 247 | * This function does not re-start a new measurement : this is up to the host CPU to do it.\n |
gallonm | 1:1de1ea2994d9 | 248 | * This function clears Range Interrupt for measure ready , but not error interrupts. For that, uses @a VL6180x_ClearErrorInterrupt() \n |
gallonm | 1:1de1ea2994d9 | 249 | * |
gallonm | 1:1de1ea2994d9 | 250 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 251 | * @param pRangeData Will be populated with the result ranging data if available |
gallonm | 1:1de1ea2994d9 | 252 | * @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, |
gallonm | 1:1de1ea2994d9 | 253 | */ |
gallonm | 1:1de1ea2994d9 | 254 | int VL6180x_RangeGetMeasurementIfReady(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData); |
gallonm | 1:1de1ea2994d9 | 255 | |
gallonm | 1:1de1ea2994d9 | 256 | /** |
gallonm | 1:1de1ea2994d9 | 257 | * @brief Retrieve range measurements set from device |
gallonm | 1:1de1ea2994d9 | 258 | * |
gallonm | 1:1de1ea2994d9 | 259 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 260 | * The measurement is made of range_mm status and error code @a VL6180x_RangeData_t \n |
gallonm | 1:1de1ea2994d9 | 261 | * Based on configuration selected extra measures are included. |
gallonm | 1:1de1ea2994d9 | 262 | * |
gallonm | 1:1de1ea2994d9 | 263 | * @warning should not be used in continuous if wrap around filter is active \n |
gallonm | 1:1de1ea2994d9 | 264 | * Does not perform any wait nor check for result availability or validity. |
gallonm | 1:1de1ea2994d9 | 265 | *\sa VL6180x_RangeGetResult for "range only" measurement |
gallonm | 1:1de1ea2994d9 | 266 | * |
gallonm | 1:1de1ea2994d9 | 267 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 268 | * @param pRangeData Pointer to the data structure to fill up |
gallonm | 1:1de1ea2994d9 | 269 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 270 | */ |
gallonm | 1:1de1ea2994d9 | 271 | int VL6180x_RangeGetMeasurement(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData); |
gallonm | 1:1de1ea2994d9 | 272 | |
gallonm | 1:1de1ea2994d9 | 273 | /** |
gallonm | 1:1de1ea2994d9 | 274 | * @brief Get ranging result and only that |
gallonm | 1:1de1ea2994d9 | 275 | * |
gallonm | 1:1de1ea2994d9 | 276 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 277 | * Unlike @a VL6180x_RangeGetMeasurement() this function only retrieves the range in millimeter \n |
gallonm | 1:1de1ea2994d9 | 278 | * It does any required up-scale translation\n |
gallonm | 1:1de1ea2994d9 | 279 | * It can be called after success status polling or in interrupt mode \n |
gallonm | 1:1de1ea2994d9 | 280 | * @warning these function is not doing wrap around filtering \n |
gallonm | 1:1de1ea2994d9 | 281 | * This function doesn't perform any data ready check! |
gallonm | 1:1de1ea2994d9 | 282 | * |
gallonm | 1:1de1ea2994d9 | 283 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 284 | * @param pRange_mm Pointer to range distance |
gallonm | 1:1de1ea2994d9 | 285 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 286 | */ |
gallonm | 1:1de1ea2994d9 | 287 | int VL6180x_RangeGetResult(VL6180xDev_t dev, int32_t *pRange_mm); |
gallonm | 1:1de1ea2994d9 | 288 | |
gallonm | 1:1de1ea2994d9 | 289 | /** |
gallonm | 1:1de1ea2994d9 | 290 | * @brief Configure ranging interrupt reported to application |
gallonm | 1:1de1ea2994d9 | 291 | * |
gallonm | 1:1de1ea2994d9 | 292 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 293 | * @param ConfigGpioInt Select ranging report\n select one (and only one) of:\n |
gallonm | 1:1de1ea2994d9 | 294 | * @a #CONFIG_GPIO_INTERRUPT_DISABLED \n |
gallonm | 1:1de1ea2994d9 | 295 | * @a #CONFIG_GPIO_INTERRUPT_LEVEL_LOW \n |
gallonm | 1:1de1ea2994d9 | 296 | * @a #CONFIG_GPIO_INTERRUPT_LEVEL_HIGH \n |
gallonm | 1:1de1ea2994d9 | 297 | * @a #CONFIG_GPIO_INTERRUPT_OUT_OF_WINDOW \n |
gallonm | 1:1de1ea2994d9 | 298 | * @a #CONFIG_GPIO_INTERRUPT_NEW_SAMPLE_READY |
gallonm | 1:1de1ea2994d9 | 299 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 300 | */ |
gallonm | 1:1de1ea2994d9 | 301 | int VL6180x_RangeConfigInterrupt(VL6180xDev_t dev, uint8_t ConfigGpioInt); |
gallonm | 1:1de1ea2994d9 | 302 | |
gallonm | 1:1de1ea2994d9 | 303 | |
gallonm | 1:1de1ea2994d9 | 304 | /** |
gallonm | 1:1de1ea2994d9 | 305 | * @brief Clear range interrupt |
gallonm | 1:1de1ea2994d9 | 306 | * |
gallonm | 1:1de1ea2994d9 | 307 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 308 | * @return 0 On success |
gallonm | 1:1de1ea2994d9 | 309 | */ |
gallonm | 1:1de1ea2994d9 | 310 | #define VL6180x_RangeClearInterrupt(dev) VL6180x_ClearInterrupt(dev, INTERRUPT_CLEAR_RANGING) |
gallonm | 1:1de1ea2994d9 | 311 | |
gallonm | 1:1de1ea2994d9 | 312 | /** |
gallonm | 1:1de1ea2994d9 | 313 | * @brief Return ranging error interrupt status |
gallonm | 1:1de1ea2994d9 | 314 | * |
gallonm | 1:1de1ea2994d9 | 315 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 316 | * Appropriate Interrupt report must have been selected first by @a VL6180x_RangeConfigInterrupt() or @a VL6180x_Prepare() \n |
gallonm | 1:1de1ea2994d9 | 317 | * |
gallonm | 1:1de1ea2994d9 | 318 | * Can be used in polling loop to wait for a given ranging event or in interrupt to read the trigger \n |
gallonm | 1:1de1ea2994d9 | 319 | * Events triggers are : \n |
gallonm | 1:1de1ea2994d9 | 320 | * @a #RES_INT_STAT_GPIO_LOW_LEVEL_THRESHOLD \n |
gallonm | 1:1de1ea2994d9 | 321 | * @a #RES_INT_STAT_GPIO_HIGH_LEVEL_THRESHOLD \n |
gallonm | 1:1de1ea2994d9 | 322 | * @a #RES_INT_STAT_GPIO_OUT_OF_WINDOW \n (RES_INT_STAT_GPIO_LOW_LEVEL_THRESHOLD|RES_INT_STAT_GPIO_HIGH_LEVEL_THRESHOLD) |
gallonm | 1:1de1ea2994d9 | 323 | * @a #RES_INT_STAT_GPIO_NEW_SAMPLE_READY \n |
gallonm | 1:1de1ea2994d9 | 324 | * |
gallonm | 1:1de1ea2994d9 | 325 | * @sa IntrStatus_t |
gallonm | 1:1de1ea2994d9 | 326 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 327 | * @param pIntStatus Pointer to status variable to update |
gallonm | 1:1de1ea2994d9 | 328 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 329 | */ |
gallonm | 1:1de1ea2994d9 | 330 | int VL6180x_RangeGetInterruptStatus(VL6180xDev_t dev, uint8_t *pIntStatus); |
gallonm | 1:1de1ea2994d9 | 331 | |
gallonm | 1:1de1ea2994d9 | 332 | #if VL6180x_RANGE_STATUS_ERRSTRING |
gallonm | 1:1de1ea2994d9 | 333 | |
gallonm | 1:1de1ea2994d9 | 334 | extern const char * ROMABLE_DATA VL6180x_RangeStatusErrString[]; |
gallonm | 1:1de1ea2994d9 | 335 | /** |
gallonm | 1:1de1ea2994d9 | 336 | * @brief Human readable error string for range error status |
gallonm | 1:1de1ea2994d9 | 337 | * |
gallonm | 1:1de1ea2994d9 | 338 | * @param RangeErrCode The error code as stored on @a VL6180x_RangeData_t::errorStatus |
gallonm | 1:1de1ea2994d9 | 339 | * @return error string , NULL for invalid RangeErrCode |
gallonm | 1:1de1ea2994d9 | 340 | * @sa ::RangeError_u |
gallonm | 1:1de1ea2994d9 | 341 | */ |
gallonm | 1:1de1ea2994d9 | 342 | const char * VL6180x_RangeGetStatusErrString(uint8_t RangeErrCode); |
gallonm | 1:1de1ea2994d9 | 343 | #else |
gallonm | 1:1de1ea2994d9 | 344 | #define VL6180x_RangeGetStatusErrString(...) NULL |
gallonm | 1:1de1ea2994d9 | 345 | #endif |
gallonm | 1:1de1ea2994d9 | 346 | |
gallonm | 1:1de1ea2994d9 | 347 | /** @} */ |
gallonm | 1:1de1ea2994d9 | 348 | |
gallonm | 1:1de1ea2994d9 | 349 | #if VL6180x_ALS_SUPPORT |
gallonm | 1:1de1ea2994d9 | 350 | |
gallonm | 1:1de1ea2994d9 | 351 | /** @defgroup api_hl_als ALS functions |
gallonm | 1:1de1ea2994d9 | 352 | * @brief ALS functions |
gallonm | 1:1de1ea2994d9 | 353 | * @ingroup api_hl |
gallonm | 1:1de1ea2994d9 | 354 | * @{ |
gallonm | 1:1de1ea2994d9 | 355 | */ |
gallonm | 1:1de1ea2994d9 | 356 | |
gallonm | 1:1de1ea2994d9 | 357 | /** |
gallonm | 1:1de1ea2994d9 | 358 | * @brief Run a single ALS measurement in single shot polling mode |
gallonm | 1:1de1ea2994d9 | 359 | * |
gallonm | 1:1de1ea2994d9 | 360 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 361 | * Kick off a new single shot ALS then wait new measurement ready to retrieve it ( polling system interrupt status register for als) \n |
gallonm | 1:1de1ea2994d9 | 362 | * ALS must be prepared by a first call to @a VL6180x_Prepare() \n |
gallonm | 1:1de1ea2994d9 | 363 | * \n Should not be used in continuous or interrupt mode it will break it and create hazard in start/stop \n |
gallonm | 1:1de1ea2994d9 | 364 | * |
gallonm | 1:1de1ea2994d9 | 365 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 366 | * @param pAlsData Als data structure to fill up @a VL6180x_AlsData_t |
gallonm | 1:1de1ea2994d9 | 367 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 368 | */ |
gallonm | 1:1de1ea2994d9 | 369 | int VL6180x_AlsPollMeasurement(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData); |
gallonm | 1:1de1ea2994d9 | 370 | |
gallonm | 1:1de1ea2994d9 | 371 | |
gallonm | 1:1de1ea2994d9 | 372 | /** |
gallonm | 1:1de1ea2994d9 | 373 | * @brief Get actual ALS measurement |
gallonm | 1:1de1ea2994d9 | 374 | * |
gallonm | 1:1de1ea2994d9 | 375 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 376 | * Can be called after success status polling or in interrupt mode to retrieve ALS measurement from device \n |
gallonm | 1:1de1ea2994d9 | 377 | * This function doesn't perform any data ready check ! |
gallonm | 1:1de1ea2994d9 | 378 | * |
gallonm | 1:1de1ea2994d9 | 379 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 380 | * @param pAlsData Pointer to measurement struct @a VL6180x_AlsData_t |
gallonm | 1:1de1ea2994d9 | 381 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 382 | */ |
gallonm | 1:1de1ea2994d9 | 383 | int VL6180x_AlsGetMeasurement(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData); |
gallonm | 1:1de1ea2994d9 | 384 | |
gallonm | 1:1de1ea2994d9 | 385 | /** |
gallonm | 1:1de1ea2994d9 | 386 | * @brief Configure ALS interrupts provide to application |
gallonm | 1:1de1ea2994d9 | 387 | * |
gallonm | 1:1de1ea2994d9 | 388 | * @param dev The Device |
gallonm | 1:1de1ea2994d9 | 389 | * @param ConfigGpioInt Select one (and only one) of : \n |
gallonm | 1:1de1ea2994d9 | 390 | * @a #CONFIG_GPIO_INTERRUPT_DISABLED \n |
gallonm | 1:1de1ea2994d9 | 391 | * @a #CONFIG_GPIO_INTERRUPT_LEVEL_LOW \n |
gallonm | 1:1de1ea2994d9 | 392 | * @a #CONFIG_GPIO_INTERRUPT_LEVEL_HIGH \n |
gallonm | 1:1de1ea2994d9 | 393 | * @a #CONFIG_GPIO_INTERRUPT_OUT_OF_WINDOW \n |
gallonm | 1:1de1ea2994d9 | 394 | * @a #CONFIG_GPIO_INTERRUPT_NEW_SAMPLE_READY |
gallonm | 1:1de1ea2994d9 | 395 | * @return 0 on success may return #INVALID_PARAMS for invalid mode |
gallonm | 1:1de1ea2994d9 | 396 | */ |
gallonm | 1:1de1ea2994d9 | 397 | int VL6180x_AlsConfigInterrupt(VL6180xDev_t dev, uint8_t ConfigGpioInt); |
gallonm | 1:1de1ea2994d9 | 398 | |
gallonm | 1:1de1ea2994d9 | 399 | |
gallonm | 1:1de1ea2994d9 | 400 | /** |
gallonm | 1:1de1ea2994d9 | 401 | * @brief Set ALS integration period |
gallonm | 1:1de1ea2994d9 | 402 | * |
gallonm | 1:1de1ea2994d9 | 403 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 404 | * @param period_ms Integration period in msec. Value in between 50 to 100 msec is recommended\n |
gallonm | 1:1de1ea2994d9 | 405 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 406 | */ |
gallonm | 1:1de1ea2994d9 | 407 | int VL6180x_AlsSetIntegrationPeriod(VL6180xDev_t dev, uint16_t period_ms); |
gallonm | 1:1de1ea2994d9 | 408 | |
gallonm | 1:1de1ea2994d9 | 409 | /** |
gallonm | 1:1de1ea2994d9 | 410 | * @brief Set ALS "inter-measurement period" |
gallonm | 1:1de1ea2994d9 | 411 | * |
gallonm | 1:1de1ea2994d9 | 412 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 413 | * The so call data-sheet "inter measurement period" is actually an extra inter-measurement delay |
gallonm | 1:1de1ea2994d9 | 414 | * |
gallonm | 1:1de1ea2994d9 | 415 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 416 | * @param intermeasurement_period_ms Inter measurement time in milli second\n |
gallonm | 1:1de1ea2994d9 | 417 | * @warning applied value is clipped to 2550 ms\n |
gallonm | 1:1de1ea2994d9 | 418 | * @return 0 on success if value is |
gallonm | 1:1de1ea2994d9 | 419 | */ |
gallonm | 1:1de1ea2994d9 | 420 | int VL6180x_AlsSetInterMeasurementPeriod(VL6180xDev_t dev, uint16_t intermeasurement_period_ms); |
gallonm | 1:1de1ea2994d9 | 421 | |
gallonm | 1:1de1ea2994d9 | 422 | /** |
gallonm | 1:1de1ea2994d9 | 423 | * @brief Set ALS analog gain code |
gallonm | 1:1de1ea2994d9 | 424 | * |
gallonm | 1:1de1ea2994d9 | 425 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 426 | * ALS gain code value programmed in @a SYSALS_ANALOGUE_GAIN . |
gallonm | 1:1de1ea2994d9 | 427 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 428 | * @param gain Gain code see datasheet or AlsGainLookUp for real value. Value is clipped to 7. |
gallonm | 1:1de1ea2994d9 | 429 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 430 | */ |
gallonm | 1:1de1ea2994d9 | 431 | |
gallonm | 1:1de1ea2994d9 | 432 | int VL6180x_AlsSetAnalogueGain(VL6180xDev_t dev, uint8_t gain); |
gallonm | 1:1de1ea2994d9 | 433 | /** |
gallonm | 1:1de1ea2994d9 | 434 | * @brief Set thresholds for ALS continuous mode |
gallonm | 1:1de1ea2994d9 | 435 | * @warning Threshold are raw device value not lux! |
gallonm | 1:1de1ea2994d9 | 436 | * |
gallonm | 1:1de1ea2994d9 | 437 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 438 | * Basically value programmed in @a SYSALS_THRESH_LOW and @a SYSALS_THRESH_HIGH registers |
gallonm | 1:1de1ea2994d9 | 439 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 440 | * @param low ALS low raw threshold for @a SYSALS_THRESH_LOW |
gallonm | 1:1de1ea2994d9 | 441 | * @param high ALS high raw threshold for @a SYSALS_THRESH_HIGH |
gallonm | 1:1de1ea2994d9 | 442 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 443 | */ |
gallonm | 1:1de1ea2994d9 | 444 | int VL6180x_AlsSetThresholds(VL6180xDev_t dev, uint8_t low, uint8_t high); |
gallonm | 1:1de1ea2994d9 | 445 | |
gallonm | 1:1de1ea2994d9 | 446 | /** |
gallonm | 1:1de1ea2994d9 | 447 | * @brief Clear ALS interrupt |
gallonm | 1:1de1ea2994d9 | 448 | * |
gallonm | 1:1de1ea2994d9 | 449 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 450 | * @return 0 On success |
gallonm | 1:1de1ea2994d9 | 451 | */ |
gallonm | 1:1de1ea2994d9 | 452 | #define VL6180x_AlsClearInterrupt(dev) VL6180x_ClearInterrupt(dev, INTERRUPT_CLEAR_ALS) |
gallonm | 1:1de1ea2994d9 | 453 | |
gallonm | 1:1de1ea2994d9 | 454 | /** |
gallonm | 1:1de1ea2994d9 | 455 | * Read ALS interrupt status |
gallonm | 1:1de1ea2994d9 | 456 | * @param dev Device |
gallonm | 1:1de1ea2994d9 | 457 | * @param pIntStatus Pointer to status |
gallonm | 1:1de1ea2994d9 | 458 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 459 | */ |
gallonm | 1:1de1ea2994d9 | 460 | int VL6180x_AlsGetInterruptStatus(VL6180xDev_t dev, uint8_t *pIntStatus); |
gallonm | 1:1de1ea2994d9 | 461 | |
gallonm | 1:1de1ea2994d9 | 462 | /** @} */ |
gallonm | 1:1de1ea2994d9 | 463 | #endif |
gallonm | 1:1de1ea2994d9 | 464 | |
gallonm | 1:1de1ea2994d9 | 465 | /** @defgroup api_ll_init Init functions |
gallonm | 1:1de1ea2994d9 | 466 | * @brief Init functions |
gallonm | 1:1de1ea2994d9 | 467 | * @ingroup api_ll |
gallonm | 1:1de1ea2994d9 | 468 | * @{ |
gallonm | 1:1de1ea2994d9 | 469 | */ |
gallonm | 1:1de1ea2994d9 | 470 | |
gallonm | 1:1de1ea2994d9 | 471 | /** |
gallonm | 1:1de1ea2994d9 | 472 | * @brief Low level ranging and ALS register static settings (you should call @a VL6180x_Prepare() function instead) |
gallonm | 1:1de1ea2994d9 | 473 | * |
gallonm | 1:1de1ea2994d9 | 474 | * @param dev |
gallonm | 1:1de1ea2994d9 | 475 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 476 | */ |
gallonm | 1:1de1ea2994d9 | 477 | int VL6180x_StaticInit(VL6180xDev_t dev); |
gallonm | 1:1de1ea2994d9 | 478 | |
gallonm | 1:1de1ea2994d9 | 479 | /** @} */ |
gallonm | 1:1de1ea2994d9 | 480 | |
gallonm | 1:1de1ea2994d9 | 481 | /** @defgroup api_ll_range Ranging functions |
gallonm | 1:1de1ea2994d9 | 482 | * @brief Ranging Low Level functions |
gallonm | 1:1de1ea2994d9 | 483 | * @ingroup api_ll |
gallonm | 1:1de1ea2994d9 | 484 | * @{ |
gallonm | 1:1de1ea2994d9 | 485 | */ |
gallonm | 1:1de1ea2994d9 | 486 | |
gallonm | 1:1de1ea2994d9 | 487 | /** |
gallonm | 1:1de1ea2994d9 | 488 | * @brief Wait for device to be ready (before a new ranging command can be issued by application) |
gallonm | 1:1de1ea2994d9 | 489 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 490 | * @param MaxLoop Max Number of i2c polling loop see @a #msec_2_i2cloop |
gallonm | 1:1de1ea2994d9 | 491 | * @return 0 on success. <0 when fail \n |
gallonm | 1:1de1ea2994d9 | 492 | * @ref VL6180x_ErrCode_t::TIME_OUT for time out \n |
gallonm | 1:1de1ea2994d9 | 493 | * @ref VL6180x_ErrCode_t::INVALID_PARAMS if MaxLop<1 |
gallonm | 1:1de1ea2994d9 | 494 | */ |
gallonm | 1:1de1ea2994d9 | 495 | int VL6180x_RangeWaitDeviceReady(VL6180xDev_t dev, int MaxLoop ); |
gallonm | 1:1de1ea2994d9 | 496 | |
gallonm | 1:1de1ea2994d9 | 497 | /** |
gallonm | 1:1de1ea2994d9 | 498 | * @brief Program Inter measurement period (used only in continuous mode) |
gallonm | 1:1de1ea2994d9 | 499 | * |
gallonm | 1:1de1ea2994d9 | 500 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 501 | * When trying to set too long time, it returns #INVALID_PARAMS |
gallonm | 1:1de1ea2994d9 | 502 | * |
gallonm | 1:1de1ea2994d9 | 503 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 504 | * @param InterMeasTime_msec Requires inter-measurement time in msec |
gallonm | 1:1de1ea2994d9 | 505 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 506 | */ |
gallonm | 1:1de1ea2994d9 | 507 | int VL6180x_RangeSetInterMeasPeriod(VL6180xDev_t dev, uint32_t InterMeasTime_msec); |
gallonm | 1:1de1ea2994d9 | 508 | |
gallonm | 1:1de1ea2994d9 | 509 | |
gallonm | 1:1de1ea2994d9 | 510 | /** |
gallonm | 1:1de1ea2994d9 | 511 | * @brief Set device ranging scaling factor |
gallonm | 1:1de1ea2994d9 | 512 | * |
gallonm | 1:1de1ea2994d9 | 513 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 514 | * The ranging scaling factor is applied on the raw distance measured by the device to increase operating ranging at the price of the precision. |
gallonm | 1:1de1ea2994d9 | 515 | * Changing the scaling factor when device is not in f/w standby state (free running) is not safe. |
gallonm | 1:1de1ea2994d9 | 516 | * It can be source of spurious interrupt, wrongly scaled range etc ... |
gallonm | 1:1de1ea2994d9 | 517 | * @warning __This function doesns't update high/low threshold and other programmed settings linked to scaling factor__. |
gallonm | 1:1de1ea2994d9 | 518 | * To ensure proper operation, threshold and scaling changes should be done following this procedure: \n |
gallonm | 1:1de1ea2994d9 | 519 | * @li Set Group hold : @a VL6180x_SetGroupParamHold() \n |
gallonm | 1:1de1ea2994d9 | 520 | * @li Get Threshold @a VL6180x_RangeGetThresholds() \n |
gallonm | 1:1de1ea2994d9 | 521 | * @li Change scaling : @a VL6180x_UpscaleSetScaling() \n |
gallonm | 1:1de1ea2994d9 | 522 | * @li Set Threshold : @a VL6180x_RangeSetThresholds() \n |
gallonm | 1:1de1ea2994d9 | 523 | * @li Unset Group Hold : @a VL6180x_SetGroupParamHold() |
gallonm | 1:1de1ea2994d9 | 524 | * |
gallonm | 1:1de1ea2994d9 | 525 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 526 | * @param scaling Scaling factor to apply (1,2 or 3) |
gallonm | 1:1de1ea2994d9 | 527 | * @return 0 on success when up-scale support is not configured it fail for any |
gallonm | 1:1de1ea2994d9 | 528 | * scaling than the one statically configured. |
gallonm | 1:1de1ea2994d9 | 529 | */ |
gallonm | 1:1de1ea2994d9 | 530 | int VL6180x_UpscaleSetScaling(VL6180xDev_t dev, uint8_t scaling); |
gallonm | 1:1de1ea2994d9 | 531 | |
gallonm | 1:1de1ea2994d9 | 532 | /** |
gallonm | 1:1de1ea2994d9 | 533 | * @brief Get current ranging scaling factor |
gallonm | 1:1de1ea2994d9 | 534 | * |
gallonm | 1:1de1ea2994d9 | 535 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 536 | * @return The current scaling factor |
gallonm | 1:1de1ea2994d9 | 537 | */ |
gallonm | 1:1de1ea2994d9 | 538 | int VL6180x_UpscaleGetScaling(VL6180xDev_t dev); |
gallonm | 1:1de1ea2994d9 | 539 | |
gallonm | 1:1de1ea2994d9 | 540 | |
gallonm | 1:1de1ea2994d9 | 541 | /** |
gallonm | 1:1de1ea2994d9 | 542 | * @brief Give filtered state (wrap-around filter) of a range measurement |
gallonm | 1:1de1ea2994d9 | 543 | * @param pRangeData Range measurement data |
gallonm | 1:1de1ea2994d9 | 544 | * @return 0 means measure was not filtered, when not 0 range from device got filtered by filter post processing |
gallonm | 1:1de1ea2994d9 | 545 | */ |
gallonm | 1:1de1ea2994d9 | 546 | #define VL6180x_RangeIsFilteredMeasurement(pRangeData) ((pRangeData)->errorStatus == RangingFiltered) |
gallonm | 1:1de1ea2994d9 | 547 | |
gallonm | 1:1de1ea2994d9 | 548 | /** |
gallonm | 1:1de1ea2994d9 | 549 | * @brief Get the maximal distance for actual scaling |
gallonm | 1:1de1ea2994d9 | 550 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 551 | * Do not use prior to @a VL6180x_Prepare() or at least @a VL6180x_InitData() |
gallonm | 1:1de1ea2994d9 | 552 | * |
gallonm | 1:1de1ea2994d9 | 553 | * Any range value more than the value returned by this function is to be considered as "no target detected" |
gallonm | 1:1de1ea2994d9 | 554 | * or "no target in detectable range" \n |
gallonm | 1:1de1ea2994d9 | 555 | * @warning The maximal distance depends on the scaling |
gallonm | 1:1de1ea2994d9 | 556 | * |
gallonm | 1:1de1ea2994d9 | 557 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 558 | * @return The maximal range limit for actual mode and scaling |
gallonm | 1:1de1ea2994d9 | 559 | */ |
gallonm | 1:1de1ea2994d9 | 560 | uint16_t VL6180x_GetUpperLimit(VL6180xDev_t dev); |
gallonm | 1:1de1ea2994d9 | 561 | |
gallonm | 1:1de1ea2994d9 | 562 | /** |
gallonm | 1:1de1ea2994d9 | 563 | * @brief Apply low and high ranging thresholds that are considered only in continuous mode |
gallonm | 1:1de1ea2994d9 | 564 | * |
gallonm | 1:1de1ea2994d9 | 565 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 566 | * This function programs low and high ranging thresholds that are considered in continuous mode : |
gallonm | 1:1de1ea2994d9 | 567 | * interrupt will be raised only when an object is detected at a distance inside this [low:high] range. |
gallonm | 1:1de1ea2994d9 | 568 | * The function takes care of applying current scaling factor if any.\n |
gallonm | 1:1de1ea2994d9 | 569 | * To be safe, in continuous operation, thresholds must be changed under "group parameter hold" cover. |
gallonm | 1:1de1ea2994d9 | 570 | * Group hold can be activated/deactivated directly in the function or externally (then set 0) |
gallonm | 1:1de1ea2994d9 | 571 | * using /a VL6180x_SetGroupParamHold() function. |
gallonm | 1:1de1ea2994d9 | 572 | * |
gallonm | 1:1de1ea2994d9 | 573 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 574 | * @param low Low threshold in mm |
gallonm | 1:1de1ea2994d9 | 575 | * @param high High threshold in mm |
gallonm | 1:1de1ea2994d9 | 576 | * @param SafeHold Use of group parameters hold to surround threshold programming. |
gallonm | 1:1de1ea2994d9 | 577 | * @return 0 On success |
gallonm | 1:1de1ea2994d9 | 578 | */ |
gallonm | 1:1de1ea2994d9 | 579 | int VL6180x_RangeSetThresholds(VL6180xDev_t dev, uint16_t low, uint16_t high, int SafeHold); |
gallonm | 1:1de1ea2994d9 | 580 | |
gallonm | 1:1de1ea2994d9 | 581 | /** |
gallonm | 1:1de1ea2994d9 | 582 | * @brief Get scaled high and low threshold from device |
gallonm | 1:1de1ea2994d9 | 583 | * |
gallonm | 1:1de1ea2994d9 | 584 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 585 | * Due to scaling factor, the returned value may be different from what has been programmed first (precision lost). |
gallonm | 1:1de1ea2994d9 | 586 | * For instance VL6180x_RangeSetThresholds(dev,11,22) with scale 3 |
gallonm | 1:1de1ea2994d9 | 587 | * will read back 9 ((11/3)x3) and 21 ((22/3)x3). |
gallonm | 1:1de1ea2994d9 | 588 | |
gallonm | 1:1de1ea2994d9 | 589 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 590 | * @param low scaled low Threshold ptr can be NULL if not needed |
gallonm | 1:1de1ea2994d9 | 591 | * @param high scaled High Threshold ptr can be NULL if not needed |
gallonm | 1:1de1ea2994d9 | 592 | * @return 0 on success, return value is undefined if both low and high are NULL |
gallonm | 1:1de1ea2994d9 | 593 | * @warning return value is undefined if both low and high are NULL |
gallonm | 1:1de1ea2994d9 | 594 | */ |
gallonm | 1:1de1ea2994d9 | 595 | int VL6180x_RangeGetThresholds(VL6180xDev_t dev, uint16_t *low, uint16_t *high); |
gallonm | 1:1de1ea2994d9 | 596 | |
gallonm | 1:1de1ea2994d9 | 597 | /** |
gallonm | 1:1de1ea2994d9 | 598 | * @brief Set ranging raw thresholds (scaling not considered so not recommended to use it) |
gallonm | 1:1de1ea2994d9 | 599 | * |
gallonm | 1:1de1ea2994d9 | 600 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 601 | * @param low raw low threshold set to raw register |
gallonm | 1:1de1ea2994d9 | 602 | * @param high raw high threshold set to raw register |
gallonm | 1:1de1ea2994d9 | 603 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 604 | */ |
gallonm | 1:1de1ea2994d9 | 605 | int VL6180x_RangeSetRawThresholds(VL6180xDev_t dev, uint8_t low, uint8_t high); |
gallonm | 1:1de1ea2994d9 | 606 | |
gallonm | 1:1de1ea2994d9 | 607 | /** |
gallonm | 1:1de1ea2994d9 | 608 | * @brief Set Early Convergence Estimate ratio |
gallonm | 1:1de1ea2994d9 | 609 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 610 | * For more information on ECE check datasheet |
gallonm | 1:1de1ea2994d9 | 611 | * @warning May return a calibration warning in some use cases |
gallonm | 1:1de1ea2994d9 | 612 | * |
gallonm | 1:1de1ea2994d9 | 613 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 614 | * @param FactorM ECE factor M in M/D |
gallonm | 1:1de1ea2994d9 | 615 | * @param FactorD ECE factor D in M/D |
gallonm | 1:1de1ea2994d9 | 616 | * @return 0 on success. <0 on error. >0 on warning |
gallonm | 1:1de1ea2994d9 | 617 | */ |
gallonm | 1:1de1ea2994d9 | 618 | int VL6180x_RangeSetEceFactor(VL6180xDev_t dev, uint16_t FactorM, uint16_t FactorD); |
gallonm | 1:1de1ea2994d9 | 619 | |
gallonm | 1:1de1ea2994d9 | 620 | /** |
gallonm | 1:1de1ea2994d9 | 621 | * @brief Set Early Convergence Estimate state (See #SYSRANGE_RANGE_CHECK_ENABLES register) |
gallonm | 1:1de1ea2994d9 | 622 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 623 | * @param enable State to be set 0=disabled, otherwise enabled |
gallonm | 1:1de1ea2994d9 | 624 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 625 | */ |
gallonm | 1:1de1ea2994d9 | 626 | int VL6180x_RangeSetEceState(VL6180xDev_t dev, int enable ); |
gallonm | 1:1de1ea2994d9 | 627 | |
gallonm | 1:1de1ea2994d9 | 628 | /** |
gallonm | 1:1de1ea2994d9 | 629 | * @brief Set activation state of the wrap around filter |
gallonm | 1:1de1ea2994d9 | 630 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 631 | * @param state New activation state (0=off, otherwise on) |
gallonm | 1:1de1ea2994d9 | 632 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 633 | */ |
gallonm | 1:1de1ea2994d9 | 634 | int VL6180x_FilterSetState(VL6180xDev_t dev, int state); |
gallonm | 1:1de1ea2994d9 | 635 | |
gallonm | 1:1de1ea2994d9 | 636 | /** |
gallonm | 1:1de1ea2994d9 | 637 | * Get activation state of the wrap around filter |
gallonm | 1:1de1ea2994d9 | 638 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 639 | * @return Filter enabled or not, when filter is not supported it always returns 0S |
gallonm | 1:1de1ea2994d9 | 640 | */ |
gallonm | 1:1de1ea2994d9 | 641 | int VL6180x_FilterGetState(VL6180xDev_t dev); |
gallonm | 1:1de1ea2994d9 | 642 | |
gallonm | 1:1de1ea2994d9 | 643 | |
gallonm | 1:1de1ea2994d9 | 644 | /** |
gallonm | 1:1de1ea2994d9 | 645 | * @brief Set activation state of DMax computation |
gallonm | 1:1de1ea2994d9 | 646 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 647 | * @param state New activation state (0=off, otherwise on) |
gallonm | 1:1de1ea2994d9 | 648 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 649 | */ |
gallonm | 1:1de1ea2994d9 | 650 | int VL6180x_DMaxSetState(VL6180xDev_t dev, int state); |
gallonm | 1:1de1ea2994d9 | 651 | |
gallonm | 1:1de1ea2994d9 | 652 | /** |
gallonm | 1:1de1ea2994d9 | 653 | * Get activation state of DMax computation |
gallonm | 1:1de1ea2994d9 | 654 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 655 | * @return Filter enabled or not, when filter is not supported it always returns 0S |
gallonm | 1:1de1ea2994d9 | 656 | */ |
gallonm | 1:1de1ea2994d9 | 657 | int VL6180x_DMaxGetState(VL6180xDev_t dev); |
gallonm | 1:1de1ea2994d9 | 658 | |
gallonm | 1:1de1ea2994d9 | 659 | |
gallonm | 1:1de1ea2994d9 | 660 | /** |
gallonm | 1:1de1ea2994d9 | 661 | * @brief Set ranging mode and start/stop measure (use high level functions instead : @a VL6180x_RangeStartSingleShot() or @a VL6180x_RangeStartContinuousMode()) |
gallonm | 1:1de1ea2994d9 | 662 | * |
gallonm | 1:1de1ea2994d9 | 663 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 664 | * When used outside scope of known polling single shot stopped state, \n |
gallonm | 1:1de1ea2994d9 | 665 | * user must ensure the device state is "idle" before to issue a new command. |
gallonm | 1:1de1ea2994d9 | 666 | * |
gallonm | 1:1de1ea2994d9 | 667 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 668 | * @param mode A combination of working mode (#MODE_SINGLESHOT or #MODE_CONTINUOUS) and start/stop condition (#MODE_START_STOP) \n |
gallonm | 1:1de1ea2994d9 | 669 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 670 | */ |
gallonm | 1:1de1ea2994d9 | 671 | int VL6180x_RangeSetSystemMode(VL6180xDev_t dev, uint8_t mode); |
gallonm | 1:1de1ea2994d9 | 672 | |
gallonm | 1:1de1ea2994d9 | 673 | /** @} */ |
gallonm | 1:1de1ea2994d9 | 674 | |
gallonm | 1:1de1ea2994d9 | 675 | /** @defgroup api_ll_range_calibration Ranging calibration functions |
gallonm | 1:1de1ea2994d9 | 676 | * @brief Ranging calibration functions |
gallonm | 1:1de1ea2994d9 | 677 | * @ingroup api_ll |
gallonm | 1:1de1ea2994d9 | 678 | * @{ |
gallonm | 1:1de1ea2994d9 | 679 | */ |
gallonm | 1:1de1ea2994d9 | 680 | /** |
gallonm | 1:1de1ea2994d9 | 681 | * @brief Get part to part calibration offset |
gallonm | 1:1de1ea2994d9 | 682 | * |
gallonm | 1:1de1ea2994d9 | 683 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 684 | * Should only be used after a successful call to @a VL6180x_InitData to backup device nvm value |
gallonm | 1:1de1ea2994d9 | 685 | * |
gallonm | 1:1de1ea2994d9 | 686 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 687 | * @return part to part calibration offset from device |
gallonm | 1:1de1ea2994d9 | 688 | */ |
gallonm | 1:1de1ea2994d9 | 689 | int8_t VL6180x_GetOffsetCalibrationData(VL6180xDev_t dev); |
gallonm | 1:1de1ea2994d9 | 690 | |
gallonm | 1:1de1ea2994d9 | 691 | /** |
gallonm | 1:1de1ea2994d9 | 692 | * Set or over-write part to part calibration offset |
gallonm | 1:1de1ea2994d9 | 693 | * \sa VL6180x_InitData(), VL6180x_GetOffsetCalibrationData() |
gallonm | 1:1de1ea2994d9 | 694 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 695 | * @param offset Offset |
gallonm | 1:1de1ea2994d9 | 696 | */ |
gallonm | 1:1de1ea2994d9 | 697 | void VL6180x_SetOffsetCalibrationData(VL6180xDev_t dev, int8_t offset); |
gallonm | 1:1de1ea2994d9 | 698 | |
gallonm | 1:1de1ea2994d9 | 699 | /** |
gallonm | 1:1de1ea2994d9 | 700 | * @brief Set Cross talk compensation rate |
gallonm | 1:1de1ea2994d9 | 701 | * |
gallonm | 1:1de1ea2994d9 | 702 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 703 | * It programs register @a #SYSRANGE_CROSSTALK_COMPENSATION_RATE |
gallonm | 1:1de1ea2994d9 | 704 | * |
gallonm | 1:1de1ea2994d9 | 705 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 706 | * @param Rate Compensation rate (9.7 fix point) see datasheet for details |
gallonm | 1:1de1ea2994d9 | 707 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 708 | */ |
gallonm | 1:1de1ea2994d9 | 709 | int VL6180x_SetXTalkCompensationRate(VL6180xDev_t dev, FixPoint97_t Rate); |
gallonm | 1:1de1ea2994d9 | 710 | |
gallonm | 1:1de1ea2994d9 | 711 | /** @} */ |
gallonm | 1:1de1ea2994d9 | 712 | |
gallonm | 1:1de1ea2994d9 | 713 | |
gallonm | 1:1de1ea2994d9 | 714 | |
gallonm | 1:1de1ea2994d9 | 715 | #if VL6180x_ALS_SUPPORT |
gallonm | 1:1de1ea2994d9 | 716 | /** @defgroup api_ll_als ALS functions |
gallonm | 1:1de1ea2994d9 | 717 | * @brief ALS functions |
gallonm | 1:1de1ea2994d9 | 718 | * @ingroup api_ll |
gallonm | 1:1de1ea2994d9 | 719 | * @{ |
gallonm | 1:1de1ea2994d9 | 720 | */ |
gallonm | 1:1de1ea2994d9 | 721 | |
gallonm | 1:1de1ea2994d9 | 722 | /** |
gallonm | 1:1de1ea2994d9 | 723 | * @brief Wait for device to be ready for new als operation or max pollign loop (time out) |
gallonm | 1:1de1ea2994d9 | 724 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 725 | * @param MaxLoop Max Number of i2c polling loop see @a #msec_2_i2cloop |
gallonm | 1:1de1ea2994d9 | 726 | * @return 0 on success. <0 when @a VL6180x_ErrCode_t::TIME_OUT if timed out |
gallonm | 1:1de1ea2994d9 | 727 | */ |
gallonm | 1:1de1ea2994d9 | 728 | int VL6180x_AlsWaitDeviceReady(VL6180xDev_t dev, int MaxLoop ); |
gallonm | 1:1de1ea2994d9 | 729 | |
gallonm | 1:1de1ea2994d9 | 730 | /** |
gallonm | 1:1de1ea2994d9 | 731 | * @brief Set ALS system mode and start/stop measure |
gallonm | 1:1de1ea2994d9 | 732 | * |
gallonm | 1:1de1ea2994d9 | 733 | * @warning When used outside after single shot polling, \n |
gallonm | 1:1de1ea2994d9 | 734 | * User must ensure the device state is ready before issuing a new command (using @a VL6180x_AlsWaitDeviceReady()). \n |
gallonm | 1:1de1ea2994d9 | 735 | * Non respect of this, can cause loss of interrupt or device hanging. |
gallonm | 1:1de1ea2994d9 | 736 | * |
gallonm | 1:1de1ea2994d9 | 737 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 738 | * @param mode A combination of working mode (#MODE_SINGLESHOT or #MODE_CONTINUOUS) and start condition (#MODE_START_STOP) \n |
gallonm | 1:1de1ea2994d9 | 739 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 740 | */ |
gallonm | 1:1de1ea2994d9 | 741 | int VL6180x_AlsSetSystemMode(VL6180xDev_t dev, uint8_t mode); |
gallonm | 1:1de1ea2994d9 | 742 | |
gallonm | 1:1de1ea2994d9 | 743 | /** @} */ |
gallonm | 1:1de1ea2994d9 | 744 | #endif |
gallonm | 1:1de1ea2994d9 | 745 | |
gallonm | 1:1de1ea2994d9 | 746 | /** @defgroup api_ll_misc Misc functions |
gallonm | 1:1de1ea2994d9 | 747 | * @brief Misc functions |
gallonm | 1:1de1ea2994d9 | 748 | * @ingroup api_ll |
gallonm | 1:1de1ea2994d9 | 749 | * @{ |
gallonm | 1:1de1ea2994d9 | 750 | */ |
gallonm | 1:1de1ea2994d9 | 751 | |
gallonm | 1:1de1ea2994d9 | 752 | /** |
gallonm | 1:1de1ea2994d9 | 753 | * Set Group parameter Hold state |
gallonm | 1:1de1ea2994d9 | 754 | * |
gallonm | 1:1de1ea2994d9 | 755 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 756 | * Group parameter holds @a #SYSTEM_GROUPED_PARAMETER_HOLD enable safe update (non atomic across multiple measure) by host |
gallonm | 1:1de1ea2994d9 | 757 | * \n The critical register group is composed of: \n |
gallonm | 1:1de1ea2994d9 | 758 | * #SYSTEM_INTERRUPT_CONFIG_GPIO \n |
gallonm | 1:1de1ea2994d9 | 759 | * #SYSRANGE_THRESH_HIGH \n |
gallonm | 1:1de1ea2994d9 | 760 | * #SYSRANGE_THRESH_LOW \n |
gallonm | 1:1de1ea2994d9 | 761 | * #SYSALS_INTEGRATION_PERIOD \n |
gallonm | 1:1de1ea2994d9 | 762 | * #SYSALS_ANALOGUE_GAIN \n |
gallonm | 1:1de1ea2994d9 | 763 | * #SYSALS_THRESH_HIGH \n |
gallonm | 1:1de1ea2994d9 | 764 | * #SYSALS_THRESH_LOW |
gallonm | 1:1de1ea2994d9 | 765 | * |
gallonm | 1:1de1ea2994d9 | 766 | * |
gallonm | 1:1de1ea2994d9 | 767 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 768 | * @param Hold Group parameter Hold state to be set (on/off) |
gallonm | 1:1de1ea2994d9 | 769 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 770 | */ |
gallonm | 1:1de1ea2994d9 | 771 | int VL6180x_SetGroupParamHold(VL6180xDev_t dev, int Hold); |
gallonm | 1:1de1ea2994d9 | 772 | |
gallonm | 1:1de1ea2994d9 | 773 | /** |
gallonm | 1:1de1ea2994d9 | 774 | * @brief Set new device i2c address |
gallonm | 1:1de1ea2994d9 | 775 | * |
gallonm | 1:1de1ea2994d9 | 776 | * After completion the device will answer to the new address programmed. |
gallonm | 1:1de1ea2994d9 | 777 | * |
gallonm | 1:1de1ea2994d9 | 778 | * @sa AN4478: Using multiple VL6180X's in a single design |
gallonm | 1:1de1ea2994d9 | 779 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 780 | * @param NewAddr The new i2c address (7bit) |
gallonm | 1:1de1ea2994d9 | 781 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 782 | */ |
gallonm | 1:1de1ea2994d9 | 783 | int VL6180x_SetI2CAddress(VL6180xDev_t dev, uint8_t NewAddr); |
gallonm | 1:1de1ea2994d9 | 784 | |
gallonm | 1:1de1ea2994d9 | 785 | /** |
gallonm | 1:1de1ea2994d9 | 786 | * @brief Fully configure gpio 0/1 pin : polarity and functionality |
gallonm | 1:1de1ea2994d9 | 787 | * |
gallonm | 1:1de1ea2994d9 | 788 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 789 | * @param pin gpio pin 0 or 1 |
gallonm | 1:1de1ea2994d9 | 790 | * @param IntFunction Pin functionality : either #GPIOx_SELECT_OFF or #GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT (refer to #SYSTEM_MODE_GPIO1 register definition) |
gallonm | 1:1de1ea2994d9 | 791 | * @param ActiveHigh Set active high polarity, or active low see @a ::IntrPol_e |
gallonm | 1:1de1ea2994d9 | 792 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 793 | */ |
gallonm | 1:1de1ea2994d9 | 794 | int VL6180x_SetupGPIOx(VL6180xDev_t dev, int pin, uint8_t IntFunction, int ActiveHigh); |
gallonm | 1:1de1ea2994d9 | 795 | |
gallonm | 1:1de1ea2994d9 | 796 | |
gallonm | 1:1de1ea2994d9 | 797 | /** |
gallonm | 1:1de1ea2994d9 | 798 | * @brief Set interrupt pin polarity for the given GPIO |
gallonm | 1:1de1ea2994d9 | 799 | * |
gallonm | 1:1de1ea2994d9 | 800 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 801 | * @param pin Pin 0 or 1 |
gallonm | 1:1de1ea2994d9 | 802 | * @param active_high select active high or low polarity using @ref IntrPol_e |
gallonm | 1:1de1ea2994d9 | 803 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 804 | */ |
gallonm | 1:1de1ea2994d9 | 805 | int VL6180x_SetGPIOxPolarity(VL6180xDev_t dev, int pin, int active_high); |
gallonm | 1:1de1ea2994d9 | 806 | |
gallonm | 1:1de1ea2994d9 | 807 | /** |
gallonm | 1:1de1ea2994d9 | 808 | * Select interrupt functionality for the given GPIO |
gallonm | 1:1de1ea2994d9 | 809 | * |
gallonm | 1:1de1ea2994d9 | 810 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 811 | * Functionality refer to @a SYSTEM_MODE_GPIO0 |
gallonm | 1:1de1ea2994d9 | 812 | * |
gallonm | 1:1de1ea2994d9 | 813 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 814 | * @param pin Pin to configure 0 or 1 (gpio0 or gpio1)\nNote that gpio0 is chip enable at power up ! |
gallonm | 1:1de1ea2994d9 | 815 | * @param functionality Pin functionality : either #GPIOx_SELECT_OFF or #GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT (refer to #SYSTEM_MODE_GPIO1 register definition) |
gallonm | 1:1de1ea2994d9 | 816 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 817 | */ |
gallonm | 1:1de1ea2994d9 | 818 | int VL6180x_SetGPIOxFunctionality(VL6180xDev_t dev, int pin, uint8_t functionality); |
gallonm | 1:1de1ea2994d9 | 819 | |
gallonm | 1:1de1ea2994d9 | 820 | /** |
gallonm | 1:1de1ea2994d9 | 821 | * #brief Disable and turn to Hi-Z gpio output pin |
gallonm | 1:1de1ea2994d9 | 822 | * |
gallonm | 1:1de1ea2994d9 | 823 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 824 | * @param pin The pin number to disable 0 or 1 |
gallonm | 1:1de1ea2994d9 | 825 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 826 | */ |
gallonm | 1:1de1ea2994d9 | 827 | int VL6180x_DisableGPIOxOut(VL6180xDev_t dev, int pin); |
gallonm | 1:1de1ea2994d9 | 828 | |
gallonm | 1:1de1ea2994d9 | 829 | /** |
gallonm | 1:1de1ea2994d9 | 830 | * @def msec_2_i2cloop |
gallonm | 1:1de1ea2994d9 | 831 | * @brief Number of I2C polling loop (an 8 bit register) to run for maximal wait time. |
gallonm | 1:1de1ea2994d9 | 832 | * |
gallonm | 1:1de1ea2994d9 | 833 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 834 | * When polling via I2C the overall time is mainly the I2C transaction time because it is a slow bus |
gallonm | 1:1de1ea2994d9 | 835 | * one 8 bit register poll on I2C bus timing is shown below: \n |
gallonm | 1:1de1ea2994d9 | 836 | * start + addr_w(a) + 2x8bit index(a) + stop + start + addr_rd(a) + 1x8bit data_rd(a) + stop \n |
gallonm | 1:1de1ea2994d9 | 837 | * 1 8 1 2*(8+1) 1 1 8 1 8 1 1 \n |
gallonm | 1:1de1ea2994d9 | 838 | * so 49 serial bits |
gallonm | 1:1de1ea2994d9 | 839 | * |
gallonm | 1:1de1ea2994d9 | 840 | * @param time_ms Time to wait in milli second 10 |
gallonm | 1:1de1ea2994d9 | 841 | * @param i2c_khz I2C bus frequencies in KHz for instance 400 |
gallonm | 1:1de1ea2994d9 | 842 | * @return The number of loops (at least 1) |
gallonm | 1:1de1ea2994d9 | 843 | */ |
gallonm | 1:1de1ea2994d9 | 844 | #define msec_2_i2cloop( time_ms, i2c_khz ) (((time_ms)*(i2c_khz)/49)+1) |
gallonm | 1:1de1ea2994d9 | 845 | |
gallonm | 1:1de1ea2994d9 | 846 | /** @} */ |
gallonm | 1:1de1ea2994d9 | 847 | |
gallonm | 1:1de1ea2994d9 | 848 | |
gallonm | 1:1de1ea2994d9 | 849 | |
gallonm | 1:1de1ea2994d9 | 850 | /** |
gallonm | 1:1de1ea2994d9 | 851 | * polarity use in @a VL6180x_SetupGPIOx() , @a VL6180x_SetupGPIO1() |
gallonm | 1:1de1ea2994d9 | 852 | */ |
gallonm | 1:1de1ea2994d9 | 853 | typedef enum { |
gallonm | 1:1de1ea2994d9 | 854 | INTR_POL_LOW =0, /*!< set active low polarity best setup for falling edge */ |
gallonm | 1:1de1ea2994d9 | 855 | INTR_POL_HIGH =1, /*!< set active high polarity best setup for rising edge */ |
gallonm | 1:1de1ea2994d9 | 856 | }IntrPol_e; |
gallonm | 1:1de1ea2994d9 | 857 | |
gallonm | 1:1de1ea2994d9 | 858 | /** @defgroup api_ll_intr Interrupts management functions |
gallonm | 1:1de1ea2994d9 | 859 | * @brief Interrupts management functions |
gallonm | 1:1de1ea2994d9 | 860 | * @ingroup api_ll |
gallonm | 1:1de1ea2994d9 | 861 | * @{ |
gallonm | 1:1de1ea2994d9 | 862 | */ |
gallonm | 1:1de1ea2994d9 | 863 | |
gallonm | 1:1de1ea2994d9 | 864 | /** |
gallonm | 1:1de1ea2994d9 | 865 | * @brief Get all interrupts cause |
gallonm | 1:1de1ea2994d9 | 866 | * |
gallonm | 1:1de1ea2994d9 | 867 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 868 | * @param status Ptr to interrupt status. You can use @a IntrStatus_t::val |
gallonm | 1:1de1ea2994d9 | 869 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 870 | */ |
gallonm | 1:1de1ea2994d9 | 871 | int VL6180x_GetInterruptStatus(VL6180xDev_t dev, uint8_t *status); |
gallonm | 1:1de1ea2994d9 | 872 | |
gallonm | 1:1de1ea2994d9 | 873 | /** |
gallonm | 1:1de1ea2994d9 | 874 | * @brief Clear given system interrupt condition |
gallonm | 1:1de1ea2994d9 | 875 | * |
gallonm | 1:1de1ea2994d9 | 876 | * @par Function Description |
gallonm | 1:1de1ea2994d9 | 877 | * Clear given interrupt cause by writing into register #SYSTEM_INTERRUPT_CLEAR register. |
gallonm | 1:1de1ea2994d9 | 878 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 879 | * @param IntClear Which interrupt source to clear. Use any combinations of #INTERRUPT_CLEAR_RANGING , #INTERRUPT_CLEAR_ALS , #INTERRUPT_CLEAR_ERROR. |
gallonm | 1:1de1ea2994d9 | 880 | * @return 0 On success |
gallonm | 1:1de1ea2994d9 | 881 | */ |
gallonm | 1:1de1ea2994d9 | 882 | int VL6180x_ClearInterrupt(VL6180xDev_t dev, uint8_t IntClear ); |
gallonm | 1:1de1ea2994d9 | 883 | |
gallonm | 1:1de1ea2994d9 | 884 | /** |
gallonm | 1:1de1ea2994d9 | 885 | * @brief Clear error interrupt |
gallonm | 1:1de1ea2994d9 | 886 | * |
gallonm | 1:1de1ea2994d9 | 887 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 888 | * @return 0 On success |
gallonm | 1:1de1ea2994d9 | 889 | */ |
gallonm | 1:1de1ea2994d9 | 890 | #define VL6180x_ClearErrorInterrupt(dev) VL6180x_ClearInterrupt(dev, INTERRUPT_CLEAR_ERROR) |
gallonm | 1:1de1ea2994d9 | 891 | |
gallonm | 1:1de1ea2994d9 | 892 | /** |
gallonm | 1:1de1ea2994d9 | 893 | * @brief Clear All interrupt causes (als+range+error) |
gallonm | 1:1de1ea2994d9 | 894 | * |
gallonm | 1:1de1ea2994d9 | 895 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 896 | * @return 0 On success |
gallonm | 1:1de1ea2994d9 | 897 | */ |
gallonm | 1:1de1ea2994d9 | 898 | #define VL6180x_ClearAllInterrupt(dev) VL6180x_ClearInterrupt(dev, INTERRUPT_CLEAR_ERROR|INTERRUPT_CLEAR_RANGING|INTERRUPT_CLEAR_ALS) |
gallonm | 1:1de1ea2994d9 | 899 | |
gallonm | 1:1de1ea2994d9 | 900 | /** @} */ |
gallonm | 1:1de1ea2994d9 | 901 | |
gallonm | 1:1de1ea2994d9 | 902 | |
gallonm | 1:1de1ea2994d9 | 903 | /** @defgroup api_reg API Register access functions |
gallonm | 1:1de1ea2994d9 | 904 | * @brief Registers access functions called by API core functions |
gallonm | 1:1de1ea2994d9 | 905 | * @ingroup api_ll |
gallonm | 1:1de1ea2994d9 | 906 | * @{ |
gallonm | 1:1de1ea2994d9 | 907 | */ |
gallonm | 1:1de1ea2994d9 | 908 | |
gallonm | 1:1de1ea2994d9 | 909 | /** |
gallonm | 1:1de1ea2994d9 | 910 | * Write VL6180x single byte register |
gallonm | 1:1de1ea2994d9 | 911 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 912 | * @param index The register index |
gallonm | 1:1de1ea2994d9 | 913 | * @param data 8 bit register data |
gallonm | 1:1de1ea2994d9 | 914 | * @return success |
gallonm | 1:1de1ea2994d9 | 915 | */ |
gallonm | 1:1de1ea2994d9 | 916 | int VL6180x_WrByte(VL6180xDev_t dev, uint16_t index, uint8_t data); |
gallonm | 1:1de1ea2994d9 | 917 | /** |
gallonm | 1:1de1ea2994d9 | 918 | * Thread safe VL6180x Update (rd/modify/write) single byte register |
gallonm | 1:1de1ea2994d9 | 919 | * |
gallonm | 1:1de1ea2994d9 | 920 | * Final_reg = (Initial_reg & and_data) |or_data |
gallonm | 1:1de1ea2994d9 | 921 | * |
gallonm | 1:1de1ea2994d9 | 922 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 923 | * @param index The register index |
gallonm | 1:1de1ea2994d9 | 924 | * @param AndData 8 bit and data |
gallonm | 1:1de1ea2994d9 | 925 | * @param OrData 8 bit or data |
gallonm | 1:1de1ea2994d9 | 926 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 927 | */ |
gallonm | 1:1de1ea2994d9 | 928 | int VL6180x_UpdateByte(VL6180xDev_t dev, uint16_t index, uint8_t AndData, uint8_t OrData); |
gallonm | 1:1de1ea2994d9 | 929 | /** |
gallonm | 1:1de1ea2994d9 | 930 | * Write VL6180x word register |
gallonm | 1:1de1ea2994d9 | 931 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 932 | * @param index The register index |
gallonm | 1:1de1ea2994d9 | 933 | * @param data 16 bit register data |
gallonm | 1:1de1ea2994d9 | 934 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 935 | */ |
gallonm | 1:1de1ea2994d9 | 936 | int VL6180x_WrWord(VL6180xDev_t dev, uint16_t index, uint16_t data); |
gallonm | 1:1de1ea2994d9 | 937 | /** |
gallonm | 1:1de1ea2994d9 | 938 | * Write VL6180x double word (4 byte) register |
gallonm | 1:1de1ea2994d9 | 939 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 940 | * @param index The register index |
gallonm | 1:1de1ea2994d9 | 941 | * @param data 32 bit register data |
gallonm | 1:1de1ea2994d9 | 942 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 943 | */ |
gallonm | 1:1de1ea2994d9 | 944 | int VL6180x_WrDWord(VL6180xDev_t dev, uint16_t index, uint32_t data); |
gallonm | 1:1de1ea2994d9 | 945 | |
gallonm | 1:1de1ea2994d9 | 946 | /** |
gallonm | 1:1de1ea2994d9 | 947 | * Read VL6180x single byte register |
gallonm | 1:1de1ea2994d9 | 948 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 949 | * @param index The register index |
gallonm | 1:1de1ea2994d9 | 950 | * @param data pointer to 8 bit data |
gallonm | 1:1de1ea2994d9 | 951 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 952 | */ |
gallonm | 1:1de1ea2994d9 | 953 | int VL6180x_RdByte(VL6180xDev_t dev, uint16_t index, uint8_t *data); |
gallonm | 1:1de1ea2994d9 | 954 | |
gallonm | 1:1de1ea2994d9 | 955 | /** |
gallonm | 1:1de1ea2994d9 | 956 | * Read VL6180x word (2byte) register |
gallonm | 1:1de1ea2994d9 | 957 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 958 | * @param index The register index |
gallonm | 1:1de1ea2994d9 | 959 | * @param data pointer to 16 bit data |
gallonm | 1:1de1ea2994d9 | 960 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 961 | */ |
gallonm | 1:1de1ea2994d9 | 962 | int VL6180x_RdWord(VL6180xDev_t dev, uint16_t index, uint16_t *data); |
gallonm | 1:1de1ea2994d9 | 963 | |
gallonm | 1:1de1ea2994d9 | 964 | /** |
gallonm | 1:1de1ea2994d9 | 965 | * Read VL6180x dword (4byte) register |
gallonm | 1:1de1ea2994d9 | 966 | * @param dev The device |
gallonm | 1:1de1ea2994d9 | 967 | * @param index The register index |
gallonm | 1:1de1ea2994d9 | 968 | * @param data pointer to 32 bit data |
gallonm | 1:1de1ea2994d9 | 969 | * @return 0 on success |
gallonm | 1:1de1ea2994d9 | 970 | */ |
gallonm | 1:1de1ea2994d9 | 971 | int VL6180x_RdDWord(VL6180xDev_t dev, uint16_t index, uint32_t *data); |
gallonm | 1:1de1ea2994d9 | 972 | |
gallonm | 1:1de1ea2994d9 | 973 | /** @} */ |
gallonm | 1:1de1ea2994d9 | 974 | |
gallonm | 1:1de1ea2994d9 | 975 | |
gallonm | 1:1de1ea2994d9 | 976 | |
gallonm | 1:1de1ea2994d9 | 977 | |
gallonm | 1:1de1ea2994d9 | 978 | #ifdef __cplusplus |
gallonm | 1:1de1ea2994d9 | 979 | } |
gallonm | 1:1de1ea2994d9 | 980 | #endif |
gallonm | 1:1de1ea2994d9 | 981 | |
gallonm | 1:1de1ea2994d9 | 982 | #endif /* VL6180x_API_H_ */ |