summaryrefslogtreecommitdiffstats
path: root/control/gen-fan-zone-defs.py
diff options
context:
space:
mode:
authorMatthew Barth <msbarth@us.ibm.com>2017-09-22 12:43:57 -0500
committerMatthew Barth <msbarth@us.ibm.com>2017-11-07 13:54:35 -0600
commit67967f9a3f8e779d897a66cc6d559783911b2c14 (patch)
treea8e478d4e622635b23436347ca3b3463a93052a1 /control/gen-fan-zone-defs.py
parente3bab01d16c1b2b126b37295b13911bf17bfb0bd (diff)
downloadphosphor-fan-presence-67967f9a3f8e779d897a66cc6d559783911b2c14.tar.gz
phosphor-fan-presence-67967f9a3f8e779d897a66cc6d559783911b2c14.zip
Generate selected match strings and signals
The available matches and their associated signals are now listed within the events yaml and can be added to the list of matches to register for per event. Change-Id: I65f657038afe7c68a421adb4820ea09e275be06d Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Diffstat (limited to 'control/gen-fan-zone-defs.py')
-rwxr-xr-xcontrol/gen-fan-zone-defs.py193
1 files changed, 117 insertions, 76 deletions
diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py
index d11ff35..6d04bbd 100755
--- a/control/gen-fan-zone-defs.py
+++ b/control/gen-fan-zone-defs.py
@@ -20,7 +20,7 @@ def indent(str, depth):
Group{
%for member in event['group']:
{
- "${member['name']}",
+ "${member['object']}",
{"${member['interface']}",
"${member['property']}"}
},
@@ -46,30 +46,32 @@ make_action(action::${a['name']}
Timer{
${event['timer']['interval']}
},
-std::vector<PropertyChange>{
-%for s in event['signal']:
- PropertyChange{
- interfacesAdded("${s['obj_path']}"),
- make_handler(objectSignal<${s['type']}>(
- "${s['path']}",
- "${s['interface']}",
- "${s['property']}",
- handler::setProperty<${s['type']}>(
- "${s['path']}",
- "${s['interface']}",
- "${s['property']}"
- )
- ))
- },
- PropertyChange{
- propertiesChanged(
- "${s['path']}",
- "${s['interface']}"),
- make_handler(propertySignal<${s['type']}>(
- "${s['interface']}",
- "${s['property']}",
+std::vector<Signal>{
+%for s in event['signals']:
+ Signal{
+ ${s['match']}(
+ %for i, mp in enumerate(s['mparams']):
+ %if (i+1) != len(s['mparams']):
+ "${mp}",
+ %else:
+ "${mp}"
+ %endif
+ %endfor
+ ),
+ make_handler(
+ %if ('type' in s['sparams']) and \
+ (s['sparams']['type'] is not None):
+ ${s['signal']}<${s['sparams']['type']}>(
+ %else:
+ ${s['signal']}(
+ %endif
+ %for spk, spv in s['sparams'].iteritems():
+ %if spk != 'type':
+ "${spv}",
+ %endif
+ %endfor
handler::setProperty<${s['type']}>(
- "${s['path']}",
+ "${s['object']}",
"${s['interface']}",
"${s['property']}"
)
@@ -140,7 +142,7 @@ const std::vector<ZoneGroup> Manager::_zoneLayouts
Group{
%for member in event['pc']['pcgrp']:
{
- "${member['name']}",
+ "${member['object']}",
{"${member['interface']}",
"${member['property']}"}
},
@@ -195,30 +197,32 @@ const std::vector<ZoneGroup> Manager::_zoneLayouts
Timer{
${event['pc']['pctime']['interval']}
},
- std::vector<PropertyChange>{
- %for s in event['pc']['pcsig']:
- PropertyChange{
- interfacesAdded("${s['obj_path']}"),
- make_handler(objectSignal<${s['type']}>(
- "${s['path']}",
- "${s['interface']}",
- "${s['property']}",
+ std::vector<Signal>{
+ %for s in event['pc']['pcsigs']:
+ Signal{
+ ${s['match']}(
+ %for i, mp in enumerate(s['mparams']):
+ %if (i+1) != len(s['mparams']):
+ "${mp}",
+ %else:
+ "${mp}"
+ %endif
+ %endfor
+ ),
+ make_handler(
+ %if ('type' in s['sparams']) and \
+ (s['sparams']['type'] is not None):
+ ${s['signal']}<${s['sparams']['type']}>(
+ %else:
+ ${s['signal']}(
+ %endif
+ %for spk, spv in s['sparams'].iteritems():
+ %if spk != 'type':
+ "${spv}",
+ %endif
+ %endfor
handler::setProperty<${s['type']}>(
- "${s['path']}",
- "${s['interface']}",
- "${s['property']}"
- )
- ))
- },
- PropertyChange{
- propertiesChanged(
- "${s['path']}",
- "${s['interface']}"),
- make_handler(propertySignal<${s['type']}>(
- "${s['interface']}",
- "${s['property']}",
- handler::setProperty<${s['type']}>(
- "${s['path']}",
+ "${s['object']}",
"${s['interface']}",
"${s['property']}"
)
@@ -276,11 +280,11 @@ def getEvent(zone_num, zone_conditions, e, events_data):
if g['name'] == e['group'])
for member in groups['members']:
members = {}
- members['obj_path'] = groups['type']
- members['name'] = (groups['type'] +
- member)
+ members['object'] = (groups['type'] +
+ member)
members['interface'] = e['interface']
members['property'] = e['property']['name']
+ members['type'] = e['property']['type']
group.append(members)
event['group'] = group
@@ -319,17 +323,36 @@ def getEvent(zone_num, zone_conditions, e, events_data):
action.append(actions)
event['action'] = action
- # Add property change signal handler
- signal = []
- for path in group:
- signals = {}
- signals['obj_path'] = path['obj_path']
- signals['path'] = path['name']
- signals['interface'] = e['interface']
- signals['property'] = e['property']['name']
- signals['type'] = e['property']['type']
- signal.append(signals)
- event['signal'] = signal
+ # Add signal handlers
+ signals = []
+ for member in group:
+ for eMatches in e['matches']:
+ signal = {}
+ eMatch = next(m for m in events_data['matches']
+ if m['name'] == eMatches['name'])
+ signal['match'] = eMatch['name']
+ params = []
+ if ('parameters' in eMatch) and \
+ (eMatch['parameters'] is not None):
+ for p in eMatch['parameters']:
+ params.append(member[str(p)])
+ signal['mparams'] = params
+ eSignal = next(s for s in events_data['signals']
+ if s['name'] == eMatch['signal'])
+ signal['signal'] = eSignal['name']
+ sparams = {}
+ if ('parameters' in eSignal) and \
+ (eSignal['parameters'] is not None):
+ for p in eSignal['parameters']:
+ sparams[str(p)] = member[str(p)]
+ signal['sparams'] = sparams
+ # Add member attributes
+ signal['object'] = member['object']
+ signal['interface'] = member['interface']
+ signal['property'] = member['property']
+ signal['type'] = member['type']
+ signals.append(signal)
+ event['signals'] = signals
# Add optional action call timer
timer = {}
@@ -361,9 +384,8 @@ def addPrecondition(zNum, zCond, event, events_data):
if g['name'] == grp['name'])
for member in groups['members']:
members = {}
- members['obj_path'] = groups['type']
- members['name'] = (groups['type'] +
- member)
+ members['object'] = (groups['type'] +
+ member)
members['interface'] = grp['interface']
members['property'] = grp['property']['name']
members['type'] = grp['property']['type']
@@ -389,7 +411,7 @@ def addPrecondition(zNum, zCond, event, events_data):
value = {}
value['value'] = (
"PrecondGroup{\"" +
- str(pcgrp['name']) + "\",\"" +
+ str(pcgrp['object']) + "\",\"" +
str(pcgrp['interface']) + "\",\"" +
str(pcgrp['property']) + "\"," +
"static_cast<" +
@@ -410,17 +432,36 @@ def addPrecondition(zNum, zCond, event, events_data):
pcevents.append(pcevent)
precond['pcevts'] = pcevents
- # Add precondition property change signal handler
- signal = []
+ # Add precondition signal handlers
+ signals = []
for member in group:
- signals = {}
- signals['obj_path'] = member['obj_path']
- signals['path'] = member['name']
- signals['interface'] = member['interface']
- signals['property'] = member['property']
- signals['type'] = member['type']
- signal.append(signals)
- precond['pcsig'] = signal
+ for eMatches in event['precondition']['matches']:
+ signal = {}
+ eMatch = next(m for m in events_data['matches']
+ if m['name'] == eMatches['name'])
+ signal['match'] = eMatch['name']
+ params = []
+ if ('parameters' in eMatch) and \
+ (eMatch['parameters'] is not None):
+ for p in eMatch['parameters']:
+ params.append(member[str(p)])
+ signal['mparams'] = params
+ eSignal = next(s for s in events_data['signals']
+ if s['name'] == eMatch['signal'])
+ signal['signal'] = eSignal['name']
+ sparams = {}
+ if ('parameters' in eSignal) and \
+ (eSignal['parameters'] is not None):
+ for p in eSignal['parameters']:
+ sparams[str(p)] = member[str(p)]
+ signal['sparams'] = sparams
+ # Add member attributes
+ signal['object'] = member['object']
+ signal['interface'] = member['interface']
+ signal['property'] = member['property']
+ signal['type'] = member['type']
+ signals.append(signal)
+ precond['pcsigs'] = signals
# Add optional action call timer
timer = {}
OpenPOWER on IntegriCloud