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