diff --git a/src/revpi_middleware/ios1/bus_provider_io.py b/src/revpi_middleware/ios1/bus_provider_io.py
index e8523f8..f078305 100644
--- a/src/revpi_middleware/ios1/bus_provider_io.py
+++ b/src/revpi_middleware/ios1/bus_provider_io.py
@@ -37,6 +37,7 @@ class BusProviderIo(Thread):
self._bus = SystemBus() if use_system_bus else SessionBus()
self._loop = GLib.MainLoop()
+ self._lst_device_interfaces = []
self._lst_io_interfaces = []
self._modio = revpimodio2.RevPiModIO(
procimg=picontrol_device,
@@ -50,8 +51,14 @@ class BusProviderIo(Thread):
def run(self):
log.debug("enter BusProviderIo.run")
+ self._lst_device_interfaces.clear()
self._lst_io_interfaces.clear()
+ for device in self._modio.device:
+ self._lst_device_interfaces.append(
+ InterfaceDevice(self._bus, device),
+ )
+
for io in self._modio.io:
interface = None
try:
@@ -68,18 +75,18 @@ class BusProviderIo(Thread):
if interface is not None:
self._lst_io_interfaces.append(interface)
- lst_interfaces = [
- (interface.object_path, interface) for interface in self._lst_io_interfaces
+ lst_interfaces = []
+ lst_interfaces += [
+ (interface.object_path, interface) for interface in self._lst_device_interfaces
]
lst_interfaces += [
- (f"device/{device.position}", InterfaceDevice(self._bus, device))
- for device in self._modio.device
+ (interface.object_path, interface) for interface in self._lst_io_interfaces
]
try:
self._bus.publish(
REVPI_DBUS_NAME,
- InterfaceDeviceManager(self._modio),
- InterfaceIoManager(self._modio, self._lst_io_interfaces),
+ InterfaceDeviceManager(self._lst_device_interfaces),
+ InterfaceIoManager(self._lst_io_interfaces, self._modio),
*lst_interfaces,
)
except Exception as e:
diff --git a/src/revpi_middleware/ios1/interface_devices.py b/src/revpi_middleware/ios1/interface_devices.py
index de4c756..569cb1f 100644
--- a/src/revpi_middleware/ios1/interface_devices.py
+++ b/src/revpi_middleware/ios1/interface_devices.py
@@ -7,57 +7,9 @@ from typing import Union
from dbus import SystemBus, SessionBus
from pydbus.generic import signal
-from revpimodio2 import RevPiModIO
from revpimodio2.device import Device
-from .ios1_helper import REVPI_DBUS_BASE_PATH, get_io_object_path
-
-
-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 GetByName(self, device_name) -> str:
- if device_name in self.modio.device:
- return self._get_device_path(self.modio.device[device_name].position)
-
- raise KeyError(f"No device with name '{device_name}' found.")
-
- def GetByPosition(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.")
+from .ios1_helper import get_io_object_path, get_device_object_path
class InterfaceDevice:
@@ -83,6 +35,7 @@ class InterfaceDevice:
def __init__(self, dbus: Union[SystemBus, SessionBus], device: Device):
self.dbus = dbus
self.device = device
+ self.object_path = get_device_object_path(device.position)
@property
def bmk(self) -> str:
@@ -119,3 +72,48 @@ class InterfaceDevice:
@property
def type(self):
return self.device.type
+
+
+class InterfaceDeviceManager:
+ """
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ """
+
+ interface_name = "com.revolutionpi.ios1.DeviceManager"
+
+ def __init__(
+ self,
+ device_interfaces: list[InterfaceDevice],
+ ):
+ self._lst_device_interfaces = device_interfaces
+
+ def GetAllDevices(self) -> list[str]:
+ return [interface.object_path for interface in self._lst_device_interfaces]
+
+ def GetByName(self, device_name) -> str:
+ for interface in self._lst_device_interfaces:
+ if interface.device.name == device_name:
+ return interface.object_path
+
+ raise KeyError(f"No device with name '{device_name}' found.")
+
+ def GetByPosition(self, device_position) -> str:
+ for interface in self._lst_device_interfaces:
+ if interface.device.position == device_position:
+ return interface.object_path
+
+ raise KeyError(f"No device on position '{device_position}' found.")
diff --git a/src/revpi_middleware/ios1/interface_ios.py b/src/revpi_middleware/ios1/interface_ios.py
index 2329572..3b1efb1 100644
--- a/src/revpi_middleware/ios1/interface_ios.py
+++ b/src/revpi_middleware/ios1/interface_ios.py
@@ -261,8 +261,8 @@ class InterfaceIoManager:
def __init__(
self,
- modio: RevPiModIO,
io_interfaces: List[Union[InterfaceInput, InterfaceOutput]],
+ modio: RevPiModIO,
):
self._dc_io_interfaces = {interface.name: interface for interface in io_interfaces}
self.modio = modio
diff --git a/src/revpi_middleware/ios1/ios1_helper.py b/src/revpi_middleware/ios1/ios1_helper.py
index f0e0b09..491f5b7 100644
--- a/src/revpi_middleware/ios1/ios1_helper.py
+++ b/src/revpi_middleware/ios1/ios1_helper.py
@@ -17,6 +17,10 @@ def get_io_object_path(io_name: str) -> str:
return f"{REVPI_DBUS_BASE_PATH}/io/{io_name}"
+def get_device_object_path(device_name: str) -> str:
+ return f"{REVPI_DBUS_BASE_PATH}/device/{device_name}"
+
+
def get_variant_type(io: IOBase) -> str:
value_type = type(io.value)
byte_length = io.length