psusensor: fix psu pwm sensor name
Current bug is that psusensor service does not create pwm sensor object
if pid fan configuration has spaces in Name field, like
{
...
"Name" : "PSU$BUS $ADDRESS Fan 1"
"Outputs": [
"Pwm PSU$BUS $ADDRESS Fan 1"
],
...
}
Fix:
Pwm name need to be escaped, which currently replaces " " with "_"
before being passed to CreatePwmSensor in PSUSensor service.
PwmSensor constructor takes the name as is.
Since the escape algorithm may change in the future,
add a helper function escapeName() and update dbus-sensors
to use this helper funtion when sensors are created.
escapeName() currently calls boost replace_all_copy(name," ", "_"),
so it does not introduce functional changes except the bug identified
above.
Tested:
No regression found for existing working sensors.
Sensors are created as before with the same sensor name.
Fix for non-working case works correctly now.
psu pwm sensor name with space are created correctly with the change.
busctl tree xyz.openbmc_project.PSUSensor
...
|-/xyz/openbmc_project/control
| `-/xyz/openbmc_project/control/fanpwm
| |-/xyz/openbmc_project/control/fanpwm/Pwm_PSU17_2_Fan_1
| |-/xyz/openbmc_project/control/fanpwm/Pwm_PSU17_2_Fan_2
...
Signed-off-by: Zhikui Ren <zhikui.ren@intel.com>
Change-Id: If3b60f93de324e59cc3d774285c23bf50a6f989c
diff --git a/src/IpmbSensor.cpp b/src/IpmbSensor.cpp
index 7ce3321..eedf21e 100644
--- a/src/IpmbSensor.cpp
+++ b/src/IpmbSensor.cpp
@@ -18,7 +18,6 @@
#include <Utils.hpp>
#include <VariantVisitors.hpp>
#include <boost/algorithm/string/predicate.hpp>
-#include <boost/algorithm/string/replace.hpp>
#include <boost/container/flat_map.hpp>
#include <sdbusplus/asio/connection.hpp>
#include <sdbusplus/asio/object_server.hpp>
@@ -65,10 +64,9 @@
std::vector<thresholds::Threshold>&& thresholdData,
uint8_t deviceAddress, uint8_t hostSMbusIndex,
const float pollRate, std::string& sensorTypeName) :
- Sensor(boost::replace_all_copy(sensorName, " ", "_"),
- std::move(thresholdData), sensorConfiguration,
- "xyz.openbmc_project.Configuration.ExitAirTemp", false, false,
- ipmbMaxReading, ipmbMinReading, conn, PowerState::on),
+ Sensor(escapeName(sensorName), std::move(thresholdData),
+ sensorConfiguration, "xyz.openbmc_project.Configuration.ExitAirTemp",
+ false, false, ipmbMaxReading, ipmbMinReading, conn, PowerState::on),
deviceAddress(deviceAddress), hostSMbusIndex(hostSMbusIndex),
sensorPollMs(static_cast<int>(pollRate * 1000)), objectServer(objectServer),
waitTimer(io)