Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Check_VL6180XA1_ToF
Fork of X_NUCLEO_6180XA1 by
Diff: Components/VL6180X/vl6180x_class.h
- Revision:
- 7:2dc81120c917
- Parent:
- 4:a5abf7757947
- Child:
- 8:f943a1fca15f
diff -r 6a09fe77ad3c -r 2dc81120c917 Components/VL6180X/vl6180x_class.h
--- a/Components/VL6180X/vl6180x_class.h Fri Sep 18 13:19:50 2015 +0000
+++ b/Components/VL6180X/vl6180x_class.h Fri Sep 25 12:12:51 2015 +0200
@@ -48,84 +48,84 @@
#include "vl6180x_types.h"
#include "vl6180x_platform.h"
#include "vl6180x_appcfg.h"
+#include "STMPE1600_class.h"
/** default device address */
#define DEFAULT_DEVICE_ADDRESS 0x29
-/** default value ECE factor Molecular */
-#define DEF_ECE_FACTOR_M 85
-/** default value ECE factor Denominator */
-#define DEF_ECE_FACTOR_D 100
-/** default value ALS integration time */
-#define DEF_INT_PEFRIOD 100
-/** default value ALS gain */
-#define DEF_ALS_GAIN 1
-/** default value ALS scaler */
-#define DEF_ALS_SCALER 1
-/** default value for DMAX Enbale */
-#define DEF_DMAX_ENABLE 1
-/** default ambient tuning factor %x1000 */
-#define DEF_AMBIENT_TUNING 80
-
-/*
-typedef struct
-{
- struct VL6180xDevData_t Data;
- uint8_t I2cAddr;
- uint8_t DevID;
-
- unsigned Present;
- unsigned Ready;
-}MyVL6180xDev_t;
-*/
/* Classes -------------------------------------------------------------------*/
/** Class representing a VL6180X sensor component
*/
-class VL6180X : public RangeSensor, public LightSensor {
+class VL6180X : public RangeSensor, public LightSensor
+{
public:
/** Constructor
* @param[in] i2c device I2C to be used for communication
+ * @param[in] digital out pin/STMPE1600DigiOut pin to be used for GPIO expander communication
* @param[in] device address, 0x29 by default
- */
- VL6180X(DevI2C &i2c, uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS) : RangeSensor(), LightSensor(), dev_i2c(i2c)
- {
- MyDeviceAddress=DevAddr;
- RangeLight_id=0;
- //MyDevice.I2cAddr=DevAddr;
- //MyDevice.DeviID=0;
- //MyDevice.Present=0;
- //MyDevice.Ready=0;
- //oppure MyVL6180xDev_t MyDevice={DevAddr, 0, 0, 0};
- }
-
- /** Destructor
+ * @param[in] device id, 0 by default
*/
- /*virtual ~VL6180X()
- {
- // delete[] memory allocated
- VL6180x_SetupGPIOx(MyDevice, 0, 0, 0);
- } */
+
+
+ VL6180X(DevI2C &i2c, DigitalOut &pin, uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS) : RangeSensor(), LightSensor(), dev_i2c(i2c), gpio0(&pin)
+ {
+ MyDeviceAddress=DevAddr;
+ Present=0;
+ Ready=0;
+ }
+
+ VL6180X(DevI2C &i2c, STMPE1600DigiOut &pin, uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS) : RangeSensor(), LightSensor(), dev_i2c(i2c), expgpio0(&pin)
+ {
+ MyDeviceAddress=DevAddr;
+ Present=0;
+ Ready=0;
+ }
+
- // funzione che setta il paremetro DevID: SetDevID(int n)
- // funzione che setta il parametro Present: SetPresent(int n)
- // funzione che setta il parametro Ready: SetReady(int n)
- // funzione che modifica lo slave address: SetI2CAddress(VL6180xDev_t MyDevice, uint8_t NewAddress))
-
+ /** Destructor
+ */
+ //~VL6180X(){}
+
+
+ void VL6180x_On(void) {
+ if (gpio0) *gpio0=1;
+ else if (expgpio0) *expgpio0=1;
+ }
+
+ void VL6180x_Off(void) {
+ if (gpio0) *gpio0=0;
+ else if (expgpio0) *expgpio0=0;
+ }
+ //Init sensor accende, legge id, inizializza il dispositivo e prepara per le misure (range, als)
+ //altrimenti errore e cancello dalla board
+
/*** Interface Methods ***/
- // nel momento in cui creo la classe x_nucleo_6180xa1, all'interno definisco un oggetto VL6180xDev_t MyDevice
- // definisco una funzione Init() che chiama a sua volta la seguente funzione Init() e gli passo MyDevice
- /*virtual*/ int Init() //par:void *init_struct
+ /*virtual*/ int Init()
{
- return VL6180x_InitData(MyDevice); // a questa funzione devo passare il parametro di Init()
+ return VL6180x_InitData(MyDeviceAddress); // ritorna 0 se corretto
}
- // nel momento in cui creo la classe x_nucleo_6180xa1, all'interno definisco un oggetto uint_t *RangeLight_id
- // definisco una funzione ReadID() che chiama a sua volta la seguente funzione ReadID() e gli passo RangeLight_id
- /*virtual*/ int ReadID() //par:uint8_t *rl_id
+ /*virtual*/ int ReadID()
{
- return VL6180X_ReadID(&RangeLight_id); // a questa funzione devo passare il parametro di ReadID()
+ return VL6180X_ReadID(); // ritorna 0 se corretto e -2 se errore
}
-
+ /*
+
+ void SetPresent()
+ {
+ MyDevice.Present=1;
+ }
+
+ void SetDeviceID(int n)
+ {
+ MyDevice.DevID=n;
+ }
+
+ void SetReady()
+ {
+ MyDevice.Ready=1;
+ }
+
/*
virtual int GetRange(int *piData) {
return VL6180X_GetRange(piData);
@@ -134,17 +134,73 @@
virtual int GetLight(int *piData) {
return VL6180X_GetLight(piData);
}
- */
-
- /* Initialization functions */
- int VL6180x_InitData(VL6180xDev_t dev);
- /*static*/ int _DMax_InitData(VL6180xDev_t dev);
- void _DMax_OneTimeInit(VL6180xDev_t dev);
- /*static*/ uint32_t _DMax_RawValueAtRateKCps(VL6180xDev_t dev, int32_t rate);
- uint32_t VL6180x_SqrtUint32(uint32_t num);
- /* IO read funcitons */
- int VL6180X_ReadID(uint8_t *rl_id);
+ /* api.c functions */
+ int VL6180x_WaitDeviceBooted(VL6180xDev_t dev);
+ int VL6180x_InitData(VL6180xDev_t dev );
+ int VL6180x_SetupGPIO1(VL6180xDev_t dev, uint8_t IntFunction, int ActiveHigh);
+ int VL6180x_Prepare(VL6180xDev_t dev);
+ int VL6180x_RangeStartContinuousMode(VL6180xDev_t dev);
+ int VL6180x_RangeStartSingleShot(VL6180xDev_t dev);
+ int VL6180x_RangeSetMaxConvergenceTime(VL6180xDev_t dev, uint8_t MaxConTime_msec);
+ int VL6180x_RangePollMeasurement(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
+ int VL6180x_RangeGetMeasurementIfReady(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
+ int VL6180x_RangeGetMeasurement(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
+ int VL6180x_RangeGetResult(VL6180xDev_t dev, int32_t *pRange_mm);
+ int VL6180x_RangeConfigInterrupt(VL6180xDev_t dev, uint8_t ConfigGpioInt);
+ int VL6180x_RangeGetInterruptStatus(VL6180xDev_t dev, uint8_t *pIntStatus);
+ int VL6180x_AlsPollMeasurement(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData);
+ int VL6180x_AlsGetMeasurement(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData);
+ int VL6180x_AlsConfigInterrupt(VL6180xDev_t dev, uint8_t ConfigGpioInt);
+ int VL6180x_AlsSetIntegrationPeriod(VL6180xDev_t dev, uint16_t period_ms);
+ int VL6180x_AlsSetInterMeasurementPeriod(VL6180xDev_t dev, uint16_t intermeasurement_period_ms);
+ int VL6180x_AlsSetAnalogueGain(VL6180xDev_t dev, uint8_t gain);
+ int VL6180x_AlsSetThresholds(VL6180xDev_t dev, uint8_t low, uint8_t high);
+ int VL6180x_AlsGetInterruptStatus(VL6180xDev_t dev, uint8_t *pIntStatus);
+ int VL6180x_StaticInit(VL6180xDev_t dev);
+ int VL6180x_RangeWaitDeviceReady(VL6180xDev_t dev, int MaxLoop );
+ int VL6180x_RangeSetInterMeasPeriod(VL6180xDev_t dev, uint32_t InterMeasTime_msec);
+ int VL6180x_UpscaleSetScaling(VL6180xDev_t dev, uint8_t scaling);
+ int VL6180x_UpscaleGetScaling(VL6180xDev_t dev);
+ uint16_t VL6180x_GetUpperLimit(VL6180xDev_t dev);
+ int VL6180x_RangeSetThresholds(VL6180xDev_t dev, uint16_t low, uint16_t high, int SafeHold);
+ int VL6180x_RangeGetThresholds(VL6180xDev_t dev, uint16_t *low, uint16_t *high);
+ int VL6180x_RangeSetRawThresholds(VL6180xDev_t dev, uint8_t low, uint8_t high);
+ int VL6180x_RangeSetEceFactor(VL6180xDev_t dev, uint16_t FactorM, uint16_t FactorD);
+ int VL6180x_RangeSetEceState(VL6180xDev_t dev, int enable );
+ int VL6180x_FilterSetState(VL6180xDev_t dev, int state);
+ int VL6180x_FilterGetState(VL6180xDev_t dev);
+ int VL6180x_DMaxSetState(VL6180xDev_t dev, int state);
+ int VL6180x_DMaxGetState(VL6180xDev_t dev);
+ int VL6180x_RangeSetSystemMode(VL6180xDev_t dev, uint8_t mode);
+ int8_t VL6180x_GetOffsetCalibrationData(VL6180xDev_t dev);
+ void VL6180x_SetOffsetCalibrationData(VL6180xDev_t dev, int8_t offset);
+ int VL6180x_SetXTalkCompensationRate(VL6180xDev_t dev, FixPoint97_t Rate);
+ int VL6180x_AlsWaitDeviceReady(VL6180xDev_t dev, int MaxLoop );
+ int VL6180x_AlsSetSystemMode(VL6180xDev_t dev, uint8_t mode);
+ int VL6180x_SetGroupParamHold(VL6180xDev_t dev, int Hold);
+ int VL6180x_SetI2CAddress(VL6180xDev_t dev, uint8_t NewAddr);
+ int VL6180x_SetupGPIOx(VL6180xDev_t dev, int pin, uint8_t IntFunction, int ActiveHigh);
+ int VL6180x_SetGPIOxPolarity(VL6180xDev_t dev, int pin, int active_high);
+ int VL6180x_SetGPIOxFunctionality(VL6180xDev_t dev, int pin, uint8_t functionality);
+ int VL6180x_DisableGPIOxOut(VL6180xDev_t dev, int pin);
+ int VL6180x_GetInterruptStatus(VL6180xDev_t dev, uint8_t *status);
+ int VL6180x_ClearInterrupt(VL6180xDev_t dev, uint8_t IntClear );
+ int VL6180x_RangeStaticInit(VL6180xDev_t dev);
+ int VL6180x_UpscaleRegInit(VL6180xDev_t dev);
+ int VL6180x_UpscaleStaticInit(VL6180xDev_t dev);
+ int VL6180x_AlsGetLux(VL6180xDev_t dev, lux_t *pLux);
+ int _UpscaleInitPatch0(VL6180xDev_t dev);
+ int VL6180x_RangeGetDeviceReady(VL6180xDev_t dev, int * Ready);
+ int VL6180x_RangeSetEarlyConvergenceEestimateThreshold(VL6180xDev_t dev);
+ int32_t _GetAveTotalTime(VL6180xDev_t dev);
+ int32_t _filter_Start(VL6180xDev_t dev, uint16_t m_trueRange_mm, uint16_t m_rawRange_mm, uint32_t m_rtnSignalRate, uint32_t m_rtnAmbientRate, uint16_t errorCode);
+ int _filter_GetResult(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
+ int _GetRateResult(VL6180xDev_t dev, VL6180x_RangeData_t *pRangeData);
+ int _DMax_InitData(VL6180xDev_t dev);
+
+ /* Read functions from registers and write functions into registers */
+ int VL6180X_ReadID();
int VL6180X_IO_Read(uint8_t *pBuffer, uint8_t RegisterAddress, uint16_t NumByteToRead);
/* Write and read functions from I2C */
@@ -154,28 +210,21 @@
int VL6180x_RdByte(VL6180xDev_t dev, uint16_t index, uint8_t *data);
int VL6180x_RdWord(VL6180xDev_t dev, uint16_t index, uint16_t *data);
int VL6180x_RdDWord(VL6180xDev_t dev, uint16_t index, uint32_t *data);
+ int VL6180x_UpdateByte(VL6180xDev_t dev, uint16_t index, uint8_t AndData, uint8_t OrData);
int VL6180x_I2CWrite(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t *pBuffer, uint16_t NumByteToWrite);
int VL6180x_I2CRead(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t *pBuffer, uint16_t NumByteToRead);
-
-
+
private:
- /*** Methods ***/
-
-
-
-
/*** Instance Variables ***/
/* IO Device */
- //temporaneo
- DevI2C &dev_i2c; // creo questa variabile in x_nucleo_6180xa1.h allo stesso modo e poi passo al costruttore del MyDevice il suo indirizzo
- //MyVL6180xDev_t MyDevice; in sostituzione di VL6180xDev_t sotto
+ DevI2C &dev_i2c;
+ DigitalOut *gpio0;
+ STMPE1600DigiOut *expgpio0;
- /* VL6180X Device */
- uint8_t MyDeviceAddress;
- //temporanei
- VL6180xDev_t MyDevice; // creo questa variabile in x_nucleo_6180xa1.h allo stesso modo e poi passo alla funzione Init()
- uint8_t RangeLight_id; // creo questa variabile in x_nucleo_6180xa1.h allo stesso modo e poi passo alla funzione ReadID() il suo indirizzo
+ VL6180xDev_t MyDeviceAddress;
+ unsigned Present;
+ unsigned Ready;
};
