From b68f1ffb369a094f5eed19d9c88a76a8d879bf50 Mon Sep 17 00:00:00 2001 From: Sven Sager Date: Fri, 30 Jan 2026 12:29:08 +0100 Subject: [PATCH] feat(io): Add InterfaceDeviceManager to D-Bus bus provider Integrated the InterfaceDeviceManager class into the com.revolutionpi .ios1 D-Bus bus provider. This addition enables managing device paths and querying all devices via D-Bus. Signed-off-by: Sven Sager --- src/revpi_middleware/ios1/bus_provider_io.py | 4 ++ .../ios1/interface_devices.py | 46 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/revpi_middleware/ios1/interface_devices.py diff --git a/src/revpi_middleware/ios1/bus_provider_io.py b/src/revpi_middleware/ios1/bus_provider_io.py index 27eb20d..a4f3bbb 100644 --- a/src/revpi_middleware/ios1/bus_provider_io.py +++ b/src/revpi_middleware/ios1/bus_provider_io.py @@ -11,6 +11,9 @@ from pydbus import SessionBus, SystemBus from revpimodio2 import Cycletools from . import REVPI_DBUS_NAME +from .interface_devices import ( + InterfaceDeviceManager, +) from .interface_ios import ( InterfaceIoManager, InterfaceInpBool, @@ -75,6 +78,7 @@ class BusProviderIo(Thread): try: self._bus.publish( REVPI_DBUS_NAME, + InterfaceDeviceManager(self._modio), InterfaceIoManager(self._modio, self._dc_io_interfaces), *lst_interfaces, ) diff --git a/src/revpi_middleware/ios1/interface_devices.py b/src/revpi_middleware/ios1/interface_devices.py new file mode 100644 index 0000000..3095c16 --- /dev/null +++ b/src/revpi_middleware/ios1/interface_devices.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: 2025 KUNBUS GmbH +# SPDX-License-Identifier: GPL-2.0-or-later +"""D-Bus interfaces for IOs.""" +from gi.overrides.GLib import Variant +from pydbus.generic import signal +from revpimodio2 import RevPiModIO, Cycletools + +from .ios1_helper import REVPI_DBUS_BASE_PATH, DbusInterfaceIo + + +class InterfaceDeviceManager: + """ + + + + + + + + + + + + """ + + interface_name = "com.revolutionpi.ios1.DeviceManager" + + def __init__(self, modio: RevPiModIO): + self.modio = modio + + self.lst_device = [] + for dev in self.modio.device: + self.lst_device.append(self._get_device_path(dev.position)) + + def _get_device_path(self, position: int) -> str: + return f"{REVPI_DBUS_BASE_PATH}/device/{position}" + + def GetAllDevices(self) -> list[str]: + return self.lst_device + + def Get(self, device_position) -> str: + if device_position in self.modio.device: + return self._get_device_path(device_position) + + raise KeyError(f"No device on position '{device_position}' found.")