diff options
Diffstat (limited to 'control/gen-fan-zone-defs.py')
-rwxr-xr-x | control/gen-fan-zone-defs.py | 193 |
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 = {} |