diff --git a/src/revpi_middleware/daemon.py b/src/revpi_middleware/daemon.py index f7ff97b..04634b7 100644 --- a/src/revpi_middleware/daemon.py +++ b/src/revpi_middleware/daemon.py @@ -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") diff --git a/src/revpi_middleware/dbus_ios1/bus_provider_ios1.py b/src/revpi_middleware/dbus_ios1/bus_provider_ios1.py index 707fba4..8146e9a 100644 --- a/src/revpi_middleware/dbus_ios1/bus_provider_ios1.py +++ b/src/revpi_middleware/dbus_ios1/bus_provider_ios1.py @@ -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: