From e7d87053021411f908944555d8a1735c21c61b95 Mon Sep 17 00:00:00 2001 From: Matthew Barth Date: Wed, 21 Mar 2018 13:58:31 -0500 Subject: Generate InterfacesRemoved signal events In the case that an interface containing a property used within an event is removed from dbus, that event can subscribe to the InterfacesRemoved signal. When an InterfacesRemoved signal is received by fan control, the corresponding interface (and all associated properties) is removed from the cache used by all events. *Note: This area of signal subscription/handling code generation is intended to be re-worked under openbmc/openbmc#2911. This is the reason for supporting a different yaml layout for the InterfacesRemoved signal. Tested: Generated code constructs InterfacesRemoved signals correctly Resolves openbmc/openbmc#2223 Change-Id: Idc3e8db4e7dc07a2bb6898d3cc30ab775362dd35 Signed-off-by: Matthew Barth --- control/gen-fan-zone-defs.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'control') diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py index b89e5bc..43d98bc 100755 --- a/control/gen-fan-zone-defs.py +++ b/control/gen-fan-zone-defs.py @@ -414,8 +414,12 @@ def getEvent(zone_num, zone_conditions, e, events_data): 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']) + if ('parameters' in eMatch['signal']) and \ + (eMatch['signal']['parameters'] is not None): + eSignal = eMatch['signal'] + else: + eSignal = next(s for s in events_data['signals'] + if s['name'] == eMatch['signal']) signal['signal'] = eSignal['name'] sparams = {} if ('parameters' in eSignal) and \ @@ -562,8 +566,12 @@ def addPrecondition(zNum, zCond, event, events_data): 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']) + if ('parameters' in eMatch['signal']) and \ + (eMatch['signal']['parameters'] is not None): + eSignal = eMatch['signal'] + else: + eSignal = next(s for s in events_data['signals'] + if s['name'] == eMatch['signal']) signal['signal'] = eSignal['name'] sparams = {} if ('parameters' in eSignal) and \ -- cgit v1.2.1