Skip to content
Snippets Groups Projects

L2SS-1755: Timeout properties and attributes for state transitions

Merged L2SS-1755: Timeout properties and attributes for state transitions
All threads resolved!
Merged Corné Lukken requested to merge L2SS-1755 into master
All threads resolved!

Files

+ 71
7
@@ -7,9 +7,8 @@
import asyncio
import logging
from tango import DebugIt
# pytango imports
import numpy
from tango import DebugIt, AttrWriteType
from tango.server import attribute, command, device_property
# Additional import
@@ -62,6 +61,24 @@ class StationManager(AsyncDevice):
mandatory=False,
default_value=False,
)
Hibernate_Transition_Timeout = device_property(
doc="Timeout in seconds to transition to hibernate",
dtype="DevLong64",
mandatory=False,
default_value=60,
)
Standy_Transition_Timeout = device_property(
doc="Timeout in seconds to transition to standby",
dtype="DevLong64",
mandatory=False,
default_value=300,
)
On_Transition_Timeout = device_property(
doc="Timeout in seconds to transition to on",
dtype="DevLong64",
mandatory=False,
default_value=600,
)
# ----------
# Attributes
@@ -94,6 +111,41 @@ class StationManager(AsyncDevice):
def last_requested_transition_ok_R(self):
return not self.last_requested_transition_exceptions
@attribute(
access=AttrWriteType.READ_WRITE,
dtype=numpy.int64,
)
def hibernate_transition_timeout_RW(self):
return self._hibernate_transition_timeout
@hibernate_transition_timeout_RW.write
def hibernate_transition_timeout_RW(self, value):
self._hibernate_transition_timeout = value
@attribute(
access=AttrWriteType.READ_WRITE,
dtype=numpy.int64,
min_value="0",
)
def standby_transition_timeout_RW(self):
return self._standby_transition_timeout
@standby_transition_timeout_RW.write
def standby_transition_timeout_RW(self, value):
self._standby_transition_timeout = value
@attribute(
access=AttrWriteType.READ_WRITE,
dtype=numpy.int64,
min_value="0",
)
def on_transition_timeout_RW(self):
return self._on_transition_timeout
@on_transition_timeout_RW.write
def on_transition_timeout_RW(self, value):
self._on_transition_timeout = value
# --------
# overloaded functions
# --------
@@ -104,6 +156,10 @@ class StationManager(AsyncDevice):
self.last_requested_transition_exceptions = []
self.transition_lock = asyncio.Lock()
self._hibernate_transition_timeout = 0
self._standby_transition_timeout = 0
self._on_transition_timeout = 0
# Super must be called after variable assignment due to executing init_device!
super().__init__(cl, name)
@@ -112,6 +168,10 @@ class StationManager(AsyncDevice):
# always turn on automatically, so the user doesn't have to boot the
# StationManager device.
self._hibernate_transition_timeout = self.Hibernate_Transition_Timeout
self._standby_transition_timeout = self.Standy_Transition_Timeout
self._on_transition_timeout = self.On_Transition_Timeout
"""Alternative method"""
# loop = asyncio.get_running_loop()
# loop.create_task(self.Initialise())
@@ -164,7 +224,7 @@ class StationManager(AsyncDevice):
"""
await self.transition_lock.acquire()
try:
await self.station_state.station_off()
await self.station_state.station_off(0)
finally:
self.transition_lock.release()
@@ -178,7 +238,9 @@ class StationManager(AsyncDevice):
"""
await self.transition_lock.acquire()
try:
await self.station_state.station_hibernate()
await self.station_state.station_hibernate(
timeout=self._hibernate_transition_timeout
)
finally:
self.transition_lock.release()
@@ -192,7 +254,9 @@ class StationManager(AsyncDevice):
"""
await self.transition_lock.acquire()
try:
await self.station_state.station_standby()
await self.station_state.station_standby(
timeout=self._standby_transition_timeout
)
finally:
self.transition_lock.release()
@@ -206,6 +270,6 @@ class StationManager(AsyncDevice):
"""
await self.transition_lock.acquire()
try:
await self.station_state.station_on()
await self.station_state.station_on(timeout=self._on_transition_timeout)
finally:
self.transition_lock.release()
Loading