Call functions with watchdogs.py.

Call psstop after "reset driver"
This commit is contained in:
2020-07-25 13:26:33 +02:00
parent 7f00725036
commit 8f0249673a
2 changed files with 19 additions and 0 deletions

View File

@@ -791,6 +791,7 @@ class RevPiPyLoad():
# Watchdog to detect the reset_driver event # Watchdog to detect the reset_driver event
pictory_reset_driver = ResetDriverWatchdog() pictory_reset_driver = ResetDriverWatchdog()
pictory_reset_driver.register_call(self.xml_psstop)
# mainloop # mainloop
while not self._exit: while not self._exit:
@@ -1369,6 +1370,7 @@ class RevPiPyLoad():
@return True, wenn stop erfolgreich""" @return True, wenn stop erfolgreich"""
if self.xml_ps is not None: if self.xml_ps is not None:
self.xml_ps.stop() self.xml_ps.stop()
self.xml_ps.loadrevpimodio()
return True return True
else: else:
return False return False

View File

@@ -178,6 +178,7 @@ class ResetDriverWatchdog(Thread):
def __init__(self): def __init__(self):
super(ResetDriverWatchdog, self).__init__() super(ResetDriverWatchdog, self).__init__()
self.daemon = True self.daemon = True
self._calls = []
self._exit = False self._exit = False
self._fh = None self._fh = None
self.not_implemented = False self.not_implemented = False
@@ -213,6 +214,8 @@ class ResetDriverWatchdog(Thread):
if rc == 0 and byte_buff[0] == 1: if rc == 0 and byte_buff[0] == 1:
self._triggered = True self._triggered = True
pi.logger.debug("piCtory reset_driver detected") pi.logger.debug("piCtory reset_driver detected")
for func in self._calls:
func()
except Exception: except Exception:
self.not_implemented = True self.not_implemented = True
os.close(self._fh) os.close(self._fh)
@@ -222,6 +225,13 @@ class ResetDriverWatchdog(Thread):
pi.logger.debug("leave ResetDriverWatchdog.run()") pi.logger.debug("leave ResetDriverWatchdog.run()")
def register_call(self, function):
"""Register a function, if watchdog triggers."""
if not callable(function):
return ValueError("Function is not callable.")
if function not in self._calls:
self._calls.append(function)
def stop(self): def stop(self):
"""Stop watchdog for piCtory reset_driver.""" """Stop watchdog for piCtory reset_driver."""
pi.logger.debug("enter ResetDriverWatchdog.stop()") pi.logger.debug("enter ResetDriverWatchdog.stop()")
@@ -233,6 +243,13 @@ class ResetDriverWatchdog(Thread):
pi.logger.debug("leave ResetDriverWatchdog.stop()") pi.logger.debug("leave ResetDriverWatchdog.stop()")
def unregister_call(self, function=None):
"""Remove a function call on watchdog trigger."""
if function is None:
self._calls.clear()
elif function in self._calls:
self._calls.remove(function)
@property @property
def triggered(self): def triggered(self):
"""Will return True one time after watchdog was triggered.""" """Will return True one time after watchdog was triggered."""