summaryrefslogtreecommitdiffstats
path: root/control
diff options
context:
space:
mode:
Diffstat (limited to 'control')
-rwxr-xr-xcontrol/gen-fan-zone-defs.py248
-rw-r--r--control/templates/defs.mako83
-rw-r--r--control/templates/fan_zone_defs.mako.cpp154
3 files changed, 251 insertions, 234 deletions
diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py
index 43d98bc..644ce54 100755
--- a/control/gen-fan-zone-defs.py
+++ b/control/gen-fan-zone-defs.py
@@ -10,238 +10,7 @@ import sys
import yaml
from argparse import ArgumentParser
from mako.template import Template
-
-tmpl = '''\
-<%!
-def indent(str, depth):
- return ''.join(4*' '*depth+line for line in str.splitlines(True))
-%>\
-<%def name="genHandler(sig)" buffered="True">
-%if ('type' in sig['sparams']) and \
- (sig['sparams']['type'] is not None):
-${sig['signal']}<${sig['sparams']['type']}>(
-%else:
-${sig['signal']}(
-%endif
-%for spk in sig['sparams']['params']:
-${sig['sparams'][spk]},
-%endfor
-%if ('type' in sig['hparams']) and \
- (sig['hparams']['type'] is not None):
-handler::${sig['handler']}<${sig['hparams']['type']}>(
-%else:
-handler::${sig['handler']}(
-%endif
-%for i, hpk in enumerate(sig['hparams']['params']):
- %if (i+1) != len(sig['hparams']['params']):
- ${sig['hparams'][hpk]},
- %else:
- ${sig['hparams'][hpk]}
- %endif
-%endfor
-))
-</%def>\
-<%def name="genSSE(event)" buffered="True">
-Group{
-%for group in event['groups']:
-%for member in group['members']:
-{
- "${member['object']}",
- {"${member['interface']}",
- "${member['property']}"}
-},
-%endfor
-%endfor
-},
-std::vector<Action>{
-%for a in event['action']:
-%if len(a['parameters']) != 0:
-make_action(action::${a['name']}(
-%else:
-make_action(action::${a['name']}
-%endif
-%for i, p in enumerate(a['parameters']):
-%if (i+1) != len(a['parameters']):
- ${p},
-%else:
- ${p})
-%endif
-%endfor
-),
-%endfor
-},
-Timer{
- ${event['timer']['interval']},
- ${event['timer']['type']}
-},
-std::vector<Signal>{
-%for s in event['signals']:
- Signal{
- match::${s['match']}(
- %for i, mp in enumerate(s['mparams']):
- %if (i+1) != len(s['mparams']):
- "${mp}",
- %else:
- "${mp}"
- %endif
- %endfor
- ),
- make_handler(\
- ${indent(genHandler(sig=s), 3)}\
- )
- },
-%endfor
-}
-</%def>\
-/* This is a generated file. */
-#include "manager.hpp"
-#include "functor.hpp"
-#include "actions.hpp"
-#include "handlers.hpp"
-#include "preconditions.hpp"
-#include "matches.hpp"
-
-using namespace phosphor::fan::control;
-
-const unsigned int Manager::_powerOnDelay{${mgr_data['power_on_delay']}};
-
-const std::vector<ZoneGroup> Manager::_zoneLayouts
-{
-%for zone_group in zones:
- ZoneGroup{
- std::vector<Condition>{
- %for condition in zone_group['conditions']:
- Condition{
- "${condition['type']}",
- std::vector<ConditionProperty>{
- %for property in condition['properties']:
- ConditionProperty{
- "${property['property']}",
- "${property['interface']}",
- "${property['path']}",
- static_cast<${property['type']}>(${property['value']}),
- },
- %endfor
- },
- },
- %endfor
- },
- std::vector<ZoneDefinition>{
- %for zone in zone_group['zones']:
- ZoneDefinition{
- ${zone['num']},
- ${zone['full_speed']},
- ${zone['default_floor']},
- ${zone['increase_delay']},
- ${zone['decrease_interval']},
- std::vector<FanDefinition>{
- %for fan in zone['fans']:
- FanDefinition{
- "${fan['name']}",
- std::vector<std::string>{
- %for sensor in fan['sensors']:
- "${sensor}",
- %endfor
- },
- "${fan['target_interface']}"
- },
- %endfor
- },
- std::vector<SetSpeedEvent>{
- %for event in zone['events']:
- %if ('pc' in event) and \
- (event['pc'] is not None):
- SetSpeedEvent{
- Group{
- %for group in event['pc']['pcgrps']:
- %for member in group['members']:
- {
- "${member['object']}",
- {"${member['interface']}",
- "${member['property']}"}
- },
- %endfor
- %endfor
- },
- std::vector<Action>{
- %for i, a in enumerate(event['pc']['pcact']):
- %if len(a['params']) != 0:
- make_action(
- precondition::${a['name']}(
- %else:
- make_action(
- precondition::${a['name']}
- %endif
- %for p in a['params']:
- ${p['type']}${p['open']}
- %for j, v in enumerate(p['values']):
- %if (j+1) != len(p['values']):
- ${v['value']},
- %else:
- ${v['value']}
- %endif
- %endfor
- ${p['close']},
- %endfor
- %if (i+1) != len(event['pc']['pcact']):
- %if len(a['params']) != 0:
- )),
- %else:
- ),
- %endif
- %endif
- %endfor
- std::vector<SetSpeedEvent>{
- %for pcevt in event['pc']['pcevts']:
- SetSpeedEvent{\
- ${indent(genSSE(event=pcevt), 6)}\
- },
- %endfor
- %else:
- SetSpeedEvent{\
- ${indent(genSSE(event=event), 6)}
- %endif
- %if ('pc' in event) and (event['pc'] is not None):
- }
- %if len(event['pc']['pcact'][-1]['params']) != 0:
- )),
- %else:
- ),
- %endif
- },
- Timer{
- ${event['pc']['pctime']['interval']},
- ${event['pc']['pctime']['type']}
- },
- std::vector<Signal>{
- %for s in event['pc']['pcsigs']:
- Signal{
- match::${s['match']}(
- %for i, mp in enumerate(s['mparams']):
- %if (i+1) != len(s['mparams']):
- "${mp}",
- %else:
- "${mp}"
- %endif
- %endfor
- ),
- make_handler(\
- ${indent(genHandler(sig=s), 9)}\
- )
- },
- %endfor
- }
- %endif
- },
- %endfor
- }
- },
- %endfor
- }
- },
-%endfor
-};
-'''
+from mako.lookup import TemplateLookup
def convertToMap(listOfDict):
@@ -857,7 +626,18 @@ if __name__ == '__main__':
if manager_config.get('power_on_delay') is None:
manager_config['power_on_delay'] = 0
+ tmpls_dir = os.path.join(
+ os.path.dirname(os.path.realpath(__file__)),
+ "templates")
output_file = os.path.join(args.output_dir, "fan_zone_defs.cpp")
+ if sys.version_info < (3, 0):
+ lkup = TemplateLookup(
+ directories=tmpls_dir.split(),
+ disable_unicode=True)
+ else:
+ lkup = TemplateLookup(
+ directories=tmpls_dir.split())
+ tmpl = lkup.get_template('fan_zone_defs.mako.cpp')
with open(output_file, 'w') as output:
- output.write(Template(tmpl).render(zones=zone_config,
- mgr_data=manager_config))
+ output.write(tmpl.render(zones=zone_config,
+ mgr_data=manager_config))
diff --git a/control/templates/defs.mako b/control/templates/defs.mako
new file mode 100644
index 0000000..0980f81
--- /dev/null
+++ b/control/templates/defs.mako
@@ -0,0 +1,83 @@
+<%!
+def indent(str, depth):
+ return ''.join(4*' '*depth+line for line in str.splitlines(True))
+%>\
+
+<%def name="genHandler(sig)" buffered="True">
+%if ('type' in sig['sparams']) and \
+ (sig['sparams']['type'] is not None):
+${sig['signal']}<${sig['sparams']['type']}>(
+%else:
+${sig['signal']}(
+%endif
+%for spk in sig['sparams']['params']:
+${sig['sparams'][spk]},
+%endfor
+%if ('type' in sig['hparams']) and \
+ (sig['hparams']['type'] is not None):
+handler::${sig['handler']}<${sig['hparams']['type']}>(
+%else:
+handler::${sig['handler']}(
+%endif
+%for i, hpk in enumerate(sig['hparams']['params']):
+ %if (i+1) != len(sig['hparams']['params']):
+ ${sig['hparams'][hpk]},
+ %else:
+ ${sig['hparams'][hpk]}
+ %endif
+%endfor
+))
+</%def>\
+
+<%def name="genSSE(event)" buffered="True">
+Group{
+%for group in event['groups']:
+%for member in group['members']:
+{
+ "${member['object']}",
+ {"${member['interface']}",
+ "${member['property']}"}
+},
+%endfor
+%endfor
+},
+std::vector<Action>{
+%for a in event['action']:
+%if len(a['parameters']) != 0:
+make_action(action::${a['name']}(
+%else:
+make_action(action::${a['name']}
+%endif
+%for i, p in enumerate(a['parameters']):
+%if (i+1) != len(a['parameters']):
+ ${p},
+%else:
+ ${p})
+%endif
+%endfor
+),
+%endfor
+},
+Timer{
+ ${event['timer']['interval']},
+ ${event['timer']['type']}
+},
+std::vector<Signal>{
+%for s in event['signals']:
+ Signal{
+ match::${s['match']}(
+ %for i, mp in enumerate(s['mparams']):
+ %if (i+1) != len(s['mparams']):
+ "${mp}",
+ %else:
+ "${mp}"
+ %endif
+ %endfor
+ ),
+ make_handler(\
+ ${indent(genHandler(sig=s), 3)}\
+ )
+ },
+%endfor
+}
+</%def>\
diff --git a/control/templates/fan_zone_defs.mako.cpp b/control/templates/fan_zone_defs.mako.cpp
new file mode 100644
index 0000000..e735e0d
--- /dev/null
+++ b/control/templates/fan_zone_defs.mako.cpp
@@ -0,0 +1,154 @@
+<%include file="defs.mako"/>\
+<%namespace file="defs.mako" import="*"/>\
+<%!
+def indent(str, depth):
+ return ''.join(4*' '*depth+line for line in str.splitlines(True))
+%>\
+/* This is a generated file. */
+#include "manager.hpp"
+#include "functor.hpp"
+#include "actions.hpp"
+#include "handlers.hpp"
+#include "preconditions.hpp"
+#include "matches.hpp"
+
+using namespace phosphor::fan::control;
+
+const unsigned int Manager::_powerOnDelay{${mgr_data['power_on_delay']}};
+
+const std::vector<ZoneGroup> Manager::_zoneLayouts
+{
+%for zone_group in zones:
+ ZoneGroup{
+ std::vector<Condition>{
+ %for condition in zone_group['conditions']:
+ Condition{
+ "${condition['type']}",
+ std::vector<ConditionProperty>{
+ %for property in condition['properties']:
+ ConditionProperty{
+ "${property['property']}",
+ "${property['interface']}",
+ "${property['path']}",
+ static_cast<${property['type']}>(${property['value']}),
+ },
+ %endfor
+ },
+ },
+ %endfor
+ },
+ std::vector<ZoneDefinition>{
+ %for zone in zone_group['zones']:
+ ZoneDefinition{
+ ${zone['num']},
+ ${zone['full_speed']},
+ ${zone['default_floor']},
+ ${zone['increase_delay']},
+ ${zone['decrease_interval']},
+ std::vector<FanDefinition>{
+ %for fan in zone['fans']:
+ FanDefinition{
+ "${fan['name']}",
+ std::vector<std::string>{
+ %for sensor in fan['sensors']:
+ "${sensor}",
+ %endfor
+ },
+ "${fan['target_interface']}"
+ },
+ %endfor
+ },
+ std::vector<SetSpeedEvent>{
+ %for event in zone['events']:
+ %if ('pc' in event) and \
+ (event['pc'] is not None):
+ SetSpeedEvent{
+ Group{
+ %for group in event['pc']['pcgrps']:
+ %for member in group['members']:
+ {
+ "${member['object']}",
+ {"${member['interface']}",
+ "${member['property']}"}
+ },
+ %endfor
+ %endfor
+ },
+ std::vector<Action>{
+ %for i, a in enumerate(event['pc']['pcact']):
+ %if len(a['params']) != 0:
+ make_action(
+ precondition::${a['name']}(
+ %else:
+ make_action(
+ precondition::${a['name']}
+ %endif
+ %for p in a['params']:
+ ${p['type']}${p['open']}
+ %for j, v in enumerate(p['values']):
+ %if (j+1) != len(p['values']):
+ ${v['value']},
+ %else:
+ ${v['value']}
+ %endif
+ %endfor
+ ${p['close']},
+ %endfor
+ %if (i+1) != len(event['pc']['pcact']):
+ %if len(a['params']) != 0:
+ )),
+ %else:
+ ),
+ %endif
+ %endif
+ %endfor
+ std::vector<SetSpeedEvent>{
+ %for pcevt in event['pc']['pcevts']:
+ SetSpeedEvent{\
+ ${indent(genSSE(event=pcevt), 6)}\
+ },
+ %endfor
+ %else:
+ SetSpeedEvent{\
+ ${indent(genSSE(event=event), 6)}
+ %endif
+ %if ('pc' in event) and (event['pc'] is not None):
+ }
+ %if len(event['pc']['pcact'][-1]['params']) != 0:
+ )),
+ %else:
+ ),
+ %endif
+ },
+ Timer{
+ ${event['pc']['pctime']['interval']},
+ ${event['pc']['pctime']['type']}
+ },
+ std::vector<Signal>{
+ %for s in event['pc']['pcsigs']:
+ Signal{
+ match::${s['match']}(
+ %for i, mp in enumerate(s['mparams']):
+ %if (i+1) != len(s['mparams']):
+ "${mp}",
+ %else:
+ "${mp}"
+ %endif
+ %endfor
+ ),
+ make_handler(\
+ ${indent(genHandler(sig=s), 9)}\
+ )
+ },
+ %endfor
+ }
+ %endif
+ },
+ %endfor
+ }
+ },
+ %endfor
+ }
+ },
+%endfor
+};
OpenPOWER on IntegriCloud