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:
denny
2015-11-22 14:25:37 -05:00
parent 547da54340
commit f04a6727b0
18 changed files with 64 additions and 171 deletions

View File

@@ -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()
{

View File

@@ -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;

View File

@@ -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 ) );
}
}

View File

@@ -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 )

View File

@@ -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() ));
}
}

View File

@@ -129,6 +129,7 @@ public class ChannelState extends Module implements ICallEventProvider,
@Override
public void stop()
{
mSquelchLocked = false;
}
public void dispose()