import abc import logging from . import util logger = logging.getLogger(__name__) class IHeadAmp(abc.ABC): """Abstract Base Class for headamps""" def __init__(self, remote, index: int): self._remote = remote self.index = index + 1 self.logger = logger.getChild(self.__class__.__name__) def getter(self, param: str): return self._remote.query(f'{self.address}/{param}') def setter(self, param: str, val: int): self._remote.send(f'{self.address}/{param}', val) @abc.abstractmethod def address(self): pass class HeadAmp(IHeadAmp): """Concrete class for headamps""" @property def address(self): return f'/headamp/{str(self.index).zfill(2)}' @property def gain(self): return round(util.lin_get(-12, 60, self.getter('gain')[0]), 1) @gain.setter def gain(self, val): self.setter('gain', util.lin_set(-12, 60, val)) @property def phantom(self): return self.getter('phantom')[0] == 1 @phantom.setter def phantom(self, val): self.setter('phantom', 1 if val else 0)