Example #1
0
File: time.py Project: jggatc/pyj2d
class _EventTimer(ActionListener):
    timers = {}

    def __init__(self, eventid):
        self.event = pyj2d.event.Event(eventid)
        self.timer = Timer(0, self)

    def set_timer(self, time):
        if self.timer.isRunning():
            self.timer.stop()
        if time:
            self.timer.setInitialDelay(time)
            self.timer.setDelay(time)
            self.timer.start()

    def actionPerformed(self, evt):
        pyj2d.event.post(self.event)
Example #2
0
class CommandClient():
    def __init__(self, extender):
        self._syncTimer = Timer(1000, None)
        self._syncTimer.setRepeats(True)
        self._syncTimer.actionPerformed = self._sendCommandSync
        self._syncTimer.stop()

        self.commandListenPort = 8089;

        self._startTimer = Timer(1000, None)
        self._startTimer.setInitialDelay(1500)
        self._startTimer.setRepeats(False)
        self._startTimer.actionPerformed = self._sendCommandStart
        self._startTimer.stop()

        self._extender = extender

    def startCrawling(self):
        self._startTimer.start()
    def startSync(self):
        self._syncTimer.start()

    def stopCrawling(self):
        self._sendCommandStop(None)
        self._syncTimer.stop()

    def _sendCommandStart(self, ev):
        self._sendCommand("start")
        self.startSync()

    def _sendCommandStop(self, ev):
        self._sendCommand("stop")

    def _sendCommandSync(self, ev):
        result = self._sendCommand("sync")
        self._extender.syncCrawlingState(result)

    def _sendCommand(self, command):
        url = 'http://127.0.0.1:' + str(self.commandListenPort) + '/?command={0}'.format(command)
        # TODO: iterate through parameters

        response =  urllib2.urlopen(url)
        data = json.load(response)
        return data
Example #3
0
File: time.py Project: jggatc/pyj2d
class _EventTimer(ActionListener):
    def __init__(self, event):
        self.event = event
        self.timer = Timer(0, self)
        self.repeat = True

    def set_timer(self, time, repeat):
        if self.timer.isRunning():
            self.timer.stop()
        if time:
            self.repeat = repeat
            self.timer.setInitialDelay(time)
            self.timer.setDelay(time)
            self.timer.start()

    def actionPerformed(self, evt):
        env.event.post(self.event)
        if not self.repeat:
            self.timer.stop()
