meta-bletchley: phosphor-virtual-sensor: add virtual HSC_Input_Power

- Virtual_P12V_AUX_HSC_Input_Power
Apply calibration equation to adjust HSC Input Power

HSC sensor reading have error with the measurement from pin directly,
those errors are different to each actually power measurement,
use linear interpolation to estimate error in each range of HSC POWER reading.

"Expression":"
var PWR[9]:={71.786,130.828,193.845,255.12,315.468,374.183,427.233,486.983,545.588};
var ERR[9]:={0.1002,0.04141,0.04927,0.05102,0.05308,0.05359,0.04437,0.05245,0.06011};
switch {
    case HSC_PWR<PWR[0]:HSC_PWR/(1+ERR[0]);
    case inrange(PWR[0],HSC_PWR,PWR[1]) : HSC_PWR/(1+ERR[0]+(HSC_PWR-PWR[0])*(ERR[1]-ERR[0])/(PWR[1]-PWR[0]));
    case inrange(PWR[1],HSC_PWR,PWR[2]) : HSC_PWR/(1+ERR[1]+(HSC_PWR-PWR[1])*(ERR[2]-ERR[1])/(PWR[2]-PWR[1]));
    case inrange(PWR[2],HSC_PWR,PWR[3]) : HSC_PWR/(1+ERR[2]+(HSC_PWR-PWR[2])*(ERR[3]-ERR[2])/(PWR[3]-PWR[2]));
    case inrange(PWR[3],HSC_PWR,PWR[4]) : HSC_PWR/(1+ERR[3]+(HSC_PWR-PWR[3])*(ERR[4]-ERR[3])/(PWR[4]-PWR[3]));
    case inrange(PWR[4],HSC_PWR,PWR[5]) : HSC_PWR/(1+ERR[4]+(HSC_PWR-PWR[4])*(ERR[5]-ERR[4])/(PWR[5]-PWR[4]));
    case inrange(PWR[5],HSC_PWR,PWR[6]) : HSC_PWR/(1+ERR[5]+(HSC_PWR-PWR[5])*(ERR[6]-ERR[5])/(PWR[6]-PWR[5]));
    case inrange(PWR[6],HSC_PWR,PWR[7]) : HSC_PWR/(1+ERR[6]+(HSC_PWR-PWR[6])*(ERR[7]-ERR[6])/(PWR[7]-PWR[6]));
    case inrange(PWR[7],HSC_PWR,PWR[8]) : HSC_PWR/(1+ERR[7]+(HSC_PWR-PWR[7])*(ERR[8]-ERR[7])/(PWR[8]-PWR[7]));
    default : HSC_PWR/(1+ERR[8]);
}
"

Signed-off-by: Allen.Wang <Allen_Wang@quantatw.com>
Change-Id: I553380e27eff35fef8020de8fe346e055d75a2f8
diff --git a/meta-facebook/meta-bletchley/recipes-phosphor/sensors/phosphor-virtual-sensor/virtual_sensor_config.json b/meta-facebook/meta-bletchley/recipes-phosphor/sensors/phosphor-virtual-sensor/virtual_sensor_config.json
index c1b5e16..981d3f5 100644
--- a/meta-facebook/meta-bletchley/recipes-phosphor/sensors/phosphor-virtual-sensor/virtual_sensor_config.json
+++ b/meta-facebook/meta-bletchley/recipes-phosphor/sensors/phosphor-virtual-sensor/virtual_sensor_config.json
@@ -102,5 +102,27 @@
             ]
         },
         "Expression": "if(avg(fan0, fan1, fan2, fan3) > 0, inlet_temp - (((avg(fan0, fan1, fan2, fan3)^2) * (5e-8)) - (avg(fan0, fan1, fan2, fan3) * (6e-4)) + 1.5841), inlet_temp)"
+    },
+    {
+        "Desc":
+        {
+            "Name": "Virtual_P12V_AUX_HSC_Input_Power",
+            "SensorType": "power"
+        },
+        "Params":
+        {
+            "DbusParam":
+            [
+                {
+                    "ParamName": "HSC_PWR",
+                    "Desc":
+                    {
+                        "Name": "P12V_AUX_HSC_Input_Power",
+                        "SensorType": "power"
+                    }
+                }
+            ]
+        },
+        "Expression": "var PWR[9]:={71.786,130.828,193.845,255.12,315.468,374.183,427.233,486.983,545.588};var ERR[9]:={0.1002,0.04141,0.04927,0.05102,0.05308,0.05359,0.04437,0.05245,0.06011};switch { case HSC_PWR<PWR[0]:HSC_PWR/(1+ERR[0]);case inrange(PWR[0],HSC_PWR,PWR[1]) : HSC_PWR/(1+ERR[0]+(HSC_PWR-PWR[0])*(ERR[1]-ERR[0])/(PWR[1]-PWR[0]));case inrange(PWR[1],HSC_PWR,PWR[2]) : HSC_PWR/(1+ERR[1]+(HSC_PWR-PWR[1])*(ERR[2]-ERR[1])/(PWR[2]-PWR[1]));case inrange(PWR[2],HSC_PWR,PWR[3]) : HSC_PWR/(1+ERR[2]+(HSC_PWR-PWR[2])*(ERR[3]-ERR[2])/(PWR[3]-PWR[2]));case inrange(PWR[3],HSC_PWR,PWR[4]) : HSC_PWR/(1+ERR[3]+(HSC_PWR-PWR[3])*(ERR[4]-ERR[3])/(PWR[4]-PWR[3]));case inrange(PWR[4],HSC_PWR,PWR[5]) : HSC_PWR/(1+ERR[4]+(HSC_PWR-PWR[4])*(ERR[5]-ERR[4])/(PWR[5]-PWR[4]));case inrange(PWR[5],HSC_PWR,PWR[6]) : HSC_PWR/(1+ERR[5]+(HSC_PWR-PWR[5])*(ERR[6]-ERR[5])/(PWR[6]-PWR[5]));case inrange(PWR[6],HSC_PWR,PWR[7]) : HSC_PWR/(1+ERR[6]+(HSC_PWR-PWR[6])*(ERR[7]-ERR[6])/(PWR[7]-PWR[6]));case inrange(PWR[7],HSC_PWR,PWR[8]) : HSC_PWR/(1+ERR[7]+(HSC_PWR-PWR[7])*(ERR[8]-ERR[7])/(PWR[8]-PWR[7]));default : HSC_PWR/(1+ERR[8]);}"
     }
 ]