Skip to content

Commit

Permalink
(DiamondLightSource/hyperion#794) Fix race condition in stub offsets
Browse files Browse the repository at this point in the history
  • Loading branch information
DominicOram committed Nov 8, 2023
1 parent 7429e3d commit 3d7d056
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/dodal/devices/smargon.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
from enum import Enum

from ophyd import Component as Cpt
from ophyd import Device, EpicsMotor, EpicsSignal
from ophyd.epics_motor import MotorBundle
from ophyd.status import Status

from dodal.devices.motors import MotorLimitHelper, XYZLimitBundle
from dodal.devices.status import await_value
from dodal.devices.utils import run_functions_without_blocking


class StubPosition(Enum):
CURRENT_AS_CENTER = 0
RESEET_TO_ROBOT_LOAD = 1


class StubOffsets(Device):
Expand All @@ -15,7 +25,27 @@ class StubOffsets(Device):
"""

center_at_current_position: EpicsSignal = Cpt(EpicsSignal, "CENTER_CS.PROC")
center_at_current_position_enabled: EpicsSignal = Cpt(EpicsSignal, "CENTER_CS.DISP")

to_robot_load: EpicsSignal = Cpt(EpicsSignal, "SET_STUBS_TO_RL.PROC")
to_robot_load_enabled: EpicsSignal = Cpt(EpicsSignal, "SET_STUBS_TO_RL.DISP")

def set(self, pos: StubPosition) -> Status:
if pos == StubPosition.CURRENT_AS_CENTER:
status = run_functions_without_blocking(
[
lambda: await_value(self.center_at_current_position_enabled, 0),
lambda: self.center_at_current_position.set(1),
]
)
else:
status = run_functions_without_blocking(
[
lambda: await_value(self.to_robot_load_enabled, 0),
lambda: self.to_robot_load.set(1),
]
)
return status


class Smargon(MotorBundle):
Expand Down

0 comments on commit 3d7d056

Please sign in to comment.