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