Have timers be a trigger type in microseconds
Extract and generate timers in microseconds for all event triggers and
actions that take a timer as a parameter.
Tested:
Timers are created on events with timer triggers defined
Inspect that generated timers are created in microseconds
No timer is created for events without a timer trigger
Change-Id: I345f247782779ef142fe0d569632be2b6c11f0c3
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 03346bc..5f1de45 100755
--- a/control/gen-fan-zone-defs.py
+++ b/control/gen-fan-zone-defs.py
@@ -163,8 +163,10 @@
e += "},\n"
e += "TimerConf{\n"
- e += "\t" + event['timer']['interval'] + ",\n"
- e += "\t" + event['timer']['type'] + "\n"
+ if ('timer' in event['triggers']) and \
+ (event['triggers']['timer'] is not None):
+ e += "\t" + event['triggers']['timer']['interval'] + ",\n"
+ e += "\t" + event['triggers']['timer']['type'] + "\n"
e += "},\n"
e += "std::vector<Signal>{\n"
@@ -342,6 +344,19 @@
return signals
+def getTimer(eTrig):
+ """
+ Extracts and constructs the required parameters for an
+ event timer.
+ """
+ timer = {}
+ timer['interval'] = (
+ "static_cast<std::chrono::microseconds>" +
+ "(" + str(eTrig['interval']) + ")")
+ timer['type'] = "TimerType::" + str(eTrig['type'])
+ return timer
+
+
def getActions(zNum, zCond, edata, actions, events):
"""
Extracts and constructs the make_action function call for
@@ -407,11 +422,10 @@
param += ("size_t>(" + str(eActions[p]).lower() + ")")
else:
if p == 'timer':
+ t = getTimer(eActions[p])
param = (
- "TimerConf{static_cast<std::chrono::seconds>(" +
- str(eActions[p]['delay']) + "), " +
- "TimerType::" +
- str(eActions[p]['type']) + "}")
+ "TimerConf{" + t['interval'] + "," +
+ t['type'] + "}")
else:
param += (str(eActions[p]['type']).lower() + ">(")
if p != 'map':
@@ -459,27 +473,14 @@
event['triggers'] = {}
for trig in e['triggers']:
triggers = []
- if (trig['name'] == "signal"):
+ if (trig['name'] == "timer"):
+ event['triggers']['timer'] = getTimer(trig)
+ elif (trig['name'] == "signal"):
if ('signals' not in event['triggers']):
event['triggers']['signals'] = []
triggers = getSignal(event['groups'], trig, events_data)
event['triggers']['signals'].extend(triggers)
- # Add optional action call timer
- timer = {}
- interval = "static_cast<std::chrono::seconds>"
- if ('timer' in e) and \
- (e['timer'] is not None):
- timer['interval'] = (interval +
- "(" +
- str(e['timer']['interval']) +
- ")")
- else:
- timer['interval'] = (interval +
- "(" + str(0) + ")")
- timer['type'] = "TimerType::repeating"
- event['timer'] = timer
-
return event
@@ -544,27 +545,14 @@
precond['triggers'] = {}
for trig in event['precondition']['triggers']:
triggers = []
- if (trig['name'] == "signal"):
+ if (trig['name'] == "timer"):
+ precond['triggers']['pctime'] = getTimer(trig)
+ elif (trig['name'] == "signal"):
if ('pcsigs' not in precond['triggers']):
precond['triggers']['pcsigs'] = []
triggers = getSignal(precond['pcgrps'], trig, events_data)
precond['triggers']['pcsigs'].extend(triggers)
- # Add optional action call timer
- timer = {}
- interval = "static_cast<std::chrono::seconds>"
- if ('timer' in event['precondition']) and \
- (event['precondition']['timer'] is not None):
- timer['interval'] = (interval +
- "(" +
- str(event['precondition']['timer']['interval']) +
- ")")
- else:
- timer['interval'] = (interval +
- "(" + str(0) + ")")
- timer['type'] = "TimerType::repeating"
- precond['pctime'] = timer
-
return precond