mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 08:37:25 -05:00
Merge branch 'master' into 39-polyphase-channelizer
# Conflicts: # src/spectrum/SpectrumPanel.java
This commit is contained in:
@@ -108,7 +108,6 @@ public class ProcessingChain implements IChannelEventListener
|
||||
private Broadcaster<RealBuffer> mUnFilteredRealBufferBroadcaster = new Broadcaster<>();
|
||||
private Broadcaster<SquelchState> mSquelchStateBroadcaster = new Broadcaster<>();
|
||||
|
||||
private String mName;
|
||||
private AtomicBoolean mRunning = new AtomicBoolean();
|
||||
|
||||
protected Source mSource;
|
||||
@@ -120,13 +119,10 @@ public class ProcessingChain implements IChannelEventListener
|
||||
/**
|
||||
* Creates a processing chain for managing a set of modules
|
||||
*
|
||||
* @param name for thread pool naming each thread
|
||||
* @param channelType
|
||||
*/
|
||||
public ProcessingChain(String name, ChannelType channelType)
|
||||
public ProcessingChain(ChannelType channelType)
|
||||
{
|
||||
mName = name;
|
||||
|
||||
mChannelState = new ChannelState(channelType);
|
||||
addModule(mChannelState);
|
||||
|
||||
@@ -211,6 +207,8 @@ public class ProcessingChain implements IChannelEventListener
|
||||
}
|
||||
|
||||
mSource = source;
|
||||
|
||||
addModule(mSource);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -557,25 +555,6 @@ public class ProcessingChain implements IChannelEventListener
|
||||
+ "sample type - cannot start processing chain");
|
||||
}
|
||||
|
||||
/* If this is a tuner source, broadcast the frequency to all
|
||||
* of the decoder state's and start the samples flowing */
|
||||
if(mSource instanceof TunerChannelSource)
|
||||
{
|
||||
TunerChannelSource tcs = (TunerChannelSource) mSource;
|
||||
|
||||
try
|
||||
{
|
||||
long frequency = tcs.getFrequency();
|
||||
|
||||
mDecoderStateEventBroadcaster.broadcast(
|
||||
new DecoderStateEvent(this, Event.SOURCE_FREQUENCY, State.IDLE, frequency));
|
||||
}
|
||||
catch(SourceException e)
|
||||
{
|
||||
mLog.error("Error getting frequency from tuner channel source", e);
|
||||
}
|
||||
}
|
||||
|
||||
/* Start each of the modules */
|
||||
for(Module module : mModules)
|
||||
{
|
||||
@@ -588,8 +567,6 @@ public class ProcessingChain implements IChannelEventListener
|
||||
mLog.error("Error starting module", e);
|
||||
}
|
||||
}
|
||||
|
||||
mSource.start(ThreadPool.SCHEDULED);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -606,9 +583,16 @@ public class ProcessingChain implements IChannelEventListener
|
||||
{
|
||||
if(mRunning.compareAndSet(true, false))
|
||||
{
|
||||
/* Stop each of the modules */
|
||||
for(Module module : mModules)
|
||||
{
|
||||
module.stop();
|
||||
}
|
||||
|
||||
if(mSource != null)
|
||||
{
|
||||
mSource.stop();
|
||||
removeModule(mSource);
|
||||
|
||||
mSource.setOverflowListener(null);
|
||||
|
||||
switch(mSource.getSampleType())
|
||||
@@ -629,11 +613,6 @@ public class ProcessingChain implements IChannelEventListener
|
||||
mSource = null;
|
||||
}
|
||||
|
||||
/* Stop each of the modules */
|
||||
for(Module module : mModules)
|
||||
{
|
||||
module.stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -760,6 +739,24 @@ public class ProcessingChain implements IChannelEventListener
|
||||
mMessageBroadcaster.removeListener(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the listener to receive frequency change events from the processing chain
|
||||
* @param listener to receive events
|
||||
*/
|
||||
public void addFrequencyChangeListener(Listener<FrequencyChangeEvent> listener)
|
||||
{
|
||||
mFrequencyChangeEventBroadcaster.addListener(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the listener from receiving frequency change events
|
||||
* @param listener to remove
|
||||
*/
|
||||
public void removeFrequencyChangeListener(Listener<FrequencyChangeEvent> listener)
|
||||
{
|
||||
mFrequencyChangeEventBroadcaster.removeListener(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the listener to receive call events from all modules.
|
||||
*/
|
||||
|
||||
@@ -222,7 +222,7 @@ public class DecoderFactory
|
||||
|
||||
if(channelType == ChannelType.STANDARD)
|
||||
{
|
||||
modules.add(new TrafficChannelManager(channelModel, channelProcessingManager, decodeConfig,
|
||||
modules.add(new TrafficChannelManager(channelModel, decodeConfig,
|
||||
channel.getRecordConfiguration(), channel.getSystem(), channel.getSite(),
|
||||
(aliasList != null ? aliasList.getName() : null), mptConfig.getTrafficChannelPoolSize()));
|
||||
}
|
||||
@@ -263,7 +263,7 @@ public class DecoderFactory
|
||||
|
||||
if(channelType == ChannelType.STANDARD)
|
||||
{
|
||||
modules.add(new TrafficChannelManager(channelModel, channelProcessingManager, decodeConfig,
|
||||
modules.add(new TrafficChannelManager(channelModel, decodeConfig,
|
||||
channel.getRecordConfiguration(), channel.getSystem(), channel.getSite(),
|
||||
(aliasList != null ? aliasList.getName() : null), p25Config.getTrafficChannelPoolSize()));
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ public class LJ1200DecoderState extends DecoderState
|
||||
super(aliasList);
|
||||
|
||||
mAddressAttribute = new AliasedStringAttributeMonitor(Attribute.SECONDARY_ADDRESS_TO,
|
||||
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.LOJACK);
|
||||
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.SITE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,21 +9,21 @@ import instrument.tap.stream.FloatTap;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import sample.Listener;
|
||||
import sample.real.RealBuffer;
|
||||
import sample.real.RealSampleListener;
|
||||
import sample.real.RealSampleProvider;
|
||||
import source.tuner.TunerChannelSource;
|
||||
import source.tuner.frequency.FrequencyChangeEvent;
|
||||
import source.tuner.frequency.FrequencyChangeEvent.Event;
|
||||
import source.tuner.frequency.IFrequencyChangeListener;
|
||||
import dsp.gain.DirectGainControl;
|
||||
|
||||
public class C4FMSymbolFilter implements Listener<RealBuffer>,
|
||||
IFrequencyChangeListener,
|
||||
RealSampleProvider,
|
||||
Instrumentable
|
||||
public class C4FMSymbolFilter implements Listener<RealBuffer>, IFrequencyChangeListener, RealSampleProvider, Instrumentable
|
||||
{
|
||||
private static final float TAPS[][] =
|
||||
private static final float TAPS[][] =
|
||||
{
|
||||
{ 0.00000e+00f, 0.00000e+00f, 0.00000e+00f, 0.00000e+00f, 1.00000e+00f, 0.00000e+00f, 0.00000e+00f, 0.00000e+00f }, // 0/128
|
||||
{ -1.54700e-04f, 8.53777e-04f, -2.76968e-03f, 7.89295e-03f, 9.98534e-01f, -5.41054e-03f, 1.24642e-03f, -1.98993e-04f }, // 1/128
|
||||
@@ -198,8 +198,7 @@ public class C4FMSymbolFilter implements Listener<RealBuffer>,
|
||||
|
||||
private RealSampleListener mListener;
|
||||
|
||||
private DirectGainControl mGainController =
|
||||
new DirectGainControl( 15.0f, 0.1f, 35.0f, 0.3f );
|
||||
private DirectGainControl mGainController = new DirectGainControl( 15.0f, 0.1f, 35.0f, 0.3f );
|
||||
|
||||
private int mFrequencyAdjustmentRequested = 0;
|
||||
private int mFrequencyCorrection = 0;
|
||||
@@ -258,9 +257,8 @@ public class C4FMSymbolFilter implements Listener<RealBuffer>,
|
||||
correction = -mFrequencyCorrectionMaximum;
|
||||
}
|
||||
|
||||
broadcast( new FrequencyChangeEvent(
|
||||
Event.REQUEST_CHANNEL_FREQUENCY_CORRECTION_CHANGE, correction ) );
|
||||
|
||||
broadcast( new FrequencyChangeEvent(Event.REQUEST_CHANNEL_FREQUENCY_CORRECTION_CHANGE, correction ) );
|
||||
|
||||
mFrequencyAdjustmentRequested = 0;
|
||||
}
|
||||
}
|
||||
@@ -452,6 +450,10 @@ public class C4FMSymbolFilter implements Listener<RealBuffer>,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Broadcasts a frequency change event to the registered listener
|
||||
* @param event
|
||||
*/
|
||||
public void broadcast( FrequencyChangeEvent event )
|
||||
{
|
||||
if( mFrequencyChangeListener != null )
|
||||
@@ -459,7 +461,11 @@ public class C4FMSymbolFilter implements Listener<RealBuffer>,
|
||||
mFrequencyChangeListener.receive( event );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the listener for frequency change events.
|
||||
* @param listener
|
||||
*/
|
||||
public void setFrequencyChangeListener( Listener<FrequencyChangeEvent> listener )
|
||||
{
|
||||
mFrequencyChangeListener = listener;
|
||||
|
||||
@@ -4,8 +4,10 @@ import alias.AliasList;
|
||||
import instrument.Instrumentable;
|
||||
import module.decode.Decoder;
|
||||
import module.decode.DecoderType;
|
||||
import source.tuner.frequency.IFrequencyChangeListener;
|
||||
import source.tuner.frequency.IFrequencyChangeProvider;
|
||||
|
||||
public abstract class P25Decoder extends Decoder implements Instrumentable
|
||||
public abstract class P25Decoder extends Decoder implements IFrequencyChangeListener, IFrequencyChangeProvider, Instrumentable
|
||||
{
|
||||
private P25MessageProcessor mMessageProcessor;
|
||||
|
||||
|
||||
@@ -315,6 +315,8 @@ public class P25DecoderState extends DecoderState
|
||||
*/
|
||||
public void registerCallEvent(P25CallEvent event)
|
||||
{
|
||||
String channel = event.getChannel();
|
||||
|
||||
if(mChannelCallMap.containsKey(event.getChannel()))
|
||||
{
|
||||
P25CallEvent previousEvent = mChannelCallMap.remove(event.getChannel());
|
||||
@@ -1557,6 +1559,7 @@ public class P25DecoderState extends DecoderState
|
||||
break;
|
||||
case IDENTIFIER_UPDATE_NON_VUHF:
|
||||
case IDENTIFIER_UPDATE_VHF_UHF_BANDS:
|
||||
case IDENTIFIER_UPDATE_TDMA:
|
||||
IdentifierUpdate iu = (IdentifierUpdate)tsbk;
|
||||
|
||||
if(!mBands.containsKey(iu.getIdentifier()))
|
||||
@@ -2735,6 +2738,7 @@ public class P25DecoderState extends DecoderState
|
||||
else
|
||||
{
|
||||
StringBuilder details = new StringBuilder();
|
||||
details.append(pgvcg.isTDMAChannel() ? "TDMA " : "");
|
||||
details.append(pgvcg.isEmergency() ? "EMERGENCY " : "");
|
||||
details.append("PRI:").append(pgvcg.getPriority());
|
||||
details.append(pgvcg.isEncryptedChannel() ? " ENCRYPTED" : "");
|
||||
@@ -2742,7 +2746,7 @@ public class P25DecoderState extends DecoderState
|
||||
|
||||
P25CallEvent event = new P25CallEvent.Builder(CallEventType.PATCH_GROUP_CALL)
|
||||
.aliasList(getAliasList())
|
||||
.channel(channel + (pgvcg.isTDMAChannel() ? " TDMA" : ""))
|
||||
.channel(channel)
|
||||
.details(details.toString())
|
||||
.frequency(pgvcg.getDownlinkFrequency())
|
||||
.from(from)
|
||||
@@ -2775,8 +2779,9 @@ public class P25DecoderState extends DecoderState
|
||||
{
|
||||
P25CallEvent event = new P25CallEvent.Builder(CallEventType.PATCH_GROUP_CALL)
|
||||
.aliasList(getAliasList())
|
||||
.channel(channel + (gvcgu.isTDMAChannel1() ? " TDMA" : ""))
|
||||
.details((gvcgu.isEncrypted() ? "ENCRYPTED " : ""))
|
||||
.channel(channel)
|
||||
.details((gvcgu.isTDMAChannel1() ? "TDMA " : "") +
|
||||
(gvcgu.isEncrypted() ? "ENCRYPTED " : ""))
|
||||
.frequency(gvcgu.getDownlinkFrequency1())
|
||||
.to(to)
|
||||
.build();
|
||||
@@ -2801,8 +2806,9 @@ public class P25DecoderState extends DecoderState
|
||||
{
|
||||
P25CallEvent event = new P25CallEvent.Builder(CallEventType.PATCH_GROUP_CALL)
|
||||
.aliasList(getAliasList())
|
||||
.channel(channel2 + (gvcgu.isTDMAChannel2() ? " TDMA" : ""))
|
||||
.details((gvcgu.isEncrypted() ? "ENCRYPTED " : ""))
|
||||
.channel(channel2)
|
||||
.details((gvcgu.isTDMAChannel2() ? "TDMA " : "") +
|
||||
(gvcgu.isEncrypted() ? "ENCRYPTED " : ""))
|
||||
.frequency(gvcgu.getDownlinkFrequency2())
|
||||
.to(to2)
|
||||
.build();
|
||||
@@ -2866,6 +2872,7 @@ public class P25DecoderState extends DecoderState
|
||||
else
|
||||
{
|
||||
StringBuilder details = new StringBuilder();
|
||||
details.append(gdcg.isTDMAChannel() ? "TDMA " : "");
|
||||
details.append(gdcg.isEmergency() ? "EMERGENCY " : "");
|
||||
details.append("PRI:").append(gdcg.getPriority()).append(" ");
|
||||
details.append(gdcg.isEncryptedChannel() ? "ENCRYPTED " : "");
|
||||
@@ -2873,7 +2880,7 @@ public class P25DecoderState extends DecoderState
|
||||
|
||||
P25CallEvent event = new P25CallEvent.Builder(CallEventType.DATA_CALL)
|
||||
.aliasList(getAliasList())
|
||||
.channel(channel + (gdcg.isTDMAChannel() ? " TDMA" : ""))
|
||||
.channel(channel)
|
||||
.details(details.toString())
|
||||
.frequency(gdcg.getDownlinkFrequency())
|
||||
.from(from)
|
||||
@@ -2904,6 +2911,7 @@ public class P25DecoderState extends DecoderState
|
||||
else
|
||||
{
|
||||
StringBuilder details = new StringBuilder();
|
||||
details.append(gvcg.isTDMAChannel() ? "TDMA " : "");
|
||||
details.append(gvcg.isEmergency() ? "EMERGENCY " : "");
|
||||
details.append("PRI:").append(gvcg.getPriority()).append(" ");
|
||||
details.append(gvcg.isEncryptedChannel() ? "ENCRYPTED " : "");
|
||||
@@ -2911,7 +2919,7 @@ public class P25DecoderState extends DecoderState
|
||||
|
||||
P25CallEvent event = new P25CallEvent.Builder(CallEventType.GROUP_CALL)
|
||||
.aliasList(getAliasList())
|
||||
.channel(channel + (gvcg.isTDMAChannel() ? " TDMA" : ""))
|
||||
.channel(channel)
|
||||
.details(details.toString())
|
||||
.frequency(gvcg.getDownlinkFrequency())
|
||||
.from(from)
|
||||
@@ -2928,8 +2936,7 @@ public class P25DecoderState extends DecoderState
|
||||
}
|
||||
break;
|
||||
case GROUP_VOICE_CHANNEL_GRANT_UPDATE:
|
||||
GroupVoiceChannelGrantUpdate gvcgu =
|
||||
(GroupVoiceChannelGrantUpdate)message;
|
||||
GroupVoiceChannelGrantUpdate gvcgu = (GroupVoiceChannelGrantUpdate)message;
|
||||
|
||||
channel = gvcgu.getChannel1();
|
||||
from = null;
|
||||
@@ -2942,6 +2949,7 @@ public class P25DecoderState extends DecoderState
|
||||
else
|
||||
{
|
||||
StringBuilder details = new StringBuilder();
|
||||
details.append(gvcgu.isTDMAChannel() ? "TDMA " : "");
|
||||
details.append(gvcgu.isEmergency() ? "EMERGENCY " : "");
|
||||
details.append("PRI:").append(gvcgu.getPriority()).append(" ");
|
||||
details.append(gvcgu.isEncryptedChannel() ? "ENCRYPTED " : "");
|
||||
@@ -2949,7 +2957,7 @@ public class P25DecoderState extends DecoderState
|
||||
|
||||
P25CallEvent event = new P25CallEvent.Builder(CallEventType.GROUP_CALL)
|
||||
.aliasList(getAliasList())
|
||||
.channel(gvcgu.getChannel1() + (gvcgu.isTDMAChannel1() ? " TDMA" : ""))
|
||||
.channel(gvcgu.getChannel1())
|
||||
.details(details.toString())
|
||||
.frequency(gvcgu.getDownlinkFrequency1())
|
||||
.from(from)
|
||||
@@ -2977,6 +2985,7 @@ public class P25DecoderState extends DecoderState
|
||||
else
|
||||
{
|
||||
StringBuilder details = new StringBuilder();
|
||||
details.append(gvcgu.isTDMAChannel() ? "TDMA " : "");
|
||||
details.append(gvcgu.isEmergency() ? "EMERGENCY " : "");
|
||||
details.append("PRI:").append(gvcgu.getPriority()).append(" ");
|
||||
details.append(gvcgu.isEncryptedChannel() ? "ENCRYPTED " : "");
|
||||
@@ -2984,7 +2993,7 @@ public class P25DecoderState extends DecoderState
|
||||
|
||||
P25CallEvent event2 = new P25CallEvent.Builder(CallEventType.GROUP_CALL)
|
||||
.aliasList(getAliasList())
|
||||
.channel(gvcgu.getChannel2() + (gvcgu.isTDMAChannel2() ? " TDMA" : ""))
|
||||
.channel(gvcgu.getChannel2())
|
||||
.details(details.toString())
|
||||
.frequency(gvcgu.getDownlinkFrequency2())
|
||||
.to(gvcgu.getGroupAddress2())
|
||||
@@ -3016,6 +3025,7 @@ public class P25DecoderState extends DecoderState
|
||||
else
|
||||
{
|
||||
StringBuilder details = new StringBuilder();
|
||||
details.append(gvcgue.isTDMAChannel() ? "TDMA " : "");
|
||||
details.append(gvcgue.isEmergency() ? "EMERGENCY " : "");
|
||||
details.append("PRI:").append(gvcgue.getPriority()).append(" ");
|
||||
details.append(gvcgue.isEncryptedChannel() ? "ENCRYPTED " : "");
|
||||
@@ -3023,7 +3033,7 @@ public class P25DecoderState extends DecoderState
|
||||
|
||||
P25CallEvent event = new P25CallEvent.Builder(CallEventType.GROUP_CALL)
|
||||
.aliasList(getAliasList())
|
||||
.channel(channel + (gvcgue.isTDMAChannel() ? " TDMA" : ""))
|
||||
.channel(channel)
|
||||
.details(details.toString())
|
||||
.frequency(gvcgue.getDownlinkFrequency())
|
||||
.from(from)
|
||||
@@ -3053,6 +3063,7 @@ public class P25DecoderState extends DecoderState
|
||||
else
|
||||
{
|
||||
StringBuilder details = new StringBuilder();
|
||||
details.append(idcg.isTDMAChannel() ? "TDMA " : "");
|
||||
details.append(idcg.isEmergency() ? "EMERGENCY " : "");
|
||||
details.append("PRI:").append(idcg.getPriority()).append(" ");
|
||||
details.append(idcg.isEncryptedChannel() ? "ENCRYPTED " : "");
|
||||
@@ -3060,7 +3071,7 @@ public class P25DecoderState extends DecoderState
|
||||
|
||||
P25CallEvent event = new P25CallEvent.Builder(CallEventType.DATA_CALL)
|
||||
.aliasList(getAliasList())
|
||||
.channel(channel + (idcg.isTDMAChannel() ? " TDMA" : ""))
|
||||
.channel(channel)
|
||||
.details(details.toString())
|
||||
.frequency(idcg.getDownlinkFrequency())
|
||||
.from(from)
|
||||
@@ -3090,13 +3101,14 @@ public class P25DecoderState extends DecoderState
|
||||
else
|
||||
{
|
||||
StringBuilder details = new StringBuilder();
|
||||
details.append(sdcg.isTDMAChannel() ? "TDMA " : "");
|
||||
details.append(sdcg.isEmergency() ? "EMERGENCY " : "");
|
||||
details.append(sdcg.isEncryptedChannel() ? "ENCRYPTED " : "");
|
||||
details.append(sdcg.getSessionMode().name());
|
||||
|
||||
P25CallEvent event = new P25CallEvent.Builder(CallEventType.DATA_CALL)
|
||||
.aliasList(getAliasList())
|
||||
.channel(channel + (sdcg.isTDMAChannel() ? " TDMA" : ""))
|
||||
.channel(channel)
|
||||
.details(details.toString())
|
||||
.frequency(sdcg.getDownlinkFrequency())
|
||||
.from(from)
|
||||
@@ -3128,6 +3140,7 @@ public class P25DecoderState extends DecoderState
|
||||
else
|
||||
{
|
||||
StringBuilder details = new StringBuilder();
|
||||
details.append(tivcg.isTDMAChannel() ? "TDMA " : "");
|
||||
details.append(tivcg.isEmergency() ? "EMERGENCY " : "");
|
||||
details.append("PRI:").append(tivcg.getPriority()).append(" ");
|
||||
details.append(tivcg.isEncryptedChannel() ? "ENCRYPTED " : "");
|
||||
@@ -3137,7 +3150,7 @@ public class P25DecoderState extends DecoderState
|
||||
P25CallEvent event = new P25CallEvent.Builder(
|
||||
CallEventType.TELEPHONE_INTERCONNECT)
|
||||
.aliasList(getAliasList())
|
||||
.channel(channel + (tivcg.isTDMAChannel() ? " TDMA" : ""))
|
||||
.channel(channel)
|
||||
.details(details.toString())
|
||||
.frequency(tivcg.getDownlinkFrequency())
|
||||
.from(from)
|
||||
@@ -3170,6 +3183,7 @@ public class P25DecoderState extends DecoderState
|
||||
else
|
||||
{
|
||||
StringBuilder details = new StringBuilder();
|
||||
details.append(tivcgu.isTDMAChannel() ? "TDMA " : "");
|
||||
details.append(tivcgu.isEmergency() ? "EMERGENCY " : "");
|
||||
details.append("PRI:").append(tivcgu.getPriority()).append(" ");
|
||||
details.append(tivcgu.isEncryptedChannel() ? "ENCRYPTED " : "");
|
||||
@@ -3179,7 +3193,7 @@ public class P25DecoderState extends DecoderState
|
||||
P25CallEvent event = new P25CallEvent.Builder(
|
||||
CallEventType.TELEPHONE_INTERCONNECT)
|
||||
.aliasList(getAliasList())
|
||||
.channel(channel + (tivcgu.isTDMAChannel() ? " TDMA" : ""))
|
||||
.channel(channel)
|
||||
.details(details.toString())
|
||||
.frequency(tivcgu.getDownlinkFrequency())
|
||||
.from(from)
|
||||
@@ -3209,6 +3223,7 @@ public class P25DecoderState extends DecoderState
|
||||
else
|
||||
{
|
||||
StringBuilder details = new StringBuilder();
|
||||
details.append(uuvcg.isTDMAChannel() ? "TDMA " : "");
|
||||
details.append(uuvcg.isEmergency() ? "EMERGENCY " : "");
|
||||
details.append("PRI:").append(uuvcg.getPriority()).append(" ");
|
||||
details.append(uuvcg.isEncryptedChannel() ? " ENCRYPTED " : "");
|
||||
@@ -3217,7 +3232,7 @@ public class P25DecoderState extends DecoderState
|
||||
P25CallEvent event = new P25CallEvent.Builder(
|
||||
CallEventType.UNIT_TO_UNIT_CALL)
|
||||
.aliasList(getAliasList())
|
||||
.channel(channel + (uuvcg.isTDMAChannel() ? " TDMA" : ""))
|
||||
.channel(channel)
|
||||
.details(details.toString())
|
||||
.frequency(uuvcg.getDownlinkFrequency())
|
||||
.from(from)
|
||||
@@ -3247,6 +3262,7 @@ public class P25DecoderState extends DecoderState
|
||||
else
|
||||
{
|
||||
StringBuilder details = new StringBuilder();
|
||||
details.append(uuvcgu.isTDMAChannel() ? "TDMA " : "");
|
||||
details.append(uuvcgu.isEmergency() ? "EMERGENCY " : "");
|
||||
details.append("PRI:").append(uuvcgu.getPriority()).append(" ");
|
||||
details.append(uuvcgu.isEncryptedChannel() ? "ENCRYPTED " : "");
|
||||
@@ -3255,7 +3271,7 @@ public class P25DecoderState extends DecoderState
|
||||
P25CallEvent event = new P25CallEvent.Builder(
|
||||
CallEventType.UNIT_TO_UNIT_CALL)
|
||||
.aliasList(getAliasList())
|
||||
.channel(channel + (uuvcgu.isTDMAChannel() ? " TDMA" : ""))
|
||||
.channel(channel)
|
||||
.details(details.toString())
|
||||
.frequency(uuvcgu.getDownlinkFrequency())
|
||||
.from(from)
|
||||
|
||||
@@ -689,8 +689,7 @@ public class P25MessageFramer implements Listener<Dibit>
|
||||
private LSMDemodulator mDemodulator;
|
||||
private double mCorrection;
|
||||
|
||||
public CostasPhaseErrorDetector( FrameSync frameSync,
|
||||
LSMDemodulator demodulator, double correction )
|
||||
public CostasPhaseErrorDetector( FrameSync frameSync, LSMDemodulator demodulator, double correction )
|
||||
{
|
||||
super( frameSync.getSync() );
|
||||
|
||||
|
||||
@@ -1,19 +1,20 @@
|
||||
/*******************************************************************************
|
||||
* SDR Trunk
|
||||
* Copyright (C) 2014,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 <http://www.gnu.org/licenses/>
|
||||
* 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 <http://www.gnu.org/licenses/>
|
||||
*
|
||||
******************************************************************************/
|
||||
package module.decode.p25;
|
||||
|
||||
@@ -41,8 +42,7 @@ import dsp.filter.FilterFactory;
|
||||
import dsp.filter.Window.WindowType;
|
||||
import dsp.filter.fir.real.RealFIRFilter_RB_RB;
|
||||
|
||||
public class P25_C4FMDecoder extends P25Decoder
|
||||
implements IFrequencyChangeListener, IFrequencyChangeProvider,IFilteredRealBufferListener
|
||||
public class P25_C4FMDecoder extends P25Decoder implements IFilteredRealBufferListener
|
||||
{
|
||||
private final static Logger mLog = LoggerFactory.getLogger( P25_C4FMDecoder.class );
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@ import dsp.filter.fir.complex.ComplexFIRFilter_CB_CB;
|
||||
import dsp.gain.ComplexFeedForwardGainControl;
|
||||
import dsp.psk.LSMDemodulator;
|
||||
import dsp.psk.QPSKPolarSlicer;
|
||||
import source.tuner.frequency.FrequencyChangeEvent;
|
||||
|
||||
public class P25_LSMDecoder extends P25Decoder implements IComplexBufferListener
|
||||
{
|
||||
@@ -56,8 +57,7 @@ public class P25_LSMDecoder extends P25Decoder implements IComplexBufferListener
|
||||
private List<TapGroup> mAvailableTaps;
|
||||
|
||||
private ComplexFIRFilter_CB_CB mBasebandFilter;
|
||||
private ComplexBufferToStreamConverter mStreamConverter =
|
||||
new ComplexBufferToStreamConverter();
|
||||
private ComplexBufferToStreamConverter mStreamConverter = new ComplexBufferToStreamConverter();
|
||||
private ComplexFeedForwardGainControl mAGC =
|
||||
new ComplexFeedForwardGainControl( 32 );
|
||||
private LSMDemodulator mLSMDemodulator = new LSMDemodulator();
|
||||
@@ -107,8 +107,31 @@ public class P25_LSMDecoder extends P25Decoder implements IComplexBufferListener
|
||||
mMessageFramer.dispose();
|
||||
mMessageFramer = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@Override
|
||||
public void setFrequencyChangeListener(Listener<FrequencyChangeEvent> listener)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFrequencyChangeListener()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public Listener<FrequencyChangeEvent> getFrequencyChangeListener()
|
||||
{
|
||||
return new Listener<FrequencyChangeEvent>()
|
||||
{
|
||||
@Override
|
||||
public void receive(FrequencyChangeEvent frequencyChangeEvent)
|
||||
{
|
||||
//Ignored
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Listener<ComplexBuffer> getComplexBufferListener()
|
||||
{
|
||||
return mBasebandFilter;
|
||||
|
||||
@@ -41,7 +41,7 @@ public class IdentifierUpdateTDMA extends IdentifierUpdate
|
||||
|
||||
sb.append( " ID:" + getIdentifier() );
|
||||
sb.append( " BASE:" + getBaseFrequency() );
|
||||
sb.append( " BW:" + getBandwidth() );
|
||||
sb.append( " BANDWIDTH:" + getBandwidth() );
|
||||
sb.append( " SPACING:" + getChannelSpacing() );
|
||||
sb.append( " OFFSET:" + getTransmitOffset() );
|
||||
sb.append( " TYPE:" + getChannelType().toString() );
|
||||
@@ -137,7 +137,7 @@ public class IdentifierUpdateTDMA extends IdentifierUpdate
|
||||
|
||||
sb.append( mAccessType.name() );
|
||||
sb.append( " BANDWIDTH:" + mBandwidth );
|
||||
sb.append( " SLOT/CARRIER:" + mSlotsPerCarrier );
|
||||
sb.append( " TIMESLOTS PER CARRIER:" + mSlotsPerCarrier );
|
||||
sb.append( " VOCODER:" + mVocoder.name() );
|
||||
|
||||
return sb.toString();
|
||||
|
||||
Reference in New Issue
Block a user