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 . 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")
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user