From 6aeef19d383a2e3f5fd7ab53d86869e4385dd087 Mon Sep 17 00:00:00 2001 From: onyx-and-iris <75868496+onyx-and-iris@users.noreply.github.com> Date: Fri, 18 Mar 2022 07:42:25 +0000 Subject: [PATCH] fix bus mode prop add spacing for clarity in Modes dataclass. bus mode prop now returning correct mode --- vbancmd/bus.py | 2 +- vbancmd/channel.py | 77 +++++++++++++++++++++++----------------------- vbancmd/meta.py | 36 ++++++++++++++-------- 3 files changed, 64 insertions(+), 51 deletions(-) diff --git a/vbancmd/bus.py b/vbancmd/bus.py index 414f2c7..372d2ec 100644 --- a/vbancmd/bus.py +++ b/vbancmd/bus.py @@ -133,7 +133,7 @@ _bus_maps = {kind.id: _make_bus_level_map(kind) for kind in kinds.all} def _make_bus_mode_mixin(cls): """ Creates a mixin of Bus Modes. """ return type('BusModeMixin', (cls,), { - **{f'{mode.lower()}': bus_mode_prop(f'mode.{mode}') for mode in + **{f'{mode.lower()}': bus_mode_prop(mode) for mode in ['normal', 'Amix', 'Bmix', 'Repeat', 'Composite', 'TVMix', 'UpMix21', 'UpMix41', 'UpMix61', 'CenterOnly', 'LFEOnly', 'RearOnly']}, }) diff --git a/vbancmd/channel.py b/vbancmd/channel.py index 42ca7dc..0565de1 100644 --- a/vbancmd/channel.py +++ b/vbancmd/channel.py @@ -5,53 +5,54 @@ from dataclasses import dataclass @dataclass class Modes: """ Channel Modes """ - _mute: hex=0x00000001 - _solo: hex=0x00000002 - _mono: hex=0x00000004 - _mutec: hex=0x00000008 + _mute: hex=0x00000001 + _solo: hex=0x00000002 + _mono: hex=0x00000004 + _mutec: hex=0x00000008 - _amix: hex=0x00000010 - _repeat: hex=0x00000020 - _bmix: hex=0x00000030 + _normal: hex=0x00000000 + _amix: hex=0x00000010 + _repeat: hex=0x00000020 + _bmix: hex=0x00000030 _composite: hex=0x00000040 - _tvmix: hex=0x00000050 - _upmix21: hex=0x00000060 - _upmix41: hex=0x00000070 - _upmix61: hex=0x00000080 - _centeronly: hex=0x00000090 - _lfeonly: hex=0x000000A0 - _rearonly: hex=0x000000B0 + _tvmix: hex=0x00000050 + _upmix21: hex=0x00000060 + _upmix41: hex=0x00000070 + _upmix61: hex=0x00000080 + _centeronly:hex=0x00000090 + _lfeonly: hex=0x000000A0 + _rearonly: hex=0x000000B0 - _mask: hex=0x000000F0 + _mask: hex=0x000000F0 - _eq: hex=0x00000100 - _cross: hex=0x00000200 - _eqb: hex=0x00000800 + _eq: hex=0x00000100 + _cross: hex=0x00000200 + _eqb: hex=0x00000800 - _busa: hex=0x00001000 - _busa1: hex=0x00001000 - _busa2: hex=0x00002000 - _busa3: hex=0x00004000 - _busa4: hex=0x00008000 - _busa5: hex=0x00080000 + _busa: hex=0x00001000 + _busa1: hex=0x00001000 + _busa2: hex=0x00002000 + _busa3: hex=0x00004000 + _busa4: hex=0x00008000 + _busa5: hex=0x00080000 - _busb: hex=0x00010000 - _busb1: hex=0x00010000 - _busb2: hex=0x00020000 - _busb3: hex=0x00040000 + _busb: hex=0x00010000 + _busb1: hex=0x00010000 + _busb2: hex=0x00020000 + _busb3: hex=0x00040000 - _pan0: hex=0x00000000 - _pancolor: hex=0x00100000 - _panmod: hex=0x00200000 - _panmask: hex=0x00F00000 + _pan0: hex=0x00000000 + _pancolor: hex=0x00100000 + _panmod: hex=0x00200000 + _panmask: hex=0x00F00000 - _postfx_r: hex=0x01000000 - _postfx_d: hex=0x02000000 - _postfx1: hex=0x04000000 - _postfx2: hex=0x08000000 + _postfx_r: hex=0x01000000 + _postfx_d: hex=0x02000000 + _postfx1: hex=0x04000000 + _postfx2: hex=0x08000000 - _sel: hex=0x10000000 - _monitor: hex=0x20000000 + _sel: hex=0x10000000 + _monitor: hex=0x20000000 class Channel(abc.ABC): diff --git a/vbancmd/meta.py b/vbancmd/meta.py index ac7e7fe..a98f30d 100644 --- a/vbancmd/meta.py +++ b/vbancmd/meta.py @@ -1,10 +1,10 @@ from .errors import VMCMDErrors +from time import sleep def strip_output_prop(param): """ A strip output prop. """ def fget(self): - data = self._remote.public_packet - return not int.from_bytes(data.stripstate[self.index], 'little') & getattr(self._modes, f'_bus{param.lower()}') == 0 + return not int.from_bytes(self.public_packet.stripstate[self.index], 'little') & getattr(self._modes, f'_bus{param.lower()}') == 0 def fset(self, val): if not isinstance(val, bool) and val not in (0, 1): raise VMCMDErrors(f'{param} is a boolean parameter') @@ -14,18 +14,30 @@ def strip_output_prop(param): def bus_mode_prop(param): """ A strip output prop. """ def fget(self): - data = self._remote.public_packet - if param == 'mode.normal': - vals = [ - not int.from_bytes(data.busstate[self.index], 'little') & getattr(self._modes, f'_{param.lower()}') == 0 - for param in ['Amix', 'Bmix', 'Repeat', 'Composite', 'TVMix', 'UpMix21', + data = self.public_packet + modes = { + 'normal': (False,False,False,False,False,False,False,False,False,False,False,False), + 'amix': (False,True,True,False,False,True,False,True,False,True,False,True), + 'bmix': (False,True,True,True,False,True,True,True,False,True,True,True), + 'repeat': (False,False,True,True,False,False,True,True,False,False,True,True), + 'composite': (False,False,False,False,True,True,True,True,False,False,False,False), + 'tvmix': (False,True,True,False,True,True,True,True,False,True,False,True), + 'upmix21': (False,False,True,True,True,True,True,True,False,False,True,True), + 'upmix41': (False,True,True,True,True,True,True,True,False,True,True,True), + 'upmix61': (False,False,False,False,False,False,False,False,True,True,True,True), + 'centeronly': (False,True,True,False,False,True,False,True,True,True,True,True), + 'lfeonly': (False,False,True,True,False,False,True,True,True,True,True,True), + 'rearonly': (False,True,True,True,False,True,True,True,True,True,True,True), + } + vals = tuple( + not int.from_bytes(data.busstate[self.index], 'little') & getattr(self._modes, f'_{param.lower()}') == 0 + for param in ['normal', 'Amix', 'Bmix', 'Repeat', 'Composite', 'TVMix', 'UpMix21', 'UpMix41', 'UpMix61', 'CenterOnly', 'LFEOnly', 'RearOnly'] - ] - return not True in vals - return not int.from_bytes(data.busstate[self.index], 'little') & getattr(self._modes, f'_{param.lower().split(".")[1]}') == 0 + ) + return vals == modes[param.lower()] def fset(self, val): if not isinstance(val, bool) and val not in (0, 1): - raise VMCMDErrors(f'{param} is a boolean parameter') - self.setter(param, 1 if val else 0) + raise VMCMDErrors(f'mode.{param} is a boolean parameter') + self.setter(f'mode.{param}', 1 if val else 0) return property(fget, fset)