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>
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 @@
Group{
%for member in event['group']:
{
- "${member['name']}",
+ "${member['object']}",
{"${member['interface']}",
"${member['property']}"}
},
@@ -46,30 +46,32 @@
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']}",
+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['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']}"
)
@@ -140,7 +142,7 @@
Group{
%for member in event['pc']['pcgrp']:
{
- "${member['name']}",
+ "${member['object']}",
{"${member['interface']}",
"${member['property']}"}
},
@@ -195,30 +197,32 @@
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 @@
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 @@
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 @@
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 @@
value = {}
value['value'] = (
"PrecondGroup{\"" +
- str(pcgrp['name']) + "\",\"" +
+ str(pcgrp['object']) + "\",\"" +
str(pcgrp['interface']) + "\",\"" +
str(pcgrp['property']) + "\"," +
"static_cast<" +
@@ -410,17 +432,36 @@
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 = {}