diff --git a/config/logback.xml b/config/logback.xml
index 693cab94..631e8aa5 100644
--- a/config/logback.xml
+++ b/config/logback.xml
@@ -9,7 +9,7 @@
10
- %-25(%d{yyyyMMdd HHmmss} [%thread]) %-5level %logger{30} - %msg%n
+ %-25(%d{yyyyMMdd HHmmss.SSS} [%thread]) %-5level %logger{30} - %msg%n
diff --git a/src/audio/AudioModule.java b/src/audio/AudioModule.java
index f810354e..2905e423 100644
--- a/src/audio/AudioModule.java
+++ b/src/audio/AudioModule.java
@@ -1,5 +1,7 @@
package audio;
+import java.util.Arrays;
+
import module.Module;
import org.slf4j.Logger;
@@ -115,7 +117,9 @@ public class AudioModule extends Module implements IAudioPacketProvider,
{
if( mAudioPacketListener != null && mSquelchState == SquelchState.UNSQUELCH )
{
- float[] audio = buffer.getSamples();
+ /* We make a copy of the samples, so that we don't affect any other
+ * processes that might be concurrently processing the same buffer */
+ float[] audio = Arrays.copyOf( buffer.getSamples(), buffer.getSamples().length );
mAudioFilter.filter( audio );
diff --git a/src/audio/metadata/AudioMetadata.java b/src/audio/metadata/AudioMetadata.java
index 67127ab2..724d76a4 100644
--- a/src/audio/metadata/AudioMetadata.java
+++ b/src/audio/metadata/AudioMetadata.java
@@ -94,6 +94,7 @@ public class AudioMetadata implements Listener
copy.mRecordable = mRecordable;
copy.mMetadata.addAll( mMetadata );
copy.mUpdated = mUpdated;
+ copy.mIdentifier = mIdentifier;
return copy;
}
diff --git a/src/audio/metadata/Metadata.java b/src/audio/metadata/Metadata.java
index 884be702..c4f41442 100644
--- a/src/audio/metadata/Metadata.java
+++ b/src/audio/metadata/Metadata.java
@@ -94,6 +94,8 @@ public class Metadata
sb.append( mMetadataType.getLabel() );
sb.append( ":" );
sb.append( mValue );
+ sb.append( " Alias:" );
+ sb.append( mValueAlias == null ? "null" : getAlias().getName() );
sb.append( " [" );
sb.append( mMetadataType.name() );
sb.append( "] temporal:" );
diff --git a/src/module/ProcessingChain.java b/src/module/ProcessingChain.java
index 9c94d622..ada65bd7 100644
--- a/src/module/ProcessingChain.java
+++ b/src/module/ProcessingChain.java
@@ -31,6 +31,7 @@ import module.decode.Decoder;
import module.decode.event.CallEvent;
import module.decode.event.ICallEventListener;
import module.decode.event.ICallEventProvider;
+import module.decode.state.DecoderState;
import module.decode.state.DecoderStateEvent;
import module.decode.state.DecoderStateEvent.Event;
import module.decode.state.IDecoderStateEventListener;
@@ -251,21 +252,21 @@ public class ProcessingChain implements IChannelEventListener
}
/**
- * List of decoders for this processing chain
+ * List of decoder states for this processing chain
*/
- public List getDecoders()
+ public List getDecoderStates()
{
- List decoders = new ArrayList<>();
+ List decoderStates = new ArrayList<>();
for( Module module: mModules )
{
- if( module instanceof Decoder )
+ if( module instanceof DecoderState )
{
- decoders.add( (Decoder)module );
+ decoderStates.add( (DecoderState)module );
}
}
- return decoders;
+ return decoderStates;
}
/**
@@ -349,7 +350,7 @@ public class ProcessingChain implements IChannelEventListener
if( module instanceof ICallEventProvider )
{
- ((ICallEventProvider)module).setCallEventListener( mCallEventBroadcaster );
+ ((ICallEventProvider)module).addCallEventListener( mCallEventBroadcaster );
}
if( module instanceof IChannelEventProvider )
diff --git a/src/module/decode/Decoder.java b/src/module/decode/Decoder.java
index 35b8ef27..80cc19b2 100644
--- a/src/module/decode/Decoder.java
+++ b/src/module/decode/Decoder.java
@@ -20,45 +20,19 @@ package module.decode;
import message.IMessageProvider;
import message.Message;
import module.Module;
-import module.decode.event.CallEvent;
-import module.decode.event.ICallEventProvider;
-import module.decode.state.DecoderState;
-import module.decode.state.DecoderStateEvent;
-import module.decode.state.IDecoderStateEventListener;
-import module.decode.state.IDecoderStateEventProvider;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import sample.Broadcaster;
import sample.Listener;
-public abstract class Decoder extends Module
- implements ICallEventProvider,
- IDecoderStateEventListener,
- IDecoderStateEventProvider,
- IMessageProvider
+public abstract class Decoder extends Module implements IMessageProvider
{
- private final static Logger mLog = LoggerFactory.getLogger( Decoder.class );
+ /* This has to be a broadcaster in order for references to persist */
+ protected Broadcaster mMessageBroadcaster = new Broadcaster<>();
- /**
- * Broadcasts decoded messages both to the internal decoder state and any
- * external registered message listeners
- */
- protected Broadcaster mMessageBroadcaster =
- new Broadcaster();
-
- protected DecoderState mDecoderState;
-
/**
* Decoder - parent class for all decoders, demodulators and components.
*/
- public Decoder( DecoderState decoderState )
+ public Decoder()
{
- assert( decoderState != null );
-
- mDecoderState = decoderState;
- mMessageBroadcaster.addListener( mDecoderState );
}
@Override
@@ -68,32 +42,6 @@ public abstract class Decoder extends Module
mMessageBroadcaster = null;
}
- /**
- * Allows decoder to broadcast initialization messages/events so that
- * external modules can be correctly configured. This method is invoked
- * prior to processing start.
- */
- public void reset()
- {
- mDecoderState.init();
- }
-
- /**
- * Start the decoder
- */
- @Override
- public void start()
- {
- }
-
- /**
- * Stop the decoder
- */
- @Override
- public void stop()
- {
- }
-
/**
* Identifies the decoder type (ie protocol)
*/
@@ -107,7 +55,7 @@ public abstract class Decoder extends Module
public void addMessageListener( Listener listener )
{
mMessageBroadcaster.addListener( listener );
- }
+ }
/**
* Removes the listener from receiving decoded messages from all attached
@@ -118,42 +66,4 @@ public abstract class Decoder extends Module
{
mMessageBroadcaster.removeListener( listener );
}
-
- /**
- * Decoder State - tracks the state of the decoder
- */
- public DecoderState getDecoderState()
- {
- return mDecoderState;
- }
-
- @Override
- public Listener getDecoderStateListener()
- {
- return mDecoderState.getDecoderStateListener();
- }
-
- @Override
- public void setDecoderStateListener( Listener listener )
- {
- mDecoderState.setDecoderStateListener( listener );
- }
-
- @Override
- public void removeDecoderStateListener()
- {
- mDecoderState.removeDecoderStateListener();
- }
-
- @Override
- public void setCallEventListener( Listener listener )
- {
- mDecoderState.setCallEventListener( listener );
- }
-
- @Override
- public void removeCallEventListener()
- {
- mDecoderState.removeCallEventListener();
- }
}
diff --git a/src/module/decode/DecoderFactory.java b/src/module/decode/DecoderFactory.java
index cfe0bbfa..ca85caea 100644
--- a/src/module/decode/DecoderFactory.java
+++ b/src/module/decode/DecoderFactory.java
@@ -30,36 +30,42 @@ import module.decode.config.AuxDecodeConfiguration;
import module.decode.config.DecodeConfiguration;
import module.decode.fleetsync2.Fleetsync2Decoder;
import module.decode.fleetsync2.Fleetsync2DecoderPanel;
+import module.decode.fleetsync2.Fleetsync2DecoderState;
import module.decode.fleetsync2.FleetsyncMessageFilter;
import module.decode.lj1200.LJ1200Decoder;
import module.decode.lj1200.LJ1200DecoderPanel;
+import module.decode.lj1200.LJ1200DecoderState;
import module.decode.lj1200.LJ1200MessageFilter;
import module.decode.ltrnet.DecodeConfigLTRNet;
import module.decode.ltrnet.LTRNetDecoder;
import module.decode.ltrnet.LTRNetDecoderPanel;
+import module.decode.ltrnet.LTRNetDecoderState;
import module.decode.ltrnet.LTRNetEditor;
import module.decode.ltrnet.LTRNetMessageFilter;
import module.decode.ltrstandard.DecodeConfigLTRStandard;
import module.decode.ltrstandard.LTRStandardDecoder;
import module.decode.ltrstandard.LTRStandardDecoderPanel;
+import module.decode.ltrstandard.LTRStandardDecoderState;
import module.decode.ltrstandard.LTRStandardEditor;
import module.decode.ltrstandard.LTRStandardMessageFilter;
import module.decode.mdc1200.MDCDecoder;
import module.decode.mdc1200.MDCDecoderPanel;
+import module.decode.mdc1200.MDCDecoderState;
import module.decode.mdc1200.MDCMessageFilter;
import module.decode.mpt1327.DecodeConfigMPT1327;
import module.decode.mpt1327.MPT1327ConfigEditor;
import module.decode.mpt1327.MPT1327Decoder;
import module.decode.mpt1327.MPT1327Decoder.Sync;
import module.decode.mpt1327.MPT1327DecoderPanel;
+import module.decode.mpt1327.MPT1327DecoderState;
import module.decode.mpt1327.MPT1327MessageFilter;
import module.decode.nbfm.NBFMDecoder;
import module.decode.nbfm.NBFMDecoderPanel;
import module.decode.nbfm.NBFMEditor;
import module.decode.p25.DecodeConfigP25Phase1;
-import module.decode.p25.P25Decoder;
import module.decode.p25.P25Decoder.Modulation;
import module.decode.p25.P25DecoderPanel;
+import module.decode.p25.P25DecoderState;
import module.decode.p25.P25Editor;
import module.decode.p25.P25_C4FMDecoder;
import module.decode.p25.P25_LSMDecoder;
@@ -67,12 +73,16 @@ import module.decode.p25.audio.P25AudioModule;
import module.decode.p25.message.filter.P25MessageFilterSet;
import module.decode.passport.PassportDecoder;
import module.decode.passport.PassportDecoderPanel;
+import module.decode.passport.PassportDecoderState;
import module.decode.passport.PassportEditor;
import module.decode.passport.PassportMessageFilter;
+import module.decode.state.AlwaysUnsquelchedDecoderState;
import module.decode.state.DecoderPanel;
+import module.decode.state.DecoderState;
import module.decode.state.TrafficChannelManager;
import module.decode.tait.Tait1200Decoder;
import module.decode.tait.Tait1200DecoderPanel;
+import module.decode.tait.Tait1200DecoderState;
import module.demodulate.fm.FMDemodulatorModule;
import org.slf4j.Logger;
@@ -180,22 +190,26 @@ public class DecoderFactory
switch( decodeConfig.getDecoderType() )
{
case AM:
-// decoder = new AMDecoder();
+ modules.add( new AMDecoder( decodeConfig ) );
+ modules.add( new AlwaysUnsquelchedDecoderState( DecoderType.AM ) );
break;
case NBFM:
modules.add( new AudioModule( recordAudio, NO_REMOVE_DC ) );
modules.add( new NBFMDecoder( decodeConfig ) );
+ modules.add( new AlwaysUnsquelchedDecoderState( DecoderType.NBFM ) );
modules.add( getFMDemodulator( decodeConfig, pass, stop, REMOVE_DC ) );
break;
case LTR_STANDARD:
modules.add( new AudioModule( recordAudio, REMOVE_DC ) );
MessageDirection direction = ((DecodeConfigLTRStandard)decodeConfig).getMessageDirection();
modules.add( new LTRStandardDecoder( aliasList, direction ) );
+ modules.add( new LTRStandardDecoderState( aliasList ) );
modules.add( getFMDemodulator( decodeConfig, pass, stop, NO_REMOVE_DC ) );
break;
case LTR_NET:
modules.add( new AudioModule( recordAudio, REMOVE_DC ) );
modules.add( new LTRNetDecoder( (DecodeConfigLTRNet)decodeConfig, aliasList ) );
+ modules.add( new LTRNetDecoderState( aliasList ) );
modules.add( getFMDemodulator( decodeConfig, pass, stop, NO_REMOVE_DC ) );
break;
case MPT1327:
@@ -205,8 +219,11 @@ public class DecoderFactory
ChannelMap channelMap = resourceManager.getPlaylistManager().getPlayist()
.getChannelMapList().getChannelMap( mptConfig.getChannelMapName() );
+
Sync sync = mptConfig.getSync();
- modules.add( new MPT1327Decoder( channelMap, channelType, aliasList, sync ) );
+
+ modules.add( new MPT1327Decoder( aliasList, sync ) );
+ modules.add( new MPT1327DecoderState( aliasList, channelMap, channelType ) );
if( channelType == ChannelType.STANDARD )
{
@@ -221,7 +238,8 @@ public class DecoderFactory
modules.add( getFMDemodulator( decodeConfig, pass, stop, REMOVE_DC ) );
break;
case PASSPORT:
-// decoder = new PassportDecoder( config, aliasList );
+ modules.add( new PassportDecoder( decodeConfig, aliasList ) );
+ modules.add( new PassportDecoderState( aliasList ) );
break;
case P25_PHASE1:
DecodeConfigP25Phase1 p25Config = (DecodeConfigP25Phase1)decodeConfig;
@@ -232,10 +250,12 @@ public class DecoderFactory
{
case C4FM:
modules.add( getFMDemodulator( decodeConfig, 6750, 7500, REMOVE_DC ) );
- modules.add( new P25_C4FMDecoder( aliasList, channelType ) );
+ modules.add( new P25_C4FMDecoder( aliasList ) );
+ modules.add( new P25DecoderState( aliasList, channelType, Modulation.C4FM ) );
break;
case CQPSK:
- modules.add( new P25_LSMDecoder( aliasList, channelType ) );
+ modules.add( new P25_LSMDecoder( aliasList ) );
+ modules.add( new P25DecoderState( aliasList, channelType, Modulation.CQPSK ) );
break;
default:
throw new IllegalArgumentException( "Unrecognized P25 "
@@ -270,10 +290,10 @@ public class DecoderFactory
* @param aliasList - optional alias list
* @return - list of auxiliary decoders
*/
- public static List getAuxiliaryDecoders( AuxDecodeConfiguration config,
+ public static List getAuxiliaryDecoders( AuxDecodeConfiguration config,
AliasList aliasList )
{
- List decoders = new ArrayList();
+ List modules = new ArrayList<>();
if( config != null )
{
@@ -282,16 +302,20 @@ public class DecoderFactory
switch( auxDecoder )
{
case FLEETSYNC2:
- decoders.add( new Fleetsync2Decoder( aliasList ) );
+ modules.add( new Fleetsync2Decoder( aliasList ) );
+ modules.add( new Fleetsync2DecoderState( aliasList ) );
break;
case MDC1200:
- decoders.add( new MDCDecoder( aliasList ) );
+ modules.add( new MDCDecoder( aliasList ) );
+ modules.add( new MDCDecoderState( aliasList ) );
break;
case LJ_1200:
- decoders.add( new LJ1200Decoder( aliasList ) );
+ modules.add( new LJ1200Decoder( aliasList ) );
+ modules.add( new LJ1200DecoderState( aliasList ) );
break;
case TAIT_1200:
- decoders.add( new Tait1200Decoder( aliasList ) );
+ modules.add( new Tait1200Decoder( aliasList ) );
+ modules.add( new Tait1200DecoderState( aliasList ) );
break;
default:
throw new IllegalArgumentException( "Unrecognized auxiliary "
@@ -300,39 +324,48 @@ public class DecoderFactory
}
}
- return decoders;
+ return modules;
}
public static DecoderPanel getDecoderPanel( SettingsManager settingsManager,
- Decoder decoder )
+ DecoderState decoderState )
{
- switch( decoder.getDecoderType() )
+ switch( decoderState.getDecoderType() )
{
case AM:
- return new AMDecoderPanel( settingsManager, (AMDecoder)decoder );
+ return new AMDecoderPanel( settingsManager, decoderState );
case FLEETSYNC2:
- return new Fleetsync2DecoderPanel( settingsManager, (Fleetsync2Decoder)decoder );
+ return new Fleetsync2DecoderPanel( settingsManager,
+ (Fleetsync2DecoderState)decoderState );
case LJ_1200:
- return new LJ1200DecoderPanel( settingsManager, (LJ1200Decoder)decoder );
+ return new LJ1200DecoderPanel( settingsManager,
+ (LJ1200DecoderState)decoderState );
case LTR_NET:
- return new LTRNetDecoderPanel( settingsManager, (LTRNetDecoder)decoder );
+ return new LTRNetDecoderPanel( settingsManager,
+ (LTRNetDecoderState)decoderState );
case LTR_STANDARD:
- return new LTRStandardDecoderPanel( settingsManager, (LTRStandardDecoder)decoder );
+ return new LTRStandardDecoderPanel( settingsManager,
+ (LTRStandardDecoderState)decoderState );
case MDC1200:
- return new MDCDecoderPanel( settingsManager, (MDCDecoder)decoder );
+ return new MDCDecoderPanel( settingsManager,
+ (MDCDecoderState)decoderState );
case MPT1327:
- return new MPT1327DecoderPanel( settingsManager, (MPT1327Decoder)decoder );
+ return new MPT1327DecoderPanel( settingsManager,
+ (MPT1327DecoderState)decoderState );
case NBFM:
- return new NBFMDecoderPanel( settingsManager, decoder );
+ return new NBFMDecoderPanel( settingsManager, decoderState );
case P25_PHASE1:
- return new P25DecoderPanel( settingsManager, (P25Decoder)decoder );
+ return new P25DecoderPanel( settingsManager,
+ (P25DecoderState)decoderState );
case PASSPORT:
- return new PassportDecoderPanel( settingsManager, (PassportDecoder)decoder );
+ return new PassportDecoderPanel( settingsManager,
+ (PassportDecoderState)decoderState );
case TAIT_1200:
- return new Tait1200DecoderPanel( settingsManager, (Tait1200Decoder)decoder );
+ return new Tait1200DecoderPanel( settingsManager,
+ (Tait1200DecoderState)decoderState );
default:
throw new IllegalArgumentException( "Unrecognized decoder: " +
- decoder.getDecoderType().getDisplayString() );
+ decoderState.getDecoderType().getDisplayString() );
}
}
diff --git a/src/module/decode/PrimaryDecoder.java b/src/module/decode/PrimaryDecoder.java
index fa7f2c10..03380594 100644
--- a/src/module/decode/PrimaryDecoder.java
+++ b/src/module/decode/PrimaryDecoder.java
@@ -19,7 +19,6 @@
package module.decode;
import module.decode.config.DecodeConfiguration;
-import module.decode.state.DecoderState;
import sample.Listener;
import audio.squelch.ISquelchStateProvider;
import audio.squelch.SquelchState;
@@ -36,10 +35,8 @@ public abstract class PrimaryDecoder extends Decoder implements ISquelchStatePro
protected DecodeConfiguration mDecodeConfiguration;
- public PrimaryDecoder( DecodeConfiguration config, DecoderState decoderState )
+ public PrimaryDecoder( DecodeConfiguration config )
{
- super( decoderState );
-
mDecodeConfiguration = config;
}
diff --git a/src/module/decode/am/AMDecoder.java b/src/module/decode/am/AMDecoder.java
index e736215e..abb99314 100644
--- a/src/module/decode/am/AMDecoder.java
+++ b/src/module/decode/am/AMDecoder.java
@@ -21,18 +21,34 @@ package module.decode.am;
import module.decode.DecoderType;
import module.decode.PrimaryDecoder;
import module.decode.config.DecodeConfiguration;
-import module.decode.state.AlwaysUnsquelchedDecoderState;
public class AMDecoder extends PrimaryDecoder
{
public AMDecoder( DecodeConfiguration config )
{
- super( config, new AlwaysUnsquelchedDecoderState( "AM" ) );
+ super( config );
+
+ //TODO: wire in the am decoder pieces
}
@Override
public DecoderType getDecoderType()
{
- return DecoderType.NBFM;
+ return DecoderType.AM;
}
+
+ @Override
+ public void reset()
+ {
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
}
diff --git a/src/module/decode/am/AMDecoderPanel.java b/src/module/decode/am/AMDecoderPanel.java
index 1bb4f220..0e97505e 100644
--- a/src/module/decode/am/AMDecoderPanel.java
+++ b/src/module/decode/am/AMDecoderPanel.java
@@ -21,6 +21,7 @@ import javax.swing.JLabel;
import module.decode.state.ChangedAttribute;
import module.decode.state.DecoderPanel;
+import module.decode.state.DecoderState;
import settings.ColorSetting;
import settings.Setting;
import settings.SettingsManager;
@@ -31,9 +32,9 @@ public class AMDecoderPanel extends DecoderPanel
private JLabel mProtocol = new JLabel( "AM" );
- public AMDecoderPanel( SettingsManager settingsManager, AMDecoder decoder )
+ public AMDecoderPanel( SettingsManager settingsManager, DecoderState decoderState )
{
- super( settingsManager, decoder );
+ super( settingsManager, decoderState );
init();
}
diff --git a/src/module/decode/event/ICallEventProvider.java b/src/module/decode/event/ICallEventProvider.java
index f8645d36..d4b3ae2b 100644
--- a/src/module/decode/event/ICallEventProvider.java
+++ b/src/module/decode/event/ICallEventProvider.java
@@ -4,6 +4,6 @@ import sample.Listener;
public interface ICallEventProvider
{
- public void setCallEventListener( Listener listener );
- public void removeCallEventListener();
+ public void addCallEventListener( Listener listener );
+ public void removeCallEventListener( Listener listener );
}
diff --git a/src/module/decode/fleetsync2/Fleetsync2Decoder.java b/src/module/decode/fleetsync2/Fleetsync2Decoder.java
index e9f04fde..1425983a 100644
--- a/src/module/decode/fleetsync2/Fleetsync2Decoder.java
+++ b/src/module/decode/fleetsync2/Fleetsync2Decoder.java
@@ -71,8 +71,6 @@ public class Fleetsync2Decoder extends Decoder implements IRealBufferListener,
public Fleetsync2Decoder( AliasList aliasList )
{
- super( new FleetsyncDecoderState( aliasList ) );
-
mDecimationFilter = new HalfBandFilter_RB_RB(
Filters.FIR_HALF_BAND_31T_ONE_EIGHTH_FCO.getCoefficients(), 1.0f, true );
@@ -101,7 +99,6 @@ public class Fleetsync2Decoder extends Decoder implements IRealBufferListener,
mBandPassFilter.dispose();
mDecimationFilter.dispose();
- mDecoderState.dispose();
mFSKDecoder.dispose();
mMessageFramer.dispose();
mMessageProcessor.dispose();
@@ -176,4 +173,19 @@ public class Fleetsync2Decoder extends Decoder implements IRealBufferListener,
{
return mDecimationFilter;
}
+
+ @Override
+ public void reset()
+ {
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
}
diff --git a/src/module/decode/fleetsync2/Fleetsync2DecoderPanel.java b/src/module/decode/fleetsync2/Fleetsync2DecoderPanel.java
index 79ac23db..e800717e 100644
--- a/src/module/decode/fleetsync2/Fleetsync2DecoderPanel.java
+++ b/src/module/decode/fleetsync2/Fleetsync2DecoderPanel.java
@@ -20,16 +20,14 @@ package module.decode.fleetsync2;
import java.awt.EventQueue;
import javax.swing.JLabel;
-import javax.swing.JSeparator;
+
+import module.decode.state.ChangedAttribute;
+import module.decode.state.DecoderPanel;
+import net.miginfocom.swing.MigLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import alias.Alias;
-import module.decode.DecoderFactory;
-import module.decode.state.ChangedAttribute;
-import module.decode.state.DecoderPanel;
-import net.miginfocom.swing.MigLayout;
import settings.ColorSetting;
import settings.ColorSetting.ColorSettingName;
import settings.Setting;
@@ -55,16 +53,17 @@ public class Fleetsync2DecoderPanel extends DecoderPanel
private JLabel mMessageType = new JLabel( " " );
public Fleetsync2DecoderPanel( SettingsManager settingsManager,
- Fleetsync2Decoder decoder )
+ Fleetsync2DecoderState decoderState )
{
- super( settingsManager, decoder );
+ super( settingsManager, decoderState );
init();
}
-
- private FleetsyncDecoderState getState()
+
+ @Override
+ public Fleetsync2DecoderState getDecoderState()
{
- return (FleetsyncDecoderState)mDecoder.getDecoderState();
+ return (Fleetsync2DecoderState)super.getDecoderState();
}
public void dispose()
@@ -128,7 +127,7 @@ public class Fleetsync2DecoderPanel extends DecoderPanel
switch( changedAttribute )
{
case FROM_TALKGROUP:
- String from = getState().getFromID();
+ String from = getDecoderState().getFromID();
if( from != null )
{
@@ -142,16 +141,16 @@ public class Fleetsync2DecoderPanel extends DecoderPanel
}
break;
case FROM_TALKGROUP_ALIAS:
- setAliasLabel( mFromAlias, getState().getFromIDAlias() );
+ setAliasLabel( mFromAlias, getDecoderState().getFromIDAlias() );
break;
case MESSAGE:
- mMessage.setText( getState().getMessage() );
+ mMessage.setText( getDecoderState().getMessage() );
break;
case MESSAGE_TYPE:
- mMessageType.setText( getState().getMessageType() );
+ mMessageType.setText( getDecoderState().getMessageType() );
break;
case TO_TALKGROUP:
- String to = getState().getToID();
+ String to = getDecoderState().getToID();
if( to != null )
{
@@ -165,7 +164,7 @@ public class Fleetsync2DecoderPanel extends DecoderPanel
}
break;
case TO_TALKGROUP_ALIAS:
- setAliasLabel( mToAlias, getState().getToIDAlias() );
+ setAliasLabel( mToAlias, getDecoderState().getToIDAlias() );
break;
default:
break;
diff --git a/src/module/decode/fleetsync2/FleetsyncDecoderState.java b/src/module/decode/fleetsync2/Fleetsync2DecoderState.java
similarity index 95%
rename from src/module/decode/fleetsync2/FleetsyncDecoderState.java
rename to src/module/decode/fleetsync2/Fleetsync2DecoderState.java
index b52c037e..7dfe923a 100644
--- a/src/module/decode/fleetsync2/FleetsyncDecoderState.java
+++ b/src/module/decode/fleetsync2/Fleetsync2DecoderState.java
@@ -21,6 +21,7 @@ import java.util.Iterator;
import java.util.TreeSet;
import message.Message;
+import module.decode.DecoderType;
import module.decode.state.ChangedAttribute;
import module.decode.state.DecoderState;
import module.decode.state.DecoderStateEvent;
@@ -29,7 +30,7 @@ import module.decode.state.State;
import alias.Alias;
import alias.AliasList;
-public class FleetsyncDecoderState extends DecoderState
+public class Fleetsync2DecoderState extends DecoderState
{
private TreeSet mIdents = new TreeSet();
private TreeSet mEmergencyIdents = new TreeSet();
@@ -43,11 +44,27 @@ public class FleetsyncDecoderState extends DecoderState
private String mMessage;
private String mMessageType;
- public FleetsyncDecoderState( AliasList aliasList )
+ public Fleetsync2DecoderState( AliasList aliasList )
{
super( aliasList );
}
+ @Override
+ public DecoderType getDecoderType()
+ {
+ return DecoderType.FLEETSYNC2;
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
+
@Override
public void dispose()
{
@@ -57,7 +74,6 @@ public class FleetsyncDecoderState extends DecoderState
@Override
public void init()
{
-
}
/**
diff --git a/src/module/decode/lj1200/LJ1200Decoder.java b/src/module/decode/lj1200/LJ1200Decoder.java
index b66ca470..57297d57 100644
--- a/src/module/decode/lj1200/LJ1200Decoder.java
+++ b/src/module/decode/lj1200/LJ1200Decoder.java
@@ -77,8 +77,6 @@ public class LJ1200Decoder extends Decoder implements IRealBufferListener,
public LJ1200Decoder( AliasList aliasList )
{
- super( new LJ1200DecoderState( aliasList ) );
-
mDecimationFilter = new HalfBandFilter_RB_RB(
Filters.FIR_HALF_BAND_31T_ONE_EIGHTH_FCO.getCoefficients(), 1.0f, true );
@@ -193,4 +191,19 @@ public class LJ1200Decoder extends Decoder implements IRealBufferListener,
{
return mDecimationFilter;
}
+
+ @Override
+ public void reset()
+ {
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
}
diff --git a/src/module/decode/lj1200/LJ1200DecoderPanel.java b/src/module/decode/lj1200/LJ1200DecoderPanel.java
index 241b1810..600a79c3 100644
--- a/src/module/decode/lj1200/LJ1200DecoderPanel.java
+++ b/src/module/decode/lj1200/LJ1200DecoderPanel.java
@@ -37,9 +37,9 @@ public class LJ1200DecoderPanel extends DecoderPanel
private JLabel mTo = new JLabel();
private JLabel mToAlias = new JLabel();
- public LJ1200DecoderPanel( SettingsManager settingsManager, LJ1200Decoder decoder )
+ public LJ1200DecoderPanel( SettingsManager settingsManager, LJ1200DecoderState decoderState )
{
- super( settingsManager, decoder );
+ super( settingsManager, decoderState );
init();
}
@@ -62,9 +62,9 @@ public class LJ1200DecoderPanel extends DecoderPanel
add( mToAlias, "wrap" );
}
- private LJ1200DecoderState getState()
+ public LJ1200DecoderState getDecoderState()
{
- return (LJ1200DecoderState)getDecoder().getDecoderState();
+ return (LJ1200DecoderState)super.getDecoderState();
}
@Override
@@ -73,11 +73,11 @@ public class LJ1200DecoderPanel extends DecoderPanel
switch( changedAttribute )
{
case TO_TALKGROUP:
- mTo.setText( getState().getAddress() );
+ mTo.setText( getDecoderState().getAddress() );
repaint();
break;
case FROM_TALKGROUP_ALIAS:
- Alias alias = getState().getAddressAlias();
+ Alias alias = getDecoderState().getAddressAlias();
if( alias != null )
{
diff --git a/src/module/decode/lj1200/LJ1200DecoderState.java b/src/module/decode/lj1200/LJ1200DecoderState.java
index 3c3ab3c6..8ec26f0f 100644
--- a/src/module/decode/lj1200/LJ1200DecoderState.java
+++ b/src/module/decode/lj1200/LJ1200DecoderState.java
@@ -24,6 +24,7 @@ import java.util.Set;
import java.util.TreeSet;
import message.Message;
+import module.decode.DecoderType;
import module.decode.state.ChangedAttribute;
import module.decode.state.DecoderState;
import module.decode.state.DecoderStateEvent;
@@ -44,6 +45,22 @@ public class LJ1200DecoderState extends DecoderState
super( aliasList );
}
+ @Override
+ public DecoderType getDecoderType()
+ {
+ return DecoderType.LJ_1200;
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
+
public String getAddress()
{
return mAddress;
diff --git a/src/module/decode/ltrnet/LTRCallEvent.java b/src/module/decode/ltrnet/LTRCallEvent.java
index bfd1b8ed..fb33d80e 100644
--- a/src/module/decode/ltrnet/LTRCallEvent.java
+++ b/src/module/decode/ltrnet/LTRCallEvent.java
@@ -29,16 +29,16 @@ public class LTRCallEvent extends CallEvent
private long mFrequency;
private int mValidCallMessages = 1;
- public LTRCallEvent( CallEventType callEventType,
- AliasList aliasList,
- String fromID,
- String toID,
- String channel,
- long frequency,
- String details )
+ public LTRCallEvent( DecoderType type,
+ CallEventType callEventType,
+ AliasList aliasList,
+ String fromID,
+ String toID,
+ String channel,
+ long frequency,
+ String details )
{
- super( DecoderType.LTR_STANDARD, callEventType,
- aliasList, fromID, toID, details );
+ super( type, callEventType, aliasList, fromID, toID, details );
mChannel = channel;
mFrequency = frequency;
@@ -163,6 +163,7 @@ public class LTRCallEvent extends CallEvent
public static class Builder
{
/* Required parameters */
+ private DecoderType mDecoderType;
private CallEventType mCallEventType;
/* Optional parameters */
@@ -173,8 +174,9 @@ public class LTRCallEvent extends CallEvent
private String mChannel;
private long mFrequency;
- public Builder( CallEventType callEventType )
+ public Builder( DecoderType decoderType, CallEventType callEventType )
{
+ mDecoderType = decoderType;
mCallEventType = callEventType;
}
@@ -226,7 +228,8 @@ public class LTRCallEvent extends CallEvent
*/
private LTRCallEvent( Builder builder )
{
- this( builder.mCallEventType,
+ this( builder.mDecoderType,
+ builder.mCallEventType,
builder.mAliasList,
builder.mFromID,
builder.mToID,
diff --git a/src/module/decode/ltrnet/LTRNetDecoder.java b/src/module/decode/ltrnet/LTRNetDecoder.java
index 0852be4a..54e4f0e2 100644
--- a/src/module/decode/ltrnet/LTRNetDecoder.java
+++ b/src/module/decode/ltrnet/LTRNetDecoder.java
@@ -35,8 +35,7 @@ import bits.MessageFramer;
import bits.SyncPattern;
import dsp.fsk.LTRFSKDecoder;
-public class LTRNetDecoder extends Decoder
- implements IRealBufferListener, Instrumentable
+public class LTRNetDecoder extends Decoder implements IRealBufferListener, Instrumentable
{
public static final int LTR_STANDARD_MESSAGE_LENGTH = 40;
private LTRFSKDecoder mLTRFSKDecoder;
@@ -47,8 +46,6 @@ public class LTRNetDecoder extends Decoder
public LTRNetDecoder( DecodeConfigLTRNet config, AliasList aliasList )
{
- super( new LTRNetDecoderState( aliasList ) );
-
mLTRFSKDecoder = new LTRFSKDecoder();
@@ -111,4 +108,19 @@ public class LTRNetDecoder extends Decoder
{
mLTRFSKDecoder.unregisterTap( tap );
}
+
+ @Override
+ public void reset()
+ {
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
}
diff --git a/src/module/decode/ltrnet/LTRNetDecoderPanel.java b/src/module/decode/ltrnet/LTRNetDecoderPanel.java
index b68162e1..aaafc6b5 100644
--- a/src/module/decode/ltrnet/LTRNetDecoderPanel.java
+++ b/src/module/decode/ltrnet/LTRNetDecoderPanel.java
@@ -21,9 +21,9 @@ import java.awt.EventQueue;
import javax.swing.JLabel;
-import net.miginfocom.swing.MigLayout;
import module.decode.state.ChangedAttribute;
import module.decode.state.DecoderPanel;
+import net.miginfocom.swing.MigLayout;
import settings.ColorSetting;
import settings.Setting;
import settings.SettingsManager;
@@ -40,9 +40,10 @@ public class LTRNetDecoderPanel extends DecoderPanel
private JLabel mLCN = new JLabel( "LCN:" );
private JLabel mDescription = new JLabel();
- public LTRNetDecoderPanel( SettingsManager settingsManager, LTRNetDecoder decoder )
+ public LTRNetDecoderPanel( SettingsManager settingsManager,
+ LTRNetDecoderState decoderState )
{
- super( settingsManager, decoder );
+ super( settingsManager, decoderState );
init();
}
@@ -73,12 +74,12 @@ public class LTRNetDecoderPanel extends DecoderPanel
add( mTalkgroupAlias, "wrap" );
add( mLCN );
- add( mDescription, "span,wrap" );
+ add( mDescription, "span" );
}
- private LTRNetDecoderState getDecoderState()
+ public LTRNetDecoderState getDecoderState()
{
- return (LTRNetDecoderState)getDecoder().getDecoderState();
+ return (LTRNetDecoderState)super.getDecoderState();
}
@Override
diff --git a/src/module/decode/ltrnet/LTRNetDecoderState.java b/src/module/decode/ltrnet/LTRNetDecoderState.java
index aa84e683..7f66d5fc 100644
--- a/src/module/decode/ltrnet/LTRNetDecoderState.java
+++ b/src/module/decode/ltrnet/LTRNetDecoderState.java
@@ -22,19 +22,23 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.TreeSet;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import message.Message;
+import module.decode.DecoderType;
+import module.decode.event.CallEvent;
import module.decode.event.CallEvent.CallEventType;
-import module.decode.mpt1327.MPT1327DecoderState;
import module.decode.state.ChangedAttribute;
import module.decode.state.DecoderState;
import module.decode.state.DecoderStateEvent;
import module.decode.state.DecoderStateEvent.Event;
import module.decode.state.State;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import alias.Alias;
import alias.AliasList;
+import audio.metadata.Metadata;
+import audio.metadata.MetadataType;
public class LTRNetDecoderState extends DecoderState
{
@@ -64,31 +68,74 @@ public class LTRNetDecoderState extends DecoderState
{
super( aliasList );
}
+
+ @Override
+ public DecoderType getDecoderType()
+ {
+ return DecoderType.LTR_NET;
+ }
@Override
public void receive( Message message )
{
if( message.isValid() )
{
+ State state = State.IDLE;
+
if( message instanceof LTRNetOSWMessage )
{
LTRNetOSWMessage ltr = (LTRNetOSWMessage)message;
switch( ltr.getMessageType() )
{
- case CA_STRT:
case CA_ENDD:
if( mChannelNumber == 0 )
{
mChannelNumber = ltr.getChannel();
broadcast( ChangedAttribute.CHANNEL_NUMBER );
}
-
- if( ltr.getChannel() == 31 )
+
+ /* Process FCC Station ID Events */
+ if( ltr.getGroup() == 254 )
+ {
+ if( mCurrentCallEvent == null ||
+ mCurrentCallEvent.getCallEventType() !=
+ CallEventType.STATION_ID )
+ {
+ mCurrentCallEvent = new LTRCallEvent.Builder(
+ DecoderType.LTR_NET, CallEventType.STATION_ID )
+ .aliasList( getAliasList() )
+ .channel( String.valueOf( mChannelNumber ) )
+ .frequency( mFrequency )
+ .to( ltr.getTalkgroupID() )
+ .build();
+
+ broadcast( mCurrentCallEvent );
+
+ broadcast( new DecoderStateEvent( this,
+ Event.START, State.DATA ) );
+ }
+ else
+ {
+ broadcast( new DecoderStateEvent( this,
+ Event.CONTINUATION, State.DATA ) );
+ }
+ }
+ else
{
processCallEndMessage( ltr );
}
- else if( ltr.getChannel() == mChannelNumber )
+ break;
+ case CA_STRT:
+ if( mChannelNumber == 0 )
+ {
+ mChannelNumber = ltr.getChannel();
+ broadcast( ChangedAttribute.CHANNEL_NUMBER );
+ }
+
+ /* If the call event channel matches our current channel
+ * then it's a call, otherwise it's a call detect. */
+ if( ltr.getChannel() == mChannelNumber )
{
processCallMessage( ltr );
}
@@ -96,6 +143,7 @@ public class LTRNetDecoderState extends DecoderState
{
processCallDetectMessage( ltr );
}
+
break;
case SY_IDLE:
if( mChannelNumber != ltr.getChannel() )
@@ -133,6 +181,8 @@ public class LTRNetDecoderState extends DecoderState
}
break;
case ID_UNIQ:
+ state = State.DATA;
+
int uniqueID = ltr.getRadioUniqueID();
if( uniqueID != LTRNetOSWMessage.INT_NULL_VALUE )
@@ -142,7 +192,8 @@ public class LTRNetDecoderState extends DecoderState
if( getCurrentLTRCallEvent() == null )
{
- mCurrentCallEvent = new LTRCallEvent.Builder( CallEventType.REGISTER )
+ mCurrentCallEvent = new LTRCallEvent.Builder(
+ DecoderType.LTR_NET, CallEventType.REGISTER )
.aliasList( getAliasList() )
.channel( String.valueOf( mChannelNumber ) )
.frequency( mFrequency )
@@ -190,6 +241,8 @@ public class LTRNetDecoderState extends DecoderState
break;
case ID_ESNH:
case ID_ESNL:
+ state = State.DATA;
+
String esn = ltr.getESN();
if( !esn.contains( "xxxx" ) )
@@ -210,7 +263,8 @@ public class LTRNetDecoderState extends DecoderState
if( mCurrentCallEvent == null )
{
- mCurrentCallEvent = new LTRCallEvent.Builder( CallEventType.REGISTER_ESN )
+ mCurrentCallEvent = new LTRCallEvent.Builder(
+ DecoderType.LTR_NET, CallEventType.REGISTER_ESN )
.aliasList( getAliasList() )
.details( "ESN:" + ltr.getESN() )
.frequency( mFrequency )
@@ -222,6 +276,8 @@ public class LTRNetDecoderState extends DecoderState
break;
case ID_UNIQ:
+ state = State.DATA;
+
int uniqueid = ltr.getRadioUniqueID();
if( uniqueid != LTRNetISWMessage.INT_NULL_VALUE )
@@ -239,7 +295,8 @@ public class LTRNetDecoderState extends DecoderState
if( getCurrentLTRCallEvent() == null )
{
- mCurrentCallEvent = new LTRCallEvent.Builder( CallEventType.REGISTER )
+ mCurrentCallEvent = new LTRCallEvent.Builder(
+ DecoderType.LTR_NET, CallEventType.REGISTER )
.aliasList( getAliasList() )
.channel( String.valueOf( mChannelNumber ) )
.frequency( mFrequency )
@@ -525,88 +582,81 @@ public class LTRNetDecoderState extends DecoderState
frequency = mTransmitFrequencies.get( channel );
}
- broadcast( new LTRCallEvent.Builder( CallEventType.CALL_DETECT )
+ broadcast( new LTRCallEvent.Builder( DecoderType.LTR_NET, CallEventType.CALL_DETECT )
.aliasList( getAliasList() )
.channel( String.valueOf( message.getChannel() ) )
.frequency( frequency )
.to( message.getTalkgroupID() )
.build() );
}
+
+ broadcast( new DecoderStateEvent( this, Event.CONTINUATION, State.IDLE ) );
}
private void processCallMessage( LTRNetMessage message )
{
- mLog.debug( "Processing Call Message [" + message.getMessage() + "]" );
- LTRCallEvent current = getCurrentLTRCallEvent();
-
int group = message.getGroup();
- /* If this is a new call or the talkgroup is different from the current
- * call, create a new call event */
- if( current == null || !current.isMatchingTalkgroup( message ) )
+ /* Process call registration */
+ if( group == 253 )
{
- /* Invalidate the current call */
- if( current != null )
- {
- current.setValid( false );
- broadcast( current );
- }
-
- mTalkgroup = message.getTalkgroupID();
- broadcast( ChangedAttribute.TO_TALKGROUP );
-
- /* A talkgroup must be seen at least once before it will be added
- * to the mTalkgroups list that is used in the activity summary,
- * so that we don't pollute the summary with one-off error talkgroups */
- if( mTalkgroupsFirstHeard.contains( mTalkgroup ) )
- {
- mTalkgroups.add( mTalkgroup );
- }
- else
- {
- mTalkgroupsFirstHeard.add( mTalkgroup );
- }
-
- mTalkgroupAlias = message.getTalkgroupIDAlias();
- broadcast( ChangedAttribute.TO_TALKGROUP_ALIAS );
-
- CallEventType type = CallEventType.CALL;
-
- if( group == 253 )
- {
- type = CallEventType.REGISTER;
-
- mDescription = "REGISTER";
- broadcast( ChangedAttribute.DESCRIPTION );
- }
- else if( group == 254 )
- {
- type = CallEventType.STATION_ID;
-
- mDescription = "STATION ID";
- broadcast( ChangedAttribute.DESCRIPTION );
- }
-
- mCurrentCallEvent = new LTRCallEvent.Builder( type )
- .aliasList( getAliasList() )
- .channel( String.valueOf( message.getChannel() ) )
- .frequency( mFrequency )
- .to( message.getTalkgroupID() )
- .build();
-
- broadcast( mCurrentCallEvent );
-
- mLog.debug( "Decoder State: Call Start" );
-
- broadcast( new DecoderStateEvent( this, Event.START,
- ( type == CallEventType.CALL ) ? State.CALL : State.DATA ) );
+ broadcast( new DecoderStateEvent( this, Event.START, State.DATA ) );
+ mDescription = "REGISTER";
+ broadcast( ChangedAttribute.DESCRIPTION );
}
+ /* Process call */
else
{
- mLog.debug( "Decoder State: Call Continuation Group:" + group );
+ String talkgroup = message.getTalkgroupID();
+
+ LTRCallEvent current = getCurrentLTRCallEvent();
- broadcast( new DecoderStateEvent( this, Event.CONTINUATION,
- ( group == 253 || group == 254 ) ? State.DATA : State.CALL ) );
+ /* If this is a new call or the talkgroup is different from the current
+ * call, create a new call event */
+ if( current == null || !current.getToID().contentEquals( talkgroup ) )
+ {
+ /* Invalidate the current call */
+ if( current != null )
+ {
+ current.setValid( false );
+ broadcast( current );
+ }
+
+ mTalkgroup = message.getTalkgroupID();
+ broadcast( ChangedAttribute.TO_TALKGROUP );
+
+ /* A talkgroup must be seen at least once before it will be added
+ * to the mTalkgroups list that is used in the activity summary,
+ * so that we don't pollute the summary with one-off error talkgroups */
+ if( mTalkgroupsFirstHeard.contains( mTalkgroup ) )
+ {
+ mTalkgroups.add( mTalkgroup );
+ }
+ else
+ {
+ mTalkgroupsFirstHeard.add( mTalkgroup );
+ }
+
+ mTalkgroupAlias = message.getTalkgroupIDAlias();
+ broadcast( ChangedAttribute.TO_TALKGROUP_ALIAS );
+
+ CallEvent callEvent = new LTRCallEvent.Builder( DecoderType.LTR_NET, CallEventType.CALL )
+ .aliasList( getAliasList() )
+ .channel( String.valueOf( message.getChannel() ) )
+ .frequency( mFrequency )
+ .to( message.getTalkgroupID() )
+ .build();
+
+ broadcast( callEvent );
+
+ mCurrentCallEvent = callEvent;
+
+ broadcast( new Metadata( MetadataType.TO, mTalkgroup, mTalkgroupAlias, true ) );
+
+ broadcast( new DecoderStateEvent( this, Event.START, State.CALL ) );
+ }
+
+ broadcast( new DecoderStateEvent( this, Event.CONTINUATION, State.CALL ) );
}
}
@@ -617,12 +667,10 @@ public class LTRNetDecoderState extends DecoderState
{
mCurrentCallEvent.setEnd( System.currentTimeMillis() );
broadcast( mCurrentCallEvent );
-
}
mCurrentCallEvent = null;
- mLog.debug( "Decoder State: Call End" );
broadcast( new DecoderStateEvent( this, Event.END, State.FADE ) );
}
@@ -653,7 +701,7 @@ public class LTRNetDecoderState extends DecoderState
if( mCurrentCallEvent != null && mCurrentCallEvent
.getCallEventType() == CallEventType.CALL )
{
- mCurrentCallEvent.setEnd( System.currentTimeMillis() );
+ mCurrentCallEvent.end();
broadcast( mCurrentCallEvent );
}
@@ -715,4 +763,14 @@ public class LTRNetDecoderState extends DecoderState
break;
}
}
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
}
diff --git a/src/module/decode/ltrstandard/LTRStandardDecoder.java b/src/module/decode/ltrstandard/LTRStandardDecoder.java
index 987af45b..4242c11f 100644
--- a/src/module/decode/ltrstandard/LTRStandardDecoder.java
+++ b/src/module/decode/ltrstandard/LTRStandardDecoder.java
@@ -39,8 +39,6 @@ public class LTRStandardDecoder extends Decoder implements IRealBufferListener
public LTRStandardDecoder( AliasList aliasList,
MessageDirection direction )
{
- super( new LTRStandardDecoderState( aliasList ) );
-
mLTRFSKDecoder = new LTRFSKDecoder();
if( direction == MessageDirection.OSW )
@@ -74,4 +72,19 @@ public class LTRStandardDecoder extends Decoder implements IRealBufferListener
{
return mLTRFSKDecoder;
}
+
+ @Override
+ public void reset()
+ {
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
}
diff --git a/src/module/decode/ltrstandard/LTRStandardDecoderPanel.java b/src/module/decode/ltrstandard/LTRStandardDecoderPanel.java
index a59048ca..08a0983b 100644
--- a/src/module/decode/ltrstandard/LTRStandardDecoderPanel.java
+++ b/src/module/decode/ltrstandard/LTRStandardDecoderPanel.java
@@ -38,9 +38,10 @@ public class LTRStandardDecoderPanel extends DecoderPanel
private JLabel mLCN = new JLabel( "LCN:" );
- public LTRStandardDecoderPanel( SettingsManager settingsManager, LTRStandardDecoder decoder )
+ public LTRStandardDecoderPanel( SettingsManager settingsManager,
+ LTRStandardDecoderState decoderState )
{
- super( settingsManager, decoder );
+ super( settingsManager, decoderState );
init();
}
@@ -71,9 +72,9 @@ public class LTRStandardDecoderPanel extends DecoderPanel
add( mLCN, "wrap" );
}
- private LTRStandardDecoderState getDecoderState()
+ public LTRStandardDecoderState getDecoderState()
{
- return (LTRStandardDecoderState)getDecoder().getDecoderState();
+ return (LTRStandardDecoderState)super.getDecoderState();
}
@Override
diff --git a/src/module/decode/ltrstandard/LTRStandardDecoderState.java b/src/module/decode/ltrstandard/LTRStandardDecoderState.java
index bfb26bcb..e6e1eeb9 100644
--- a/src/module/decode/ltrstandard/LTRStandardDecoderState.java
+++ b/src/module/decode/ltrstandard/LTRStandardDecoderState.java
@@ -25,6 +25,7 @@ import java.util.Iterator;
import java.util.TreeSet;
import message.Message;
+import module.decode.DecoderType;
import module.decode.event.CallEvent.CallEventType;
import module.decode.ltrnet.LTRCallEvent;
import module.decode.state.ChangedAttribute;
@@ -56,7 +57,23 @@ public class LTRStandardDecoderState extends DecoderState
{
super( aliasList );
}
-
+
+ @Override
+ public DecoderType getDecoderType()
+ {
+ return DecoderType.LTR_STANDARD;
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
+
private LTRCallEvent getCurrentCallEvent()
{
return (LTRCallEvent)mCurrentCallEvent;
@@ -109,7 +126,8 @@ public class LTRStandardDecoderState extends DecoderState
if( current == null )
{
mCurrentCallEvent =
- new LTRCallEvent.Builder( CallEventType.CALL )
+ new LTRCallEvent.Builder(
+ DecoderType.LTR_STANDARD, CallEventType.CALL )
.to( ltr.getTalkgroupID() )
.aliasList( getAliasList() )
.channel( String.valueOf( ltr.getChannel() ) )
diff --git a/src/module/decode/mdc1200/MDCDecoder.java b/src/module/decode/mdc1200/MDCDecoder.java
index cfffd4b6..86289146 100644
--- a/src/module/decode/mdc1200/MDCDecoder.java
+++ b/src/module/decode/mdc1200/MDCDecoder.java
@@ -76,8 +76,6 @@ public class MDCDecoder extends Decoder implements IRealBufferListener,
public MDCDecoder( AliasList aliasList )
{
- super( new MDCDecoderState( aliasList ) );
-
/* Decimation filter: 48000 / 2 = 24000 */
mDecimationFilter = new HalfBandFilter_RB_RB(
Filters.FIR_HALF_BAND_31T_ONE_EIGHTH_FCO.getCoefficients(), 1.0f, true );
@@ -203,4 +201,25 @@ public class MDCDecoder extends Decoder implements IRealBufferListener,
{
return mDecimationFilter;
}
+
+ @Override
+ public void reset()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void start()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void stop()
+ {
+ // TODO Auto-generated method stub
+
+ }
}
diff --git a/src/module/decode/mdc1200/MDCDecoderPanel.java b/src/module/decode/mdc1200/MDCDecoderPanel.java
index a1a718d1..acde5492 100644
--- a/src/module/decode/mdc1200/MDCDecoderPanel.java
+++ b/src/module/decode/mdc1200/MDCDecoderPanel.java
@@ -47,16 +47,17 @@ public class MDCDecoderPanel extends DecoderPanel
private JLabel mMessage = new JLabel();
private JLabel mMessageType = new JLabel();
- public MDCDecoderPanel( SettingsManager settingsManager, MDCDecoder decoder )
+ public MDCDecoderPanel( SettingsManager settingsManager,
+ MDCDecoderState decoderState )
{
- super( settingsManager, decoder );
+ super( settingsManager, decoderState );
init();
}
- public MDCDecoderState getState()
+ public MDCDecoderState getDecoderState()
{
- return (MDCDecoderState)getDecoder().getDecoderState();
+ return (MDCDecoderState)super.getDecoderState();
}
protected void init()
@@ -91,7 +92,7 @@ public class MDCDecoderPanel extends DecoderPanel
switch( changedAttribute )
{
case FROM_TALKGROUP:
- String from = getState().getFrom();
+ String from = getDecoderState().getFrom();
if( from != null )
{
@@ -104,7 +105,7 @@ public class MDCDecoderPanel extends DecoderPanel
mFrom.setText( from );
break;
case FROM_TALKGROUP_ALIAS:
- Alias fromAlias = getState().getFromAlias();
+ Alias fromAlias = getDecoderState().getFromAlias();
if( fromAlias != null )
{
@@ -116,7 +117,7 @@ public class MDCDecoderPanel extends DecoderPanel
}
break;
case TO_TALKGROUP:
- String to = getState().getTo();
+ String to = getDecoderState().getTo();
if( to != null )
{
@@ -129,7 +130,7 @@ public class MDCDecoderPanel extends DecoderPanel
mTo.setText( to );
break;
case TO_TALKGROUP_ALIAS:
- Alias toAlias = getState().getToAlias();
+ Alias toAlias = getDecoderState().getToAlias();
if( toAlias != null )
{
@@ -141,10 +142,10 @@ public class MDCDecoderPanel extends DecoderPanel
}
break;
case MESSAGE:
- mMessage.setText( getState().getMessage() );
+ mMessage.setText( getDecoderState().getMessage() );
break;
case MESSAGE_TYPE:
- mMessageType.setText( getState().getMessageType() );
+ mMessageType.setText( getDecoderState().getMessageType() );
break;
default:
break;
diff --git a/src/module/decode/mdc1200/MDCDecoderState.java b/src/module/decode/mdc1200/MDCDecoderState.java
index ea2823f0..f896a429 100644
--- a/src/module/decode/mdc1200/MDCDecoderState.java
+++ b/src/module/decode/mdc1200/MDCDecoderState.java
@@ -21,6 +21,7 @@ import java.util.Iterator;
import java.util.TreeSet;
import message.Message;
+import module.decode.DecoderType;
import module.decode.state.ChangedAttribute;
import module.decode.state.DecoderState;
import module.decode.state.DecoderStateEvent;
@@ -46,6 +47,22 @@ public class MDCDecoderState extends DecoderState
super( aliasList );
}
+ @Override
+ public DecoderType getDecoderType()
+ {
+ return DecoderType.MDC1200;
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
+
@Override
public void reset()
{
diff --git a/src/module/decode/mpt1327/MPT1327Decoder.java b/src/module/decode/mpt1327/MPT1327Decoder.java
index c0328070..6e154ca7 100644
--- a/src/module/decode/mpt1327/MPT1327Decoder.java
+++ b/src/module/decode/mpt1327/MPT1327Decoder.java
@@ -41,7 +41,6 @@ import alias.AliasList;
import bits.MessageFramer;
import bits.SyncPattern;
import controller.channel.Channel.ChannelType;
-import controller.channel.map.ChannelMap;
import dsp.filter.FilterFactory;
import dsp.filter.Filters;
import dsp.filter.Window.WindowType;
@@ -89,12 +88,8 @@ public class MPT1327Decoder extends Decoder
private MessageFramer mTrafficMessageFramer;
private MPT1327MessageProcessor mMessageProcessor;
- public MPT1327Decoder( ChannelMap channelMap,
- ChannelType channelType,
- AliasList aliasList,
- Sync sync )
+ public MPT1327Decoder( AliasList aliasList, Sync sync )
{
- super( new MPT1327DecoderState( aliasList, channelMap, channelType ) );
/* Decimation filter - 48000 / 2 = 24000 output */
mDecimationFilter = new HalfBandFilter_RB_RB(
@@ -303,4 +298,25 @@ public class MPT1327Decoder extends Decoder
return getLabel();
}
}
+
+ @Override
+ public void reset()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void start()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void stop()
+ {
+ // TODO Auto-generated method stub
+
+ }
}
diff --git a/src/module/decode/mpt1327/MPT1327DecoderPanel.java b/src/module/decode/mpt1327/MPT1327DecoderPanel.java
index c7ffc150..b94e150e 100644
--- a/src/module/decode/mpt1327/MPT1327DecoderPanel.java
+++ b/src/module/decode/mpt1327/MPT1327DecoderPanel.java
@@ -41,16 +41,17 @@ public class MPT1327DecoderPanel extends DecoderPanel
private JLabel mFromTalkgroup = new JLabel( "" );
private JLabel mFromTalkgroupAliasLabel = new JLabel( "" );
- public MPT1327DecoderPanel( SettingsManager settingsManager, MPT1327Decoder decoder )
+ public MPT1327DecoderPanel( SettingsManager settingsManager,
+ MPT1327DecoderState decoderState )
{
- super( settingsManager, decoder );
+ super( settingsManager, decoderState );
init();
}
- private MPT1327DecoderState getDecoderState()
+ public MPT1327DecoderState getDecoderState()
{
- return (MPT1327DecoderState)getDecoder().getDecoderState();
+ return (MPT1327DecoderState)super.getDecoderState();
}
public void dispose()
diff --git a/src/module/decode/mpt1327/MPT1327DecoderState.java b/src/module/decode/mpt1327/MPT1327DecoderState.java
index 6d44a744..1f4dac33 100644
--- a/src/module/decode/mpt1327/MPT1327DecoderState.java
+++ b/src/module/decode/mpt1327/MPT1327DecoderState.java
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.TreeSet;
import message.Message;
+import module.decode.DecoderType;
import module.decode.event.CallEvent;
import module.decode.event.CallEvent.CallEventType;
import module.decode.mpt1327.MPT1327Message.IdentType;
@@ -70,6 +71,22 @@ public class MPT1327DecoderState extends DecoderState
mChannelType = channelType;
}
+ @Override
+ public DecoderType getDecoderType()
+ {
+ return DecoderType.MPT1327;
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
+
public ChannelType getChannelType()
{
return mChannelType;
diff --git a/src/module/decode/mpt1327/MPT1327TrafficPanel.java b/src/module/decode/mpt1327/MPT1327TrafficPanel.java
index 527b35cf..6b120ba6 100644
--- a/src/module/decode/mpt1327/MPT1327TrafficPanel.java
+++ b/src/module/decode/mpt1327/MPT1327TrafficPanel.java
@@ -40,16 +40,16 @@ public class MPT1327TrafficPanel extends DecoderPanel
private JLabel mToTalkgroupLabel;
private JLabel mToTalkgroupAliasLabel;
- public MPT1327TrafficPanel( SettingsManager settingsManager, MPT1327Decoder decoder )
+ public MPT1327TrafficPanel( SettingsManager settingsManager, MPT1327DecoderState decoderState )
{
- super( settingsManager, decoder );
+ super( settingsManager, decoderState );
init();
}
- private MPT1327DecoderState getDecoderState()
+ public MPT1327DecoderState getDecoderState()
{
- return (MPT1327DecoderState)getDecoder().getDecoderState();
+ return (MPT1327DecoderState)super.getDecoderState();
}
public void dispose()
diff --git a/src/module/decode/nbfm/NBFMDecoder.java b/src/module/decode/nbfm/NBFMDecoder.java
index 6a90fb80..1e715288 100644
--- a/src/module/decode/nbfm/NBFMDecoder.java
+++ b/src/module/decode/nbfm/NBFMDecoder.java
@@ -20,13 +20,12 @@ package module.decode.nbfm;
import module.decode.DecoderType;
import module.decode.PrimaryDecoder;
import module.decode.config.DecodeConfiguration;
-import module.decode.state.AlwaysUnsquelchedDecoderState;
public class NBFMDecoder extends PrimaryDecoder
{
public NBFMDecoder( DecodeConfiguration config )
{
- super( config, new AlwaysUnsquelchedDecoderState( "NBFM" ) );
+ super( config );
}
@Override
@@ -34,4 +33,19 @@ public class NBFMDecoder extends PrimaryDecoder
{
return DecoderType.NBFM;
}
+
+ @Override
+ public void reset()
+ {
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
}
diff --git a/src/module/decode/nbfm/NBFMDecoderPanel.java b/src/module/decode/nbfm/NBFMDecoderPanel.java
index ab39d039..dfcaa600 100644
--- a/src/module/decode/nbfm/NBFMDecoderPanel.java
+++ b/src/module/decode/nbfm/NBFMDecoderPanel.java
@@ -19,14 +19,14 @@ package module.decode.nbfm;
import javax.swing.JLabel;
-import net.miginfocom.swing.MigLayout;
-import module.decode.Decoder;
import module.decode.state.ChangedAttribute;
import module.decode.state.DecoderPanel;
+import module.decode.state.DecoderState;
+import net.miginfocom.swing.MigLayout;
import settings.ColorSetting;
+import settings.ColorSetting.ColorSettingName;
import settings.Setting;
import settings.SettingsManager;
-import settings.ColorSetting.ColorSettingName;
public class NBFMDecoderPanel extends DecoderPanel
{
@@ -34,9 +34,10 @@ public class NBFMDecoderPanel extends DecoderPanel
private JLabel mProtocol = new JLabel( "NBFM" );
- public NBFMDecoderPanel( SettingsManager settingsManager, Decoder decoder )
+ public NBFMDecoderPanel( SettingsManager settingsManager,
+ DecoderState decoderState )
{
- super( settingsManager, decoder );
+ super( settingsManager, decoderState );
init();
}
diff --git a/src/module/decode/p25/P25Decoder.java b/src/module/decode/p25/P25Decoder.java
index da1ad452..674b00b9 100644
--- a/src/module/decode/p25/P25Decoder.java
+++ b/src/module/decode/p25/P25Decoder.java
@@ -5,17 +5,14 @@ import module.decode.Decoder;
import module.decode.DecoderType;
import source.tuner.frequency.IFrequencyCorrectionController;
import alias.AliasList;
-import controller.channel.Channel.ChannelType;
public abstract class P25Decoder extends Decoder
implements IFrequencyCorrectionController, Instrumentable
{
private P25MessageProcessor mMessageProcessor;
- public P25Decoder( AliasList aliasList, ChannelType channelType )
+ public P25Decoder( AliasList aliasList )
{
- super( new P25DecoderState( aliasList, channelType ) );
-
mMessageProcessor = new P25MessageProcessor( aliasList );
mMessageProcessor.setMessageListener( mMessageBroadcaster );
}
diff --git a/src/module/decode/p25/P25DecoderPanel.java b/src/module/decode/p25/P25DecoderPanel.java
index 36d4054b..70d4fff7 100644
--- a/src/module/decode/p25/P25DecoderPanel.java
+++ b/src/module/decode/p25/P25DecoderPanel.java
@@ -21,6 +21,7 @@ import java.awt.EventQueue;
import javax.swing.JLabel;
+import module.decode.p25.P25Decoder.Modulation;
import module.decode.state.ChangedAttribute;
import module.decode.state.DecoderPanel;
import net.miginfocom.swing.MigLayout;
@@ -46,11 +47,12 @@ public class P25DecoderPanel extends DecoderPanel
private JLabel mSiteAlias = new JLabel( "" );
- public P25DecoderPanel( SettingsManager settingsManager, P25Decoder decoder )
+ public P25DecoderPanel( SettingsManager settingsManager,
+ P25DecoderState decoderState )
{
- super( settingsManager, decoder );
+ super( settingsManager, decoderState );
- mProtocol = new JLabel( "P25-1 " + decoder.getModulation().getShortLabel() );
+ mProtocol = new JLabel( "P25-1 " + decoderState.getModulation().getShortLabel() );
init();
}
@@ -101,9 +103,9 @@ public class P25DecoderPanel extends DecoderPanel
add( mSiteAlias, "wrap" );
}
- private P25DecoderState getDecoderState()
+ public P25DecoderState getDecoderState()
{
- return (P25DecoderState)getDecoder().getDecoderState();
+ return (P25DecoderState)super.getDecoderState();
}
@Override
diff --git a/src/module/decode/p25/P25DecoderState.java b/src/module/decode/p25/P25DecoderState.java
index 570492f3..f510e2a6 100644
--- a/src/module/decode/p25/P25DecoderState.java
+++ b/src/module/decode/p25/P25DecoderState.java
@@ -26,8 +26,10 @@ import java.util.Set;
import java.util.TreeSet;
import message.Message;
+import module.decode.DecoderType;
import module.decode.event.CallEvent;
import module.decode.event.CallEvent.CallEventType;
+import module.decode.p25.P25Decoder.Modulation;
import module.decode.p25.message.IBandIdentifier;
import module.decode.p25.message.P25Message;
import module.decode.p25.message.hdu.HDUMessage;
@@ -169,14 +171,38 @@ public class P25DecoderState extends DecoderState
private P25CallEvent mCurrentCallEvent;
private ChannelType mChannelType;
+ private Modulation mModulation;
- public P25DecoderState( AliasList aliasList, ChannelType channelType )
+ public P25DecoderState( AliasList aliasList,
+ ChannelType channelType,
+ Modulation modulation )
{
super( aliasList );
-
mChannelType = channelType;
+ mModulation = modulation;
}
+ public Modulation getModulation()
+ {
+ return mModulation;
+ }
+
+ @Override
+ public DecoderType getDecoderType()
+ {
+ return DecoderType.P25_PHASE1;
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
+
/**
* Performs a full reset to prepare this object for reuse on a new channel
*/
diff --git a/src/module/decode/p25/P25_C4FMDecoder.java b/src/module/decode/p25/P25_C4FMDecoder.java
index 776eb8cd..75f1669b 100644
--- a/src/module/decode/p25/P25_C4FMDecoder.java
+++ b/src/module/decode/p25/P25_C4FMDecoder.java
@@ -34,7 +34,6 @@ import sample.real.IRealBufferListener;
import sample.real.RealBuffer;
import source.tuner.frequency.FrequencyCorrectionControl;
import alias.AliasList;
-import controller.channel.Channel.ChannelType;
import dsp.filter.FilterFactory;
import dsp.filter.Window.WindowType;
import dsp.filter.fir.real.RealFIRFilter_RB_RB;
@@ -70,9 +69,9 @@ public class P25_C4FMDecoder extends P25Decoder implements IRealBufferListener
* infrastructure and subscriber identities that will be included in each
* decoded message
*/
- public P25_C4FMDecoder( AliasList aliasList, ChannelType channelType )
+ public P25_C4FMDecoder( AliasList aliasList )
{
- super( aliasList, channelType );
+ super( aliasList );
/* Filter demodulated sample buffers */
mC4FMPreFilter = new RealFIRFilter_RB_RB( FilterFactory.getLowPass(
@@ -240,4 +239,25 @@ public class P25_C4FMDecoder extends P25Decoder implements IRealBufferListener
tap.getName() );
}
}
+
+ @Override
+ public void reset()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void start()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void stop()
+ {
+ // TODO Auto-generated method stub
+
+ }
}
diff --git a/src/module/decode/p25/P25_LSMDecoder.java b/src/module/decode/p25/P25_LSMDecoder.java
index ff1b49ac..af14b085 100644
--- a/src/module/decode/p25/P25_LSMDecoder.java
+++ b/src/module/decode/p25/P25_LSMDecoder.java
@@ -65,9 +65,9 @@ public class P25_LSMDecoder extends P25Decoder implements IComplexBufferListener
private QPSKPolarSlicer mCQPSKSlicer = new QPSKPolarSlicer();
private P25MessageFramer mMessageFramer;
- public P25_LSMDecoder( AliasList aliasList, ChannelType channelType )
+ public P25_LSMDecoder( AliasList aliasList )
{
- super( aliasList, channelType );
+ super( aliasList );
mBasebandFilter = new ComplexFIRFilter_CB_CB( FilterFactory.getLowPass(
48000, 7250, 8000, 60, WindowType.HANNING, true ), 1.0f );
@@ -229,4 +229,25 @@ public class P25_LSMDecoder extends P25Decoder implements IComplexBufferListener
tap.getName() );
}
}
+
+ @Override
+ public void reset()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void start()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void stop()
+ {
+ // TODO Auto-generated method stub
+
+ }
}
diff --git a/src/module/decode/passport/PassportDecoder.java b/src/module/decode/passport/PassportDecoder.java
index 8c73207b..011bea5d 100644
--- a/src/module/decode/passport/PassportDecoder.java
+++ b/src/module/decode/passport/PassportDecoder.java
@@ -50,8 +50,6 @@ public class PassportDecoder extends Decoder
public PassportDecoder( DecodeConfiguration config,
AliasList aliasList )
{
- super( new PassportDecoderState( aliasList ) );
-
mPassportFSKDecoder = new LTRFSKDecoder();
mPassportMessageFramer =
@@ -101,4 +99,25 @@ public class PassportDecoder extends Decoder
{
mPassportFSKDecoder.unregisterTap( tap );
}
+
+ @Override
+ public void reset()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void start()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void stop()
+ {
+ // TODO Auto-generated method stub
+
+ }
}
diff --git a/src/module/decode/passport/PassportDecoderPanel.java b/src/module/decode/passport/PassportDecoderPanel.java
index f06cebca..13d4d4db 100644
--- a/src/module/decode/passport/PassportDecoderPanel.java
+++ b/src/module/decode/passport/PassportDecoderPanel.java
@@ -40,9 +40,10 @@ public class PassportDecoderPanel extends DecoderPanel
private JLabel mFromTalkgroup = new JLabel();
private JLabel mFromTalkgroupAlias = new JLabel();
- public PassportDecoderPanel( SettingsManager settingsManager, PassportDecoder decoder )
+ public PassportDecoderPanel( SettingsManager settingsManager,
+ PassportDecoderState decoderState )
{
- super( settingsManager, decoder );
+ super( settingsManager, decoderState );
init();
}
@@ -81,9 +82,9 @@ public class PassportDecoderPanel extends DecoderPanel
add( mFromTalkgroupAlias, "wrap" );
}
- private PassportDecoderState getDecoderState()
+ public PassportDecoderState getDecoderState()
{
- return (PassportDecoderState)getDecoder().getDecoderState();
+ return (PassportDecoderState)super.getDecoderState();
}
@Override
diff --git a/src/module/decode/passport/PassportDecoderState.java b/src/module/decode/passport/PassportDecoderState.java
index 7ae3e81f..9ee07e59 100644
--- a/src/module/decode/passport/PassportDecoderState.java
+++ b/src/module/decode/passport/PassportDecoderState.java
@@ -26,6 +26,7 @@ import java.util.Iterator;
import java.util.TreeSet;
import message.Message;
+import module.decode.DecoderType;
import module.decode.state.ChangedAttribute;
import module.decode.state.DecoderState;
import module.decode.state.DecoderStateEvent;
@@ -65,6 +66,22 @@ public class PassportDecoderState extends DecoderState
}
@Override
+ public DecoderType getDecoderType()
+ {
+ return DecoderType.PASSPORT;
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
+
+ @Override
@SuppressWarnings( "incomplete-switch" )
public void receive( Message message )
{
diff --git a/src/module/decode/state/AlwaysUnsquelchedDecoderState.java b/src/module/decode/state/AlwaysUnsquelchedDecoderState.java
index 89b9578d..a93e1090 100644
--- a/src/module/decode/state/AlwaysUnsquelchedDecoderState.java
+++ b/src/module/decode/state/AlwaysUnsquelchedDecoderState.java
@@ -18,6 +18,7 @@
package module.decode.state;
import message.Message;
+import module.decode.DecoderType;
import module.decode.state.DecoderStateEvent.Event;
import org.slf4j.Logger;
@@ -32,21 +33,18 @@ public class AlwaysUnsquelchedDecoderState extends DecoderState
private final static Logger mLog =
LoggerFactory.getLogger( AlwaysUnsquelchedDecoderState.class );
- private String mProtocol;
+ private DecoderType mDecoderType;
- public AlwaysUnsquelchedDecoderState( String protocol )
+ public AlwaysUnsquelchedDecoderState( DecoderType decoderType )
{
super( null );
- mProtocol = protocol;
+ mDecoderType = decoderType;
}
@Override
public void init()
{
- mLog.debug( "init() - broadcasting unsquelch event" );
-
- broadcast( new DecoderStateEvent( this, Event.ALWAYS_UNSQUELCH, State.IDLE ) );
}
@Override
@@ -62,7 +60,7 @@ public class AlwaysUnsquelchedDecoderState extends DecoderState
sb.append( "Activity Summary\n" );
sb.append( "\tDecoder:\t" );
- sb.append( mProtocol );
+ sb.append( mDecoderType );
sb.append( "\n\n" );
return sb.toString();
@@ -79,4 +77,21 @@ public class AlwaysUnsquelchedDecoderState extends DecoderState
{
/* Not implemented */
}
+
+ @Override
+ public DecoderType getDecoderType()
+ {
+ return mDecoderType;
+ }
+
+ @Override
+ public void start()
+ {
+ broadcast( new DecoderStateEvent( this, Event.ALWAYS_UNSQUELCH, State.IDLE ) );
+ }
+
+ @Override
+ public void stop()
+ {
+ }
}
diff --git a/src/module/decode/state/ChannelCollectionPanel.java b/src/module/decode/state/ChannelCollectionPanel.java
index e7d74e0b..88704a3d 100644
--- a/src/module/decode/state/ChannelCollectionPanel.java
+++ b/src/module/decode/state/ChannelCollectionPanel.java
@@ -17,9 +17,9 @@ import settings.SettingsManager;
import controller.channel.Channel;
/**
- * Channel Collection assembles a primary channel panel and any related traffic
- * channel panels, provides contextual access to the primary channel and
- * supports channel selection for the primary or any traffic channels.
+ * Channel Collection assembles a primary channel panel and any related decoder
+ * state panels, provides contextual access to the channel and supports channel
+ * selection.
*/
public class ChannelCollectionPanel extends JPanel
{
diff --git a/src/module/decode/state/ChannelState.java b/src/module/decode/state/ChannelState.java
index f8454938..96bd25db 100644
--- a/src/module/decode/state/ChannelState.java
+++ b/src/module/decode/state/ChannelState.java
@@ -79,7 +79,7 @@ public class ChannelState extends Module implements ICallEventProvider,
private final static Logger mLog =
LoggerFactory.getLogger( ChannelState.class );
- public static final long FADE_TIMEOUT_DELAY = 1000;
+ public static final long FADE_TIMEOUT_DELAY = 1200;
public static final long RESET_TIMEOUT_DELAY = 2000;
private State mState = State.IDLE;
@@ -165,9 +165,7 @@ public class ChannelState extends Module implements ICallEventProvider,
private boolean isEndingState()
{
- return mState == State.IDLE ||
- mState == State.FADE ||
- mState == State.END;
+ return mState == State.FADE || mState == State.END;
}
@@ -391,13 +389,13 @@ public class ChannelState extends Module implements ICallEventProvider,
}
@Override
- public void setCallEventListener( Listener listener )
+ public void addCallEventListener( Listener listener )
{
mCallEventListener = listener;
}
@Override
- public void removeCallEventListener()
+ public void removeCallEventListener( Listener listener )
{
mCallEventListener = null;
}
diff --git a/src/module/decode/state/ChannelStatePanel.java b/src/module/decode/state/ChannelStatePanel.java
index 47c3b421..d3579520 100644
--- a/src/module/decode/state/ChannelStatePanel.java
+++ b/src/module/decode/state/ChannelStatePanel.java
@@ -103,9 +103,9 @@ public class ChannelStatePanel extends JPanel
init();
- for( Decoder decoder: getChannel().getProcessingChain().getDecoders() )
+ for( DecoderState decoderState: getChannel().getProcessingChain().getDecoderStates() )
{
- DecoderPanel panel = DecoderFactory.getDecoderPanel( mSettingsManager, decoder );
+ DecoderPanel panel = DecoderFactory.getDecoderPanel( mSettingsManager, decoderState );
mDecoderPanels.add( panel );
add( panel, "grow,span" );
}
@@ -447,9 +447,9 @@ public class ChannelStatePanel extends JPanel
{
StringBuilder sb = new StringBuilder();
- for( Decoder decoder: mChannel.getProcessingChain().getDecoders() )
+ for( DecoderState decoderState: mChannel.getProcessingChain().getDecoderStates() )
{
- sb.append( decoder.getDecoderState().getActivitySummary() );
+ sb.append( decoderState.getActivitySummary() );
}
new ActivitySummaryFrame( sb.toString(), ChannelStatePanel.this );
diff --git a/src/module/decode/state/DecoderPanel.java b/src/module/decode/state/DecoderPanel.java
index e15b4f43..04a0d0f1 100644
--- a/src/module/decode/state/DecoderPanel.java
+++ b/src/module/decode/state/DecoderPanel.java
@@ -23,14 +23,13 @@ import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.JPanel;
-import alias.Alias;
-import module.decode.Decoder;
import sample.Listener;
import settings.ColorSetting;
import settings.ColorSetting.ColorSettingName;
import settings.Setting;
import settings.SettingChangeListener;
import settings.SettingsManager;
+import alias.Alias;
public abstract class DecoderPanel extends JPanel
implements Listener, SettingChangeListener
@@ -47,16 +46,16 @@ public abstract class DecoderPanel extends JPanel
protected Color mColorLabelAuxDecoder;
protected SettingsManager mSettingsManager;
- protected Decoder mDecoder;
+ protected DecoderState mDecoderState;
- public DecoderPanel( SettingsManager settingsManager, Decoder decoder )
+ public DecoderPanel( SettingsManager settingsManager, DecoderState decoderState )
{
mSettingsManager = settingsManager;
mSettingsManager.addListener( this );
- mDecoder = decoder;
+ mDecoderState = decoderState;
- mDecoder.getDecoderState().setChangedAttributeListener( this );
+ mDecoderState.setChangedAttributeListener( this );
}
public void dispose()
@@ -64,13 +63,13 @@ public abstract class DecoderPanel extends JPanel
mSettingsManager.removeListener( this );
mSettingsManager = null;
- mDecoder.getDecoderState().removeChangedAttributeListener();
- mDecoder = null;
+ mDecoderState.removeChangedAttributeListener();
+ mDecoderState = null;
}
- public Decoder getDecoder()
+ public DecoderState getDecoderState()
{
- return mDecoder;
+ return mDecoderState;
}
protected void init()
diff --git a/src/module/decode/state/DecoderState.java b/src/module/decode/state/DecoderState.java
index 7540950d..693986df 100644
--- a/src/module/decode/state/DecoderState.java
+++ b/src/module/decode/state/DecoderState.java
@@ -1,11 +1,21 @@
package module.decode.state;
+import message.IMessageListener;
import message.Message;
+import module.Module;
+import module.decode.DecoderType;
import module.decode.event.ActivitySummaryProvider;
import module.decode.event.CallEvent;
import module.decode.event.ICallEventProvider;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import sample.Broadcaster;
import sample.Listener;
import alias.AliasList;
+import audio.metadata.IMetadataProvider;
+import audio.metadata.Metadata;
/**
* Channel state monitors the stream of decoded messages produced by the
@@ -13,16 +23,23 @@ import alias.AliasList;
*
* Provides access to a textual activity summary of events observed.
*/
-public abstract class DecoderState implements ActivitySummaryProvider,
- Listener,
- ICallEventProvider,
- IChangedAttributeProvider,
- IDecoderStateEventListener,
- IDecoderStateEventProvider
+public abstract class DecoderState extends Module
+ implements ActivitySummaryProvider,
+ Listener,
+ ICallEventProvider,
+ IChangedAttributeProvider,
+ IDecoderStateEventListener,
+ IDecoderStateEventProvider,
+ IMessageListener,
+ IMetadataProvider
{
- private Listener mCallEventListener;
+ private final static Logger mLog = LoggerFactory.getLogger( DecoderState.class );
+
+ /* This has to be a broadcaster in order for references to persist */
+ private Broadcaster mCallEventBroadcaster = new Broadcaster<>();
private Listener mChangedAttributeListener;
private Listener mDecoderStateListener;
+ private Listener mMetadataListener;
private DecoderStateEventListener mDecoderStateEventListener =
new DecoderStateEventListener();
@@ -36,6 +53,8 @@ public abstract class DecoderState implements ActivitySummaryProvider,
mAliasList = aliasList;
}
+ public abstract DecoderType getDecoderType();
+
public AliasList getAliasList()
{
return mAliasList;
@@ -69,9 +88,11 @@ public abstract class DecoderState implements ActivitySummaryProvider,
*/
public void dispose()
{
- mCallEventListener = null;
+ mCallEventBroadcaster.dispose();
+ mCallEventBroadcaster = null;
mChangedAttributeListener = null;
mDecoderStateListener = null;
+ mMetadataListener = null;
mAliasList = null;
}
@@ -86,28 +107,25 @@ public abstract class DecoderState implements ActivitySummaryProvider,
*/
protected void broadcast( CallEvent event )
{
- if( mCallEventListener != null )
- {
- mCallEventListener.receive( event );
- }
+ mCallEventBroadcaster.broadcast( event );
}
/**
* Adds a call event listener
*/
@Override
- public void setCallEventListener( Listener listener )
+ public void addCallEventListener( Listener listener )
{
- mCallEventListener = listener;
+ mCallEventBroadcaster.addListener( listener );
}
/**
* Removes the call event listener
*/
@Override
- public void removeCallEventListener()
+ public void removeCallEventListener( Listener listener )
{
- mCallEventListener = null;
+ mCallEventBroadcaster.removeListener( listener );
}
@Override
@@ -183,4 +201,33 @@ public abstract class DecoderState implements ActivitySummaryProvider,
{
mDecoderStateListener = null;
}
+
+ /**
+ * Broadcasts metadata to a registered listener
+ */
+ protected void broadcast( Metadata metadata )
+ {
+ if( mMetadataListener != null )
+ {
+ mMetadataListener.receive( metadata );
+ }
+ }
+
+ @Override
+ public void setMetadataListener( Listener listener )
+ {
+ mMetadataListener = listener;
+ }
+
+ @Override
+ public void removeMetadataListener()
+ {
+ mMetadataListener = null;
+ }
+
+ @Override
+ public Listener getMessageListener()
+ {
+ return this;
+ }
}
diff --git a/src/module/decode/state/DecoderStateEvent.java b/src/module/decode/state/DecoderStateEvent.java
index ae1a485e..19623bbc 100644
--- a/src/module/decode/state/DecoderStateEvent.java
+++ b/src/module/decode/state/DecoderStateEvent.java
@@ -21,6 +21,18 @@ public class DecoderStateEvent
mFrequency = frequency;
}
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( "Decoder State Event - source[" + mSource.getClass() +
+ "] event[" + mEvent.toString() +
+ "] state[" + mState.toString() +
+ "] frequency [" + mFrequency + "]" );
+
+ return sb.toString();
+ }
+
public Object getSource()
{
return mSource;
diff --git a/src/module/decode/state/TrafficChannelManager.java b/src/module/decode/state/TrafficChannelManager.java
index c551ce24..f6eca7ee 100644
--- a/src/module/decode/state/TrafficChannelManager.java
+++ b/src/module/decode/state/TrafficChannelManager.java
@@ -315,13 +315,13 @@ public class TrafficChannelManager extends Module
}
@Override
- public void setCallEventListener( Listener listener )
+ public void addCallEventListener( Listener listener )
{
mCallEventListener = listener;
}
@Override
- public void removeCallEventListener()
+ public void removeCallEventListener( Listener listener )
{
mCallEventListener = null;
}
diff --git a/src/module/decode/tait/Tait1200Decoder.java b/src/module/decode/tait/Tait1200Decoder.java
index ba2e5ec8..83ccf2aa 100644
--- a/src/module/decode/tait/Tait1200Decoder.java
+++ b/src/module/decode/tait/Tait1200Decoder.java
@@ -76,8 +76,6 @@ public class Tait1200Decoder extends Decoder implements IRealBufferListener,
public Tait1200Decoder( AliasList aliasList )
{
- super( new Tait1200DecoderState( aliasList ) );
-
mDecimationFilter = new HalfBandFilter_RB_RB(
Filters.FIR_HALF_BAND_31T_ONE_EIGHTH_FCO.getCoefficients(), 1.0002f, true );
@@ -191,4 +189,25 @@ public class Tait1200Decoder extends Decoder implements IRealBufferListener,
{
return DecoderType.TAIT_1200;
}
+
+ @Override
+ public void reset()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void start()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void stop()
+ {
+ // TODO Auto-generated method stub
+
+ }
}
diff --git a/src/module/decode/tait/Tait1200DecoderPanel.java b/src/module/decode/tait/Tait1200DecoderPanel.java
index 54bbb213..a03ec87e 100644
--- a/src/module/decode/tait/Tait1200DecoderPanel.java
+++ b/src/module/decode/tait/Tait1200DecoderPanel.java
@@ -47,9 +47,10 @@ public class Tait1200DecoderPanel extends DecoderPanel
private JLabel mMessage = new JLabel();
private JLabel mMessageType = new JLabel();
- public Tait1200DecoderPanel( SettingsManager settingsManager, Tait1200Decoder decoder )
+ public Tait1200DecoderPanel( SettingsManager settingsManager,
+ Tait1200DecoderState decoderState )
{
- super( settingsManager, decoder );
+ super( settingsManager, decoderState );
init();
}
@@ -59,9 +60,9 @@ public class Tait1200DecoderPanel extends DecoderPanel
super.dispose();
}
- public Tait1200DecoderState getState()
+ public Tait1200DecoderState getDecoderState()
{
- return (Tait1200DecoderState)getDecoder().getDecoderState();
+ return (Tait1200DecoderState)super.getDecoderState();
}
protected void init()
@@ -96,7 +97,7 @@ public class Tait1200DecoderPanel extends DecoderPanel
switch( changedAttribute )
{
case FROM_TALKGROUP:
- String from = getState().getFromID();
+ String from = getDecoderState().getFromID();
if( from != null )
{
@@ -109,7 +110,7 @@ public class Tait1200DecoderPanel extends DecoderPanel
mFrom.setText( from );
break;
case FROM_TALKGROUP_ALIAS:
- Alias fromAlias = getState().getFromIDAlias();
+ Alias fromAlias = getDecoderState().getFromIDAlias();
if( fromAlias != null )
{
@@ -117,7 +118,7 @@ public class Tait1200DecoderPanel extends DecoderPanel
}
break;
case TO_TALKGROUP:
- String to = getState().getToID();
+ String to = getDecoderState().getToID();
if( to != null )
{
@@ -130,7 +131,7 @@ public class Tait1200DecoderPanel extends DecoderPanel
mTo.setText( to );
break;
case TO_TALKGROUP_ALIAS:
- Alias toAlias = getState().getToIDAlias();
+ Alias toAlias = getDecoderState().getToIDAlias();
if( toAlias != null )
{
@@ -138,10 +139,10 @@ public class Tait1200DecoderPanel extends DecoderPanel
}
break;
case MESSAGE:
- mMessage.setText( getState().getMessage() );
+ mMessage.setText( getDecoderState().getMessage() );
break;
case MESSAGE_TYPE:
- mMessageType.setText( getState().getMessageType() );
+ mMessageType.setText( getDecoderState().getMessageType() );
break;
default:
break;
diff --git a/src/module/decode/tait/Tait1200DecoderState.java b/src/module/decode/tait/Tait1200DecoderState.java
index 7f0a8e71..f4790f38 100644
--- a/src/module/decode/tait/Tait1200DecoderState.java
+++ b/src/module/decode/tait/Tait1200DecoderState.java
@@ -25,6 +25,7 @@ import java.util.TreeSet;
import org.jdesktop.swingx.mapviewer.GeoPosition;
import message.Message;
+import module.decode.DecoderType;
import module.decode.state.ChangedAttribute;
import module.decode.state.DecoderState;
import module.decode.state.DecoderStateEvent;
@@ -49,6 +50,22 @@ public class Tait1200DecoderState extends DecoderState
super( aliasList );
}
+ @Override
+ public DecoderType getDecoderType()
+ {
+ return DecoderType.TAIT_1200;
+ }
+
+ @Override
+ public void start()
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
+
@Override
public void reset()
{
diff --git a/src/record/RecorderManager.java b/src/record/RecorderManager.java
index bc825304..53e37469 100644
--- a/src/record/RecorderManager.java
+++ b/src/record/RecorderManager.java
@@ -19,11 +19,8 @@ package record;
import java.io.File;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,10 +40,6 @@ public class RecorderManager implements Listener
public static final int AUDIO_SAMPLE_RATE = 48000;
- private static final long RECORDER_INACTIVITY_THRESHOLD = 10000; //1 minute in millis
-
-// private static final RealBuffer AUDIO_SEPARATOR = new AudioSeparator();
-
private Map mRecorders = new HashMap<>();
private ThreadPoolManager mThreadPoolManager;
@@ -56,31 +49,34 @@ public class RecorderManager implements Listener
mThreadPoolManager = threadPoolManager;
}
+ public void dispose()
+ {
+ mThreadPoolManager = null;
+ }
+
@Override
public void receive( AudioPacket audioPacket )
{
if( audioPacket.hasAudioMetadata() &&
- audioPacket.getAudioMetadata().isRecordable() )
- {
- String identifier = audioPacket.getAudioMetadata().getIdentifier();
-
- if( mRecorders.containsKey( identifier ) )
+ audioPacket.getAudioMetadata().isRecordable() )
{
- RealBufferWaveRecorder recorder = mRecorders.get( identifier );
+ String identifier = audioPacket.getAudioMetadata().getIdentifier();
- if( audioPacket.getType() == AudioPacket.Type.AUDIO )
+ if( mRecorders.containsKey( identifier ) )
{
- recorder.receive( audioPacket.getAudioBuffer() );
+ RealBufferWaveRecorder recorder = mRecorders.get( identifier );
+
+ if( audioPacket.getType() == AudioPacket.Type.AUDIO )
+ {
+ recorder.receive( audioPacket.getAudioBuffer() );
+ }
+ else if( audioPacket.getType() == AudioPacket.Type.END )
+ {
+ mRecorders.remove( identifier );
+ recorder.stop();
+ }
}
- else if( audioPacket.getType() == AudioPacket.Type.END )
- {
- mRecorders.remove( identifier );
- recorder.stop();
- }
- }
- else
- {
- if( audioPacket.getType() == AudioPacket.Type.AUDIO )
+ else if( audioPacket.getType() == AudioPacket.Type.AUDIO )
{
String filePrefix = getFilePrefix( audioPacket );
@@ -94,7 +90,6 @@ public class RecorderManager implements Listener
mRecorders.put( identifier, recorder );
}
}
- }
}
/**
@@ -122,26 +117,42 @@ public class RecorderManager implements Listener
{
sb.append( "_TO_" );
sb.append( toMetadata.getValue() );
+
+ Metadata fromMetadata = packet.getAudioMetadata()
+ .getMetadata( MetadataType.FROM );
+
+ if( fromMetadata != null )
+ {
+ sb.append( "_FROM_" );
+ sb.append( fromMetadata.getValue() );
+ }
}
-
- Metadata fromMetadata = packet.getAudioMetadata()
- .getMetadata( MetadataType.FROM );
-
- if( fromMetadata != null )
+ else
{
- sb.append( "_FROM_" );
- sb.append( fromMetadata.getValue() );
+ Metadata siteMetadata = packet.getAudioMetadata()
+ .getMetadata( MetadataType.SITE_ID );
+
+ if( siteMetadata != null )
+ {
+ sb.append( "_" );
+ sb.append( siteMetadata.getValue() );
+ }
+
+ Metadata channelMetadata = packet.getAudioMetadata()
+ .getMetadata( MetadataType.CHANNEL_NAME );
+
+ if( channelMetadata != null )
+ {
+ sb.append( "_" );
+ sb.append( channelMetadata.getValue() );
+ }
}
return sb.toString();
}
/**
- * Returns a list of recorder modules for use in a processing chain.
- * Note: currently this only returns a baseband recorder.
- *
- * Create an instance of this RecorderManager class to listen to and centrally
- * record all decoded audio.
+ * Constructs a baseband recorder for use in a processing chain.
*/
public static ComplexBufferWaveRecorder getBasebandRecorder(
ThreadPoolManager threadPoolManager, String channelName )
@@ -156,35 +167,4 @@ public class RecorderManager implements Listener
return new ComplexBufferWaveRecorder( threadPoolManager,
AUDIO_SAMPLE_RATE, sb.toString() );
}
-
- /**
- * Removes any recorders where the recent activity timestamp has exceeded
- * the retention threshold.
- */
- public class RecorderProcessor implements Runnable
- {
- @Override
- public void run()
- {
- if( !mRecorders.isEmpty() )
- {
- List keysToRemove = new ArrayList<>();
-
- for( Entry entry: mRecorders.entrySet() )
- {
- if( entry.getValue().getLastBufferReceived() +
- RECORDER_INACTIVITY_THRESHOLD < System.currentTimeMillis() )
- {
- keysToRemove.add( entry.getKey() );
- }
- }
-
- for( String key: keysToRemove )
- {
- RealBufferWaveRecorder recorder = mRecorders.remove( key );
- recorder.dispose();
- }
- }
- }
- }
}
diff --git a/src/record/wave/RealBufferWaveRecorder.java b/src/record/wave/RealBufferWaveRecorder.java
index 4d48d934..880ca83c 100644
--- a/src/record/wave/RealBufferWaveRecorder.java
+++ b/src/record/wave/RealBufferWaveRecorder.java
@@ -20,7 +20,6 @@ package record.wave;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.Arrays;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@@ -33,10 +32,8 @@ import module.Module;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import record.wave.ComplexBufferWaveRecorder.PoisonPill;
import sample.ConversionUtils;
import sample.Listener;
-import sample.complex.ComplexBuffer;
import sample.real.IRealBufferListener;
import sample.real.RealBuffer;
import util.TimeStamp;
diff --git a/src/sample/complex/ComplexToComplexBufferAssembler.java b/src/sample/complex/ComplexToComplexBufferAssembler.java
index 28c032f6..66dd239a 100644
--- a/src/sample/complex/ComplexToComplexBufferAssembler.java
+++ b/src/sample/complex/ComplexToComplexBufferAssembler.java
@@ -53,14 +53,6 @@ public class ComplexToComplexBufferAssembler implements ComplexSampleListener
@Override
public void receive( float i, float q )
{
- mBuffer[ mBufferPointer ] = i;
-
- mBufferPointer++;
-
- mBuffer[ mBufferPointer ] = q;
-
- mBufferPointer++;
-
if( mBufferPointer >= mBufferSize )
{
if( mListener != null )
@@ -71,6 +63,14 @@ public class ComplexToComplexBufferAssembler implements ComplexSampleListener
mBuffer = new float[ mBufferSize ];
mBufferPointer = 0;
}
+
+ mBuffer[ mBufferPointer ] = i;
+
+ mBufferPointer++;
+
+ mBuffer[ mBufferPointer ] = q;
+
+ mBufferPointer++;
}
public void setListener( Listener listener )
diff --git a/src/sample/real/RealToRealBufferAssembler.java b/src/sample/real/RealToRealBufferAssembler.java
index de12e4de..0efe048f 100644
--- a/src/sample/real/RealToRealBufferAssembler.java
+++ b/src/sample/real/RealToRealBufferAssembler.java
@@ -51,10 +51,6 @@ public class RealToRealBufferAssembler implements RealSampleListener
@Override
public void receive( float sample )
{
- mBuffer[ mBufferPointer ] = sample;
-
- mBufferPointer++;
-
if( mBufferPointer >= mBufferSize )
{
if( mListener != null )
@@ -65,6 +61,10 @@ public class RealToRealBufferAssembler implements RealSampleListener
mBuffer = new float[ mBufferSize ];
mBufferPointer = 0;
}
+
+ mBuffer[ mBufferPointer ] = sample;
+
+ mBufferPointer++;
}
public void setListener( Listener listener )
diff --git a/src/spectrum/DFTProcessor.java b/src/spectrum/DFTProcessor.java
index 4172d1e5..4d841033 100644
--- a/src/spectrum/DFTProcessor.java
+++ b/src/spectrum/DFTProcessor.java
@@ -63,7 +63,10 @@ public class DFTProcessor implements Listener,
private FFTWidth mNewFFTWidth = FFTWidth.FFT04096;
private double[] mWindow;
- private WindowType mWindowType = Window.WindowType.HAMMING;
+
+ /* The Cosine and Hanning windows seem to offer the best spectral display
+ * with minimal bin leakage/smearing */
+ private WindowType mWindowType = Window.WindowType.HANNING;
private FloatFFT_1D mFFT = new FloatFFT_1D( mFFTWidth.getWidth() );