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
@@ -58,6 +58,12 @@ export interface NodeRecord {
|
||||
secondary_sdr_priority?: string[];
|
||||
/** What the node's last checkin reported actually running. */
|
||||
secondary_sdr_running?: string[] | null;
|
||||
/** node-26#11: service (op25/adsb/ais) -> dongle serial; absent = automatic. */
|
||||
sdr_pins?: Record<string, string>;
|
||||
/** Dongles the node detected, from its checkin; null/absent = not reported. */
|
||||
sdr_devices?: SdrDevice[] | null;
|
||||
/** The dongle OP25 is actually using, per the node. */
|
||||
op25_sdr_serial?: string | null;
|
||||
sdr_count?: number | null; // null = never reported
|
||||
enforce_override_timeout?: boolean;
|
||||
is_overridden?: boolean;
|
||||
@@ -65,6 +71,13 @@ export interface NodeRecord {
|
||||
override_timeout_at?: string | null;
|
||||
}
|
||||
|
||||
export interface SdrDevice {
|
||||
index: number;
|
||||
serial: string | null;
|
||||
name: string;
|
||||
duplicate_serial: boolean;
|
||||
}
|
||||
|
||||
export interface AircraftTrack {
|
||||
icao: string;
|
||||
org_id?: string;
|
||||
|
||||
Reference in New Issue
Block a user