From 75cc4b24f4e3941b773ef80454ef890726d549f1 Mon Sep 17 00:00:00 2001 From: appel_c Date: Fri, 27 Mar 2026 15:10:05 +0100 Subject: [PATCH] fix(pseudo-motor): Add subscription callbacks to readback signal, and SUB_READBACK event from positioners --- .../base_classes/psi_pseudo_motor_base.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ophyd_devices/interfaces/base_classes/psi_pseudo_motor_base.py b/ophyd_devices/interfaces/base_classes/psi_pseudo_motor_base.py index 52fc3f7..b064ad2 100644 --- a/ophyd_devices/interfaces/base_classes/psi_pseudo_motor_base.py +++ b/ophyd_devices/interfaces/base_classes/psi_pseudo_motor_base.py @@ -98,8 +98,23 @@ class PSIPseudoMotorBase(ABC, PSIDeviceBase, PositionerBase): move_signature = inspect.signature(positioner.move) if "wait" in move_signature.parameters: self._positioner_move_kwargs[name] = {"wait": False} + + # Subscribe callback to updates of the readback signals + self.readback.subscribe(self._run_readback_signal_subs, event_type=self.readback.SUB_VALUE) + # Subscribe to "readback" event on each positioner + for positioner in self.positioner_objects.values(): + positioner.subscribe(self._run_readback_event_subs, event_type=positioner.SUB_READBACK) return super().wait_for_connection(*args, **kwargs) + def _run_readback_signal_subs(self, value: float, old_value: float, **kwargs): + """Run subscriptions on the readback signal when it updates.""" + self._run_subs(sub_type=self.SUB_READBACK, old_value=old_value, value=value) + + def _run_readback_event_subs(self, value: float, old_value: float, **kwargs): + """Run subscriptions on the readback event when it updates.""" + new_val = self.readback.get() + self._run_subs(sub_type=self.SUB_READBACK, value=new_val) + def _check_method_signatures(self) -> None: """Ensure calculation method parameters match configured positioner keys.""" input_names = set(self.positioner_objects.keys())