Example #4
0
    class TrackDevice(java.beans.PropertyChangeListener):
        import java
        import javax.swing
        import javax.swing.Timer

        delayTimer = None
        relayClicks = None

        # TrackDevice.init - Initialize a TrackDevice instance for a particular device
        #
        # aName          : Device name
        # aDevice        : JMRI device instance
        # aAllowedStates : Array of states we want to track, other states are ignored
        #
        def init(self, aName, aDevice, aAllowedStates, aLogFile, aParent):
            from javax.swing import Timer
            #print ('TrackDevice.init ' + aName )
            self.DeviceName = aName
            self.Device = aDevice
            self.DeviceValue = self.Device.getValue()
            self.AllowedStates = aAllowedStates
            self.parent = aParent
            self.LogFile = aLogFile

            self.timeoutListener = self.TimeoutReceiver()
            self.timeoutListener.setCallBack(self.receiveTimeoutHandler)
            self.receiveTimer = Timer(1, self.timeoutListener)
            self.receiveTimer.stop()
            self.receiveTimer.setRepeats(False)

            self.sendTimeoutListener = self.TimeoutReceiver()
            self.sendTimeoutListener.setCallBack(self.sendTimeoutHandler)
            self.sendTimer = Timer(1, self.sendTimeoutListener)
            self.sendTimer.stop()
            self.sendTimer.setRepeats(False)

            self.pauseTimeoutListener = self.TimeoutReceiver()
            self.pauseTimeoutListener.setCallBack(self.pauseTimeoutHandler)
            self.pauseTimer = Timer(1, self.pauseTimeoutListener)
            self.pauseTimer.stop()
            self.pauseTimer.setRepeats(False)

            self.relayClicks = jmri.jmrit.Sound(
                "resources/sounds/Code-receive.wav")
            #self.relayClicks = jmri.jmrit.Sound(jmri.util.FileUtil.getExternalFilename("preference:resources/sounds/EnhancedCTCRelay.wav"))
            self.relaySend = jmri.jmrit.Sound("resources/sounds/Code-send.wav")

            return

        # TrackDevice.updateState - Track the device state while reading the old log
        #                           file.  Note the state but don't change the device
        #                           itself and don't log the changes to the new log file
        #                           (yet).
        #
        # aNewState : New device state.
        #
        def updateState(self, aNewState):
            #print 'updateState ' + self.DeviceName
            for i in range(len(self.AllowedStates)):
                if (aNewState == self.AllowedStates[i]):
                    self.DeviceValue = aNewState
                    break

        # TrackDevice.propertyChange - Record state changes as a result of activities
        #                              elsewhere in JMRI
        #
        # aEvent : Event triggering the change (we don't actually look at the event...)
        #
        def propertyChange(self, aEvent):
            #print "Property change " + self.DeviceName
            newValue = self.Device.getValue()

            codeSendSensor = sensors.getSensor("IS16:CCK")
            codeSendSensor.setState(ACTIVE)

            self.relaySend.loop()
            ccdl = 5 + java.util.Random().nextInt(1)  # Code transmission delay
            self.sendTimer.setInitialDelay(ccdl * 10)
            self.sendTimer.start()

            if (newValue == self.DeviceValue):
                return

            for i in range(len(self.AllowedStates)):
                if (newValue == self.AllowedStates[i]):
                    self.DeviceValue = newValue
                    #logStateChange2(self.DeviceName, self.DeviceValue, True)
                    #print "state change " + self.DeviceName + " " + str(self.DeviceValue)
                    self.LogFile.write(self.DeviceName + " " +
                                       self.DeviceValue + "\n")
                    self.LogFile.flush()
                    break
            return

        # TrackDevice.setInitialDeviceState - After reading all of the old tracking file we
        #                                     now initialize the actual devices to their last
        #                                     known states and log these states into the new
        #                                     log file.
        #
        def setInitialDeviceState(self, logFile):
            #       Uncomment the following print statement to display the list of devices being tracked.
            #print "In setInitDeviceState, name = " + self.DeviceName + " value = " + self.DeviceValue
            self.LogFile = logFile
            self.Device.setValue(self.DeviceValue)
            self.Device.addPropertyChangeListener(self)
            #logStateChange2(self.DeviceName, self.DeviceState, False)
            logFile.write(self.DeviceName + " " + self.DeviceValue + "\n")

            signalId = "IS" + self.DeviceName[2:3]
            ctcId = "CTC:TO" + self.DeviceName[2:3]
            # Move the switch lever to the correct position
            if (self.DeviceValue == "P"):

                #print " ctcId = " + ctcId + " state = green"
                turnouts.provideTurnout("NT" +
                                        self.DeviceName[2:3]).setState(CLOSED)
                sensors.getSensor(signalId + ":WLL").setState(INACTIVE)
                sensors.getSensor(signalId + ":WLR").setState(INACTIVE)
                sensors.getSensor(signalId + ":WLC").setState(ACTIVE)

                sensors.getSensor(signalId + ":WKR").setState(INACTIVE)
                sensors.getSensor(signalId + ":WKL").setState(INACTIVE)
                sensors.getSensor(signalId + ":WKC").setState(ACTIVE)

                sensors.getSensor(ctcId + "GK").setState(ACTIVE)
                sensors.getSensor(ctcId + "YK").setState(INACTIVE)
                sensors.getSensor(ctcId + "RK").setState(INACTIVE)

                sensors.getSensor(ctcId + "GS").setState(ACTIVE)
                sensors.getSensor(ctcId + "YS").setState(INACTIVE)
                sensors.getSensor(ctcId + "RS").setState(INACTIVE)

                sensors.getSensor(signalId + ":TOC").setState(INACTIVE)
                sensors.getSensor(signalId + ":TOS").setState(INACTIVE)
                sensors.getSensor(signalId + ":TOP").setState(ACTIVE)
            elif (self.DeviceValue == "C"):
                #print " ctcId = " + ctcId + " state = yellow"
                sensors.getSensor(signalId + ":WLL").setState(ACTIVE)
                sensors.getSensor(signalId + ":WLR").setState(INACTIVE)
                sensors.getSensor(signalId + ":WLC").setState(INACTIVE)
                sensors.getSensor(signalId + ":WKR").setState(INACTIVE)
                sensors.getSensor(signalId + ":WKL").setState(ACTIVE)
                sensors.getSensor(signalId + ":WKC").setState(INACTIVE)

                sensors.getSensor(ctcId + "GK").setState(INACTIVE)
                sensors.getSensor(ctcId + "YK").setState(ACTIVE)
                sensors.getSensor(ctcId + "RK").setState(INACTIVE)

                sensors.getSensor(ctcId + "GS").setState(INACTIVE)
                sensors.getSensor(ctcId + "YS").setState(ACTIVE)
                sensors.getSensor(ctcId + "RS").setState(INACTIVE)

                sensors.getSensor(signalId + ":TOC").setState(ACTIVE)
                sensors.getSensor(signalId + ":TOS").setState(INACTIVE)
                sensors.getSensor(signalId + ":TOP").setState(INACTIVE)

            else:
                #print " ctcId = " + ctcId + " state = red"
                turnouts.provideTurnout("NT" +
                                        self.DeviceName[2:3]).setState(THROWN)
                sensors.getSensor(signalId + ":WLL").setState(INACTIVE)
                sensors.getSensor(signalId + ":WLR").setState(ACTIVE)
                sensors.getSensor(signalId + ":WLC").setState(INACTIVE)
                sensors.getSensor(signalId + ":WKR").setState(ACTIVE)
                sensors.getSensor(signalId + ":WKL").setState(INACTIVE)
                sensors.getSensor(signalId + ":WKC").setState(INACTIVE)

                sensors.getSensor(ctcId + "GK").setState(INACTIVE)
                sensors.getSensor(ctcId + "YK").setState(INACTIVE)
                sensors.getSensor(ctcId + "RK").setState(ACTIVE)

                sensors.getSensor(ctcId + "GS").setState(INACTIVE)
                sensors.getSensor(ctcId + "YS").setState(INACTIVE)
                sensors.getSensor(ctcId + "RS").setState(ACTIVE)

                sensors.getSensor(signalId + ":TOC").setState(INACTIVE)
                sensors.getSensor(signalId + ":TOS").setState(ACTIVE)
                sensors.getSensor(signalId + ":TOP").setState(INACTIVE)

        class TimeoutReceiver(java.awt.event.ActionListener):
            cb = None

            def actionPerformed(self, event):
                if (self.cb != None):
                    self.cb(event)
                return

            def setCallBack(self, cbf):
                self.cb = cbf
                return

        class TimeoutReceiver2(java.awt.event.ActionListener):
            cb = None

            def actionPerformed(self, event):
                if (self.cb != None):
                    self.cb(event)
                return

            def setCallBack(self, cbf):
                self.cb = cbf
                return

        class TimeoutReceiver3(java.awt.event.ActionListener):
            cb = None

            def actionPerformed(self, event):
                if (self.cb != None):
                    self.cb(event)
                return

            def setCallBack(self, cbf):
                self.cb = cbf
                return

        def sendTimeoutHandler(self, event):
            #print "In send timeout handler"
            self.sendTimer.stop()
            self.relaySend.stop()
            sensors.getSensor("IS16:CCK").setState(INACTIVE)

            #sleep(2)

            signalNumber = self.DeviceName[2:3]
            if (self.Device.getValue() == "P"):
                turnouts.provideTurnout("NT" + signalNumber).setState(CLOSED)
            elif (self.Device.getValue() == "S"):
                turnouts.provideTurnout("NT" + signalNumber).setState(THROWN)

            smdl = 5 + java.util.Random().nextInt(2)  # Switch motor delay -

            self.pauseTimer.setInitialDelay(smdl * 10)
            self.pauseTimer.start()
            return

        def pauseTimeoutHandler(self, event):
            #print "In pause timeout handler"
            self.pauseTimer.stop()

            sensors.getSensor("IS17:ICK").setState(ACTIVE)
            #print "Turning on IC light"

            self.relayClicks.loop()
            newName = "IS" + self.DeviceName[2:3]
            sensors.getSensor(newName + ":WKC").setState(INACTIVE)
            sensors.getSensor(newName + ":WKL").setState(INACTIVE)
            sensors.getSensor(newName + ":WKR").setState(INACTIVE)

            ctcName = "CTC:TO" + self.DeviceName[2:3]
            if (sensors.getSensor(ctcName + "YK").getState() == ACTIVE):
                sensors.getSensor(ctcName + "YK").setState(INACTIVE)
            if (sensors.getSensor(ctcName + "GK").getState() == ACTIVE):
                sensors.getSensor(ctcName + "GK").setState(INACTIVE)
            if (sensors.getSensor(ctcName + "RK").getState() == ACTIVE):
                sensors.getSensor(ctcName + "RK").setState(INACTIVE)

            icdl = 5 + java.util.Random().nextInt(3)  # Indicator code delay

            self.receiveTimer.setInitialDelay(icdl * 10)
            self.receiveTimer.start()
            return

        def receiveTimeoutHandler(self, event):
            # see which phase we think we are in
            #print "In receive timeout Handler"
            self.receiveTimer.stop()

            signalNumber = self.DeviceName[2:3]
            #print " Signal number = " + str(signalNumber) + " signal state = " + self.Device.getValue()
            if (self.Device.getValue() == "P"):
                sensors.getSensor("IS" + signalNumber +
                                  ":WKC").setState(ACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":WKR").setState(INACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":WKL").setState(INACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":TOC").setState(INACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":TOS").setState(INACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":TOP").setState(ACTIVE)

                #sensors.getSensor("CTC:TO" + signalNumber + "YK").setState(INACTIVE)
                sensors.getSensor("CTC:TO" + signalNumber +
                                  "GK").setState(ACTIVE)
                #sensors.getSensor("CTC:TO" + signalNumber + "RK").setState(INACTIVE)

            elif (self.Device.getValue() == "C"):
                sensors.getSensor("IS" + signalNumber +
                                  ":WKC").setState(INACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":WKR").setState(INACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":WKL").setState(ACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":TOS").setState(INACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":TOP").setState(INACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":TOC").setState(ACTIVE)

                sensors.getSensor("CTC:TO" + signalNumber +
                                  "YK").setState(ACTIVE)
                #sensors.getSensor("CTC:TO" + signalNumber + "GK").setState(INACTIVE)
                #sensors.getSensor("CTC:TO" + signalNumber + "RK").setState(INACTIVE)
                jmri.jmrit.Sound("resources/sounds/Bell.wav").play()
            elif (self.Device.getValue() == "S"):
                sensors.getSensor("IS" + signalNumber +
                                  ":WKC").setState(INACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":WKR").setState(ACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":WKL").setState(INACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":TOC").setState(INACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":TOP").setState(INACTIVE)
                sensors.getSensor("IS" + signalNumber +
                                  ":TOS").setState(ACTIVE)

                #sensors.getSensor("CTC:TO" + signalNumber + "YK").setState(INACTIVE)
                #sensors.getSensor("CTC:TO" + signalNumber + "GK").setState(INACTIVE)
                sensors.getSensor("CTC:TO" + signalNumber +
                                  "RK").setState(ACTIVE)

            self.relayClicks.stop()
            self.parent.waitMsec(1000)
            sensors.getSensor("IS17:ICK").setState(INACTIVE)

            return
    class TrackDevice(java.beans.PropertyChangeListener):
        import java
        import javax.swing
        from javax.swing import Timer

        delayTimer = None
        relayClicks = None

        # TrackDevice.init - Initialize a TrackDevice instance for a particular device
        #
        # aName          : Device name
        # aDevice        : JMRI device instance
        # aAllowedStates : Array of states we want to track, other states are ignored
        #
        def init(self, aName, aDevice, aAllowedStates, aLogFile, aParent):
            from javax.swing import Timer
            self.DeviceName = aName
            self.Device = aDevice
            self.DeviceNumber = self.DeviceName[2:self.DeviceName.find(":")]
            self.AllowedStates = aAllowedStates
            self.parent = aParent
            self.DeviceValue = self.AllowedStates[0]
            self.LogFile = aLogFile

            self.timeoutListener = self.TimeoutReceiver()
            self.timeoutListener.setCallBack(self.receiveTimeoutHandler)

            self.receiveTimer = Timer(100, self.timeoutListener)
            self.receiveTimer.setInitialDelay(10)

            self.receiveTimer.stop()
            self.receiveTimer.setRepeats(False)

            self.sendTimeoutListener = self.TimeoutReceiver2()
            self.sendTimeoutListener.setCallBack(self.sendTimeoutHandler)

            self.sendTimer = Timer(100, self.timeoutListener)
            self.sendTimer.setInitialDelay(10)
            self.sendTimer.stop()
            self.sendTimer.setRepeats(False)

            self.pauseTimeoutListener = self.TimeoutReceiver()
            self.pauseTimeoutListener.setCallBack(self.pauseTimeoutHandler)

            self.pauseTimer = Timer(100, self.pauseTimeoutListener)
            self.pauseTimer.setInitialDelay(10)

            self.pauseTimer.stop()
            self.pauseTimer.setRepeats(False)

            self.finalTimeoutListener = self.TimeoutReceiver()
            self.finalTimeoutListener.setCallBack(self.finalTimeoutHandler)
            self.finalTimer = Timer(100, self.finalTimeoutListener)
            self.finalTimer.setInitialDelay(10)
            self.finalTimer.stop()
            self.finalTimer.setRepeats(False)

            #            self.relayClicks = jmri.jmrit.Sound(jmri.util.FileUtil.getExternalFilename("preference:resources/sounds/EnhancedCTCRelayTrimmed.wav"))
            self.relayClicks = jmri.jmrit.Sound(
                "resources/sounds/Code-receive.wav")
            self.relaySend = jmri.jmrit.Sound("resources/sounds/Code-send.wav")

            return

        # TrackDevice.updateState - Track the device state while reading the old log
        #                           file.  Note the state but don't change the device
        #                           itself and don't log the changes to the new log file
        #                           (yet).
        #
        # aNewState : New device state.
        #
        def updateState(self, aNewState):
            print 'updateState ' + self.DeviceName + " to state = " + aNewState
            for i in range(len(self.AllowedStates)):
                if (aNewState == self.AllowedStates[i]):
                    self.DeviceValue = aNewState
                    self.Device.setValue(aNewState)
                    break

        # TrackDevice.propertyChange - Record state changes as a result of activities
        #                              elsewhere in JMRI
        #
        # aEvent : Event triggering the change (we don't actually look at the event...)
        #
        def propertyChange(self, aEvent):
            newValue = self.Device.getValue()
            print("***** In propertyChange")
            memories.getMemory("IM5:TVC").setValue("1")

            #
            #  Turn on Control Code indicator light
            codeSendSensor = sensors.getSensor("Code Send Indicator")
            codeSendSensor.setState(ACTIVE)

            #
            #  Start relay clicking sound
            self.relaySend.loop()

            #
            #  Start timer to keep code send light on and relays clicking for a while.
            ccdl = 15  #+  java.util.Random().nextInt(1) # Code transmission delay
            self.sendTimer.setDelay(ccdl * 1000)
            #self.sendTimer.start()

            self.parent.waitMsec(ccdl * 1000)

            self.relaySend.stop()
            codeSendSensor.setState(INACTIVE)

            if (newValue == self.DeviceValue):
                return

            for i in range(len(self.AllowedStates)):
                if (newValue == self.AllowedStates[i]):
                    self.DeviceValue = newValue
                    self.LogFile.write(self.DeviceName + " " +
                                       self.DeviceValue + "\n")
                    self.LogFile.flush()
                    break
            return

        # TrackDevice.setInitialDeviceState - After reading all of the old tracking file we
        #                                     now initialize the actual devices to their last
        #                                     known states and log these states into the new
        #                                     log file.
        #
        def setInitialDeviceState(self, logFile, parent):
            #       Uncomment the following print statement to display the list of devices being tracked.
            print "In setInitDeviceState, name = " + self.DeviceName + " value = " + self.DeviceValue
            self.LogFile = logFile
            ###            self.Device.setState(self.DeviceValue)
            self.Device.addPropertyChangeListener(self)
            #logStateChange2(self.DeviceName, self.DeviceState, False)
            logFile.write(self.DeviceName + " " + self.DeviceValue + "\n")

            signalId = "IS:" + self.DeviceNumber
            # Move the switch lever to the correct position
            sensors.getSensor(signalId + ":CB").setState(INACTIVE)
            if (self.DeviceValue == "N"):
                turnouts.provideTurnout("NT" +
                                        self.DeviceNumber).setState(CLOSED)
                self.parent.waitMsec(100)
                sensors.getSensor(signalId + ":NK").setState(ACTIVE)
                sensors.getSensor(signalId + ":L").setState(ACTIVE)
                sensors.getSensor(signalId + ":RK").setState(INACTIVE)

            else:
                turnouts.provideTurnout("NT" +
                                        self.DeviceNumber).setState(THROWN)
                self.parent.waitMsec(100)
                sensors.getSensor(signalId + ":NK").setState(INACTIVE)
                sensors.getSensor(signalId + ":RK").setState(ACTIVE)
                sensors.getSensor(signalId + ":L").setState(INACTIVE)

        class TimeoutReceiver(java.awt.event.ActionListener):
            cb = None

            def actionPerformed(self, event):
                if (self.cb != None):
                    self.cb(event)
                return

            def setCallBack(self, cbf):
                self.cb = cbf
                return

        class TimeoutReceiver2(java.awt.event.ActionListener):
            cb = None

            def actionPerformed(self, event):
                if (self.cb != None):
                    self.cb(event)
                return

            def setCallBack(self, cbf):
                self.cb = cbf
                return

        def sendTimeoutHandler(self, event):
            print "In send timeout handler"
            self.sendTimer.stop()
            self.relaySend.stop()
            sensors.getSensor("IS16:CCK").setState(INACTIVE)

            smdl = 5  #+  java.util.Random().nextInt(2) # Switch motor delay -

            self.pauseTimer.setInitialDelay(smdl * 100)
            self.pauseTimer.start()
            return

        #
        #  Timeout handler between send & receive.
        #  Turn panel indicators off & start indication code relay clicks.
        def pauseTimeoutHandler(self, event):
            self.pauseTimer.stop()

            sensors.getSensor("Code Receive Indicator").setState(ACTIVE)
            self.relayClicks.loop()
            newName = "IS:" + self.DeviceNumber
            sensors.getSensor(newName + ":NK").setState(INACTIVE)
            sensors.getSensor(newName + ":RK").setState(INACTIVE)
            signals.getSignalHead("VH:T" + str(self.DeviceNumber) +
                                  "N").setAppearance(DARK)
            signals.getSignalHead("VH:T" + str(self.DeviceNumber) +
                                  "R").setAppearance(DARK)

            icdl = 5  #+  java.util.Random().nextInt(3) # Indicator code delay

            self.receiveTimer.setInitialDelay(icdl * 100)
            self.receiveTimer.start()
            return

        #
        #  Final timeout handler....turn off Indication Code relay clicks and change indicator lights on panel.
        def receiveTimeoutHandler(self, event):
            # see which phase we think we are in
            self.receiveTimer.stop()

            sensors.getSensor("Code Receive Indicator").setState(INACTIVE)

            #
            #  Throw the turnout.  We should do this in an earlier timeout handler, but with the CTC panel lights hardwired to the tortoise motor,
            #  the lights change too soon.
            if (memories.getMemory("IM1:FB").getValue() == 0):
                if (self.Device.getValue() == "N"):
                    turnouts.provideTurnout("NT" +
                                            self.DeviceNumber).setState(CLOSED)
                else:
                    turnouts.provideTurnout("NT" +
                                            self.DeviceNumber).setState(THROWN)

            self.finalTimer.setInitialDelay(6000)
            self.finalTimer.start()

            return

        #
        #  Final timeout handler....turn off Indication Code relay clicks and change indicator lights on panel.
        def finalTimeoutHandler(self, event):
            # see which phase we think we are in
            self.finalTimer.stop()

            self.relayClicks.stop()
            sensors.getSensor("Code Receive Indicator").setState(INACTIVE)
            memories.getMemory("IM5:TVC").setValue("0")
            memories.getMemory("IM1:FB").setValue(0)
            return