summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xcontrol/gen-fan-zone-defs.py10
-rw-r--r--control/handlers.hpp17
-rw-r--r--control/templates/fan_zone_defs.mako.cpp11
3 files changed, 30 insertions, 8 deletions
diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py
index e875e32..a5e4809 100755
--- a/control/gen-fan-zone-defs.py
+++ b/control/gen-fan-zone-defs.py
@@ -702,8 +702,16 @@ def getIfacesInZone(zone_ifaces):
props = []
for p in i['properties']:
prop = {}
- prop['name'] = str(p['name']).lower()
+ prop['name'] = p['name']
+ prop['func'] = str(p['name']).lower()
prop['type'] = parse_cpp_type(p['type'])
+ if ('persist' in p):
+ persist = p['persist']
+ if (persist is not None):
+ if (isinstance(persist, bool)):
+ prop['persist'] = 'true' if persist else 'false'
+ else:
+ prop['persist'] = 'false'
vals = []
for v in p['values']:
val = v['value']
diff --git a/control/handlers.hpp b/control/handlers.hpp
index 215662a..6b512fd 100644
--- a/control/handlers.hpp
+++ b/control/handlers.hpp
@@ -14,18 +14,29 @@ namespace handler
* @details Sets or updates a zone property to the given value using the
* provided zone dbus object's set property function
*
- * @param[in] value - Value to set property to
+ * @param[in] intf - Interface on zone object
+ * @param[in] prop - Property on interface
* @param[in] func - Zone set property function pointer
+ * @param[in] value - Value to set property to
+ * @param[in] persist - Persist property value or not
*
* @return Lambda function
* A lambda function to set/update the zone property
*/
template <typename T>
-auto setZoneProperty(T (Zone::*func)(T), T&& value)
+auto setZoneProperty(const char* intf,
+ const char* prop,
+ T (Zone::*func)(T),
+ T&& value,
+ bool persist)
{
- return [func, value = std::forward<T>(value)](auto& zone)
+ return [=, value = std::forward<T>(value)](auto& zone)
{
(zone.*func)(value);
+ if (persist)
+ {
+ zone.setPersisted(intf, prop);
+ }
};
}
diff --git a/control/templates/fan_zone_defs.mako.cpp b/control/templates/fan_zone_defs.mako.cpp
index cb46986..e05d1fc 100644
--- a/control/templates/fan_zone_defs.mako.cpp
+++ b/control/templates/fan_zone_defs.mako.cpp
@@ -54,13 +54,15 @@ const std::vector<ZoneGroup> Manager::_zoneLayouts
%for p in i['props']:
ZoneHandler{
make_zoneHandler(handler::setZoneProperty(
- &Zone::${p['name']},
+ "${i['name']}",
+ "${p['name']}",
+ &Zone::${p['func']},
static_cast<${p['type']}>(
%if "vector" in p['type'] or "map" in p['type']:
${p['type']}{
%endif
- %for i, v in enumerate(p['values']):
- %if (i+1) != len(p['values']):
+ %for j, v in enumerate(p['values']):
+ %if (j+1) != len(p['values']):
${v},
%else:
${v}
@@ -69,7 +71,8 @@ const std::vector<ZoneGroup> Manager::_zoneLayouts
%if "vector" in p['type'] or "map" in p['type']:
}
%endif
- )
+ ),
+ ${p['persist']}
))
},
%endfor
OpenPOWER on IntegriCloud