blob: 687106f75288869d846feb2f2877ac04ed825229 [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"
Matthew Barth1b4de262018-03-06 13:03:16 -060014#include "triggers.hpp"
Matthew Barth702c4a52018-02-28 16:23:11 -060015
16using namespace phosphor::fan::control;
17
18const unsigned int Manager::_powerOnDelay{${mgr_data['power_on_delay']}};
19
20const std::vector<ZoneGroup> Manager::_zoneLayouts
21{
22%for zone_group in zones:
23 ZoneGroup{
24 std::vector<Condition>{
25 %for condition in zone_group['conditions']:
26 Condition{
27 "${condition['type']}",
28 std::vector<ConditionProperty>{
29 %for property in condition['properties']:
30 ConditionProperty{
31 "${property['property']}",
32 "${property['interface']}",
33 "${property['path']}",
34 static_cast<${property['type']}>(${property['value']}),
35 },
36 %endfor
37 },
38 },
39 %endfor
40 },
41 std::vector<ZoneDefinition>{
42 %for zone in zone_group['zones']:
43 ZoneDefinition{
44 ${zone['num']},
45 ${zone['full_speed']},
46 ${zone['default_floor']},
47 ${zone['increase_delay']},
48 ${zone['decrease_interval']},
Matthew Barth7883f582019-02-14 14:24:46 -060049 std::vector<ZoneHandler>{
50 %if ('ifaces' in zone) and \
51 (zone['ifaces'] is not None):
52 %for i in zone['ifaces']:
53 %if ('props' in i) and \
54 (i['props'] is not None):
55 %for p in i['props']:
56 ZoneHandler{
57 make_zoneHandler(handler::setZoneProperty(
Matthew Barth59096e52019-02-18 12:23:38 -060058 "${i['name']}",
59 "${p['name']}",
60 &Zone::${p['func']},
Matthew Barth7883f582019-02-14 14:24:46 -060061 static_cast<${p['type']}>(
62 %if "vector" in p['type'] or "map" in p['type']:
63 ${p['type']}{
64 %endif
Matthew Barth59096e52019-02-18 12:23:38 -060065 %for j, v in enumerate(p['values']):
66 %if (j+1) != len(p['values']):
Matthew Barth7883f582019-02-14 14:24:46 -060067 ${v},
68 %else:
69 ${v}
70 %endif
71 %endfor
72 %if "vector" in p['type'] or "map" in p['type']:
73 }
74 %endif
Matthew Barth59096e52019-02-18 12:23:38 -060075 ),
76 ${p['persist']}
Matthew Barth7883f582019-02-14 14:24:46 -060077 ))
78 },
79 %endfor
80 %endif
81 %endfor
82 %endif
83 },
Matthew Barth702c4a52018-02-28 16:23:11 -060084 std::vector<FanDefinition>{
85 %for fan in zone['fans']:
86 FanDefinition{
87 "${fan['name']}",
88 std::vector<std::string>{
89 %for sensor in fan['sensors']:
90 "${sensor}",
91 %endfor
92 },
Chau Ly44872b02022-09-19 07:34:08 +000093 "${fan['target_interface']}",
94 "${fan['target_path']}"
Matthew Barth702c4a52018-02-28 16:23:11 -060095 },
96 %endfor
97 },
98 std::vector<SetSpeedEvent>{
99 %for event in zone['events']:
100 %if ('pc' in event) and \
101 (event['pc'] is not None):
102 SetSpeedEvent{
Matthew Barth621a5772018-11-14 14:55:11 -0600103 "${event['pc']['pcname']}",
Matthew Barth06fa7812018-11-20 09:54:30 -0600104 Group
105 {
Matthew Barth702c4a52018-02-28 16:23:11 -0600106 %for group in event['pc']['pcgrps']:
107 %for member in group['members']:
Matthew Barth06fa7812018-11-20 09:54:30 -0600108 {"${member['object']}",
Matthew Barth146b7392018-03-08 16:17:58 -0600109 "${member['interface']}",
Matthew Barth06fa7812018-11-20 09:54:30 -0600110 "${member['property']}"},
Matthew Barth702c4a52018-02-28 16:23:11 -0600111 %endfor
112 %endfor
113 },
Matthew Barth06fa7812018-11-20 09:54:30 -0600114 ActionData{
Matthew Barth75d97352018-11-01 10:34:49 -0500115 {Group{},
Matthew Barth702c4a52018-02-28 16:23:11 -0600116 std::vector<Action>{
117 %for i, a in enumerate(event['pc']['pcact']):
Matthew Barth702c4a52018-02-28 16:23:11 -0600118 make_action(
119 precondition::${a['name']}(
Matthew Barth702c4a52018-02-28 16:23:11 -0600120 %for p in a['params']:
121 ${p['type']}${p['open']}
122 %for j, v in enumerate(p['values']):
123 %if (j+1) != len(p['values']):
124 ${v['value']},
125 %else:
126 ${v['value']}
127 %endif
128 %endfor
129 ${p['close']},
130 %endfor
Matthew Barth702c4a52018-02-28 16:23:11 -0600131 %endfor
132 std::vector<SetSpeedEvent>{
133 %for pcevt in event['pc']['pcevts']:
Matthew Barth621a5772018-11-14 14:55:11 -0600134 SetSpeedEvent{
135 "${pcevt['name']}",\
Matthew Barth702c4a52018-02-28 16:23:11 -0600136 ${indent(genSSE(event=pcevt), 6)}\
137 },
138 %endfor
139 %else:
Matthew Barth621a5772018-11-14 14:55:11 -0600140 SetSpeedEvent{
141 "${event['name']}",\
Matthew Barth702c4a52018-02-28 16:23:11 -0600142 ${indent(genSSE(event=event), 6)}
143 %endif
144 %if ('pc' in event) and (event['pc'] is not None):
145 }
Matthew Barth702c4a52018-02-28 16:23:11 -0600146 )),
Matthew Barth75d97352018-11-01 10:34:49 -0500147 }},
Matthew Barth06fa7812018-11-20 09:54:30 -0600148 },
Matthew Barth1b4de262018-03-06 13:03:16 -0600149 std::vector<Trigger>{
Matthew Barthd0b90fc2018-03-05 09:38:45 -0600150 %if ('timer' in event['pc']['triggers']) and \
151 (event['pc']['triggers']['timer'] is not None):
Matthew Barth1b4de262018-03-06 13:03:16 -0600152 make_trigger(trigger::timer(TimerConf{
Matthew Barthd0b90fc2018-03-05 09:38:45 -0600153 ${event['pc']['triggers']['pctime']['interval']},
154 ${event['pc']['triggers']['pctime']['type']}
Matthew Barth016bd242018-03-07 16:06:06 -0600155 })),
Matthew Barthd0b90fc2018-03-05 09:38:45 -0600156 %endif
Matthew Barth016bd242018-03-07 16:06:06 -0600157 %if ('pcsigs' in event['pc']['triggers']) and \
158 (event['pc']['triggers']['pcsigs'] is not None):
159 %for s in event['pc']['triggers']['pcsigs']:
160 make_trigger(trigger::signal(
Matthew Barth18c91032019-01-29 15:36:00 -0600161 %if ('match' in s) and \
162 (s['match'] is not None):
Matthew Barth702c4a52018-02-28 16:23:11 -0600163 match::${s['match']}(
Matthew Barth926df662018-10-09 09:51:12 -0500164 %for i, mp in enumerate(s['mparams']['params']):
165 %if (i+1) != len(s['mparams']['params']):
166 ${indent(s['mparams'][mp], 1)},
Matthew Barth702c4a52018-02-28 16:23:11 -0600167 %else:
Matthew Barth926df662018-10-09 09:51:12 -0500168 ${indent(s['mparams'][mp], 1)}
Matthew Barth702c4a52018-02-28 16:23:11 -0600169 %endif
170 %endfor
171 ),
Matthew Barth18c91032019-01-29 15:36:00 -0600172 %else:
173 "",
174 %endif
Matthew Barth926df662018-10-09 09:51:12 -0500175 make_handler<SignalHandler>(\
176 ${indent(genSignal(sig=s), 9)}\
Matthew Barth702c4a52018-02-28 16:23:11 -0600177 )
Matthew Barth016bd242018-03-07 16:06:06 -0600178 )),
179 %endfor
180 %endif
Matthew Barthcd3bfbc2018-03-07 16:26:03 -0600181 %if ('init' in event['pc']['triggers']):
182 %for i in event['pc']['triggers']['init']:
183 make_trigger(trigger::init(
Matthew Barth926df662018-10-09 09:51:12 -0500184 %if ('method' in i):
185 make_handler<MethodHandler>(\
186 ${indent(genMethod(meth=i), 3)}\
Matthew Barthcd3bfbc2018-03-07 16:26:03 -0600187 )
188 %endif
189 )),
190 %endfor
191 %endif
Matthew Barth016bd242018-03-07 16:06:06 -0600192 },
Matthew Barth702c4a52018-02-28 16:23:11 -0600193 %endif
194 },
195 %endfor
196 }
197 },
198 %endfor
199 }
200 },
201%endfor
202};