Librairie adaptée au laboratoire 2

Dependencies:   ST_INTERFACES X_NUCLEO_COMMON

Fork of X_NUCLEO_6180XA1 by ST

Files at this revision

API Documentation at this revision

Comitter:
licio.mapelli@st.com
Date:
Tue Jun 07 14:56:36 2016 +0200
Parent:
47:2fc173b227d4
Child:
49:f0dd44dd59c5
Commit message:
Fixed I2C address in component descriptor to default val after component PowerOn/Off.
Overridden singleton obj fake copy constructor and (=) assignement operator to avoid multiple singleton instances.

Changed in this revision

Components/VL6180X/vl6180x_class.cpp Show annotated file Show diff for this revision Revisions of this file
Components/VL6180X/vl6180x_class.h Show annotated file Show diff for this revision Revisions of this file
x_nucleo_6180xa1.cpp Show annotated file Show diff for this revision Revisions of this file
x_nucleo_6180xa1.h Show annotated file Show diff for this revision Revisions of this file
--- a/Components/VL6180X/vl6180x_class.cpp	Mon May 23 09:59:39 2016 +0000
+++ b/Components/VL6180X/vl6180x_class.cpp	Tue Jun 07 14:56:36 2016 +0200
@@ -278,7 +278,7 @@
 //static int  VL6180x_UpscaleStaticInit(VL6180xDev_t dev);
  
 int VL6180X::VL6180x_WaitDeviceBooted(VL6180xDev_t dev){
-    uint8_t FreshOutReset;
+    uint8_t FreshOutReset=0;
     int status;
     LOG_FUNCTION_START("");
     do{
@@ -2532,7 +2532,7 @@
 {
    int  status;
     
-   uint8_t buffer;
+   uint8_t buffer=0;
    status=VL6180x_I2CRead(dev->I2cAddr, index, &buffer,1);
    if(!status)
    {
@@ -2546,6 +2546,7 @@
    int  status;
     
    uint8_t buffer[2];
+   buffer[0]=buffer[1]=0;
    status=VL6180x_I2CRead(dev->I2cAddr, index, buffer, 2);
    if(!status)
    {
@@ -2558,6 +2559,7 @@
 {
    int status;
    uint8_t buffer[4];
+   buffer[0]=buffer[1]=buffer[2]=buffer[3]=0;   
    status=VL6180x_I2CRead(dev->I2cAddr, index, buffer,4);
    if(!status)
    {
@@ -2569,7 +2571,7 @@
 int VL6180X::VL6180x_UpdateByte(VL6180xDev_t dev, uint16_t index, uint8_t AndData, uint8_t OrData)
 {
    int  status;
-   uint8_t buffer;
+   uint8_t buffer=0;
  
    status=VL6180x_I2CWrite(dev->I2cAddr, index, (uint8_t *)&buffer,(uint8_t)0);
    if(!status)
@@ -3507,6 +3509,17 @@
 }
  
  
+int VL6180X::IsPresent()
+{
+   int status; uint8_t id;
+			
+   status=ReadID(&id);
+   if(status)
+      VL6180x_ErrLog("Failed to read ID device. Device not present!\n\r");
+   return status;
+}	
+
+
 int VL6180X::StopRangeMeasurement(OperatingMode operating_mode)
 {
    int status;
--- a/Components/VL6180X/vl6180x_class.h	Mon May 23 09:59:39 2016 +0000
+++ b/Components/VL6180X/vl6180x_class.h	Tue Jun 07 14:56:36 2016 +0200
@@ -133,7 +133,8 @@
     */
     virtual ~VL6180X(){ 
     	if (gpio1Int != NULL) delete gpio1Int;
-    }     
+    }  
+    
     /* warning: VL6180X class inherits from GenericSensor, RangeSensor and LightSensor, that haven`t a destructor.
        The warning should request to introduce a virtual destructor to make sure to delete the object */
 
@@ -150,6 +151,9 @@
 	  *gpio0=1;
        else if(expgpio0) 
 	  *expgpio0=1;
+       
+       MyDevice.I2cAddr=DEFAULT_DEVICE_ADDRESS;
+       MyDevice.Ready=0;       
     } 
 
 	/**
@@ -162,9 +166,11 @@
        if(gpio0) 
 	  *gpio0=0;
        else if(expgpio0) 
-	  *expgpio0=0;			
-    }
-    
+	  *expgpio0=0;	
+       
+       MyDevice.I2cAddr=DEFAULT_DEVICE_ADDRESS;
+       MyDevice.Ready=0;       
+    }   
     
 	/**
 	 * @brief       Start the measure indicated by operating mode
@@ -283,9 +289,11 @@
  
    VL6180x_Off();
    VL6180x_On();
+   
    status=VL6180x_WaitDeviceBooted(Device);
-   if(status)
-      VL6180x_ErrLog("WaitDeviceBooted fail\n\r");
+   if(status) {
+      VL6180x_ErrLog("WaitDeviceBooted fail\n\r");      
+   }  
    status=IsPresent();
    if(!status)
    {
@@ -311,11 +319,6 @@
             return status;
          }
       }
-      else
-      {
-         printf("Invalid new address!\n\r");
-         return INVALID_PARAMS;
-      }
       Device->Ready=1;
    }
    return status; 
@@ -1186,16 +1189,7 @@
     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);
 		
-		
-    int IsPresent()
-    {
-       int status; uint8_t id;
-			
-       status=ReadID(&id);
-       if(status)
-          VL6180x_ErrLog("Failed to read ID device. Device not present!\n\r");
-       return status;
-    }	
+    int IsPresent();
     int StopRangeMeasurement(OperatingMode operating_mode);
     int StopAlsMeasurement(OperatingMode operating_mode);
     int GetRangeMeas(OperatingMode operating_mode, MeasureData_t *Data);	
--- a/x_nucleo_6180xa1.cpp	Mon May 23 09:59:39 2016 +0000
+++ b/x_nucleo_6180xa1.cpp	Tue Jun 07 14:56:36 2016 +0200
@@ -68,70 +68,54 @@
 {	
    int status, n_dev=0; uint8_t sensor_address;
 	
-   sensor_top->VL6180x_Off();
-   sensor_bottom->VL6180x_Off();
-   sensor_left->VL6180x_Off();
-   sensor_right->VL6180x_Off();
-   sensor_address = NEW_SENSOR_TOP_ADDRESS;
-   status=sensor_top->Init(&sensor_address);
-   if(status)
-   {
-      delete sensor_top;
-      delete gpio0_top;
-      sensor_top=NULL;
-      gpio0_top=NULL;
-      printf("Sensor top not present\n\r");
-   }
-   else
-   {
-      printf("Sensor top present\n\r");
-      n_dev++;
-   }
-   sensor_address = NEW_SENSOR_BOTTOM_ADDRESS;
-   status=sensor_bottom->Init(&sensor_address);
-   if(status)
-   {
-      delete sensor_bottom;
-      delete gpio0_bottom;
-      sensor_bottom=NULL;
-      gpio0_bottom=NULL;
-      printf("Sensor bottom not present\n\r");
-   }
-   else
-   {
-      printf("Sensor bottom present\n\r");
-      n_dev++;
-   }
-   sensor_address = NEW_SENSOR_LEFT_ADDRESS;
-   status=sensor_left->Init(&sensor_address);
-   if(status)
-   {
-      delete sensor_left;
-      delete gpio0_left;
-      sensor_left=NULL;
-      gpio0_left=NULL;
-      printf("Sensor left not present\n\r");
-   }
-   else
-   {
-      printf("Sensor left present\n\r");
-      n_dev++;
-   }
-   sensor_address = NEW_SENSOR_RIGHT_ADDRESS;
-   status=sensor_right->Init(&sensor_address);
-   if(status)
-   {
-      delete sensor_right;
-      delete gpio0_right;
-      sensor_right=NULL;
-      gpio0_right=NULL;
-      printf("Sensor right not present\n\r");
-   }
-   else
-   {
-      printf("Sensor right present\n\r");
-      n_dev++;
-   }
+     sensor_top->VL6180x_Off();
+     sensor_bottom->VL6180x_Off();
+     sensor_left->VL6180x_Off();
+     sensor_right->VL6180x_Off();
+     sensor_address = NEW_SENSOR_TOP_ADDRESS;     
+     status=sensor_top->Init(&sensor_address);
+     if(status)
+     {
+        printf("Sensor top not present\n\r");
+     }
+     else
+     {
+        printf("Sensor top present\n\r");
+        n_dev++;
+     }
+     sensor_address = NEW_SENSOR_BOTTOM_ADDRESS;
+     status=sensor_bottom->Init(&sensor_address);
+     if(status)
+     {
+        printf("Sensor bottom not present\n\r");
+     }
+     else
+     {
+        printf("Sensor bottom present\n\r");
+        n_dev++;
+     }
+     sensor_address = NEW_SENSOR_LEFT_ADDRESS;
+     status=sensor_left->Init(&sensor_address);
+     if(status)
+     {
+        printf("Sensor left not present\n\r");
+     }
+     else
+     {
+        printf("Sensor left present\n\r");
+        n_dev++;
+     }
+     sensor_address = NEW_SENSOR_RIGHT_ADDRESS;
+     status=sensor_right->Init(&sensor_address);
+     if(status)
+     {
+        printf("Sensor right not present\n\r");
+     }
+     else
+     {
+        printf("Sensor right present\n\r");
+        n_dev++;
+     }
    if(n_dev==0)
       return 1;
    else
--- a/x_nucleo_6180xa1.h	Mon May 23 09:59:39 2016 +0000
+++ b/x_nucleo_6180xa1.h	Tue Jun 07 14:56:36 2016 +0200
@@ -57,11 +57,11 @@
 /* Classes--------------------------------------------------------------------*/
 
 /* Classes -------------------------------------------------------------------*/
-/** Class representing the X-NUCLEO-VL6180XA1 expansion board
+/** Class representing the X-NUCLEO-VL6180XA1 expansion board singleton obj
  */
 class X_NUCLEO_6180XA1
 {
- public:
+private:
      /** Constructor 1
      * @param[in] &i2c device I2C to be used for communication
      */
@@ -124,7 +124,7 @@
        if(sensor_top!=NULL)
        {
           delete sensor_top;
-	        sensor_top=NULL;
+	  sensor_top=NULL;
        }
        if(gpio0_bottom!=NULL)
        {
@@ -134,7 +134,7 @@
        if(sensor_bottom!=NULL)
        {
           delete sensor_bottom;
-	        sensor_bottom=NULL;
+	  sensor_bottom=NULL;
        }
        if(gpio0_left!=NULL)
        {
@@ -144,7 +144,7 @@
        if(sensor_left!=NULL)
        {
           delete sensor_left;
-	        sensor_left=NULL;
+	  sensor_left=NULL;
        }
        if(gpio0_right!=NULL)
        {
@@ -154,26 +154,41 @@
        if(sensor_right!=NULL)
        {
           delete sensor_right;
-	        sensor_right=NULL;
+	  sensor_right=NULL;
        }
-	   delete stmpe1600;
-	   stmpe1600 = NULL;
-	   delete Switch;
-	   Switch = NULL;
-	   delete display;
-	   display = NULL;
+       delete stmpe1600;
+       stmpe1600 = NULL;
+       delete Switch;
+       Switch = NULL;
+       delete display;
+       display = NULL;
        _instance=NULL;
     }
 
-	/**
-	 * @brief       Creates a singleton object instance
+     /**
+     * @brief       Override default copy constructor as empty
+     * @param[in]   &X_NUCLEO_6180XA1 singleton object reference
+     * @return     
+     */		    
+    X_NUCLEO_6180XA1() {};
+    
+     /**
+     * @brief       Override default assignement operator to avoid multiple singletons
+     * @param[in]   &X_NUCLEO_6180XA1 singleton object reference
+     * @return     
+     */		    
+    void operator = (const X_NUCLEO_6180XA1&);
+    
+public:
+     /**
+     * @brief       Creates a singleton object instance
      * @param[in]   &i2c device I2C to be used for communication
-	 * @return      Pointer to the object instance
-	 */					     
+     * @return      Pointer to the object instance
+     */					     
     static X_NUCLEO_6180XA1 *Instance(DevI2C *ext_i2c);
     
-	/**
-	 * @brief       Creates a singleton object instance
+     /**
+     * @brief       Creates a singleton object instance
      * @param[in]   &i2c device I2C to be used for communication
      * @param[in]   PinName gpio1_top the pin connected to top sensor INT     
      * @param[in]   PinName gpio1_bottem the pin connected to bottom sensor INT          
@@ -184,6 +199,8 @@
     static X_NUCLEO_6180XA1 *Instance(DevI2C *ext_i2c, PinName gpio1_top, PinName gpio1_bottom,
                                              PinName gpio1_left, PinName gpio1_right);
 
+    
+    
 	/**
 	 * @brief       Initialize the board and sensors with deft values
 	 * @return      0 on success
@@ -203,15 +220,15 @@
     VL6180X *sensor_bottom;
     VL6180X *sensor_left;
     VL6180X *sensor_right;
-	STMPE1600 * stmpe1600;
-	SWITCH * Switch;		
+    STMPE1600 * stmpe1600;
+    SWITCH * Switch;	    
+    Display *display;
+    
+private:
     STMPE1600DigiOut *gpio0_top;
     STMPE1600DigiOut *gpio0_bottom;
     STMPE1600DigiOut *gpio0_left;
     STMPE1600DigiOut *gpio0_right;    
-    Display *display;
-    
- private:		 		
     static X_NUCLEO_6180XA1 *_instance;
 };