feat(io): Add GetByName and GetByPosition methods to DeviceManager
Introduced `GetByName` and `GetByPosition` methods in the D-Bus interface and implementation for retrieving device object paths by name or position. Updated `GetAllDevices` return type to `ao`. Signed-off-by: Sven Sager <s.sager@kunbus.com>
This commit is contained in:
@@ -3,6 +3,8 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
"""D-Bus interfaces for IOs."""
|
"""D-Bus interfaces for IOs."""
|
||||||
|
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
from dbus import SystemBus, SessionBus
|
from dbus import SystemBus, SessionBus
|
||||||
from pydbus.generic import signal
|
from pydbus.generic import signal
|
||||||
from revpimodio2 import RevPiModIO
|
from revpimodio2 import RevPiModIO
|
||||||
@@ -16,10 +18,14 @@ class InterfaceDeviceManager:
|
|||||||
<node>
|
<node>
|
||||||
<interface name="com.revolutionpi.ios1.DeviceManager">
|
<interface name="com.revolutionpi.ios1.DeviceManager">
|
||||||
<method name="GetAllDevices">
|
<method name="GetAllDevices">
|
||||||
<arg type="as" direction="out"/>
|
<arg type="ao" direction="out"/>
|
||||||
</method>
|
</method>
|
||||||
<method name="Get">
|
<method name="GetByName">
|
||||||
<arg name="device_name" type="s" direction="in"/>
|
<arg name="device-name" type="s" direction="in"/>
|
||||||
|
<arg name="object-path" type="o" direction="out"/>
|
||||||
|
</method>
|
||||||
|
<method name="GetByPosition">
|
||||||
|
<arg name="device-position" type="n" direction="in"/>
|
||||||
<arg name="object-path" type="o" direction="out"/>
|
<arg name="object-path" type="o" direction="out"/>
|
||||||
</method>
|
</method>
|
||||||
</interface>
|
</interface>
|
||||||
@@ -41,7 +47,13 @@ class InterfaceDeviceManager:
|
|||||||
def GetAllDevices(self) -> list[str]:
|
def GetAllDevices(self) -> list[str]:
|
||||||
return self.lst_device
|
return self.lst_device
|
||||||
|
|
||||||
def Get(self, device_position) -> str:
|
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:
|
if device_position in self.modio.device:
|
||||||
return self._get_device_path(device_position)
|
return self._get_device_path(device_position)
|
||||||
|
|
||||||
@@ -68,7 +80,7 @@ class InterfaceDevice:
|
|||||||
interface_name = "com.revolutionpi.ios1.Device"
|
interface_name = "com.revolutionpi.ios1.Device"
|
||||||
PropertiesChanged = signal()
|
PropertiesChanged = signal()
|
||||||
|
|
||||||
def __init__(self, dbus: SystemBus or SessionBus, device: Device):
|
def __init__(self, dbus: Union[SystemBus, SessionBus], device: Device):
|
||||||
self.dbus = dbus
|
self.dbus = dbus
|
||||||
self.device = device
|
self.device = device
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user