mx-remote 4.7.6__tar.gz → 4.7.8__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.8/.claude/agents/semble-search.md +30 -0
- mx_remote-4.7.8/.claude/settings.local.json +9 -0
- mx_remote-4.7.8/CLAUDE.md +79 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/LICENSE +1 -1
- {mx_remote-4.7.6 → mx_remote-4.7.8}/PKG-INFO +4 -4
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/Interface.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/Uid.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/__init__.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/const.py +7 -7
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/main.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/BayConfig.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/Constants.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/Data.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/Factory.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameAmpDolbySettings.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameAmpZoneSettings.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameBase.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameBayConfig.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameBayConfigSecondary.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameBayHide.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameBayStatus.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameConnectStatus.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameDebug.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameDiscover.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameEDID.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameEDIDProfile.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameFactoryReset.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameFilterStatus.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameFirmwareVersion.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameHeader.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameHello.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameLinks.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameMeshOperation.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameMirrorStatus.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameMonitoringPulse.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameNetworkStatus.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FramePDUState.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FramePowerChange.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameRCAction.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameRCIr.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameRCKey.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameRCSettings.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameReboot.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameRoutingChange.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSetInstaller.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSetName.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSetRoute.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSetupStatus.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSignalStatus.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSignalStatusNew.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSysTemperature.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSystemStatus.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameTXRCAction.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameTopology.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameTxIR.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameUpgradeFPGA.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPAudio.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPBayMapping.py +10 -8
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPDeviceConfiguration.py +6 -6
- mx_remote-4.7.8/mx_remote/proto/FrameV2IPLink.py +14 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPManualSourceSwitch.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPMultiviewer.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPPowerSave.py +6 -6
- mx_remote-4.7.8/mx_remote/proto/FrameV2IPSetMaster.py +14 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPSourceSwitch.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPSources.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPStats.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPStreamDetails.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPTiling.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameVolume.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameVolumeDown.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameVolumeSet.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameVolumeUp.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/LinkConfig.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/Multiviewer.py +7 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/PDUState.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/Svd.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/V2IPConfig.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/V2IPStats.py +6 -6
- mx_remote-4.7.8/mx_remote/proto/__init__.py +16 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/Bay.py +20 -14
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/ConnectionAsync.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/Device.py +20 -14
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/Link.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/P8PDU.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/Remote.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/State.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/V2IP.py +6 -6
- {mx_remote-4.7.6 → mx_remote-4.7.8}/pyproject.toml +2 -2
- mx_remote-4.7.6/.claude/settings.local.json +0 -13
- mx_remote-4.7.6/mx_remote/proto/FrameV2IPLink.py +0 -14
- mx_remote-4.7.6/mx_remote/proto/FrameV2IPSetMaster.py +0 -14
- mx_remote-4.7.6/mx_remote/proto/__init__.py +0 -16
- {mx_remote-4.7.6 → mx_remote-4.7.8}/.gitignore +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/README.md +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/hatch_build.py +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/Interface.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/Uid.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/__init__.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/const.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/main.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/BayConfig.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/Constants.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/Data.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/Factory.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameAmpDolbySettings.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameAmpZoneSettings.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameBase.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameBayConfig.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameBayConfigSecondary.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameBayHide.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameBayStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameConnectStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameDebug.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameDiscover.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameEDID.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameEDIDProfile.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameFactoryReset.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameFilterStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameFirmwareVersion.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameHeader.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameHello.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameLinks.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameMeshOperation.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameMirrorStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameMonitoringPulse.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameNetworkStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FramePDUState.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FramePowerChange.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameRCAction.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameRCIr.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameRCKey.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameRCSettings.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameReboot.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameRoutingChange.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSetInstaller.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSetName.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSetRoute.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSetupStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSignalStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSignalStatusNew.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSysTemperature.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameSystemStatus.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameTXRCAction.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameTopology.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameTxIR.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameUpgradeFPGA.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPAudio.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPBayMapping.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPDeviceConfiguration.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPLink.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPManualSourceSwitch.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPMultiviewer.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPPowerSave.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPSetMaster.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPSourceSwitch.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPSources.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPStats.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPStreamDetails.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameV2IPTiling.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameVolume.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameVolumeDown.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameVolumeSet.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/FrameVolumeUp.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/LinkConfig.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/Multiviewer.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/PDUState.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/Svd.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/V2IPConfig.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/V2IPStats.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/__init__.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/proto/svd.csv +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/py.typed +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/Bay.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/ConnectionAsync.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/Device.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/Link.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/P8PDU.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/Remote.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/State.pyi +0 -0
- {mx_remote-4.7.6 → mx_remote-4.7.8}/mx_remote/remote/V2IP.pyi +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: semble-search
|
|
3
|
+
description: Code search agent for exploring any codebase. Use for finding code by intent, locating implementations, understanding how something works, or discovering related code. Prefer over Grep/Glob/Read for any semantic or exploratory question.
|
|
4
|
+
tools: Bash, Read
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Use `semble search` to find code by describing what it does or naming a symbol/identifier, instead of grep:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
semble search "authentication flow" ./my-project
|
|
11
|
+
semble search "save_pretrained" ./my-project
|
|
12
|
+
semble search "save model to disk" ./my-project --top-k 10
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Use `semble find-related` to discover code similar to a known location (pass `file_path` and `line` from a prior search result):
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
semble find-related src/auth.py 42 ./my-project
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`path` defaults to the current directory when omitted; git URLs are accepted.
|
|
22
|
+
|
|
23
|
+
If `semble` is not on `$PATH`, use `uvx --from "semble[mcp]" semble` in its place.
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
|
|
27
|
+
1. Start with `semble search` to find relevant chunks.
|
|
28
|
+
2. Inspect full files only when the returned chunk is not enough context.
|
|
29
|
+
3. Optionally use `semble find-related` with a promising result's `file_path` and `line` to discover related implementations.
|
|
30
|
+
4. Use grep only when you need exhaustive literal matches or quick confirmation of an exact string.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## What this is
|
|
6
|
+
|
|
7
|
+
`mx_remote` is a Python 3.11+ asyncio library for interfacing with Pulse-Eight MX Remote
|
|
8
|
+
compatible devices over a local network (UDP multicast/broadcast): video/audio matrices
|
|
9
|
+
(neo), OneIP/V2IP units (tx/rx/transceiver/multiviewer), and amplifiers (ProAmp8). These
|
|
10
|
+
all run the shared **MatrixOS** firmware. The library does device discovery, A/V routing,
|
|
11
|
+
volume, remote-control key passthrough, V2IP streaming, and multiviewer control.
|
|
12
|
+
|
|
13
|
+
See `README.md` for the full public-API usage guide (the API surface is large and stable).
|
|
14
|
+
|
|
15
|
+
## Commands
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pip install . # install; runs the custom hatch build hook
|
|
19
|
+
python -m build # build wheel + sdist into dist/
|
|
20
|
+
mxr # console app: discover devices, log frames live
|
|
21
|
+
mxr -l <local_ip> # bind to a specific interface
|
|
22
|
+
mxr -b # broadcast mode instead of multicast
|
|
23
|
+
mxr -i <capture> [-f <ip>] # parse a MatrixOS/Wireshark capture file offline
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
There is **no test suite** and no lint config in this repo. Validate protocol changes by
|
|
27
|
+
running `mxr` against live hardware or by replaying a capture file with `mxr -i`.
|
|
28
|
+
|
|
29
|
+
### Versioning
|
|
30
|
+
Version is single-sourced in `mx_remote/const.py` (`VERSION = '...'`); `pyproject.toml`
|
|
31
|
+
reads it via regex, so bump it there only. Release commits follow the convention
|
|
32
|
+
`bump to X.Y.Z`.
|
|
33
|
+
|
|
34
|
+
### Build hook
|
|
35
|
+
`hatch_build.py` generates `.pyi` type stubs via `mypy stubgen` at build time and
|
|
36
|
+
force-includes them in the wheel (they are gitignored). `mx_remote` ships as typed
|
|
37
|
+
(`py.typed`). If stubgen produces nothing the build fails by design.
|
|
38
|
+
|
|
39
|
+
## Architecture
|
|
40
|
+
|
|
41
|
+
Three layers, decoupled by abstract base classes:
|
|
42
|
+
|
|
43
|
+
1. **`mx_remote/proto/`** — the wire protocol. One `Frame*` class per opcode, all
|
|
44
|
+
subclassing `FrameBase` (payload accessors: `payload_u8/u16/u32/str/uuid/bay/device`).
|
|
45
|
+
`Factory.py::_mxr_frame_factory` maps each opcode → its `Frame*` class. Each frame's
|
|
46
|
+
`process()` method mutates registry state and fires callbacks. Frames are built for TX
|
|
47
|
+
via `FrameBase.construct_base` + per-frame `constructFrame*` helpers.
|
|
48
|
+
|
|
49
|
+
2. **`mx_remote/Interface.py`** — the public API and contracts: abstract base classes
|
|
50
|
+
(`DeviceBase`, `BayBase`, `DeviceRegistry`, `Multiviewer`, `AudioEndpoint`,
|
|
51
|
+
`ConnectionCallbacks`) plus all enums (`DeviceStatus`, `PowerStatus`, `RCType`, …) and
|
|
52
|
+
the `MxrCallbacks` class users subclass. proto/ and remote/ both depend on this; it
|
|
53
|
+
depends on neither. This is the biggest file — most "where is X defined" answers are here.
|
|
54
|
+
|
|
55
|
+
3. **`mx_remote/remote/`** — concrete implementations:
|
|
56
|
+
- `Remote` (`DeviceRegistry` + `ConnectionCallbacks`) — main entry point; owns the
|
|
57
|
+
connection and the `remotes` registry.
|
|
58
|
+
- `Device` (`DeviceBase`), `Bay` (`BayBase`) — live device/port state.
|
|
59
|
+
- `ConnectionAsync` — `asyncio.DatagramProtocol` UDP transport (multicast/broadcast).
|
|
60
|
+
- `State` — dispatches events to registered `MxrCallbacks`.
|
|
61
|
+
- `V2IP`, `Link`, `P8PDU` — OneIP streaming, virtual bay links, PDU support.
|
|
62
|
+
|
|
63
|
+
### Receive data flow
|
|
64
|
+
`ConnectionAsync` datagram → `Remote.on_datagram_received` → `Remote.process_frame` →
|
|
65
|
+
`Factory.process_mxr_frame` (decodes `FrameHeader` + opcode into a typed `Frame*`) →
|
|
66
|
+
`frame.process()` mutates `Device`/`Bay` → `MxrCallbacks` fire. Frames whose
|
|
67
|
+
`remote_id == self.uid` (our own echoes) are skipped.
|
|
68
|
+
|
|
69
|
+
### Frame wire format
|
|
70
|
+
`[0x50, 0x38, protocol, 0x00]` ("P8" magic + protocol version) + opcode (u16 LE) +
|
|
71
|
+
length (u16 LE) + payload. Built by `proto/Factory.py::create_mxr_frame`.
|
|
72
|
+
|
|
73
|
+
## Working on the protocol
|
|
74
|
+
|
|
75
|
+
When adding or editing a `Frame*` class, byte layouts **must match the MatrixOS firmware C
|
|
76
|
+
structs** — verify against the firmware source rather than inferring from samples. Adding a
|
|
77
|
+
new opcode requires both the `Frame*` class and a dispatch entry in
|
|
78
|
+
`Factory.py::_mxr_frame_factory`. Note the proto/ and remote/ modules use tab indentation
|
|
79
|
+
while `Interface.py` and `const.py` use spaces — match the file you are editing.
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mx_remote
|
|
3
|
-
Version: 4.7.
|
|
3
|
+
Version: 4.7.8
|
|
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/
|
|
7
7
|
Project-URL: Repository, https://github.com/opdenkamp/mx-remote.git
|
|
8
8
|
Project-URL: Bug Tracker, https://github.com/opdenkamp/mx-remote/issues
|
|
9
|
-
Author-email: Lars Op den Kamp <lars@opdenkamp.
|
|
10
|
-
Maintainer-email: Lars Op den Kamp <lars@opdenkamp.
|
|
11
|
-
License: Copyright
|
|
9
|
+
Author-email: Lars Op den Kamp <lars@opdenkamp-it.nl>
|
|
10
|
+
Maintainer-email: Lars Op den Kamp <lars@opdenkamp-it.nl>
|
|
11
|
+
License: Copyright 2021-2026 Lars Op den Kamp <lars@opdenkamp-it.nl>
|
|
12
12
|
|
|
13
13
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
|
14
14
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
|
|
8
8
|
from abc import ABC, abstractmethod
|
|
9
9
|
from enum import IntEnum
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Unique device and bay identifier types for mx_remote.'''
|
|
8
8
|
|
|
9
9
|
import logging
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
|
|
8
8
|
"""
|
|
9
9
|
mx_remote - Python 3 library for interfacing with MX Remote compatible devices.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
|
|
8
8
|
"""
|
|
9
9
|
Network and version constants for mx_remote.
|
|
@@ -14,7 +14,7 @@ Default communication modes:
|
|
|
14
14
|
"""
|
|
15
15
|
import os
|
|
16
16
|
|
|
17
|
-
VERSION = '4.7.
|
|
17
|
+
VERSION = '4.7.8'
|
|
18
18
|
__version__ = VERSION
|
|
19
19
|
|
|
20
20
|
MX_BCAST_UDP_PORT = 8811
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Command-line entry points for the mx_remote library.'''
|
|
8
8
|
|
|
9
9
|
import argparse
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
|
|
8
8
|
'''Bay configuration data parsed from bay config protocol frames.'''
|
|
9
9
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
|
|
8
8
|
'''Protocol constants, feature flags, and enumeration types for the MX Remote binary protocol.'''
|
|
9
9
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
|
|
8
8
|
'''Data structures for volume and mute status used in protocol frames.'''
|
|
9
9
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
|
|
8
8
|
''' Methods for creating and processing frames '''
|
|
9
9
|
from .FrameBase import FrameBase
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for amplifier Dolby audio settings.'''
|
|
8
8
|
|
|
9
9
|
from .FrameBase import FrameBase
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for amplifier zone settings (gain, EQ, delay, power mode).'''
|
|
8
8
|
|
|
9
9
|
from functools import cached_property
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
|
|
8
8
|
'''Base class and utilities for decoded MX Remote protocol frames.'''
|
|
9
9
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for bay configuration data.'''
|
|
8
8
|
|
|
9
9
|
from functools import cached_property
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for secondary bay configuration data.'''
|
|
8
8
|
|
|
9
9
|
from functools import cached_property
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for hiding or showing a bay in the device UI.'''
|
|
8
8
|
|
|
9
9
|
from functools import cached_property
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for bay status updates (signal, features, status flags).'''
|
|
8
8
|
|
|
9
9
|
from functools import cached_property
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for device connect/disconnect status notifications.'''
|
|
8
8
|
|
|
9
9
|
from functools import cached_property
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for debug commands.'''
|
|
8
8
|
|
|
9
9
|
from .FrameBase import FrameBase
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for network device discovery.'''
|
|
8
8
|
|
|
9
9
|
import warnings
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for EDID (Extended Display Identification Data) content.'''
|
|
8
8
|
|
|
9
9
|
from functools import cached_property
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for EDID profile change commands.'''
|
|
8
8
|
|
|
9
9
|
from .FrameBase import FrameBase
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for SYS_FACTORY_RESET (opcode 0x3A).
|
|
8
8
|
|
|
9
9
|
A mesh controller or management app broadcasts this to factory-reset peers.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for bay source filter status.'''
|
|
8
8
|
|
|
9
9
|
from functools import cached_property
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for firmware version information.'''
|
|
8
8
|
|
|
9
9
|
from functools import cached_property
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
|
|
8
8
|
'''MX Remote frame header parsing and construction.'''
|
|
9
9
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame for device advertisement (hello/discovery response).'''
|
|
8
8
|
|
|
9
9
|
from functools import cached_property
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
##
|
|
3
|
-
##
|
|
4
|
-
## author: Lars Op den Kamp (lars@opdenkamp.
|
|
5
|
-
## copyright (c) 2026 Op den Kamp IT Solutions
|
|
6
|
-
|
|
1
|
+
######################################################
|
|
2
|
+
## MX Remote Python Interface ##
|
|
3
|
+
## ##
|
|
4
|
+
## author: Lars Op den Kamp (lars@opdenkamp-it.nl) ##
|
|
5
|
+
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
|
|
6
|
+
######################################################
|
|
7
7
|
'''Protocol frame containing all configured links for a device.'''
|
|
8
8
|
|
|
9
9
|
from functools import cached_property
|