tree 9bc6d746cf9b0c7c30060c47341171dcef43e47f
parent c83457ab1852a34d4ab51060bdde6f197efdd03e
author Matthew Barth <msbarth@us.ibm.com> 1581113686 -0600
committer Matthew Barth <msbarth@us.ibm.com> 1581431991 -0600

Support sensor value property to type double

Constructed an intermediate function that is used to apply a visitor
against the `xyz.openbmc_project.Sensor.Value` interface's `Value`
property. This function is called to apply the visitor at each point the
internally cached sensor value is updated and stores it as the data type
that is given for this property within the configured yaml.

The visitor provides storing the sensor value directly where the data
type configured matches the data type of the `Value` property on dbus.
However, in the case where the configured data type is the original
int64 and the data type on dbus is double, the visitor will scale the
value from dbus to millidegree C(as it was when stored as an int64 on
dbus) and cast it to the configured int64 data type. This resulting cast
value is stored within the internal cache now as an int64 until the
machine configuration yaml file is updated to reflect the change in the
sensor's value data type to be a double.

Tested:
    No change with use of sensor value as int64 and configured as int64
    No change with use of sensor value as double and configured as int64
    Witherspoon fan control functions correctly with use of sensor value
as double and configuration updated to utilize as a double

Change-Id: Ieb0a646ea37bf7991b9b1f94a85977d9e8984e60
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
