From 1842bbd2f53b37b2e6e97be0f4404634951a86c8 Mon Sep 17 00:00:00 2001 From: Sven Sager Date: Thu, 5 Feb 2026 11:56:51 +0100 Subject: [PATCH] feat(io): Emit property change signals for byteorder and signedness Added `PropertiesChanged` signals for `byteorder` and `signed` property updates. Updated D-Bus interface annotations to specify change signal behavior for properties. Simplified `emit_io_change` implementation. Signed-off-by: Sven Sager --- src/revpi_middleware/ios1/interface_ios.py | 111 +++++++++++++++------ 1 file changed, 82 insertions(+), 29 deletions(-) diff --git a/src/revpi_middleware/ios1/interface_ios.py b/src/revpi_middleware/ios1/interface_ios.py index f30fefe..2752a35 100644 --- a/src/revpi_middleware/ios1/interface_ios.py +++ b/src/revpi_middleware/ios1/interface_ios.py @@ -24,15 +24,33 @@ class InterfaceInput: - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + """ @@ -53,17 +71,16 @@ class InterfaceInput: self.variant_type = "ay" def emit_io_change(self): - if self.interface_name: - self.PropertiesChanged( - self.interface_name, - { - "value": Variant( - self.variant_type, - self.io.get_value() if self._raw else self.io.value, - ), - }, - [], - ) + self.PropertiesChanged( + self.interface_name, + { + "value": Variant( + self.variant_type, + self.io.get_value() if self._raw else self.io.value, + ), + }, + [], + ) def SetByteorder(self, order: str) -> None: self.byteorder = order @@ -93,6 +110,15 @@ class InterfaceInput: self.io._set_byteorder(value) self.variant_type = get_variant_type(self.io) + # Changing the byteorder can change the value, but we do NOT send a signal for that + # because the real value of the process image was not changed. But we inform the client + # about the changed byteorder property. + self.PropertiesChanged( + self.interface_name, + {}, + ["byteorder"], + ) + @property def defaultvalue(self) -> Variant: return Variant( @@ -121,6 +147,15 @@ class InterfaceInput: self.io._set_signed(value) self.variant_type = get_variant_type(self.io) + # Changing the signedness can change the value, but we do NOT send a signal for that + # because the real value of the process image was not changed. But we inform the client + # about the changed signedness property. + self.PropertiesChanged( + self.interface_name, + {}, + ["signed"], + ) + @property def value(self) -> Variant: if not self.io._parentdevice._selfupdate: @@ -145,15 +180,33 @@ class InterfaceOutput(InterfaceInput): - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + """