From e0ecaa6e080a2568d3aa8ece5917a8524c594541 Mon Sep 17 00:00:00 2001 From: Dennis Sheirer Date: Fri, 1 Dec 2023 03:39:57 -0500 Subject: [PATCH] #1753 Changes tuner editors to use toggle button for IF AGC mode and updates enum lookup to always return either ENABLE or DISABLE. Deprecates 3x enum values as no longer supported. --- .../source/tuner/sdrplay/RspTunerEditor.java | 22 ++++++------- .../api/parameter/control/AgcMode.java | 31 ++++++++++++++++--- .../tuner/sdrplay/rsp1/Rsp1TunerEditor.java | 9 +++--- .../tuner/sdrplay/rsp1a/Rsp1aTunerEditor.java | 9 +++--- .../tuner/sdrplay/rsp2/Rsp2TunerEditor.java | 9 +++--- .../sdrplay/rspDuo/RspDuoTuner1Editor.java | 11 +++---- .../sdrplay/rspDuo/RspDuoTuner2Editor.java | 9 +++--- .../tuner/sdrplay/rspDx/RspDxTunerEditor.java | 9 +++--- 8 files changed, 67 insertions(+), 42 deletions(-) diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/RspTunerEditor.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/RspTunerEditor.java index 8b5060c9..eb3f6140 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/RspTunerEditor.java +++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/RspTunerEditor.java @@ -35,10 +35,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.swing.JButton; -import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JSlider; +import javax.swing.JToggleButton; /** * Abstract RSP tuner editor @@ -48,7 +48,7 @@ public abstract class RspTunerEditor extends Tu private Logger mLog = LoggerFactory.getLogger(RspTunerEditor.class); private JSlider mGainSlider; private JLabel mGainValueLabel; - private JComboBox mAgcModeCombo; + private JToggleButton mAgcButton; private JButton mGainOverloadButton; private AtomicBoolean mGainOverloadAlert = new AtomicBoolean(); @@ -120,22 +120,20 @@ public abstract class RspTunerEditor extends Tu } /** - * IF AGC mode combobox control + * IF AGC mode (enable/disable) toggle button */ - protected JComboBox getAgcModeCombo() + protected JToggleButton getAgcButton() { - if(mAgcModeCombo == null) + if(mAgcButton == null) { - mAgcModeCombo = new JComboBox<>(AgcMode.values()); - mAgcModeCombo.setEnabled(false); - mAgcModeCombo.addActionListener(e -> { + mAgcButton = new JToggleButton("IF AGC"); + mAgcButton.setEnabled(false); + mAgcButton.addActionListener(e -> { if(hasTuner() && !isLoading()) { - AgcMode selected = (AgcMode)mAgcModeCombo.getSelectedItem(); try { - getTunerController().getControlRsp().setAgcMode(selected); - save(); + getTunerController().getControlRsp().setAgcMode(mAgcButton.isSelected() ? AgcMode.ENABLE : AgcMode.DISABLE); } catch(SDRPlayException se) { @@ -146,7 +144,7 @@ public abstract class RspTunerEditor extends Tu }); } - return mAgcModeCombo; + return mAgcButton; } /** diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/control/AgcMode.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/control/AgcMode.java index 99a20de5..a861b4fd 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/control/AgcMode.java +++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/control/AgcMode.java @@ -20,16 +20,19 @@ package io.github.dsheirer.source.tuner.sdrplay.api.parameter.control; import io.github.dsheirer.source.tuner.sdrplay.api.v3_07.sdrplay_api_h; +import java.util.EnumSet; /** * Automatic Gain Control (AGC) Control (mode) */ public enum AgcMode { + //Deprecated modes ... only use the ENABLE or DISABLE, in conjunction with the + AGC_100_HZ(sdrplay_api_h.sdrplay_api_AGC_100HZ(), "Deprecated - 100 Hz"), + AGC_50_HZ(sdrplay_api_h.sdrplay_api_AGC_50HZ(), "Deprecated 50 Hz"), + AGC_5_HZ(sdrplay_api_h.sdrplay_api_AGC_5HZ(), "Deprecated 5 Hz"), + DISABLE(sdrplay_api_h.sdrplay_api_AGC_DISABLE(), "DISABLE"), - AGC_100_HZ(sdrplay_api_h.sdrplay_api_AGC_100HZ(), "100 Hz"), - AGC_50_HZ(sdrplay_api_h.sdrplay_api_AGC_50HZ(), "50 Hz"), - AGC_5_HZ(sdrplay_api_h.sdrplay_api_AGC_5HZ(), "5 Hz"), ENABLE(sdrplay_api_h.sdrplay_api_AGC_CTRL_EN(), "ENABLE"); private int mValue; @@ -41,6 +44,8 @@ public enum AgcMode mDescription = description; } + public static EnumSet SUPPORTED_MODES = EnumSet.of(ENABLE, DISABLE); + /** * Numeric value */ @@ -49,6 +54,15 @@ public enum AgcMode return mValue; } + /** + * Indicates if the mode is a supported mode. + * @return true if it's a supported mode. + */ + public boolean isSupported() + { + return SUPPORTED_MODES.contains(this); + } + /** * Lookup the entry from a return code * @param value to lookup @@ -60,7 +74,16 @@ public enum AgcMode { if(status.getValue() == value) { - return status; + //legacy support in case some users had the deprecated values stored in their tuner configs. In + //this situation we return ENABLED instead of one of these deprecated values. + if(status.isSupported()) + { + return status; + } + else + { + return ENABLE; + } } } diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rsp1/Rsp1TunerEditor.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rsp1/Rsp1TunerEditor.java index 6cc30ab7..b515e438 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rsp1/Rsp1TunerEditor.java +++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rsp1/Rsp1TunerEditor.java @@ -82,7 +82,7 @@ public class Rsp1TunerEditor extends RspTunerEditor add(new JLabel("IF AGC Mode:")); JPanel gainPanel = new JPanel(); gainPanel.setLayout(new MigLayout("insets 0","[grow,fill][]","")); - gainPanel.add(getAgcModeCombo()); + gainPanel.add(getAgcButton()); gainPanel.add(getGainOverloadButton()); add(gainPanel, "wrap"); @@ -134,10 +134,11 @@ public class Rsp1TunerEditor extends RspTunerEditor getSampleRateCombo().setSelectedItem(hasTuner() ? getTunerController().getControlRsp().getSampleRateEnumeration() : null); updateSampleRateToolTip(); - getAgcModeCombo().setEnabled(hasTuner()); + getAgcButton().setEnabled(hasTuner()); if(hasTuner()) { - getAgcModeCombo().setSelectedItem(getTunerController().getControlRsp().getAgcMode()); + AgcMode current = getTunerController().getControlRsp().getAgcMode(); + getAgcButton().setSelected(current == null || current.equals(AgcMode.ENABLE)); //Register to receive gain overload notifications getTunerController().getControlRsp().setGainOverloadListener(this); } @@ -160,7 +161,7 @@ public class Rsp1TunerEditor extends RspTunerEditor getConfiguration().setAutoPPMCorrectionEnabled(getAutoPPMCheckBox().isSelected()); getConfiguration().setSampleRate((RspSampleRate)getSampleRateCombo().getSelectedItem()); getConfiguration().setGain(getGainSlider().getValue()); - getConfiguration().setAgcMode((AgcMode)getAgcModeCombo().getSelectedItem()); + getConfiguration().setAgcMode(getAgcButton().isSelected() ? AgcMode.ENABLE : AgcMode.DISABLE); saveConfiguration(); } diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rsp1a/Rsp1aTunerEditor.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rsp1a/Rsp1aTunerEditor.java index 46d27b71..7bd55902 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rsp1a/Rsp1aTunerEditor.java +++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rsp1a/Rsp1aTunerEditor.java @@ -86,7 +86,7 @@ public class Rsp1aTunerEditor extends RspTunerEditor add(new JLabel("IF AGC Mode:")); JPanel gainPanel = new JPanel(); gainPanel.setLayout(new MigLayout("insets 0","[grow,fill][]","")); - gainPanel.add(getAgcModeCombo()); + gainPanel.add(getAgcButton()); gainPanel.add(getGainOverloadButton()); add(gainPanel, "wrap"); @@ -145,10 +145,11 @@ public class Rsp1aTunerEditor extends RspTunerEditor getSampleRateCombo().setSelectedItem(hasTuner() ? getTunerController().getControlRsp().getSampleRateEnumeration() : null); updateSampleRateToolTip(); - getAgcModeCombo().setEnabled(hasTuner()); + getAgcButton().setEnabled(hasTuner()); if(hasTuner()) { - getAgcModeCombo().setSelectedItem(getTunerController().getControlRsp().getAgcMode()); + AgcMode current = getTunerController().getControlRsp().getAgcMode(); + getAgcButton().setSelected(current == null || current.equals(AgcMode.ENABLE)); //Register to receive gain overload notifications getTunerController().getControlRsp().setGainOverloadListener(this); } @@ -204,7 +205,7 @@ public class Rsp1aTunerEditor extends RspTunerEditor getConfiguration().setRfNotch(getRfNotchCheckBox().isSelected()); getConfiguration().setRfDabNotch(getRfDabNotchCheckBox().isSelected()); getConfiguration().setGain(getGainSlider().getValue()); - getConfiguration().setAgcMode((AgcMode)getAgcModeCombo().getSelectedItem()); + getConfiguration().setAgcMode(getAgcButton().isSelected() ? AgcMode.ENABLE : AgcMode.DISABLE); saveConfiguration(); } diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rsp2/Rsp2TunerEditor.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rsp2/Rsp2TunerEditor.java index 3ba0bb46..fd31388d 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rsp2/Rsp2TunerEditor.java +++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rsp2/Rsp2TunerEditor.java @@ -88,7 +88,7 @@ public class Rsp2TunerEditor extends RspTunerEditor add(new JLabel("IF AGC Mode:")); JPanel gainPanel = new JPanel(); gainPanel.setLayout(new MigLayout("insets 0","[grow,fill][]","")); - gainPanel.add(getAgcModeCombo()); + gainPanel.add(getAgcButton()); gainPanel.add(getGainOverloadButton()); add(gainPanel, "wrap"); @@ -149,10 +149,11 @@ public class Rsp2TunerEditor extends RspTunerEditor getSampleRateCombo().setSelectedItem(hasTuner() ? getTunerController().getControlRsp().getSampleRateEnumeration() : null); updateSampleRateToolTip(); - getAgcModeCombo().setEnabled(hasTuner()); + getAgcButton().setEnabled(hasTuner()); if(hasTuner()) { - getAgcModeCombo().setSelectedItem(getTunerController().getControlRsp().getAgcMode()); + AgcMode current = getTunerController().getControlRsp().getAgcMode(); + getAgcButton().setSelected(current == null || current.equals(AgcMode.ENABLE)); //Register to receive gain overload notifications getTunerController().getControlRsp().setGainOverloadListener(this); } @@ -218,7 +219,7 @@ public class Rsp2TunerEditor extends RspTunerEditor getConfiguration().setRfNotch(getRfNotchCheckBox().isSelected()); getConfiguration().setAntennaSelection((Rsp2AntennaSelection)getAntennaSelectionCombo().getSelectedItem()); getConfiguration().setGain(getGainSlider().getValue()); - getConfiguration().setAgcMode((AgcMode)getAgcModeCombo().getSelectedItem()); + getConfiguration().setAgcMode(getAgcButton().isSelected() ? AgcMode.ENABLE : AgcMode.DISABLE); saveConfiguration(); } diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rspDuo/RspDuoTuner1Editor.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rspDuo/RspDuoTuner1Editor.java index e022cdcd..2afe0476 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rspDuo/RspDuoTuner1Editor.java +++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/rspDuo/RspDuoTuner1Editor.java @@ -97,7 +97,7 @@ public class RspDuoTuner1Editor extends RspTunerEditor add(new JLabel("IF AGC Mode:")); JPanel gainPanel = new JPanel(); gainPanel.setLayout(new MigLayout("insets 0","[grow,fill][]","")); - gainPanel.add(getAgcModeCombo()); + gainPanel.add(getAgcButton()); gainPanel.add(getGainOverloadButton()); add(gainPanel, "wrap"); @@ -158,10 +158,11 @@ public class RspDxTunerEditor extends RspTunerEditor getSampleRateCombo().setSelectedItem(hasTuner() ? getTunerController().getControlRsp().getSampleRateEnumeration() : null); updateSampleRateToolTip(); - getAgcModeCombo().setEnabled(hasTuner()); + getAgcButton().setEnabled(hasTuner()); if(hasTuner()) { - getAgcModeCombo().setSelectedItem(getTunerController().getControlRsp().getAgcMode()); + AgcMode current = getTunerController().getControlRsp().getAgcMode(); + getAgcButton().setSelected(current == null || current.equals(AgcMode.ENABLE)); //Register to receive gain overload notifications getTunerController().getControlRsp().setGainOverloadListener(this); } @@ -239,7 +240,7 @@ public class RspDxTunerEditor extends RspTunerEditor getConfiguration().setRfNotch(getRfNotchCheckBox().isSelected()); getConfiguration().setAntenna((RspDxAntenna) getAntennaCombo().getSelectedItem()); getConfiguration().setGain(getGainSlider().getValue()); - getConfiguration().setAgcMode((AgcMode)getAgcModeCombo().getSelectedItem()); + getConfiguration().setAgcMode(getAgcButton().isSelected() ? AgcMode.ENABLE : AgcMode.DISABLE); saveConfiguration(); }