program dmr_diagnostics_test; {$MODE Delphi} uses {$IFDEF UNIX}cthreads,{$ENDIF} Classes, SysUtils, DMRDiagnostics; procedure Check(Condition: Boolean; const Message_: string); begin if not Condition then begin WriteLn(Message_); Halt(1); end; end; function SizeOfFile(const Name: string): Int64; var S: TFileStream; begin S := TFileStream.Create(Name, fmOpenRead or fmShareDenyNone); try Result := S.Size; finally S.Free; end; end; var D: TDMRDiagnosticCapture; IQ: array[0..11] of Byte; L, R: array[0..1] of Single; Burst: array[0..143] of Byte; Base: string; i: Integer; begin for i := 0 to High(IQ) do IQ[i] := i; L[0] := 0.25; L[1] := -0.5; R[0] := 0.75; R[1] := 0.5; for i := 0 to High(Burst) do Burst[i] := i and 3; D := TDMRDiagnosticCapture.Create; try Base := D.Start(2, 192000, 145500000, 145500000); D.FeedIQ24BE(IQ, Length(IQ)); D.FeedDemod(L, R, Length(L)); D.FeedBurst(Burst, Length(Burst)); D.Stop; Check(SizeOfFile(Base + '.iq24be') = Length(IQ), 'IQ dump size mismatch'); Check(SizeOfFile(Base + '.demod_f32le') = Length(L) * SizeOf(Single), 'demod dump size mismatch'); Check(SizeOfFile(Base + '.bursts_u8') = Length(Burst), 'burst dump size mismatch'); Check(FileExists(Base + '.json'), 'metadata was not written'); Check(FileExists(Base + '.stats.txt'), 'drop statistics were not written'); DeleteFile(Base + '.iq24be'); DeleteFile(Base + '.demod_f32le'); DeleteFile(Base + '.bursts_u8'); DeleteFile(Base + '.json'); DeleteFile(Base + '.stats.txt'); WriteLn('DMR diagnostic capture test passed'); finally D.Free; end; end.