summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xscripts/sensor-example.yaml33
-rw-r--r--scripts/writesensor.mako.cpp15
-rw-r--r--sensordatahandler.cpp11
-rw-r--r--types.hpp12
4 files changed, 65 insertions, 6 deletions
diff --git a/scripts/sensor-example.yaml b/scripts/sensor-example.yaml
index 52eb076..98e9ff6 100755
--- a/scripts/sensor-example.yaml
+++ b/scripts/sensor-example.yaml
@@ -37,16 +37,16 @@
interfaces:
xyz.openbmc_project.Inventory.Item:
Present:
- 6:
+ 0x06:
assert: true
deassert: false
type: bool
xyz.openbmc_project.State.Decorator.OperationalStatus:
Functional:
- 4:
- assert: false
- deassert: true
- type: bool
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
0x63:
interfaces:
@@ -91,3 +91,26 @@
0xFF:
type: int64_t
+0x54:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core22
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ 0x07:
+ assert: true
+ deassert: false
+ #The update will be skipped based on the value of skipOn
+ #in this case if offset 0x07 is deasserted
+ #the update will be skipped.
+ skipOn: deassert
+ type: bool
diff --git a/scripts/writesensor.mako.cpp b/scripts/writesensor.mako.cpp
index 5cc024e..9cd4e48 100644
--- a/scripts/writesensor.mako.cpp
+++ b/scripts/writesensor.mako.cpp
@@ -73,8 +73,21 @@ extern const IdInfoMap sensors = {
<% continue %>\
% endif
<% valueType = values["type"] %>\
+<%
+try:
+ skip = values["skipOn"]
+ if skip == "assert":
+ skipVal = "SkipAssertion::ASSERT"
+ elif skip == "deassert":
+ skipVal = "SkipAssertion::DEASSERT"
+ else:
+ assert "Unknown skip value " + str(skip)
+except KeyError, e:
+ skipVal = "SkipAssertion::NONE"
+%>\
+ ${skipVal},
% for name,value in values.items():
- % if name == "type":
+ % if name == "type" or name == "skipOn":
<% continue %>\
% endif
% if valueType == "string":
diff --git a/sensordatahandler.cpp b/sensordatahandler.cpp
index 1776ec7..c8d4fbf 100644
--- a/sensordatahandler.cpp
+++ b/sensordatahandler.cpp
@@ -318,11 +318,21 @@ ipmi_ret_t assertion(const SetSensorReadingReq& cmdData,
{
if (assertionSet.test(value.first))
{
+ //Skip update if skipOn is ASSERT
+ if (SkipAssertion::ASSERT == value.second.skip)
+ {
+ return IPMI_CC_OK;
+ }
props.emplace(property.first, value.second.assert);
valid = true;
}
else if (deassertionSet.test(value.first))
{
+ //Skip update if skipOn is DEASSERT
+ if (SkipAssertion::DEASSERT == value.second.skip)
+ {
+ return IPMI_CC_OK;
+ }
props.emplace(property.first, value.second.deassert);
valid = true;
}
@@ -333,6 +343,7 @@ ipmi_ret_t assertion(const SetSensorReadingReq& cmdData,
}
}
}
+
objects.emplace(sensorInfo.sensorPath, std::move(interfaces));
msg.append(std::move(objects));
return updateToDbus(msg);
diff --git a/types.hpp b/types.hpp
index 41dddd9..d3be704 100644
--- a/types.hpp
+++ b/types.hpp
@@ -32,8 +32,20 @@ namespace sensor
using Offset = uint8_t;
+/**
+ * @enum SkipAssertion
+ * Matching value for skipping the update
+ */
+enum class SkipAssertion
+{
+ NONE, //No skip defined
+ ASSERT, //Skip on Assert
+ DEASSERT, //Skip on Deassert
+};
+
struct Values
{
+ SkipAssertion skip;
Value assert;
Value deassert;
};
OpenPOWER on IntegriCloud