Module lib.tools.watchdog
Watchdog class
Expand source code
# Distributed under Pycameresp License
# Copyright (c) 2023 Remi BERTHOLET
""" Watchdog class """
import sys
try:
import machine
except:
pass
LONG_WATCH_DOG=15*60*1000
SHORT_WATCH_DOG=5*60*1000
class WatchDog:
""" Watch dog timer """
watchdog = None
current = 0
max_duration = 0
timer = None
@staticmethod
def start(timeout=LONG_WATCH_DOG):
""" Start watch dog """
WatchDog.max_duration = timeout
WatchDog.current = 0
# With pico pi RP2040 the max is 8.3s
if sys.platform == "rp2" and timeout > 8388:
WatchDog.timer = machine.Timer(period=5000, mode=machine.Timer.PERIODIC, callback=WatchDog.extended_duration)
WatchDog.watchdog = machine.WDT(0, 6000)
else:
WatchDog.watchdog = machine.WDT(0, timeout)
@staticmethod
def extended_duration(timer):
""" Extends the tiny duration of the RP2 watchdog """
if WatchDog.current < WatchDog.max_duration:
WatchDog.current += 5000
WatchDog.watchdog.feed()
@staticmethod
def feed():
""" Feed the WDT """
if WatchDog.watchdog:
WatchDog.current = 0
WatchDog.watchdog.feed()
Classes
class WatchDog-
Watch dog timer
Expand source code
class WatchDog: """ Watch dog timer """ watchdog = None current = 0 max_duration = 0 timer = None @staticmethod def start(timeout=LONG_WATCH_DOG): """ Start watch dog """ WatchDog.max_duration = timeout WatchDog.current = 0 # With pico pi RP2040 the max is 8.3s if sys.platform == "rp2" and timeout > 8388: WatchDog.timer = machine.Timer(period=5000, mode=machine.Timer.PERIODIC, callback=WatchDog.extended_duration) WatchDog.watchdog = machine.WDT(0, 6000) else: WatchDog.watchdog = machine.WDT(0, timeout) @staticmethod def extended_duration(timer): """ Extends the tiny duration of the RP2 watchdog """ if WatchDog.current < WatchDog.max_duration: WatchDog.current += 5000 WatchDog.watchdog.feed() @staticmethod def feed(): """ Feed the WDT """ if WatchDog.watchdog: WatchDog.current = 0 WatchDog.watchdog.feed()Class variables
var currentvar max_durationvar timervar watchdog
Static methods
def extended_duration(timer)-
Extends the tiny duration of the RP2 watchdog
Expand source code
@staticmethod def extended_duration(timer): """ Extends the tiny duration of the RP2 watchdog """ if WatchDog.current < WatchDog.max_duration: WatchDog.current += 5000 WatchDog.watchdog.feed() def feed()-
Feed the WDT
Expand source code
@staticmethod def feed(): """ Feed the WDT """ if WatchDog.watchdog: WatchDog.current = 0 WatchDog.watchdog.feed() def start(timeout=900000)-
Start watch dog
Expand source code
@staticmethod def start(timeout=LONG_WATCH_DOG): """ Start watch dog """ WatchDog.max_duration = timeout WatchDog.current = 0 # With pico pi RP2040 the max is 8.3s if sys.platform == "rp2" and timeout > 8388: WatchDog.timer = machine.Timer(period=5000, mode=machine.Timer.PERIODIC, callback=WatchDog.extended_duration) WatchDog.watchdog = machine.WDT(0, 6000) else: WatchDog.watchdog = machine.WDT(0, timeout)