INSAT Mini Project
Dependencies: ST_INTERFACES X_NUCLEO_COMMON
Fork of X_NUCLEO_6180XA1 by
Diff: Components/VL6180X/vl6180x_class.h
- Revision:
- 7:2dc81120c917
- Parent:
- 4:a5abf7757947
- Child:
- 8:f943a1fca15f
--- 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; };