Firmware to manage X-Nucleo-IPS02A1 (24V) Intelligent Power Switch.

Dependents:   HelloWorld_IPS02A1

Fork of X_NUCLEO_IPS02A1 by ST Expansion SW Team

X_NUCLEO_IPS02A1 24V Intelligent Power Switch (IPS) Nucleo Expansion Board Firmware Package

Introduction

This firmware package includes Components Device Drivers and Board Support Package for STMicroelectronics X-NUCLEO-IPS02A1 IPS Expansion Board.

Firmware Library

Class X_NUCLEO_IPS02A1 is intended to represent the Intelligent Power Switch expansion board with the same name.

The expansion board is basically featuring by one IP:

  • vps2535h vertical power switch.

It is intentionally implemented as a singleton because only one X-NUCLEO-IPS02A1 at a time might be deployed in a HW component stack. In order to get the singleton instance you have to call class method `Instance()`, e.g.:

// IPS expansion board singleton instance
static X_NUCLEO_IPS02A1 *ips_expansion_board = X_NUCLEO_IPS02A1::Instance();

How to use the firmware package

The basic operations to deal with the firmware pkg and use the IPS are the following :

1) instantiate the X_NUCLEO by calling class method `Instance()`:

// Sensors expansion board singleton instance
static X_NUCLEO_IPS02A1 *sensors_expansion_board = X_NUCLEO_IPS02A1::Instance();

2) Switch-on or Switch-off loads output (Channel 1 or Channel 2) by setting or clearing associated digital input :

            ips_expansion_board.vps2535h.Fr_Stby = 1; // set Fr_Stby pin
            ips_expansion_board.vps2535h.In_1 = 1; // switch-on Channel 1
            ips_expansion_board.vps2535h.In_2 = 0; // switch-off Channle 2 

3) Read Current circulating on Channel 1 or Channel 2 and print on the Terminal

            Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_1);
            printf("Current Ch1 = %2.3fA \n\r", Multisense_Signal);
            Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_2);
            printf("Current Ch2 = %2.3fA \n\r", Multisense_Signal);

Files at this revision

API Documentation at this revision

Comitter:
grussian
Date:
Thu Apr 07 13:37:58 2016 +0000
Child:
1:95670ff9e177
Commit message:
first working realease

Changed in this revision

