mx-remote 4.7.6__tar.gz → 4.7.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mx_remote-4.7.6 → mx_remote-4.7.7}/PKG-INFO +1 -1
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/const.py +1 -1
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPBayMapping.py +4 -2
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/Bay.py +14 -8
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/Device.py +14 -8
- {mx_remote-4.7.6 → mx_remote-4.7.7}/.claude/settings.local.json +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/.gitignore +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/LICENSE +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/README.md +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/hatch_build.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/Interface.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/Interface.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/Uid.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/Uid.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/__init__.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/__init__.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/const.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/main.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/main.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/BayConfig.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/BayConfig.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/Constants.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/Constants.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/Data.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/Data.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/Factory.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/Factory.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameAmpDolbySettings.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameAmpDolbySettings.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameAmpZoneSettings.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameAmpZoneSettings.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameBase.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameBase.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameBayConfig.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameBayConfig.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameBayConfigSecondary.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameBayConfigSecondary.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameBayHide.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameBayHide.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameBayStatus.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameBayStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameConnectStatus.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameConnectStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameDebug.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameDebug.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameDiscover.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameDiscover.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameEDID.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameEDID.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameEDIDProfile.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameEDIDProfile.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameFactoryReset.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameFactoryReset.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameFilterStatus.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameFilterStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameFirmwareVersion.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameFirmwareVersion.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameHeader.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameHeader.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameHello.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameHello.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameLinks.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameLinks.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameMeshOperation.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameMeshOperation.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameMirrorStatus.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameMirrorStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameMonitoringPulse.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameMonitoringPulse.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameNetworkStatus.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameNetworkStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FramePDUState.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FramePDUState.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FramePowerChange.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FramePowerChange.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameRCAction.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameRCAction.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameRCIr.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameRCIr.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameRCKey.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameRCKey.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameRCSettings.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameRCSettings.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameReboot.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameReboot.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameRoutingChange.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameRoutingChange.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSetInstaller.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSetInstaller.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSetName.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSetName.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSetRoute.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSetRoute.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSetupStatus.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSetupStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSignalStatus.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSignalStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSignalStatusNew.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSignalStatusNew.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSysTemperature.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSysTemperature.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSystemStatus.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameSystemStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameTXRCAction.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameTXRCAction.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameTopology.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameTopology.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameTxIR.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameTxIR.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameUpgradeFPGA.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameUpgradeFPGA.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPAudio.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPAudio.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPBayMapping.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPDeviceConfiguration.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPDeviceConfiguration.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPLink.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPLink.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPManualSourceSwitch.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPManualSourceSwitch.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPMultiviewer.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPMultiviewer.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPPowerSave.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPPowerSave.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPSetMaster.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPSetMaster.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPSourceSwitch.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPSourceSwitch.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPSources.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPSources.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPStats.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPStats.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPStreamDetails.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPStreamDetails.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPTiling.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameV2IPTiling.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameVolume.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameVolume.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameVolumeDown.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameVolumeDown.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameVolumeSet.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameVolumeSet.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameVolumeUp.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/FrameVolumeUp.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/LinkConfig.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/LinkConfig.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/Multiviewer.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/Multiviewer.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/PDUState.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/PDUState.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/Svd.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/Svd.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/V2IPConfig.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/V2IPConfig.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/V2IPStats.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/V2IPStats.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/__init__.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/__init__.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/proto/svd.csv +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/py.typed +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/Bay.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/ConnectionAsync.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/ConnectionAsync.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/Device.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/Link.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/Link.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/P8PDU.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/P8PDU.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/Remote.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/Remote.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/State.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/State.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/V2IP.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/mx_remote/remote/V2IP.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.7}/pyproject.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mx_remote
|
|
3
|
-
Version: 4.7.
|
|
3
|
+
Version: 4.7.7
|
|
4
4
|
Summary: Python 3 library for interfacing with MX Remote compatible devices
|
|
5
5
|
Project-URL: Homepage, https://github.com/opdenkamp/mx-remote/
|
|
6
6
|
Project-URL: Documentation, https://github.com/opdenkamp/mx-remote/
|
|
@@ -24,10 +24,12 @@ class FrameV2IPBayMapping(FrameBase):
|
|
|
24
24
|
@cached_property
|
|
25
25
|
def is_input(self) -> bool:
|
|
26
26
|
'''Whether these are input bay mappings.'''
|
|
27
|
+
# Wire format: firmware sets bit 0 to ((mode == MBAY_MODE_INPUT) ? 1 : 0),
|
|
28
|
+
# so an input frame carries bit 0 = 1 (not 0).
|
|
27
29
|
val = self.payload_u16(0)
|
|
28
30
|
if (val is None):
|
|
29
31
|
return False
|
|
30
|
-
return (val & 1 ==
|
|
32
|
+
return (val & 1 == 1)
|
|
31
33
|
|
|
32
34
|
@cached_property
|
|
33
35
|
def is_output(self) -> bool:
|
|
@@ -35,7 +37,7 @@ class FrameV2IPBayMapping(FrameBase):
|
|
|
35
37
|
val = self.payload_u16(0)
|
|
36
38
|
if (val is None):
|
|
37
39
|
return False
|
|
38
|
-
return (val & 1 ==
|
|
40
|
+
return (val & 1 == 0)
|
|
39
41
|
|
|
40
42
|
@cached_property
|
|
41
43
|
def first_bay_id(self) -> int|None:
|
|
@@ -144,14 +144,20 @@ class Bay(BayBase):
|
|
|
144
144
|
@override
|
|
145
145
|
def bay_uid(self) -> MxrBayUid:
|
|
146
146
|
# In a OneIP mesh the same source can be advertised by multiple devices
|
|
147
|
-
# (mesh forwarding etc.).
|
|
148
|
-
#
|
|
149
|
-
#
|
|
150
|
-
#
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
147
|
+
# (mesh forwarding etc.). Resolve a v2ip source bay to (source_uid, 0)
|
|
148
|
+
# — every OneIP unit has at most one input, always at port 0 — using the
|
|
149
|
+
# source uid from MXR_OP_SYS_BAY_V2IP_SOURCES, falling back to the bay
|
|
150
|
+
# mapping uid if the sources frame hasn't supplied one. Yields a single
|
|
151
|
+
# stable bay_uid regardless of who advertises the source.
|
|
152
|
+
if self.is_v2ip_source:
|
|
153
|
+
src_uid:MxrDeviceUid|None = None
|
|
154
|
+
stream = self.v2ip_source
|
|
155
|
+
if (stream is not None) and (stream.uid is not None) and not stream.uid.empty:
|
|
156
|
+
src_uid = stream.uid
|
|
157
|
+
elif (self._v2ip_uid is not None) and not self._v2ip_uid.empty:
|
|
158
|
+
src_uid = self._v2ip_uid
|
|
159
|
+
if src_uid is not None:
|
|
160
|
+
return MxrBayUid(src_uid, 0)
|
|
155
161
|
return MxrBayUid(self.device.remote_id, self.port)
|
|
156
162
|
|
|
157
163
|
@property
|
|
@@ -203,9 +203,15 @@ class Device(DeviceBase):
|
|
|
203
203
|
return None
|
|
204
204
|
if self._v2ip_sources is None:
|
|
205
205
|
return None
|
|
206
|
-
|
|
206
|
+
# Firmware fills MXR_OP_SYS_BAY_V2IP_SOURCES by iterating bays in order
|
|
207
|
+
# (MBAY_ITERATE). Devices with no local input (pure RX) skip bay 0, so
|
|
208
|
+
# the list starts at bay 1 — shift the lookup so bay.bay still maps to
|
|
209
|
+
# the right entry.
|
|
210
|
+
offset = 0 if self.has_local_source else 1
|
|
211
|
+
idx = bay.bay - offset
|
|
212
|
+
if (idx < 0) or (idx >= len(self._v2ip_sources)):
|
|
207
213
|
return None
|
|
208
|
-
return self._v2ip_sources[
|
|
214
|
+
return self._v2ip_sources[idx]
|
|
209
215
|
|
|
210
216
|
@property
|
|
211
217
|
def v2ip_stats(self) -> V2IPDeviceStats|None:
|
|
@@ -619,13 +625,13 @@ class Device(DeviceBase):
|
|
|
619
625
|
elif isinstance(data, FrameV2IPBayMapping):
|
|
620
626
|
if data.first_bay_id is None:
|
|
621
627
|
return
|
|
628
|
+
# Firmware iterates bays in MBAY_ITERATE order; the wire payload's
|
|
629
|
+
# first_bay_id tells us the bay number of payload[0], so payload[i]
|
|
630
|
+
# maps to bay number (first_bay_id + i). Devices without a local
|
|
631
|
+
# bay 0 (pure RX) emit first_bay_id=1 and skip the bay-0 slot.
|
|
632
|
+
mode = 'Input' if data.is_input else 'Output'
|
|
622
633
|
for idx in range(data.nb_bays):
|
|
623
|
-
|
|
624
|
-
if data.is_input and self.is_oneip_rx:
|
|
625
|
-
continue
|
|
626
|
-
if data.is_output and (self.is_oneip_tx or self.is_oneip_multiviewer):
|
|
627
|
-
continue
|
|
628
|
-
bay = self.get_by_mode_bay(mode=('Input' if data.is_input else 'Output'), bay=idx)
|
|
634
|
+
bay = self.get_by_mode_bay(mode=mode, bay=data.first_bay_id + idx)
|
|
629
635
|
if (bay is not None):
|
|
630
636
|
bay.v2ip_uid = data.bay(idx=idx) # pyright: ignore[reportAttributeAccessIssue]
|
|
631
637
|
elif isinstance(data, FrameSystemStatus):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|