feat: Enhance MiddlewareDaemon with driver reset handling
Refactored `MiddlewareDaemon` to integrate `ResetDriverWatchdog` for monitoring `procimg` changes and trigger D-Bus restarts when necessary. Removed debus signal `NotifyDriverReset` handling from `BusProviderIos1`. Signed-off-by: Sven Sager <s.sager@kunbus.com>
This commit is contained in:
@@ -14,6 +14,7 @@ from gi.repository import Gio
|
||||
from . import proginit as pi
|
||||
from .dbus_ios1 import BusProviderIos1
|
||||
from .dbus_middleware1 import BusProviderMiddleware1
|
||||
from .dbus_middleware1.process_image.process_image_helper import ResetDriverWatchdog
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
@@ -32,11 +33,13 @@ class MiddlewareDaemon:
|
||||
|
||||
self._cycle_time = 1.0
|
||||
self.do_cycle = Event()
|
||||
self._force_dbus_restart = False
|
||||
self._reconfigure = False
|
||||
self._running = True
|
||||
|
||||
self.bus_provider = None
|
||||
self.bus_provider_selected = bus_provider
|
||||
self.wd_reset = ResetDriverWatchdog("")
|
||||
|
||||
self._configure()
|
||||
log.debug("leave MiddlewareDaemon.__init__")
|
||||
@@ -46,9 +49,17 @@ class MiddlewareDaemon:
|
||||
log.debug("enter MiddlewareDaemon._configure")
|
||||
pi.reload_conf()
|
||||
|
||||
if self._force_dbus_restart:
|
||||
self.dbus_stop()
|
||||
self._force_dbus_restart = False
|
||||
|
||||
if pi.pargs.procimg != self.wd_reset.procimg:
|
||||
self.dbus_stop()
|
||||
|
||||
self.wd_reset.stop()
|
||||
self.wd_reset = ResetDriverWatchdog(pi.pargs.procimg)
|
||||
self.wd_reset.register_call(self._reset_driver_callack)
|
||||
|
||||
log.debug("leave MiddlewareDaemon._configure")
|
||||
|
||||
@staticmethod
|
||||
@@ -62,6 +73,15 @@ class MiddlewareDaemon:
|
||||
|
||||
return environ.get(environ_name, bus_address)
|
||||
|
||||
def _reset_driver_callack(self, *args) -> None:
|
||||
log.debug("enter MiddlewareDaemon._reset_driver_callack")
|
||||
|
||||
if self.bus_provider_selected is BusProvider.ios:
|
||||
self._force_dbus_restart = True
|
||||
self.reload_config()
|
||||
|
||||
log.debug("leave MiddlewareDaemon._reset_driver_callack")
|
||||
|
||||
def dbus_start(self):
|
||||
log.debug("enter MiddlewareDaemon.dbus_start")
|
||||
|
||||
|
||||
@@ -96,13 +96,6 @@ class BusProviderIos1(Thread):
|
||||
except Exception as e:
|
||||
log.error(f"can not publish dbus {REVPI_DBUS_NAME}: {e}")
|
||||
|
||||
# Subscribe to NotifyDriverReset on middleware1 dbus
|
||||
iface_pi_control = bus.get(
|
||||
"com.revolutionpi.middleware1",
|
||||
"/com/revolutionpi/middleware1",
|
||||
)["com.revolutionpi.middleware1.PiControl"]
|
||||
iface_pi_control.onNotifyDriverReset = self.stop
|
||||
|
||||
try:
|
||||
self._loop.run()
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user