diff --git a/src/main/java/io/github/dsheirer/dsp/fsk/FSK2Decoder.java b/src/main/java/io/github/dsheirer/dsp/fsk/FSK2Decoder.java deleted file mode 100644 index 142201f5..00000000 --- a/src/main/java/io/github/dsheirer/dsp/fsk/FSK2Decoder.java +++ /dev/null @@ -1,302 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.dsp.fsk; - -import io.github.dsheirer.buffer.BooleanAveragingBuffer; -import io.github.dsheirer.dsp.symbol.SymbolEvent; -import io.github.dsheirer.dsp.symbol.SymbolEvent.Shift; -import io.github.dsheirer.instrument.Instrumentable; -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapGroup; -import io.github.dsheirer.instrument.tap.stream.SymbolEventTap; -import io.github.dsheirer.sample.Listener; -import io.github.dsheirer.sample.real.RealBuffer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.BitSet; -import java.util.List; - -/** - * Binary Frequency Shift Keying (FSK) decoder. Implements a BFSK correlation - * decoder. Provides normal or inverted decoded output. Requires the symbol - * rate to be an integer multiple of the sample rate. - * - * Implements a correlation decoder that correlates a modulated FSK signal upon - * against a one-baud delayed version of itself, converting all float samples to - * binary (0 or 1), and uses XOR to produce the correlation value. Low pass - * filtering smoothes the correlated output. - * - * Automatically aligns to symbol timing during symbol transitions (0 to 1, or - * 1 to 0) by inspecting the samples at the symbol edges and advancing or - * retarding symbol window to maintain continuous symbol alignment. - * - * Use a DC-removal filter prior to this decoder to ensure samples don't have - * a DC component. - * - * Implements instrumentable interface, so that slice events can be received - * externally to analyze decoder performance. - */ -public class FSK2Decoder implements Instrumentable, Listener -{ - private final static Logger mLog = LoggerFactory.getLogger(FSK2Decoder.class); - - public enum Output - { - NORMAL, INVERTED - } - - /* Instrumentation taps */ - private static final String INSTRUMENT_DECISION = - "Tap Point: FSK2 Symbol Decision"; - private List mAvailableTaps; - private ArrayList mTaps = new ArrayList(); - - private Listener mListener; - private BooleanAveragingBuffer mDelayBuffer; - private BooleanAveragingBuffer mLowPassFilter; - private Slicer mSlicer; - private boolean mNormalOutput; - private int mSamplesPerSymbol; - private int mSymbolRate; - - public FSK2Decoder(int sampleRate, int symbolRate, Output output) - { - /* Ensure we're using an integral symbolRate of the sampleRate */ - assert (sampleRate % symbolRate == 0); - - mSamplesPerSymbol = (int) (sampleRate / symbolRate); - mNormalOutput = (output == Output.NORMAL); - mSymbolRate = symbolRate; - - mDelayBuffer = new BooleanAveragingBuffer(mSamplesPerSymbol); - mLowPassFilter = new BooleanAveragingBuffer(mSamplesPerSymbol); - mSlicer = new Slicer(mSamplesPerSymbol); - } - - /** - * Disposes of all references to prepare for garbage collection - */ - public void dispose() - { - mListener = null; - } - - /** - * Primary sample input - */ - @Override - public void receive(RealBuffer buffer) - { - for(float sample : buffer.getSamples()) - { - /* Square the sample. Greater than zero is a 1 (true) and less than - * zero is a 0 (false) */ - boolean bitSample = (sample >= 0.0f); - - /* Feed the delay buffer and fetch the one-baud delayed sample */ - boolean delayedBitSample = mDelayBuffer.get(bitSample); - - /* Correlation: xor current bit with delayed bit */ - boolean softBit = bitSample ^ delayedBitSample; - - /* Low pass filter to smooth the correlated values */ - boolean filteredSoftBit = mLowPassFilter.getAverage(softBit); - - /* Send the filtered correlated bit to the slicer */ - mSlicer.receive(filteredSoftBit); - } - } - - /** - * Registers a listener to receive the decoded FSK bits - */ - public void setListener(Listener listener) - { - mListener = listener; - } - - /** - * Removes the listener - */ - public void removeListener(Listener listener) - { - mListener = null; - } - - /** - * Symbol slicer with auto-aligning baud timing - */ - public class Slicer - { - private BitSet mBitSet = new BitSet(); - private int mSymbolLength; - private int mDecisionThreshold; - private int mSampleCounter; - - public Slicer(int samplesPerSymbol) - { - mSymbolLength = samplesPerSymbol; - - mDecisionThreshold = (int) (mSymbolLength / 2); - - /* Adjust for an odd number of samples per baud */ - if(mSymbolLength % 2 == 1) - { - mDecisionThreshold++; - } - } - - public void receive(boolean softBit) - { - if(mSampleCounter >= 0) - { - if(softBit) - { - mBitSet.set(mSampleCounter); - } - else - { - mBitSet.clear(mSampleCounter); - } - } - - mSampleCounter++; - - if(mSampleCounter >= mSymbolLength) - { - boolean decision = mBitSet.cardinality() >= mDecisionThreshold; - - send(decision); - - /* Shift timing left if the left bit in the bitset is opposite - * the decision and the right bit is the same */ - if((mBitSet.get(0) ^ decision) && - (!(mBitSet.get(mSymbolLength - 1) ^ decision))) - { - sendTapEvent(mBitSet, Shift.LEFT, decision); - - reset(); - - mSampleCounter--; - } - /* Shift timing right if the left bit is the same as the - * decision and the right bit is opposite */ - else if((!(mBitSet.get(0) ^ decision)) && - (mBitSet.get(mSymbolLength - 1) ^ decision)) - { - sendTapEvent(mBitSet, Shift.RIGHT, decision); - - /* Last bit from previous symbol to pre-fill next symbol */ - boolean previousSoftBit = mBitSet.get(mSymbolLength - 1); - - reset(); - - if(previousSoftBit) - { - mBitSet.set(0); - } - - mSampleCounter++; - } - /* No shift */ - else - { - sendTapEvent(mBitSet, Shift.NONE, decision); - - reset(); - } - } - } - - /** - * Sends the bit decision to the listener - */ - private void send(boolean decision) - { - if(mListener != null) - { - mListener.receive(mNormalOutput ? decision : !decision); - } - } - - private void reset() - { - mBitSet.clear(); - mSampleCounter = 0; - } - - /** - * Sends instrumentation tap event to all registered listeners - */ - private void sendTapEvent(BitSet bitset, Shift shift, boolean decision) - { - for(SymbolEventTap tap : mTaps) - { - SymbolEvent event = - new SymbolEvent(bitset.get(0, mSymbolLength), - mSymbolLength, - decision, - shift); - - tap.receive(event); - } - } - } - - /** - * Get instrumentation taps - */ - @Override - public List getTapGroups() - { - if(mAvailableTaps == null) - { - mAvailableTaps = new ArrayList(); - - TapGroup tapGroup = new TapGroup("FSK2 Decoder"); - tapGroup.add(new SymbolEventTap(INSTRUMENT_DECISION, 0, .025f)); - - mAvailableTaps.add(tapGroup); - } - - return mAvailableTaps; - } - - /** - * Add instrumentation tap - */ - @Override - public void registerTap(Tap tap) - { - if(tap instanceof SymbolEventTap && !mTaps.contains(tap)) - { - mTaps.add((SymbolEventTap) tap); - } - } - - /** - * Remove instrumentation tap - */ - @Override - public void unregisterTap(Tap tap) - { - mTaps.remove(tap); - } -} diff --git a/src/main/java/io/github/dsheirer/dsp/symbol/Slicer.java b/src/main/java/io/github/dsheirer/dsp/symbol/Slicer.java deleted file mode 100644 index a122ee42..00000000 --- a/src/main/java/io/github/dsheirer/dsp/symbol/Slicer.java +++ /dev/null @@ -1,149 +0,0 @@ -package io.github.dsheirer.dsp.symbol; - -import io.github.dsheirer.instrument.tap.stream.SymbolEventTap; -import io.github.dsheirer.sample.Listener; - -import java.util.BitSet; - -/** - * Symbol slicer with auto-aligning baud timing - */ -public class Slicer implements Listener -{ - public enum Output{ NORMAL, INVERTED }; - - private BitSet mBitSet = new BitSet(); - private int mSymbolLength; - private int mDecisionThreshold; - private int mSampleCounter; - private SymbolEventTap mSymbolEventTap; - - private boolean mNormalOutput = true; - private Listener mListener; - - public Slicer( Output output, int samplesPerSymbol ) - { - mNormalOutput = ( output == Output.NORMAL ); - - mSymbolLength = samplesPerSymbol; - - /* Round up */ - mDecisionThreshold = (int)( mSymbolLength / 2 ) + ( mSymbolLength % 2 ); - } - - public void receive( Boolean sample ) - { - if( mSampleCounter >= 0 ) - { - if( sample ) - { - mBitSet.set( mSampleCounter ); - } - else - { - mBitSet.clear( mSampleCounter ); - } - } - - mSampleCounter++; - - if( mSampleCounter >= mSymbolLength ) - { - boolean decision = mBitSet.cardinality() >= mDecisionThreshold; - - send( decision ); - - /* Shift timing left if the left bit in the bitset is opposite - * the decision and the right bit is the same */ - if( ( mBitSet.get( 0 ) ^ decision ) && - ( !( mBitSet.get( mSymbolLength - 1 ) ^ decision ) ) ) - { - sendTapEvent( mBitSet, SymbolEvent.Shift.LEFT, decision ); - - reset(); - - mSampleCounter--; - } - /* Shift timing right if the left bit is the same as the - * decision and the right bit is opposite */ - else if( ( !( mBitSet.get( 0 ) ^ decision ) ) && - ( mBitSet.get( mSymbolLength - 1 ) ^ decision ) ) - { - sendTapEvent( mBitSet, SymbolEvent.Shift.RIGHT, decision ); - - /* Last bit from previous symbol to pre-fill next symbol */ - boolean previousSoftBit = mBitSet.get( mSymbolLength - 1 ); - - reset(); - - if( previousSoftBit ) - { - mBitSet.set( 0 ); - } - - mSampleCounter++; - } - /* No shift */ - else - { - sendTapEvent( mBitSet, SymbolEvent.Shift.NONE, decision ); - - reset(); - } - } - } - - /** - * Sends the bit decision to the listener - */ - private void send( boolean decision ) - { - if( mListener != null ) - { - mListener.receive( mNormalOutput ? decision : !decision ); - } - } - - private void reset() - { - mBitSet.clear(); - mSampleCounter = 0; - } - - public void setListener( Listener listener) - { - mListener = listener; - } - - public void removeListener( Listener listener ) - { - mListener = null; - } - - /** - * Sends instrumentation tap event to all registered listeners - */ - private void sendTapEvent(BitSet bitset, SymbolEvent.Shift shift, boolean decision ) - { - if( mSymbolEventTap != null ) - { - SymbolEvent event = - new SymbolEvent( bitset.get( 0, mSymbolLength ), - mSymbolLength, - decision, - shift ); - - mSymbolEventTap.receive( event ); - } - } - - public void addTap( SymbolEventTap tap ) - { - mSymbolEventTap = tap; - } - - public void removeTap() - { - mSymbolEventTap = null; - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/DemodulatorViewerFX.java b/src/main/java/io/github/dsheirer/instrument/DemodulatorViewerFX.java similarity index 98% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/DemodulatorViewerFX.java rename to src/main/java/io/github/dsheirer/instrument/DemodulatorViewerFX.java index 5af21746..5c21f06a 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/DemodulatorViewerFX.java +++ b/src/main/java/io/github/dsheirer/instrument/DemodulatorViewerFX.java @@ -13,9 +13,9 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer; +package io.github.dsheirer.instrument; -import io.github.dsheirer.instrument.gui.viewer.decoder.DecoderPaneFactory; +import io.github.dsheirer.instrument.decoder.DecoderPaneFactory; import io.github.dsheirer.module.decode.DecoderType; import io.github.dsheirer.module.decode.p25.P25Decoder; import javafx.application.Application; diff --git a/src/main/java/io/github/dsheirer/instrument/Instrumentable.java b/src/main/java/io/github/dsheirer/instrument/Instrumentable.java deleted file mode 100644 index c06db9ab..00000000 --- a/src/main/java/io/github/dsheirer/instrument/Instrumentable.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument; - -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapGroup; - -import java.util.List; - -/** - * Interface for classes that want to expose internal data, streams or events - * to external listeners. - */ -public interface Instrumentable -{ - /** - * Returns the list of available tap point groups. Use the addTap() and - * removeTap() to register a tap on the instrumentable class and then add - * your TapListener(s) to the registered tap. - */ - public List getTapGroups(); - - /** - * Registers a tap on the instrumentable object. - * - * @param tap - one of the tap(s) obtained from getTaps() from the - * instrumentable source - */ - public void registerTap( Tap tap ); - - /** - * Unregisters a tap on the instrumentable object, if the tap is currently - * registered. - * - * @param tap - one of the tap(s) obtained from getTaps() from the - * instrumentable source - */ - public void unregisterTap( Tap tap ); -} diff --git a/src/main/java/io/github/dsheirer/instrument/InstrumentableProcessingChain.java b/src/main/java/io/github/dsheirer/instrument/InstrumentableProcessingChain.java deleted file mode 100644 index d2a99b2f..00000000 --- a/src/main/java/io/github/dsheirer/instrument/InstrumentableProcessingChain.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * sdrtrunk - * Copyright (C) 2014-2017 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.instrument; - -import io.github.dsheirer.controller.channel.Channel.ChannelType; -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapGroup; -import io.github.dsheirer.module.Module; -import io.github.dsheirer.module.ProcessingChain; -import io.github.dsheirer.source.Source; - -import java.util.ArrayList; -import java.util.List; - -public class InstrumentableProcessingChain extends ProcessingChain implements Instrumentable -{ - public InstrumentableProcessingChain() - { - super(ChannelType.STANDARD); - } - - public void setSource(Source source) throws IllegalStateException - { - mSource = source; - } - - @Override - public List getTapGroups() - { - List groups = new ArrayList<>(); - - for(Module module : getModules()) - { - if(module instanceof Instrumentable) - { - groups.addAll(((Instrumentable)module).getTapGroups()); - } - } - - return groups; - } - - @Override - public void registerTap(Tap tap) - { - for(Module module : getModules()) - { - if(module instanceof Instrumentable) - { - ((Instrumentable)module).registerTap(tap); - } - } - } - - @Override - public void unregisterTap(Tap tap) - { - for(Module module : getModules()) - { - if(module instanceof Instrumentable) - { - ((Instrumentable)module).unregisterTap(tap); - } - } - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/PlaybackController.java b/src/main/java/io/github/dsheirer/instrument/PlaybackController.java similarity index 98% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/PlaybackController.java rename to src/main/java/io/github/dsheirer/instrument/PlaybackController.java index 25bee580..68029c1f 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/PlaybackController.java +++ b/src/main/java/io/github/dsheirer/instrument/PlaybackController.java @@ -13,9 +13,9 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer; +package io.github.dsheirer.instrument; -import io.github.dsheirer.instrument.gui.viewer.decoder.AbstractDecoderPane; +import io.github.dsheirer.instrument.decoder.AbstractDecoderPane; import io.github.dsheirer.sample.Listener; import io.github.dsheirer.sample.buffer.ReusableBuffer; import io.github.dsheirer.sample.buffer.ReusableBufferBroadcaster; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/RecentFilesMenu.java b/src/main/java/io/github/dsheirer/instrument/RecentFilesMenu.java similarity index 86% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/RecentFilesMenu.java rename to src/main/java/io/github/dsheirer/instrument/RecentFilesMenu.java index 873babf7..ea8948d3 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/RecentFilesMenu.java +++ b/src/main/java/io/github/dsheirer/instrument/RecentFilesMenu.java @@ -1,4 +1,19 @@ -package io.github.dsheirer.instrument.gui.viewer; +/******************************************************************************* + * 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.instrument; import javafx.event.ActionEvent; import javafx.event.EventHandler; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/ViewerDesktop.java b/src/main/java/io/github/dsheirer/instrument/ViewerDesktop.java similarity index 92% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/ViewerDesktop.java rename to src/main/java/io/github/dsheirer/instrument/ViewerDesktop.java index ece3faa5..ed372f6f 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/ViewerDesktop.java +++ b/src/main/java/io/github/dsheirer/instrument/ViewerDesktop.java @@ -13,10 +13,10 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer; +package io.github.dsheirer.instrument; -import io.github.dsheirer.instrument.gui.viewer.decoder.AbstractDecoderPane; -import io.github.dsheirer.instrument.gui.viewer.decoder.DecoderPaneFactory; +import io.github.dsheirer.instrument.decoder.AbstractDecoderPane; +import io.github.dsheirer.instrument.decoder.DecoderPaneFactory; import io.github.dsheirer.module.decode.DecoderType; import io.github.dsheirer.module.decode.p25.P25Decoder; import javafx.scene.layout.BorderPane; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/AFSK1200SampleBufferChart.java b/src/main/java/io/github/dsheirer/instrument/chart/AFSK1200SampleBufferChart.java similarity index 99% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/AFSK1200SampleBufferChart.java rename to src/main/java/io/github/dsheirer/instrument/chart/AFSK1200SampleBufferChart.java index 9014ac5e..49e93240 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/AFSK1200SampleBufferChart.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/AFSK1200SampleBufferChart.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/AFSK1200ZeroCrossingErrorDetectorChart.java b/src/main/java/io/github/dsheirer/instrument/chart/AFSK1200ZeroCrossingErrorDetectorChart.java similarity index 98% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/AFSK1200ZeroCrossingErrorDetectorChart.java rename to src/main/java/io/github/dsheirer/instrument/chart/AFSK1200ZeroCrossingErrorDetectorChart.java index 202cb607..e90b00d9 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/AFSK1200ZeroCrossingErrorDetectorChart.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/AFSK1200ZeroCrossingErrorDetectorChart.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/ComplexPhaseLineChart.java b/src/main/java/io/github/dsheirer/instrument/chart/ComplexPhaseLineChart.java similarity index 98% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/ComplexPhaseLineChart.java rename to src/main/java/io/github/dsheirer/instrument/chart/ComplexPhaseLineChart.java index 000f3a50..97a238cc 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/ComplexPhaseLineChart.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/ComplexPhaseLineChart.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import io.github.dsheirer.buffer.ComplexCircularBuffer; import io.github.dsheirer.dsp.gain.ComplexGain; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/ComplexSampleLineChart.java b/src/main/java/io/github/dsheirer/instrument/chart/ComplexSampleLineChart.java similarity index 98% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/ComplexSampleLineChart.java rename to src/main/java/io/github/dsheirer/instrument/chart/ComplexSampleLineChart.java index d1b4b00c..e36214a0 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/ComplexSampleLineChart.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/ComplexSampleLineChart.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import io.github.dsheirer.buffer.ComplexCircularBuffer; import io.github.dsheirer.dsp.gain.ComplexGain; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/DecodedSymbolChart.java b/src/main/java/io/github/dsheirer/instrument/chart/DecodedSymbolChart.java similarity index 97% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/DecodedSymbolChart.java rename to src/main/java/io/github/dsheirer/instrument/chart/DecodedSymbolChart.java index f2b20124..073169fa 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/DecodedSymbolChart.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/DecodedSymbolChart.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import io.github.dsheirer.sample.Listener; import javafx.collections.FXCollections; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/DoubleLineChart.java b/src/main/java/io/github/dsheirer/instrument/chart/DoubleLineChart.java similarity index 97% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/DoubleLineChart.java rename to src/main/java/io/github/dsheirer/instrument/chart/DoubleLineChart.java index 54811999..12e0c898 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/DoubleLineChart.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/DoubleLineChart.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import io.github.dsheirer.buffer.DoubleCircularBuffer; import io.github.dsheirer.sample.Listener; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/EyeDiagramChart.java b/src/main/java/io/github/dsheirer/instrument/chart/EyeDiagramChart.java similarity index 98% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/EyeDiagramChart.java rename to src/main/java/io/github/dsheirer/instrument/chart/EyeDiagramChart.java index b266e99a..5cf731a6 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/EyeDiagramChart.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/EyeDiagramChart.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import io.github.dsheirer.dsp.psk.SymbolDecisionData; import io.github.dsheirer.sample.Listener; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/FMDemodulatedLineChart.java b/src/main/java/io/github/dsheirer/instrument/chart/FMDemodulatedLineChart.java similarity index 98% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/FMDemodulatedLineChart.java rename to src/main/java/io/github/dsheirer/instrument/chart/FMDemodulatedLineChart.java index 334db601..7f44efb8 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/FMDemodulatedLineChart.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/FMDemodulatedLineChart.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import io.github.dsheirer.buffer.DoubleCircularBuffer; import io.github.dsheirer.dsp.fm.FMDemodulator; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/IInstrumentedAFSK1200Decoder.java b/src/main/java/io/github/dsheirer/instrument/chart/IInstrumentedAFSK1200Decoder.java similarity index 95% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/IInstrumentedAFSK1200Decoder.java rename to src/main/java/io/github/dsheirer/instrument/chart/IInstrumentedAFSK1200Decoder.java index c8236d15..c0e10cdb 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/IInstrumentedAFSK1200Decoder.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/IInstrumentedAFSK1200Decoder.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import io.github.dsheirer.dsp.afsk.AFSK1200DecoderInstrumented; import io.github.dsheirer.message.Message; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/LTRNetSampleBufferChart.java b/src/main/java/io/github/dsheirer/instrument/chart/LTRNetSampleBufferChart.java similarity index 99% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/LTRNetSampleBufferChart.java rename to src/main/java/io/github/dsheirer/instrument/chart/LTRNetSampleBufferChart.java index ade62f19..7237649c 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/LTRNetSampleBufferChart.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/LTRNetSampleBufferChart.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import io.github.dsheirer.module.decode.ltrnet.LTRNetDecoderInstrumented; import javafx.beans.value.ChangeListener; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/PhaseLineChart.java b/src/main/java/io/github/dsheirer/instrument/chart/PhaseLineChart.java similarity index 97% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/PhaseLineChart.java rename to src/main/java/io/github/dsheirer/instrument/chart/PhaseLineChart.java index df7ff76a..1b505f89 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/PhaseLineChart.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/PhaseLineChart.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import io.github.dsheirer.buffer.DoubleCircularBuffer; import io.github.dsheirer.sample.Listener; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/RealSampleLineChart.java b/src/main/java/io/github/dsheirer/instrument/chart/RealSampleLineChart.java similarity index 98% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/RealSampleLineChart.java rename to src/main/java/io/github/dsheirer/instrument/chart/RealSampleLineChart.java index 94f02060..9ec5210b 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/RealSampleLineChart.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/RealSampleLineChart.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import io.github.dsheirer.buffer.RealCircularBuffer; import io.github.dsheirer.sample.Listener; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/SymbolChart.java b/src/main/java/io/github/dsheirer/instrument/chart/SymbolChart.java similarity index 98% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/SymbolChart.java rename to src/main/java/io/github/dsheirer/instrument/chart/SymbolChart.java index 6f99f042..070ca5a9 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/SymbolChart.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/SymbolChart.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import io.github.dsheirer.sample.Listener; import io.github.dsheirer.sample.complex.Complex; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/ZeroCrossingErrorDetectorChart.java b/src/main/java/io/github/dsheirer/instrument/chart/ZeroCrossingErrorDetectorChart.java similarity index 99% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/ZeroCrossingErrorDetectorChart.java rename to src/main/java/io/github/dsheirer/instrument/chart/ZeroCrossingErrorDetectorChart.java index 2d9b055b..4b0ebcb6 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/chart/ZeroCrossingErrorDetectorChart.java +++ b/src/main/java/io/github/dsheirer/instrument/chart/ZeroCrossingErrorDetectorChart.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.chart; +package io.github.dsheirer.instrument.chart; import io.github.dsheirer.module.decode.ltrnet.LTRNetDecoderInstrumented; import javafx.beans.value.ChangeListener; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/AbstractAFSK1200Pane.java b/src/main/java/io/github/dsheirer/instrument/decoder/AbstractAFSK1200Pane.java similarity index 91% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/AbstractAFSK1200Pane.java rename to src/main/java/io/github/dsheirer/instrument/decoder/AbstractAFSK1200Pane.java index 1ad275b8..def2f899 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/AbstractAFSK1200Pane.java +++ b/src/main/java/io/github/dsheirer/instrument/decoder/AbstractAFSK1200Pane.java @@ -13,13 +13,13 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.decoder; +package io.github.dsheirer.instrument.decoder; -import io.github.dsheirer.instrument.gui.viewer.chart.AFSK1200SampleBufferChart; -import io.github.dsheirer.instrument.gui.viewer.chart.AFSK1200ZeroCrossingErrorDetectorChart; -import io.github.dsheirer.instrument.gui.viewer.chart.DecodedSymbolChart; -import io.github.dsheirer.instrument.gui.viewer.chart.IInstrumentedAFSK1200Decoder; -import io.github.dsheirer.instrument.gui.viewer.chart.RealSampleLineChart; +import io.github.dsheirer.instrument.chart.AFSK1200SampleBufferChart; +import io.github.dsheirer.instrument.chart.AFSK1200ZeroCrossingErrorDetectorChart; +import io.github.dsheirer.instrument.chart.DecodedSymbolChart; +import io.github.dsheirer.instrument.chart.IInstrumentedAFSK1200Decoder; +import io.github.dsheirer.instrument.chart.RealSampleLineChart; import io.github.dsheirer.message.Message; import io.github.dsheirer.module.decode.DecoderType; import io.github.dsheirer.sample.Listener; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/AbstractDecoderPane.java b/src/main/java/io/github/dsheirer/instrument/decoder/AbstractDecoderPane.java similarity index 95% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/AbstractDecoderPane.java rename to src/main/java/io/github/dsheirer/instrument/decoder/AbstractDecoderPane.java index 1535ec43..3770c136 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/AbstractDecoderPane.java +++ b/src/main/java/io/github/dsheirer/instrument/decoder/AbstractDecoderPane.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.decoder; +package io.github.dsheirer.instrument.decoder; import io.github.dsheirer.sample.Listener; import io.github.dsheirer.sample.SampleType; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/ComplexDecoderPane.java b/src/main/java/io/github/dsheirer/instrument/decoder/ComplexDecoderPane.java similarity index 97% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/ComplexDecoderPane.java rename to src/main/java/io/github/dsheirer/instrument/decoder/ComplexDecoderPane.java index dc67f4e3..edbdece8 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/ComplexDecoderPane.java +++ b/src/main/java/io/github/dsheirer/instrument/decoder/ComplexDecoderPane.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.decoder; +package io.github.dsheirer.instrument.decoder; import io.github.dsheirer.module.decode.DecoderType; import io.github.dsheirer.sample.Listener; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/DecoderPaneFactory.java b/src/main/java/io/github/dsheirer/instrument/decoder/DecoderPaneFactory.java similarity index 98% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/DecoderPaneFactory.java rename to src/main/java/io/github/dsheirer/instrument/decoder/DecoderPaneFactory.java index a78202c8..25812155 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/DecoderPaneFactory.java +++ b/src/main/java/io/github/dsheirer/instrument/decoder/DecoderPaneFactory.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.decoder; +package io.github.dsheirer.instrument.decoder; import io.github.dsheirer.module.decode.DecoderType; import io.github.dsheirer.module.decode.p25.P25Decoder; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/Fleetsync2Pane.java b/src/main/java/io/github/dsheirer/instrument/decoder/Fleetsync2Pane.java similarity index 96% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/Fleetsync2Pane.java rename to src/main/java/io/github/dsheirer/instrument/decoder/Fleetsync2Pane.java index a2f45b38..f7a8f5e6 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/Fleetsync2Pane.java +++ b/src/main/java/io/github/dsheirer/instrument/decoder/Fleetsync2Pane.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.decoder; +package io.github.dsheirer.instrument.decoder; import io.github.dsheirer.module.decode.DecoderType; import io.github.dsheirer.module.decode.fleetsync2.Fleetsync2DecoderInstrumented; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/LJ1200Pane.java b/src/main/java/io/github/dsheirer/instrument/decoder/LJ1200Pane.java similarity index 97% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/LJ1200Pane.java rename to src/main/java/io/github/dsheirer/instrument/decoder/LJ1200Pane.java index 2b5fa55b..801331ba 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/LJ1200Pane.java +++ b/src/main/java/io/github/dsheirer/instrument/decoder/LJ1200Pane.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.decoder; +package io.github.dsheirer.instrument.decoder; import io.github.dsheirer.dsp.symbol.ISyncDetectListener; import io.github.dsheirer.module.decode.DecoderType; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/LTRNetPane.java b/src/main/java/io/github/dsheirer/instrument/decoder/LTRNetPane.java similarity index 94% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/LTRNetPane.java rename to src/main/java/io/github/dsheirer/instrument/decoder/LTRNetPane.java index ee8162f2..e0a5f15a 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/LTRNetPane.java +++ b/src/main/java/io/github/dsheirer/instrument/decoder/LTRNetPane.java @@ -13,11 +13,11 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.decoder; +package io.github.dsheirer.instrument.decoder; -import io.github.dsheirer.instrument.gui.viewer.chart.LTRNetSampleBufferChart; -import io.github.dsheirer.instrument.gui.viewer.chart.RealSampleLineChart; -import io.github.dsheirer.instrument.gui.viewer.chart.ZeroCrossingErrorDetectorChart; +import io.github.dsheirer.instrument.chart.LTRNetSampleBufferChart; +import io.github.dsheirer.instrument.chart.RealSampleLineChart; +import io.github.dsheirer.instrument.chart.ZeroCrossingErrorDetectorChart; import io.github.dsheirer.message.Message; import io.github.dsheirer.message.MessageDirection; import io.github.dsheirer.module.decode.DecoderType; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/MDC1200Pane.java b/src/main/java/io/github/dsheirer/instrument/decoder/MDC1200Pane.java similarity index 96% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/MDC1200Pane.java rename to src/main/java/io/github/dsheirer/instrument/decoder/MDC1200Pane.java index 80953de9..6027eb3e 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/MDC1200Pane.java +++ b/src/main/java/io/github/dsheirer/instrument/decoder/MDC1200Pane.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.decoder; +package io.github.dsheirer.instrument.decoder; import io.github.dsheirer.dsp.symbol.ISyncDetectListener; import io.github.dsheirer.module.decode.DecoderType; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/MPT1327Pane.java b/src/main/java/io/github/dsheirer/instrument/decoder/MPT1327Pane.java similarity index 97% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/MPT1327Pane.java rename to src/main/java/io/github/dsheirer/instrument/decoder/MPT1327Pane.java index dca8662b..696f101b 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/MPT1327Pane.java +++ b/src/main/java/io/github/dsheirer/instrument/decoder/MPT1327Pane.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.decoder; +package io.github.dsheirer.instrument.decoder; import io.github.dsheirer.dsp.symbol.ISyncDetectListener; import io.github.dsheirer.module.decode.DecoderType; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/P25Phase1C4FMPane.java b/src/main/java/io/github/dsheirer/instrument/decoder/P25Phase1C4FMPane.java similarity index 94% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/P25Phase1C4FMPane.java rename to src/main/java/io/github/dsheirer/instrument/decoder/P25Phase1C4FMPane.java index ec35b0de..223960cb 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/P25Phase1C4FMPane.java +++ b/src/main/java/io/github/dsheirer/instrument/decoder/P25Phase1C4FMPane.java @@ -13,13 +13,13 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.decoder; +package io.github.dsheirer.instrument.decoder; -import io.github.dsheirer.instrument.gui.viewer.chart.ComplexSampleLineChart; -import io.github.dsheirer.instrument.gui.viewer.chart.DoubleLineChart; -import io.github.dsheirer.instrument.gui.viewer.chart.EyeDiagramChart; -import io.github.dsheirer.instrument.gui.viewer.chart.PhaseLineChart; -import io.github.dsheirer.instrument.gui.viewer.chart.SymbolChart; +import io.github.dsheirer.instrument.chart.ComplexSampleLineChart; +import io.github.dsheirer.instrument.chart.DoubleLineChart; +import io.github.dsheirer.instrument.chart.EyeDiagramChart; +import io.github.dsheirer.instrument.chart.PhaseLineChart; +import io.github.dsheirer.instrument.chart.SymbolChart; import io.github.dsheirer.message.Message; import io.github.dsheirer.module.decode.DecoderType; import io.github.dsheirer.module.decode.p25.P25DecoderC4FMInstrumented; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/P25Phase1LSMPane.java b/src/main/java/io/github/dsheirer/instrument/decoder/P25Phase1LSMPane.java similarity index 94% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/P25Phase1LSMPane.java rename to src/main/java/io/github/dsheirer/instrument/decoder/P25Phase1LSMPane.java index 185e26a4..53335842 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/P25Phase1LSMPane.java +++ b/src/main/java/io/github/dsheirer/instrument/decoder/P25Phase1LSMPane.java @@ -13,13 +13,13 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.decoder; +package io.github.dsheirer.instrument.decoder; -import io.github.dsheirer.instrument.gui.viewer.chart.ComplexSampleLineChart; -import io.github.dsheirer.instrument.gui.viewer.chart.DoubleLineChart; -import io.github.dsheirer.instrument.gui.viewer.chart.EyeDiagramChart; -import io.github.dsheirer.instrument.gui.viewer.chart.PhaseLineChart; -import io.github.dsheirer.instrument.gui.viewer.chart.SymbolChart; +import io.github.dsheirer.instrument.chart.ComplexSampleLineChart; +import io.github.dsheirer.instrument.chart.DoubleLineChart; +import io.github.dsheirer.instrument.chart.EyeDiagramChart; +import io.github.dsheirer.instrument.chart.PhaseLineChart; +import io.github.dsheirer.instrument.chart.SymbolChart; import io.github.dsheirer.message.Message; import io.github.dsheirer.module.decode.DecoderType; import io.github.dsheirer.module.decode.p25.P25DecoderLSMInstrumented; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/RealDecoderPane.java b/src/main/java/io/github/dsheirer/instrument/decoder/RealDecoderPane.java similarity index 97% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/RealDecoderPane.java rename to src/main/java/io/github/dsheirer/instrument/decoder/RealDecoderPane.java index 4d9a4871..3853c36c 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/RealDecoderPane.java +++ b/src/main/java/io/github/dsheirer/instrument/decoder/RealDecoderPane.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.decoder; +package io.github.dsheirer.instrument.decoder; import io.github.dsheirer.module.decode.DecoderType; import io.github.dsheirer.sample.Listener; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/Tait1200Pane.java b/src/main/java/io/github/dsheirer/instrument/decoder/Tait1200Pane.java similarity index 97% rename from src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/Tait1200Pane.java rename to src/main/java/io/github/dsheirer/instrument/decoder/Tait1200Pane.java index 07b877e3..75cfb35e 100644 --- a/src/main/java/io/github/dsheirer/instrument/gui/viewer/decoder/Tait1200Pane.java +++ b/src/main/java/io/github/dsheirer/instrument/decoder/Tait1200Pane.java @@ -13,7 +13,7 @@ * If not, see * ******************************************************************************/ -package io.github.dsheirer.instrument.gui.viewer.decoder; +package io.github.dsheirer.instrument.decoder; import io.github.dsheirer.dsp.symbol.ISyncDetectListener; import io.github.dsheirer.module.decode.DecoderType; diff --git a/src/main/java/io/github/dsheirer/instrument/gui/ConstellationPanel.java b/src/main/java/io/github/dsheirer/instrument/gui/ConstellationPanel.java deleted file mode 100644 index 77682fa5..00000000 --- a/src/main/java/io/github/dsheirer/instrument/gui/ConstellationPanel.java +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.gui; - -import io.github.dsheirer.gui.control.ConstellationViewer; -import io.github.dsheirer.sample.Listener; -import io.github.dsheirer.sample.complex.Complex; -import io.github.dsheirer.source.IFrameLocationListener; -import net.miginfocom.swing.MigLayout; - -import javax.swing.*; -import java.awt.*; - -public class ConstellationPanel extends JInternalFrame - implements IFrameLocationListener, Listener -{ - private static final long serialVersionUID = 1L; - - private ConstellationViewer mConstellation = new ConstellationViewer( 48000, 4800 ); - - public ConstellationPanel() - { - initGui(); - } - - private void initGui() - { - setLayout( new MigLayout( "insets 0 0 0 0 ", "[grow,fill]", "[grow,fill]" ) ); - - setTitle( "Constellation View" ); - setPreferredSize( new Dimension( 300, 300 ) ); - setSize( 300, 300 ); - - setResizable( true ); - setClosable( true ); - setIconifiable( true ); - setMaximizable( false ); - - add( mConstellation ); - } - - - @Override - public void frameLocationUpdated( int location ) - { - // TODO Auto-generated method stub - - } - - @Override - public void frameLocationReset() - { - // TODO Auto-generated method stub - - } - - @Override - public void receive( Complex sample ) - { - mConstellation.receive( sample ); - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/gui/DecoderSelectionFrame.java b/src/main/java/io/github/dsheirer/instrument/gui/DecoderSelectionFrame.java deleted file mode 100644 index bc3f28d4..00000000 --- a/src/main/java/io/github/dsheirer/instrument/gui/DecoderSelectionFrame.java +++ /dev/null @@ -1,102 +0,0 @@ -package io.github.dsheirer.instrument.gui; - -import io.github.dsheirer.alias.AliasModel; -import io.github.dsheirer.audio.broadcast.BroadcastModel; -import io.github.dsheirer.controller.channel.Channel; -import io.github.dsheirer.controller.channel.ChannelModel; -import io.github.dsheirer.controller.channel.map.ChannelMapModel; -import io.github.dsheirer.module.decode.DecodeConfigurationEditor; -import io.github.dsheirer.module.decode.config.DecodeConfiguration; -import io.github.dsheirer.playlist.PlaylistManager; -import io.github.dsheirer.source.IControllableFileSource; -import net.miginfocom.swing.MigLayout; - -import javax.swing.JButton; -import javax.swing.JDesktopPane; -import javax.swing.JInternalFrame; -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -public class DecoderSelectionFrame extends JInternalFrame -{ - private static final long serialVersionUID = 1L; - - private Channel mChannel = new Channel(); - private DecodeConfigurationEditor mDecodeEditor = new DecodeConfigurationEditor(null); - private PlaylistManager mPlaylistManager; - - private IControllableFileSource mSource; - private JDesktopPane mDesktop; - - public DecoderSelectionFrame(JDesktopPane desktop, IControllableFileSource source) - { - AliasModel aliasModel = new AliasModel(); - BroadcastModel broadcastModel = new BroadcastModel(null); - ChannelModel channelModel = new ChannelModel(); - ChannelMapModel channelMapModel = new ChannelMapModel(); - - mPlaylistManager = new PlaylistManager(aliasModel, broadcastModel, channelModel, channelMapModel); - - mDesktop = desktop; - mSource = source; - - mDecodeEditor.setItem(mChannel); - initGUI(); - } - - private void initGUI() - { - setLayout(new MigLayout("", "[grow,fill]", "[][][grow,fill]")); - - setTitle("Decoders"); - setPreferredSize(new Dimension(700, 450)); - setSize(700, 450); - - setResizable(true); - setClosable(true); - setIconifiable(true); - setMaximizable(false); - - add(mDecodeEditor, "wrap"); - - add(new AddDecoderButton(), "span"); - - } - - public class AddDecoderButton extends JButton - { - private static final long serialVersionUID = 1L; - - public AddDecoderButton() - { - super("Add"); - - addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent arg0) - { - mDecodeEditor.save(); - - Channel channel = mDecodeEditor.getItem(); - - if(channel != null) - { - DecodeConfiguration config = channel.getDecodeConfiguration(); - - if( config != null ) - { - DecoderViewFrame decoderFrame = new DecoderViewFrame(mPlaylistManager, channel, mSource ); - - decoderFrame.setVisible( true ); - - mDesktop.add( decoderFrame ); - } - } - } - }); - } - } - -} diff --git a/src/main/java/io/github/dsheirer/instrument/gui/DecoderViewFrame.java b/src/main/java/io/github/dsheirer/instrument/gui/DecoderViewFrame.java deleted file mode 100644 index 8c944c0c..00000000 --- a/src/main/java/io/github/dsheirer/instrument/gui/DecoderViewFrame.java +++ /dev/null @@ -1,355 +0,0 @@ -/******************************************************************************* - * sdrtrunk - * Copyright (C) 2014-2017 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.instrument.gui; - -import io.github.dsheirer.alias.AliasModel; -import io.github.dsheirer.controller.channel.Channel; -import io.github.dsheirer.controller.channel.ChannelModel; -import io.github.dsheirer.controller.channel.ChannelProcessingManager; -import io.github.dsheirer.controller.channel.map.ChannelMapModel; -import io.github.dsheirer.instrument.Instrumentable; -import io.github.dsheirer.instrument.InstrumentableProcessingChain; -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapGroup; -import io.github.dsheirer.instrument.tap.TapViewPanel; -import io.github.dsheirer.instrument.tap.stream.BinaryTap; -import io.github.dsheirer.instrument.tap.stream.BinaryTapViewPanel; -import io.github.dsheirer.instrument.tap.stream.ComplexSampleTap; -import io.github.dsheirer.instrument.tap.stream.ComplexSampleTapViewPanel; -import io.github.dsheirer.instrument.tap.stream.ComplexTap; -import io.github.dsheirer.instrument.tap.stream.ComplexTapViewPanel; -import io.github.dsheirer.instrument.tap.stream.DibitTap; -import io.github.dsheirer.instrument.tap.stream.DibitTapViewPanel; -import io.github.dsheirer.instrument.tap.stream.EyeDiagramDataTap; -import io.github.dsheirer.instrument.tap.stream.EyeDiagramDataTapPanel; -import io.github.dsheirer.instrument.tap.stream.FloatTap; -import io.github.dsheirer.instrument.tap.stream.FloatTapViewPanel; -import io.github.dsheirer.instrument.tap.stream.QPSKTap; -import io.github.dsheirer.instrument.tap.stream.QPSKTapPanel; -import io.github.dsheirer.instrument.tap.stream.SymbolEventTap; -import io.github.dsheirer.instrument.tap.stream.SymbolEventTapViewPanel; -import io.github.dsheirer.message.Message; -import io.github.dsheirer.module.Module; -import io.github.dsheirer.module.decode.DecoderFactory; -import io.github.dsheirer.module.decode.config.DecodeConfiguration; -import io.github.dsheirer.module.log.EventLogManager; -import io.github.dsheirer.playlist.PlaylistManager; -import io.github.dsheirer.sample.Listener; -import io.github.dsheirer.source.IControllableFileSource; -import io.github.dsheirer.source.Source; -import net.miginfocom.swing.MigLayout; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.util.HashMap; -import java.util.List; - -public class DecoderViewFrame extends JInternalFrame implements Listener -{ - private static final long serialVersionUID = 1L; - private final static Logger mLog = LoggerFactory.getLogger(DecoderViewFrame.class); - - private DecodeConfiguration mDecodeConfig; - private InstrumentableProcessingChain mProcessingChain; - private IControllableFileSource mSource; - - private HashMap mPanelMap = new HashMap(); - - public DecoderViewFrame(PlaylistManager playlistManager, Channel channel, IControllableFileSource source) - { - mSource = source; - - mDecodeConfig = channel.getDecodeConfiguration(); - - mProcessingChain = new InstrumentableProcessingChain(); - - ChannelModel channelModel = new ChannelModel(); - ChannelMapModel channelMapModel = new ChannelMapModel(); - - ChannelProcessingManager channelProcessingManager = new ChannelProcessingManager(channelModel, channelMapModel, - new AliasModel(), new EventLogManager(), null, null); - - List modules = DecoderFactory.getModules(channelModel, channelMapModel, channelProcessingManager, - new AliasModel(), channel, mProcessingChain.getChannelState().getMutableMetadata()); - - mProcessingChain.addModules(modules); - - mProcessingChain.addMessageListener(this); - - mProcessingChain.setSource((Source) mSource); - - mProcessingChain.start(); - - initGui(); - } - - private void initGui() - { - setLayout(new MigLayout("insets 0 0 0 0 ", "[grow,fill]", "[grow,fill]")); - - setTitle("Decoder [" + mDecodeConfig.getDecoderType().getDisplayString() + "]"); - setPreferredSize(new Dimension(450, 250)); - setSize(450, 250); - - setResizable(true); - setClosable(true); - setIconifiable(true); - setMaximizable(false); - - addMouseListener(new MouseListener() - { - @Override - public void mouseClicked(MouseEvent me) - { - if(me.getButton() == MouseEvent.BUTTON3) - { - JPopupMenu popup = new JPopupMenu(); - - popup.add(getTapContextMenu()); - - if(!mPanelMap.values().isEmpty()) - { - popup.add(new JSeparator()); - - for(TapViewPanel panel : mPanelMap.values()) - { - popup.add(panel.getContextMenu()); - } - } - - popup.show(DecoderViewFrame.this, me.getX(), me.getY()); - } - } - - @Override - public void mouseEntered(MouseEvent arg0) - { - } - - @Override - public void mouseExited(MouseEvent arg0) - { - } - - @Override - public void mousePressed(MouseEvent arg0) - { - } - - @Override - public void mouseReleased(MouseEvent arg0) - { - } - - }); - } - - private JMenu getTapContextMenu() - { - JMenu menu = new JMenu("Modules"); - - if(mProcessingChain != null) - { - for(Module module : mProcessingChain.getModules()) - { - if(module instanceof Instrumentable) - { - List groups = ((Instrumentable) module).getTapGroups(); - - for(TapGroup group : groups) - { - menu.add(new TapGroupMenu(group)); - } - } - } - } - - return menu; - } - - public void add(Tap tap) - { - TapViewPanel panel = null; - - switch(tap.getType()) - { - case EVENT_SYNC_DETECT: - break; - case STREAM_BINARY: - panel = new BinaryTapViewPanel((BinaryTap) tap); - break; - case STREAM_COMPLEX: - panel = new ComplexTapViewPanel((ComplexTap) tap); - break; - case STREAM_COMPLEX_SAMPLE: - panel = new ComplexSampleTapViewPanel((ComplexSampleTap) tap); - break; - case STREAM_DIBIT: - panel = new DibitTapViewPanel((DibitTap) tap); - break; - case STREAM_EYE_DIAGRAM: - panel = new EyeDiagramDataTapPanel((EyeDiagramDataTap) tap); - break; - case STREAM_FLOAT: - panel = new FloatTapViewPanel((FloatTap) tap); - break; - case STREAM_QPSK: - panel = new QPSKTapPanel((QPSKTap) tap); - break; - case STREAM_SYMBOL: - panel = new SymbolEventTapViewPanel((SymbolEventTap) tap); - break; - } - - if(panel != null) - { - add(panel, "span"); - - validate(); - - mPanelMap.put(tap, panel); - - for(Module module : mProcessingChain.getModules()) - { - if(module instanceof Instrumentable) - { - ((Instrumentable) module).registerTap(tap); - } - } - } - else - { - mLog.info("Tap panel is null, couldn't add for tap " + - tap.getName() + "[" + tap.getType().toString() + "]"); - } - } - - public void remove(Tap tap) - { - for(Module module : mProcessingChain.getModules()) - { - if(module instanceof Instrumentable) - { - ((Instrumentable) module).unregisterTap(tap); - } - } - - TapViewPanel panel = mPanelMap.get(tap); - - remove(panel); - - validate(); - - mPanelMap.remove(tap); - } - - public class AddAllTapsItem extends JMenuItem - { - private static final long serialVersionUID = 1L; - - private final List mTaps; - - public AddAllTapsItem(final List taps) - { - super("All Taps"); - - mTaps = taps; - - addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - for(Tap tap : mTaps) - { - DecoderViewFrame.this.add(tap); - } - } - }); - } - } - - public class TapSelectionItem extends JCheckBoxMenuItem - { - private static final long serialVersionUID = 1L; - private Tap mTap; - - public TapSelectionItem(Tap tap) - { - super(tap.getName()); - - mTap = tap; - - if(mPanelMap.keySet().contains(tap)) - { - setSelected(true); - } - - addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent arg0) - { - if(mPanelMap.keySet().contains(mTap)) - { - DecoderViewFrame.this.remove(mTap); - } - else - { - DecoderViewFrame.this.add(mTap); - } - } - }); - } - } - - @Override - public void receive(Message message) - { - mLog.info(message.toString()); - } - - public class TapGroupMenu extends JMenu - { - private static final long serialVersionUID = 1L; - private TapGroup mTapGroup; - - public TapGroupMenu(TapGroup tapGroup) - { - super(tapGroup.getName()); - - mTapGroup = tapGroup; - - add(new AddAllTapsItem(mTapGroup.getTaps())); - - add(new JSeparator()); - - for(Tap tap : mTapGroup.getTaps()) - { - add(new TapSelectionItem(tap)); - } - } - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/gui/SampleModel.java b/src/main/java/io/github/dsheirer/instrument/gui/SampleModel.java deleted file mode 100644 index 0d7705ec..00000000 --- a/src/main/java/io/github/dsheirer/instrument/gui/SampleModel.java +++ /dev/null @@ -1,101 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.gui; - -import io.github.dsheirer.instrument.tap.TapListener; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Observable; - -public class SampleModel extends Observable implements TapListener -{ - private final static Logger mLog = - LoggerFactory.getLogger( SampleModel.class ); - - private int mSampleCount = 2000; - private int mDelay = 0; - private ArrayList mSamples = new ArrayList(); - - public SampleModel() - { - } - - public List getSamples() - { - return Collections.unmodifiableList( mSamples ); - } - - public void clearSamples() - { - mSamples.clear(); - - changed(); - } - - public int getSampleCount() - { - return mSampleCount; - } - - public void setSampleCount( int count ) - { - mSampleCount = count; - - changed(); - } - - public void setDelay( int delay ) - { - mDelay = delay; - } - - public int getDelay() - { - return mDelay; - } - - @Override - public void receive( T t ) - { - if( mDelay > 0 ) - { - mDelay--; - } - else - { - mSamples.add( t ); - - while( mSamples.size() > mSampleCount ) - { - mSamples.remove( 0 ); - } - } - - changed(); - } - - private void changed() - { - setChanged(); - notifyObservers(); - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/gui/SourceControllerFrame.java b/src/main/java/io/github/dsheirer/instrument/gui/SourceControllerFrame.java deleted file mode 100644 index 6b112e13..00000000 --- a/src/main/java/io/github/dsheirer/instrument/gui/SourceControllerFrame.java +++ /dev/null @@ -1,215 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.gui; - -import io.github.dsheirer.source.IControllableFileSource; -import io.github.dsheirer.source.IFrameLocationListener; -import net.miginfocom.swing.MigLayout; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.io.IOException; - -public class SourceControllerFrame extends JInternalFrame - implements IFrameLocationListener -{ - private static final long serialVersionUID = 1L; - private final static Logger mLog = - LoggerFactory.getLogger( SourceControllerFrame.class ); - - private IControllableFileSource mSource; - private JDesktopPane mDesktop; - - private JLabel mCurrentPosition = new JLabel( "0" ); - - public SourceControllerFrame( IControllableFileSource source, - JDesktopPane desktop ) - { - mSource = source; - mSource.setListener( this ); - - mDesktop = desktop; - - initGui(); - } - - private void initGui() - { - setTitle( "Source [" + mSource.getFile().getAbsolutePath() + "]" ); - setPreferredSize( new Dimension( 670, 70 ) ); - setSize( 670, 70 ); - - setResizable( true ); - setClosable( true ); - setIconifiable( true ); - setMaximizable( false ); - - JPanel panel = new JPanel(); - panel.setLayout( new MigLayout() ); - - JButton decoderButton = new JButton( "Decoders" ); - decoderButton.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - EventQueue.invokeLater( new Runnable() - { - @Override - public void run() - { - DecoderSelectionFrame frame = - new DecoderSelectionFrame( mDesktop, mSource ); - - frame.setVisible( true ); - - mDesktop.add( frame ); - } - } ); - } - } ); - - panel.add( decoderButton ); - - panel.add( new JLabel( "Skip:" ) ); - panel.add( new SkipFramesField( mSource ) ); - panel.add( new NextFrameButton( mSource, "> 1", 1 ) ); - panel.add( new NextFrameButton( mSource, "> 10", 10 ) ); - panel.add( new NextFrameButton( mSource, "> 100", 100 ) ); - panel.add( new NextFrameButton( mSource, "> 1000", 1000 ) ); - panel.add( new JLabel( "Posn:" ) ); - panel.add( mCurrentPosition, "wrap" ); - - add( panel ); - } - - public class NextFrameButton extends JButton - { - private static final long serialVersionUID = 1L; - - private IControllableFileSource mSource; - private int mFrames; - - public NextFrameButton( IControllableFileSource source, - String label, int frames ) - { - super( label ); - mSource = source; - mFrames = frames; - - addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent arg0 ) - { - EventQueue.invokeLater( new Runnable() - { - @Override - public void run() - { - try - { - mSource.next( mFrames ); - } - catch ( IOException e ) - { - mLog.error( "Viewer - reading frames [" + mFrames + - "] from source", e ); - - JOptionPane.showMessageDialog( SourceControllerFrame.this, - "Can't read " + mFrames + " more frames [" + - e.getLocalizedMessage() + "]", - "Wave File Error", - JOptionPane.ERROR_MESSAGE ); - } - } - } ); - } - } ); - } - } - - public class SkipFramesField extends JTextField - { - private static final long serialVersionUID = 1L; - - private IControllableFileSource mSource; - - public SkipFramesField( IControllableFileSource source ) - { - super( "0" ); - - mSource = source; - - setMinimumSize( new Dimension( 100, getHeight() ) ); - - addFocusListener( new FocusListener() - { - @Override - public void focusGained( FocusEvent arg0 ) {} - - @Override - public void focusLost( FocusEvent arg0 ) - { - try - { - int framesToSkip = Integer.parseInt( getText() ); - - mSource.next( framesToSkip, false ); - } - catch( Exception e ) - { - mLog.error( "WaveSourceFrame - error skipping frames", e ); - - JOptionPane.showMessageDialog( SourceControllerFrame.this, - "Can't skip [" + getText() + "] frames.", - "Error", - JOptionPane.ERROR_MESSAGE ); - } - } - } ); - } - } - - - @Override - public void frameLocationUpdated( final int location ) - { - EventQueue.invokeLater( new Runnable() - { - @Override - public void run() - { - mCurrentPosition.setText( String.valueOf( location ) ); - } - } ); - } - - @Override - public void frameLocationReset() - { - // TODO Auto-generated method stub - - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/gui/Viewer.java b/src/main/java/io/github/dsheirer/instrument/gui/Viewer.java deleted file mode 100644 index 39748fe2..00000000 --- a/src/main/java/io/github/dsheirer/instrument/gui/Viewer.java +++ /dev/null @@ -1,293 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.gui; - -import io.github.dsheirer.properties.SystemProperties; -import io.github.dsheirer.source.IControllableFileSource; -import io.github.dsheirer.source.wave.ComplexWaveSource; -import io.github.dsheirer.source.wave.RealWaveSource; -import io.github.dsheirer.util.TimeStamp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.imageio.ImageIO; -import javax.swing.*; -import javax.swing.filechooser.FileFilter; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -public class Viewer -{ - private final static Logger mLog = LoggerFactory.getLogger( Viewer.class ); - - private JFrame mFrame; - private JDesktopPane mDesktop; - - private IControllableFileSource mSource; - - public Viewer() - { - initGUI(); - } - - public void setVisible( boolean visible ) - { - mFrame.setVisible( visible ); - } - - /** - * Initialize the contents of the frame. - */ - private void initGUI() - { - /* Setup main JFrame window */ - mFrame = new JFrame(); - mFrame.setTitle( "SDRTrunk - Sample File Viewer" ); - mFrame.setBounds( 100, 100, 800, 600 ); - mFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); - - /* Multi-window desktop */ - mDesktop = new JDesktopPane(); - mFrame.add( mDesktop ); - - /* Menu items */ - JMenuBar menuBar = new JMenuBar(); - mFrame.setJMenuBar( menuBar ); - - JMenu fileMenu = new JMenu( "File" ); - menuBar.add( fileMenu ); - - fileMenu.add( new SourceFileItem() ); - fileMenu.add( new JSeparator() ); - - JMenuItem exitMenu = new JMenuItem( "Exit" ); - exitMenu.addActionListener( new ActionListener() - { - public void actionPerformed( ActionEvent event ) - { - System.exit( 0 ); - } - } ); - - fileMenu.add( exitMenu ); - - menuBar.add( new ScreenCaptureItem() ); - } - - private void setSourceFile( File file ) - { - mLog.info( "File selected [" + file.getAbsolutePath() + "]"); - - IControllableFileSource source = null; - - /* Attempt to open file as a 1-channel float source */ - try - { - source = new RealWaveSource( file ); - source.open(); - - mLog.info( "File opened as float wave file" ); - - } - catch( Exception e ) - { - mLog.error( "Couldn't open file as float single-channel source" ); - } - - if( source == null ) - { - /* Attempt to open file as a 2-channel complex source */ - try - { - ComplexWaveSource complex = new ComplexWaveSource( file ); - complex.open(); - - source = complex; - - mLog.info( "File opened as complex wave file" ); - } - catch( Exception e ) - { - mLog.error( "Couldn't open file as float source", e); - } - } - - if( source != null ) - { - mSource = source; - - SourceControllerFrame sourcePanel = - new SourceControllerFrame( source, mDesktop ); - sourcePanel.setVisible( true ); - mDesktop.add( sourcePanel ); - } - } - - public static void main( String[] args ) - { - final Viewer viewer = new Viewer(); - - EventQueue.invokeLater( new Runnable() - { - public void run() - { - try - { - viewer.setVisible( true ); - } - catch( Exception e ) - { - e.printStackTrace(); - } - } - } ); - - } - - public class SourceFileItem extends JMenuItem - { - private static final long serialVersionUID = 1L; - - public SourceFileItem() - { - super( "Open" ); - - addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent arg0 ) - { - final JFileChooser fc = new JFileChooser(); - fc.setFileFilter( new FileFilter() - { - @Override - public boolean accept( File file ) - { - return file.isDirectory() || - file.getName().endsWith( ".wav" ); - } - - @Override - public String getDescription() - { - return "Float or Complex 16-bit Wave Files"; - } - } ); - - int val = fc.showOpenDialog( mFrame ); - - if( val == JFileChooser.APPROVE_OPTION ) - { - final File file = fc.getSelectedFile(); - - EventQueue.invokeLater( new Runnable() - { - @Override - public void run() - { - setSourceFile( file ); - } - } ); - } - } - } ); - } - } - - public class ScreenCaptureItem extends JMenuItem - { - private static final long serialVersionUID = 1L; - - public ScreenCaptureItem() - { - super( "Screen Capture" ); - - addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent arg0 ) - { - EventQueue.invokeLater( new Runnable() - { - @Override - public void run() - { - try - { - Robot robot = new Robot(); - - final BufferedImage image = - robot.createScreenCapture( mFrame.getBounds() ); - - SystemProperties props = SystemProperties.getInstance(); - - Path capturePath = props.getApplicationFolder( "screen_captures" ); - - if( !Files.exists( capturePath ) ) - { - try - { - Files.createDirectory( capturePath ); - } - catch ( IOException e ) - { - mLog.error( "Couldn't create 'screen_captures' " - + "subdirectory in the " + - "SDRTrunk application directory", e ); - } - } - - String filename = TimeStamp.getTimeStamp( "_" ) + - "_screen_capture.png"; - - final Path captureFile = capturePath.resolve( filename ); - - EventQueue.invokeLater( new Runnable() - { - @Override - public void run() - { - try - { - ImageIO.write( image, "png", - captureFile.toFile() ); - } - catch ( IOException e ) - { - mLog.error( "Couldn't write screen capture to " - + "file [" + captureFile.toString() + "]", e ); - } - }} ); - } - catch ( AWTException e ) - { - mLog.error( "Exception while taking screen capture", e ); - } - } - } ); - } - } ); - } - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/Tap.java b/src/main/java/io/github/dsheirer/instrument/tap/Tap.java deleted file mode 100644 index ff3cc97e..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/Tap.java +++ /dev/null @@ -1,96 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap; - -import java.util.ArrayList; - -public abstract class Tap -{ - protected TapType mType; - protected String mName; - protected int mDelay; - - protected ArrayList mListeners = new ArrayList(); - - /** - * Instrumentation tap. Provides a tap into a data stream or event stream - * within a process, so that registered listeners can be notified every - * time a new data sample is availabe, or an event occurrs. - * - * @param name - displayable name to use for the tap - * - * @param delay - indicates the number of delay units from when the data - * begins the process until this event occurs. When this data or event is - * plotted on a flow graph, the delay value will be used to adjust placement - * on the display to correctly align events. - */ - public Tap( TapType type, String name, int delay ) - { - mType = type; - mName = name; - mDelay = delay; - } - - public TapType getType() - { - return mType; - } - - /** - * Display name for this tap - */ - public String getName() - { - return mName; - } - - /** - * Delay for this tap - */ - public int getDelay() - { - return mDelay; - } - - /** - * Registers a listener for data or events produced by this tap - */ - public void addListener( TapListener listener ) - { - if( !mListeners.contains( listener ) ) - { - mListeners.add( listener ); - } - } - - /** - * Removes the listener from receiving data or events from this tap - */ - public void removeListener( TapListener listener ) - { - mListeners.remove( listener ); - } - - /** - * Number of listeners currently registered on this tap - */ - public int getListenerCount() - { - return mListeners.size(); - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/TapGroup.java b/src/main/java/io/github/dsheirer/instrument/tap/TapGroup.java deleted file mode 100644 index 7cb5deaf..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/TapGroup.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.github.dsheirer.instrument.tap; - -import java.util.ArrayList; -import java.util.List; - -public class TapGroup -{ - private String mName; - private List mTaps = new ArrayList<>(); - - public TapGroup( String name ) - { - mName = name; - } - - public String getName() - { - return mName; - } - - public String toString() - { - return getName(); - } - - public List getTaps() - { - return mTaps; - } - - public void add( Tap tap ) - { - mTaps.add( tap ); - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/TapListener.java b/src/main/java/io/github/dsheirer/instrument/tap/TapListener.java deleted file mode 100644 index eda419a7..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/TapListener.java +++ /dev/null @@ -1,23 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap; - -public interface TapListener -{ - public void receive( T t ); -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/TapType.java b/src/main/java/io/github/dsheirer/instrument/tap/TapType.java deleted file mode 100644 index 6013523f..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/TapType.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap; - -public enum TapType -{ - EVENT_SYNC_DETECT, - STREAM_BINARY, - STREAM_COMPLEX, - STREAM_COMPLEX_SAMPLE, - STREAM_DIBIT, - STREAM_EYE_DIAGRAM, - STREAM_FLOAT, - STREAM_QPSK, - STREAM_SYMBOL; -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/TapViewPanel.java b/src/main/java/io/github/dsheirer/instrument/tap/TapViewPanel.java deleted file mode 100644 index 2af797a0..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/TapViewPanel.java +++ /dev/null @@ -1,131 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap; - -import io.github.dsheirer.instrument.gui.SampleModel; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Observer; - -public abstract class TapViewPanel extends JPanel implements Observer -{ - private static final long serialVersionUID = 1L; - - protected SampleModel mModel; - protected String mLabel; - - protected float mVerticalZoom = 1.0f; - - public TapViewPanel( SampleModel model, String label ) - { - mModel = model; - mModel.addObserver( this ); - - mLabel = label; - - initGui(); - } - - private void initGui() - { - setBackground( Color.WHITE ); - setForeground( Color.BLUE ); - - setSize( new Dimension( 400, 200 ) ); - } - - public void reset() - { - mModel.clearSamples(); - } - - public JMenu getContextMenu() - { - JMenu menu = new JMenu( mLabel ); - - JMenu verticalMenu = new JMenu( "Vertical Zoom" ); - menu.add( verticalMenu ); - - verticalMenu.add( new VerticalZoomItem( this, "8", 8.0f ) ); - verticalMenu.add( new VerticalZoomItem( this, "4", 4.0f ) ); - verticalMenu.add( new VerticalZoomItem( this, "2", 2.0f ) ); - verticalMenu.add( new VerticalZoomItem( this, "1", 1.0f ) ); - verticalMenu.add( new VerticalZoomItem( this, ".5", 0.5f ) ); - verticalMenu.add( new VerticalZoomItem( this, ".25", 0.25f ) ); - - return menu; - } - - public SampleModel getModel() - { - return mModel; - } - - public int getSampleCount() - { - return getModel().getSampleCount(); - } - - public void setSampleCount( int sampleCount ) - { - getModel().setSampleCount( sampleCount ); - } - - public float getVerticalZoom() - { - return mVerticalZoom; - } - - public void setVerticalZoom( float zoom ) - { - mVerticalZoom = zoom; - repaint(); - } - - public class VerticalZoomItem extends JCheckBoxMenuItem - { - private static final long serialVersionUID = 1L; - - private TapViewPanel mPanel; - private float mZoom; - - public VerticalZoomItem( TapViewPanel panel, String label, float zoom ) - { - super( label ); - mPanel = panel; - mZoom = zoom; - - if( mPanel.getVerticalZoom() == zoom ) - { - setSelected( true ); - } - - addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent arg0 ) - { - mPanel.setVerticalZoom( mZoom ); - } - } ); - } - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/event/SyncDetectTap.java b/src/main/java/io/github/dsheirer/instrument/tap/event/SyncDetectTap.java deleted file mode 100644 index 087393a8..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/event/SyncDetectTap.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.event; - -import io.github.dsheirer.dsp.symbol.ISyncDetectListener; -import io.github.dsheirer.dsp.symbol.SyncDetectProvider; -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapListener; -import io.github.dsheirer.instrument.tap.TapType; - -public class SyncDetectTap extends Tap implements ISyncDetectListener, SyncDetectProvider -{ - private ISyncDetectListener mListener; - - /** - * Sync detect event tap. Indicates when message sync word has been - * detected within a binary stream of data. - */ - public SyncDetectTap() - { - super(TapType.EVENT_SYNC_DETECT, "Sync Detected", 0); - } - - @Override - public void syncDetected() - { - if(mListener != null) - { - mListener.syncDetected(); - } - - for(TapListener listener : mListeners) - { - listener.receive(getName()); - } - } - - @Override - public void setSyncDetectListener(ISyncDetectListener listener) - { - mListener = listener; - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/AdditiveFloatTap.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/AdditiveFloatTap.java deleted file mode 100644 index 75d5582e..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/AdditiveFloatTap.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - - -public class AdditiveFloatTap extends FloatTap -{ - private float mValue; - - public AdditiveFloatTap( String name, - int delay, - float sampleRateRatio, - float addValue ) - { - super( name, delay, sampleRateRatio ); - - mValue = addValue; - } - - @Override - public void receive( float sample ) - { - super.receive( sample + mValue ); - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/BinaryTap.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/BinaryTap.java deleted file mode 100644 index 9b82a7a2..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/BinaryTap.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.instrument.tap.TapListener; -import io.github.dsheirer.instrument.tap.TapType; -import io.github.dsheirer.sample.Listener; - -public class BinaryTap extends StreamTap implements Listener - -{ - private Listener mListener; - - public BinaryTap( String name, - int delay, - float sampleRateRatio ) - { - super( TapType.STREAM_BINARY, name, delay, sampleRateRatio ); - } - - @Override - public void receive( Boolean bit ) - { - if( mListener != null ) - { - mListener.receive( bit ); - } - - for( TapListener listener: mListeners ) - { - listener.receive( bit ); - } - } - - public void setListener( Listener listener ) - { - mListener = listener; - } - - public void removeListener( Listener listener ) - { - mListener = null; - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/BinaryTapViewPanel.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/BinaryTapViewPanel.java deleted file mode 100644 index 76f6bab6..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/BinaryTapViewPanel.java +++ /dev/null @@ -1,156 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.instrument.gui.SampleModel; -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapViewPanel; - -import java.awt.Color; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.geom.Path2D; -import java.awt.geom.Rectangle2D; -import java.util.List; -import java.util.Observable; - -public class BinaryTapViewPanel extends TapViewPanel -{ - private static final long serialVersionUID = 1L; - - private Tap mTap; - private List mSamples; - private int mSampleCount; - - public BinaryTapViewPanel( BinaryTap tap ) - { - super( new SampleModel(), tap.getName() ); - - mTap = tap; - mTap.addListener( getModel() ); - - getModel().setSampleCount( - (int)( getModel().getSampleCount() * tap.getSampleRateRatio() ) ); - - getModel().setDelay( tap.getDelay() ); - } - - @Override - public void update( Observable arg0, Object arg1 ) - { - mSamples = (List)getModel().getSamples(); - mSampleCount = getModel().getSampleCount(); - repaint(); - } - - public void paintComponent( Graphics g ) - { - super.paintComponent( g ); - - Graphics2D g2 = (Graphics2D)g; - - int height = getHeight(); - int width = getWidth(); - - g2.setColor( Color.DARK_GRAY ); - - float middle = (float)height / 2.0f; - - g2.drawLine( 0, (int)middle, width, (int)middle ); - - if( mSamples != null && mSamples.size() > 0 ) - { - g2.setColor( getForeground() ); - - g2.drawString( mLabel, 5 , 15 ); - - for( int x = 1; x < mSamples.size(); x++ ) - { - paintBit( g, x, mSamples.get( x ) ); - } - } - - g2.dispose(); - } - - /** - * Paints a polyline representing a boolean value with a 0 or 1 label in - * the middle of it - * - * @param graphics object - * @param index - index of the sample int the sample buffer - * @param value - bit value, 0 or 1 - */ - private void paintBit( Graphics graphics, int index, boolean value ) - { - Graphics2D g2 = (Graphics2D)graphics; - - Path2D.Float polyline = - new Path2D.Float( Path2D.Float.WIND_EVEN_ODD, mSamples.size() ); - - float middleY = ( (float)getHeight() / 2.0f ); - - float indexWidth = (float)( getWidth() ) / (float)mSampleCount; - - float startX = (float)index * indexWidth; - float stopX = (float)(index + 1 ) * indexWidth; - float fivePercent = indexWidth * .05f; - float leftX = startX + fivePercent; - float rightX = stopX - fivePercent; - - /* Start */ - polyline.moveTo( startX, middleY ); - - /* Left horizonal segment */ - polyline.lineTo( leftX, middleY ); - - float y = ( value ? ( middleY - ( middleY * 0.5f) ) : - ( middleY + ( middleY * 0.5f) ) ); - - /* Left vertical segment */ - polyline.lineTo( leftX, y ); - - /* Middle horizontal segment */ - polyline.lineTo( rightX, y ); - - /* Right vertical segment */ - polyline.lineTo( rightX, middleY ); - - /* Right horizontal segment */ - polyline.lineTo( stopX, middleY ); - - g2.draw( polyline ); - - /* Draw the bit value label */ - String bit = value ? "1" : "0"; - - FontMetrics fontMetrics = graphics.getFontMetrics( this.getFont() ); - - Rectangle2D label = fontMetrics.getStringBounds( bit, graphics ); - - float offsetX = (float)label.getWidth() / 2.0f; - float offsetY = (float)label.getWidth() / 2.0f; - - float middleX = startX + ( indexWidth / 2.0f ); - - graphics.drawString( bit, - (int)( middleX - offsetX ), - (int)( middleY - offsetY ) ); - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/ComplexSampleTap.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/ComplexSampleTap.java deleted file mode 100644 index 28451918..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/ComplexSampleTap.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.instrument.tap.TapListener; -import io.github.dsheirer.instrument.tap.TapType; -import io.github.dsheirer.sample.complex.Complex; -import io.github.dsheirer.sample.complex.ComplexSampleListener; - -public class ComplexSampleTap extends StreamTap implements ComplexSampleListener -{ - private ComplexSampleListener mListener; - - public ComplexSampleTap( String name, - int delay, - float sampleRateRatio ) - { - super( TapType.STREAM_COMPLEX_SAMPLE, name, delay, sampleRateRatio ); - } - - public ComplexSampleTap( TapType tapType, String name, int delay, float sampleRateRatio ) - { - super( tapType, name, delay, sampleRateRatio ); - } - - @Override - public void receive( float inphase, float quadrature ) - { - if( mListener != null ) - { - mListener.receive( inphase, quadrature ); - } - - for( TapListener listener: mListeners ) - { - listener.receive( new Complex( inphase, quadrature ) ); - } - } - - public void setListener( ComplexSampleListener listener ) - { - mListener = listener; - } - - public void removeListener( ComplexSampleListener listener ) - { - mListener = null; - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/ComplexSampleTapViewPanel.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/ComplexSampleTapViewPanel.java deleted file mode 100644 index 1ab7bac5..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/ComplexSampleTapViewPanel.java +++ /dev/null @@ -1,150 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.gui.SDRTrunk; -import io.github.dsheirer.instrument.gui.SampleModel; -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapViewPanel; -import io.github.dsheirer.sample.complex.Complex; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.awt.*; -import java.awt.geom.Path2D; -import java.awt.geom.Point2D; -import java.util.List; -import java.util.Observable; - -public class ComplexSampleTapViewPanel extends TapViewPanel -{ - private static final long serialVersionUID = 1L; - private final static Logger mLog = LoggerFactory.getLogger( SDRTrunk.class ); - - private Tap mTap; - private List mSamples; - private int mSampleCount; - - public ComplexSampleTapViewPanel( ComplexSampleTap tap ) - { - super( new SampleModel(), tap.getName() ); - - setSize( new Dimension( 400, 400 ) ); - - mTap = tap; - mTap.addListener( getModel() ); - - mSampleCount = (int)( 2000 * tap.getSampleRateRatio() ); - - getModel().setSampleCount( mSampleCount ); - getModel().setDelay( tap.getDelay() ); - - mLog.info( "Complex Tap Panel [" + tap.getName() + "] count: " + - getModel().getSampleCount() + " delay:" + getModel().getDelay() ); - } - - @Override - public void update( Observable arg0, Object arg1 ) - { - mSamples = (List)getModel().getSamples(); - repaint(); - } - - public void paintComponent( Graphics g ) - { - super.paintComponent( g ); - - Graphics2D g2 = (Graphics2D)g; - - int height = getHeight(); - int width = getWidth(); - - g2.setColor( Color.DARK_GRAY ); - - float middle = (float)height / 4.0f; - - g2.drawLine( 0, (int)middle, width, (int)middle ); - g2.drawLine( 0, (int)( 3 * middle ), width, (int)( 3 * middle ) ); - - if( mSamples != null && - mSamples.size() > 0 ) - { - g2.setColor( getForeground() ); - - g2.drawString( mLabel, 5 , 15 ); - - Path2D.Float polylineReal = - new Path2D.Float( Path2D.Float.WIND_EVEN_ODD, mSamples.size() ); - Path2D.Float polylineImag = - new Path2D.Float( Path2D.Float.WIND_EVEN_ODD, mSamples.size() ); - - /* Move to the first point */ - Point2D.Float firstReal = resolve( 0, mSamples.get( 0 ), Type.REAL ); - polylineReal.moveTo( firstReal.x, firstReal.y ); - - Point2D.Float firstImag = resolve( 0, mSamples.get( 0 ), Type.IMAGINERY ); - polylineImag.moveTo( firstImag.x, firstImag.y ); - - for( int x = 1; x < mSamples.size(); x++ ) - { - Point2D.Float pointReal = resolve( x, mSamples.get( x ), Type.REAL ); - polylineReal.lineTo( pointReal.x, pointReal.y ); - - Point2D.Float pointImag = resolve( x, mSamples.get( x ), Type.IMAGINERY ); - polylineImag.lineTo( pointImag.x, pointImag.y ); - -// mLog.debug( "Imag y:" + pointImag.getY() + " height:" + getHeight() ); - } - - g2.draw( polylineReal ); - g2.draw( polylineImag ); - } - - g2.dispose(); - } - - - private Point2D.Float resolve( int index, Complex sample, Type type ) - { - int middle = (int)( getHeight() / 4 ); - - float y = middle - ( middle * mVerticalZoom * ( type == Type.REAL ? - sample.real() : sample.imaginary()) ); - - if( type == Type.IMAGINERY ) - { - y += ( middle * 2 ); - } - - /* Clip y to zero as necessary */ - y = ( y < 0 ) ? 0 : y; - - /* Clip y to max height as necessary */ - y = ( y > getHeight() ) ? getHeight() : y; - - float indexWidth = (float)getWidth() / (float)mSampleCount; - - float x = (float)index * indexWidth; - - Point2D.Float point = new Point2D.Float( x, y ); - - return new Point2D.Float( x , y ); - } - - public enum Type{ REAL,IMAGINERY }; -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/ComplexTap.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/ComplexTap.java deleted file mode 100644 index 34f798d3..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/ComplexTap.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.instrument.tap.TapListener; -import io.github.dsheirer.instrument.tap.TapType; -import io.github.dsheirer.sample.Listener; -import io.github.dsheirer.sample.complex.Complex; - -public class ComplexTap extends StreamTap implements Listener -{ - private Listener mListener; - - public ComplexTap( String name, - int delay, - float sampleRateRatio ) - { - super( TapType.STREAM_COMPLEX, name, delay, sampleRateRatio ); - } - - public ComplexTap( TapType tapType, String name, int delay, float sampleRateRatio ) - { - super( tapType, name, delay, sampleRateRatio ); - } - - @Override - public void receive( Complex sample ) - { - if( mListener != null ) - { - mListener.receive( sample ); - } - - for( TapListener listener: mListeners ) - { - listener.receive( sample ); - } - } - - public void setListener( Listener listener ) - { - mListener = listener; - } - - public void removeListener( Listener listener ) - { - mListener = null; - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/ComplexTapViewPanel.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/ComplexTapViewPanel.java deleted file mode 100644 index bf10ed3c..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/ComplexTapViewPanel.java +++ /dev/null @@ -1,150 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.gui.SDRTrunk; -import io.github.dsheirer.instrument.gui.SampleModel; -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapViewPanel; -import io.github.dsheirer.sample.complex.Complex; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.awt.*; -import java.awt.geom.Path2D; -import java.awt.geom.Point2D; -import java.util.List; -import java.util.Observable; - -public class ComplexTapViewPanel extends TapViewPanel -{ - private static final long serialVersionUID = 1L; - private final static Logger mLog = LoggerFactory.getLogger( SDRTrunk.class ); - - private Tap mTap; - private List mSamples; - private int mSampleCount; - - public ComplexTapViewPanel( ComplexTap tap ) - { - super( new SampleModel(), tap.getName() ); - - setSize( new Dimension( 400, 400 ) ); - - mTap = tap; - mTap.addListener( getModel() ); - - mSampleCount = (int)( 2000 * tap.getSampleRateRatio() ); - - getModel().setSampleCount( mSampleCount ); - getModel().setDelay( tap.getDelay() ); - - mLog.info( "Complex Tap Panel [" + tap.getName() + "] count: " + - getModel().getSampleCount() + " delay:" + getModel().getDelay() ); - } - - @Override - public void update( Observable arg0, Object arg1 ) - { - mSamples = (List)getModel().getSamples(); - repaint(); - } - - public void paintComponent( Graphics g ) - { - super.paintComponent( g ); - - Graphics2D g2 = (Graphics2D)g; - - int height = getHeight(); - int width = getWidth(); - - g2.setColor( Color.DARK_GRAY ); - - float middle = (float)height / 4.0f; - - g2.drawLine( 0, (int)middle, width, (int)middle ); - g2.drawLine( 0, (int)( 3 * middle ), width, (int)( 3 * middle ) ); - - if( mSamples != null && - mSamples.size() > 0 ) - { - g2.setColor( getForeground() ); - - g2.drawString( mLabel, 5 , 15 ); - - Path2D.Float polylineReal = - new Path2D.Float( Path2D.Float.WIND_EVEN_ODD, mSamples.size() ); - Path2D.Float polylineImag = - new Path2D.Float( Path2D.Float.WIND_EVEN_ODD, mSamples.size() ); - - /* Move to the first point */ - Point2D.Float firstReal = resolve( 0, mSamples.get( 0 ), Type.REAL ); - polylineReal.moveTo( firstReal.x, firstReal.y ); - - Point2D.Float firstImag = resolve( 0, mSamples.get( 0 ), Type.IMAGINERY ); - polylineImag.moveTo( firstImag.x, firstImag.y ); - - for( int x = 1; x < mSamples.size(); x++ ) - { - Point2D.Float pointReal = resolve( x, mSamples.get( x ), Type.REAL ); - polylineReal.lineTo( pointReal.x, pointReal.y ); - - Point2D.Float pointImag = resolve( x, mSamples.get( x ), Type.IMAGINERY ); - polylineImag.lineTo( pointImag.x, pointImag.y ); - -// mLog.debug( "Imag y:" + pointImag.getY() + " height:" + getHeight() ); - } - - g2.draw( polylineReal ); - g2.draw( polylineImag ); - } - - g2.dispose(); - } - - - private Point2D.Float resolve( int index, Complex sample, Type type ) - { - int middle = (int)( getHeight() / 4 ); - - float y = middle - ( middle * mVerticalZoom * ( type == Type.REAL ? - sample.real() : sample.imaginary()) ); - - if( type == Type.IMAGINERY ) - { - y += ( middle * 2 ); - } - - /* Clip y to zero as necessary */ - y = ( y < 0 ) ? 0 : y; - - /* Clip y to max height as necessary */ - y = ( y > getHeight() ) ? getHeight() : y; - - float indexWidth = (float)getWidth() / (float)mSampleCount; - - float x = (float)index * indexWidth; - - Point2D.Float point = new Point2D.Float( x, y ); - - return new Point2D.Float( x , y ); - } - - public enum Type{ REAL,IMAGINERY }; -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/DibitTap.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/DibitTap.java deleted file mode 100644 index dcd30186..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/DibitTap.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.dsp.symbol.Dibit; -import io.github.dsheirer.instrument.tap.TapListener; -import io.github.dsheirer.instrument.tap.TapType; -import io.github.dsheirer.sample.Listener; - -public class DibitTap extends StreamTap implements Listener - -{ - private Listener mListener; - - public DibitTap( String name, - int delay, - float sampleRateRatio ) - { - super( TapType.STREAM_DIBIT, name, delay, sampleRateRatio ); - } - - @Override - public void receive( Dibit dibit ) - { - if( mListener != null ) - { - mListener.receive( dibit ); - } - - for( TapListener listener: mListeners ) - { - listener.receive( dibit ); - } - } - - public void setListener( Listener listener ) - { - mListener = listener; - } - - public void removeListener( Listener listener ) - { - mListener = null; - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/DibitTapViewPanel.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/DibitTapViewPanel.java deleted file mode 100644 index 7a53e622..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/DibitTapViewPanel.java +++ /dev/null @@ -1,186 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.dsp.symbol.Dibit; -import io.github.dsheirer.instrument.gui.SampleModel; -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapViewPanel; - -import java.awt.*; -import java.awt.geom.Path2D; -import java.awt.geom.Rectangle2D; -import java.util.List; -import java.util.Observable; - -public class DibitTapViewPanel extends TapViewPanel -{ - private static final long serialVersionUID = 1L; - - private Tap mTap; - private List mSamples; - private int mSampleCount; - private int mOffset = 0; - - public DibitTapViewPanel( DibitTap tap ) - { - super( new SampleModel(), tap.getName() ); - - mTap = tap; - mTap.addListener( getModel() ); - - getModel().setSampleCount( - (int)( getModel().getSampleCount() * tap.getSampleRateRatio() ) ); - - getModel().setDelay( tap.getDelay() ); - } - - @Override - public void update( Observable arg0, Object arg1 ) - { - mSamples = (List)getModel().getSamples(); - mSampleCount = getModel().getSampleCount(); - repaint(); - } - - public void paintComponent( Graphics g ) - { - super.paintComponent( g ); - - Graphics2D g2 = (Graphics2D)g; - - int height = getHeight(); - int width = getWidth(); - - g2.setColor( Color.DARK_GRAY ); - - float middle = (float)height / 2.0f; - - g2.drawLine( 0, (int)middle, width, (int)middle ); - - if( mSamples != null && mSamples.size() > 0 ) - { - g2.setColor( getForeground() ); - - g2.drawString( mLabel, 5 , 15 ); - - for( int x = 1; x < mSamples.size(); x++ ) - { - paintDibit( g, x, mSamples.get( x ) ); - } - } - - g2.dispose(); - } - - /** - * Paints a polyline representing a boolean value with a 0 or 1 label in - * the middle of it - * - * @param graphics - * @param index - index of the sample int the sample buffer - * @param value - bit value, 0 or 1 - */ - private void paintDibit( Graphics graphics, int index, Dibit value ) - { - Graphics2D g2 = (Graphics2D)graphics; - - Path2D.Float polyline = - new Path2D.Float( Path2D.Float.WIND_EVEN_ODD, mSamples.size() ); - - float middleY = ( (float)getHeight() / 2.0f ); - - float indexWidth = (float)( getWidth() ) / (float)mSampleCount; - - float startX = (float)index * indexWidth; - float stopX = (float)(index + 1 ) * indexWidth; - float fivePercent = indexWidth * .05f; - float leftX = startX + fivePercent; - float rightX = stopX - fivePercent; - - /* Start */ - polyline.moveTo( startX, middleY ); - - /* Left horizonal segment */ - polyline.lineTo( leftX, middleY ); - - float y = middleY; - - switch( value ) - { - case D01_PLUS_3: - y = middleY - ( middleY * 0.75f); - break; - case D00_PLUS_1: - y = middleY - ( middleY * 0.25f); - break; - case D10_MINUS_1: - y = middleY + ( middleY * 0.25f); - break; - case D11_MINUS_3: - y = middleY + ( middleY * 0.75f); - break; - } - - /* Left vertical segment */ - polyline.lineTo( leftX, y ); - - /* Middle horizontal segment */ - polyline.lineTo( rightX, y ); - - /* Right vertical segment */ - polyline.lineTo( rightX, middleY ); - - /* Right horizontal segment */ - polyline.lineTo( stopX, middleY ); - - g2.draw( polyline ); - - /* Draw the bit value label */ - String bit = null; - - switch( value ) - { - case D00_PLUS_1: - bit = "+1"; - break; - case D01_PLUS_3: - bit = "+3"; - break; - case D10_MINUS_1: - bit = "-1"; - break; - case D11_MINUS_3: - bit = "-3"; - break; - } - - FontMetrics fontMetrics = graphics.getFontMetrics( this.getFont() ); - - Rectangle2D label = fontMetrics.getStringBounds( bit, graphics ); - - float offsetX = (float)label.getWidth() / 2.0f; - float offsetY = (float)label.getWidth() / 2.0f; - - float middleX = startX + ( indexWidth / 2.0f ); - - graphics.drawString( bit, - (int)( middleX - offsetX ), - (int)( middleY - offsetY ) ); - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/EyeDiagramData.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/EyeDiagramData.java deleted file mode 100644 index 3006c011..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/EyeDiagramData.java +++ /dev/null @@ -1,46 +0,0 @@ -package io.github.dsheirer.instrument.tap.stream; - - -public class EyeDiagramData -{ - private float[] mSamplesInphase; - private float[] mSamplesQuadrature; - private float mLeftPoint; - private float mRightPoint; - private float mError; - - public EyeDiagramData( float[] samplesInphase, float[] samplesQuadrature, - float leftPoint, float rightPoint, float error ) - { - mSamplesInphase = samplesInphase; - mSamplesQuadrature = samplesQuadrature; - mLeftPoint = leftPoint; - mRightPoint = rightPoint; - mError = error; - } - - public float[] getInphaseSamples() - { - return mSamplesInphase; - } - - public float[] getQuadratureSamples() - { - return mSamplesQuadrature; - } - - public float getLeftPoint() - { - return mLeftPoint; - } - - public float getRightPoint() - { - return mRightPoint; - } - - public float getError() - { - return mError; - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/EyeDiagramDataTap.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/EyeDiagramDataTap.java deleted file mode 100644 index 4278e469..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/EyeDiagramDataTap.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2015 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.instrument.tap.stream; - -import io.github.dsheirer.instrument.tap.TapListener; -import io.github.dsheirer.instrument.tap.TapType; -import io.github.dsheirer.sample.Listener; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class EyeDiagramDataTap extends StreamTap implements Listener -{ - private final static Logger mLog = LoggerFactory.getLogger( EyeDiagramDataTap.class ); - - private Listener mListener; - - public EyeDiagramDataTap( String name, int delay, float sampleRate ) - { - super( TapType.STREAM_EYE_DIAGRAM, name, delay, sampleRate ); - } - - @Override - public void receive( EyeDiagramData data ) - { - if( mListener != null ) - { - mListener.receive( data ); - } - - for( TapListener listener: mListeners ) - { - listener.receive( data ); - } - } - - public void setListener( Listener listener ) - { - mListener = listener; - } - - public void removeListener( Listener listener ) - { - mListener = null; - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/EyeDiagramDataTapPanel.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/EyeDiagramDataTapPanel.java deleted file mode 100644 index 530da620..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/EyeDiagramDataTapPanel.java +++ /dev/null @@ -1,221 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.instrument.gui.SampleModel; -import io.github.dsheirer.instrument.tap.TapViewPanel; -import io.github.dsheirer.sample.complex.Complex; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.awt.*; -import java.awt.geom.GeneralPath; -import java.awt.geom.Path2D; -import java.util.List; -import java.util.Observable; - -public class EyeDiagramDataTapPanel extends TapViewPanel -{ - private static final long serialVersionUID = 1L; - private final static Logger mLog = - LoggerFactory.getLogger( EyeDiagramDataTapPanel.class ); - - private EyeDiagramDataTap mTap; - private List mSamples; - - public EyeDiagramDataTapPanel( EyeDiagramDataTap tap ) - { - super( new SampleModel(), tap.getName() ); - - mTap = tap; - mTap.addListener( getModel() ); - - getModel().setSampleCount( 15 ); - getModel().setDelay( tap.getDelay() ); - } - - @Override - public void update( Observable arg0, Object arg1 ) - { - mSamples = (List)getModel().getSamples(); - - repaint(); - } - - public void paintComponent( Graphics g ) - { - super.paintComponent( g ); - - Graphics2D g2 = (Graphics2D)g; - - float third = getWidth() / 3.0f; - float two_thirds = 2.0f * third; - float halfHeight = getHeight() / 2.0f; - - float xAxisIncrement = third / 20.0f; - - if( mSamples != null && mSamples.size() > 0 ) - { - /* Draw each of the sample sets */ - for( int z = 0; z < mSamples.size(); z++ ) - { - if( z == mSamples.size() - 1 ) - { - g2.setColor( Color.BLUE ); - } - else if( z > ( mSamples.size() * .75 ) ) - { - g2.setColor( Color.DARK_GRAY ); - } - else - { - g2.setColor( Color.LIGHT_GRAY ); - } - - EyeDiagramData data = mSamples.get( z ); - - float[] inphaseSamples = data.getInphaseSamples(); - float[] quadratureSamples = data.getQuadratureSamples(); - - /* Draw the sample set containing two symbol periods of data */ - if( inphaseSamples.length >= 1 ) - { - Path2D.Float iLine = new Path2D.Float( GeneralPath.WIND_EVEN_ODD, 20 ); - Path2D.Float qLine = new Path2D.Float( GeneralPath.WIND_EVEN_ODD, 20 ); - Path2D.Float mLine = new Path2D.Float( GeneralPath.WIND_EVEN_ODD, 20 ); - - float xAxis = 0; - - iLine.moveTo( xAxis, getSampleHeight( halfHeight, inphaseSamples[ 0 ] ) ); - qLine.moveTo( xAxis + third, getSampleHeight( halfHeight, quadratureSamples[ 0 ] ) ); - mLine.moveTo( xAxis + ( two_thirds ), getMagnitudeHeight( Complex.magnitude( inphaseSamples[ 0 ], quadratureSamples[ 0 ] ) ) ); - - for( int x = 1; x < inphaseSamples.length; x++ ) - { - xAxis += xAxisIncrement; - - iLine.lineTo( xAxis, getSampleHeight( halfHeight, inphaseSamples[ x ] ) ); - qLine.lineTo( xAxis + third, getSampleHeight( halfHeight, quadratureSamples[ x ] ) ); - mLine.lineTo( xAxis + two_thirds, getMagnitudeHeight( Complex.magnitude( inphaseSamples[ x ], quadratureSamples[ x ] ) ) ); - } - - g2.draw( iLine ); - g2.draw( qLine ); - g2.draw( mLine ); - - /* Left Sample line */ - if( z == mSamples.size() - 1 ) - { - g2.setColor( Color.GREEN ); - } - else - { - g2.setColor( Color.LIGHT_GRAY ); - } - xAxis = xAxisIncrement * data.getLeftPoint(); - g2.drawLine( (int)xAxis, 5, (int)xAxis, getHeight() - 5 ); - g2.drawLine( (int)( xAxis + third ), 5, (int)( xAxis + third ), getHeight() - 5 ); - g2.drawLine( (int)( xAxis + two_thirds ), 5, (int)( xAxis + two_thirds ), getHeight() - 5 ); - - /* Right Sample line */ - if( z == mSamples.size() - 1 ) - { - g2.setColor( Color.GREEN ); - } - else - { - g2.setColor( Color.LIGHT_GRAY ); - } - xAxis = xAxisIncrement * data.getRightPoint(); - g2.drawLine( (int)xAxis, 5, (int)xAxis, getHeight() - 5 ); - g2.drawLine( (int)( xAxis + third ), 5, (int)( xAxis + third ), getHeight() - 5 ); - g2.drawLine( (int)( xAxis + two_thirds ), 5, (int)( xAxis + two_thirds ), getHeight() - 5 ); - - /* Error indicator */ - float error = data.getError(); - - if( z == mSamples.size() - 1 ) - { - g2.setColor( Color.BLACK ); - - float xFrom; - float xTo; - - if( error < 0.0f ) - { - xFrom = (int)( xAxisIncrement * data.getLeftPoint() ); - xTo = xFrom - 25.0f; - } - else - { - xFrom = (int)( xAxisIncrement * data.getRightPoint() ); - xTo = xFrom + 25.0f; - } - - g2.drawLine( (int)xFrom, (int)halfHeight - 15, (int)xTo, (int)halfHeight ); - g2.drawLine( (int)xFrom, (int)halfHeight + 15, (int)xTo, (int)halfHeight ); - g2.drawLine( (int)( xFrom + third ), (int)halfHeight - 15, (int)( xTo + third ), (int)halfHeight ); - g2.drawLine( (int)( xFrom + third ), (int)halfHeight + 15, (int)( xTo + third ), (int)halfHeight ); - g2.drawLine( (int)( xFrom + two_thirds ), (int)halfHeight - 15, (int)( xTo + two_thirds ), (int)halfHeight ); - g2.drawLine( (int)( xFrom + two_thirds ), (int)halfHeight + 15, (int)( xTo + two_thirds ), (int)halfHeight ); - } - - - - - } - } - } - - g2.setColor( Color.BLUE ); - g2.drawString( "Eye Diagram - I Leg", 5, 15 ); - g2.drawString( "Eye Diagram - Q Leg", third, 15 ); - g2.drawString( "Eye Diagram - Magnitude", two_thirds, 15 ); - - - /* Horizontal middle line */ - g2.setColor( Color.CYAN ); - g2.drawLine( 0, (int)halfHeight, getWidth(), (int)halfHeight ); - - g2.dispose(); - } - - private float getSampleHeight( float halfHeight, float value ) - { - if( value > 1.0 ) - { - value = 1.0f; - } - if( value < -1.0 ) - { - value = -1.0f; - } - - return halfHeight + ( .95f * ( halfHeight * value ) ); - } - - private float getMagnitudeHeight( float magnitude ) - { - if( magnitude > 1.0 ) - { - magnitude = 1.0f; - } - - return getHeight() - ( getHeight() * magnitude ); - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/FloatBufferTap.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/FloatBufferTap.java deleted file mode 100644 index 8e038c5a..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/FloatBufferTap.java +++ /dev/null @@ -1,43 +0,0 @@ -package io.github.dsheirer.instrument.tap.stream; - -import io.github.dsheirer.sample.Listener; -import io.github.dsheirer.sample.real.RealBuffer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class FloatBufferTap extends FloatTap implements Listener -{ - private final static Logger mLog = - LoggerFactory.getLogger( FloatBufferTap.class ); - - private Listener mRealBufferListener; - - public FloatBufferTap( String name, int delay, float sampleRateRatio ) - { - super( name, delay, sampleRateRatio ); - } - - @Override - public void receive( RealBuffer buffer ) - { - if( mRealBufferListener != null ) - { - mRealBufferListener.receive( buffer ); - } - - for( float sample: buffer.getSamples() ) - { - super.receive( sample ); - } - } - - public void setListener( Listener listener ) - { - mRealBufferListener = listener; - } - - public void removeListener( Listener listener ) - { - mRealBufferListener = null; - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/FloatTap.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/FloatTap.java deleted file mode 100644 index 156ce76f..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/FloatTap.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.instrument.tap.TapListener; -import io.github.dsheirer.instrument.tap.TapType; -import io.github.dsheirer.sample.real.RealSampleListener; - -public class FloatTap extends StreamTap implements RealSampleListener -{ - private RealSampleListener mFloatTapListener; - - public FloatTap( String name, - int delay, - float sampleRateRatio ) - { - super( TapType.STREAM_FLOAT, name, delay, sampleRateRatio ); - } - - @Override - public void receive( float sample ) - { - if( mFloatTapListener != null ) - { - mFloatTapListener.receive( sample ); - } - - for( TapListener listener: mListeners ) - { - listener.receive( sample ); - } - } - - public void setListener( RealSampleListener listener ) - { - mFloatTapListener = listener; - } - - public void removeListener( RealSampleListener listener ) - { - mFloatTapListener = null; - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/FloatTapPhaseViewPanel.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/FloatTapPhaseViewPanel.java deleted file mode 100644 index 7810684e..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/FloatTapPhaseViewPanel.java +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.instrument.gui.SampleModel; -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapViewPanel; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.awt.*; -import java.awt.geom.Path2D; -import java.awt.geom.Point2D; -import java.util.List; -import java.util.Observable; - -public class FloatTapPhaseViewPanel extends TapViewPanel -{ - private final static Logger mLog = - LoggerFactory.getLogger( FloatTapPhaseViewPanel.class ); - - private static final long serialVersionUID = 1L; - private Tap mTap; - private List mSamples; - private int mSampleCount; - - public FloatTapPhaseViewPanel( FloatTap tap ) - { - super( new SampleModel(), tap.getName() ); - - mTap = tap; - mTap.addListener( getModel() ); - - mSampleCount = (int)( 2000 * tap.getSampleRateRatio() ); - - getModel().setSampleCount( mSampleCount ); - getModel().setDelay( tap.getDelay() ); - - mLog.info( "Float Tap Panel [" + tap.getName() + "] count: " + - getModel().getSampleCount() + " delay:" + getModel().getDelay() ); - } - - @Override - public void update( Observable arg0, Object arg1 ) - { - mSamples = (List)getModel().getSamples(); - repaint(); - } - - public void paintComponent( Graphics g ) - { - super.paintComponent( g ); - - Graphics2D g2 = (Graphics2D)g; - - int height = getHeight(); - int width = getWidth(); - - g2.setColor( Color.DARK_GRAY ); - - float middle = (float)height / 2.0f; - - g2.drawLine( 0, (int)middle, width, (int)middle ); - - if( mSamples != null && - mSamples.size() > 0 ) - { - g2.setColor( getForeground() ); - - g2.drawString( mLabel, 5 , 15 ); - - Path2D.Float polyline = - new Path2D.Float( Path2D.Float.WIND_EVEN_ODD, mSamples.size() ); - - /* Move to the first point */ - Point2D.Float first = resolve( 0, mSamples.get( 0 ) ); - polyline.moveTo( first.x, first.y ); - - for( int x = 1; x < mSamples.size(); x++ ) - { - Point2D.Float point = resolve( x, mSamples.get( x ) ); - - polyline.lineTo( point.x, point.y ); - } - - g2.draw(polyline); - } - - g2.dispose(); - } - - private Point2D.Float resolve( int index, float value ) - { - int middle = (int)( getHeight() / 2 ); - - double scaledValue = Math.asin( value ); - - float y = middle - (float)( middle * scaledValue * mVerticalZoom ); - - /* Clip y to zero as necessary */ - y = ( y < 0 ) ? 0 : y; - - /* Clip y to max height as necessary */ - y = ( y > getHeight() ) ? getHeight() : y; - - float indexWidth = (float)getWidth() / (float)mSampleCount; - - float x = (float)index * indexWidth; - - Point2D.Float point = new Point2D.Float( x, y ); - - return new Point2D.Float( x , y ); - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/FloatTapViewPanel.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/FloatTapViewPanel.java deleted file mode 100644 index b89eeafb..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/FloatTapViewPanel.java +++ /dev/null @@ -1,127 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.gui.SDRTrunk; -import io.github.dsheirer.instrument.gui.SampleModel; -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapViewPanel; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.awt.*; -import java.awt.geom.Path2D; -import java.awt.geom.Point2D; -import java.util.List; -import java.util.Observable; - -public class FloatTapViewPanel extends TapViewPanel -{ - private static final long serialVersionUID = 1L; - private final static Logger mLog = LoggerFactory.getLogger( SDRTrunk.class ); - - private Tap mTap; - private List mSamples; - private int mSampleCount; - - public FloatTapViewPanel( FloatTap tap ) - { - super( new SampleModel(), tap.getName() ); - - mTap = tap; - mTap.addListener( getModel() ); - - mSampleCount = (int)( 2000 * tap.getSampleRateRatio() ); - - getModel().setSampleCount( mSampleCount ); - getModel().setDelay( tap.getDelay() ); - - mLog.info( "Float Tap Panel [" + tap.getName() + "] count: " + - getModel().getSampleCount() + " delay:" + getModel().getDelay() ); - } - - @Override - public void update( Observable arg0, Object arg1 ) - { - mSamples = (List)getModel().getSamples(); - repaint(); - } - - public void paintComponent( Graphics g ) - { - super.paintComponent( g ); - - Graphics2D g2 = (Graphics2D)g; - - int height = getHeight(); - int width = getWidth(); - - g2.setColor( Color.DARK_GRAY ); - - float middle = (float)height / 2.0f; - - g2.drawLine( 0, (int)middle, width, (int)middle ); - - if( mSamples != null && - mSamples.size() > 0 ) - { - g2.setColor( getForeground() ); - - g2.drawString( mLabel, 5 , 15 ); - - Path2D.Float polyline = - new Path2D.Float( Path2D.Float.WIND_EVEN_ODD, mSamples.size() ); - - /* Move to the first point */ - Point2D.Float first = resolve( 0, mSamples.get( 0 ) ); - polyline.moveTo( first.x, first.y ); - - for( int x = 1; x < mSamples.size(); x++ ) - { - Point2D.Float point = resolve( x, mSamples.get( x ) ); - - polyline.lineTo( point.x, point.y ); - } - - g2.draw(polyline); - } - - g2.dispose(); - } - - private Point2D.Float resolve( int index, float value ) - { - int middle = (int)( getHeight() / 2 ); - - float y = middle - ( middle * value * mVerticalZoom ); - - /* Clip y to zero as necessary */ - y = ( y < 0 ) ? 0 : y; - - /* Clip y to max height as necessary */ - y = ( y > getHeight() ) ? getHeight() : y; - - float indexWidth = (float)getWidth() / (float)mSampleCount; - - float x = (float)index * indexWidth; - - Point2D.Float point = new Point2D.Float( x, y ); - - return new Point2D.Float( x , y ); - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/GainFloatTap.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/GainFloatTap.java deleted file mode 100644 index cc75bc69..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/GainFloatTap.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - - -public class GainFloatTap extends FloatTap -{ - private float mGain; - - public GainFloatTap( String name, - int delay, - float sampleRateRatio, - float gain ) - { - super( name, delay, sampleRateRatio ); - - mGain = gain; - } - - @Override - public void receive( float sample ) - { - super.receive( sample * mGain ); - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/QPSKTap.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/QPSKTap.java deleted file mode 100644 index 7af8728b..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/QPSKTap.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.dsheirer.instrument.tap.stream; - -import io.github.dsheirer.instrument.tap.TapType; - -public class QPSKTap extends ComplexTap -{ - public QPSKTap( String name, int delay, float sampleRateRatio ) - { - super( TapType.STREAM_QPSK, name, delay, sampleRateRatio ); - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/QPSKTapPanel.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/QPSKTapPanel.java deleted file mode 100644 index 6836ebdb..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/QPSKTapPanel.java +++ /dev/null @@ -1,157 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.gui.SDRTrunk; -import io.github.dsheirer.instrument.gui.SampleModel; -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapViewPanel; -import io.github.dsheirer.sample.complex.Complex; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.awt.*; -import java.awt.geom.Ellipse2D; -import java.util.List; -import java.util.Observable; - -public class QPSKTapPanel extends TapViewPanel -{ - private static final long serialVersionUID = 1L; - private final static Logger mLog = LoggerFactory.getLogger( SDRTrunk.class ); - - private Tap mTap; - private List mSamples; - private int mSampleCount; - - public QPSKTapPanel( ComplexTap tap ) - { - super( new SampleModel(), tap.getName() ); - - mTap = tap; - mTap.addListener( getModel() ); - - mSampleCount = (int)( 60 * tap.getSampleRateRatio() ); - - getModel().setSampleCount( mSampleCount ); - getModel().setDelay( tap.getDelay() ); - - mLog.info( "Complex Tap Panel [" + tap.getName() + "] count: " + - getModel().getSampleCount() + " delay:" + getModel().getDelay() ); - } - - @Override - public void update( Observable arg0, Object arg1 ) - { - mSamples = (List)getModel().getSamples(); - repaint(); - } - - public void paintComponent( Graphics g ) - { - super.paintComponent( g ); - - Graphics2D g2 = (Graphics2D)g; - - int min = ( getHeight() < getWidth() ? getHeight() : getWidth() ); - - float middle = (float)min / 2.0f; - - g2.setColor( Color.DARK_GRAY ); - - /* Vertical Line */ - g2.drawLine( getWidth() / 2, 5, getWidth() / 2, getHeight() - 5 ); - - /* Horizontal Line */ - g2.drawLine( getWidth() / 2 - (int)( middle ), getHeight() / 2, - getWidth() / 2 + (int)( middle ), getHeight() / 2 ); - - g2.setColor( Color.CYAN ); - - /* Crossed Lines */ - g2.drawLine( getWidth() / 2 - (int)( middle ), 5, - getWidth() / 2 + (int)( middle ), getHeight() - 5 ); - g2.drawLine( getWidth() / 2 + (int)( middle ), 5, - getWidth() / 2 - (int)( middle ), getHeight() - 5 ); - - - - if( mSamples != null && - mSamples.size() > 0 ) - { - g2.drawString( mLabel, 5 , 15 ); - - /* Set color to light gray for oldest 90% of constellations */ - g2.setColor( Color.LIGHT_GRAY ); - - int counter = 0; - - int threshold = (int)( mSamples.size() * 0.9f ); - - for( Complex sample: mSamples ) - { - /* Set color to foreground for newest 10% of constellations */ - if( counter == threshold ) - { - g2.setColor( getForeground() ); - } - -// float scale; -// -// if( sample.real() != 0 && sample.imaginary() != 0 ) -// { -// scale = 1.0f / sample.magnitude(); -// } -// else if( sample.real() == 0 ) -// { -// scale = 1.0f / sample.imaginary(); -// } -// else -// { -// scale = 1.0f / sample.real(); -// } - -// float x = ( getWidth() / 2 ) + -// ( scale * sample.real() * middle * 0.75f * mVerticalZoom ); - float x = ( getWidth() / 2 ) + - ( sample.real() * middle * 0.75f * mVerticalZoom ); - - if( Float.isNaN( x ) ) - { - x = getWidth() / 2; - } - -// float y = ( getHeight() / 2 ) + -// ( scale * sample.imaginary() * middle * 0.75f * mVerticalZoom ); - float y = ( getHeight() / 2 ) + - ( sample.imaginary() * middle * 0.75f * mVerticalZoom ); - - if( Float.isNaN( y ) ) - { - y = getHeight() / 2; - } - - g2.draw( new Ellipse2D.Float( x, y, 4.0f, 4.0f ) ); - - counter++; - } - } - - g2.dispose(); - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/StreamTap.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/StreamTap.java deleted file mode 100644 index 607fc994..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/StreamTap.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapType; - -public abstract class StreamTap extends Tap -{ - protected float mSampleRateRatio; - - public StreamTap( TapType type, - String name, - int delay, - float sampleRate ) - { - super( type, name, delay ); - - mSampleRateRatio = sampleRate; - } - - public float getSampleRateRatio() - { - return mSampleRateRatio; - } -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/SymbolEventTap.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/SymbolEventTap.java deleted file mode 100644 index 8954be23..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/SymbolEventTap.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.dsp.symbol.SymbolEvent; -import io.github.dsheirer.instrument.tap.TapListener; -import io.github.dsheirer.instrument.tap.TapType; -import io.github.dsheirer.sample.Listener; - -public class SymbolEventTap extends StreamTap implements Listener -{ - private Listener mListener; - - public SymbolEventTap( String name, int delay, float sampleRate ) - { - super( TapType.STREAM_SYMBOL, name, delay, sampleRate ); - } - - @Override - public void receive( SymbolEvent symbolEvent ) - { - if( mListener != null ) - { - mListener.receive( symbolEvent ); - } - - for( TapListener listener: mListeners ) - { - listener.receive( symbolEvent ); - } - } - - public void setListener( Listener listener ) - { - mListener = listener; - } - - public void removeListener( Listener listener ) - { - mListener = null; - } - -} diff --git a/src/main/java/io/github/dsheirer/instrument/tap/stream/SymbolEventTapViewPanel.java b/src/main/java/io/github/dsheirer/instrument/tap/stream/SymbolEventTapViewPanel.java deleted file mode 100644 index fb271bcb..00000000 --- a/src/main/java/io/github/dsheirer/instrument/tap/stream/SymbolEventTapViewPanel.java +++ /dev/null @@ -1,187 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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.instrument.tap.stream; - -import io.github.dsheirer.dsp.symbol.SymbolEvent; -import io.github.dsheirer.instrument.gui.SampleModel; -import io.github.dsheirer.instrument.tap.TapViewPanel; - -import java.awt.*; -import java.awt.geom.Path2D; -import java.awt.geom.Rectangle2D; -import java.util.List; -import java.util.Observable; - -public class SymbolEventTapViewPanel extends TapViewPanel -{ - private static final long serialVersionUID = 1L; - - private SymbolEventTap mTap; - private List mSamples; - private int mSampleCount; - - public SymbolEventTapViewPanel( SymbolEventTap tap ) - { - super( new SampleModel(), tap.getName() ); - - mTap = tap; - mTap.addListener( getModel() ); - - mSampleCount = (int)( getModel().getSampleCount() * tap.getSampleRateRatio() ); - - getModel().setSampleCount( mSampleCount ); - - getModel().setDelay( tap.getDelay() ); - } - - @Override - public void update( Observable arg0, Object arg1 ) - { - mSamples = (List)getModel().getSamples(); - - repaint(); - } - - public void paintComponent( Graphics g ) - { - super.paintComponent( g ); - - Graphics2D g2 = (Graphics2D)g; - - int height = getHeight(); - int width = getWidth(); - - g2.setColor( Color.DARK_GRAY ); - - float middle = (float)height / 2.0f; - - g2.drawLine( 0, (int)middle, width, (int)middle ); - - if( mSamples != null && mSamples.size() > 0 ) - { - g2.setColor( getForeground() ); - - g2.drawString( mLabel, 5 , 15 ); - - for( int x = 1; x < mSamples.size(); x++ ) - { - paint( g, x, mSamples.get( x ) ); - } - } - - g2.dispose(); - } - - /** - * Paints a polyline representing a boolean value with a 0 or 1 label in - * the middle of it - * - * @param graphics - * @param index - index of the sample int the sample buffer - * @param value - bit value, 0 or 1 - */ - private void paint( Graphics graphics, int index, SymbolEvent symbol ) - { - Graphics2D g2 = (Graphics2D)graphics; - - g2.setColor( getForeground() ); - - Path2D.Float polyline = - new Path2D.Float( Path2D.Float.WIND_EVEN_ODD, mSamples.size() ); - - float middleY = ( (float)getHeight() / 2.0f ); - - float indexWidth = (float)( getWidth() ) / (float)mSampleCount; - - float startX = (float)index * indexWidth; - float stopX = (float)(index + 1 ) * indexWidth; - float fivePercent = indexWidth * .05f; - float leftX = startX + fivePercent; - float rightX = stopX - fivePercent; - - /* Start */ - polyline.moveTo( startX, middleY ); - - /* Left horizonal segment */ - polyline.lineTo( leftX, middleY ); - - float y = ( symbol.getDecision() ? ( middleY - ( middleY * 0.5f) ) : - ( middleY + ( middleY * 0.5f) ) ); - - /* Left vertical segment */ - polyline.lineTo( leftX, y ); - - /* Middle horizontal segment */ - polyline.lineTo( rightX, y ); - - /* Right vertical segment */ - polyline.lineTo( rightX, middleY ); - - /* Right horizontal segment */ - polyline.lineTo( stopX, middleY ); - - g2.draw( polyline ); - - /* Draw the bit value label */ - String bit = symbol.getDecision() ? "1" : "0"; - - FontMetrics fontMetrics = graphics.getFontMetrics( this.getFont() ); - - Rectangle2D label = fontMetrics.getStringBounds( bit, graphics ); - - float offsetX = (float)label.getWidth() / 2.0f; - float offsetY = (float)label.getHeight() / 2.0f; - - float middleX = startX + ( indexWidth / 2.0f ); - - graphics.drawString( bit, - (int)( middleX - offsetX ), - (int)( middleY - ( ( middleY < y ) ? offsetY : -( 2.0f * offsetY ) ) ) ); - - /* Draw samples */ - float sampleWidth = ( rightX - leftX ) / (float)( symbol.getSamplesPerSymbol() + 1 ); - - g2.setColor( Color.GREEN ); - - for( int x = 0; x < symbol.getSamplesPerSymbol(); x++ ) - { - Path2D.Float line = - new Path2D.Float( Path2D.Float.WIND_EVEN_ODD, 2 ); - - float sampleX = leftX + ( ( x + 1 ) * sampleWidth ); - -// line.moveTo( sampleX, middleY ); - line.moveTo( sampleX, ( symbol.getBitSet().get( x ) ? - middleY - ( middleY * .05f ) : - middleY + ( middleY * .05f ) ) ); - - float sampleY = ( symbol.getBitSet().get( x ) ? - ( middleY - ( middleY * 0.45f ) ) : - ( middleY + ( middleY * 0.45f ) ) ); - - line.lineTo( sampleX, sampleY ); - - g2.draw( line ); - - graphics.drawString( symbol.getShift().getLabel(), - (int)( middleX - offsetX ), - (int)( y - ( ( y < middleY ) ? offsetY : -( 2.0f * offsetY ) ) ) ); - - } - } -} diff --git a/src/main/java/io/github/dsheirer/module/decode/fleetsync2/Fleetsync2DecoderInstrumented.java b/src/main/java/io/github/dsheirer/module/decode/fleetsync2/Fleetsync2DecoderInstrumented.java index 58a31ca8..88abbfeb 100644 --- a/src/main/java/io/github/dsheirer/module/decode/fleetsync2/Fleetsync2DecoderInstrumented.java +++ b/src/main/java/io/github/dsheirer/module/decode/fleetsync2/Fleetsync2DecoderInstrumented.java @@ -16,7 +16,7 @@ package io.github.dsheirer.module.decode.fleetsync2; import io.github.dsheirer.dsp.afsk.AFSK1200DecoderInstrumented; -import io.github.dsheirer.instrument.gui.viewer.chart.IInstrumentedAFSK1200Decoder; +import io.github.dsheirer.instrument.chart.IInstrumentedAFSK1200Decoder; import io.github.dsheirer.sample.buffer.ReusableBuffer; import javafx.beans.property.SimpleIntegerProperty; diff --git a/src/main/java/io/github/dsheirer/module/decode/lj1200/LJ1200DecoderInstrumented.java b/src/main/java/io/github/dsheirer/module/decode/lj1200/LJ1200DecoderInstrumented.java index 468b117b..80648fb2 100644 --- a/src/main/java/io/github/dsheirer/module/decode/lj1200/LJ1200DecoderInstrumented.java +++ b/src/main/java/io/github/dsheirer/module/decode/lj1200/LJ1200DecoderInstrumented.java @@ -16,7 +16,7 @@ package io.github.dsheirer.module.decode.lj1200; import io.github.dsheirer.dsp.afsk.AFSK1200DecoderInstrumented; -import io.github.dsheirer.instrument.gui.viewer.chart.IInstrumentedAFSK1200Decoder; +import io.github.dsheirer.instrument.chart.IInstrumentedAFSK1200Decoder; import io.github.dsheirer.sample.buffer.ReusableBuffer; import javafx.beans.property.SimpleIntegerProperty; diff --git a/src/main/java/io/github/dsheirer/module/decode/mdc1200/MDCDecoderInstrumented.java b/src/main/java/io/github/dsheirer/module/decode/mdc1200/MDCDecoderInstrumented.java index 1e2bdafd..c430b999 100644 --- a/src/main/java/io/github/dsheirer/module/decode/mdc1200/MDCDecoderInstrumented.java +++ b/src/main/java/io/github/dsheirer/module/decode/mdc1200/MDCDecoderInstrumented.java @@ -16,7 +16,7 @@ package io.github.dsheirer.module.decode.mdc1200; import io.github.dsheirer.dsp.afsk.AFSK1200DecoderInstrumented; -import io.github.dsheirer.instrument.gui.viewer.chart.IInstrumentedAFSK1200Decoder; +import io.github.dsheirer.instrument.chart.IInstrumentedAFSK1200Decoder; import io.github.dsheirer.sample.buffer.ReusableBuffer; import javafx.beans.property.SimpleIntegerProperty; diff --git a/src/main/java/io/github/dsheirer/module/decode/mpt1327/MPT1327DecoderInstrumented.java b/src/main/java/io/github/dsheirer/module/decode/mpt1327/MPT1327DecoderInstrumented.java index 33413a78..365ff66b 100644 --- a/src/main/java/io/github/dsheirer/module/decode/mpt1327/MPT1327DecoderInstrumented.java +++ b/src/main/java/io/github/dsheirer/module/decode/mpt1327/MPT1327DecoderInstrumented.java @@ -16,7 +16,7 @@ package io.github.dsheirer.module.decode.mpt1327; import io.github.dsheirer.dsp.afsk.AFSK1200DecoderInstrumented; -import io.github.dsheirer.instrument.gui.viewer.chart.IInstrumentedAFSK1200Decoder; +import io.github.dsheirer.instrument.chart.IInstrumentedAFSK1200Decoder; import io.github.dsheirer.sample.buffer.ReusableBuffer; import javafx.beans.property.SimpleIntegerProperty; diff --git a/src/main/java/io/github/dsheirer/module/decode/mpt1327/MPT1327DecoderLegacy.java b/src/main/java/io/github/dsheirer/module/decode/mpt1327/MPT1327DecoderLegacy.java deleted file mode 100644 index be8fef25..00000000 --- a/src/main/java/io/github/dsheirer/module/decode/mpt1327/MPT1327DecoderLegacy.java +++ /dev/null @@ -1,253 +0,0 @@ -/******************************************************************************* - * sdrtrunk - * Copyright (C) 2014-2017 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.module.decode.mpt1327; - -import io.github.dsheirer.alias.AliasList; -import io.github.dsheirer.bits.MessageFramer; -import io.github.dsheirer.dsp.filter.FilterFactory; -import io.github.dsheirer.dsp.filter.Filters; -import io.github.dsheirer.dsp.filter.fir.FIRFilterSpecification; -import io.github.dsheirer.dsp.filter.fir.real.RealFIRFilter_RB_RB; -import io.github.dsheirer.dsp.filter.halfband.real.HalfBandFilter_RB_RB; -import io.github.dsheirer.dsp.fsk.FSK2Decoder; -import io.github.dsheirer.instrument.Instrumentable; -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapGroup; -import io.github.dsheirer.instrument.tap.stream.BinaryTap; -import io.github.dsheirer.instrument.tap.stream.FloatBufferTap; -import io.github.dsheirer.instrument.tap.stream.FloatTap; -import io.github.dsheirer.module.decode.Decoder; -import io.github.dsheirer.module.decode.DecoderType; -import io.github.dsheirer.sample.Broadcaster; -import io.github.dsheirer.sample.Listener; -import io.github.dsheirer.sample.real.IFilteredRealBufferListener; -import io.github.dsheirer.sample.real.RealBuffer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.List; - -/** - * MPT1327 Decoder - 1200 baud 2FSK decoder that can process 48k sample rate - * complex or floating point samples and output fully framed MPT1327 control and - * traffic messages. - */ -public class MPT1327DecoderLegacy extends Decoder implements IFilteredRealBufferListener, Instrumentable -{ - private final static Logger mLog = LoggerFactory.getLogger(MPT1327DecoderLegacy.class); - - private static final FIRFilterSpecification HIGH_PASS_SPECIFICATION = FIRFilterSpecification.highPassBuilder() - .sampleRate( 24000 ) - .stopBandCutoff( 800 ) - .stopBandAmplitude( 0.0 ) - .stopBandRipple( 0.03 ) - .passBandStart( 1000 ) - .passBandAmplitude( 1.0 ) - .passBandRipple( 0.08 ) - .build(); - - private static float[] HIGHPASS_FILTER; - - static - { - try - { - HIGHPASS_FILTER = FilterFactory.getTaps(HIGH_PASS_SPECIFICATION); - } - catch(Exception e) - { - mLog.error("Couldn't design MPT1327 highpass filter"); - } - } - - /* Decimated sample rate ( 48,000 / 2 = 24,000 ) feeding the decoder */ - private static final int sDECIMATED_SAMPLE_RATE = 24000; - - /* Baud or Symbol Rate */ - private static final int sSYMBOL_RATE = 1200; - - /* Message length -- longest possible message is: - * 4xREVS + 16xSYNC + 64xADD1 + 64xDCW1 + 64xDCW2 + 64xDCW3 + 64xDCW4 */ - private static final int sMESSAGE_LENGTH = 350; - - /* Instrumentation Taps */ - private static final String INSTRUMENT_HB1_FILTER_TO_HIGH_PASS = - "Tap Point: Half-band Decimation Filter > < Low Pass Filter"; - private static final String INSTRUMENT_HIGH_PASS_TO_DECODER = - "Tap Point: Low Pass Filter > < Decoder"; - private static final String INSTRUMENT_DECODER_TO_FRAMER = - "Tap Point: Decoder > < Sync Detect/Message Framer"; - private List mAvailableTaps; - - private HalfBandFilter_RB_RB mDecimationFilter; - private RealFIRFilter_RB_RB mHighPassFilter; - private FSK2Decoder mFSKDecoder; - private Broadcaster mSymbolBroadcaster; - private MessageFramer mControlMessageFramer; - private MessageFramer mTrafficMessageFramer; - private MPT1327MessageProcessor mMessageProcessor; - - public MPT1327DecoderLegacy(AliasList aliasList, Sync sync) - { - /** - * Normal: 2FSK Decoder with inverted output - * French: 2FSK Decoder with normal output - */ - if(sync == Sync.NORMAL) - { - mFSKDecoder = new FSK2Decoder(24000, 1200, FSK2Decoder.Output.INVERTED); - } - else if(sync == Sync.FRENCH) - { - mFSKDecoder = new FSK2Decoder(24000, 1200, FSK2Decoder.Output.NORMAL); - } - else - { - throw new IllegalArgumentException("MPT1327 Decoder - unrecognized Sync type"); - } - - /* Decimation filter - 48000 / 2 = 24000 output */ - mDecimationFilter = new HalfBandFilter_RB_RB(Filters.FIR_HALF_BAND_31T_ONE_EIGHTH_FCO.getCoefficients(), 1.0002f, true); - - //High-pass filter the audio to remove any DC component or CTCSS tones. The audio has already been low-pass - //filtered by the AudioDemodulation filter cutoff of 3400 Hz. - mHighPassFilter = new RealFIRFilter_RB_RB(HIGHPASS_FILTER, 1.0f); - mDecimationFilter.setListener(mHighPassFilter); - - mHighPassFilter.setListener(mFSKDecoder); - - mSymbolBroadcaster = new Broadcaster(); - mFSKDecoder.setListener(mSymbolBroadcaster); - - /* Message framer for control channel messages */ - mControlMessageFramer = new MessageFramer(sync.getControlSyncPattern().getPattern(), sMESSAGE_LENGTH); - mSymbolBroadcaster.addListener(mControlMessageFramer); - - /* Message framer for traffic channel massages */ - mTrafficMessageFramer = new MessageFramer(sync.getTrafficSyncPattern().getPattern(), sMESSAGE_LENGTH); - mSymbolBroadcaster.addListener(mTrafficMessageFramer); - - /* Fully decoded and framed messages processor */ - mMessageProcessor = new MPT1327MessageProcessor(aliasList); - mMessageProcessor.setMessageListener(getMessageListener()); - mControlMessageFramer.addMessageListener(mMessageProcessor); - mTrafficMessageFramer.addMessageListener(mMessageProcessor); - } - - @Override - public Listener getFilteredRealBufferListener() - { - return mDecimationFilter; - } - - @Override - public DecoderType getDecoderType() - { - return DecoderType.MPT1327; - } - - /** - * Cleanup method - */ - public void dispose() - { - super.dispose(); - - mSymbolBroadcaster.dispose(); - - mControlMessageFramer.dispose(); - - mFSKDecoder.dispose(); - - mDecimationFilter.dispose(); - - mMessageProcessor.dispose(); - - mTrafficMessageFramer.dispose(); - } - - /* Instrumentation Taps */ - @Override - public List getTapGroups() - { - if(mAvailableTaps == null) - { - mAvailableTaps = new ArrayList(); - - TapGroup group = new TapGroup("MPT-1327 Decoder"); - - group.add(new FloatTap(INSTRUMENT_HB1_FILTER_TO_HIGH_PASS, 0, 0.5f)); - group.add(new FloatTap(INSTRUMENT_HIGH_PASS_TO_DECODER, 0, 0.5f)); - group.add(new BinaryTap(INSTRUMENT_DECODER_TO_FRAMER, 0, 0.025f)); - - mAvailableTaps.add(group); - - /* Add the taps from the FSK decoder */ - mAvailableTaps.addAll(mFSKDecoder.getTapGroups()); - } - - return mAvailableTaps; - } - - @Override - public void registerTap(Tap tap) - { - /* Send request to decoder */ - mFSKDecoder.registerTap(tap); - - switch(tap.getName()) - { - case INSTRUMENT_HB1_FILTER_TO_HIGH_PASS: - FloatBufferTap hb1Tap = (FloatBufferTap) tap; - mDecimationFilter.setListener(hb1Tap); - hb1Tap.setListener(mHighPassFilter); - break; - case INSTRUMENT_HIGH_PASS_TO_DECODER: - FloatBufferTap lowTap = (FloatBufferTap) tap; - mHighPassFilter.setListener(lowTap); - lowTap.setListener(mFSKDecoder); - break; - case INSTRUMENT_DECODER_TO_FRAMER: - BinaryTap decoderTap = (BinaryTap) tap; - mFSKDecoder.setListener(decoderTap); - decoderTap.setListener(mSymbolBroadcaster); - break; - } - } - - @Override - public void unregisterTap(Tap tap) - { - mFSKDecoder.unregisterTap(tap); - - switch(tap.getName()) - { - case INSTRUMENT_HB1_FILTER_TO_HIGH_PASS: - mDecimationFilter.setListener(mHighPassFilter); - break; - case INSTRUMENT_HIGH_PASS_TO_DECODER: - mHighPassFilter.setListener(mFSKDecoder); - break; - case INSTRUMENT_DECODER_TO_FRAMER: - mFSKDecoder.setListener(mSymbolBroadcaster); - break; - } - } -} diff --git a/src/main/java/io/github/dsheirer/module/decode/p25/C4FMSymbolFilter.java b/src/main/java/io/github/dsheirer/module/decode/p25/C4FMSymbolFilter.java index bca6a3a2..5f3d4215 100644 --- a/src/main/java/io/github/dsheirer/module/decode/p25/C4FMSymbolFilter.java +++ b/src/main/java/io/github/dsheirer/module/decode/p25/C4FMSymbolFilter.java @@ -1,11 +1,6 @@ package io.github.dsheirer.module.decode.p25; import io.github.dsheirer.dsp.gain.DirectGainControl; -import io.github.dsheirer.instrument.Instrumentable; -import io.github.dsheirer.instrument.tap.Tap; -import io.github.dsheirer.instrument.tap.TapGroup; -import io.github.dsheirer.instrument.tap.stream.AdditiveFloatTap; -import io.github.dsheirer.instrument.tap.stream.FloatTap; import io.github.dsheirer.sample.Listener; import io.github.dsheirer.sample.real.RealBuffer; import io.github.dsheirer.sample.real.RealSampleListener; @@ -13,10 +8,7 @@ import io.github.dsheirer.sample.real.RealSampleProvider; import io.github.dsheirer.source.ISourceEventListener; import io.github.dsheirer.source.SourceEvent; -import java.util.ArrayList; -import java.util.List; - -public class C4FMSymbolFilter implements Listener, ISourceEventListener, RealSampleProvider, Instrumentable +public class C4FMSymbolFilter implements Listener, ISourceEventListener, RealSampleProvider { private static final float TAPS[][] = { @@ -151,11 +143,6 @@ public class C4FMSymbolFilter implements Listener, ISourceEventListe {0.00000e+00f, 0.00000e+00f, 0.00000e+00f, 1.00000e+00f, 0.00000e+00f, 0.00000e+00f, 0.00000e+00f, 0.00000e+00f}, // 128/128 }; - /* Instrumentation Taps */ - private static final String INSTRUMENT_SYMBOL_SPREAD = "Tap Point: Symbol Spread (Goal=2.0)"; - private FloatTap mSymbolSpreadTap; - private List mAvailableTaps; - private static final int NUMBER_FILTER_TAPS = 8; private static final int NUMBER_FILTER_STEPS = 128; @@ -379,11 +366,6 @@ public class C4FMSymbolFilter implements Listener, ISourceEventListe 500 * (mCoarseFrequencyCorrection > 0 ? 1 : -1); } - if(mSymbolSpreadTap != null) - { - mSymbolSpreadTap.receive(mSymbolSpread); - } - /* dispatch the interpolated value to the listener */ if(mListener != null) { @@ -404,46 +386,6 @@ public class C4FMSymbolFilter implements Listener, ISourceEventListe mListener = null; } - @Override - public List getTapGroups() - { - if(mAvailableTaps == null) - { - mAvailableTaps = new ArrayList<>(); - - /* - * Since the target is 2.0, we subtract 2.0 from the value so that - * a good value is plotted right on the zero center line - */ - TapGroup group = new TapGroup("C4FM Symbol Filter"); - - group.add( - new AdditiveFloatTap(INSTRUMENT_SYMBOL_SPREAD, 0, 0.1f, -2.0f)); - - mAvailableTaps.add(group); - } - - return mAvailableTaps; - } - - @Override - public void registerTap(Tap tap) - { - if(tap.getName().contentEquals(INSTRUMENT_SYMBOL_SPREAD)) - { - mSymbolSpreadTap = (FloatTap)tap; - } - } - - @Override - public void unregisterTap(Tap tap) - { - if(tap.getName().contentEquals(INSTRUMENT_SYMBOL_SPREAD)) - { - mSymbolSpreadTap = null; - } - } - /** * Broadcasts a frequency change event to the registered listener * diff --git a/src/main/java/io/github/dsheirer/module/decode/tait/Tait1200DecoderInstrumented.java b/src/main/java/io/github/dsheirer/module/decode/tait/Tait1200DecoderInstrumented.java index c6ce15f9..93150c67 100644 --- a/src/main/java/io/github/dsheirer/module/decode/tait/Tait1200DecoderInstrumented.java +++ b/src/main/java/io/github/dsheirer/module/decode/tait/Tait1200DecoderInstrumented.java @@ -16,7 +16,7 @@ package io.github.dsheirer.module.decode.tait; import io.github.dsheirer.dsp.afsk.AFSK1200DecoderInstrumented; -import io.github.dsheirer.instrument.gui.viewer.chart.IInstrumentedAFSK1200Decoder; +import io.github.dsheirer.instrument.chart.IInstrumentedAFSK1200Decoder; import io.github.dsheirer.sample.buffer.ReusableBuffer; import javafx.beans.property.SimpleIntegerProperty;