add gain,levels

implement gain, levels for strip/bus classes.

add to readme
This commit is contained in:
onyx-and-iris
2022-02-28 14:03:51 +00:00
parent 471abb3ca6
commit 44a66466c2
5 changed files with 56 additions and 29 deletions

View File

@@ -71,8 +71,21 @@ class OutputBus(Channel):
raise VMCMDErrors('label is a string parameter')
self.setter('Label', val)
@property
def gain(self):
return self.public_packet.busgain[self.index]
def fget():
val = self.public_packet.busgain[self.index]
if val < 10000:
return -val
elif val == ((1 << 16) - 1):
return 0
else:
return ((1 << 16) - 1) - val
return round((fget() * 0.01), 1)
@gain.setter
def gain(self, val: float):
self.setter('gain', val)
class PhysicalOutputBus(OutputBus):
@@ -96,11 +109,12 @@ class BusLevel(OutputBus):
def getter_level(self, mode=None):
def fget(i, data):
return data.outputlevels[i]
val = data.outputlevels[i]
return -val * 0.01
range_ = self.level_map[self.index]
data = self.public_packet
levels = tuple(fget(i, data) for i in range(*range_))
levels = tuple(round(fget(i, data), 1) for i in range(*range_))
return levels
@property

View File

@@ -47,11 +47,11 @@ class VBAN_VMRT_Packet_Data:
@property
def inputlevels(self) -> tuple:
""" returns the entire level array across all inputs """
return tuple(int.from_bytes(self._inputLeveldB100[i:i+2], 'little') for i in range(0, 68, 2))
return tuple(((1 << 16) - 1) - int.from_bytes(self._inputLeveldB100[i:i+2], 'little') for i in range(0, 68, 2))
@property
def outputlevels(self) -> tuple:
""" returns the entire level array across all outputs """
return tuple(int.from_bytes(self._outputLeveldB100[i:i+2], 'little') for i in range(0, 128, 2))
return tuple(((1 << 16) - 1) - int.from_bytes(self._outputLeveldB100[i:i+2], 'little') for i in range(0, 128, 2))
@property
def stripstate(self) -> tuple:
""" returns tuple of strip states accessable through bit modes """
@@ -67,33 +67,33 @@ class VBAN_VMRT_Packet_Data:
"""
@property
def stripgainlayer1(self) -> tuple:
return tuple(int.from_bytes(self._stripGaindB100Layer1[i:i+2], 'little') for i in range(0, 16, 2))
return tuple(((1 << 16) - 1) - int.from_bytes(self._stripGaindB100Layer1[i:i+2], 'little') for i in range(0, 16, 2))
@property
def stripgainlayer2(self) -> tuple:
return tuple(int.from_bytes(self._stripGaindB100Layer2[i:i+2], 'little') for i in range(0, 16, 2))
return tuple(((1 << 16) - 1) - int.from_bytes(self._stripGaindB100Layer2[i:i+2], 'little') for i in range(0, 16, 2))
@property
def stripgainlayer3(self) -> tuple:
return tuple(int.from_bytes(self._stripGaindB100Layer3[i:i+2], 'little') for i in range(0, 16, 2))
return tuple(((1 << 16) - 1) - int.from_bytes(self._stripGaindB100Layer3[i:i+2], 'little') for i in range(0, 16, 2))
@property
def stripgainlayer4(self) -> tuple:
return tuple(int.from_bytes(self._stripGaindB100Layer4[i:i+2], 'little') for i in range(0, 16, 2))
return tuple(((1 << 16) - 1) - int.from_bytes(self._stripGaindB100Layer4[i:i+2], 'little') for i in range(0, 16, 2))
@property
def stripgainlayer5(self) -> tuple:
return tuple(int.from_bytes(self._stripGaindB100Layer5[i:i+2], 'little') for i in range(0, 16, 2))
return tuple(((1 << 16) - 1) - int.from_bytes(self._stripGaindB100Layer5[i:i+2], 'little') for i in range(0, 16, 2))
@property
def stripgainlayer6(self) -> tuple:
return tuple(int.from_bytes(self._stripGaindB100Layer6[i:i+2], 'little') for i in range(0, 16, 2))
return tuple(((1 << 16) - 1) - int.from_bytes(self._stripGaindB100Layer6[i:i+2], 'little') for i in range(0, 16, 2))
@property
def stripgainlayer7(self) -> tuple:
return tuple(int.from_bytes(self._stripGaindB100Layer7[i:i+2], 'little') for i in range(0, 16, 2))
return tuple(((1 << 16) - 1) - int.from_bytes(self._stripGaindB100Layer7[i:i+2], 'little') for i in range(0, 16, 2))
@property
def stripgainlayer8(self) -> tuple:
return tuple(int.from_bytes(self._stripGaindB100Layer8[i:i+2], 'little') for i in range(0, 16, 2))
return tuple(((1 << 16) - 1) - int.from_bytes(self._stripGaindB100Layer8[i:i+2], 'little') for i in range(0, 16, 2))
@property
def busgain(self) -> tuple:
""" returns tuple of bus gains """
return tuple(int.from_bytes(self._busGaindB100[i:i+2], 'little') for i in range(0, 16, 2))
return tuple(((1 << 16) - 1) - int.from_bytes(self._busGaindB100[i:i+2], 'little') for i in range(0, 16, 2))
@property
def striplabels(self) -> tuple:
""" returns tuple of strip labels """

View File

@@ -131,11 +131,12 @@ class StripLevel(InputStrip):
def getter_level(self, mode=None):
def fget(i, data):
return data.inputlevels[i]
val = data.inputlevels[i]
return -val * 0.01
range_ = self.level_map[self.index]
data = self.public_packet
levels = tuple(fget(i, data) for i in range(*range_))
levels = tuple(round(fget(i, data), 1) for i in range(*range_))
return levels
@property
@@ -158,7 +159,15 @@ class GainLayer(InputStrip):
@property
def gain(self):
return getattr(self.public_packet, f'stripgainlayer{self._i+1}')[self.index]
def fget():
val = getattr(self.public_packet, f'stripgainlayer{self._i+1}')[self.index]
if val < 10000:
return -val
elif val == ((1 << 16) - 1):
return 0
else:
return ((1 << 16) - 1) - val
return round((fget() * 0.01), 1)
@gain.setter
def gain(self, val):

View File

@@ -19,7 +19,7 @@ from .strip import InputStrip
from .bus import OutputBus
class VbanCmd(abc.ABC):
def __init__(self, *args, **kwargs):
def __init__(self, **kwargs):
self._ip = kwargs['ip']
self._port = kwargs['port']
self._streamname = kwargs['streamname']
@@ -64,7 +64,7 @@ class VbanCmd(abc.ABC):
sleep(10)
def _fetch_rt_packet(self):
data, _ = self._rt_packet_socket.recvfrom(1024*2)
data, _ = self._rt_packet_socket.recvfrom(1024*1024*2)
# check for packet data
if len(data) > HEADER_SIZE:
# check if packet is of type rt service
@@ -93,7 +93,6 @@ class VbanCmd(abc.ABC):
_stripLabelUTF8c60=data[452:932],
_busLabelUTF8c60=data[932:1412],
)
return False
@property
def public_packet(self):
@@ -155,13 +154,13 @@ def _make_remote(kind: NamedTuple) -> VbanCmd:
The returned class will subclass VbanCmd.
"""
def init(self, *args, **kwargs):
def init(self, **kwargs):
defaultkwargs = {
'ip': None, 'port': 6990, 'streamname': 'Command1', 'bps': 0,
'channel': 0, 'delay': 0.001, 'max_polls': 2
}
kwargs = defaultkwargs | kwargs
VbanCmd.__init__(self, *args, **kwargs)
VbanCmd.__init__(self, **kwargs)
self.kind = kind
self.phys_in, self.virt_in = kind.ins
self.phys_out, self.virt_out = kind.outs
@@ -178,7 +177,7 @@ def _make_remote(kind: NamedTuple) -> VbanCmd:
_remotes = {kind.id: _make_remote(kind) for kind in kinds.all}
def connect(kind_id: str, *args, **kwargs):
def connect(kind_id: str, **kwargs):
try:
VBANCMD_cls = _remotes[kind_id]
return VBANCMD_cls(**kwargs)