Merge branch 'master' of ralfj.de:saartuer
authorConstantin Berhard <constantin@exxxtremesys.lu>
Thu, 10 Oct 2013 14:54:04 +0000 (16:54 +0200)
committerConstantin Berhard <constantin@exxxtremesys.lu>
Thu, 10 Oct 2013 14:54:04 +0000 (16:54 +0200)
statemachine.odg
statemachine.py

index 4af232092f4b0147e540dabc7711badf538d7466..a26f172981038c82c3d50b010000de977e4ac51c 100644 (file)
Binary files a/statemachine.odg and b/statemachine.odg differ
index 4b82def39c8859f66539fbadc64f6a75822fe3d3..1d75b2c1c53d2f12433a0d1a88fe73c01e3307be 100644 (file)
@@ -77,9 +77,8 @@ class StateMachine():
                                raise Exception("Unknown command number: %d" % ev)
        
        class StateStart(State):
-               def __init__(self, sm):
-                       State.__init__(self,sm)
                def handle_pins_event(self):
+                       super().handle_pins_event()
                        thepins = self.pins()
                        for pin in thepins:
                                if pin is None:
@@ -90,18 +89,18 @@ class StateMachine():
                                return StateAuf
 
        class StateZu(State):
-               def __init__(self,sm):
-                       State.__init__(self,sm)
                def handle_pins_event(self):
+                       super().handle_pins_event()
                        pins = self.pins()
                        if not pins.door_locked:
                                return StateAboutToOpen(self.state_machine)
                def handle_open_event(self,callback):
+                       # intentionally not calling super() implementation
                        return StateOpening(callback,self.state_machine)
        
        class StateOpening(State):
                def __init__(self,callback,sm):
-                       State.__init__(self,sm)
+                       super().__init__(self,sm)
                        self.callbacks=[callback]
                        # FIXME: can we send "202 processing: Trying to open the door" here? Are the callbacks multi-use?
                        self.tries = 0
@@ -112,14 +111,17 @@ class StateMachine():
                                if cb is not None:
                                        cb(s)
                def handle_pins_event(self):
+                       super().handle_pins_event()
                        pins = self.pins()
                        if not pins.door_locked:
                                self.notify(True)
                                return StateAboutToOpen(self.state_machine)
                def handle_open_event(self,callback):
+                       # intentionally not calling super() implementation
                        # FIXME: 202 notification also here if possible
                        self.callbacks.append(callback)
                def handle_wakeup_event(self):
+                       super().handle_wakeup_event()
                        over = time.time() - self.time_entered
                        nexttry = (self.tries+1) * OPEN_REPEAT_TIMEOUT
                        if over > nexttry:
@@ -132,23 +134,23 @@ class StateMachine():
                                        return StateZu(self.state_machine)
        
        class AbstractStateWhereOpeningIsRedundant(State):
-               def __init__ (self,sm):
-                       State.__init__(sm):
                def handle_open_event(self, callback):
+                       # intentionally not calling super() implementation
+                       # FIXME contradicting original plan where open would be ignored in StateAboutToOpen?
                        callback("299 redundant: Space seems to be already open. Still processing your request tough.")
                        logger.warning("Received OPEN command in StateAboutToOpen. This should not be necessary.")
                        self.actor().act(Actor.CMD_OPEN)
        
        class StateAboutToOpen(AbstractStateWhereOpeningIsRedundant):
-               def __init__(self, sm):
-                       AbstractStateWhereOpeningIsRedundant.__init__(sm)
                def handle_pins_event(self):
+                       super().handle_pins_event()
                        pins = self.pins()
                        if pins.door_locked:
                                return StateZu(self.state_machine)
                        elif pins.space_active:
                                return StateAuf(self.state_machine)
                def handle_wakeup_event(self):
+                       super().handle_wakeup_event()
                        now = time.time()
                        lasttime = self.last_wakeup - self.time_entered
                        thistime = now - self.time_entered
@@ -159,9 +161,10 @@ class StateMachine():
        
        class StateAuf(AbstractStateWhereOpeningIsRedundant):
                def __init__(self,sm):
-                       AbstractStateWhereOpeningIsRedundant.__init__(sm)
+                       super().__init__(sm)
                        self.last_buzzed = None
                def handle_pins_event(self):
+                       super().handle_pins_event()
                        pins = self.pins()
                        if pins.bell_ringing:
                                now = time.time()
@@ -231,10 +234,10 @@ class StateMachine():
        def _callback(self, cmd, arg=None):
                # update pins
                if cmd == StateMachine.CMD_PINS:
-                       self.old_pins = self.pins
                        self.pins = arg
                # handle stuff
                newstate = self.current_state.handle_event(cmd,arg) # returns None or an instance of the new state
+               self.old_pins = self.pins # FIXME not used?
                while newstate is not None:
                        logger.info("StateMachine: new state = %s" % newstate.__class__.__name__)
                        self.current_state = newstate