mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 08:37:25 -05:00
Resolved issue with channel label display in spectrum overlay panel
when a new tuner is added. Cleanup of debugging messages.
This commit is contained in:
@@ -48,7 +48,7 @@ public class ClipAction extends RecurringAction
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
mLog.debug( "Couldn't play audio clip", e );
|
||||
mLog.error( "Couldn't play audio clip", e );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ public class ScriptAction extends RecurringAction
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
mLog.debug( "Couldn't execute script [" + mScript + "]", e );
|
||||
mLog.error( "Couldn't execute script [" + mScript + "]", e );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -124,7 +124,10 @@ public class AudioModule extends Module implements IAudioPacketProvider,
|
||||
|
||||
AudioPacket packet = new AudioPacket( audio, mAudioMetadata.copyOf() );
|
||||
|
||||
mAudioPacketListener.receive( packet );
|
||||
if( mAudioPacketListener != null )
|
||||
{
|
||||
mAudioPacketListener.receive( packet );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@ public class AudioPanel extends JPanel implements Listener<AudioEvent>
|
||||
}
|
||||
catch( AudioException e )
|
||||
{
|
||||
mLog.debug( "Error while detecting current mixer "
|
||||
mLog.error( "Error while detecting current mixer "
|
||||
+ "channel configuration", e );
|
||||
}
|
||||
|
||||
|
||||
@@ -740,7 +740,6 @@ public class Channel extends Configuration
|
||||
public void setup() throws SourceException
|
||||
{
|
||||
setupProcessingChain();
|
||||
|
||||
setupSource();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*******************************************************************************
|
||||
* SDR Trunk
|
||||
* Copyright (C) 2014 Dennis Sheirer
|
||||
* 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
|
||||
@@ -18,6 +18,7 @@
|
||||
package controller.channel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import message.Message;
|
||||
|
||||
@@ -32,12 +33,9 @@ public class ChannelManager implements ChannelEventListener
|
||||
{
|
||||
private final static Logger mLog = LoggerFactory.getLogger( ChannelManager.class );
|
||||
|
||||
private ArrayList<Channel> mChannels = new ArrayList<Channel>();
|
||||
|
||||
private ArrayList<ChannelEventListener> mChannelListeners =
|
||||
new ArrayList<ChannelEventListener>();
|
||||
private ArrayList<Listener<Message>> mMessageListeners =
|
||||
new ArrayList<Listener<Message>>();
|
||||
private List<Channel> mChannels = new ArrayList<>();
|
||||
private List<ChannelEventListener> mChannelListeners = new ArrayList<>();
|
||||
private List<Listener<Message>> mMessageListeners = new ArrayList<>();
|
||||
|
||||
private AliasActionManager mAliasActionManager;
|
||||
|
||||
@@ -62,13 +60,13 @@ public class ChannelManager implements ChannelEventListener
|
||||
{
|
||||
switch( event.getEvent() )
|
||||
{
|
||||
case CHANNEL_ENABLED:
|
||||
case CHANNEL_ADDED:
|
||||
if( !mChannels.contains( event.getChannel() ) )
|
||||
{
|
||||
mChannels.add( event.getChannel() );
|
||||
}
|
||||
break;
|
||||
case CHANNEL_DISABLED:
|
||||
case CHANNEL_DELETED:
|
||||
mChannels.remove( event.getChannel() );
|
||||
break;
|
||||
}
|
||||
@@ -88,6 +86,11 @@ public class ChannelManager implements ChannelEventListener
|
||||
channel.addListener( listener );
|
||||
}
|
||||
}
|
||||
|
||||
public List<Channel> getChannels()
|
||||
{
|
||||
return mChannels;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a channel listener from being automatically added to all channels
|
||||
@@ -107,7 +110,7 @@ public class ChannelManager implements ChannelEventListener
|
||||
* Returns the list of channel change listeners that will be automatically
|
||||
* added to all channels to receive channel change events
|
||||
*/
|
||||
public ArrayList<ChannelEventListener> getChannelListeners()
|
||||
public List<ChannelEventListener> getChannelListeners()
|
||||
{
|
||||
return mChannelListeners;
|
||||
}
|
||||
@@ -116,7 +119,7 @@ public class ChannelManager implements ChannelEventListener
|
||||
* Returns the list of channel change listeners that will be automatically
|
||||
* added to all channels to receive channel change events
|
||||
*/
|
||||
public ArrayList<Listener<Message>> getMessageListeners()
|
||||
public List<Listener<Message>> getMessageListeners()
|
||||
{
|
||||
return mMessageListeners;
|
||||
}
|
||||
|
||||
@@ -19,9 +19,7 @@ package module;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.LinkedTransferQueue;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import message.IMessageListener;
|
||||
@@ -64,7 +62,6 @@ import audio.squelch.ISquelchStateListener;
|
||||
import audio.squelch.ISquelchStateProvider;
|
||||
import audio.squelch.SquelchState;
|
||||
import controller.ThreadPoolManager;
|
||||
import controller.ThreadPoolManager.ThreadType;
|
||||
import controller.channel.ChannelEvent;
|
||||
import controller.channel.IChannelEventListener;
|
||||
import controller.channel.IChannelEventProvider;
|
||||
@@ -92,9 +89,6 @@ public class ProcessingChain implements IChannelEventListener
|
||||
private final static Logger mLog =
|
||||
LoggerFactory.getLogger( ProcessingChain.class );
|
||||
|
||||
private BufferReceiver<ComplexBuffer> mComplexReceiver = new BufferReceiver<>( 5 );
|
||||
private BufferReceiver<RealBuffer> mRealReceiver = new BufferReceiver<>( 5 );
|
||||
|
||||
private Broadcaster<AudioPacket> mAudioPacketBroadcaster = new Broadcaster<>();
|
||||
private Broadcaster<Metadata> mMetadataBroadcaster = new Broadcaster<>();
|
||||
private Broadcaster<CallEvent> mCallEventBroadcaster = new Broadcaster<>();
|
||||
@@ -134,11 +128,11 @@ public class ProcessingChain implements IChannelEventListener
|
||||
|
||||
mModules.clear();
|
||||
|
||||
mComplexReceiver.dispose();
|
||||
mComplexReceiver = null;
|
||||
|
||||
mRealReceiver.dispose();
|
||||
mRealReceiver = null;
|
||||
// mComplexReceiver.dispose();
|
||||
// mComplexReceiver = null;
|
||||
//
|
||||
// mRealReceiver.dispose();
|
||||
// mRealReceiver = null;
|
||||
|
||||
mThreadPoolManager = null;
|
||||
mBufferProcessingTask = null;
|
||||
@@ -429,9 +423,6 @@ public class ProcessingChain implements IChannelEventListener
|
||||
/* Register with the source to receive sample data. Setup a
|
||||
* timer task to process the buffer queues 50 times a second
|
||||
* (every 20 ms) */
|
||||
mBufferProcessingTask = mThreadPoolManager.scheduleFixedRate(
|
||||
ThreadType.DECODER, new BufferProcessor(), 20, TimeUnit.MILLISECONDS );
|
||||
|
||||
switch( mSource.getSampleType() )
|
||||
{
|
||||
case COMPLEX:
|
||||
@@ -463,6 +454,10 @@ public class ProcessingChain implements IChannelEventListener
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mLog.debug( "Source is null on start()" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -612,91 +607,6 @@ public class ProcessingChain implements IChannelEventListener
|
||||
mRealBufferBroadcaster.removeListener( listener );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Processes complex and real sample buffers and broadcasts buffers to any
|
||||
* registered listeners.
|
||||
*/
|
||||
private class BufferProcessor implements Runnable
|
||||
{
|
||||
private AtomicBoolean mProcessing = new AtomicBoolean();
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
/* Allow only one instance of this processor to run to ensure
|
||||
* correct serial processing of incoming buffers. Overlapping
|
||||
* invocations of this processor by the timer service will end
|
||||
* immediately without doing anything for cases where a single
|
||||
* iteration runs longer than the scheduled processing interval */
|
||||
if( mProcessing.compareAndSet( false, true ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
for( ComplexBuffer buffer: mComplexReceiver.get() )
|
||||
{
|
||||
mComplexBufferBroadcaster.broadcast( buffer );
|
||||
}
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
mLog.error( "Error processing complex sample buffers", e );
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
for( RealBuffer buffer: mRealReceiver.get() )
|
||||
{
|
||||
mRealBufferBroadcaster.broadcast( buffer );
|
||||
}
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
mLog.error( "Error processing real sample buffers", e );
|
||||
}
|
||||
|
||||
mProcessing.set( false );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Buffer receiver - non-blocking receiver to allow calling thread to return
|
||||
* without blocking on any internal processing. This ensures that we don't
|
||||
* impair any receiver sample processing.
|
||||
*/
|
||||
private class BufferReceiver<T> implements Listener<T>
|
||||
{
|
||||
private LinkedTransferQueue<T> mQueue = new LinkedTransferQueue<>();
|
||||
private int mMaxFetchSize;
|
||||
|
||||
public BufferReceiver( int maxFetchSize )
|
||||
{
|
||||
mMaxFetchSize = maxFetchSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void receive( T t )
|
||||
{
|
||||
mQueue.add( t );
|
||||
}
|
||||
|
||||
public List<T> get()
|
||||
{
|
||||
List<T> buffers = new ArrayList<>();
|
||||
|
||||
mQueue.drainTo( buffers, mMaxFetchSize );
|
||||
|
||||
return buffers;
|
||||
}
|
||||
|
||||
public void dispose()
|
||||
{
|
||||
mQueue.clear();
|
||||
mQueue = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Listener<ChannelEvent> getChannelEventListener()
|
||||
{
|
||||
|
||||
@@ -255,9 +255,9 @@ public class C4FMSymbolFilter implements FrequencyCorrectionResetListener,
|
||||
{
|
||||
mFrequencyCorrectionControl.adjust( mFrequencyAdjustmentRequested );
|
||||
|
||||
mLog.debug( "Adjusting frequency [" + mFrequencyAdjustmentRequested +
|
||||
"] correction is now: " + mFrequencyCorrectionControl
|
||||
.getErrorCorrection() );
|
||||
// mLog.debug( "Adjusting frequency [" + mFrequencyAdjustmentRequested +
|
||||
// "] correction is now: " + mFrequencyCorrectionControl
|
||||
// .getErrorCorrection() );
|
||||
|
||||
mFrequencyAdjustmentRequested = 0;
|
||||
|
||||
|
||||
@@ -137,25 +137,4 @@ public class P25Interleave
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
public static void main( String[] args )
|
||||
{
|
||||
int start = 0;
|
||||
int end = 144;
|
||||
int set = 50;
|
||||
|
||||
String interleaved = "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
|
||||
|
||||
BinaryMessage b = BinaryMessage.load( interleaved );
|
||||
|
||||
b.set( set );
|
||||
|
||||
mLog.debug( "INT:" + b.toString() );
|
||||
|
||||
P25Interleave.deinterleaveVoice( b, start, end );
|
||||
|
||||
mLog.debug( "DEI:" + b.toString() );
|
||||
|
||||
mLog.debug( "In: " + set + " Out:" + b.nextSetBit( 0 ) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,7 +165,7 @@ public class P25AudioModule extends Module implements Listener<Message>,
|
||||
}
|
||||
else
|
||||
{
|
||||
mLog.debug( "JMBE library version 0.3.1 or higher is required - found: " + library.getVersion() );
|
||||
mLog.warn( "JMBE library version 0.3.1 or higher is required - found: " + library.getVersion() );
|
||||
}
|
||||
}
|
||||
catch ( ClassNotFoundException e1 )
|
||||
|
||||
@@ -229,16 +229,4 @@ public class LDU2Message extends LDUMessage
|
||||
{
|
||||
return mMessage.getInt( KEY_ID );
|
||||
}
|
||||
|
||||
public static void main( String[] args )
|
||||
{
|
||||
String msg = "001010100000101010011010001001001001010011000111000111110111001100000010000101001011110111111000001100111100110000000010001110011011001101101101101101110011110011010000101111001111000011000010110010011110110010000100101101101001100000100000100001011100000000001110011111011000100100000000011011100000111111111101111010110111000111100011010111111110111000000000000000000000000000000000000000000100100001110110101111011000011010010100011001000101001011100101111011000001101100010101111001000100001111011111011001111110100111001100110110000000000000000000000000000000000000000000000101000001011110111010110010000100010110001100001101001110111001000111100100111011011011110101011111011000010100110111001000101000010011101010000000000000000000000000000000000000000001001000001000011011110110011110011001111100100000111000101001110111011110101001000101001100001110001100000000110000110000001011110000000101100110000011100000000000000000000000000000000111011001010000111111111111110000110110011000100101011000001111110000101000101111010101010101000100110111000100100111110010101010000100111010111010111010001011010010001011011001001001011100000101000010010010111100000110010000101010000110101100101111100110111100010001011011110101001011010100010000111000010000001001001001101000100110101011110100111100011111110101100000011011011001000001010100011001010100110000111100101011100110110011111100011011111110100111011101011111100001111011000101100011101000110001101000000000000000000000000000000000010001101101011101111010101010000111011011101001011111001110111001000010101011010000001011010111010000011011001100010110001010001000010001101101";
|
||||
|
||||
BinaryMessage message = BinaryMessage.load( msg );
|
||||
|
||||
LDU2Message ldu2 = new LDU2Message( message, DataUnitID.LDU2, null );
|
||||
|
||||
mLog.debug( ldu2.getMessage() );
|
||||
mLog.debug( "CRC: " + CRC.format( ldu2.getCRCResults() ));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,6 +129,7 @@ public class ChannelState extends Module implements ICallEventProvider,
|
||||
@Override
|
||||
public void stop()
|
||||
{
|
||||
mSquelchLocked = false;
|
||||
}
|
||||
|
||||
public void dispose()
|
||||
|
||||
@@ -19,11 +19,19 @@ package sample;
|
||||
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import module.decode.state.ChannelState;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Broadcasts a received float sample to multiple listeners
|
||||
*/
|
||||
public class Broadcaster<T> implements Listener<T>
|
||||
{
|
||||
private final static Logger mLog =
|
||||
LoggerFactory.getLogger( Broadcaster.class );
|
||||
|
||||
private CopyOnWriteArrayList<Listener<T>> mListeners =
|
||||
new CopyOnWriteArrayList<Listener<T>>();
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ public class AirspyTuner extends Tuner
|
||||
}
|
||||
catch ( SourceException e )
|
||||
{
|
||||
mLog.debug( "Error while getting sample rate from controller", e );
|
||||
mLog.error( "Error while getting sample rate from controller", e );
|
||||
}
|
||||
|
||||
return rate;
|
||||
|
||||
@@ -597,7 +597,7 @@ public class AirspyTunerController extends TunerController
|
||||
{
|
||||
int count = EndianUtils.readSwappedInteger( rawCount, 0 );
|
||||
|
||||
mLog.debug( "There are [" + count + "] sample rates available" );
|
||||
mLog.info( "There are [" + count + "] sample rates available" );
|
||||
|
||||
byte[] rawRates = readArray( Command.GET_SAMPLE_RATES, 0,
|
||||
count, ( count * 4 ) );
|
||||
@@ -898,7 +898,7 @@ public class AirspyTunerController extends TunerController
|
||||
source = new TunerChannelSource( threadPoolManager,
|
||||
tuner, tunerChannel );
|
||||
}
|
||||
|
||||
|
||||
return source;
|
||||
}
|
||||
|
||||
|
||||
@@ -927,7 +927,7 @@ public class HackRFTunerController extends TunerController
|
||||
{
|
||||
if( mRunning.compareAndSet( false, true ) )
|
||||
{
|
||||
mLog.debug( "starting sample fetch thread" );
|
||||
mLog.info( "starting HackRF sample fetch thread" );
|
||||
|
||||
prepareTransfers();
|
||||
|
||||
@@ -969,7 +969,7 @@ public class HackRFTunerController extends TunerController
|
||||
{
|
||||
if( mRunning.compareAndSet( true, false ) )
|
||||
{
|
||||
mLog.debug( "stopping sample fetch thread" );
|
||||
mLog.info( "stopping HackRF sample fetch thread" );
|
||||
|
||||
cancel();
|
||||
|
||||
|
||||
@@ -207,8 +207,9 @@ public class DFTProcessor implements Listener<ComplexBuffer>,
|
||||
}
|
||||
catch ( InterruptedException e )
|
||||
{
|
||||
mLog.error( "DFTProcessor - exception while awaiting shutdown of "
|
||||
+ "calculation scheduler for reset", e );
|
||||
/* Do nothing ... we're shutting down */
|
||||
// mLog.error( "DFTProcessor - exception while awaiting shutdown of "
|
||||
// + "calculation scheduler for reset", e );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import java.awt.geom.Line2D;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import javax.swing.JPanel;
|
||||
@@ -96,9 +97,9 @@ public class OverlayPanel extends JPanel
|
||||
private Color mColorSpectrumCursor;
|
||||
private Color mColorSpectrumLine;
|
||||
|
||||
//All channels
|
||||
private ArrayList<Channel> mChannels = new ArrayList<Channel>();
|
||||
|
||||
// //All channels
|
||||
// private List<Channel> mChannels = new ArrayList<Channel>();
|
||||
//
|
||||
//Currently visible/displayable channels
|
||||
private CopyOnWriteArrayList<Channel> mVisibleChannels =
|
||||
new CopyOnWriteArrayList<Channel>();
|
||||
@@ -151,7 +152,7 @@ public class OverlayPanel extends JPanel
|
||||
|
||||
mChannelManager = null;
|
||||
|
||||
mChannels.clear();
|
||||
// mChannels.clear();
|
||||
mVisibleChannels.clear();
|
||||
|
||||
if( mSettingsManager != null )
|
||||
@@ -678,7 +679,7 @@ public class OverlayPanel extends JPanel
|
||||
long minimum = getMinFrequency();
|
||||
long maximum = getMaxFrequency();
|
||||
|
||||
for( Channel channel: mChannels )
|
||||
for( Channel channel: mChannelManager.getChannels() )
|
||||
{
|
||||
if( channel.isWithin( minimum, maximum ) )
|
||||
{
|
||||
@@ -698,12 +699,12 @@ public class OverlayPanel extends JPanel
|
||||
|
||||
switch( event.getEvent() )
|
||||
{
|
||||
case CHANNEL_ADDED:
|
||||
// case CHANNEL_ADDED:
|
||||
case CHANNEL_ENABLED:
|
||||
if( !mChannels.contains( channel ) )
|
||||
{
|
||||
mChannels.add( channel );
|
||||
}
|
||||
// if( !mChannels.contains( channel ) )
|
||||
// {
|
||||
// mChannels.add( channel );
|
||||
// }
|
||||
|
||||
if( channel.isWithin( getMinFrequency(), getMaxFrequency() ) &&
|
||||
!mVisibleChannels.contains( channel ) )
|
||||
@@ -712,13 +713,13 @@ public class OverlayPanel extends JPanel
|
||||
}
|
||||
break;
|
||||
case CHANNEL_DELETED:
|
||||
mChannels.remove( channel );
|
||||
// mChannels.remove( channel );
|
||||
mVisibleChannels.remove( channel );
|
||||
break;
|
||||
case CHANNEL_PROCESSING_STOPPED:
|
||||
if( channel.getChannelType() == ChannelType.TRAFFIC )
|
||||
{
|
||||
mChannels.remove( channel );
|
||||
// mChannels.remove( channel );
|
||||
mVisibleChannels.remove( channel );
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user