Skip to content

IcomCommander

Serialized CI-V command executor with priority queuing (wfview-style). Most users should use the high-level Radio API (via create_radio), which manages an IcomCommander internally.

rigplane.commands.commander.IcomCommander

wfview-style serialized command executor with priorities.

Features: - strict in-order execution within priority levels - optional dedup for background polling keys - transaction helper (snapshot/restore) - interference detection for one task's read-modify-write

interference_scope() async

Detect concurrent commands during this task's read-modify-write.

While the scope is active, every non-BACKGROUND frame the worker dispatches for another task marks it (MOR-3743). Nothing is delayed or reordered: the owner watches scope.interfered and decides itself — typically by passing scope.is_current to the SET's wire seam and retrying the whole operation when the SET is refused. Several scopes may be live at once; a frame marks every scope whose owner did not enqueue it. Cancellation and exceptions deregister the scope on exit.

note_foreign_dispatch(enqueued_by, priority)

Mark live scopes for a frame about to reach the wire (MOR-3743).

One marking rule shared by the worker loop and any dispatch that bypasses the commander queue (direct raw CI-V transactions): every frame not on a polling-read lane (BACKGROUND, KEYING) marks each live scope its owner did not enqueue, and the owner's own task never marks its own scope. Fail-safe: a false positive costs the owner a retry, never a delay.

send(payload, *, priority=Priority.NORMAL, key=None, dedupe=False, timeout=None, wait_response=True, wait_dispatch=True, is_current=None) async

Enqueue a CI-V command.

Parameters:

Name Type Description Default
wait_dispatch bool

When True (default), await the worker dispatching this item and return its result — the historical blocking contract for user commands. When False, return None immediately after enqueueing without awaiting the worker; the item is still executed, and its future resolved by the worker, but the caller does not observe it. Used by the background poller so the poll burst does not park the poll loop (responses arrive via the RX path, not this future). For Priority.BACKGROUND fire-and-forget sends a defensive _MAX_BG_INFLIGHT cap bounds outstanding work (drop-newest, raising BackgroundSendDropped).

True

Priority Levels

rigplane.commands.commander.Priority

Bases: IntEnum