diff options
Diffstat (limited to 'control/templates')
-rw-r--r-- | control/templates/defs.mako | 83 | ||||
-rw-r--r-- | control/templates/fan_zone_defs.mako.cpp | 154 |
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 +}; |