public unsafe static extern SDRplayIO.mir_sdr_ErrT mir_sdr_DownConvert(short *xin, short *xi, short *xq, uint SamplesPerPacket, SDRplayIO.mir_sdr_If_kHzT ifType, uint Decimation, uint Preset);
public static extern SDRplayIO.mir_sdr_ErrT mir_sdr_Init(int gRdB, double fsMHz, double rfMHz, SDRplayIO.mir_sdr_Bw_MHzT bwType, SDRplayIO.mir_sdr_If_kHzT ifType, out int samplesPerPacket);
public unsafe void SDRplay_Initalisation() { int DownSampleFactor; bool DownconversionEnabledTS; SDRplayIO.mir_sdr_ErrT res; Running = true; res = NativeMethods.mir_sdr_Init(GainReduction, (SampleRateTable[SampleRateIndex] / 1e3), NominalFrequency, Bandwidth, IFFrequency, out NoUsbSamplesReturned); if (res == SDRplayIO.mir_sdr_ErrT.mir_sdr_Success) { NativeMethods.mir_sdr_SetDcMode(1, 0); NativeMethods.mir_sdr_SetGrParams(0, LNAGRThresh); NativeMethods.mir_sdr_SetGr(GainReduction, 1, 0); NativeMethods.mir_sdr_ResetUpdateFlags(1, 1, 1); if (IBuffer != null) { IBuffer.Dispose(); } if (QBuffer != null) { QBuffer.Dispose(); } if (IQBuffer != null) { IQBuffer.Dispose(); } if (IBufferDecimation != null) { IBufferDecimation.Dispose(); } if (QBufferDecimation != null) { QBufferDecimation.Dispose(); } //Adjust Buffer size depending on downsampled or not. DownSampleFactor = SampleRateIndex; DownconversionEnabledTS = DownconversionEnabled; if (IFFrequency == SDRplayIO.mir_sdr_If_kHzT.mir_sdr_IF_Zero) { if (DownSampleTable[DownSampleFactor] != 0) { NumberOfSamples = NoUsbSamplesReturned / DownSampleTable[DownSampleFactor]; } else { NumberOfSamples = NoUsbSamplesReturned; } } else { if ((((SampleRateIndex == 15) && (Bandwidth == SDRplayIO.mir_sdr_Bw_MHzT.mir_sdr_BW_1_536) && (IFFrequency == SDRplayIO.mir_sdr_If_kHzT.mir_sdr_IF_2_048)) || ((SampleRateIndex == 8) && (Bandwidth == SDRplayIO.mir_sdr_Bw_MHzT.mir_sdr_BW_0_200) && (IFFrequency == SDRplayIO.mir_sdr_If_kHzT.mir_sdr_IF_0_450)) || ((SampleRateIndex == 8) && (Bandwidth == SDRplayIO.mir_sdr_Bw_MHzT.mir_sdr_BW_0_300) && (IFFrequency == SDRplayIO.mir_sdr_If_kHzT.mir_sdr_IF_0_450))) && DownconversionEnabledTS) { Decimation = 4; IFTypeDecimation = IFFrequency; NumberOfSamples = (NoUsbSamplesReturned >> 2); IBufferDecimation = UnsafeBuffer.Create(NumberOfSamples, sizeof(short)); QBufferDecimation = UnsafeBuffer.Create(NumberOfSamples, sizeof(short)); IDecimation = (short *)IBufferDecimation; QDecimation = (short *)QBufferDecimation; } if (((SampleRateIndex == 8) && (Bandwidth == SDRplayIO.mir_sdr_Bw_MHzT.mir_sdr_BW_0_600) && (IFFrequency == SDRplayIO.mir_sdr_If_kHzT.mir_sdr_IF_0_450)) && DownconversionEnabledTS) { Decimation = 2; IFTypeDecimation = IFFrequency; NumberOfSamples = (NoUsbSamplesReturned >> 1); IBufferDecimation = UnsafeBuffer.Create(NumberOfSamples, sizeof(short)); QBufferDecimation = UnsafeBuffer.Create(NumberOfSamples, sizeof(short)); IDecimation = (short *)IBufferDecimation; QDecimation = (short *)QBufferDecimation; } } // Allocate Buffers IBuffer = UnsafeBuffer.Create(NoUsbSamplesReturned, sizeof(short)); QBuffer = UnsafeBuffer.Create(NoUsbSamplesReturned, sizeof(short)); IQBuffer = UnsafeBuffer.Create(NumberOfSamples, sizeof(Complex)); } else { MessageBox.Show("mir_sdr_Init error code: " + res); Stop(); return; } _ReaderThread = new Thread(() => ReaderThread(DownSampleFactor, DownconversionEnabledTS)); //, DecimationThreadsafe, DownconversionEnabledTS) _ReaderThread.Name = "SDRplay Rx Thread"; _ReaderThread.Priority = ThreadPriority.Highest; _ReaderThread.Start(); }