Imports System.Windows.Forms Imports System.Windows.Forms.Application Imports System.math Imports System.IO Imports System.Threading.Thread Imports SDRPlay2RSS.RSS ' issue ' Dick Flagg ' No - I am not running with the filter bank on - but I had forgotten to ' set a filter bank path. I had selected the correct antenna port and RSS ' showed a nice plain deep blue streaming display - but the thing was very ' insensitive - about 30 dB less sensitive to signals than usual. After I ' established the taps filter path it runs with normal good sensitiivity. Public Class SDRPlay2RSS 'Dim stopflag As Boolean = False Dim bgcolor As Color Shared MHz As Double = 1000000.0 Shared kHz As Double = 1000.0 Dim device As SDRPlay 'Dim pfb As Boolean = False Dim gr As Integer = 40 Dim offset As Double = 0.1 Dim backgroundaveragecount As Integer = 10 Dim Streamingrecordtime As Double = 10 Dim Integraterecordtime As Double = 10 Dim StreamingDataPath As String = "." Dim IntegrateDataPath As String = "." Dim FilterTapsPath As String = "." Dim streamingbusy As Boolean = False Dim integratebusy As Boolean = False Dim bgtimer As System.Threading.Timer Dim obs As ObservatoryData Dim devconfig As SDRPlay.rspConfig Dim dB As Double = 1.2589254117941673 Private Sub SDRPlay2RSS_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing ' closing the application does not raise the formclosing event obs.ObservatoryData_FormClosing(Nothing, Nothing) End Sub 'Dim tb As ToolBar Private Sub SDRPlayTest_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load RFBandwidthBox.SelectedIndex = 7 GainReductionBox.Text = sprintf("Gain reduction (%d)", gr) OffsetLabel.Text = sprintf("%-3.1f", offset) FrameSizeBox1.SelectedIndex = 5 StrDataSinkBox.SelectedIndex = 0 IntDataSinkBox.SelectedIndex = 0 SIDRetriesBox.SelectedIndex = 0 With devconfig .biasT = False .rsp1abroadcastnotchEnable = False .rsp1adabnotchEnable = False .rsp2notchEnable = False .antennaSelect = SDRPlay.mir_sdr_RSPII_AntennaSelectT.mir_sdr_RSPII_ANTENNA_A End With ' process the command line arguments Dim cmdlinelist() As String = Environment.CommandLine.Split(New String() {" -", ",", ";"}, StringSplitOptions.RemoveEmptyEntries) For i As Integer = 1 To cmdlinelist.Length - 1 Dim s As String = cmdlinelist(i) ' s(0) is the executable If s.ToLower.StartsWith("run") Then ' run immediate runimmediate = True ' is there a configuration file specified? If s.Length > 3 Then loadconfig(s.Substring(3).Trim()) ' elseif: other command line options End If Next ' load if not done already If Not runimmediate Then filelast = loadconfig(My.Computer.FileSystem.CombinePath(My.Computer.FileSystem.CurrentDirectory, "ReceiverLast.config")) End If If obs Is Nothing Then obs = New ObservatoryData StatusText.Text = "Initialized." ' for background-subtraction refresh bgtimer = New System.Threading.Timer(AddressOf bgtimerhandler) ' SPSReader test 'Dim x As New RSS.SPSReader("C:\Users\pc\Documents\Personal\Astronomy\Projects\LowFrequencyRadioTelescope\Matlab\Spectra\20160525T121000Solar.sps") 'Dim r() As Short = x.spectrum 'x.close() 'tb = New ToolBar 'tb.MinimumSize = New Size(20, 25) 'tb.Height = 25 'tb.ButtonSize = New Size(18, 18) 'tb.BringToFront() 'Dim tsPlus As New ToolBarButton 'tsPlus.Text = "+" 'tsPlus.ToolTipText = "add a configuration to the toolbar" 'tb.Buttons.Add(tsPlus) 'AddHandler tb.ButtonClick, AddressOf toolbarhandler 'Controls.Add(tb) 'Debug.Print("test") End Sub Private Sub StreamingButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StreamingButton.Click If Not streamingbusy Then IntegrateButton.Enabled = False IntTimeBox.Enabled = False streamingbusy = True StatusText.Text = "Streaming ..." bgcolor = StreamingButton.BackColor StreamingButton.BackColor = Color.Yellow Dim rfbw As SDRPlay.mir_sdr_Bw_MHzT Select Case RFBandwidthBox.SelectedIndex Case 0 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_0_200 Case 1 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_0_300 Case 2 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_0_600 Case 3 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_1_536 Case 4 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_5_000 Case 5 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_6_000 Case 6 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_7_000 Case 7 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_8_000 End Select DoEvents() ' center frequency and span Dim freqcent = CDbl(CenterFrequencyBox.Text) * MHz Dim freqspan = CDbl(SampleRateBox.Text) * MHz Dim N As Integer = 1 << (FrameSizeBox1.SelectedIndex + 3) Try Dim antenna As SDRPlay.mir_sdr_RSPII_AntennaSelectT If Me.AntennaASelect.Checked Then antenna = SDRPlay.mir_sdr_RSPII_AntennaSelectT.mir_sdr_RSPII_ANTENNA_A AntennaHiZSelect.Enabled = False ElseIf AntennaBSelect.Checked Then antenna = SDRPlay.mir_sdr_RSPII_AntennaSelectT.mir_sdr_RSPII_ANTENNA_B AntennaHiZSelect.Enabled = False ElseIf AntennaHiZSelect.Checked Then antenna = SDRPlay.mir_sdr_RSPII_AntennaSelectT.mir_sdr_RSPII_HiZ AntennaASelect.Enabled = False AntennaBSelect.Enabled = False End If AntennaHiZSelect.Enabled = False If rfbw / kHz > freqspan / MHz Then Throw (New ArgumentException(sprintf("rf passband (%4.2f MHz) > sample rate (%4.2f MHz)", rfbw / kHz, freqspan / MHz))) End If device = New SDRPlay(freqcent, rfbw, freqspan, N, devconfig, SwitchedAntennaCheckBox.Checked, AddressOf statustextcallback) device.GainReduction = gr device.Offset = offset device.backgroundaveragecount = backgroundaveragecount ' not used device.StreamingDuration = CLng(Streamingrecordtime * device.SampleRate / device.N) device.RSSScale = CDbl(RSSScaleBox.Text) device.LogScale = LogScaleMenuItem.Checked device.winflag = StreamWindowingMenuItem.Checked ' record range Dim recordspan As Double Try recordspan = CDbl(RecordRangeBox.Text) * MHz Catch recordspan = freqspan End Try Dim rr1, rr2 As Double rr2 = freqcent + freqspan / 2 - freqspan / N rr1 = freqcent - recordspan / 2 rr2 = freqcent + recordspan / 2 ' output destination Dim outfile As SDRPlay.DataSinkType Select Case StrDataSinkBox.SelectedIndex Case 0 outfile = SDRPlay.DataSinkType.SPS Case 1 : outfile = SDRPlay.DataSinkType.File End Select Try device.Streaming(devconfig.do_exit, rr1, rr2, outfile, StatusText, obs.data, StreamingDataPath) statustextcallback("Done.") Catch ex As DirectoryNotFoundException statustextcallback(Me.GetType.Name & ".Integrate - " & ex.Message) SDRPlay.log(ex, "SDRPlay2RSS.log") Catch ex As IndexOutOfRangeException statustextcallback("SDRPlayTest.Streaming - " & ex.Message) SDRPlay.log(ex, "SDRPlay2RSS.log") End Try offset = device.Offset gr = device.GainReduction device = Nothing Catch ex As IOException statustextcallback(Me.GetType.Name & ".Integrate - " & ex.GetType.ToString & " (define observatory?)") Sleep(3000) SDRPlay.log(ex, "SDRPlay2RSS.log") Catch ex As NullReferenceException statustextcallback(Me.GetType.Name & ".Integrate - " & ex.GetType.ToString & " (define observatory?)") Sleep(3000) SDRPlay.log(ex, "SDRPlay2RSS.log") Catch ex As ArgumentException statustextcallback("SDRPlayTest.Streaming - " & ex.Message) SDRPlay.log(ex, "SDRPlay2RSS.log") End Try StreamingButton.BackColor = bgcolor IntegrateButton.Enabled = True IntTimeBox.Enabled = True device = Nothing 'stopflag = False streamingbusy = False Else devconfig.do_exit = Not devconfig.do_exit 'stopflag = Not stopflag End If AntennaHiZSelect.Enabled = True End Sub Private Sub IntegrateButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IntegrateButton.Click If Not integratebusy AndAlso device Is Nothing Then integratebusy = True devconfig.do_exit = False 'stopflag = False DoEvents() StatusText.Text = "Integrating ..." StreamingButton.Enabled = False Dim rfbw As SDRPlay.mir_sdr_Bw_MHzT Select Case RFBandwidthBox.SelectedIndex Case 0 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_0_200 Case 1 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_0_300 Case 2 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_0_600 Case 3 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_1_536 Case 4 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_5_000 Case 5 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_6_000 Case 6 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_7_000 Case 7 : rfbw = SDRPlay.mir_sdr_Bw_MHzT.mir_sdr_BW_8_000 End Select DoEvents() ' center frequency and span Dim freqcent = CDbl(CenterFrequencyBox.Text) * MHz Dim freqspan = CDbl(SampleRateBox.Text) * MHz Dim N As Integer = 1 << (FrameSizeBox1.SelectedIndex + 3) ' range of frequencies that is recorded to RSS or to a file Dim rr1, rr2 As Double Try Dim rs() As String = RecordRangeBox.Text.Split(New Char() {","c, " "c, "-"c, ":"c, ";"c}, System.StringSplitOptions.RemoveEmptyEntries) Select Case rs.Length Case 1 Dim recordspan As Double = CDbl(rs(0)) * MHz rr1 = freqcent - recordspan / 2 rr2 = freqcent + recordspan / 2 Case 2 rr1 = CDbl(rs(0)) * MHz rr2 = CDbl(rs(1)) * MHz End Select Catch ex As Exception statustextcallback(Me.GetType.Name & ".Integrate - " & ex.GetType.ToString) SDRPlay.log(ex, "SDRPlay2RSS.log") End Try If rfbw / kHz > freqspan / MHz Then StatusText.Text = sprintf("%s.Integrate - rf passband (%4.2f MHz) > sample rate (%4.2f MHz)", Me.GetType.Name, rfbw / kHz, freqspan / MHz) Else Dim antenna As SDRPlay.mir_sdr_RSPII_AntennaSelectT If Me.AntennaASelect.Checked Then antenna = SDRPlay.mir_sdr_RSPII_AntennaSelectT.mir_sdr_RSPII_ANTENNA_A AntennaHiZSelect.Enabled = False ElseIf AntennaBSelect.Checked Then antenna = SDRPlay.mir_sdr_RSPII_AntennaSelectT.mir_sdr_RSPII_ANTENNA_B AntennaHiZSelect.Enabled = False ElseIf AntennaHiZSelect.Checked Then antenna = SDRPlay.mir_sdr_RSPII_AntennaSelectT.mir_sdr_RSPII_HiZ AntennaASelect.Enabled = False AntennaBSelect.Enabled = False End If AntennaHiZSelect.Enabled = False Try ' create the device device = New SDRPlay(freqcent, rfbw, freqspan, N, devconfig, SwitchedAntennaCheckBox.Checked, AddressOf statustextcallback) ' update parameters device.GainReduction = gr device.Offset = offset device.RSSScale = CDbl(RSSScaleBox.Text) device.backgroundaveragecount = backgroundaveragecount device.StreamingDuration = CInt(Integraterecordtime * device.SampleRate / N) ' in frames device.LogScale = LogScaleMenuItem.Checked device.winflag = WindowFunctionMenuItem.Checked device.statuscallback = AddressOf statustextcallback device.switchedpausesamples = swantpausesamples ' record background color bgcolor = IntegrateButton.BackColor ' set new background color IntegrateButton.BackColor = Color.Yellow ' data destination Dim ds As New SDRPlay.DataSinkType Select Case IntDataSinkBox.SelectedIndex Case 0 : ds = SDRPlay.DataSinkType.RSS ' stream to RSS Case 1 : ds = SDRPlay.DataSinkType.SPS ' stream to a .sps file 'Case 2 : ds = SDRPlay.DataSinkType.File ' stream to a binary file Case 2 : ds = SDRPlay.DataSinkType.SID ' stream to a SID file End Select Try device.winflag = WindowFunctionMenuItem.Checked device.Integrating(CDbl(IntTimeBox.Text), rr1, rr2, devconfig, _ Integraterecordtime, obs, ds, SIDRetriesBox.SelectedIndex, IntegrateDataPath, FilterTapsPath) statustextcallback("Done.") Me.BackgroundSubtractionToolStripMenuItem.Checked = False Catch ex As Exception statustextcallback(Me.GetType.Name & ".Integrate - " & ex.GetType.ToString) SDRPlay.log(ex, "SDRPlay2RSS.log") End Try offset = device.Offset gr = device.GainReduction device = Nothing Catch ex As System.IO.IOException statustextcallback(Me.GetType.Name & ".Integrate - " & ex.GetType.ToString & " (define observatory?)") Sleep(3000) SDRPlay.log(ex, "SDRPlay2RSS.log") Catch ex As NullReferenceException statustextcallback(Me.GetType.Name & ".Integrate - " & ex.GetType.ToString & " (define observatory?)") Sleep(3000) SDRPlay.log(ex, "SDRPlay2RSS.log") Catch ex As ArgumentException statustextcallback(Me.GetType.Name & ".Integrate - " & ex.GetType.ToString) SDRPlay.log(ex, "SDRPlay2RSS.log") End Try End If IntegrateButton.BackColor = bgcolor StreamingButton.Enabled = True ' disable background subtraction BackgroundSubtractionToolStripMenuItem.Checked = False devconfig.backgroundsubtraction = False BgRefresh.Visible = devconfig.backgroundsubtraction device = Nothing devconfig.do_exit = False 'stopflag = False integratebusy = False Else devconfig.do_exit = Not devconfig.do_exit 'stopflag = Not stopflag End If AntennaASelect.Enabled = Not SwitchedAntennaCheckBox.Checked AntennaBSelect.Enabled = Not SwitchedAntennaCheckBox.Checked AntennaHiZSelect.Enabled = Not SwitchedAntennaCheckBox.Checked End Sub Function loadconfig(Optional ByVal filename As String = Nothing) As String If device Is Nothing Then If String.IsNullOrEmpty(filename) Then ' dialog box Dim d As OpenFileDialog d = New OpenFileDialog d.CheckFileExists = True d.Filter = "Config files|*.config" d.Title = "Load configuration" d.RestoreDirectory = True d.ShowDialog() filename = d.FileName End If If Not String.IsNullOrEmpty(filename) AndAlso My.Computer.FileSystem.FileExists(filename) Then ' fetch the text from the file Dim s As String = My.Computer.FileSystem.ReadAllText(filename, System.Text.Encoding.ASCII) ' restore the data to the controls Try : CenterFrequencyBox.Text = XMLTag(s, "centerfrequency", False) : Catch : End Try Try : RFBandwidthBox.SelectedIndex = CInt(XMLTag(s, "rfbandwidth", False)) : Catch : End Try Try : SampleRateBox.Text = XMLTag(s, "samplerate", False) : Catch : End Try Try : FrameSizeBox1.SelectedIndex = CInt(XMLTag(s, "framesize", False)) : Catch : End Try Try : RecordRangeBox.Text = XMLTag(s, "recordrange", False) : Catch : End Try Try : PolyphaseFilterBankToolStripMenuItem.Checked = Not CBool(XMLTag(s, "filterbank", False)) : Catch : End Try PolyphaseFilterBankToolStripMenuItem_Click(Nothing, Nothing) Try : RSSScaleBox.Text = XMLTag(s, "rssscale", False) : Catch : End Try Try : IntTimeBox.Text = XMLTag(s, "integrationtime", False) : Catch : End Try Try : gr = CInt(XMLTag(s, "gainreduction", False)) : Catch : End Try Try : GainReductionBox.Text = sprintf("Gain reduction (%d)", gr) : Catch : End Try Try : offset = CInt(XMLTag(s, "offset", False)) : Catch : End Try Try : OffsetLabel.Text = sprintf("%-3.1f", offset) : Catch : End Try Try : OffsetIncrementBox.Text = XMLTag(s, "offsetincrement", False) : Catch : End Try Try : StreamingDataPath = XMLTag(s, "streamingdatapath", False) : Catch : End Try Try : IntegrateDataPath = XMLTag(s, "integratedatapath", False) : Catch : End Try Try : FilterTapsPath = XMLTag(s, "filtertapspath", False) : Catch : End Try Try : SIDRetriesBox.SelectedIndex = CInt(XMLTag(s, "sidretries", False)) : Catch : End Try Dim obspath As String Try obspath = XMLTag(s, "observatorypath", False) obs = New ObservatoryData(obspath) Catch Throw (New ApplicationException("SDRPlay2RSS.loadconfig - observatory path")) End Try Try : StrDataSinkBox.SelectedIndex = CInt(XMLTag(s, "strdatasinkbox", False)) : Catch : End Try Try : IntDataSinkBox.SelectedIndex = CInt(XMLTag(s, "intdatasinkbox", False)) : Catch : End Try Try : LogScaleMenuItem.Checked = CBool(XMLTag(s, "logscale", False)) : Catch : LogScaleMenuItem.Checked = False : End Try StreamLogScaleMenuItem.Checked = LogScaleMenuItem.Checked Try : WindowFunctionMenuItem.Checked = CBool(XMLTag(s, "windowfunction", False)) : Catch : LogScaleMenuItem.Checked = False : End Try StreamWindowingMenuItem.Checked = WindowFunctionMenuItem.Checked Try : GRLinkCheckBox.Checked = CBool(XMLTag(s, "GRLink", False)) : Catch : LogScaleMenuItem.Checked = False : End Try Try devconfig.backgroundsubtraction = CBool(XMLTag(s, "backgroundaverageenable", False)) BackgroundSubtractionToolStripMenuItem.Checked = devconfig.backgroundsubtraction Catch : End Try Try backgroundaveragecount = CSng(XMLTag(s, "backgroundaveragecount", False)) BackgroundCountMenuItem.Text = sprintf("Background average %d", backgroundaveragecount) Catch : End Try Try Streamingrecordtime = CSng(XMLTag(s, "streamingrecordtime", False)) StreamingRecordTimeToolStripMenuItem.Text = sprintf("Streaming record time %4.2f s", Streamingrecordtime) Catch : End Try Try Integraterecordtime = CSng(XMLTag(s, "integraterecordtime", False)) IntegrateRecordTimeToolStripMenuItem.Text = sprintf("Integrate record time %4.2f s", Integraterecordtime) Catch : End Try Try : AntennaASelect.Checked = CBool(XMLTag(s, "AntennaA", False)) : Catch : End Try Try : AntennaBSelect.Checked = CBool(XMLTag(s, "AntennaB", False)) : Catch : End Try Try : AntennaHiZSelect.Checked = CBool(XMLTag(s, "AntennaHiZ", False)) : Catch : End Try Try SwitchedAntennaCheckBox.Checked = CBool(XMLTag(s, "SwitchedAntenna", False)) AntennaASelect.Enabled = Not SwitchedAntennaCheckBox.Checked AntennaBSelect.Enabled = Not SwitchedAntennaCheckBox.Checked AntennaHiZSelect.Enabled = Not SwitchedAntennaCheckBox.Checked Catch : End Try Try RSP2NotchFilterCB.Checked = CBool(XMLTag(s, "rsp2notchfilt")) RSP1aDabNotchToolStripMenuItem.Checked = CBool(XMLTag(s, "rsp1adab")) RSP1aBcastNotchToolStripMenuItem.Checked = CBool(XMLTag(s, "rsp1abcast")) LNA_CB.Checked = CBool(XMLTag(s, "lna")) Catch : End Try StatusText.Text = "Configuration loaded." Text = sprintf("%s - %s", Me.GetType.Name, My.Computer.FileSystem.GetName(filename)) Return filename Else Return filelast End If Else StatusText.Text = "Acquisition must be closed to load a configuration." Return filelast End If End Function Function saveconfig(Optional ByVal filename As String = Nothing) As String ' file dialog box If String.IsNullOrEmpty(filename) Then Dim d As New SaveFileDialog d.CheckFileExists = True d.Filter = "config files|*.config" d.Title = "Save configuration" d.CheckFileExists = False d.AddExtension = True d.ShowDialog() filename = d.FileName End If If Not String.IsNullOrEmpty(filename) Then ' save the data in the controls Dim s As String = "" s &= XMLEnclose(CenterFrequencyBox.Text, "centerfrequency") & vbNewLine s &= XMLEnclose(RFBandwidthBox.SelectedIndex.ToString, "rfbandwidth") & vbNewLine s &= XMLEnclose(SampleRateBox.Text, "samplerate") & vbNewLine s &= XMLEnclose(FrameSizeBox1.SelectedIndex.ToString, "framesize") & vbNewLine s &= XMLEnclose(IntTimeBox.Text, "integrationtime") & vbNewLine s &= XMLEnclose(RecordRangeBox.Text, "recordrange") & vbNewLine s &= XMLEnclose(PolyphaseFilterBankToolStripMenuItem.Checked.ToString, "filterbank") & vbNewLine s &= XMLEnclose(gr.ToString, "gainreduction") & vbNewLine s &= XMLEnclose(RSSScaleBox.Text, "rssscale") & vbNewLine s &= XMLEnclose(offset.ToString, "offset") & vbNewLine s &= XMLEnclose(OffsetIncrementBox.Text, "offsetincrement") & vbNewLine s &= XMLEnclose(devconfig.backgroundsubtraction.ToString, "backgroundaverageenable") & vbNewLine s &= XMLEnclose(backgroundaveragecount.ToString, "backgroundaveragecount") & vbNewLine s &= XMLEnclose(Streamingrecordtime.ToString, "streamingrecordtime") & vbNewLine s &= XMLEnclose(Integraterecordtime.ToString, "integraterecordtime") & vbNewLine s &= XMLEnclose(StreamingDataPath, "streamingdatapath") & vbNewLine s &= XMLEnclose(IntegrateDataPath, "integratedatapath") & vbNewLine s &= XMLEnclose(FilterTapsPath, "filtertapspath") & vbNewLine s &= XMLEnclose(obs.path, "observatorypath") & vbNewLine s &= XMLEnclose(StrDataSinkBox.SelectedIndex.ToString, "strdatasinkbox") & vbNewLine s &= XMLEnclose(IntDataSinkBox.SelectedIndex.ToString, "intdatasinkbox") & vbNewLine s &= XMLEnclose(LogScaleMenuItem.Checked.ToString, "logscale") & vbNewLine s &= XMLEnclose(WindowFunctionMenuItem.Checked.ToString, "windowfunction") & vbNewLine s &= XMLEnclose(AntennaASelect.Checked.ToString, "AntennaA") & vbNewLine s &= XMLEnclose(AntennaBSelect.Checked.ToString, "AntennaB") & vbNewLine s &= XMLEnclose(AntennaHiZSelect.Checked.ToString, "AntennaHiZ") & vbNewLine s &= XMLEnclose(SwitchedAntennaCheckBox.Checked, "SwitchedAntenna") & vbNewLine s &= XMLEnclose(GRLinkCheckBox.Checked, "GRLink") & vbNewLine s &= XMLEnclose(SIDRetriesBox.SelectedIndex.ToString, "sidretries") & vbNewLine s &= XMLEnclose(RSP2NotchFilterCB.Checked.ToString, "rsp2notchfilt") & vbNewLine s &= XMLEnclose(RSP1aDabNotchToolStripMenuItem.Checked.ToString, "rsp1adab") & vbNewLine s &= XMLEnclose(RSP1aBcastNotchToolStripMenuItem.Checked.ToString, "rsp1abcast") & vbNewLine s &= XMLEnclose(LNA_CB.Checked.ToString, "lna") & vbNewLine 's &= XMLEnclose(.SelectedIndex.ToString, "") & vbNewLine ' write the text to the file My.Computer.FileSystem.WriteAllText(filename, s, False, System.Text.Encoding.ASCII) StatusText.Text = "Configuation saved." Text = sprintf("%s - %s", Me.GetType.Name, My.Computer.FileSystem.GetName(filename)) Return filename Else Return filelast End If End Function Private Sub LoadConfToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LoadConfToolStripMenuItem.Click filelast = loadconfig() End Sub Private Sub SaveConfToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveConfToolStripMenuItem.Click filelast = saveconfig(filelast) End Sub Dim filelast As String = Nothing Private Sub SaveAsMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveAsMenuItem.Click filelast = saveconfig() End Sub Private Sub SDRPlayTest_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed saveconfig(My.Computer.FileSystem.CombinePath(My.Computer.FileSystem.CurrentDirectory, "ReceiverLast.config")) End Sub Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click Do Until device Is Nothing OrElse devconfig.do_exit 'stopflag Sleep(100) DoEvents() Loop Close() End Sub Private Sub GainUpButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GainUpButton.Click If device IsNot Nothing Then If GRLinkCheckBox.Checked Then If LogScaleMenuItem.Checked Then ' shift the offset by 1 dB device.Offset += 1 Else ' scale the gain by 1 dB device.RSSScale = CDbl(RSSScaleBox.Text) * dB RSSScaleBox.Text = sprintf(device.RSSScale, "%5.3f") ' scale the offset device.Offset /= dB End If ' update the offset display OffsetLabel.Text = sprintf("%-5.3f", device.Offset) End If ' increment the receiver gain reduction If LNA_CB.Checked Then device.GainReduction(SDRPlay.lnaoptions.onsetting) = Min(80, device.GainReduction + 1) Else device.GainReduction(SDRPlay.lnaoptions.offsetting) = Min(80, device.GainReduction + 1) End If gr = device.GainReduction GainReductionBox.Text = sprintf("Gain reduction (%d)", device.GainReduction) Else gr += 1 GainReductionBox.Text = sprintf("Gain reduction (%d)", gr) End If End Sub Private Sub GainDownButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GainDownButton.Click If device IsNot Nothing Then If GRLinkCheckBox.Checked Then If device.GainReduction > 0 Then If LogScaleMenuItem.Checked Then ' shift the offset by 1 dB device.Offset -= 1 Else ' scale the gain by 1 dB device.RSSScale = CDbl(RSSScaleBox.Text) / dB RSSScaleBox.Text = sprintf(device.RSSScale, "%5.3f") ' scale the offset device.Offset *= dB End If ' update the offset display OffsetLabel.Text = sprintf("%-5.3f", device.Offset) End If End If ' decrement the receiver gain reduction If LNA_CB.Checked Then device.GainReduction(SDRPlay.lnaoptions.onsetting) = Max(0, device.GainReduction - 1) Else device.GainReduction(SDRPlay.lnaoptions.offsetting) = Max(0, device.GainReduction - 1) End If gr = device.GainReduction GainReductionBox.Text = sprintf("Gain reduction (%d)", device.GainReduction) Else gr = Max(0, gr - 1) GainReductionBox.Text = sprintf("Gain reduction (%d)", gr) End If End Sub Private Sub OffsetUpButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OffsetUpButton.Click Try If device IsNot Nothing Then device.Offset += CDbl(OffsetIncrementBox.Text) OffsetLabel.Text = sprintf("%-5.3f", device.Offset) Else offset += CDbl(OffsetIncrementBox.Text) OffsetLabel.Text = sprintf("%-5.3f", offset) End If Catch ex As InvalidCastException StatusText.Text = Me.GetType.Name & ".OffsetUpButton_click - " & ex.Message End Try End Sub Private Sub OffsetDownButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OffsetDownButton.Click Try If device IsNot Nothing Then device.Offset -= CDbl(OffsetIncrementBox.Text) OffsetLabel.Text = sprintf("%-5.3f", device.Offset) Else offset -= CDbl(OffsetIncrementBox.Text) OffsetLabel.Text = sprintf("%-5.3f", offset) End If Catch ex As InvalidCastException StatusText.Text = Me.GetType.Name & ".OffsetDownButton_click - " & ex.Message End Try End Sub Private Sub RSSScaleBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles RSSScaleBox.KeyPress If e.KeyChar = Chr(13) AndAlso device IsNot Nothing Then Dim scale As Double = CDbl(RSSScaleBox.Text) If GRLinkCheckBox.Checked Then ' adjust the offset device.Offset *= device.RSSScale / scale ' update the offset display OffsetLabel.Text = sprintf("%-5.3f", device.Offset) End If ' update the scale device.RSSScale = scale 'update the scale display RSSScaleBox.Text = sprintf(device.RSSScale, "%5.3f") End If End Sub Private Sub BackgroundCountMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BackgroundCountMenuItem.Click Dim x As String = InputBox("Background average count", "Integrate", backgroundaveragecount.ToString) If x <> "" Then backgroundaveragecount = CSng(x) BackgroundCountMenuItem.Text = sprintf("Background average %d", backgroundaveragecount) If device IsNot Nothing Then device.backgroundaveragecount = backgroundaveragecount End If End Sub Private Sub StreamingRecordTimeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StreamingRecordTimeToolStripMenuItem.Click Dim x As String = InputBox("StreamingRecordTime", "Streaming", Streamingrecordtime.ToString) If x <> "" Then Streamingrecordtime = CSng(x) StreamingRecordTimeToolStripMenuItem.Text = sprintf("Streaming record time %d s", Streamingrecordtime) If device IsNot Nothing Then device.StreamingDuration = CLng(Streamingrecordtime * device.SampleRate / device.N) End If End Sub Private Sub StreamingDataPathToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StreamingDataPathToolStripMenuItem.Click Dim x As New FolderBrowserDialog x.SelectedPath = StreamingDataPath x.Description = "Path for streaming data" x.ShowDialog() StreamingDataPath = x.SelectedPath End Sub Private Sub IntegrateDataPathToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim x As New FolderBrowserDialog x.SelectedPath = IntegrateDataPath x.Description = "Path for integrated data" x.ShowDialog() IntegrateDataPath = x.SelectedPath End Sub Private Sub IntegrateRecordTimeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IntegrateRecordTimeToolStripMenuItem.Click Dim x As String = InputBox("IntegrateRecordTime", "Integrate", Integraterecordtime.ToString) If x <> "" Then Integraterecordtime = CSng(x) IntegrateRecordTimeToolStripMenuItem.Text = sprintf("Integrate record time %d s", Integraterecordtime) If device IsNot Nothing Then device.StreamingDuration = CLng(Integraterecordtime * device.SampleRate / device.N) End If End Sub Private Sub FilterTapsPathToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FilterTapsPathToolStripMenuItem.Click Dim x As New FolderBrowserDialog x.SelectedPath = FilterTapsPath x.Description = "Path for filter taps" x.ShowDialog() FilterTapsPath = x.SelectedPath End Sub Private Sub BackgroundSubtractionToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BackgroundSubtractionToolStripMenuItem.Click BackgroundSubtractionToolStripMenuItem.Checked = Not BackgroundSubtractionToolStripMenuItem.Checked devconfig.backgroundsubtraction = BackgroundSubtractionToolStripMenuItem.Checked BgRefresh.Visible = devconfig.backgroundsubtraction End Sub Private Sub PolyphaseFilterBankToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PolyphaseFilterBankToolStripMenuItem.Click PolyphaseFilterBankToolStripMenuItem.Checked = Not PolyphaseFilterBankToolStripMenuItem.Checked devconfig.pfb = PolyphaseFilterBankToolStripMenuItem.Checked WindowFunctionMenuItem.Checked = WindowFunctionMenuItem.Checked And Not devconfig.pfb If device IsNot Nothing Then device.winflag = WindowFunctionMenuItem.Checked End Sub Private Sub AboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AboutToolStripMenuItem.Click With My.Application.Info Dim x As String = .ProductName & " " & .Version.ToString x &= vbNewLine & .CompanyName x &= vbNewLine & .Description x &= vbNewLine & sprintf("Mirics API version %4.2f", device.mirVersion) MsgBox(x, MsgBoxStyle.OkOnly, Me.GetType.Name) End With End Sub Private Sub RFBandwidthBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RFBandwidthBox.SelectedIndexChanged Dim rfbw As Double Select Case RFBandwidthBox.SelectedIndex Case 0 : rfbw = 0.2 Case 1 : rfbw = 0.3 Case 2 : rfbw = 0.6 Case 3 : rfbw = 1.536 Case 4 : rfbw = 5 Case 5 : rfbw = 6 Case 6 : rfbw = 7 Case 7 : rfbw = 8 End Select RecordRangeBox.Text = sprintf("%5.3f", rfbw) End Sub Private Sub IntegrateDataPathMenuItem_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IntegrateDataPathMenuItem.Click Dim x As New FolderBrowserDialog x.SelectedPath = IntegrateDataPath x.Description = "Path for integrate data" x.ShowDialog() IntegrateDataPath = x.SelectedPath End Sub Private Sub ObservatoryInfoMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ObservatoryInfoMenuItem.Click If Not streamingbusy AndAlso Not integratebusy Then obs.updateinfo() Else StatusText.Text = "ObservatoryInfo - acquisition in progress." End If End Sub Private Sub ObservatoryPathMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ObservatoryPathMenuItem.Click If Not streamingbusy AndAlso Not integratebusy Then obs.newpath() Else StatusText.Text = "ObservatoryPath - acquisition in progress." End If End Sub Public Sub UpdateObservatoryData(ByVal path As String) If obs Is Nothing Then obs = New ObservatoryData(path) Else If Not String.IsNullOrEmpty(path) Then If path <> obs.path Then obs.path = path obs.loadconfig() End If End If End If End Sub Private Sub LogScaleMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LogScaleMenuItem.Click LogScaleMenuItem.Checked = Not LogScaleMenuItem.Checked StreamLogScaleMenuItem.Checked = LogScaleMenuItem.Checked If device IsNot Nothing Then device.LogScale = LogScaleMenuItem.Checked End Sub Private Sub StreamLogScaleMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StreamLogScaleMenuItem.Click StreamLogScaleMenuItem.Checked = Not StreamLogScaleMenuItem.Checked LogScaleMenuItem.Checked = StreamLogScaleMenuItem.Checked If device IsNot Nothing Then device.LogScale = StreamLogScaleMenuItem.Checked End Sub Private Sub WindowFunctionMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles WindowFunctionMenuItem.Click WindowFunctionMenuItem.Checked = Not WindowFunctionMenuItem.Checked StreamWindowingMenuItem.Checked = WindowFunctionMenuItem.Checked If device IsNot Nothing Then device.winflag = WindowFunctionMenuItem.Checked devconfig.pfb = devconfig.pfb AndAlso Not WindowFunctionMenuItem.Checked PolyphaseFilterBankToolStripMenuItem.Checked = devconfig.pfb End Sub Private Sub StreamWindowingMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StreamWindowingMenuItem.Click StreamWindowingMenuItem.Checked = Not StreamWindowingMenuItem.Checked WindowFunctionMenuItem.Checked = StreamWindowingMenuItem.Checked If device IsNot Nothing Then device.winflag = StreamWindowingMenuItem.Checked devconfig.pfb = devconfig.pfb AndAlso Not StreamWindowingMenuItem.Checked PolyphaseFilterBankToolStripMenuItem.Checked = devconfig.pfb End Sub Public Sub statustextcallback(ByVal s As String) If InvokeRequired Then Invoke(New changecontroltextdelegate(AddressOf statustextcallback), New Object() {StatusText, s}) Else StatusText.Text = s End If End Sub Delegate Sub changecontroltextdelegate(ByVal text As String) 'Private Sub toolbarhandler(ByVal sender As Object, ByVal e As ToolBarButtonClickEventArgs) ' Dim idx As Integer = tb.Buttons.IndexOf(e.Button) ' Dim c As Integer = tb.Buttons.Count ' Dim fn As String = sprintf("%02d.config", c - 1) ' ' do something depending on what button was pushed ' Select Case idx ' Case 0 ' ' + button ' Dim s As New ToolBarButton ' s.ToolTipText = filelast ' s.Text = c.ToString ' s.ToolTipText = "loads and runs a configuration" ' tb.Buttons.Add(s) ' saveconfig(fn) ' Case Else ' ' run a config file ' ' if already running the stop first ' stopflag = streamingbusy OrElse integratebusy ' Do While stopflag : Sleep(100) : DoEvents() : Loop ' ' load the configuration ' loadconfig(fn) ' ' run integrate ' IntegrateButton_Click(Nothing, Nothing) ' End Select 'End Sub ''' Whether to integrate on load. ''' The flag is set on load when there is a command-line parameter containing immediate. ''' Run by the Shown event. ''' Run parameters must have been loaded from the ReceiverLast.config file. Dim runimmediate As Boolean = False Private Sub SDRPlay2RSS_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown If runimmediate Then IntegrateButton_Click(Nothing, Nothing) End If End Sub Sub bgtimerhandler(ByVal x As Object) Static busy As Boolean = False If busy Then devconfig.backgroundsubtraction = BackgroundSubtractionToolStripMenuItem.Checked bgtimer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite) busy = False Else devconfig.backgroundsubtraction = False bgtimer.Change(CInt(1000 * CDbl(IntTimeBox.Text)), System.Threading.Timeout.Infinite) busy = True End If End Sub Private Sub BgToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BgRefresh.Click ' reset background bgtimerhandler(Me) End Sub Private Sub OnlineHelpMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OnlineHelpMenuItem.Click Shell("cmd /c start http://myplace.frontier.com/~nathan56/SDRPlay2RSS/doc/SDRPlay2RSS.html", AppWinStyle.MinimizedNoFocus) End Sub Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean Select Case keyData Case Keys.F1 : OnlineHelpMenuItem_Click(Nothing, Nothing) Case Else : Return MyBase.ProcessCmdKey(msg, keyData) End Select Return True End Function Private Sub SDRPlaylogMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SDRPlaylogMenuItem.Click Shell("cmd /c start SDRPlay.log", AppWinStyle.NormalFocus) End Sub Private Sub SDRPlay2RSSlogMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SDRPlay2RSSlogMenuItem.Click Shell("cmd /c start SDRPlay2RSS.log", AppWinStyle.NormalFocus) End Sub Private Sub BiasTCheckBox_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BiasTCheckBox.Click devconfig.biasT = BiasTCheckBox.Checked If device IsNot Nothing Then If devconfig.biasT Then device.BiasT = 1 Else device.BiasT = 0 End If End If End Sub Private Sub AntennaASelect_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles AntennaASelect.Click devconfig.antennaSelect = SDRPlay.mir_sdr_RSPII_AntennaSelectT.mir_sdr_RSPII_ANTENNA_A If device IsNot Nothing Then device.Antenna = devconfig.antennaSelect End If End Sub Private Sub AntennaBSelect_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles AntennaBSelect.Click devconfig.antennaSelect = SDRPlay.mir_sdr_RSPII_AntennaSelectT.mir_sdr_RSPII_ANTENNA_B If device IsNot Nothing Then device.Antenna = devconfig.antennaSelect End If End Sub Private Sub AntennaHiZSelect_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles AntennaHiZSelect.Click devconfig.antennaSelect = SDRPlay.mir_sdr_RSPII_AntennaSelectT.mir_sdr_RSPII_HiZ If device IsNot Nothing Then device.Antenna = devconfig.antennaSelect End If End Sub Private Sub SwitchedAntennaCheckBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SwitchedAntennaCheckBox.Click If device IsNot Nothing Then ' don't allow change of check box SwitchedAntennaCheckBox.Checked = Not SwitchedAntennaCheckBox.Checked Else Dim r As Boolean = Not SwitchedAntennaCheckBox.Checked AntennaASelect.Enabled = r AntennaBSelect.Enabled = r AntennaHiZSelect.Enabled = r End If End Sub Dim swantpausesamples As Double = 150000 ' k Private Sub SwAntPauseTextBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SwAntPauseTextBox.Click Dim x As String = InputBox("Switched antenna pause in samples (x1000)", "Integrate", (swantpausesamples \ 1000).ToString) If x <> "" Then swantpausesamples = CInt(x) * 1000 ' set the text in the menu item SwAntPauseTextBox.Text = sprintf("Switched pause %s k", swantpausesamples \ 1000) ' set the pause in the receiver If device IsNot Nothing Then device.switchedpausesamples = swantpausesamples End If End Sub ' testing of 'Dim sidstopflag As Boolean = False 'Dim sid As SoundSource Private Sub GRLinkCheckBox_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles GRLinkCheckBox.Click 'sidstopflag = Not GRLinkCheckBox.Checked 'If sidstopflag Then ' Do While sid IsNot Nothing AndAlso sid.captureDevice IsNot Nothing : Sleep(100) : Loop ' sid = Nothing 'Else ' sid = New SoundSource(sidstopflag) 'End If End Sub Private Sub RSP2NotchFilterCB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RSP2NotchFilterCB.Click devconfig.rsp2notchEnable = RSP2NotchFilterCB.Checked If device IsNot Nothing Then device.notchfilter = devconfig.rsp2notchEnable End If End Sub Private Sub RSP1aDabNotchToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RSP1aDabNotchToolStripMenuItem.Click devconfig.rsp1adabnotchEnable = RSP1aDabNotchToolStripMenuItem.Checked If device IsNot Nothing Then device.dabNotchFilter = devconfig.rsp1adabnotchEnable End If End Sub Private Sub RSP1aBcastNotchToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RSP1aBcastNotchToolStripMenuItem.Click devconfig.rsp1abroadcastnotchEnable = RSP1aBcastNotchToolStripMenuItem.Checked If device IsNot Nothing Then device.bcastNotchFilter = devconfig.rsp1abroadcastnotchEnable End If End Sub Private Sub LNA_CB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LNA_CB.Click GainUpButton_Click(Nothing, Nothing) GainDownButton_Click(Nothing, Nothing) End Sub End Class