summaryrefslogtreecommitdiffstats
path: root/control/templates
diff options
context:
space:
mode:
Diffstat (limited to 'control/templates')
-rw-r--r--control/templates/defs.mako83
-rw-r--r--control/templates/fan_zone_defs.mako.cpp154
2 files changed, 237 insertions, 0 deletions
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