feat: Pluto board name + hardware telemetry in status bar

- Status bar / web now show Pluto/LibreSDR model + serial instead of
  "Unknown Board" (BoardDisplayName in controller; UI just renders it).
- Field 3 shows AD936x chip temperature + RX RSSI for Pluto (no PA →
  Supply only for openHPSDR). Polled via backend.ReadTelemetry (~2 Hz),
  filtered for sensor glitches (plausibility window + slew-limit, with
  anti-stick) — fixes rare bogus -15°C readings.
- Add libiio binding iio_channel_attr_read_double.
- Remove stale root pluto_integration.MD (superseded by
  doc/PLUTO_INTEGRATION_PLAN.md).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-19 11:31:27 +03:00
co-authored by Claude Opus 4.8
parent 4d253909ca
commit 1321e415f7
8 changed files with 199 additions and 522 deletions
+30 -1
View File
@@ -353,6 +353,7 @@ type
// Public UI update (called from sync objects)
procedure UpdateTXMeters;
procedure UpdateStatusField7; // поле 7: PLL (HPSDR) или beacon (Pluto)
procedure UpdateStatusField3; // поле 3: Supply (HPSDR) или Temp/RSSI (Pluto)
function BeaconStatusText: string; // компактный статус QO-100 beacon lock
procedure DoUpdateDDCSeq(DDCIdx: Integer; Seq: LongWord);
@@ -2972,6 +2973,8 @@ begin
// QO-100 beacon lock: одна итерация контура (no-op если лок выключен).
FController.ServiceBeaconLock;
// Pluto: опрос температуры/RSSI (троттлинг внутри; no-op для HPSDR).
FController.ServicePlutoTelemetry;
// Сглаженное среднее (EMA)
FSMeterAvg := FSMeterAvg * (1.0 - AVG_ALPHA) + FController.FLastSMeter * AVG_ALPHA;
@@ -3179,6 +3182,32 @@ procedure TMainForm.UpdateTXMeters;
// в TRadioController.ApplyHPStatus.
begin
UpdateStatusField7; // PLL (openHPSDR) или статус beacon lock (Pluto)
UpdateStatusField3; // Supply (openHPSDR) или Temp/RSSI (Pluto)
end;
procedure TMainForm.UpdateStatusField3;
// Поле 3 статус-бара. openHPSDR — supply V/A (HP status). Pluto — температура
// чипа и RSSI приёмника (нет PA → supply неприменим). Значения берём из
// контроллера (FLastPlutoTempC/RSSIdB / FLastSupplyV/A) — логика опроса в ядре.
var
S: string;
begin
// Pluto: нет PA/supply — показываем аппаратную телеметрию AD936x.
if FController.IsPluto then
begin
if not FController.FRunning then begin SetStatusText(3, 'Pluto --'); Exit; end;
S := '';
if FController.FLastPlutoTempC > TELEMETRY_NONE then
S := Format('Temp %.0fC', [FController.FLastPlutoTempC]);
if FController.FLastPlutoRSSIdB > TELEMETRY_NONE then
begin
if S <> '' then S := S + ' ';
S := S + Format('RSSI %.0fdB', [FController.FLastPlutoRSSIdB]);
end;
if S = '' then S := 'Pluto --';
SetStatusText(3, S);
Exit;
end;
if not FController.FRunning then
begin
@@ -3674,7 +3703,7 @@ begin
UpdateVfoDisplay;
SetStatusText(1, 'IP: ' + FController.FNetwork.Device.IPAddress);
SetStatusText(0, 'Board: ' + BoardTypeName(FController.FNetwork.Device.BoardType));
SetStatusText(0, 'Board: ' + FController.BoardDisplayName);
FSpecView.AGCTop := FController.FAGCTop;
SetStatusText(6, 'SEQ OK');
SetStatusText(2, 'Running');