summaryrefslogtreecommitdiffstats
path: root/control/gen-fan-zone-defs.py
diff options
context:
space:
mode:
Diffstat (limited to 'control/gen-fan-zone-defs.py')
-rwxr-xr-xcontrol/gen-fan-zone-defs.py248
1 files changed, 14 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))
OpenPOWER on IntegriCloud