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