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:
Sven Sager
2026-03-17 09:02:40 +01:00
parent fbfda04d7c
commit 1415055483
2 changed files with 20 additions and 7 deletions

View File

@@ -14,6 +14,7 @@ from gi.repository import Gio
from . import proginit as pi from . import proginit as pi
from .dbus_ios1 import BusProviderIos1 from .dbus_ios1 import BusProviderIos1
from .dbus_middleware1 import BusProviderMiddleware1 from .dbus_middleware1 import BusProviderMiddleware1
from .dbus_middleware1.process_image.process_image_helper import ResetDriverWatchdog
log = getLogger(__name__) log = getLogger(__name__)
@@ -32,11 +33,13 @@ class MiddlewareDaemon:
self._cycle_time = 1.0 self._cycle_time = 1.0
self.do_cycle = Event() self.do_cycle = Event()
self._force_dbus_restart = False
self._reconfigure = False self._reconfigure = False
self._running = True self._running = True
self.bus_provider = None self.bus_provider = None
self.bus_provider_selected = bus_provider self.bus_provider_selected = bus_provider
self.wd_reset = ResetDriverWatchdog("")
self._configure() self._configure()
log.debug("leave MiddlewareDaemon.__init__") log.debug("leave MiddlewareDaemon.__init__")
@@ -46,9 +49,17 @@ class MiddlewareDaemon:
log.debug("enter MiddlewareDaemon._configure") log.debug("enter MiddlewareDaemon._configure")
pi.reload_conf() pi.reload_conf()
if self._force_dbus_restart:
self.dbus_stop()
self._force_dbus_restart = False
if pi.pargs.procimg != self.wd_reset.procimg: if pi.pargs.procimg != self.wd_reset.procimg:
self.dbus_stop() 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") log.debug("leave MiddlewareDaemon._configure")
@staticmethod @staticmethod
@@ -62,6 +73,15 @@ class MiddlewareDaemon:
return environ.get(environ_name, bus_address) 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): def dbus_start(self):
log.debug("enter MiddlewareDaemon.dbus_start") log.debug("enter MiddlewareDaemon.dbus_start")

View File

@@ -96,13 +96,6 @@ class BusProviderIos1(Thread):
except Exception as e: except Exception as e:
log.error(f"can not publish dbus {REVPI_DBUS_NAME}: {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: try:
self._loop.run() self._loop.run()
except Exception as e: except Exception as e: