mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +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:
@@ -95,6 +95,7 @@ type
|
||||
procedure SendFullHP; override;
|
||||
procedure SendPTT(Active: Boolean); override;
|
||||
procedure SetRxGain(ModeIdx: Integer; GainDb: Integer); override;
|
||||
function ReadTelemetry(out TempC, RSSIdB: Double): Boolean; override;
|
||||
end;
|
||||
|
||||
// Стабильный 6-байтовый ключ (synthetic MAC) из serial/URI — для per-device
|
||||
@@ -578,4 +579,39 @@ begin
|
||||
if FConnected then ApplyGain;
|
||||
end;
|
||||
|
||||
function TPlutoBackend.ReadTelemetry(out TempC, RSSIdB: Double): Boolean;
|
||||
// Опрос аппаратной телеметрии ad9361-phy (вызывается контроллером, не из RX-потока):
|
||||
// temp0/input — температура чипа в миллиградусах C (longlong);
|
||||
// voltage0/rssi — RSSI входного тракта в дБ (double; строка вида '12.34 dB',
|
||||
// libiio парсит ведущее число). Валиден только во время приёма.
|
||||
var
|
||||
Ch: Piio_channel;
|
||||
raw: clonglong;
|
||||
d: cdouble;
|
||||
begin
|
||||
TempC := TELEMETRY_NONE;
|
||||
RSSIdB := TELEMETRY_NONE;
|
||||
Result := False;
|
||||
if (not FConnected) or (FPhy = nil) or (not IIOLoaded) then Exit;
|
||||
|
||||
Ch := iio_device_find_channel(FPhy, 'temp0', 0);
|
||||
if (Ch <> nil) and (iio_channel_attr_read_longlong(Ch, 'input', raw) = 0) then
|
||||
begin
|
||||
TempC := raw / 1000.0;
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
// RSSI имеет смысл только при активном RX-стриме (иначе чтение даёт ошибку/мусор).
|
||||
if FStreaming then
|
||||
begin
|
||||
Ch := iio_device_find_channel(FPhy, 'voltage0', 0);
|
||||
if (Ch <> nil) and Assigned(iio_channel_attr_read_double)
|
||||
and (iio_channel_attr_read_double(Ch, 'rssi', d) = 0) then
|
||||
begin
|
||||
RSSIdB := d;
|
||||
Result := True;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user