Now you can use NC as InterruptIn

Dependencies:   X_NUCLEO_COMMON

Fork of X_NUCLEO_6180XA1 by ST

Revision:
10:4954b09b72d8
Parent:
9:9cbc1736f148
Child:
11:88541229403e
--- a/Components/VL6180X/vl6180x_class.h	Tue Sep 29 15:40:08 2015 +0200
+++ b/Components/VL6180X/vl6180x_class.h	Tue Oct 06 09:03:10 2015 +0200
@@ -41,11 +41,11 @@
 /* Includes ------------------------------------------------------------------*/
 #include "RangeSensor.h"
 #include "LightSensor.h"
-#include "DevI2C.h" //temporaneo fino alla creazione della classe x_nucleo_6180xa1
-//#include "vl6180x_api.h"
-//#include "vl6180x_cfg.h"
-//#include "vl6180x_def.h"
-//#include "vl6180x_types.h"
+#include "DevI2C.h" 
+#include "vl6180x_api.h"
+#include "vl6180x_cfg.h"
+#include "vl6180x_def.h"
+#include "vl6180x_types.h"
 #include "vl6180x_platform.h"
 //#include "vl6180x_appcfg.h"
 #include "STMPE1600_class.h"
@@ -56,6 +56,7 @@
 /* Classes -------------------------------------------------------------------*/
 /** Class representing a VL6180X sensor component
  */
