mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 08:37:25 -05:00
Converted frequency to long primitive type (from integer) in anticipation of HackRF support which requires frequencies greater than 2.147 GHz, which is the max hertz value that can be represented by an integer primitive.
This commit is contained in:
@@ -40,7 +40,7 @@ public abstract class Source
|
||||
|
||||
public abstract int getSampleRate() throws SourceException;
|
||||
|
||||
public abstract int getFrequency() throws SourceException;
|
||||
public abstract long getFrequency() throws SourceException;
|
||||
|
||||
public abstract void dispose();
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ public class SourceConfigTuner extends SourceConfiguration
|
||||
{
|
||||
private static DecimalFormat sFORMAT = new DecimalFormat( "0.00000" );
|
||||
|
||||
private int mFrequency = 0;
|
||||
private long mFrequency = 0;
|
||||
|
||||
public SourceConfigTuner()
|
||||
{
|
||||
@@ -35,12 +35,12 @@ public class SourceConfigTuner extends SourceConfiguration
|
||||
}
|
||||
|
||||
@XmlAttribute( name = "frequency" )
|
||||
public int getFrequency()
|
||||
public long getFrequency()
|
||||
{
|
||||
return mFrequency;
|
||||
}
|
||||
|
||||
public void setFrequency( int frequency )
|
||||
public void setFrequency( long frequency )
|
||||
{
|
||||
mFrequency = frequency;
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ import source.SourceException;
|
||||
|
||||
public class MixerSource extends FloatArraySource
|
||||
{
|
||||
private int mFrequency = 0;
|
||||
private long mFrequency = 0;
|
||||
private int mBufferSize = 16384;
|
||||
|
||||
private BufferReader mBufferReader = new BufferReader();
|
||||
@@ -141,7 +141,7 @@ public class MixerSource extends FloatArraySource
|
||||
/**
|
||||
* Returns the frequency of this source. Default is 0.
|
||||
*/
|
||||
public int getFrequency() throws SourceException
|
||||
public long getFrequency() throws SourceException
|
||||
{
|
||||
return mFrequency;
|
||||
}
|
||||
@@ -151,7 +151,7 @@ public class MixerSource extends FloatArraySource
|
||||
* be useful if you are streaming an external audio source in through the
|
||||
* sound card and you want to specify a frequency for that source
|
||||
*/
|
||||
public void setFrequency( int frequency )
|
||||
public void setFrequency( long frequency )
|
||||
{
|
||||
mFrequency = frequency;
|
||||
}
|
||||
|
||||
@@ -1,152 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* SDR Trunk
|
||||
* Copyright (C) 2014 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 source.tuner;
|
||||
|
||||
import sample.Broadcaster;
|
||||
import sample.Listener;
|
||||
import sample.complex.ComplexSample;
|
||||
import dsp.filter.ComplexFilter;
|
||||
import dsp.filter.FilterFactory;
|
||||
import dsp.filter.Window.WindowType;
|
||||
|
||||
@Deprecated
|
||||
public class DigitalDropChannel implements Listener<ComplexSample>,
|
||||
FrequencyChangeListener
|
||||
{
|
||||
/**
|
||||
* Implements a frequency translating, decimating FIR filter channelizer.
|
||||
*
|
||||
* Uses multiple cascaded half-band low pass filters that each decimate by
|
||||
* two, to achieve an overall power-of-two decimation factor.
|
||||
*
|
||||
* @param decimation - power of 2 decimation factor
|
||||
*
|
||||
* @param frequencyShift +/- frequency shift in hertz
|
||||
*/
|
||||
|
||||
private static int sCHANNEL_RATE = 48000;
|
||||
private static int sCHANNEL_PASS_FREQUENCY = 12500;
|
||||
|
||||
private NumericallyControlledOscillator mFrequencyTranslator;
|
||||
|
||||
private ComplexFilter[] mFilters;
|
||||
|
||||
private Broadcaster<ComplexSample> mComplexSampleBroadcaster =
|
||||
new Broadcaster<ComplexSample>();
|
||||
|
||||
private int mSampleRate;
|
||||
private int mFrequencyShift;
|
||||
|
||||
public DigitalDropChannel( int sampleRate, int frequencyShift )
|
||||
{
|
||||
if( sampleRate % sCHANNEL_RATE != 0 )
|
||||
{
|
||||
throw new IllegalArgumentException( "Sample rate must be an "
|
||||
+ "integer multiple of 48000" );
|
||||
}
|
||||
|
||||
mFrequencyShift = frequencyShift;
|
||||
|
||||
setSampleRate( sampleRate );
|
||||
}
|
||||
|
||||
private void setSampleRate( int sampleRate )
|
||||
{
|
||||
if( sampleRate != mSampleRate )
|
||||
{
|
||||
/* Setup or adjust the frequency translator */
|
||||
if( mFrequencyTranslator == null )
|
||||
{
|
||||
mFrequencyTranslator =
|
||||
new NumericallyControlledOscillator( mFrequencyShift,
|
||||
sampleRate );
|
||||
}
|
||||
else
|
||||
{
|
||||
mFrequencyTranslator.setSampleRate( sampleRate );
|
||||
}
|
||||
|
||||
/* Get new decimation filters */
|
||||
mFilters = FilterFactory
|
||||
.getDecimationFilters( sampleRate,
|
||||
sCHANNEL_RATE,
|
||||
sCHANNEL_PASS_FREQUENCY,
|
||||
48, //dB attenuation
|
||||
WindowType.HAMMING );
|
||||
|
||||
/* wire the first filter stage to the frequency translator */
|
||||
// mFrequencyTranslator.setListener( mFilters[ 0 ] );
|
||||
|
||||
/* wire the remaining filters together */
|
||||
if( mFilters.length > 1 )
|
||||
{
|
||||
for( int x = 1; x < mFilters.length; x++ )
|
||||
{
|
||||
mFilters[ x - 1 ].setListener( mFilters[ x ] );
|
||||
}
|
||||
}
|
||||
|
||||
/* Add the sample broadcaster as a listener to the final filter */
|
||||
// mFilters[ mFilters.length - 1 ].setListener( mComplexSampleBroadcaster );
|
||||
|
||||
mSampleRate = sampleRate;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void frequencyChanged( int frequency, int bandwidth )
|
||||
{
|
||||
mFrequencyTranslator.setFrequency( frequency );
|
||||
|
||||
if( bandwidth != mSampleRate )
|
||||
{
|
||||
setSampleRate( bandwidth );
|
||||
}
|
||||
}
|
||||
|
||||
public int getFrequencyOffset()
|
||||
{
|
||||
return mFrequencyTranslator.getFrequency();
|
||||
}
|
||||
|
||||
public void addListener( Listener<ComplexSample> listener )
|
||||
{
|
||||
mComplexSampleBroadcaster.addListener( listener );
|
||||
}
|
||||
|
||||
public void removeListener( Listener<ComplexSample> listener )
|
||||
{
|
||||
mComplexSampleBroadcaster.removeListener( listener );
|
||||
}
|
||||
|
||||
public int getListenerCount()
|
||||
{
|
||||
return mComplexSampleBroadcaster.getListenerCount();
|
||||
}
|
||||
|
||||
public void removeListeners()
|
||||
{
|
||||
mComplexSampleBroadcaster.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void receive( ComplexSample sample )
|
||||
{
|
||||
mFrequencyTranslator.receive( sample );
|
||||
}
|
||||
}
|
||||
@@ -34,5 +34,5 @@ public interface FrequencyChangeListener
|
||||
* @param frequency - uncorrected frequency in hertz
|
||||
* @param bandwidth - bandwidth in hertz
|
||||
*/
|
||||
public void frequencyChanged( int frequency, int bandwidth );
|
||||
public void frequencyChanged( long frequency, int bandwidth );
|
||||
}
|
||||
|
||||
@@ -24,10 +24,10 @@ import source.SourceException;
|
||||
public class FrequencyController
|
||||
{
|
||||
private Tunable mTunable;
|
||||
private int mFrequency = 101100000;
|
||||
private int mTunedFrequency = 101100000;
|
||||
private int mMinimumFrequency;
|
||||
private int mMaximumFrequency;
|
||||
private long mFrequency = 101100000;
|
||||
private long mTunedFrequency = 101100000;
|
||||
private long mMinimumFrequency;
|
||||
private long mMaximumFrequency;
|
||||
private double mFrequencyCorrection = 0d;
|
||||
private int mBandwidth = 0;
|
||||
|
||||
@@ -35,8 +35,8 @@ public class FrequencyController
|
||||
new ArrayList<FrequencyChangeListener>();
|
||||
|
||||
public FrequencyController( Tunable tunable,
|
||||
int minFrequency,
|
||||
int maxFrequency,
|
||||
long minFrequency,
|
||||
long maxFrequency,
|
||||
double frequencyCorrection ) throws SourceException
|
||||
{
|
||||
mTunable = tunable;
|
||||
@@ -66,7 +66,7 @@ public class FrequencyController
|
||||
/**
|
||||
* Get frequency in hertz
|
||||
*/
|
||||
public int getFrequency()
|
||||
public long getFrequency()
|
||||
{
|
||||
return mFrequency;
|
||||
}
|
||||
@@ -77,7 +77,7 @@ public class FrequencyController
|
||||
* @throws SourceException if tunable doesn't support tuning a corrected
|
||||
* version of the requested frequency
|
||||
*/
|
||||
public void setFrequency( int frequency ) throws SourceException
|
||||
public void setFrequency( long frequency ) throws SourceException
|
||||
{
|
||||
setFrequency( frequency, true );
|
||||
}
|
||||
@@ -87,10 +87,10 @@ public class FrequencyController
|
||||
* method supports changing the frequency correction value without
|
||||
* broadcasting a frequency change event.
|
||||
*/
|
||||
private void setFrequency( int frequency, boolean broadcastChange )
|
||||
private void setFrequency( long frequency, boolean broadcastChange )
|
||||
throws SourceException
|
||||
{
|
||||
int tunedFrequency = getTunedFrequency( frequency );
|
||||
long tunedFrequency = getTunedFrequency( frequency );
|
||||
|
||||
if( tunedFrequency < mMinimumFrequency ||
|
||||
tunedFrequency > mMaximumFrequency )
|
||||
@@ -114,17 +114,17 @@ public class FrequencyController
|
||||
}
|
||||
}
|
||||
|
||||
public int getTunedFrequency()
|
||||
public long getTunedFrequency()
|
||||
{
|
||||
return mTunedFrequency;
|
||||
}
|
||||
|
||||
public int getMinimumFrequency()
|
||||
public long getMinimumFrequency()
|
||||
{
|
||||
return mMinimumFrequency;
|
||||
}
|
||||
|
||||
public int getMaximumFrequency()
|
||||
public long getMaximumFrequency()
|
||||
{
|
||||
return mMaximumFrequency;
|
||||
}
|
||||
@@ -134,9 +134,9 @@ public class FrequencyController
|
||||
* corrected frequency.
|
||||
* @param correctedFrequency
|
||||
*/
|
||||
private int getTunedFrequency( int correctedFrequency )
|
||||
private long getTunedFrequency( long correctedFrequency )
|
||||
{
|
||||
return (int)( (double)correctedFrequency /
|
||||
return (long)( (double)correctedFrequency /
|
||||
( 1.0 + ( mFrequencyCorrection / 1000000.0 ) ) );
|
||||
}
|
||||
|
||||
@@ -145,7 +145,7 @@ public class FrequencyController
|
||||
* from the tuned frequency.
|
||||
* @param tunedFrequency
|
||||
*/
|
||||
private int getCorrectedFrequency( int tunedFrequency )
|
||||
private long getCorrectedFrequency( long tunedFrequency )
|
||||
{
|
||||
return (int)( (double)tunedFrequency /
|
||||
( 1.0 - ( mFrequencyCorrection / 1000000.0 ) ) );
|
||||
@@ -205,12 +205,12 @@ public class FrequencyController
|
||||
/**
|
||||
* Gets the tuned frequency of the device
|
||||
*/
|
||||
public int getTunedFrequency() throws SourceException;
|
||||
public long getTunedFrequency() throws SourceException;
|
||||
|
||||
/**
|
||||
* Sets the tuned frequency of the device
|
||||
*/
|
||||
public void setTunedFrequency( int frequency ) throws SourceException;
|
||||
public void setTunedFrequency( long frequency ) throws SourceException;
|
||||
|
||||
/**
|
||||
* Gets the current bandwidth setting of the device
|
||||
|
||||
@@ -26,7 +26,7 @@ import util.Oscillator;
|
||||
public class NumericallyControlledOscillator implements Listener<ComplexSample>,
|
||||
FrequencyChangeListener
|
||||
{
|
||||
private int mFrequency;
|
||||
private long mFrequency;
|
||||
private int mSampleRate;
|
||||
private Oscillator mSineWaveGenerator;
|
||||
private Listener<ComplexSample> mListener;
|
||||
@@ -39,7 +39,7 @@ public class NumericallyControlledOscillator implements Listener<ComplexSample>,
|
||||
* shifted outside of the sampling bandwidth will wrap around, due to the
|
||||
* nature of quadrature sampling.
|
||||
*/
|
||||
public NumericallyControlledOscillator( int frequencyShift, int sampleRate )
|
||||
public NumericallyControlledOscillator( long frequencyShift, int sampleRate )
|
||||
{
|
||||
mFrequency = frequencyShift;
|
||||
mSampleRate = sampleRate;
|
||||
@@ -66,7 +66,7 @@ public class NumericallyControlledOscillator implements Listener<ComplexSample>,
|
||||
}
|
||||
|
||||
@Override
|
||||
public void frequencyChanged( int frequency, int bandwidth )
|
||||
public void frequencyChanged( long frequency, int bandwidth )
|
||||
{
|
||||
if( frequency != mFrequency )
|
||||
{
|
||||
@@ -84,7 +84,7 @@ public class NumericallyControlledOscillator implements Listener<ComplexSample>,
|
||||
* all subsequent samples will be output at the new translated frequency
|
||||
* @param frequency - hertz
|
||||
*/
|
||||
public void setFrequency( int frequency )
|
||||
public void setFrequency( long frequency )
|
||||
{
|
||||
Log.info( "NumericallyControlledOscillator - setting sine wave gen to freq:" + frequency );
|
||||
|
||||
@@ -96,7 +96,7 @@ public class NumericallyControlledOscillator implements Listener<ComplexSample>,
|
||||
* Current frequency shift setting
|
||||
* @return - frequency - hertz
|
||||
*/
|
||||
public int getFrequency()
|
||||
public long getFrequency()
|
||||
{
|
||||
return mFrequency;
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ public abstract class Tuner implements FrequencyChangeBroadcaster,
|
||||
* Tuner Local Oscillator Frequency
|
||||
* @return - frequency in Hertz
|
||||
*/
|
||||
public abstract int getFrequency() throws SourceException;
|
||||
public abstract long getFrequency() throws SourceException;
|
||||
|
||||
/**
|
||||
* Returns a tuner frequency channel source, tuned to the correct frequency
|
||||
@@ -171,7 +171,7 @@ public abstract class Tuner implements FrequencyChangeBroadcaster,
|
||||
/**
|
||||
* Broadcasts a frequency change event to all registered listeners
|
||||
*/
|
||||
public void broadcastFrequencyChange( int frequency, int bandwidth )
|
||||
public void broadcastFrequencyChange( long frequency, int bandwidth )
|
||||
{
|
||||
for( FrequencyChangeListener listener: mFrequencyChangeListeners )
|
||||
{
|
||||
@@ -183,7 +183,7 @@ public abstract class Tuner implements FrequencyChangeBroadcaster,
|
||||
* Frequency change listener method. We receive change events from the
|
||||
* controller and rebroadcast them to all registered listeners.
|
||||
*/
|
||||
public void frequencyChanged( int frequency, int bandwidth )
|
||||
public void frequencyChanged( long frequency, int bandwidth )
|
||||
{
|
||||
broadcastFrequencyChange( frequency, bandwidth );
|
||||
}
|
||||
|
||||
@@ -20,10 +20,10 @@ package source.tuner;
|
||||
public class TunerChannel implements Comparable<TunerChannel>
|
||||
{
|
||||
private Type mType;
|
||||
private int mFrequency;
|
||||
private long mFrequency;
|
||||
private int mBandwidth;
|
||||
|
||||
public TunerChannel( Type type, int frequency, int bandwidth )
|
||||
public TunerChannel( Type type, long frequency, int bandwidth )
|
||||
{
|
||||
mType = type;
|
||||
mFrequency = frequency;
|
||||
@@ -40,12 +40,12 @@ public class TunerChannel implements Comparable<TunerChannel>
|
||||
mType = type;
|
||||
}
|
||||
|
||||
public int getFrequency()
|
||||
public long getFrequency()
|
||||
{
|
||||
return mFrequency;
|
||||
}
|
||||
|
||||
public void setFrequency( int frequency )
|
||||
public void setFrequency( long frequency )
|
||||
{
|
||||
mFrequency = frequency;
|
||||
}
|
||||
@@ -60,12 +60,12 @@ public class TunerChannel implements Comparable<TunerChannel>
|
||||
mBandwidth = bandwidth;
|
||||
}
|
||||
|
||||
public int getMinFrequency()
|
||||
public long getMinFrequency()
|
||||
{
|
||||
return mFrequency - ( mBandwidth / 2 );
|
||||
}
|
||||
|
||||
public int getMaxFrequency()
|
||||
public long getMaxFrequency()
|
||||
{
|
||||
return mFrequency + ( mBandwidth / 2 );
|
||||
}
|
||||
@@ -74,7 +74,7 @@ public class TunerChannel implements Comparable<TunerChannel>
|
||||
* Indicates if any part of this tuner channel is contained within the
|
||||
* minimum and maximum frequency values.
|
||||
*/
|
||||
public boolean isWithin( int minimum, int maximum )
|
||||
public boolean isWithin( long minimum, long maximum )
|
||||
{
|
||||
return ( ( minimum <= getMinFrequency() && getMinFrequency() <= maximum ) ||
|
||||
( minimum <= getMaxFrequency() && getMaxFrequency() <= maximum ) );
|
||||
|
||||
@@ -55,7 +55,7 @@ public class TunerChannelSource extends ComplexSource
|
||||
|
||||
private ComplexSampleAssembler mBufferAssembler =
|
||||
new ComplexSampleAssembler( 3000 );
|
||||
private int mTunerFrequency;
|
||||
private long mTunerFrequency;
|
||||
private int mTunerSampleRate;
|
||||
private ThreadPoolManager mThreadPoolManager;
|
||||
private ScheduledFuture<?> mTaskHandle;
|
||||
@@ -153,13 +153,13 @@ public class TunerChannelSource extends ComplexSource
|
||||
}
|
||||
|
||||
@Override
|
||||
public void frequencyChanged( int frequency, int bandwidth )
|
||||
public void frequencyChanged( long frequency, int bandwidth )
|
||||
{
|
||||
|
||||
/* Frequency change */
|
||||
if( frequency != mTunerFrequency )
|
||||
{
|
||||
int frequencyOffset = frequency - mTunerChannel.getFrequency();
|
||||
long frequencyOffset = frequency - mTunerChannel.getFrequency();
|
||||
|
||||
if( mSineWaveGenerator == null )
|
||||
{
|
||||
@@ -180,7 +180,7 @@ public class TunerChannelSource extends ComplexSource
|
||||
/* Bandwidth/Sample rate change */
|
||||
if( bandwidth != mTunerSampleRate )
|
||||
{
|
||||
int frequencyOffset = frequency - mTunerChannel.getFrequency();
|
||||
long frequencyOffset = frequency - mTunerChannel.getFrequency();
|
||||
|
||||
if( mSineWaveGenerator == null )
|
||||
{
|
||||
@@ -225,7 +225,7 @@ public class TunerChannelSource extends ComplexSource
|
||||
return mTuner.getSampleRate();
|
||||
}
|
||||
|
||||
public int getFrequency() throws SourceException
|
||||
public long getFrequency() throws SourceException
|
||||
{
|
||||
return mTuner.getFrequency();
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ public abstract class TunerController implements Tunable
|
||||
* @throws SourceException - for any issues related to constructing the
|
||||
* class, tuning a frequency, or setting the bandwidth
|
||||
*/
|
||||
public TunerController( int minimumFrequency, int maximumFrequency )
|
||||
public TunerController( long minimumFrequency, long maximumFrequency )
|
||||
throws SourceException
|
||||
{
|
||||
mFrequencyController = new FrequencyController( this,
|
||||
@@ -71,7 +71,7 @@ public abstract class TunerController implements Tunable
|
||||
* @param frequency in hertz
|
||||
* @throws SourceException - if the tuner has any issues
|
||||
*/
|
||||
public void setFrequency( int frequency ) throws SourceException
|
||||
public void setFrequency( long frequency ) throws SourceException
|
||||
{
|
||||
mFrequencyController.setFrequency( frequency );
|
||||
}
|
||||
@@ -81,7 +81,7 @@ public abstract class TunerController implements Tunable
|
||||
*
|
||||
* @return frequency in hertz
|
||||
*/
|
||||
public int getFrequency()
|
||||
public long getFrequency()
|
||||
{
|
||||
return mFrequencyController.getFrequency();
|
||||
}
|
||||
@@ -96,12 +96,12 @@ public abstract class TunerController implements Tunable
|
||||
mFrequencyController.setFrequencyCorrection( correction );
|
||||
}
|
||||
|
||||
public int getMinFrequency()
|
||||
public long getMinFrequency()
|
||||
{
|
||||
return mFrequencyController.getMinimumFrequency();
|
||||
}
|
||||
|
||||
public int getMaxFrequency()
|
||||
public long getMaxFrequency()
|
||||
{
|
||||
return mFrequencyController.getMaximumFrequency();
|
||||
}
|
||||
@@ -127,8 +127,8 @@ public abstract class TunerController implements Tunable
|
||||
//Sort the existing locks and get the min/max locked frequencies
|
||||
Collections.sort( mTunedChannels );
|
||||
|
||||
int minLockedFrequency = mTunedChannels.get( 0 ).getMinFrequency();
|
||||
int maxLockedFrequency = mTunedChannels
|
||||
long minLockedFrequency = mTunedChannels.get( 0 ).getMinFrequency();
|
||||
long maxLockedFrequency = mTunedChannels
|
||||
.get( mTunedChannels.size() - 1 ).getMaxFrequency();
|
||||
|
||||
//Requested channel is higher than min locked frequency
|
||||
@@ -195,14 +195,14 @@ public abstract class TunerController implements Tunable
|
||||
{
|
||||
Collections.sort( mTunedChannels );
|
||||
|
||||
int minLockedFrequency = mTunedChannels.get( 0 ).getMinFrequency();
|
||||
int maxLockedFrequency = mTunedChannels
|
||||
long minLockedFrequency = mTunedChannels.get( 0 ).getMinFrequency();
|
||||
long maxLockedFrequency = mTunedChannels
|
||||
.get( mTunedChannels.size() - 1 ).getMaxFrequency();
|
||||
|
||||
int middle = minLockedFrequency +
|
||||
long middle = minLockedFrequency +
|
||||
( ( maxLockedFrequency - minLockedFrequency ) / 2 );
|
||||
int middleMin = middle - 10000;
|
||||
int middleMax = middle + 10000;
|
||||
long middleMin = middle - 10000;
|
||||
long middleMax = middle + 10000;
|
||||
|
||||
Iterator<TunerChannel> it = mTunedChannels.iterator();
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ public class TunerNode extends BaseNode implements FrequencyChangeListener
|
||||
private static DecimalFormat FREQUENCY_FORMAT = new DecimalFormat( "0.00000" );
|
||||
private static DecimalFormat SAMPLE_RATE_FORMAT = new DecimalFormat( "0.000" );
|
||||
|
||||
private int mFrequency;
|
||||
private long mFrequency;
|
||||
private int mBandwidth;
|
||||
|
||||
public TunerNode( Tuner tuner )
|
||||
@@ -117,7 +117,7 @@ public class TunerNode extends BaseNode implements FrequencyChangeListener
|
||||
}
|
||||
|
||||
@Override
|
||||
public void frequencyChanged( int frequency, int bandwidth )
|
||||
public void frequencyChanged( long frequency, int bandwidth )
|
||||
{
|
||||
mFrequency = frequency;
|
||||
mBandwidth = bandwidth;
|
||||
|
||||
@@ -78,7 +78,7 @@ public class B100Tuner extends Tuner
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFrequency() throws SourceException
|
||||
public long getFrequency() throws SourceException
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ public class FCDTuner extends MixerTuner
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFrequency() throws SourceException
|
||||
public long getFrequency() throws SourceException
|
||||
{
|
||||
return mController.getFrequency();
|
||||
}
|
||||
|
||||
@@ -55,7 +55,6 @@ public abstract class FCDTunerController extends TunerController
|
||||
private UsbPipe mPipeIn;
|
||||
private UsbPipe mPipeOut;
|
||||
private FCDConfiguration mConfiguration = new FCDConfiguration();
|
||||
private int mSampleRate;
|
||||
|
||||
public FCDTunerController( USBTunerDevice device,
|
||||
int minTunableFrequency,
|
||||
@@ -147,7 +146,7 @@ public abstract class FCDTunerController extends TunerController
|
||||
/**
|
||||
* Sets the actual (uncorrected) device frequency
|
||||
*/
|
||||
public void setTunedFrequency( int frequency ) throws SourceException
|
||||
public void setTunedFrequency( long frequency ) throws SourceException
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -163,11 +162,11 @@ public abstract class FCDTunerController extends TunerController
|
||||
/**
|
||||
* Gets the actual (uncorrected) device frequency
|
||||
*/
|
||||
public int getTunedFrequency() throws SourceException
|
||||
public long getTunedFrequency() throws SourceException
|
||||
{
|
||||
try
|
||||
{
|
||||
return (int)send( FCDCommand.APP_GET_FREQUENCY_HZ );
|
||||
return send( FCDCommand.APP_GET_FREQUENCY_HZ );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
|
||||
@@ -86,7 +86,7 @@ public class FCD1TunerEditorPanel extends JPanel implements FrequencyChangeListe
|
||||
}
|
||||
|
||||
@Override
|
||||
public void frequencyChanged( int frequency, int bandwidth )
|
||||
public void frequencyChanged( long frequency, int bandwidth )
|
||||
{
|
||||
//Disregard the bandwidth value, which shouldn't be changing
|
||||
try
|
||||
|
||||
@@ -85,7 +85,7 @@ public class FCD2TunerEditorPanel extends JPanel implements FrequencyChangeListe
|
||||
}
|
||||
|
||||
@Override
|
||||
public void frequencyChanged( int frequency, int bandwidth )
|
||||
public void frequencyChanged( long frequency, int bandwidth )
|
||||
{
|
||||
//Disregard the bandwidth, which shouldn't be changing
|
||||
try
|
||||
|
||||
@@ -119,7 +119,7 @@ public class RTL2832Tuner extends Tuner
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFrequency() throws SourceException
|
||||
public long getFrequency() throws SourceException
|
||||
{
|
||||
return mController.getFrequency();
|
||||
}
|
||||
|
||||
@@ -166,8 +166,8 @@ public abstract class RTL2832TunerController extends TunerController
|
||||
* tuner controller class for that tuner type.
|
||||
*/
|
||||
public RTL2832TunerController( USBTunerDevice tunerDevice,
|
||||
int minTunableFrequency,
|
||||
int maxTunableFrequency ) throws SourceException
|
||||
long minTunableFrequency,
|
||||
long maxTunableFrequency ) throws SourceException
|
||||
{
|
||||
super( minTunableFrequency, maxTunableFrequency );
|
||||
|
||||
|
||||
@@ -36,10 +36,10 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
*
|
||||
* TODO: change frequency to a long primitive type
|
||||
*/
|
||||
public static final int sMIN_FREQUENCY = 52000000;
|
||||
public static final int sMIN_FREQUENCY_EXTENDED = 52000000;
|
||||
public static final int sMAX_FREQUENCY = 2147000000;
|
||||
public static final int sMAX_FREQUENCY_EXTENDED = 2147000000;
|
||||
public static final long sMIN_FREQUENCY = 52000000;
|
||||
public static final long sMIN_FREQUENCY_EXTENDED = 52000000;
|
||||
public static final long sMAX_FREQUENCY = 2200000000l;
|
||||
public static final long sMAX_FREQUENCY_EXTENDED = 2200000000l;
|
||||
public static final long sMIN_VCO = 2600000000l; //2.6 GHz
|
||||
public static final long sMAX_VCO = 3900000000l; //3.9 GHz
|
||||
|
||||
@@ -236,7 +236,7 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTunedFrequency() throws SourceException
|
||||
public long getTunedFrequency() throws SourceException
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -276,7 +276,7 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTunedFrequency( int frequency ) throws SourceException
|
||||
public void setTunedFrequency( long frequency ) throws SourceException
|
||||
{
|
||||
/* Get the phase locked loop setting */
|
||||
PLL pll = PLL.fromFrequency( frequency );
|
||||
@@ -288,13 +288,13 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
/* remainder is just as it describes. It is what is left over after we
|
||||
* carve out scaled oscillator frequency increments (z) from the desired
|
||||
* frequency. */
|
||||
int remainder = frequency - ( ( z & 0xFF ) * pll.getScaledOscillator() );
|
||||
int remainder = (int)( frequency - ( ( z & 0xFF ) * pll.getScaledOscillator() ) );
|
||||
|
||||
/* X is a 16-bit representation of the remainder */
|
||||
int x = (int)( (double)remainder / (double)pll.getScaledOscillator() * sE4K_PLL_Y );
|
||||
|
||||
/* Calculate the exact (tunable) frequency and apply that to the tuner */
|
||||
int actualFrequency = calculateActualFrequency( pll, z, x );
|
||||
long actualFrequency = calculateActualFrequency( pll, z, x );
|
||||
|
||||
/**
|
||||
* Hack: if we're trying to set the minimum frequency for the E4K, due
|
||||
@@ -353,9 +353,9 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
}
|
||||
}
|
||||
|
||||
private int calculateActualFrequency( PLL pll, byte z, int x )
|
||||
private long calculateActualFrequency( PLL pll, byte z, int x )
|
||||
{
|
||||
int whole = (int)( pll.getScaledOscillator() * ( z & 0xFF ) );
|
||||
long whole = pll.getScaledOscillator() * ( z & 0xFF );
|
||||
|
||||
int fractional = (int)( pll.getScaledOscillator() *
|
||||
( (double)x / (double)sE4K_PLL_Y ) );
|
||||
@@ -880,7 +880,7 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
}
|
||||
}
|
||||
|
||||
public void setBand( int frequency,
|
||||
public void setBand( long frequency,
|
||||
boolean controlI2CRepeater ) throws UsbException
|
||||
{
|
||||
if( controlI2CRepeater )
|
||||
@@ -918,7 +918,7 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
}
|
||||
}
|
||||
|
||||
private void setRFFilter( int frequency,
|
||||
private void setRFFilter( long frequency,
|
||||
boolean controlI2CRepeater ) throws UsbException
|
||||
{
|
||||
RFFilter filter = RFFilter.fromFrequency( frequency );
|
||||
@@ -1057,7 +1057,7 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
return toString();
|
||||
}
|
||||
|
||||
public static Band fromFrequency( int frequency )
|
||||
public static Band fromFrequency( long frequency )
|
||||
{
|
||||
if( frequency < 140000000 ) //140 MHz
|
||||
{
|
||||
@@ -1092,14 +1092,14 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
PLL_1200M0( 0x01, 1200000000, 4, 7200000, false, "1200.0 MHz" );
|
||||
|
||||
private int mValue;
|
||||
private int mFrequency;
|
||||
private long mFrequency;
|
||||
private int mMultiplier;
|
||||
private int mScaledOscillator;
|
||||
private boolean mRequires3PhaseMixing;
|
||||
private String mLabel;
|
||||
|
||||
private PLL( int value,
|
||||
int frequency,
|
||||
long frequency,
|
||||
int multiplier,
|
||||
int scaledOscillator,
|
||||
boolean requires3Phase,
|
||||
@@ -1119,7 +1119,7 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
return (byte)mValue;
|
||||
}
|
||||
|
||||
public int getFrequency()
|
||||
public long getFrequency()
|
||||
{
|
||||
return mFrequency;
|
||||
}
|
||||
@@ -1151,7 +1151,7 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
|
||||
/* Returns the PLL setting with the closest frequency that is greater
|
||||
* than the frequency argument */
|
||||
public static PLL fromFrequency( int frequency )
|
||||
public static PLL fromFrequency( long frequency )
|
||||
{
|
||||
for( PLL pll: values() )
|
||||
{
|
||||
@@ -1235,10 +1235,10 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
M1750( 15, 1735000000, 2147000000 );
|
||||
|
||||
private int mValue;
|
||||
private int mMinFrequency;
|
||||
private int mMaxFrequency;
|
||||
private long mMinFrequency;
|
||||
private long mMaxFrequency;
|
||||
|
||||
private RFFilter( int value, int minFrequency, int maxFrequency )
|
||||
private RFFilter( int value, long minFrequency, long maxFrequency )
|
||||
{
|
||||
mValue = value;
|
||||
mMinFrequency = minFrequency;
|
||||
@@ -1263,7 +1263,7 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
/**
|
||||
* Minimum frequency for this filter.
|
||||
*/
|
||||
public int getMinimumFrequency()
|
||||
public long getMinimumFrequency()
|
||||
{
|
||||
return mMinFrequency;
|
||||
}
|
||||
@@ -1272,7 +1272,7 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
* Maximum frequency for this filter is less than this value, but does
|
||||
* not include this value.
|
||||
*/
|
||||
public int getMaximumFrequency()
|
||||
public long getMaximumFrequency()
|
||||
{
|
||||
return mMaxFrequency;
|
||||
}
|
||||
@@ -1285,7 +1285,7 @@ public class E4KTunerController extends RTL2832TunerController
|
||||
* @throws IllegalArgumentException if the frequency is outside the
|
||||
* max value (2200 MHz)
|
||||
*/
|
||||
public static RFFilter fromFrequency( int frequency )
|
||||
public static RFFilter fromFrequency( long frequency )
|
||||
{
|
||||
if( frequency < 350000000 )
|
||||
{
|
||||
|
||||
@@ -22,18 +22,17 @@ import gui.control.JFrequencyControl;
|
||||
import java.awt.Color;
|
||||
import java.awt.EventQueue;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import com.jidesoft.swing.JideTabbedPane;
|
||||
|
||||
import log.Log;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import source.SourceComponentEditor;
|
||||
import source.SourceException;
|
||||
import source.tuner.FrequencyChangeListener;
|
||||
import source.tuner.rtl.RTL2832InfoPanel;
|
||||
|
||||
import com.jidesoft.swing.JideTabbedPane;
|
||||
|
||||
import controller.ResourceManager;
|
||||
|
||||
public class E4KTunerEditorPanel extends JPanel implements FrequencyChangeListener
|
||||
@@ -89,7 +88,7 @@ public class E4KTunerEditorPanel extends JPanel implements FrequencyChangeListen
|
||||
* apply end-user requested frequency changes against the tuner
|
||||
*/
|
||||
@Override
|
||||
public void frequencyChanged( final int frequency, int bandwidth )
|
||||
public void frequencyChanged( final long frequency, int bandwidth )
|
||||
{
|
||||
EventQueue.invokeLater( new Runnable()
|
||||
{
|
||||
|
||||
@@ -35,8 +35,8 @@ import controller.ResourceManager;
|
||||
|
||||
public class R820TTunerController extends RTL2832TunerController
|
||||
{
|
||||
public static final int MIN_FREQUENCY = 24000000;
|
||||
public static final int MAX_FREQUENCY = 1766000000;
|
||||
public static final long MIN_FREQUENCY = 24000000;
|
||||
public static final long MAX_FREQUENCY = 1766000000;
|
||||
public static final int R820T_IF_FREQUENCY = 3570000;
|
||||
public static final byte VERSION = (byte)49;
|
||||
|
||||
@@ -136,7 +136,7 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
* Not implemented.
|
||||
*/
|
||||
@Override
|
||||
public int getTunedFrequency() throws SourceException
|
||||
public long getTunedFrequency() throws SourceException
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -146,7 +146,7 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
* of setting the multiplexer and then setting the Oscillator (PLL).
|
||||
*/
|
||||
@Override
|
||||
public void setTunedFrequency( int frequency ) throws SourceException
|
||||
public void setTunedFrequency( long frequency ) throws SourceException
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -154,7 +154,7 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
|
||||
boolean controlI2C = false;
|
||||
|
||||
int offsetFrequency = frequency + R820T_IF_FREQUENCY;
|
||||
long offsetFrequency = frequency + R820T_IF_FREQUENCY;
|
||||
|
||||
setMux( offsetFrequency, controlI2C );
|
||||
|
||||
@@ -205,7 +205,7 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
/**
|
||||
* Sets the multiplexer for the desired center frequency.
|
||||
*/
|
||||
private void setMux( int frequency, boolean controlI2C ) throws UsbException
|
||||
private void setMux( long frequency, boolean controlI2C ) throws UsbException
|
||||
{
|
||||
FrequencyRange range = FrequencyRange.getRangeForFrequency( frequency );
|
||||
|
||||
@@ -401,7 +401,7 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
/**
|
||||
* Sets the system IF frequency
|
||||
*/
|
||||
private void systemFrequencySelect( int frequency, boolean controlI2C )
|
||||
private void systemFrequencySelect( long frequency, boolean controlI2C )
|
||||
throws UsbException
|
||||
{
|
||||
/* LNA top? */
|
||||
@@ -472,7 +472,7 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
* @param controlI2C - control the I2C repeater locally
|
||||
* @throws UsbException - if unable to set any of the R820T registers
|
||||
*/
|
||||
private void setPLL( int frequency, boolean controlI2C ) throws UsbException
|
||||
private void setPLL( long frequency, boolean controlI2C ) throws UsbException
|
||||
{
|
||||
/* Set reference divider to 0 */
|
||||
writeR820TRegister( Register.REFERENCE_DIVIDER_2, (byte)0x00, controlI2C );
|
||||
@@ -970,16 +970,16 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
RANGE_650( 650000000, 1766000000, 0x00, 0x40, 0x00, 0x00, 0x00 ),
|
||||
RANGE_UNK( 0, 0, 0, 0, 0, 0, 0 );
|
||||
|
||||
private int mMinFrequency;
|
||||
private int mMaxFrequency;
|
||||
private long mMinFrequency;
|
||||
private long mMaxFrequency;
|
||||
private int mOpenDrain;
|
||||
private int mRFMux_PolyMux;
|
||||
private int mTF_c;
|
||||
private int mXtalCap20p;
|
||||
private int mXtalCap10p;
|
||||
|
||||
private FrequencyRange( int minFrequency,
|
||||
int maxFrequency,
|
||||
private FrequencyRange( long minFrequency,
|
||||
long maxFrequency,
|
||||
int openDrain,
|
||||
int rfMuxPloy,
|
||||
int tf_c,
|
||||
@@ -995,12 +995,12 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
mXtalCap10p = xtalCap10p;
|
||||
}
|
||||
|
||||
public boolean contains( int frequency )
|
||||
public boolean contains( long frequency )
|
||||
{
|
||||
return mMinFrequency <= frequency && frequency <= mMaxFrequency;
|
||||
}
|
||||
|
||||
public static FrequencyRange getRangeForFrequency( int frequency )
|
||||
public static FrequencyRange getRangeForFrequency( long frequency )
|
||||
{
|
||||
for( FrequencyRange range: values() )
|
||||
{
|
||||
@@ -1013,12 +1013,12 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
return RANGE_UNK;
|
||||
}
|
||||
|
||||
public int getMinFrequency()
|
||||
public long getMinFrequency()
|
||||
{
|
||||
return mMinFrequency;
|
||||
}
|
||||
|
||||
public int getMaxFrequency()
|
||||
public long getMaxFrequency()
|
||||
{
|
||||
return mMaxFrequency;
|
||||
}
|
||||
@@ -1100,16 +1100,16 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
|
||||
private int mDividerNumber;
|
||||
private int mMixerDivider;
|
||||
private int mMinimumFrequency;
|
||||
private int mMaximumFrequency;
|
||||
private long mMinimumFrequency;
|
||||
private long mMaximumFrequency;
|
||||
private int mRegisterSetting;
|
||||
private int mIntegralValue;
|
||||
private static final int mVCOPowerReference = 2;
|
||||
|
||||
private FrequencyDivider( int dividerNumber,
|
||||
int mixerDivider,
|
||||
int minimumFrequency,
|
||||
int maximumFrequency,
|
||||
long minimumFrequency,
|
||||
long maximumFrequency,
|
||||
int registerSetting,
|
||||
int integralValue )
|
||||
{
|
||||
@@ -1144,12 +1144,12 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
return mMixerDivider;
|
||||
}
|
||||
|
||||
public int getMinimumFrequency()
|
||||
public long getMinimumFrequency()
|
||||
{
|
||||
return mMinimumFrequency;
|
||||
}
|
||||
|
||||
public int getMaximumFrequency()
|
||||
public long getMaximumFrequency()
|
||||
{
|
||||
return mMaximumFrequency;
|
||||
}
|
||||
@@ -1159,7 +1159,7 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
return (byte)mRegisterSetting;
|
||||
}
|
||||
|
||||
public boolean contains( int frequency )
|
||||
public boolean contains( long frequency )
|
||||
{
|
||||
return mMinimumFrequency <= frequency &&
|
||||
frequency <= mMaximumFrequency;
|
||||
@@ -1172,7 +1172,7 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
* @param frequency - desired frequency
|
||||
* @return - FrequencyDivider to use for the specified frequency
|
||||
*/
|
||||
public static FrequencyDivider fromFrequency( int frequency )
|
||||
public static FrequencyDivider fromFrequency( long frequency )
|
||||
{
|
||||
for( FrequencyDivider divider: FrequencyDivider.values() )
|
||||
{
|
||||
@@ -1188,11 +1188,11 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
/**
|
||||
* Returns the integral to use for this frequency
|
||||
*/
|
||||
public Integral getIntegral( int frequency )
|
||||
public Integral getIntegral( long frequency )
|
||||
{
|
||||
if( contains( frequency ) )
|
||||
{
|
||||
int delta = frequency - mMinimumFrequency;
|
||||
int delta = (int)( frequency - mMinimumFrequency );
|
||||
|
||||
int integral = (int)Math.round( (double)delta /
|
||||
(double)mIntegralValue );
|
||||
@@ -1212,11 +1212,11 @@ public class R820TTunerController extends RTL2832TunerController
|
||||
* by the integral value to derive a 16-bit fractional value, returned
|
||||
* as an integer
|
||||
*/
|
||||
public int getSDM( Integral integral, int frequency )
|
||||
public int getSDM( Integral integral, long frequency )
|
||||
{
|
||||
if( contains( frequency ) )
|
||||
{
|
||||
int delta = frequency - ( integral.getNumber() * mIntegralValue );
|
||||
int delta = (int)( frequency - ( integral.getNumber() * mIntegralValue ) );
|
||||
|
||||
double fractional = (double)delta / (double)mIntegralValue;
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ public class R820TTunerEditorPanel extends JPanel implements FrequencyChangeList
|
||||
* apply end-user requested frequency changes against the tuner
|
||||
*/
|
||||
@Override
|
||||
public void frequencyChanged( final int frequency, int bandwidth )
|
||||
public void frequencyChanged( final long frequency, int bandwidth )
|
||||
{
|
||||
EventQueue.invokeLater( new Runnable()
|
||||
{
|
||||
|
||||
@@ -41,7 +41,7 @@ public class ComplexWaveSource extends WaveSource
|
||||
|
||||
private AudioInputStream mInputStream = null;
|
||||
private int mBytesPerFrame = 0;
|
||||
private int mFrequency = 0;
|
||||
private long mFrequency = 0;
|
||||
|
||||
private byte[] mBuffer;
|
||||
private int mBufferPointer = 0;
|
||||
@@ -86,7 +86,7 @@ public class ComplexWaveSource extends WaveSource
|
||||
* Returns the frequency set for this file. Normally returns zero, but
|
||||
* the value can be set with setFrequency() method.
|
||||
*/
|
||||
public int getFrequency()
|
||||
public long getFrequency()
|
||||
{
|
||||
return mFrequency;
|
||||
}
|
||||
@@ -94,7 +94,7 @@ public class ComplexWaveSource extends WaveSource
|
||||
/**
|
||||
* Changes the value returned from getFrequency() for this source.
|
||||
*/
|
||||
public void setFrequency( int frequency )
|
||||
public void setFrequency( long frequency )
|
||||
{
|
||||
mFrequency = frequency;
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ public class FloatWaveSource extends WaveSource
|
||||
|
||||
private AudioInputStream mInputStream = null;
|
||||
private int mBytesPerFrame = 0;
|
||||
private int mFrequency = 0;
|
||||
private long mFrequency = 0;
|
||||
|
||||
private byte[] mBuffer;
|
||||
private int mBufferPointer = 0;
|
||||
@@ -84,7 +84,7 @@ public class FloatWaveSource extends WaveSource
|
||||
* Returns the frequency set for this file. Normally returns zero, but
|
||||
* the value can be set with setFrequency() method.
|
||||
*/
|
||||
public int getFrequency()
|
||||
public long getFrequency()
|
||||
{
|
||||
return mFrequency;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user