diff options
| -rw-r--r-- | redfish-core/lib/managers.hpp | 82 | ||||
| -rw-r--r-- | static/redfish/v1/JsonSchemas/OemManager/index.json | 7 | ||||
| -rw-r--r-- | static/redfish/v1/schema/OemManager_v1.xml | 4 |
3 files changed, 87 insertions, 6 deletions
diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp index f59c695..9c250e8 100644 --- a/redfish-core/lib/managers.hpp +++ b/redfish-core/lib/managers.hpp @@ -477,7 +477,50 @@ static void asyncPopulatePid(const std::string& connection, return; } data = *inputs; - } // doubles + } + else if (propertyPair.first == "SetPointOffset") + { + const std::string* ptr = + std::get_if<std::string>( + &propertyPair.second); + + if (ptr == nullptr) + { + BMCWEB_LOG_ERROR << "Field Illegal " + << propertyPair.first; + messages::internalError(asyncResp->res); + return; + } + // translate from dbus to redfish + if (*ptr == "WarningHigh") + { + (*config)["SetPointOffset"] = + "UpperThresholdNonCritical"; + } + else if (*ptr == "WarningLow") + { + (*config)["SetPointOffset"] = + "LowerThresholdNonCritical"; + } + else if (*ptr == "CriticalHigh") + { + (*config)["SetPointOffset"] = + "UpperThresholdCritical"; + } + else if (*ptr == "CriticalLow") + { + (*config)["SetPointOffset"] = + "LowerThresholdCritical"; + } + else + { + BMCWEB_LOG_ERROR << "Value Illegal " + << *ptr; + messages::internalError(asyncResp->res); + return; + } + } + // doubles else if (propertyPair.first == "FFGainCoefficient" || propertyPair.first == "FFOffCoefficient" || @@ -715,6 +758,7 @@ static CreatePIDRet createPidInterface( std::optional<std::vector<std::string>> inputs; std::optional<std::vector<std::string>> outputs; std::map<std::string, std::optional<double>> doubles; + std::optional<std::string> setpointOffset; if (!redfish::json_util::readJson( it.value(), response->res, "Inputs", inputs, "Outputs", outputs, "Zones", zones, "FFGainCoefficient", @@ -724,10 +768,10 @@ static CreatePIDRet createPidInterface( "ILimitMin", doubles["ILimitMin"], "OutLimitMax", doubles["OutLimitMax"], "OutLimitMin", doubles["OutLimitMin"], "PCoefficient", doubles["PCoefficient"], "SetPoint", - doubles["SetPoint"], "SlewNeg", doubles["SlewNeg"], "SlewPos", - doubles["SlewPos"], "PositiveHysteresis", - doubles["PositiveHysteresis"], "NegativeHysteresis", - doubles["NegativeHysteresis"])) + doubles["SetPoint"], "SetPointOffset", setpointOffset, + "SlewNeg", doubles["SlewNeg"], "SlewPos", doubles["SlewPos"], + "PositiveHysteresis", doubles["PositiveHysteresis"], + "NegativeHysteresis", doubles["NegativeHysteresis"])) { BMCWEB_LOG_ERROR << "Line:" << __LINE__ << ", Illegal Property " << it.value().dump(); @@ -784,6 +828,34 @@ static CreatePIDRet createPidInterface( } } + if (setpointOffset) + { + // translate between redfish and dbus names + if (*setpointOffset == "UpperThresholdNonCritical") + { + output["SetPointOffset"] = std::string("WarningLow"); + } + else if (*setpointOffset == "LowerThresholdNonCritical") + { + output["SetPointOffset"] = std::string("WarningHigh"); + } + else if (*setpointOffset == "LowerThresholdCritical") + { + output["SetPointOffset"] = std::string("CriticalLow"); + } + else if (*setpointOffset == "UpperThresholdCritical") + { + output["SetPointOffset"] = std::string("CriticalHigh"); + } + else + { + BMCWEB_LOG_ERROR << "Invalid setpointoffset " + << *setpointOffset; + messages::invalidObject(response->res, it.key()); + return CreatePIDRet::fail; + } + } + // doubles for (const auto& pairs : doubles) { diff --git a/static/redfish/v1/JsonSchemas/OemManager/index.json b/static/redfish/v1/JsonSchemas/OemManager/index.json index 5cc0b83..107621e 100644 --- a/static/redfish/v1/JsonSchemas/OemManager/index.json +++ b/static/redfish/v1/JsonSchemas/OemManager/index.json @@ -408,6 +408,11 @@ "longDescription": "Setpoint for the PID.", "type": "number" }, + "SetPointOffset": { + "description": "Threshold to take value from and apply to setpoint.", + "longDescription": "Threshold to take value from and apply to setpoint. Valid threshold names are supported.", + "type": "string" + }, "SlewNeg": { "description": "Negative slew rate for the PID.", "longDescription": "Negative slew rate for the PID.", @@ -578,4 +583,4 @@ } }, "title": "#OemManager" -}
\ No newline at end of file +} diff --git a/static/redfish/v1/schema/OemManager_v1.xml b/static/redfish/v1/schema/OemManager_v1.xml index 164f272..9ae36ca 100644 --- a/static/redfish/v1/schema/OemManager_v1.xml +++ b/static/redfish/v1/schema/OemManager_v1.xml @@ -245,6 +245,10 @@ <Annotation Term="OData.Description" String="Setpoint for the PID." /> <Annotation Term="OData.LongDescription" String="Setpoint for the PID." /> </Property> + <Property Name="SetPointOffset" Type="Edm.String" Nullable="false"> + <Annotation Term="OData.Description" String="Threshold to take value from and apply to setpoint." /> + <Annotation Term="OData.LongDescription" String="Threshold to take value from and apply to setpoint. Valid threshold names are supported." /> + </Property> <Property Name="SlewNeg" Type="Edm.Decimal" Nullable="false"> <Annotation Term="OData.Description" String="Negative slew rate for the PID." /> <Annotation Term="OData.LongDescription" String="Negative slew rate for the PID." /> |