+ //FIXME verficare se impostare le funzioni come virtual come nel caso IKS
 class VL6180X : public RangeSensor, public LightSensor 
 {
  public:
@@ -65,24 +66,24 @@
      * @param[in] device address, 0x29 by default 
      * @param[in] device id, 0 by default
      */
-
-		 
-		 VL6180X(DevI2C &i2c, DigitalOut &pin, uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS) : RangeSensor(), LightSensor(), dev_i2c(i2c), gpio0(&pin)
+		 VL6180X(DevI2C &i2c, DigitalOut &pin, /*PinName pin_gpio1,*/ uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS) : RangeSensor(), LightSensor(), dev_i2c(i2c), gpio0(&pin)
 		 {
-//		    MyDeviceAddress=DevAddr;
-				DevData.I2cAddr = DevAddr;
-        DevData.Present=0;
-        DevData.Ready=0;
-				expgpio0 = NULL;
+			  MyDevice.I2cAddr=DevAddr;		 
+        MyDevice.Present=0;
+        MyDevice.Ready=0;
+        Device=&MyDevice;;
+				expgpio0=NULL;
+			  //free_fall=new InterruptIn(pin_gpio1);
 		 }  
-		 
-     VL6180X(DevI2C &i2c, STMPE1600DigiOut &pin, uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS) : RangeSensor(), LightSensor(), dev_i2c(i2c), expgpio0(&pin)
+		
+     VL6180X(DevI2C &i2c, STMPE1600DigiOut &pin, /*PinName pin_gpio1,*/ uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS) : RangeSensor(), LightSensor(), dev_i2c(i2c), expgpio0(&pin)
 		 {
-//		    MyDeviceAddress=DevAddr;
-				DevData.I2cAddr = DevAddr;		 
-        DevData.Present=0;
-        DevData.Ready=0;
-				gpio0 = NULL;			 
+			  MyDevice.I2cAddr=DevAddr;		 
+        MyDevice.Present=0;
+        MyDevice.Ready=0;
+        Device=&MyDevice;
+			  gpio0=NULL;			 
+        //free_fall=new InterruptIn(pin_gpio1);			 
 		 }  
 		 
     
@@ -100,46 +101,110 @@
 			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 ***/
-    /*virtual*/ int Init() 
+    
+		int InitSensor(uint8_t NewAddr) 
+		{
+		   int status;
+	  
+       VL6180x_Off();
+       VL6180x_On();
+	     status=IsPresent();
+	     if(!status)
+	     {
+		     Device->Present=1;
+		     status=Init();
+         if(status)
+			      error("Failed to init VL6180X sensor!\n");
+         status=Prepare();
+         if(status)
+			      error("Failed to prepare VL6180X!\n");
+	       status=SetI2CAddress(NewAddr);
+		     if(status)
+			      error("Failed to change I2C address!\n");
+		     Device->Ready=1;
+	     }
+			 return status;
+		}
+    
+    int Init() 
     {
-        return VL6180x_InitData(DevData); // ritorna 0 se corretto 
+       return VL6180x_InitData(Device); // ritorna 0 se corretto 
     }
-    
-    /*virtual*/ int ReadID() 
-    {
-        return VL6180X_ReadID(); // ritorna 0 se corretto e -2 se errore
-    }
-		/*
-
+		
+		int IsPresent()
+		{
+			 int status;
+			
+			 status=ReadID();
+       if(!status)
+				 error("Failed to read ID device! Device not present!\n");
+			 return status;
+		}
+		
 		void SetPresent()
 		{
-			  MyDevice.Present=1;
-		}
-		
-		void SetDeviceID(int n)
-		{
-			  MyDevice.DevID=n;
+			 Device->Present=1;
 		}
 		
 		void SetReady()
 		{
-			  MyDevice.Ready=1;
-		}		
-	   
-    */
-/*		
-    virtual int GetRange(int *piData) {
-        return VL6180X_GetRange(piData);
+			 Device->Ready=1;
+		}
+		
+		int Prepare()
+		{
+			 return VL6180x_Prepare(Device);
+		}
+		
+		int SetI2CAddress(int NewAddr)
+		{
+			 int status;
+			
+			 status=VL6180x_SetI2CAddress(Device, NewAddr);
+			 if(!status)
+				  Device->I2cAddr;
+			 return status;
+		}
+		
+		int StartMeasurement(int operating_mode)
+		{
+		  int status;
+	
+	    switch(operating_mode)
+	    {
+		     case(1):
+			     return VL6180x_RangePollMeasurement(Device, &RangeData);
+         case(2):
+			     return VL6180x_AlsPollMeasurement(Device, &AlsData);
+         case(3): break;		
+		     case(4): break;
+	       case(5): break;
+	       case(6): break;
+		     case(7): break;
+		     default:
+			     return INVALID_PARAMS;
+	    }
+	  }
+    /*
+    int GetRange(int *piData) {
+        return VL6180X_RangeGetMeasurement(piData);
     }
 
-    virtual int GetLight(int *piData) {
-        return VL6180X_GetLight(piData);
-    }
-*/    
+    int GetLight(int *piData) {
+        return VL6180X_AlsGetMeasurement(piData);
+    }*/
+		
+		int RangePollMeasurement()
+		{
+			 return VL6180x_RangePollMeasurement(Device, &RangeData);
+		}
+		
+		int AlsPollMeasurement()
+		{
+			 return VL6180x_AlsPollMeasurement(Device, &AlsData);
+		}
+		
+		    
 		/* api.c functions */
 		int VL6180x_WaitDeviceBooted(VL6180xDev_t dev);
 		int VL6180x_InitData(VL6180xDev_t dev );
@@ -204,10 +269,8 @@
 		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, uint16_t RegisterAddress, uint16_t NumByteToRead);
-		int VL6180X_IO_Write(uint8_t *pBuffer, uint16_t RegisterAddress, uint16_t NumByteToWrite);
+    /* Read function of the ID device */
+    int ReadID();
     
     /* Write and read functions from I2C */
     int VL6180x_WrByte(VL6180xDev_t dev, uint16_t index, uint8_t data);
@@ -220,20 +283,24 @@
     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);
 
-		VL6180xDev_t  DevData;
+		
 
 private:
-    /*** Instance Variables ***/
     /* IO Device */
     DevI2C &dev_i2c;
+    /* Digital out pin */
     DigitalOut *gpio0;
-    STMPE1600DigiOut *expgpio0;  
-
-//		VL6180xDev_t  DevData;
-//    VL6180xDev_t MyDeviceAddress;
-//    unsigned Present;
-//    unsigned Ready;
-    
+    /* GPIO expander */
+    STMPE1600DigiOut *expgpio0;
+    /* Input interrupt */
+    //InterruptIn *free_fall;
+    /* Device data */
+    MyVL6180Dev_t MyDevice;
+    VL6180xDev_t Device;  
+    /* Device range data */
+    VL6180x_RangeData_t RangeData;
+    /* Device als data */
+    VL6180x_AlsData_t AlsData;
 };
 
 #endif // __VL6180X_CLASS_H