INSAT Mini Project

Dependencies:   ST_INTERFACES X_NUCLEO_COMMON

Fork of X_NUCLEO_6180XA1 by ST

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;
     
 };