use VL6180XA1 chip wothout X-NUCLEO-6180XA1 Board. Simple way to use the chip.

Dependents:   Check_VL6180XA1_ToF

Fork of X_NUCLEO_6180XA1 by ST

Committer:
kenjiArai
Date:
Thu Feb 01 12:05:43 2018 +0000
Revision:
60:972b4898a007
Parent:
59:81afbb75311d
more simple / delete DevI2C and others

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Davidroid 57:fa4c622b04a7 1 /**
Davidroid 57:fa4c622b04a7 2 ******************************************************************************
Davidroid 57:fa4c622b04a7 3 * @file VL6180X.h
Davidroid 57:fa4c622b04a7 4 * @author AST / EST
Davidroid 57:fa4c622b04a7 5 * @version V0.0.1
Davidroid 57:fa4c622b04a7 6 * @date 9-November-2015
Davidroid 57:fa4c622b04a7 7 * @brief Header file for component VL6180X
Davidroid 57:fa4c622b04a7 8 ******************************************************************************
Davidroid 57:fa4c622b04a7 9 * @attention
Davidroid 57:fa4c622b04a7 10 *
Davidroid 57:fa4c622b04a7 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
Davidroid 57:fa4c622b04a7 12 *
Davidroid 57:fa4c622b04a7 13 * Redistribution and use in source and binary forms, with or without modification,
Davidroid 57:fa4c622b04a7 14 * are permitted provided that the following conditions are met:
Davidroid 57:fa4c622b04a7 15 * 1. Redistributions of source code must retain the above copyright notice,
Davidroid 57:fa4c622b04a7 16 * this list of conditions and the following disclaimer.
Davidroid 57:fa4c622b04a7 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
Davidroid 57:fa4c622b04a7 18 * this list of conditions and the following disclaimer in the documentation
Davidroid 57:fa4c622b04a7 19 * and/or other materials provided with the distribution.
Davidroid 57:fa4c622b04a7 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Davidroid 57:fa4c622b04a7 21 * may be used to endorse or promote products derived from this software
Davidroid 57:fa4c622b04a7 22 * without specific prior written permission.
Davidroid 57:fa4c622b04a7 23 *
Davidroid 57:fa4c622b04a7 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Davidroid 57:fa4c622b04a7 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Davidroid 57:fa4c622b04a7 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Davidroid 57:fa4c622b04a7 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Davidroid 57:fa4c622b04a7 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Davidroid 57:fa4c622b04a7 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Davidroid 57:fa4c622b04a7 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Davidroid 57:fa4c622b04a7 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Davidroid 57:fa4c622b04a7 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Davidroid 57:fa4c622b04a7 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Davidroid 57:fa4c622b04a7 34 *
Davidroid 57:fa4c622b04a7 35 ******************************************************************************
Davidroid 57:fa4c622b04a7 36 */
Davidroid 57:fa4c622b04a7 37
kenjiArai 60:972b4898a007 38 //------- Feburary 1st, 2018 by JH1PJL / K.Arai --------------------------------
kenjiArai 60:972b4898a007 39 // Change X_NUCLEO_6180XA1 library to 6180XA1_simplest library
kenjiArai 60:972b4898a007 40 // modified -> all related files
kenjiArai 59:81afbb75311d 41 //------------------------------------------------------------------------------
Davidroid 57:fa4c622b04a7 42
Davidroid 57:fa4c622b04a7 43 #ifndef __VL6180X_CLASS_H
Davidroid 57:fa4c622b04a7 44 #define __VL6180X_CLASS_H
Davidroid 57:fa4c622b04a7 45
Davidroid 57:fa4c622b04a7 46 /* Includes ------------------------------------------------------------------*/
kenjiArai 60:972b4898a007 47 #include "mbed.h"
Davidroid 57:fa4c622b04a7 48 #include "vl6180x_cfg.h"
Davidroid 57:fa4c622b04a7 49 #include "vl6180x_def.h"
Davidroid 57:fa4c622b04a7 50
Davidroid 57:fa4c622b04a7 51 /* Definitions ---------------------------------------------------------------*/
Davidroid 57:fa4c622b04a7 52 #define DEFAULT_DEVICE_ADDRESS 0x29
Davidroid 57:fa4c622b04a7 53
Davidroid 57:fa4c622b04a7 54 /* Types ---------------------------------------------------------------------*/
Davidroid 57:fa4c622b04a7 55
Davidroid 57:fa4c622b04a7 56 /* data struct containing range measure, light measure and type of error provided to the user
kenjiArai 59:81afbb75311d 57 in case of invalid data range_mm=0xFFFFFFFF and lux=0xFFFFFFFF */
kenjiArai 59:81afbb75311d 58 typedef struct MeasureData {
kenjiArai 59:81afbb75311d 59 uint32_t range_mm;
kenjiArai 59:81afbb75311d 60 uint32_t lux;
kenjiArai 59:81afbb75311d 61 uint32_t range_error;
kenjiArai 59:81afbb75311d 62 uint32_t als_error;
kenjiArai 59:81afbb75311d 63 uint32_t int_error;
Davidroid 57:fa4c622b04a7 64 } measure_data_t;
Davidroid 57:fa4c622b04a7 65
kenjiArai 59:81afbb75311d 66 /* sensor operating modes */
kenjiArai 59:81afbb75311d 67 typedef enum {
kenjiArai 59:81afbb75311d 68 range_single_shot_polling=1,
kenjiArai 59:81afbb75311d 69 als_single_shot_polling,
kenjiArai 59:81afbb75311d 70 range_continuous_polling,
kenjiArai 59:81afbb75311d 71 als_continuous_polling,
Davidroid 57:fa4c622b04a7 72 } operating_mode_t;
Davidroid 57:fa4c622b04a7 73
kenjiArai 60:972b4898a007 74 struct MyVL6180Dev_t {
kenjiArai 60:972b4898a007 75 struct VL6180XDevData_t Data;
kenjiArai 60:972b4898a007 76 uint8_t I2cAddr;
kenjiArai 60:972b4898a007 77 unsigned Present:1;
kenjiArai 60:972b4898a007 78 unsigned Ready:1;
kenjiArai 60:972b4898a007 79 };
kenjiArai 60:972b4898a007 80 typedef struct MyVL6180Dev_t *VL6180XDev_t;
kenjiArai 60:972b4898a007 81
kenjiArai 60:972b4898a007 82 /** Interface for STMicronics VL6180X
kenjiArai 60:972b4898a007 83 * Proximity sensor, gesture and ambient light sensing (ALS) module
kenjiArai 60:972b4898a007 84 *
kenjiArai 60:972b4898a007 85 * @code
kenjiArai 60:972b4898a007 86 * #include "mbed.h"
kenjiArai 60:972b4898a007 87 *
kenjiArai 60:972b4898a007 88 * // I2C Communication
kenjiArai 60:972b4898a007 89 * VL6180X sensor(I2C_SDA, I2C_SCL, D8); // SDA, SCL & Chip Enable
kenjiArai 60:972b4898a007 90 * // If you connected I2C line not only this device but also other devices,
kenjiArai 60:972b4898a007 91 * // you need to declare following method.
kenjiArai 60:972b4898a007 92 * I2C i2c(I2C_SDA, I2C_SCL);
kenjiArai 60:972b4898a007 93 * VL6180X sensor(i2c, D8); // I2C, Chip Enable
kenjiArai 60:972b4898a007 94 *
kenjiArai 60:972b4898a007 95 * int main()
kenjiArai 60:972b4898a007 96 * {
kenjiArai 60:972b4898a007 97 * uint32_t lux;
kenjiArai 60:972b4898a007 98 * uint32_t dist;
kenjiArai 60:972b4898a007 99 *
kenjiArai 60:972b4898a007 100 * while (true) {
kenjiArai 60:972b4898a007 101 * sensor.get_distance(&dist);
kenjiArai 60:972b4898a007 102 * sensor.get_lux(&lux);
kenjiArai 60:972b4898a007 103 * wait_ms(500);
kenjiArai 60:972b4898a007 104 * }
kenjiArai 60:972b4898a007 105 * }
kenjiArai 60:972b4898a007 106 * @endcode
kenjiArai 60:972b4898a007 107 */
Davidroid 57:fa4c622b04a7 108
Davidroid 57:fa4c622b04a7 109 /* Classes -------------------------------------------------------------------*/
Davidroid 57:fa4c622b04a7 110 /**
Davidroid 57:fa4c622b04a7 111 * Class representing a VL6180X sensor component
Davidroid 57:fa4c622b04a7 112 */
kenjiArai 60:972b4898a007 113 class VL6180X
Davidroid 57:fa4c622b04a7 114 {
Davidroid 57:fa4c622b04a7 115 public:
kenjiArai 60:972b4898a007 116 /** Constructor 1
kenjiArai 60:972b4898a007 117 * @param[in] Pin for I2C SDA & SDL
kenjiArai 59:81afbb75311d 118 * @param[in] pin Mbed DigitalOut PinName to be used as component GPIO_0 CE
kenjiArai 59:81afbb75311d 119 * @param[in] DevAddr device address, 0x29 by default
Davidroid 57:fa4c622b04a7 120 */
kenjiArai 60:972b4898a007 121 VL6180X(PinName p_sda, PinName p_scl,PinName ce_pin, uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS)
kenjiArai 60:972b4898a007 122 : _i2c_p(new I2C(p_sda, p_scl)), _i2c(*_i2c_p), _gpio0(ce_pin)
kenjiArai 60:972b4898a007 123 {
kenjiArai 59:81afbb75311d 124 _my_device.I2cAddr=DevAddr;
Davidroid 57:fa4c622b04a7 125 _my_device.Present=0;
Davidroid 57:fa4c622b04a7 126 _my_device.Ready=0;
Davidroid 57:fa4c622b04a7 127 _device=&_my_device;;
kenjiArai 60:972b4898a007 128 init();
kenjiArai 59:81afbb75311d 129 }
kenjiArai 59:81afbb75311d 130
kenjiArai 60:972b4898a007 131 /** Constructor 2
kenjiArai 60:972b4898a007 132 * @param[in] &i2c device I2C to be used for communication
kenjiArai 60:972b4898a007 133 * @param[in] pin Mbed DigitalOut PinName to be used as component GPIO_0 CE
kenjiArai 60:972b4898a007 134 * @param[in] DevAddr device address, 0x29 by default
kenjiArai 59:81afbb75311d 135 */
kenjiArai 60:972b4898a007 136 VL6180X(I2C& p_i2c, PinName ce_pin, uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS)
kenjiArai 60:972b4898a007 137 : _i2c(p_i2c), _gpio0(ce_pin)
kenjiArai 60:972b4898a007 138 {
kenjiArai 60:972b4898a007 139 _my_device.I2cAddr=DevAddr;
kenjiArai 60:972b4898a007 140 _my_device.Present=0;
kenjiArai 59:81afbb75311d 141 _my_device.Ready=0;
kenjiArai 60:972b4898a007 142 _device=&_my_device;;
kenjiArai 60:972b4898a007 143 init();
kenjiArai 59:81afbb75311d 144 }
kenjiArai 59:81afbb75311d 145
kenjiArai 59:81afbb75311d 146 /**
kenjiArai 60:972b4898a007 147 * @brief Get a single distance measure result
kenjiArai 60:972b4898a007 148 *
kenjiArai 60:972b4898a007 149 * @par Function Description
kenjiArai 60:972b4898a007 150 * It can be called after having initialized a component. It start a single
kenjiArai 60:972b4898a007 151 * distance measure in polling mode and wait until the measure is finisched.
kenjiArai 60:972b4898a007 152 * The function block until the measure is finished, it can blocks indefinitely
kenjiArai 60:972b4898a007 153 * in case the measure never ends for any reason \n
kenjiArai 60:972b4898a007 154 *
kenjiArai 60:972b4898a007 155 * @param pi_data Pointer to distance
kenjiArai 60:972b4898a007 156 * @return 0 on success
kenjiArai 59:81afbb75311d 157 */
kenjiArai 60:972b4898a007 158 virtual int get_distance(uint32_t *pi_data) {
kenjiArai 60:972b4898a007 159 int status=0;
kenjiArai 60:972b4898a007 160 status=start_measurement(range_single_shot_polling);
kenjiArai 60:972b4898a007 161 if (!status) {
kenjiArai 60:972b4898a007 162 VL6180X_RangeWaitDeviceReady(_device, 2000);
kenjiArai 60:972b4898a007 163 for (status=1; status!=0; status=VL6180X_RangeGetResult(_device, pi_data));
kenjiArai 59:81afbb75311d 164 }
kenjiArai 60:972b4898a007 165 stop_measurement(range_single_shot_polling);
kenjiArai 60:972b4898a007 166 VL6180X_RangeWaitDeviceReady(_device, 2000);
kenjiArai 60:972b4898a007 167 return status;
Davidroid 57:fa4c622b04a7 168 }
Davidroid 57:fa4c622b04a7 169
kenjiArai 59:81afbb75311d 170 /**
kenjiArai 60:972b4898a007 171 * @brief Get a single light (in Lux) measure result
kenjiArai 60:972b4898a007 172 *
kenjiArai 60:972b4898a007 173 * @par Function Description
kenjiArai 60:972b4898a007 174 * It can be called after having initialized a component. It start a single
kenjiArai 60:972b4898a007 175 * light measure in polling mode and wait until the measure is finisched.
kenjiArai 60:972b4898a007 176 * The function block until the measure is finished, it can blocks indefinitely
kenjiArai 60:972b4898a007 177 * in case the measure never ends for any reason \n
kenjiArai 59:81afbb75311d 178 */
kenjiArai 60:972b4898a007 179 virtual int get_lux(uint32_t *pi_data) {
kenjiArai 60:972b4898a007 180 int status=0;
kenjiArai 59:81afbb75311d 181
kenjiArai 60:972b4898a007 182 status = start_measurement(als_single_shot_polling);
kenjiArai 60:972b4898a007 183 if (!status) {
kenjiArai 60:972b4898a007 184 VL6180X_AlsWaitDeviceReady(_device, 2000);
kenjiArai 60:972b4898a007 185 for (status=1; status!=0; status=VL6180X_AlsGetLux(_device, pi_data));
kenjiArai 60:972b4898a007 186 }
kenjiArai 60:972b4898a007 187 stop_measurement(als_single_shot_polling);
kenjiArai 60:972b4898a007 188 VL6180X_AlsWaitDeviceReady(_device, 2000);
kenjiArai 60:972b4898a007 189 return status;
Davidroid 57:fa4c622b04a7 190 }
Davidroid 57:fa4c622b04a7 191
kenjiArai 59:81afbb75311d 192 /**
kenjiArai 59:81afbb75311d 193 *
kenjiArai 59:81afbb75311d 194 * @brief One time device initialization
kenjiArai 59:81afbb75311d 195 *
kenjiArai 59:81afbb75311d 196 * To be called once and only once after device is brought out of reset (Chip enable) and booted see @a VL6180X_WaitDeviceBooted()
kenjiArai 59:81afbb75311d 197 *
kenjiArai 59:81afbb75311d 198 * @par Function Description
kenjiArai 59:81afbb75311d 199 * When not used after a fresh device "power up" or reset, it may return @a #CALIBRATION_WARNING
kenjiArai 59:81afbb75311d 200 * meaning wrong calibration data may have been fetched from device that can result in ranging offset error\n
kenjiArai 59:81afbb75311d 201 * If application cannot execute device reset or need to run VL6180X_InitData multiple time
kenjiArai 59:81afbb75311d 202 * then it must ensure proper offset calibration saving and restore on its own
kenjiArai 59:81afbb75311d 203 * by using @a VL6180X_GetOffsetCalibrationData() on first power up and then @a VL6180X_SetOffsetCalibrationData() all all subsequent init
kenjiArai 59:81afbb75311d 204 *
kenjiArai 59:81afbb75311d 205 * @param void
kenjiArai 59:81afbb75311d 206 * @return 0 on success, @a #CALIBRATION_WARNING if failed
kenjiArai 59:81afbb75311d 207 */
kenjiArai 60:972b4898a007 208 int init(void) {
kenjiArai 59:81afbb75311d 209 int status;
kenjiArai 59:81afbb75311d 210
kenjiArai 60:972b4898a007 211 _gpio0 = 0;
kenjiArai 60:972b4898a007 212 for(volatile uint32_t i = 0; i < 100000; i++) {
kenjiArai 60:972b4898a007 213 ;
kenjiArai 59:81afbb75311d 214 }
kenjiArai 60:972b4898a007 215 _gpio0 = 1;
kenjiArai 60:972b4898a007 216 for(volatile uint32_t i = 0; i < 100000; i++) {
kenjiArai 60:972b4898a007 217 ;
kenjiArai 60:972b4898a007 218 }
kenjiArai 60:972b4898a007 219 status = VL6180X_WaitDeviceBooted(_device);
kenjiArai 60:972b4898a007 220 status = IsPresent();
kenjiArai 59:81afbb75311d 221 if(!status) {
kenjiArai 59:81afbb75311d 222 _device->Present=1;
kenjiArai 59:81afbb75311d 223 VL6180X_InitData(_device);
kenjiArai 59:81afbb75311d 224 if(status) {
kenjiArai 59:81afbb75311d 225 printf("Failed to init VL6180X sensor!\n\r");
kenjiArai 59:81afbb75311d 226 return status;
kenjiArai 59:81afbb75311d 227 }
kenjiArai 60:972b4898a007 228 //status=prepare();
kenjiArai 60:972b4898a007 229 status = VL6180X_Prepare(_device);
kenjiArai 59:81afbb75311d 230 if(status) {
kenjiArai 59:81afbb75311d 231 printf("Failed to prepare VL6180X!\n\r");
kenjiArai 59:81afbb75311d 232 return status;
kenjiArai 59:81afbb75311d 233 }
kenjiArai 60:972b4898a007 234 _device->Ready = 1;
kenjiArai 59:81afbb75311d 235 }
kenjiArai 59:81afbb75311d 236 return status;
Davidroid 57:fa4c622b04a7 237 }
Davidroid 57:fa4c622b04a7 238
kenjiArai 60:972b4898a007 239 private:
kenjiArai 60:972b4898a007 240 static const unsigned int TEMP_BUF_SIZE = 32;
Davidroid 57:fa4c622b04a7 241
kenjiArai 59:81afbb75311d 242 /**
kenjiArai 60:972b4898a007 243 * @brief Writes a buffer towards the I2C peripheral device.
kenjiArai 60:972b4898a007 244 * @param pBuffer pointer to the byte-array data to send
kenjiArai 60:972b4898a007 245 * @param DeviceAddr specifies the peripheral device slave address.
kenjiArai 60:972b4898a007 246 * @param RegisterAddr specifies the internal address register
kenjiArai 60:972b4898a007 247 * where to start writing to (must be correctly masked).
kenjiArai 60:972b4898a007 248 * @param NumByteToWrite number of bytes to be written.
kenjiArai 60:972b4898a007 249 * @retval 0 if ok,
kenjiArai 60:972b4898a007 250 * @retval -1 if an I2C error has occured, or
kenjiArai 60:972b4898a007 251 * @retval -2 on temporary buffer overflow (i.e. NumByteToWrite was too high)
kenjiArai 60:972b4898a007 252 * @note On some devices if NumByteToWrite is greater
kenjiArai 60:972b4898a007 253 * than one, the RegisterAddr must be masked correctly!
kenjiArai 59:81afbb75311d 254 */
kenjiArai 60:972b4898a007 255 int i2c_write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
kenjiArai 60:972b4898a007 256 uint16_t NumByteToWrite) {
kenjiArai 60:972b4898a007 257 int ret;
kenjiArai 60:972b4898a007 258 uint8_t tmp[TEMP_BUF_SIZE];
Davidroid 57:fa4c622b04a7 259
kenjiArai 60:972b4898a007 260 if(NumByteToWrite >= TEMP_BUF_SIZE) return -2;
Davidroid 57:fa4c622b04a7 261
kenjiArai 60:972b4898a007 262 /* First, send device address. Then, send data and STOP condition */
kenjiArai 60:972b4898a007 263 tmp[0] = RegisterAddr;
kenjiArai 60:972b4898a007 264 memcpy(tmp+1, pBuffer, NumByteToWrite);
Davidroid 57:fa4c622b04a7 265
kenjiArai 60:972b4898a007 266 ret = _i2c.write(DeviceAddr, (const char*)tmp, NumByteToWrite+1, false);
Davidroid 57:fa4c622b04a7 267
kenjiArai 60:972b4898a007 268 if(ret) return -1;
kenjiArai 60:972b4898a007 269 return 0;
Davidroid 57:fa4c622b04a7 270 }
Davidroid 57:fa4c622b04a7 271
kenjiArai 59:81afbb75311d 272 /**
kenjiArai 60:972b4898a007 273 * @brief Reads a buffer from the I2C peripheral device.
kenjiArai 60:972b4898a007 274 * @param pBuffer pointer to the byte-array to read data in to
kenjiArai 60:972b4898a007 275 * @param DeviceAddr specifies the peripheral device slave address.
kenjiArai 60:972b4898a007 276 * @param RegisterAddr specifies the internal address register
kenjiArai 60:972b4898a007 277 * where to start reading from (must be correctly masked).
kenjiArai 60:972b4898a007 278 * @param NumByteToRead number of bytes to be read.
kenjiArai 60:972b4898a007 279 * @retval 0 if ok,
kenjiArai 60:972b4898a007 280 * @retval -1 if an I2C error has occured
kenjiArai 60:972b4898a007 281 * @note On some devices if NumByteToWrite is greater
kenjiArai 60:972b4898a007 282 * than one, the RegisterAddr must be masked correctly!
kenjiArai 59:81afbb75311d 283 */
kenjiArai 60:972b4898a007 284 int i2c_read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
kenjiArai 60:972b4898a007 285 uint16_t NumByteToRead) {
kenjiArai 60:972b4898a007 286 int ret;
Davidroid 57:fa4c622b04a7 287
kenjiArai 60:972b4898a007 288 /* Send device address, with no STOP condition */
kenjiArai 60:972b4898a007 289 ret = _i2c.write(DeviceAddr, (const char*)&RegisterAddr, 1, true);
kenjiArai 60:972b4898a007 290 if(!ret) {
kenjiArai 60:972b4898a007 291 /* Read data, with STOP condition */
kenjiArai 60:972b4898a007 292 ret = _i2c.read(DeviceAddr, (char*)pBuffer, NumByteToRead, false);
kenjiArai 60:972b4898a007 293 }
kenjiArai 59:81afbb75311d 294
kenjiArai 60:972b4898a007 295 if(ret) return -1;
kenjiArai 60:972b4898a007 296 return 0;
Davidroid 57:fa4c622b04a7 297 }
Davidroid 57:fa4c622b04a7 298
kenjiArai 60:972b4898a007 299 int start_measurement(operating_mode_t operating_mode);
kenjiArai 60:972b4898a007 300 int stop_measurement(operating_mode_t operating_mode);
Davidroid 57:fa4c622b04a7 301 int VL6180X_WaitDeviceBooted(VL6180XDev_t dev);
Davidroid 57:fa4c622b04a7 302 int VL6180X_InitData(VL6180XDev_t dev );
Davidroid 57:fa4c622b04a7 303 int VL6180X_Prepare(VL6180XDev_t dev);
Davidroid 57:fa4c622b04a7 304 int VL6180X_RangeSetMaxConvergenceTime(VL6180XDev_t dev, uint8_t MaxConTime_msec);
Davidroid 57:fa4c622b04a7 305 int VL6180X_RangeGetResult(VL6180XDev_t dev, uint32_t *pRange_mm);
Davidroid 57:fa4c622b04a7 306 int VL6180X_AlsSetIntegrationPeriod(VL6180XDev_t dev, uint16_t period_ms);
Davidroid 57:fa4c622b04a7 307 int VL6180X_AlsSetInterMeasurementPeriod(VL6180XDev_t dev, uint16_t intermeasurement_period_ms);
Davidroid 57:fa4c622b04a7 308 int VL6180X_AlsSetAnalogueGain(VL6180XDev_t dev, uint8_t gain);
Davidroid 57:fa4c622b04a7 309 int VL6180X_AlsSetThresholds(VL6180XDev_t dev, uint16_t low, uint16_t high);
Davidroid 57:fa4c622b04a7 310 int VL6180X_StaticInit(VL6180XDev_t dev);
Davidroid 57:fa4c622b04a7 311 int VL6180X_RangeWaitDeviceReady(VL6180XDev_t dev, int MaxLoop );
Davidroid 57:fa4c622b04a7 312 int VL6180X_RangeSetRawThresholds(VL6180XDev_t dev, uint8_t low, uint8_t high);
Davidroid 57:fa4c622b04a7 313 int VL6180X_RangeSetSystemMode(VL6180XDev_t dev, uint8_t mode);
kenjiArai 60:972b4898a007 314
Davidroid 57:fa4c622b04a7 315 int VL6180X_AlsWaitDeviceReady(VL6180XDev_t dev, int MaxLoop );
kenjiArai 59:81afbb75311d 316 int VL6180X_AlsSetSystemMode(VL6180XDev_t dev, uint8_t mode);
Davidroid 57:fa4c622b04a7 317 int VL6180X_SetGroupParamHold(VL6180XDev_t dev, int Hold);
kenjiArai 59:81afbb75311d 318
Davidroid 57:fa4c622b04a7 319 /* Other functions defined in api.c */
kenjiArai 59:81afbb75311d 320 int VL6180X_RangeStaticInit(VL6180XDev_t dev);
Davidroid 57:fa4c622b04a7 321 int VL6180X_AlsGetLux(VL6180XDev_t dev, lux_t *pLux);
Davidroid 57:fa4c622b04a7 322 int VL6180X_RangeSetEarlyConvergenceEestimateThreshold(VL6180XDev_t dev);
kenjiArai 59:81afbb75311d 323 int32_t _GetAveTotalTime(VL6180XDev_t dev);
kenjiArai 59:81afbb75311d 324
Davidroid 57:fa4c622b04a7 325 /* Read function of the ID device */
Davidroid 57:fa4c622b04a7 326 virtual int read_id(uint8_t *id);
kenjiArai 59:81afbb75311d 327
Davidroid 57:fa4c622b04a7 328 /* Write and read functions from I2C */
Davidroid 57:fa4c622b04a7 329 int VL6180X_WrByte(VL6180XDev_t dev, uint16_t index, uint8_t data);
Davidroid 57:fa4c622b04a7 330 int VL6180X_WrWord(VL6180XDev_t dev, uint16_t index, uint16_t data);
Davidroid 57:fa4c622b04a7 331 int VL6180X_WrDWord(VL6180XDev_t dev, uint16_t index, uint32_t data);
Davidroid 57:fa4c622b04a7 332 int VL6180X_RdByte(VL6180XDev_t dev, uint16_t index, uint8_t *data);
Davidroid 57:fa4c622b04a7 333 int VL6180X_RdWord(VL6180XDev_t dev, uint16_t index, uint16_t *data);
Davidroid 57:fa4c622b04a7 334 int VL6180X_RdDWord(VL6180XDev_t dev, uint16_t index, uint32_t *data);
Davidroid 57:fa4c622b04a7 335 int VL6180X_UpdateByte(VL6180XDev_t dev, uint16_t index, uint8_t AndData, uint8_t OrData);
Davidroid 57:fa4c622b04a7 336 int VL6180X_I2CWrite(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t *pBuffer, uint16_t NumByteToWrite);
Davidroid 57:fa4c622b04a7 337 int VL6180X_I2CRead(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t *pBuffer, uint16_t NumByteToRead);
kenjiArai 59:81afbb75311d 338
Davidroid 57:fa4c622b04a7 339 int IsPresent();
Davidroid 57:fa4c622b04a7 340
kenjiArai 59:81afbb75311d 341 /* IO _device */
kenjiArai 60:972b4898a007 342 I2C *_i2c_p;
kenjiArai 60:972b4898a007 343 I2C &_i2c;
Davidroid 57:fa4c622b04a7 344 /* Digital out pin */
kenjiArai 59:81afbb75311d 345 DigitalOut _gpio0;
Davidroid 57:fa4c622b04a7 346 /* _device data */
Davidroid 57:fa4c622b04a7 347 MyVL6180Dev_t _my_device;
kenjiArai 59:81afbb75311d 348 VL6180XDev_t _device;
Davidroid 57:fa4c622b04a7 349 };
Davidroid 57:fa4c622b04a7 350
Davidroid 57:fa4c622b04a7 351 #endif // __VL6180X_CLASS_H