feat(io): Add new IO properties and corresponding methods

Added `address`, `byteorder`, and `length` properties to D-Bus
interfaces for IOs. Implemented corresponding property methods in
`ios1_helper.py`.

Signed-off-by: Sven Sager <s.sager@kunbus.com>
This commit is contained in:
Sven Sager
2026-02-02 15:26:50 +01:00
parent 4dd4c814b5
commit afdae78336
2 changed files with 54 additions and 16 deletions

View File

@@ -5,6 +5,7 @@
from gi.overrides.GLib import Variant from gi.overrides.GLib import Variant
from pydbus.generic import signal from pydbus.generic import signal
from revpimodio2 import RevPiModIO, Cycletools from revpimodio2 import RevPiModIO, Cycletools
from revpimodio2.io import IntIO
from .ios1_helper import REVPI_DBUS_BASE_PATH, DbusInterfaceIo from .ios1_helper import REVPI_DBUS_BASE_PATH, DbusInterfaceIo
@@ -87,7 +88,10 @@ class InterfaceInpBool(DbusInterfaceIo):
""" """
<node> <node>
<interface name="com.revolutionpi.ios1.InpBool"> <interface name="com.revolutionpi.ios1.InpBool">
<property name="address" type="i" access="read"/>
<property name="bmk" type="s" access="read"/> <property name="bmk" type="s" access="read"/>
<property name="defaultvalue" type="b" access="read"/>
<property name="length" type="i" access="read"/>
<property name="name" type="s" access="read"/> <property name="name" type="s" access="read"/>
<property name="value" type="b" access="read"/> <property name="value" type="b" access="read"/>
</interface> </interface>
@@ -96,14 +100,6 @@ class InterfaceInpBool(DbusInterfaceIo):
interface_name = "com.revolutionpi.ios1.InpBool" interface_name = "com.revolutionpi.ios1.InpBool"
@property
def bmk(self) -> str:
return self.io.bmk
@property
def name(self) -> str:
return self.io.name
@property @property
def value(self) -> bool: def value(self) -> bool:
return self.io.value return self.io.value
@@ -113,7 +109,10 @@ class InterfaceOutBool(InterfaceInpBool):
""" """
<node> <node>
<interface name="com.revolutionpi.ios1.OutBool"> <interface name="com.revolutionpi.ios1.OutBool">
<property name="address" type="i" access="read"/>
<property name="bmk" type="s" access="read"/> <property name="bmk" type="s" access="read"/>
<property name="defaultvalue" type="b" access="read"/>
<property name="length" type="i" access="read"/>
<property name="name" type="s" access="read"/> <property name="name" type="s" access="read"/>
<property name="value" type="b" access="readwrite"/> <property name="value" type="b" access="readwrite"/>
</interface> </interface>
@@ -127,7 +126,7 @@ class InterfaceOutBool(InterfaceInpBool):
return super().value return super().value
@value.setter @value.setter
def value(self, value: bool): def value(self, value: bool) -> None:
self.io.value = value self.io.value = value
self.io._parentdevice._modio.writeprocimg() self.io._parentdevice._modio.writeprocimg()
@@ -136,25 +135,39 @@ class InterfaceInpInt(DbusInterfaceIo):
""" """
<node> <node>
<interface name="com.revolutionpi.ios1.InpInt"> <interface name="com.revolutionpi.ios1.InpInt">
<property name="address" type="i" access="read"/>
<property name="bmk" type="s" access="read"/> <property name="bmk" type="s" access="read"/>
<property name="byteorder" type="s" access="readwrite"/>
<property name="defaultvalue" type="i" access="read"/>
<property name="length" type="i" access="read"/>
<property name="name" type="s" access="read"/> <property name="name" type="s" access="read"/>
<property name="signed" type="b" access="readwrite"/>
<property name="value" type="i" access="read"/> <property name="value" type="i" access="read"/>
</interface> </interface>
</node> </node>
""" """
interface_name = "com.revolutionpi.ios1.InpInt" interface_name = "com.revolutionpi.ios1.InpInt"
io = IntIO # type: IntIO
@property @property
def bmk(self) -> str: def byteorder(self) -> str:
return self.io.bmk return self.io.byteorder
@byteorder.setter
def byteorder(self, value: str) -> None:
self.io.byteorder = value
@property @property
def name(self) -> str: def signed(self) -> bool:
return self.io.name return self.io.signed
@signed.setter
def signed(self, value: bool) -> None:
self.io.signed = value
@property @property
def value(self) -> bool: def value(self) -> int:
return self.io.value return self.io.value
@@ -162,8 +175,13 @@ class InterfaceOutInt(InterfaceInpInt):
""" """
<node> <node>
<interface name="com.revolutionpi.ios1.OutInt"> <interface name="com.revolutionpi.ios1.OutInt">
<property name="address" type="i" access="read"/>
<property name="bmk" type="s" access="read"/> <property name="bmk" type="s" access="read"/>
<property name="byteorder" type="s" access="readwrite"/>
<property name="defaultvalue" type="i" access="read"/>
<property name="length" type="i" access="read"/>
<property name="name" type="s" access="read"/> <property name="name" type="s" access="read"/>
<property name="signed" type="b" access="readwrite"/>
<property name="value" type="i" access="readwrite"/> <property name="value" type="i" access="readwrite"/>
</interface> </interface>
</node> </node>
@@ -172,10 +190,10 @@ class InterfaceOutInt(InterfaceInpInt):
interface_name = "com.revolutionpi.ios1.OutInt" interface_name = "com.revolutionpi.ios1.OutInt"
@property @property
def value(self) -> bool: def value(self) -> int:
return super().value return super().value
@value.setter @value.setter
def value(self, value: bool): def value(self, value: int):
self.io.value = value self.io.value = value
self.io._parentdevice._modio.writeprocimg() self.io._parentdevice._modio.writeprocimg()

View File

@@ -35,3 +35,23 @@ class DbusInterfaceIo:
{"value": int(self.io.value)}, {"value": int(self.io.value)},
[], [],
) )
@property
def address(self):
return self.io.address
@property
def bmk(self) -> str:
return self.io.bmk
@property
def defaultvalue(self):
return self.io.defaultvalue
@property
def length(self):
return self.io.length
@property
def name(self) -> str:
return self.io.name