diff options
-rw-r--r-- | control/example/fans.yaml | 6 | ||||
-rw-r--r-- | control/fan.cpp | 10 | ||||
-rw-r--r-- | control/fan.hpp | 5 | ||||
-rwxr-xr-x | control/gen-fan-zone-defs.py | 6 | ||||
-rw-r--r-- | control/types.hpp | 5 |
5 files changed, 24 insertions, 8 deletions
diff --git a/control/example/fans.yaml b/control/example/fans.yaml index 629c502..2583256 100644 --- a/control/example/fans.yaml +++ b/control/example/fans.yaml @@ -9,12 +9,15 @@ # cooling_zone: [The cooling zone number for the fan] # cooling_profile: [The cooling profile for the fan] # sensors: [The list of sensors for this fan] +# target_interface: [The interface implemented by the fan target. +# Default is xyz.openbmc_project.Control.FanSpeed] #The cooling zone, a number, and the cooling profile, a string, #have to match the corresponding values in the fan zone yaml #so the fans can be merged into the zone definition. -#Example entries for 2 fan system: +#Example entries for 2 fan system where fan0 uses default FanSpeed and +#fan1 uses FanPwm: #fans: # - inventory: /system/chassis/motherboard/fan0 # cooling_zone: 0 @@ -26,3 +29,4 @@ # cooling_profile: air # sensors: # - fan1 +# target_interface: xyz.openbmc_project.Control.FanPwm diff --git a/control/fan.cpp b/control/fan.cpp index f11bf6f..b0881da 100644 --- a/control/fan.cpp +++ b/control/fan.cpp @@ -36,13 +36,13 @@ using InternalFailure = sdbusplus::xyz::openbmc_project::Common:: constexpr auto PROPERTY_INTERFACE = "org.freedesktop.DBus.Properties"; constexpr auto FAN_SENSOR_PATH = "/xyz/openbmc_project/sensors/fan_tach/"; -constexpr auto FAN_SENSOR_CONTROL_INTF = "xyz.openbmc_project.Control.FanSpeed"; constexpr auto FAN_TARGET_PROPERTY = "Target"; Fan::Fan(sdbusplus::bus::bus& bus, const FanDefinition& def): _bus(bus), - _name(std::get<fanNamePos>(def)) + _name(std::get<fanNamePos>(def)), + _interface(std::get<targetInterfacePos>(def)) { std::string path; auto sensors = std::get<sensorListPos>(def); @@ -58,7 +58,7 @@ Fan::Fan(sdbusplus::bus::bus& bus, const FanDefinition& def): _targetSpeed = util::SDBusPlus::getProperty<uint64_t>( bus, path, - FAN_SENSOR_CONTROL_INTF, + _interface, FAN_TARGET_PROPERTY); } } @@ -69,7 +69,7 @@ Fan::Fan(sdbusplus::bus::bus& bus, const FanDefinition& def): std::string Fan::getService(const std::string& sensor) { return phosphor::fan::util::getService(sensor, - FAN_SENSOR_CONTROL_INTF, + _interface, _bus); } @@ -87,7 +87,7 @@ void Fan::setSpeed(uint64_t speed) sensor.c_str(), PROPERTY_INTERFACE, "Set"); - method.append(FAN_SENSOR_CONTROL_INTF, property, value); + method.append(_interface, property, value); auto response = _bus.call(method); if (response.is_method_error()) diff --git a/control/fan.hpp b/control/fan.hpp index 6975248..e7f3067 100644 --- a/control/fan.hpp +++ b/control/fan.hpp @@ -83,6 +83,11 @@ class Fan std::vector<std::string> _sensors; /** + * The interface of the fan target + */ + const std::string _interface; + + /** * Target speed for this fan */ uint64_t _targetSpeed; diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py index 1568137..3ccab36 100755 --- a/control/gen-fan-zone-defs.py +++ b/control/gen-fan-zone-defs.py @@ -140,7 +140,8 @@ const std::vector<ZoneGroup> Manager::_zoneLayouts %for sensor in fan['sensors']: "${sensor}", %endfor - } + }, + "${fan['target_interface']}" }, %endfor }, @@ -665,6 +666,9 @@ def getFansInZone(zone_num, profiles, fan_data): fan = {} fan['name'] = f['inventory'] fan['sensors'] = f['sensors'] + fan['target_interface'] = f.get( + 'target_interface', + 'xyz.openbmc_project.Control.FanSpeed') fans.append(fan) return fans diff --git a/control/types.hpp b/control/types.hpp index f7b75aa..bb9367b 100644 --- a/control/types.hpp +++ b/control/types.hpp @@ -36,7 +36,10 @@ using PropertyVariantType = sdbusplus::message::variant<bool, constexpr auto fanNamePos = 0; constexpr auto sensorListPos = 1; -using FanDefinition = std::tuple<std::string, std::vector<std::string>>; +constexpr auto targetInterfacePos = 2; +using FanDefinition = std::tuple<std::string, + std::vector<std::string>, + std::string>; constexpr auto intfPos = 0; constexpr auto propPos = 1; |