Skip to content

Implement per-channel remote processing (Remote: All / Selected… / None + chooser) - #47

Open
huberp with Copilot wants to merge 5 commits into
mainfrom
copilot/implement-per-channel-remote-processing
Open

huberp with Copilot wants to merge 5 commits into
mainfrom
copilot/implement-per-channel-remote-processing

Conversation

Copilot AI commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

Replaces the binary "Show Remote" toggle with a three-mode selector (All / Selected… / None) and a per-channel chooser popup. In Selected mode, only channels enabled in the uint8_t bitmask are ingested — non-selected channels are never stored, never rendered, and do not contribute to RMS or cancellation computations.

New component — RemoteChannelChooser

  • RemoteChannelChooserComponent: 8 rows (Ch 1–8), each with a toggle, colour swatch, and remote label pulled from RemoteInstanceInfo (most-recently-seen instance wins per channel index).
  • "All" / "None" quick-toggle buttons.
  • onMaskChanged callback fires on every change; updateRemoteInfos() refreshes label/colour display.

ScopeDisplay

  • Added clearRemoteChannelsNotInMask(uint8_t enabledMask) — deactivates remote slots whose bit is not set, with safe range guard on the shift.

PluginEditor — UI + logic

  • Replaced remoteDisplayToggle with remoteModeLabel + remoteModeCombo + remoteChooseButton (enabled only in Selected mode).
  • timerCallback() now branches on RemoteMode:
    • NonesetReceiveEnabled(false), clear on transition.
    • All → ingest everything as before.
    • Selected → receive enabled, but packets/infos filtered by mask before writeRemotePackets(); calls clearRemoteChannelsNotInMask() on mask change.
  • Selecting Selected… in the combo auto-opens the CallOutBox chooser; Choose… button reopens it.
// timerCallback — Selected mode filtering (deduped via lambda)
const auto isChannelEnabled = [this](int instanceIndex) -> bool {
    const int ch = instanceIndex - 1;
    return ch >= 0 && ch < 8 && (((m_remoteChannelMask) >> static_cast<unsigned>(ch)) & 1u);
};

PluginProcessor — state persistence

  • Added m_remoteMode (atomic int, 0/1/2) and m_remoteChannelMask (atomic uint8_t) with getters/setters.
  • Both persisted in getStateInformation / setStateInformation so mode and mask survive DAW session save/reload.

Copilot AI changed the title [WIP] Add per-channel remote processing feature to Network UI Implement per-channel remote processing (Remote: All / Selected… / None + chooser) Apr 13, 2026
Copilot AI requested a review from huberp April 13, 2026 17:59
@huberp
huberp marked this pull request as ready for review April 13, 2026 20:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement per-channel remote processing (Remote: All / Selected… / None + chooser)

2 participants