diff options
-rwxr-xr-x | control/gen-fan-zone-defs.py | 10 | ||||
-rw-r--r-- | control/handlers.hpp | 17 | ||||
-rw-r--r-- | control/templates/fan_zone_defs.mako.cpp | 11 |
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 |