Node SDRs: pin OP25 and each service to a dongle by serial (node-26#11)
Pairs with node-26 feat/sdr-pins. NodeRecord gains sdr_pins
(service -> serial), sdr_devices and op25_sdr_serial, mirrored from the
node's checkin. PATCH /nodes/{id} validates pins (known services, one
dongle per service) and sends priority/pins as a 'set_sdr_config'
command, never a config re-push. The node restarts OP25 only when OP25's
own dongle changes. The node page's section becomes 'SDRs' with an OP25
SDR dropdown ('Automatic (first SDR)' + detected dongles) and a
per-service dongle dropdown ('Any spare SDR'), plus duplicate-serial and
double-pin warnings.
Verified: c2-core pytest 490 passed; frontend tsc --noEmit clean.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
c95498e7fe
commit
fb2d737d6f
@@ -68,6 +68,10 @@ class NodeRecord(BaseModel):
|
||||
# checkin, which is the source of truth; set via PATCH /nodes/{id}.
|
||||
secondary_sdr_priority: List[str] = []
|
||||
secondary_sdr_running: Optional[List[str]] = None # what the node reports actually running
|
||||
# node-26#11: service (op25/adsb/ais) -> dongle serial; absent = automatic.
|
||||
sdr_pins: Dict[str, str] = {}
|
||||
sdr_devices: Optional[List[Dict[str, Any]]] = None # [{index, serial, name, duplicate_serial}] from checkin
|
||||
op25_sdr_serial: Optional[str] = None # the dongle OP25 is actually using, per the node
|
||||
sdr_count: Optional[int] = None # self-reported by the node's checkin; None = never reported
|
||||
enforce_override_timeout: bool = True
|
||||
is_overridden: bool = False
|
||||
|
||||
Reference in New Issue
Block a user