diff --git a/src/main/java/io/github/dsheirer/module/decode/p25/Trellis_3_4_Rate.java b/src/main/java/io/github/dsheirer/module/decode/p25/Trellis_3_4_Rate.java index cea87249..cc38fa45 100644 --- a/src/main/java/io/github/dsheirer/module/decode/p25/Trellis_3_4_Rate.java +++ b/src/main/java/io/github/dsheirer/module/decode/p25/Trellis_3_4_Rate.java @@ -350,9 +350,13 @@ public class Trellis_3_4_Rate public void add( Con con ) { Node current = getLastNode(); - - Tribit input = INPUT_FROM_CONSTELLATION_MAP - .get( con )[ current.getState().getValue() ]; + + Tribit input = null; + + if(current != null) + { + input = INPUT_FROM_CONSTELLATION_MAP.get( con )[ current.getState().getValue() ]; + } /* A non-null input tribit from the lookup table is valid, otherwise * create 8 alternate branches from the original path to explore diff --git a/src/main/java/io/github/dsheirer/source/tuner/channel/CICTunerChannelSource.java b/src/main/java/io/github/dsheirer/source/tuner/channel/CICTunerChannelSource.java index 9253200b..e15cdfbc 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/channel/CICTunerChannelSource.java +++ b/src/main/java/io/github/dsheirer/source/tuner/channel/CICTunerChannelSource.java @@ -18,7 +18,7 @@ package io.github.dsheirer.source.tuner.channel; import io.github.dsheirer.dsp.filter.cic.ComplexPrimeCICDecimate; import io.github.dsheirer.dsp.filter.design.FilterDesignException; import io.github.dsheirer.dsp.mixer.IOscillator; -import io.github.dsheirer.dsp.mixer.LowPhaseNoiseOscillator; +import io.github.dsheirer.dsp.mixer.Oscillator; import io.github.dsheirer.sample.IOverflowListener; import io.github.dsheirer.sample.Listener; import io.github.dsheirer.sample.buffer.OverflowableReusableBufferTransferQueue; @@ -81,7 +81,7 @@ public class CICTunerChannelSource extends TunerChannelSource implements Listene mTunerFrequency = tunerChannel.getFrequency(); long frequencyOffset = mTunerFrequency - getTunerChannel().getFrequency(); - mFrequencyCorrectionMixer = new LowPhaseNoiseOscillator(frequencyOffset, sampleRate); + mFrequencyCorrectionMixer = new Oscillator(frequencyOffset, sampleRate); } /** diff --git a/src/main/java/io/github/dsheirer/source/tuner/channel/TunerChannelSource.java b/src/main/java/io/github/dsheirer/source/tuner/channel/TunerChannelSource.java index 57b0abaf..8a8efac4 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/channel/TunerChannelSource.java +++ b/src/main/java/io/github/dsheirer/source/tuner/channel/TunerChannelSource.java @@ -286,8 +286,22 @@ public abstract class TunerChannelSource extends ComplexSource implements ISourc { if(!mStopped) { - getHeartbeatManager().broadcast(); - processSamples(); + try + { + getHeartbeatManager().broadcast(); + } + catch(Throwable t) + { + mLog.error("Error while sending heartbeat", t); + } + try + { + processSamples(); + } + catch(Throwable t) + { + mLog.error("Error while processing samples", t); + } } if(mStopped) @@ -300,8 +314,15 @@ public abstract class TunerChannelSource extends ComplexSource implements ISourc mScheduledFuture = null; - getHeartbeatManager().broadcast(); - performDisposal(); + try + { + getHeartbeatManager().broadcast(); + performDisposal(); + } + catch(Throwable t) + { + mLog.error("Error during final shutdown processing of samples", t); + } } } }