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);
Exemple #3
0
        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();
        }