Library to handle the X-NUCLEO-6180XA1 Proximity and ambient light sensor expansion board based on VL6180X.
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Dependents: HelloWorld_6180XA1 SunTracker_BLE Servo_6180XA1 BLE_HR_Light ... more
Fork of X_NUCLEO_6180XA1 by
X-NUCLEO-6180XA1 Proximity and Ambient Light Sensor Expansion Board Firmware Package
Introduction
This firmware package includes Components Device Drivers and Board Support Package for STMicroelectronics' X-NUCLEO-6180XA1 Proximity and ambient light sensor expansion board based on VL6180X.
Firmware Library
Class X_NUCLEO_6180XA1 is intended to represent the Proximity and ambient light sensor expansion board with the same name.
The expansion board is providing the support of the following components:
- on-board VL6180X proximity and ambient light sensor,
- up to three additional VL6180X Satellites,
- on-board 4-digit display
It is intentionally implemented as a singleton because only one X-NUCLEO-VL6180XA1 at a time might be deployed in a HW component stack. In order to get the singleton instance you have to call class method `Instance()`, e.g.:
// Sensors expansion board singleton instance static X_NUCLEO_6180XA1 *6180X_expansion_board = X_NUCLEO_6180XA1::Instance();
Arduino Connector Compatibility Warning
Using the X-NUCLEO-6180XA1 expansion board with the NUCLEO-F429ZI requires adopting the following patch:
- to remove R46 resistor connected to
A3pin; - to solder R47 resistor connected to
A5pin.
Alternatively, you can route the Nucleo board’s A5 pin directly to the expansion board’s A3 pin with a wire.
In case you patch your expansion board or route the pin, the interrupt signal for the front sensor will be driven on A5 pin rather than on A3 pin.
Example Applications
Revision 3:454541a079f4, committed 2015-09-11
- Comitter:
- gallonm
- Date:
- Fri Sep 11 14:39:00 2015 +0200
- Parent:
- 2:7684e0b4e40e
- Child:
- 4:a5abf7757947
- Commit message:
- init function, readID function
update sensors.h
Changed in this revision
--- a/Components/Interfaces/LightSensor.h Thu Sep 10 08:40:54 2015 +0000
+++ b/Components/Interfaces/LightSensor.h Fri Sep 11 14:39:00 2015 +0200
@@ -44,14 +44,14 @@
#include <GenericSensor.h>
/* Classes ------------------------------------------------------------------*/
-/** An abstract class for Humidity sensors
+/** An abstract class for ambient light sensors
*/
class LightSensor : public GenericSensor
{
public:
/**
* @brief Get current light [lux]
- * @param[out] pfData Pointer to where to store light to
+ * @param[out] piData Pointer to where to store light to
* @return 0 in case of success, an error code otherwise
*/
virtual int GetLight(int *piData) = 0;
--- a/Components/Interfaces/RangeSensor.h Thu Sep 10 08:40:54 2015 +0000
+++ b/Components/Interfaces/RangeSensor.h Fri Sep 11 14:39:00 2015 +0200
@@ -1,11 +1,11 @@
/**
******************************************************************************
- * @file HumiditySensor.h
+ * @file RangeSensor.h
* @author AST / EST
* @version V0.0.1
* @date 13-April-2015
* @brief This file contains the abstract class describing in general
- * the interfaces of an ambient light sensor (ALS)
+ * the interfaces of a range sensor
******************************************************************************
* @attention
*
@@ -37,24 +37,24 @@
*/
/* Define to prevent from recursive inclusion --------------------------------*/
-#ifndef __LIGHT_SENSOR_CLASS_H
-#define __LIGHT_SENSOR_CLASS_H
+#ifndef __RANGE_SENSOR_CLASS_H
+#define __RANGE_SENSOR_CLASS_H
/* Includes ------------------------------------------------------------------*/
#include <GenericSensor.h>
/* Classes ------------------------------------------------------------------*/
-/** An abstract class for Humidity sensors
+/** An abstract class for range sensors
*/
-class LightSensor : public GenericSensor
+class RangeSensor : public GenericSensor
{
public:
/**
- * @brief Get current light [lux]
- * @param[out] pfData Pointer to where to store light to
+ * @brief Get current range [mm]
+ * @param[out] piData Pointer to where to store range to
* @return 0 in case of success, an error code otherwise
*/
- virtual int GetLight(int *piData) = 0;
+ virtual int GetRange(int *piData) = 0;
};
-#endif /* __LIGHT_SENSOR_CLASS_H */
\ No newline at end of file
+#endif /* __RANGE_SENSOR_CLASS_H */
\ No newline at end of file
--- a/Components/VL6180X/vl6180x_class.cpp Thu Sep 10 08:40:54 2015 +0000
+++ b/Components/VL6180X/vl6180x_class.cpp Fri Sep 11 14:39:00 2015 +0200
@@ -38,280 +38,208 @@
/* Includes ------------------------------------------------------------------*/
#include "vl6180x_class.h"
-
+#define Fix7_2_KCPs(x) ((((uint32_t)(x))*1000)>>7)
-/**
- * @brief Set HTS221 Initialization
- * @param HTS221_Init the configuration setting for the HTS221
- * @retval HUM_TEMP_OK in case of success, an error code otherwise
- */
-VL6180x_ErrCode_t VL6180X::VL6180X_Init(HUM_TEMP_InitTypeDef *HTS221_Init)
+int VL6180X::VL6180x_InitData(VL6180xDev_t dev)
{
- uint8_t tmp = 0x00;
-
- /* Configure the low level interface ---------------------------------------*/
- if(HTS221_IO_Init() != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- if(HTS221_Power_On() != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- if(HTS221_Calibration() != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- /* Output Data Rate selection */
- tmp &= ~(HTS221_ODR_MASK);
- tmp |= HTS221_Init->OutputDataRate;
-
- if(HTS221_IO_Write(&tmp, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- HTS221_IO_ITConfig();
-
- return HUM_TEMP_OK;
-}
+ int status, dmax_status ;
+ int8_t offset;
+ uint8_t FreshOutReset;
+ uint32_t CalValue;
+ uint16_t u16;
+ uint32_t XTalkCompRate_KCps;
+
+ LOG_FUNCTION_START("");
+
+ VL6180xDevDataSet(dev, EceFactorM , DEF_ECE_FACTOR_M);
+ VL6180xDevDataSet(dev, EceFactorD , DEF_ECE_FACTOR_D);
+
+#ifdef VL6180x_HAVE_UPSCALE_DATA
+ VL6180xDevDataSet(dev, UpscaleFactor , DEF_UPSCALE);
+#endif
+
+#ifdef VL6180x_HAVE_ALS_DATA
+ VL6180xDevDataSet(dev, IntegrationPeriod, DEF_INT_PEFRIOD);
+ VL6180xDevDataSet(dev, AlsGainCode, DEF_ALS_GAIN);
+ VL6180xDevDataSet(dev, AlsScaler, DEF_ALS_SCALER);
+#endif
+
+#ifdef VL6180x_HAVE_WRAP_AROUND_DATA
+ VL6180xDevDataSet(dev, WrapAroundFilterActive, (VL6180x_WRAP_AROUND_FILTER_SUPPORT >0));
+ VL6180xDevDataSet(dev, DMaxEnable, DEF_DMAX_ENABLE);
+#endif
+
+ _DMax_OneTimeInit(dev);
+ do{
+
+ /* backup offset initial value from nvm these must be done prior any over call that use offset */
+ status = VL6180x_RdByte(dev,SYSRANGE_PART_TO_PART_RANGE_OFFSET, (uint8_t*)&offset);
+ if( status ){
+ VL6180x_ErrLog("SYSRANGE_PART_TO_PART_RANGE_OFFSET rd fail");
+ break;
+ }
+ VL6180xDevDataSet(dev, Part2PartOffsetNVM, offset);
-/**
- * @brief Read ID address of HTS221
- * @param ht_id the pointer where the ID of the device is stored
- * @retval HUM_TEMP_OK in case of success, an error code otherwise
- */
-HUM_TEMP_StatusTypeDef HTS221::HTS221_ReadID(uint8_t *ht_id)
-{
- if(!ht_id)
- {
- return HUM_TEMP_ERROR;
- }
-
- return HTS221_IO_Read(ht_id, HTS221_WHO_AM_I_ADDR, 1);
-}
+ status=VL6180x_RdDWord( dev, SYSRANGE_RANGE_IGNORE_THRESHOLD, &CalValue);
+ if( status ){
+ VL6180x_ErrLog("Part2PartAmbNVM rd fail");
+ break;
+ }
+ if( (CalValue&0xFFFF0000) == 0 ){
+ CalValue=0x00CE03F8;
+ }
+ VL6180xDevDataSet(dev, Part2PartAmbNVM, CalValue);
+
+ status = VL6180x_RdWord(dev, SYSRANGE_CROSSTALK_COMPENSATION_RATE ,&u16);
+ if( status){
+ VL6180x_ErrLog("SYSRANGE_CROSSTALK_COMPENSATION_RATE rd fail ");
+ break;
+ }
+ XTalkCompRate_KCps = Fix7_2_KCPs(u16);
+ VL6180xDevDataSet(dev, XTalkCompRate_KCps , XTalkCompRate_KCps );
-/**
- * @brief Reboot memory content of HTS221
- * @retval HUM_TEMP_OK in case of success, an error code otherwise
- */
-HUM_TEMP_StatusTypeDef HTS221::HTS221_RebootCmd(void)
-{
- uint8_t tmpreg;
-
- /* Read CTRL_REG2 register */
- if(HTS221_IO_Read(&tmpreg, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- /* Enable or Disable the reboot memory */
- tmpreg |= HTS221_BOOT_REBOOTMEMORY;
-
- /* Write value to MEMS CTRL_REG2 regsister */
- if(HTS221_IO_Write(&tmpreg, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- return HUM_TEMP_OK;
+ dmax_status = _DMax_InitData(dev);
+ if( dmax_status < 0 ){
+ VL6180x_ErrLog("DMax init failure");
+ break;
+ }
+
+ /* Read or wait for fresh out of reset */
+ status = VL6180x_RdByte(dev,SYSTEM_FRESH_OUT_OF_RESET, &FreshOutReset);
+ if( status ) {
+ VL6180x_ErrLog("SYSTEM_FRESH_OUT_OF_RESET rd fail");
+ break;
+ }
+ if( FreshOutReset!= 1 || dmax_status )
+ status = CALIBRATION_WARNING;
+
+ }
+ while(0);
+
+ LOG_FUNCTION_END(status);
+ return status;
}
-/**
- * @brief Read HTS221 output register, and calculate the humidity
- * @param pfData the pointer to data output
- * @retval HUM_TEMP_OK in case of success, an error code otherwise
- */
-HUM_TEMP_StatusTypeDef HTS221::HTS221_GetHumidity(float* pfData)
+int VL6180X::VL6180XReadID(uint8_t *rl_id)
{
- int16_t H_T_out, humidity_t;
- uint8_t tempReg[2] = {0, 0};
- uint8_t tmp = 0x00;
- float H_rh;
-
- if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- /* Output Data Rate selection */
- tmp &= (HTS221_ODR_MASK);
-
- if(tmp == 0x00)
- {
- if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- /* Serial Interface Mode selection */
- tmp &= ~(HTS221_ONE_SHOT_MASK);
- tmp |= HTS221_ONE_SHOT_START;
-
- if(HTS221_IO_Write(&tmp, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- do
- {
-
- if(HTS221_IO_Read(&tmp, HTS221_STATUS_REG_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- }
- while(!(tmp & 0x02));
- }
-
-
- if(HTS221_IO_Read(&tempReg[0], (HTS221_HUMIDITY_OUT_L_ADDR | HTS221_I2C_MULTIPLEBYTE_CMD),
- 2) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- H_T_out = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
-
- H_rh = ( float )(((( H_T_out - H0_T0_out ) * ( H1_rh - H0_rh )) / ( H1_T0_out - H0_T0_out )) + H0_rh );
-
- // Truncate to specific number of decimal digits
- humidity_t = (uint16_t)(H_rh * pow(10.0f, HUM_DECIMAL_DIGITS));
- *pfData = ((float)humidity_t) / pow(10.0f, HUM_DECIMAL_DIGITS);
-
- // Prevent data going below 0% and above 100% due to linear interpolation
- if ( *pfData < 0.0f ) *pfData = 0.0f;
- if ( *pfData > 100.0f ) *pfData = 100.0f;
-
- return HUM_TEMP_OK;
+ if(!rl_id)
+ {
+ return API_ERROR;
+ }
+ return VL6180X_IO_Read(rl_id, IDENTIFICATION_MODEL_ID, 1);
}
-/**
- * @brief Read HTS221 output register, and calculate the temperature
- * @param pfData the pointer to data output
- * @retval HUM_TEMP_OK in case of success, an error code otherwise
- */
-HUM_TEMP_StatusTypeDef HTS221::HTS221_GetTemperature(float* pfData)
+int VL6180X::VL6180X_IO_Read(uint8_t *pBuffer, uint8_t RegisterAddress, uint16 NumByteToRead)
{
- int16_t T_out, temperature_t;
- uint8_t tempReg[2] = {0, 0};
- uint8_t tmp = 0x00;
- float T_degC;
-
- if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- /* Output Data Rate selection */
- tmp &= (HTS221_ODR_MASK);
-
- if(tmp == 0x00)
- {
- if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- /* Serial Interface Mode selection */
- tmp &= ~(HTS221_ONE_SHOT_MASK);
- tmp |= HTS221_ONE_SHOT_START;
+ int lecture
- if(HTS221_IO_Write(&tmp, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- do
+ lecture=dev_i2c.i2c_read(pBuffer, DevAddress, RegisterAddress, NumByteToRead);
+ if(lecture!=0)
{
-
- if(HTS221_IO_Read(&tmp, HTS221_STATUS_REG_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
+ return API_ERROR;
}
- while(!(tmp & 0x01));
- }
-
- if(HTS221_IO_Read(&tempReg[0], (HTS221_TEMP_OUT_L_ADDR | HTS221_I2C_MULTIPLEBYTE_CMD),
- 2) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- T_out = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
-
- T_degC = ((float)(T_out - T0_out)) / (T1_out - T0_out) * (T1_degC - T0_degC) + T0_degC;
-
- temperature_t = (int16_t)(T_degC * pow(10.0f, TEMP_DECIMAL_DIGITS));
-
- *pfData = ((float)temperature_t) / pow(10.0f, TEMP_DECIMAL_DIGITS);
-
- return HUM_TEMP_OK;
+ return API_NO_ERROR;
}
-/**
- * @brief Exit the shutdown mode for HTS221
- * @retval HUM_TEMP_OK in case of success, an error code otherwise
- */
-HUM_TEMP_StatusTypeDef HTS221::HTS221_Power_On(void)
-{
- uint8_t tmpReg;
-
- /* Read the register content */
- if(HTS221_IO_Read(&tmpReg, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- /* Set the power down bit */
- tmpReg |= HTS221_MODE_ACTIVE;
-
- /* Write register */
- if(HTS221_IO_Write(&tmpReg, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- return HUM_TEMP_OK;
+
+
+
+
+
+static int _DMax_InitData(VL6180xDev_t dev){
+ int status, warning;
+ uint8_t u8;
+ uint16_t u16;
+ uint32_t u32;
+ uint32_t Reg2A_KCps;
+ uint32_t RegB8;
+ uint8_t MaxConvTime;
+ uint32_t XTalkCompRate_KCps;
+ uint32_t RangeIgnoreThreshold;
+ int32_t minSignalNeeded;
+ uint8_t SysRangeCheckEn;
+ uint8_t snrLimit;
+ warning=0;
+
+ static const int ROMABLE_DATA MaxConvTimeAdjust=-4;
+
+ LOG_FUNCTION_START("");
+ do{
+ status = VL6180x_RdByte(dev, 0x02A ,&u8);
+ if( status ){
+ VL6180x_ErrLog("Reg 0x02A rd fail");
+ break;
+ }
+
+ if( u8 == 0 ) {
+ warning = CALIBRATION_WARNING;
+ u8 = 40; /* use a default average value */
+ }
+ Reg2A_KCps = Fix7_2_KCPs(u8); /* convert to KCPs */
+
+ status = VL6180x_RdByte(dev, SYSRANGE_RANGE_CHECK_ENABLES, &SysRangeCheckEn);
+ if (status) {
+ VL6180x_ErrLog("SYSRANGE_RANGE_CHECK_ENABLES rd fail ");
+ break;
+ }
+
+ status = VL6180x_RdByte(dev, SYSRANGE_MAX_CONVERGENCE_TIME, &MaxConvTime);
+ if( status){
+ VL6180x_ErrLog("SYSRANGE_MAX_CONVERGENCE_TIME rd fail ");
+ break;
+ }
+
+ status = VL6180x_RdDWord(dev, 0x0B8, &RegB8);
+ if( status ){
+ VL6180x_ErrLog("reg 0x0B8 rd fail ");
+ break;
+ }
+
+ status = VL6180x_RdByte(dev, SYSRANGE_MAX_AMBIENT_LEVEL_MULT, &snrLimit);
+ if( status){
+ VL6180x_ErrLog("SYSRANGE_MAX_AMBIENT_LEVEL_MULT rd fail ");
+ break;
+ }
+ _DMaxData(snrLimit_K) = (int32_t)16*1000/snrLimit;
+ XTalkCompRate_KCps = VL6180xDevDataGet(dev, XTalkCompRate_KCps );
+
+ if( Reg2A_KCps >= XTalkCompRate_KCps){
+ _DMaxData(retSignalAt400mm)=( Reg2A_KCps - XTalkCompRate_KCps);
+ }
+ else{
+ _DMaxData(retSignalAt400mm)=0; /* Reg2A_K - XTalkCompRate_KCp <0 is invalid */
+ }
+
+ /* if xtalk range check is off omit it in snr clipping */
+ if( SysRangeCheckEn&RANGE_CHECK_RANGE_ENABLE_MASK ){
+ status = VL6180x_RdWord(dev, SYSRANGE_RANGE_IGNORE_THRESHOLD, &u16);
+ if( status){
+ VL6180x_ErrLog("SYSRANGE_RANGE_IGNORE_THRESHOLD rd fail ");
+ break;
+ }
+ RangeIgnoreThreshold = Fix7_2_KCPs(u16);
+ }
+ else{
+ RangeIgnoreThreshold = 0;
+ }
+
+ minSignalNeeded = (RegB8*256)/((int32_t)MaxConvTime+(int32_t)MaxConvTimeAdjust); /* KCps 8+8 bit -(1 to 6 bit) => 15-10 bit */
+ /* minSignalNeeded = max ( minSignalNeeded, RangeIgnoreThreshold - XTalkCompRate_KCps) */
+ if( minSignalNeeded <= RangeIgnoreThreshold - XTalkCompRate_KCps )
+ minSignalNeeded = RangeIgnoreThreshold - XTalkCompRate_KCps;
+
+ u32 = (minSignalNeeded*(uint32_t)snrLimit)/16;
+ _DMaxData(ClipSnrLimit ) = _DMax_RawValueAtRateKCps(dev, u32 ); /* clip to dmax to min signal snr limit rate*/
+ }
+ while(0);
+ if( !status )
+ status = warning;
+ LOG_FUNCTION_END(status);
+ return status;
}
-/**
- * @brief Enter the shutdown mode for HTS221
- * @retval HUM_TEMP_OK in case of success, an error code otherwise
- */
-HUM_TEMP_StatusTypeDef HTS221::HTS221_Power_OFF(void)
-{
- uint8_t tmpReg;
-
- /* Read the register content */
- if(HTS221_IO_Read(&tmpReg, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- /* Reset the power down bit */
- tmpReg &= ~(HTS221_MODE_ACTIVE);
-
- /* Write register */
- if(HTS221_IO_Write(&tmpReg, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
- {
- return HUM_TEMP_ERROR;
- }
-
- return HUM_TEMP_OK;
-}
+#undef Fix7_2_KCPs
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/Components/VL6180X/vl6180x_class.h Thu Sep 10 08:40:54 2015 +0000
+++ b/Components/VL6180X/vl6180x_class.h Fri Sep 11 14:39:00 2015 +0200
@@ -65,60 +65,33 @@
/*** Interface Methods ***/
virtual int Init(void *init_struct) {
- return VL6180X_Init();
- }
-
- virtual int ReadID(uint8_t *ht_id) {
- return VL6180X_ReadID(ht_id);
+ return VL6180x_InitData(VL6180xDev_t dev);
}
-
- /**
- * @brief Reset sensor
- * @return 0 in case of success, an error code otherwise
- */
- virtual int Reset(void) {
- return VL6180X_RebootCmd();
+
+ virtual int ReadID(uint8_t *rl_id) {
+ return VL6180X_ReadID(rl_id);
}
-
- virtual int GetRange(float *pfData) {
- return VL6180X_GetRange(pfData);
- }
-
- virtual int GetLight(float *pfData) {
- return VL6180X_GetLight(pfData);
+ /*
+ virtual int GetRange(int *piData) {
+ return VL6180X_GetRange(piData);
}
- protected:
- /*** Methods ***/
- RANGE_LIGHT_StatusTypeDef VL6180X_Init(RANGE_LIGHT_InitTypeDef *VL6180X_Init);
- RANGE_LIGHT_StatusTypeDef VL6180X_ReadID(uint8_t *ht_id);
- RANGE_LIGHT_StatusTypeDef VL6180X_SetID(uint8_t *ht_id);
- RANGE_LIGHT_StatusTypeDef VL6180X_RebootCmd(void);
- RANGE_LIGHT_StatusTypeDef VL6180X_GetRange(float* pfData);
- RANGE_LIGHT_StatusTypeDef VL6180X_GetLight(float* pfData);
+ virtual int GetLight(int *piData) {
+ return VL6180X_GetLight(piData);
+ }
+ */
- /**
- * @brief Configures VL6180X interrupt lines for NUCLEO boards
- */
- void VL6180X_IO_ITConfig(void)
- {
- /* To be implemented */
- }
-
- /**
- * @brief Configures VL6180X I2C interface
- * @return RANGE_LIGHT_OK in case of success, an error code otherwise
- */
- RANGE_LIGHT_StatusTypeDef VL6180X_IO_Init(void)
- {
- return RANGE_LIGHT_OK; /* done in constructor */
- }
-
+private:
+ /*** Methods ***/
+ int VL6180X_IO_Read(uint8_t *pBuffer, uint8_t RegisterAddress, uint16 NumByteToRead);
+
+
/*** Instance Variables ***/
/* IO Device */
+
DevI2C &dev_i2c;
-
+
};

X-NUCLEO-6180XA1 Proximity and Ambient Light Sensor