Fix applying sensor scale on first read

In Sensor::addValue(), the adjustValue() function was being called
before the _scale member was getting set.  So until the first interval
timer expired the sensor value would be unscaled. For example it could
show a temperature of 27000.0 instead of 27.0.

To fix this, reorder the code so that first _scale would get set, then
the sensor value would get adjusted based on _scale, and finally the
value could be set on the Value interface.

Tested:
Use a big INTERVAL config value so that I can check the first read of a
sensor does leave it unscaled.  Then test with fix and check that it
is correct.

Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: Id0e2c71961f343246a42ba4c546e806350040e01
1 file changed
tree: 0a4365568634e44c7def37d421c4d34497ac4047
  1. msl/
  2. test/
  3. tools/
  4. .clang-format
  5. .gitignore
  6. .lcovrc
  7. average.cpp
  8. average.hpp
  9. bootstrap.sh
  10. configure.ac
  11. env.cpp
  12. env.hpp
  13. fan_pwm.cpp
  14. fan_pwm.hpp
  15. fan_speed.cpp
  16. fan_speed.hpp
  17. gpio_handle.cpp
  18. gpio_handle.hpp
  19. hwmon.cpp
  20. hwmon.hpp
  21. hwmonio.cpp
  22. hwmonio.hpp
  23. interface.hpp
  24. LICENSE
  25. mainloop.cpp
  26. mainloop.hpp
  27. MAINTAINERS
  28. Makefile.am
  29. meson.build
  30. meson_options.txt
  31. readd.cpp
  32. README.iio.md
  33. README.md
  34. sensor.cpp
  35. sensor.hpp
  36. sensorset.cpp
  37. sensorset.hpp
  38. sysfs.cpp
  39. sysfs.hpp
  40. targets.hpp
  41. thresholds.hpp
  42. types.hpp
  43. util.hpp
README.md

Exposes generic hwmon entries as DBus objects. More information can be found at Sensor Architecture

To Build

To build this package, do the following steps:

    1. ./bootstrap.sh
    2. ./configure ${CONFIGURE_FLAGS}
    3. make

To clean the repository run `./bootstrap.sh clean`.

D-Bus bus names

To enable the use of Linux features like cgroups prioritization and
udev/systemd control, one instance of phosphor-hwmon is intended to
be run per hwmon sysfs class instance.

This requires an algorithm for selecting a stable, well-known D-Bus busname.

The algorithm is <PREFIX>-<ID>.Hwmon<N> where PREFIX is an autoconf
configurable prefix (BUSNAME_PREFIX, xyz.openbmc_project by default),
ID is a std::hash of the /sys/devices path backing the hwmon class
instance, and N is the implemented phosphor-hwmon D-Bus API version.