diff --git a/src/main/java/io/github/dsheirer/gui/playlist/channel/AMConfigurationEditor.java b/src/main/java/io/github/dsheirer/gui/playlist/channel/AMConfigurationEditor.java index c224590b..7a8fe157 100644 --- a/src/main/java/io/github/dsheirer/gui/playlist/channel/AMConfigurationEditor.java +++ b/src/main/java/io/github/dsheirer/gui/playlist/channel/AMConfigurationEditor.java @@ -138,7 +138,7 @@ public class AMConfigurationEditor extends ChannelConfigurationEditor { if(mSourceConfigurationEditor == null) { - mSourceConfigurationEditor = new FrequencyEditor(getTunerModel(), false); + mSourceConfigurationEditor = new FrequencyEditor(getTunerModel()); //Add a listener so that we can push change notifications up to this editor mSourceConfigurationEditor.modifiedProperty() diff --git a/src/main/java/io/github/dsheirer/gui/playlist/channel/DMRConfigurationEditor.java b/src/main/java/io/github/dsheirer/gui/playlist/channel/DMRConfigurationEditor.java index bd91d8e6..aedf30b7 100644 --- a/src/main/java/io/github/dsheirer/gui/playlist/channel/DMRConfigurationEditor.java +++ b/src/main/java/io/github/dsheirer/gui/playlist/channel/DMRConfigurationEditor.java @@ -231,7 +231,9 @@ public class DMRConfigurationEditor extends ChannelConfigurationEditor { if(mSourceConfigurationEditor == null) { - mSourceConfigurationEditor = new FrequencyEditor(getTunerModel(), true); + mSourceConfigurationEditor = new FrequencyEditor(getTunerModel(), + DecodeConfigDMR.CHANNEL_ROTATION_DELAY_MINIMUM_MS, + DecodeConfigDMR.CHANNEL_ROTATION_DELAY_MAXIMUM_MS); //Add a listener so that we can push change notifications up to this editor mSourceConfigurationEditor.modifiedProperty() diff --git a/src/main/java/io/github/dsheirer/gui/playlist/channel/LTRConfigurationEditor.java b/src/main/java/io/github/dsheirer/gui/playlist/channel/LTRConfigurationEditor.java index 83096779..f593e851 100644 --- a/src/main/java/io/github/dsheirer/gui/playlist/channel/LTRConfigurationEditor.java +++ b/src/main/java/io/github/dsheirer/gui/playlist/channel/LTRConfigurationEditor.java @@ -210,7 +210,7 @@ public class LTRConfigurationEditor extends ChannelConfigurationEditor { if(mSourceConfigurationEditor == null) { - mSourceConfigurationEditor = new FrequencyEditor(getTunerModel(), false); + mSourceConfigurationEditor = new FrequencyEditor(getTunerModel()); //Add a listener so that we can push change notifications up to this editor mSourceConfigurationEditor.modifiedProperty() diff --git a/src/main/java/io/github/dsheirer/gui/playlist/channel/LTRNetConfigurationEditor.java b/src/main/java/io/github/dsheirer/gui/playlist/channel/LTRNetConfigurationEditor.java index 24ed1119..bb462eb9 100644 --- a/src/main/java/io/github/dsheirer/gui/playlist/channel/LTRNetConfigurationEditor.java +++ b/src/main/java/io/github/dsheirer/gui/playlist/channel/LTRNetConfigurationEditor.java @@ -210,7 +210,7 @@ public class LTRNetConfigurationEditor extends ChannelConfigurationEditor { if(mSourceConfigurationEditor == null) { - mSourceConfigurationEditor = new FrequencyEditor(getTunerModel(), false); + mSourceConfigurationEditor = new FrequencyEditor(getTunerModel()); //Add a listener so that we can push change notifications up to this editor mSourceConfigurationEditor.modifiedProperty() diff --git a/src/main/java/io/github/dsheirer/gui/playlist/channel/MPT1327ConfigurationEditor.java b/src/main/java/io/github/dsheirer/gui/playlist/channel/MPT1327ConfigurationEditor.java index 800e2fab..d95411e3 100644 --- a/src/main/java/io/github/dsheirer/gui/playlist/channel/MPT1327ConfigurationEditor.java +++ b/src/main/java/io/github/dsheirer/gui/playlist/channel/MPT1327ConfigurationEditor.java @@ -195,7 +195,9 @@ public class MPT1327ConfigurationEditor extends ChannelConfigurationEditor { if(mSourceConfigurationEditor == null) { - mSourceConfigurationEditor = new FrequencyEditor(getTunerModel(), true); + mSourceConfigurationEditor = new FrequencyEditor(getTunerModel(), + DecodeConfigMPT1327.CHANNEL_ROTATION_DELAY_MINIMUM_MS, + DecodeConfigMPT1327.CHANNEL_ROTATION_DELAY_MAXIMUM_MS); //Add a listener so that we can push change notifications up to this editor mSourceConfigurationEditor.modifiedProperty() diff --git a/src/main/java/io/github/dsheirer/gui/playlist/channel/NBFMConfigurationEditor.java b/src/main/java/io/github/dsheirer/gui/playlist/channel/NBFMConfigurationEditor.java index a8a73d40..49b11bbd 100644 --- a/src/main/java/io/github/dsheirer/gui/playlist/channel/NBFMConfigurationEditor.java +++ b/src/main/java/io/github/dsheirer/gui/playlist/channel/NBFMConfigurationEditor.java @@ -200,7 +200,7 @@ public class NBFMConfigurationEditor extends ChannelConfigurationEditor { if(mSourceConfigurationEditor == null) { - mSourceConfigurationEditor = new FrequencyEditor(getTunerModel(), false); + mSourceConfigurationEditor = new FrequencyEditor(getTunerModel()); //Add a listener so that we can push change notifications up to this editor mSourceConfigurationEditor.modifiedProperty() diff --git a/src/main/java/io/github/dsheirer/gui/playlist/channel/P25P1ConfigurationEditor.java b/src/main/java/io/github/dsheirer/gui/playlist/channel/P25P1ConfigurationEditor.java index a4c5ecee..f63d26a0 100644 --- a/src/main/java/io/github/dsheirer/gui/playlist/channel/P25P1ConfigurationEditor.java +++ b/src/main/java/io/github/dsheirer/gui/playlist/channel/P25P1ConfigurationEditor.java @@ -191,7 +191,9 @@ public class P25P1ConfigurationEditor extends ChannelConfigurationEditor { if(mSourceConfigurationEditor == null) { - mSourceConfigurationEditor = new FrequencyEditor(getTunerModel(), true); + mSourceConfigurationEditor = new FrequencyEditor(getTunerModel(), + DecodeConfigP25Phase1.CHANNEL_ROTATION_DELAY_MINIMUM_MS, + DecodeConfigP25Phase1.CHANNEL_ROTATION_DELAY_MAXIMUM_MS); //Add a listener so that we can push change notifications up to this editor mSourceConfigurationEditor.modifiedProperty() diff --git a/src/main/java/io/github/dsheirer/gui/playlist/channel/P25P2ConfigurationEditor.java b/src/main/java/io/github/dsheirer/gui/playlist/channel/P25P2ConfigurationEditor.java index 722649e3..7e384291 100644 --- a/src/main/java/io/github/dsheirer/gui/playlist/channel/P25P2ConfigurationEditor.java +++ b/src/main/java/io/github/dsheirer/gui/playlist/channel/P25P2ConfigurationEditor.java @@ -179,7 +179,7 @@ public class P25P2ConfigurationEditor extends ChannelConfigurationEditor { if(mSourceConfigurationEditor == null) { - mSourceConfigurationEditor = new FrequencyEditor(getTunerModel(), false); + mSourceConfigurationEditor = new FrequencyEditor(getTunerModel()); //Add a listener so that we can push change notifications up to this editor mSourceConfigurationEditor.modifiedProperty() diff --git a/src/main/java/io/github/dsheirer/gui/playlist/channel/PassportConfigurationEditor.java b/src/main/java/io/github/dsheirer/gui/playlist/channel/PassportConfigurationEditor.java index c0766fce..42765f18 100644 --- a/src/main/java/io/github/dsheirer/gui/playlist/channel/PassportConfigurationEditor.java +++ b/src/main/java/io/github/dsheirer/gui/playlist/channel/PassportConfigurationEditor.java @@ -155,7 +155,7 @@ public class PassportConfigurationEditor extends ChannelConfigurationEditor { if(mSourceConfigurationEditor == null) { - mSourceConfigurationEditor = new FrequencyEditor(getTunerModel(), false); + mSourceConfigurationEditor = new FrequencyEditor(getTunerModel()); //Add a listener so that we can push change notifications up to this editor mSourceConfigurationEditor.modifiedProperty() diff --git a/src/main/java/io/github/dsheirer/gui/playlist/source/FrequencyEditor.java b/src/main/java/io/github/dsheirer/gui/playlist/source/FrequencyEditor.java index dd879f67..78cdfae1 100644 --- a/src/main/java/io/github/dsheirer/gui/playlist/source/FrequencyEditor.java +++ b/src/main/java/io/github/dsheirer/gui/playlist/source/FrequencyEditor.java @@ -65,19 +65,40 @@ public class FrequencyEditor extends SourceConfigurationEditor mPreferredTunerComboBox; private VBox mFrequencyBoxContainer; private Spinner mChannelRotationDelaySpinner; - private boolean mAllowMultipleFrequencies; + private boolean mAllowMultipleFrequencies = false; + private int mFrequencyRotationMinimum = ChannelRotationMonitor.CHANNEL_ROTATION_DELAY_MINIMUM; + private int mFrequencyRotationMaximum = ChannelRotationMonitor.CHANNEL_ROTATION_DELAY_MAXIMUM; /** - * Constructs an instance. + * Constructs an instance with support for multiple frequency values. The min and max rotation delay values + * define constraints for the channel rotation delay monitor, how long the monitor dwells on each frequency in a + * multi-frequency configuration. + * * @param tunerModel for accessing list of tuners to select a preferred tuner - * @param allowMultipleFrequencies toggles behavior of the editor between single frequency (false) or multiple - * frequencies (true). + * @param minRotationDelay in milliseconds for channel/frequency dwell + * @param maxRotationDelay in milliseconds for channel/frequency dwell */ - public FrequencyEditor(TunerModel tunerModel, boolean allowMultipleFrequencies) + public FrequencyEditor(TunerModel tunerModel, int minRotationDelay, int maxRotationDelay) { mTunerModel = tunerModel; - mAllowMultipleFrequencies = allowMultipleFrequencies; + mAllowMultipleFrequencies = true; + mFrequencyRotationMinimum = minRotationDelay; + mFrequencyRotationMaximum = maxRotationDelay; + init(); + } + /** + * Constructs an instance with a default behavior of single frequency support only. + * @param tunerModel for accessing list of tuners to select a preferred tuner + */ + public FrequencyEditor(TunerModel tunerModel) + { + mTunerModel = tunerModel; + init(); + } + + private void init() + { HBox hBox = new HBox(); hBox.setPadding(new Insets(10,10,10,10)); hBox.setSpacing(10); @@ -93,17 +114,25 @@ public class FrequencyEditor extends SourceConfigurationEditor mFrequencyRotationMaximum) + { + rotationDelay = mFrequencyRotationMaximum; + + //For backward compatibility, we'll automatically update the value in the source config + sourceMulti.setFrequencyRotationDelay(rotationDelay); + } + + getFrequencyRotationDelaySpinner().getValueFactory().setValue(rotationDelay); } else { @@ -236,7 +283,6 @@ public class FrequencyEditor extends SourceConfigurationEditor svf = new SpinnerValueFactory.IntegerSpinnerValueFactory(min, max, min, 50); + SpinnerValueFactory svf = new SpinnerValueFactory.IntegerSpinnerValueFactory(mFrequencyRotationMinimum, + mFrequencyRotationMaximum, mFrequencyRotationMinimum, 50); mChannelRotationDelaySpinner.setValueFactory(svf); mChannelRotationDelaySpinner.getValueFactory().valueProperty() .addListener((observable, oldValue, newValue) -> modifiedProperty().set(true)); @@ -278,7 +323,6 @@ public class FrequencyEditor extends SourceConfigurationEditor mTimeslotMap = new ArrayList<>(); diff --git a/src/main/java/io/github/dsheirer/module/decode/mpt1327/DecodeConfigMPT1327.java b/src/main/java/io/github/dsheirer/module/decode/mpt1327/DecodeConfigMPT1327.java index f83ca02b..2dcf3056 100644 --- a/src/main/java/io/github/dsheirer/module/decode/mpt1327/DecodeConfigMPT1327.java +++ b/src/main/java/io/github/dsheirer/module/decode/mpt1327/DecodeConfigMPT1327.java @@ -30,6 +30,9 @@ import io.github.dsheirer.source.tuner.channel.ChannelSpecification; public class DecodeConfigMPT1327 extends DecodeConfiguration implements WithCallTimeout { + public static final int CHANNEL_ROTATION_DELAY_MINIMUM_MS = 500; + public static final int CHANNEL_ROTATION_DELAY_MAXIMUM_MS = 2000; + private String mChannelMapName; private Sync mSync = Sync.NORMAL; diff --git a/src/main/java/io/github/dsheirer/module/decode/p25/phase1/DecodeConfigP25Phase1.java b/src/main/java/io/github/dsheirer/module/decode/p25/phase1/DecodeConfigP25Phase1.java index f7afe9ed..66e1c805 100644 --- a/src/main/java/io/github/dsheirer/module/decode/p25/phase1/DecodeConfigP25Phase1.java +++ b/src/main/java/io/github/dsheirer/module/decode/p25/phase1/DecodeConfigP25Phase1.java @@ -30,6 +30,9 @@ import io.github.dsheirer.source.tuner.channel.ChannelSpecification; public class DecodeConfigP25Phase1 extends DecodeConfiguration { + public static final int CHANNEL_ROTATION_DELAY_MINIMUM_MS = 500; + public static final int CHANNEL_ROTATION_DELAY_MAXIMUM_MS = 2000; + private P25P1Decoder.Modulation mModulation = P25P1Decoder.Modulation.C4FM; private int mTrafficChannelPoolSize = TRAFFIC_CHANNEL_LIMIT_DEFAULT;