blob: fdf5bb2c74566842add0082d728278875f886c57 [file] [log] [blame]
Matthew Barth702c4a52018-02-28 16:23:11 -06001<%include file="defs.mako"/>\
2<%namespace file="defs.mako" import="*"/>\
3<%!
4def indent(str, depth):
5 return ''.join(4*' '*depth+line for line in str.splitlines(True))
6%>\
7/* This is a generated file. */
8#include "manager.hpp"
9#include "functor.hpp"
10#include "actions.hpp"
11#include "handlers.hpp"
12#include "preconditions.hpp"
13#include "matches.hpp"
14
15using namespace phosphor::fan::control;
16
17const unsigned int Manager::_powerOnDelay{${mgr_data['power_on_delay']}};
18
19const std::vector<ZoneGroup> Manager::_zoneLayouts
20{
21%for zone_group in zones:
22 ZoneGroup{
23 std::vector<Condition>{
24 %for condition in zone_group['conditions']:
25 Condition{
26 "${condition['type']}",
27 std::vector<ConditionProperty>{
28 %for property in condition['properties']:
29 ConditionProperty{
30 "${property['property']}",
31 "${property['interface']}",
32 "${property['path']}",
33 static_cast<${property['type']}>(${property['value']}),
34 },
35 %endfor
36 },
37 },
38 %endfor
39 },
40 std::vector<ZoneDefinition>{
41 %for zone in zone_group['zones']:
42 ZoneDefinition{
43 ${zone['num']},
44 ${zone['full_speed']},
45 ${zone['default_floor']},
46 ${zone['increase_delay']},
47 ${zone['decrease_interval']},
48 std::vector<FanDefinition>{
49 %for fan in zone['fans']:
50 FanDefinition{
51 "${fan['name']}",
52 std::vector<std::string>{
53 %for sensor in fan['sensors']:
54 "${sensor}",
55 %endfor
56 },
57 "${fan['target_interface']}"
58 },
59 %endfor
60 },
61 std::vector<SetSpeedEvent>{
62 %for event in zone['events']:
63 %if ('pc' in event) and \
64 (event['pc'] is not None):
65 SetSpeedEvent{
66 Group{
67 %for group in event['pc']['pcgrps']:
68 %for member in group['members']:
69 {
70 "${member['object']}",
71 {"${member['interface']}",
72 "${member['property']}"}
73 },
74 %endfor
75 %endfor
76 },
77 std::vector<Action>{
78 %for i, a in enumerate(event['pc']['pcact']):
79 %if len(a['params']) != 0:
80 make_action(
81 precondition::${a['name']}(
82 %else:
83 make_action(
84 precondition::${a['name']}
85 %endif
86 %for p in a['params']:
87 ${p['type']}${p['open']}
88 %for j, v in enumerate(p['values']):
89 %if (j+1) != len(p['values']):
90 ${v['value']},
91 %else:
92 ${v['value']}
93 %endif
94 %endfor
95 ${p['close']},
96 %endfor
97 %if (i+1) != len(event['pc']['pcact']):
98 %if len(a['params']) != 0:
99 )),
100 %else:
101 ),
102 %endif
103 %endif
104 %endfor
105 std::vector<SetSpeedEvent>{
106 %for pcevt in event['pc']['pcevts']:
107 SetSpeedEvent{\
108 ${indent(genSSE(event=pcevt), 6)}\
109 },
110 %endfor
111 %else:
112 SetSpeedEvent{\
113 ${indent(genSSE(event=event), 6)}
114 %endif
115 %if ('pc' in event) and (event['pc'] is not None):
116 }
117 %if len(event['pc']['pcact'][-1]['params']) != 0:
118 )),
119 %else:
120 ),
121 %endif
122 },
William A. Kennington III122b8432018-10-30 18:39:21 -0700123 TimerConf{
Matthew Barth702c4a52018-02-28 16:23:11 -0600124 ${event['pc']['pctime']['interval']},
125 ${event['pc']['pctime']['type']}
126 },
127 std::vector<Signal>{
128 %for s in event['pc']['pcsigs']:
129 Signal{
130 match::${s['match']}(
131 %for i, mp in enumerate(s['mparams']):
132 %if (i+1) != len(s['mparams']):
133 "${mp}",
134 %else:
135 "${mp}"
136 %endif
137 %endfor
138 ),
139 make_handler(\
140 ${indent(genHandler(sig=s), 9)}\
141 )
142 },
143 %endfor
144 }
145 %endif
146 },
147 %endfor
148 }
149 },
150 %endfor
151 }
152 },
153%endfor
154};