Source code for hal.helpers.ffs

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# @Author: José Sánchez-Gallego (gallegoj@uw.edu)
# @Date: 2021-12-16
# @Filename: ffs.py
# @License: BSD 3-clause (http://www.opensource.org/licenses/BSD-3-Clause)

from __future__ import annotations

import enum

from typing import TYPE_CHECKING

from hal import config

from . import HALHelper


if TYPE_CHECKING:
    from hal.actor import HALCommandType


__all__ = ["FFSHelper", "FFSStatus"]


[docs] class FFSHelper(HALHelper): """Command and keeps track of the Flat-Field Screens status.""" TIMEOUT: float = config["timeouts"]["ffs"] name = "ffs"
[docs] def get_values(self): """Returns the FFS status flags.""" values = self.actor.models["mcp"]["ffsStatus"].value if len(values) == 0 or all([value is None for value in values]): return [FFSStatus.UNKNWON] * 8 return [FFSStatus(value) for value in values]
[docs] def all_closed(self): """Returns `True` if all the petals are closed.""" return all([x == FFSStatus.CLOSED for x in self.get_values()])
[docs] def all_open(self): """Returns `True` if all the petals are open.""" return all([x == FFSStatus.OPEN for x in self.get_values()])
[docs] async def open(self, command: HALCommandType): """Open all the petals.""" if self.all_open(): return return await self._send_command(command, "mcp", "ffs.open")
[docs] async def close(self, command: HALCommandType): """Close all the petals.""" if self.all_closed(): return return await self._send_command(command, "mcp", "ffs.close")
[docs] class FFSStatus(enum.Enum): """FFS status flags.""" UNKNWON = "00" CLOSED = "01" OPEN = "10" INVALID = "11"