mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
fix flush
This commit is contained in:
@@ -142,6 +142,7 @@ type
|
||||
procedure WriteDouble(Left, Right: Double);
|
||||
// Convenience: массив Single
|
||||
procedure Write(const Left, Right: array of Single; Count: Integer);
|
||||
procedure Clear;
|
||||
|
||||
property IsOpen: Boolean read FOpen;
|
||||
property LastError: string read GetLastError;
|
||||
@@ -542,6 +543,18 @@ begin
|
||||
FOpen := False;
|
||||
end;
|
||||
|
||||
procedure TAudioOutput.Clear;
|
||||
begin
|
||||
FMutex.Enter;
|
||||
try
|
||||
FInPt := 0;
|
||||
FOutPt := 0;
|
||||
FillChar(FBuf, SizeOf(FBuf), 0);
|
||||
finally
|
||||
FMutex.Leave;
|
||||
end;
|
||||
end;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// WriteDouble — точная копия audio_write() из оригинала
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
@@ -4444,7 +4444,10 @@ begin
|
||||
end;
|
||||
|
||||
procedure TMainForm.ApplyMOX(Active: Boolean);
|
||||
var
|
||||
WasTransmitting: Boolean;
|
||||
begin
|
||||
WasTransmitting := FTransmitting;
|
||||
FTransmitting := Active;
|
||||
FDUCPendingCount := 0;
|
||||
if FTransmitting then
|
||||
@@ -4468,6 +4471,12 @@ begin
|
||||
if FWDSPReady then
|
||||
begin
|
||||
FDSPEngine.SetTXRun(FTransmitting);
|
||||
if WasTransmitting and (not FTransmitting) and (not FDisplayDuplex) then
|
||||
begin
|
||||
FDSPEngine.FlushRX;
|
||||
if Assigned(FAudioOut) then
|
||||
FAudioOut.Clear;
|
||||
end;
|
||||
// SetTXRun переключает FActiveDisplayID на TX_DISP_ID; при DUP возвращаем
|
||||
// источник на RX, чтобы видеть приём во время передачи.
|
||||
if FTransmitting and FDisplayDuplex then
|
||||
|
||||
@@ -324,6 +324,7 @@ type
|
||||
procedure PushDDCPacket(const Buf: array of Byte;
|
||||
DataOffset: Integer;
|
||||
IQPairs: Integer);
|
||||
procedure FlushRX;
|
||||
|
||||
// RX управление
|
||||
procedure SetMode(Mode: Integer);
|
||||
@@ -1112,6 +1113,17 @@ begin
|
||||
RTLEventSetEvent(FQueueSem); // будим DSP поток (как sem_post в piHPSDR)
|
||||
end;
|
||||
|
||||
procedure TWDSPEngine.FlushRX;
|
||||
begin
|
||||
FQueueHead := FQueueTail;
|
||||
FRXAccPos := 0;
|
||||
FDispPos := 0;
|
||||
if Length(FRXAccI) > 0 then FillChar(FRXAccI[0], Length(FRXAccI) * SizeOf(Double), 0);
|
||||
if Length(FRXAccQ) > 0 then FillChar(FRXAccQ[0], Length(FRXAccQ) * SizeOf(Double), 0);
|
||||
if Length(FRXIn) > 0 then FillChar(FRXIn[0], Length(FRXIn) * SizeOf(Double), 0);
|
||||
if Length(FRXOut) > 0 then FillChar(FRXOut[0], Length(FRXOut) * SizeOf(Double), 0);
|
||||
end;
|
||||
|
||||
procedure TWDSPEngine.PushIQItemToDSP(const Item: TIQQueueItem);
|
||||
// Вызывается из DSP потока — декодирует IQ и накапливает до FBufSize
|
||||
var
|
||||
|
||||
Reference in New Issue
Block a user