From c045c8f16d539aa05904fe6f354e27153698d65d Mon Sep 17 00:00:00 2001 From: Denny Date: Wed, 5 Sep 2018 06:11:28 -0400 Subject: [PATCH] Updates heterodyne channel manager to correctly lock/unlock the tuner controller. --- .../controller/channel/ChannelController.java | 28 +++++++++++++++---- .../dsheirer/source/tuner/TunerModel.java | 10 +------ .../HeterodyneChannelSourceManager.java | 16 +++++++++++ 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/github/dsheirer/controller/channel/ChannelController.java b/src/main/java/io/github/dsheirer/controller/channel/ChannelController.java index de1b7cde..06d1becb 100644 --- a/src/main/java/io/github/dsheirer/controller/channel/ChannelController.java +++ b/src/main/java/io/github/dsheirer/controller/channel/ChannelController.java @@ -1,3 +1,18 @@ +/******************************************************************************* + * sdr-trunk + * Copyright (C) 2014-2018 Dennis Sheirer + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. + * If not, see + * + ******************************************************************************/ package io.github.dsheirer.controller.channel; import com.jidesoft.swing.JideSplitPane; @@ -24,8 +39,7 @@ import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -public class ChannelController extends JPanel - implements ActionListener, ListSelectionListener +public class ChannelController extends JPanel implements ActionListener, ListSelectionListener { private static final long serialVersionUID = 1L; @@ -168,9 +182,13 @@ public class ChannelController extends JPanel if( index >= 0 ) { int translatedIndex = mChannelTable.convertRowIndexToView( index ); - mChannelTable.setRowSelectionInterval( translatedIndex, translatedIndex ); - mChannelTable.scrollRectToVisible( - new Rectangle( mChannelTable.getCellRect( translatedIndex, 0, true ) ) ); + + if(translatedIndex >= 0) + { + mChannelTable.setRowSelectionInterval( translatedIndex, translatedIndex ); + mChannelTable.scrollRectToVisible( + new Rectangle( mChannelTable.getCellRect( translatedIndex, 0, true ) ) ); + } } } diff --git a/src/main/java/io/github/dsheirer/source/tuner/TunerModel.java b/src/main/java/io/github/dsheirer/source/tuner/TunerModel.java index 3350bcae..3b904a83 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/TunerModel.java +++ b/src/main/java/io/github/dsheirer/source/tuner/TunerModel.java @@ -289,15 +289,7 @@ public class TunerModel extends AbstractTableModel implements Listener 0) - { - return channelCount + " (LOCKED)"; - } - else - { - return "0"; - } + return channelCount + " (" + (tuner.getTunerController().isLocked() ? "LOCKED)" : "UNLOCKED)"); case FREQUENCY_ERROR: double ppm = tuner.getTunerController().getFrequencyCorrection(); return mFrequencyErrorPPMFormat.format(ppm); diff --git a/src/main/java/io/github/dsheirer/source/tuner/manager/HeterodyneChannelSourceManager.java b/src/main/java/io/github/dsheirer/source/tuner/manager/HeterodyneChannelSourceManager.java index 3e6e8545..8520146a 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/manager/HeterodyneChannelSourceManager.java +++ b/src/main/java/io/github/dsheirer/source/tuner/manager/HeterodyneChannelSourceManager.java @@ -85,6 +85,10 @@ public class HeterodyneChannelSourceManager extends ChannelSourceManager //Add to the channel list and update the tuner center frequency as needed mTunerChannels.add(tunerChannel); updateTunerFrequency(); + + //Lock the tuner controller frequency and sample rate + mTunerController.setLocked(true); + broadcast(SourceEvent.channelCountChange(getTunerChannelCount())); return tunerChannelSource; @@ -138,6 +142,8 @@ public class HeterodyneChannelSourceManager extends ChannelSourceManager broadcastToChannels(tunerSourceEvent); break; case NOTIFICATION_SAMPLE_RATE_CHANGE: + case NOTIFICATION_FREQUENCY_AND_SAMPLE_RATE_LOCKED: + case NOTIFICATION_FREQUENCY_AND_SAMPLE_RATE_UNLOCKED: //no-op break; default: @@ -205,6 +211,12 @@ public class HeterodyneChannelSourceManager extends ChannelSourceManager mChannelSources.remove(channelSource); mTunerChannels.remove(channelSource.getTunerChannel()); channelSource.dispose(); + + //Unlock the tuner controller if there are no more channels + if(getTunerChannelCount() == 0) + { + mTunerController.setLocked(false); + } broadcast(SourceEvent.channelCountChange(getTunerChannelCount())); } break; @@ -212,8 +224,12 @@ public class HeterodyneChannelSourceManager extends ChannelSourceManager //Rebroadcast so that the tuner source can process this event broadcast(sourceEvent); break; + case NOTIFICATION_CHANNEL_COUNT_CHANGE: + //Lock the tuner controller frequency & sample rate when we're processing channels + break; default: mLog.info("Unrecognized Source Event received from channel: " + sourceEvent); + break; } } }