Components/Common/IPS.h Show annotated file Show diff for this revision Revisions of this file
Components/Interfaces/PowerSwitch.h Show annotated file Show diff for this revision Revisions of this file
Components/vps235h2/vps235h2.h Show annotated file Show diff for this revision Revisions of this file
Components/vps235h2/vps235h2_class.cpp Show annotated file Show diff for this revision Revisions of this file
Components/vps235h2/vps235h2_class.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
x_nucleo_ips02a1.cpp Show annotated file Show diff for this revision Revisions of this file
x_nucleo_ips02a1.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Components/Common/IPS.h	Thu Apr 07 13:37:58 2016 +0000
@@ -0,0 +1,141 @@
+/**
+  *******************************************************************************
+  * @file    IPS.c
+  * @author  APG Mass Market
+  * @version V1.0.0
+  * @date    01-July-2015
+  * @brief   IPS (Intelligent Power Switch) module driver common interface.
+  *
+  *******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ********************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __IPS_H
+#define __IPS_H
+
+#include <stdint.h>
+
+ 
+/* Exported types ------------------------------------------------------------*/ 
+  
+/** 
+  * @brief IPS Init Structure definition  
+  */ 
+
+typedef struct
+{
+  uint32_t Init;              /* Inserted for sake of generality */ 
+}IPS_InitTypeDef;
+
+/** 
+  * @brief IPS  State structures definition  
+  */ 
+typedef enum
+{
+  IPS_SUCCESS          = 0x00,    /*!< No error */
+  IPS_FAIL             = 0x01,    /*!< Error    */ 
+  IPS_WRONG_CHANNEL    = 0x02,    /*!< Wrong IPS channel selected */
+ }IPS_StatusTypeDef;
+
+/** 
+  * @brief IPS I/O error type structures definition  
+  */ 
+ typedef enum
+{
+  IPS_IO_SUCCESS         = 0x00,    /*!< No error */
+  IPS_IO_FAIL            = 0x01,    /*!< Error    */
+  IPS_ADC_INIT_FAILED    = 0x02,    /*!< ADC Init failed */
+  IPS_ADC_CAL_FAILED     = 0x03,    /*!< ADC Calibration failed */
+  IPS_ADC_CONF_CH_FAILED = 0x04,    /*!< ADC Configure Channel  failed */
+  IPS_ADC_START_FAILED   = 0x05,    /*!< ADC Start Conversion failed */
+  IPS_ADC_STOP_FAILED    = 0x06,    /*!< ADC Stop Conversion failed */
+  IPS_ADC_STATE_FAILED   = 0x07,    /*!< ADC Get State failed */
+  IPS_ADC_POLL_FAILED    = 0x08     /*!< ADC Poll for conversion failed */
+}IO_ErrorType;
+
+/** 
+  * @brief  IPS handle Structure definition  
+  */  
+typedef struct
+{
+  uint8_t                       ipsChannel;          /* IPS channel to get sense measurement*/
+  IPS_StatusTypeDef             Status;              /* IPS Status   */
+  IO_ErrorType                  IO_Status;           /* IO Status */
+  float                         SenseRawValue;       /* V-Sense raw value */  
+  float                         GNDSenseRawValue;    /* GND Value */  
+  float                         TemperatureValue;    /* Chip Temperature */
+  float                         VccValue;            /* Vcc Value */
+  float                         IValue;              /* Current Value */
+}IPS_HandleTypeDef;
+
+/**
+ * @brief  IPS component id enumerator definition
+ */
+typedef enum
+{
+  IPS_NONE_COMPONENT = 0,
+  ISP_VPS220H1_COMPONENT = 1
+} IPS_ComponentTypeDef;
+
+/**
+ * @brief  IPS driver extended structure definition
+ */
+typedef struct
+{
+  IPS_ComponentTypeDef
+  id; /* This id must be unique for each component belonging to this class that wants to extend common class */
+  void *pData; /* This pointer is specific for each component */
+} IPS_DrvExtTypeDef;
+
+/** 
+  * @brief  Intelligent Power Switch driver structure definition  
+  */ 
+typedef struct
+{  
+  IPS_StatusTypeDef            (*Init)(IPS_HandleTypeDef *);
+  IPS_StatusTypeDef            (*Close)(void);
+  IPS_StatusTypeDef            (*ConfigureMuxChannel)(uint8_t, uint8_t);
+  IPS_StatusTypeDef            (*GetSenseChannelDiagnostic)(IPS_HandleTypeDef *);
+  IPS_StatusTypeDef            (*GetTemperatureChipSense)(IPS_HandleTypeDef *);     
+  IPS_StatusTypeDef            (*GetVccSense)(IPS_HandleTypeDef *hips);  
+  IPS_StatusTypeDef            (*GetCurrentSense)(IPS_HandleTypeDef *hips);
+  IPS_DrvExtTypeDef            *extData;
+}IPS_DrvTypeDef;
+                                
+#endif /* __IPS_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/   
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Components/Interfaces/PowerSwitch.h	Thu Apr 07 13:37:58 2016 +0000
@@ -0,0 +1,70 @@
+/**
+ ******************************************************************************
+ * @file    PowerSwitch.h
+ * @author  APG Mass Market
+ * @version V1.0.1
+ * @date    16-Nov-2015
+ * @brief   This file contains the abstract class describing in general
+ *          the interfaces of a generic intelligent power switch (IPS)
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *   1. Redistributions of source code must retain the above copyright notice,
+ *      this list of conditions and the following disclaimer.
+ *   2. Redistributions in binary form must reproduce the above copyright notice,
+ *      this list of conditions and the following disclaimer in the documentation
+ *      and/or other materials provided with the distribution.
+ *   3. Neither the name of STMicroelectronics nor the names of its contributors
+ *      may be used to endorse or promote products derived from this software
+ *      without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent from recursive inclusion --------------------------------*/
+#ifndef __GENERIC_IPS_CLASS_H
+#define __GENERIC_IPS_CLASS_H
+
+/* Includes ------------------------------------------------------------------*/
+#include <stdint.h>
+
+/* Classes  ------------------------------------------------------------------*/
+/** An abstract class for Generic Power Switch
+ */
+class PowerSwitch
+{
+ public:
+	/**
+	 * @brief       Initialization of IPS
+	 * @param[out]  ptr Pointer to device specific initalization structure
+	 * @return      0 in case of success, an error code otherwise
+	 */
+	virtual int Open(void *ptr) = 0;
+     
+        /**
+	 * @brief      Close IPS
+	 * @param[in]  void
+	 * @return     0 in case of success, an error code otherwise
+	 */
+	virtual int Close(void) = 0;
+        
+};
+
+#endif /* __GENERIC_IPS_CLASS_H */
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Components/vps235h2/vps235h2.h	Thu Apr 07 13:37:58 2016 +0000
@@ -0,0 +1,79 @@
+/**
+  *******************************************************************************
+  * @file    vps235h2.h
+  * @author  APG Mass Market
+  * @version V1.0.0
+  * @date    01-July-2015
+  * @brief   VPS235H1 module driver.
+  *          This file provides firmware functions to manage the following 
+  *          functionalities of the VPS235H1 power switch:
+  *           + Initialization and de-initialization functions
+  *           + Diagnostic Sense Pin Configuration
+  *           + Get Sense Diagnostic Values
+  *******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ********************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __VPS235H2_H
+#define __VPS235H2_H
+
+/* Number of channels */
+#define NUM_CHANNELS 2
+
+/* Channel 0 */
+#define CHANNEL_1 1
+/* Channel 1 */
+#define CHANNEL_2 2
+
+/* V-Sense Temperature Typical value at 25 degree */
+#define V_SENSE_TC_TYPICAL 2.070
+
+/* Vcc transfer function */
+#define VCC_TRANSFER_FUNCT(sense)  ((sense)*4)
+/* Current K factor */
+#define K 3500
+
+
+
+#endif /* __VPS235H2_H */
+
+
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 
+  
+  
+  
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Components/vps235h2/vps235h2_class.cpp	Thu Apr 07 13:37:58 2016 +0000
@@ -0,0 +1,159 @@
+/**
+  ******************************************************************************
+  * @file    vps235h2.cpp
+  * @author  APG Mass Market
+  * @version V1.0.0
+  * @date    01-July-2015
+  * @brief   implementatio for VPS235H2 driver class
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */ 
+
+/* Includes ------------------------------------------------------------------*/
+#include "vps235h2_class.h"
+#include "vps235h2.h"
+
+
+/* Methods -------------------------------------------------------------------*/
+/**
+ * @brief  Set VPS235H2 Initialization
+ * @param  VPS235H2 handel structure
+ * @retval IPS_SUCCESS
+ */
+
+int VPS235H2 :: Open(void *init_struct) {
+      VPS235H2_Init();
+      return IPS_SUCCESS; 
+      
+    }
+
+/**
+ * @brief  Close VPS235H2
+ * @param  none
+ * @retval IPS_SUCCESS
+ */
+
+int VPS235H2 :: Close(void) {
+      VPS235H2_Close();
+      return IPS_SUCCESS; 
+    }
+
+
+/* Module Interface */
+/**
+  * @brief  Initializes the VPS235H2 device
+  * @param  none
+  * @retval VPS235H2 status
+  */
+IPS_StatusTypeDef VPS235H2 :: VPS235H2_Init(){
+   Fr_Stby = 1;
+   return IPS_SUCCESS;
+}
+
+/**
+  * @brief  Close (Deinitialize) the VPS235H2 device and used peripheral.
+  * @param  None
+  * @retval VPS235H2 status
+  */
+IPS_StatusTypeDef VPS235H2 :: VPS235H2_Close(){
+    Fr_Stby = 1;
+    return IPS_SUCCESS;
+}
+
+
+/**
+  * @brief  GetSense function gets the value of the Sense power switch output pin 
+  * (for either Ch1 or Ch2) upon IO conversion. It just reads from sense pin
+  * @param  hips: pointer to a VPS235H2_HandleTypeDef structure that contains
+  *                the configuration information for the specified VPS235H2 module.
+  *                Value got from V-sense output is stored in hips->SenseValue
+  *                field. Status of the operation is stored in hips->Status and 
+  *                hips->Status fields
+  * @retval IPS_StatusTypeDef status
+  */
+IPS_StatusTypeDef VPS235H2 :: VPS235H2_GetSenseChannelDiagnostic(IPS_HandleTypeDef *hips){
+  hips->SenseRawValue = 0; //if channel is wrong Sense value is 0
+  hips->GNDSenseRawValue = 0; // VPS235H2 doesn't require GND measurement compensation
+  hips-> Status =IPS_WRONG_CHANNEL;
+  hips->IO_Status = IPS_IO_FAIL;
+  if (hips ->ipsChannel == CHANNEL_1)
+     hips->SenseRawValue = CurrentSense1.read() * V_REF * ((R_D1+R_D2)/(R_D2));
+  if (hips ->ipsChannel == CHANNEL_2)
+     hips->SenseRawValue = CurrentSense2.read() * V_REF * ((R_D1+R_D2)/(R_D2));
+ 
+  hips->IO_Status = IPS_IO_SUCCESS;
+  hips->Status =IPS_SUCCESS;
+  return hips-> Status;
+}
+
+
+/**
+  * @brief  GetSecureCurrentSense  function gets the I-sense switch output pin
+  *         upon ADC conversion. 
+  * @param  hips: pointer to a IPS_HandleTypeDef structure that contains
+  *         the configuration information for the specified VPS235H2 module.
+  *         Value got from V-sense output is stored in hips->SenseValue
+  *         field.
+  *         Status of the operation is stored in hips->Status fields   
+  * @retval IPS status
+  */
+IPS_StatusTypeDef VPS235H2 :: VPS235H2_GetSecureCurrentSense(IPS_HandleTypeDef *hips){
+  
+  if ((hips ->ipsChannel != CHANNEL_1) && (hips ->ipsChannel != CHANNEL_2) ){
+    hips->Status = IPS_WRONG_CHANNEL;
+    return IPS_WRONG_CHANNEL; 
+  }
+  
+  /* Get sense feedback */
+  if ((VPS235H2_GetSenseChannelDiagnostic(hips) == IPS_SUCCESS) && (hips->Status == IPS_SUCCESS)){
+    hips->IValue= K*hips->SenseRawValue/R_SENSE;
+    return IPS_SUCCESS;
+  }
+  else
+    return IPS_FAIL; // see hips->Status
+}
+
+/**
+  * @brief  GetCurrent  function gets the I-sense switch output pin
+  * @param  Ch: Channel number. Possible value are CHANNEL_1 or CHANNEL_2
+  * @retval Current Value
+  */
+float VPS235H2 :: GetCurrent(int Ch){
+ 
+  if (Ch == CHANNEL_1)
+    return (K*CurrentSense1.read()* ((R_D1+R_D2)/(R_D2)) * V_REF/R_SENSE);
+  if (Ch == CHANNEL_2)
+    return (K*CurrentSense2.read()* ((R_D1+R_D2)/(R_D2)) * V_REF/R_SENSE);
+  return 0;
+}
+
+
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Components/vps235h2/vps235h2_class.h	Thu Apr 07 13:37:58 2016 +0000
@@ -0,0 +1,134 @@
+/**
+  *******************************************************************************
+  * @file    vps235h2_class.h
+  * @author  APG Mass Market
+  * @version V1.0.1
+  * @date    01-Feb-2015
+  * @brief   vps235h2 module driver.
+  *          This file provides firmware functions to manage the following 
+  *          functionalities of the vps235h2 power switch:
+  *           + Initialization and de-initialization functions
+  *           + Diagnostic Sense Pin Configuration
+  *           + Get Sense Diagnostic Values
+  *******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ********************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __VPS220H1_CLASS_H
+#define __VPS220H1_CLASS_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "mbed.h"
+#include "PowerSwitch.h"
+#include "IPS.h"
+#include "vps235h2.h"
+
+
+
+/* Classes -------------------------------------------------------------------*/
+/** Class representing a VPS235H2 power switch component
+ */  
+
+class VPS235H2 : public PowerSwitch {
+    
+public:    
+    DigitalOut In_1,In_2,Fr_Stby;
+   
+  
+ 
+    /** Constructor
+      * @param[in] input Pin for the power switch
+      * @param[out] sense1 and sense2, outputs from Ch1 and Ch2
+      * @param[in] vref, reference voltage
+      * @param[in] rsense, sense resistor ouside of chip
+      * @param[in] rd1, upper partitor resistor (=R6 in schematic) to protect ADC 
+      * @param[in] rd1, lower partitor resistor (=R7 in schematic) to protect ADC
+    
+      */
+    VPS235H2(PinName in1, PinName in2, PinName frStdby,
+             PinName sense1, PinName sense2, float vref,float rsense,float rd1,float rd2):
+             PowerSwitch(),
+             In_1 (in1),
+             In_2 (in2),
+             Fr_Stby(frStdby),
+             V_REF(vref), 
+             R_SENSE(rsense),
+             R_D1(rd1),
+             R_D2(rd2),
+             CurrentSense1(sense1),
+             CurrentSense2(sense2)
+             {
+                  
+             In_1 = In_2 = Fr_Stby = 0; 
+      
+    }
+    
+    /** Destructor
+    */
+    virtual ~VPS235H2() {}
+  
+    /*** Interface Methods ***/
+    virtual int Open(void *init_struct);
+    virtual int Close(void);         
+    /* Provide Ch current w/o checking status of convertion */
+    float GetCurrent(int Ch);
+    /* Provide Ch current Value with status of convertion */
+    IPS_StatusTypeDef VPS235H2_GetSecureCurrentSense(IPS_HandleTypeDef *hips);
+         
+   protected:
+    /*** Methods ***/
+    IPS_StatusTypeDef VPS235H2_Close(void);
+    IPS_StatusTypeDef VPS235H2_Init(void);
+    IPS_StatusTypeDef VPS235H2_GetSenseChannelDiagnostic(IPS_HandleTypeDef *);
+
+   private:
+    const float V_REF;      // Reference voltage for V-sense measurement
+    const float R_SENSE;    // R-sense value depending on resistor connected to V-sense  output
+    const float R_D1;       // R_D1 upper divisor partitor resistor (=R6 in schematic)
+    const float R_D2;       // R_D2 lower divisor partitor resistor (=R7 in schematic)
+    AnalogIn CurrentSense1; // V-Sense Output from Ch1
+    AnalogIn CurrentSense2; // V-Sense Output  from Ch2
+    
+};
+#endif /* __VPS235H2_CLASS_H */
+
+
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 
+  
+  
+  
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Apr 07 13:37:58 2016 +0000
@@ -0,0 +1,279 @@
+/**
+ ******************************************************************************
+ * @file    main.cpp
+ * @author  APG Mass Market
+ * @version V1.0.1
+ * @date    16-Nov-2015
+ * @brief   Example application for using the X_NUCLEO_IPS02A1 
+ *          Intelligent Power Switch Nucleo expansion board.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *   1. Redistributions of source code must retain the above copyright notice,
+ *      this list of conditions and the following disclaimer.
+ *   2. Redistributions in binary form must reproduce the above copyright notice,
+ *      this list of conditions and the following disclaimer in the documentation
+ *      and/or other materials provided with the distribution.
+ *   3. Neither the name of STMicroelectronics nor the names of its contributors
+ *      may be used to endorse or promote products derived from this software
+ *      without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ *  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+*/ 
+
+/**
+ * @mainpage X_NUCLEO_IPS02A1 Intelligent Power Switch Nucleo Expansion Board Firmware Package
+ *
+ * <b>Introduction</b>
+ *
+ * This firmware package includes Components Device Drivers, Board Support Package
+ * and example application for STMicroelectronics X_NUCLEO_IPS02A1 Intelligent Power Switch
+ * Nucleo Expansion Board
+ * 
+ * <b>Example Application</b>
+ *
+ */
+/*** Includes ----------------------------------------------------------------- ***/
+#include "mbed.h"
+#include "assert.h"
+#include "x_nucleo_ips02a1.h"
+
+/*** Static variables --------------------------------------------------------- ***/
+#ifdef DBG_MCU
+#include "DbgMCU.h"
+static DbgMCU enable_dbg;
+#endif // DBG_MCU
+
+/* HW settings */
+/* Pay attention before changing HW settings, they must be coherent with you HW design */
+/* Power Switch Connection to Arduino connectors */
+#define IPS02A1_PIN_IN_1             (D5)
+#define IPS02A1_PIN_IN_2             (D6)
+#define IPS02A1_PIN_FR_STBY          (D4)
+#define IPS02A1_PIN_CURRENTSENSE1    (A2)
+#define IPS02A1_PIN_CURRENTSENSE2    (A3)
+
+
+/* V-Ref */
+#define V_REF 3.3
+/* Rsense Value */
+#define R_SENSE 1e3
+/* R_D1 */
+#define R_D1 56e3
+/* R_D2 */
+#define R_D2 36e3
+
+/* End of HW settings */
+
+static X_NUCLEO_IPS02A1 &ips_expansion_board = X_NUCLEO_IPS02A1::Instance(IPS02A1_PIN_IN_1,
+                                                                          IPS02A1_PIN_IN_2,
+                                                                          IPS02A1_PIN_FR_STBY,
+                                                                          IPS02A1_PIN_CURRENTSENSE1,
+                                                                          IPS02A1_PIN_CURRENTSENSE2,                                                                         
+                                                                          V_REF,
+                                                                          R_SENSE,
+                                                                          R_D1,
+                                                                          R_D2);
+    
+                          
+static Ticker ticker;
+DigitalOut UserLed(LED1);    
+
+/*** Main function ------------------------------------------------------------- ***/
+/* Generic main function/loop, interrupt based cyclic execution
+*/
+
+float Multisense_Signal = 0;    // Multisense pin - signal level
+bool  ButtonPressed = 0;         // User Button
+int   TestSequence = 1;           // Test sequence counter
+
+//------------------------------------
+// Hyperterminal configuration
+// 9600 bauds, 8-bit data, no parity
+//------------------------------------
+
+InterruptIn UserButton(USER_BUTTON);  // B1 is the User Button
+void B1_pressed (void);
+void LedBlink (int TestSequence);
+void Write_Serial (void);
+void Reset_Pins (void);
+
+
+int main(void){
+    UserButton.fall(&B1_pressed);       //interrupt User Button
+   
+    printf("############################################################ \n\r");
+    printf("###################  TEST PROCEDURE ######################## \n\r");
+    printf("############################################################ \n\n\r");
+    printf("This demo performs current measurements on Ch1 and Ch2  \n\r");
+    printf("in the following conditions: \n\r\n\r");
+    printf(" 1) Ch1 OFF, Ch2 OFF \n\r");
+    printf(" 2) Ch1 ON,  Ch2 OFF \n\r");
+    printf(" 3) Ch1 OFF, Ch2 ON \n\r");
+    printf(" 4) Ch1 ON,  Ch2 ON \n\r\n\r");
+      
+    printf("Start test Procedure.... \n\r\n\r");
+    printf("PRESS USER BUTTON (Blue One) on NUCLEO to perform single test \n\r\n\r\n\r");
+    
+    
+    while (true) {
+        // wait for User button is pressed 
+        while (!ButtonPressed) {
+        }
+           
+        ButtonPressed = 0;
+        
+        LedBlink(TestSequence);
+     
+        switch (TestSequence) {
+          case (1):
+            printf("############################################################ \n\r");
+            printf("###################  TEST PROCEDURE ######################## \n\r");
+            printf("############################################################ \n\n\r");
+            printf("This demo performs current measurements on Ch1 and Ch2  \n\r");
+            printf("in the following conditions: \n\r\n\r");
+            printf(" 1) Ch1 OFF, Ch2 OFF \n\r");
+            printf(" 2) Ch1 ON,  Ch2 OFF \n\r");
+            printf(" 3) Ch1 OFF, Ch2 ON \n\r");
+            printf(" 4) Ch1 ON,  Ch2 ON \n\r\n\r");
+            printf("\n\r\n\r");
+            break;
+          case (2): {
+            printf("Test 1: StandBy\n\r");
+            Reset_Pins();
+            wait (0.1);
+            Write_Serial();
+            Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_1);
+            printf("Current Ch1 = %2.3fA \n\r", Multisense_Signal);
+            Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_2);
+            printf("Current Ch2 = %2.3fA \n\r", Multisense_Signal);
+            printf("\n\r\n\r");
+           }
+           break;
+
+          
+          case(3):{
+            printf("Test 2: Ch1=ON, CH2=OFF\n\r");
+            ips_expansion_board.vps235h2.In_1 = 1;
+            ips_expansion_board.vps235h2.In_2 = 0;
+            ips_expansion_board.vps235h2.Fr_Stby = 1;
+           
+            wait (0.1);
+            Write_Serial();
+            Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_1);
+            printf("Current Ch1 = %2.3fA \n\r", Multisense_Signal);
+            Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_2);
+            printf("Current Ch2 = %2.3fA \n\r", Multisense_Signal);
+            wait (0.5);
+            Reset_Pins();
+            printf("\n\r\n\r");
+           }
+           break;
+
+          case(4):{
+            printf("Test 3: Ch1=OFF, CH2=ON\n\r");
+            ips_expansion_board.vps235h2.In_1 = 0;
+            ips_expansion_board.vps235h2.In_2 = 1;
+            ips_expansion_board.vps235h2.Fr_Stby = 1;
+
+            wait (0.1);
+            Write_Serial();
+            Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_1);
+            printf("Current Ch1 = %2.3fA \n\r", Multisense_Signal);
+            Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_2);
+            printf("Current Ch2 = %2.3fA \n\r", Multisense_Signal);
+            wait (.5);
+            Reset_Pins();
+            printf("\n\r\n\r");
+           }
+           break;
+
+          case(5):{
+            printf("Test 4: Ch1=ON, CH2=ON  \n\r");
+            ips_expansion_board.vps235h2.In_1= 1;
+            ips_expansion_board.vps235h2.In_2 = 1;
+            ips_expansion_board.vps235h2.Fr_Stby = 1;
+            wait (0.1);
+            Write_Serial();
+            Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_1);
+            printf("Current Ch1 = %2.3fA \n\r", Multisense_Signal);
+            Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_2);
+            printf("Current Ch2 = %2.3fA \n\r", Multisense_Signal);
+            wait (.5);
+            Reset_Pins();
+            printf("\n\r\n\r");
+           }
+          break;
+
+          default: {
+            printf("End Test Cycle...press to user button to continue\n\n\n\r");  
+            TestSequence = 0;
+            Reset_Pins();
+           }
+          break;
+
+        } 
+        
+    }
+    
+ }
+
+
+void B1_pressed (){
+  // Interrupt procedure - User button is pressed
+    TestSequence ++;
+
+    UserLed = 1; // LED is ON
+    wait(0.05); // 50 ms
+    UserLed = 0; // LED is OFF
+
+    ButtonPressed = 1;
+
+}
+
+void LedBlink (int TestSequence){
+// Option feedback by usingUser LED
+    for (int TestCounter =0; TestCounter<TestSequence; TestCounter++) {
+        UserLed = 1; // LED is ON
+        wait(0.05); // 50 ms
+        UserLed = 0; // LED is OFF
+        wait(0.05); // 50 msec
+    }
+    wait(1-(TestSequence*2*0.05));
+}
+
+void Write_Serial (){
+// This code send messages and data to the serial port
+// send info to serial port
+
+    printf("Input 1= %d\t", ips_expansion_board.vps235h2.In_1.read());
+    printf("Input 2= %d\t", ips_expansion_board.vps235h2.In_2.read());
+    printf("Fr_Stby= %d\t\n\r", ips_expansion_board.vps235h2.Fr_Stby.read());
+    
+
+ }
+ 
+ void Reset_Pins(){
+// reset input pins to  
+   ips_expansion_board.vps235h2.In_1= 0;
+   ips_expansion_board.vps235h2.In_2 = 0;
+   ips_expansion_board.vps235h2.Fr_Stby = 0;
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Apr 07 13:37:58 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/99a22ba036c9
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/x_nucleo_ips02a1.cpp	Thu Apr 07 13:37:58 2016 +0000
@@ -0,0 +1,104 @@
+/**
+  ******************************************************************************
+  * @file    x_nucleo_ips02A1.cpp
+  * @author  APG Mass Market
+  * @version V1.0.1
+  * @date    16-Nov-2015
+  * @brief   Implementation file for the X_NUCLEO_IPS02A1 singleton class
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */ 
+
+/* Includes ------------------------------------------------------------------*/
+#include "mbed.h"
+#include "x_nucleo_ips02a1.h"
+
+/* Static variables ----------------------------------------------------------*/
+X_NUCLEO_IPS02A1* X_NUCLEO_IPS02A1::_instance = NULL;
+
+
+/* Methods -------------------------------------------------------------------*/
+/**
+ * @brief  Constructor
+ */
+X_NUCLEO_IPS02A1::X_NUCLEO_IPS02A1(PinName in1, PinName in2, PinName frstdby,
+             PinName sense1, PinName sense2, float vref,float rsense,float rd1,float rd2) : vps235h2( *(new VPS235H2(in1, in2, frstdby,
+             sense1, sense2, vref,rsense,rd1,rd2)) )   
+
+{
+}
+
+
+/**
+ * @brief     Get singleton instance
+ * @return    a pointer to the initialized singleton instance of class X_NUCLEO_IPS02A1
+ * @param[in] none
+ */
+ X_NUCLEO_IPS02A1& X_NUCLEO_IPS02A1::Instance(PinName in1, PinName in2, PinName frstdby,
+             PinName sense1, PinName sense2, float vref,float rsense,float rd1,float rd2) {
+	if(_instance == NULL) {
+		_instance = new X_NUCLEO_IPS02A1(in1,in2,frstdby,
+             sense1,sense2,vref,rsense,rd1,rd2);
+
+		if(_instance != NULL) {
+			bool ret = _instance->Init();
+			if(!ret) {
+				error("Failed to init X_NUCLEO_IPS02A1 expansion board!\n");
+			}
+		}
+	}
+
+	return (*_instance);
+}
+
+/**
+ * @brief  Initialize the singleton's power switch
+ * @retval true if initialization successful, 
+ * @retval false otherwise
+ */
+bool X_NUCLEO_IPS02A1::Init_VPS235H2(void) {
+  vps235h2.Open(NULL);
+  return true;
+}
+
+ 
+/**
+ * @brief    get current measurement from singleton's power switch
+ * @retval   *hips contain status of the operation
+ * param[in] Channel number: CHANNEL_1 or CHANNEL_2
+ */
+float  X_NUCLEO_IPS02A1:: GetCurrent(int Ch){
+  
+  return vps235h2.GetCurrent(Ch);
+  
+}
+
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/x_nucleo_ips02a1.h	Thu Apr 07 13:37:58 2016 +0000
@@ -0,0 +1,108 @@
+/**
+  *******************************************************************************
+  * @file    x_nucleo_ips02a1.h
+  * @author  APG Mass Market
+  * @version V1.0.1
+  * @date    01-July-2015
+  * @brief   Header file for class X_NUCLEO_IPS02A1 representing a X-NUCLEO-IPS02A1
+  *          expansion board 
+  *******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ********************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __X_NUCLEO_IPS02A1_H
+#define __X_NUCLEO_IPS02A1_H
+
+
+/* Includes ------------------------------------------------------------------*/
+#include "vps235h2_class.h"
+
+/* Classes -------------------------------------------------------------------*/
+/** Class X_NUCLEO_IPS02A1 is intended to represent the intelligent power switch 
+ *  Nucleo Expansion Board with the same name.
+ *
+ *  The expansion board is featuring basically of:\n
+ *  -# a VPS235H2 power switch\n
+ *
+ * It is intentionally implemented as a singleton because only one
+ * X_NUCLEO_IPS02A1 at a time might be deployed in a HW component stack.\n
+ * In order to get the singleton instance you have to call class method `Instance()`, 
+ * e.g.:
+ * @code
+ * // Intelligent Power Switch expansion board singleton instance
+ * static X_NUCLEO_IPS02A1 *<TODO>_expansion_board = X_NUCLEO_IPS02A1::Instance();
+ * @endcode
+ */
+
+class X_NUCLEO_IPS02A1
+{
+ protected:
+	X_NUCLEO_IPS02A1(PinName in1, PinName in2, PinName frstdby,
+             PinName sense1, PinName sense2, float vref,float rsense,float rd1,float rd2);
+
+	/**
+	 * @brief  Initialize the singleton's power swicth to default settings
+	 * @retval true if initialization successful, 
+	 * @retval false otherwise
+	 */
+	bool Init(void) {
+          return (Init_VPS235H2());
+	}       
+        
+	bool Init_VPS235H2(void);
+
+ public:
+	static X_NUCLEO_IPS02A1& Instance (PinName in1, PinName in2, PinName frstdby,
+             PinName sense1, PinName sense2, float vref,float rsense,float rd1,float rd2);
+    float GetCurrent(int Ch);
+       
+
+	VPS235H2  &vps235h2;
+ private:
+	static X_NUCLEO_IPS02A1 *_instance;
+
+};
+
+
+    
+
+#endif /* __X_NUCLEO_IPS02A1_H */
+
+
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
+