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 |
True
|
Priority Levels¶
rigplane.commands.commander.Priority
¶
Bases: IntEnum