mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 18:43:51 +00:00
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:
+30
-1
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user