Commit fce36f5a authored by Constantin's avatar Constantin
Browse files

Fallback mode works now (software side)

parent b4ca24f8
...@@ -23,7 +23,6 @@ CLOSE_REPEAT_TIMEOUT = 7 ...@@ -23,7 +23,6 @@ CLOSE_REPEAT_TIMEOUT = 7
CLOSE_REPEAT_NUMBER = 3 CLOSE_REPEAT_NUMBER = 3
# StateFallback constants # StateFallback constants
FALLBACK_BLINK_SPEED = 0.5 # seconds
FALLBACK_LEAVE_DELAY_LOCK = 5 # seconds FALLBACK_LEAVE_DELAY_LOCK = 5 # seconds
# StateAboutToOpen constants # StateAboutToOpen constants
...@@ -180,14 +179,13 @@ class StateMachine(): ...@@ -180,14 +179,13 @@ class StateMachine():
def handle_wakeup_event(self): def handle_wakeup_event(self):
# blink red LED # blink red LED
now = time.time() now = time.time()
if now - self._last_blink_time < FALLBACK_BLINK_SPEED: if self._red_state:
if self._red_state: self.actor().act(Actor.CMD_RED_OFF)
self.actor().act(Actor.CMD_RED_OFF) self._red_state = False
self._red_state = False else:
else: self.actor().act(Actor.CMD_RED_ON)
self.actor().act(Actor.CMD_RED_ON) self._red_state = True
self._red_state = True self._last_blink_time = now
self._last_blink_time = now
def handle_cmd_unlock_event(self,arg): def handle_cmd_unlock_event(self,arg):
if arg is not None: if arg is not None:
arg("298 Fallback Okay: Trying to unlock the door. The System is in fallback mode, success information is not available.") arg("298 Fallback Okay: Trying to unlock the door. The System is in fallback mode, success information is not available.")
......
from libtuer import ThreadRepeater from libtuer import ThreadRepeater
from collections import namedtuple
from threading import Lock from threading import Lock
SLEEP_TIME = 0.5 SLEEP_TIME = 0.5
ToBeWoken = namedtuple('ToBeWoken','f period time_since_call one_shot') class ToBeWoken:
'''a simple struct storing information about a to-be-woken function'''
def __init__(self, f, period, one_shot):
self.f = f
self.period = period
self.time_since_call = 0
self.one_shot = one_shot
class Waker(): class Waker():
def __init__(self): def __init__(self):
...@@ -16,7 +21,7 @@ class Waker(): ...@@ -16,7 +21,7 @@ class Waker():
'''Register a function which is called approximately every <time> seconds (or just once, if one_shot is True). f should return quickly, or it will delay the waker!''' '''Register a function which is called approximately every <time> seconds (or just once, if one_shot is True). f should return quickly, or it will delay the waker!'''
time = max(time//SLEEP_TIME, 1) time = max(time//SLEEP_TIME, 1)
with self._tobewokens_lock: with self._tobewokens_lock:
self._tobewokens.append(ToBeWoken(f, time, 0, one_shot)) self._tobewokens.append(ToBeWoken(f, time, one_shot))
def _wake(self): def _wake(self):
with self._tobewokens_lock: with self._tobewokens_lock:
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment