mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-11 16:17:24 -05:00
Resolves #373 - Adds support for Tuner frequency error PPM monitoring
and auto-correction for R820T tuners. -Updated TunerModel and TunerViewPanel to add 2 new columns to display the current tuner's PPM setting and (when available) the measured frequency error averaged over 5 second intervals provided by certain decoders (e.g. P25 C4FM and LSM). Frequency error value from P25 decoders is provided from the Costas Loop PLL once 2 or more P25 message sync events have been observed in a short period. -Updated R820T tuner to auto-correct PPM when measured frequency error exceeds the +/- 0.4PPM threshold for a period of 30 seconds or more. Feature can be enabled/disabled by user in the tuner editor panel. Resolved several issues with P25 C4FM/LSM decoders that was impacting performance related to channel misalignment from tuner PPM offsets.
This commit is contained in:
@@ -31,6 +31,8 @@ public class SourceEvent
|
||||
NOTIFICATION_FREQUENCY_AND_SAMPLE_RATE_UNLOCKED,
|
||||
NOTIFICATION_FREQUENCY_CHANGE,
|
||||
NOTIFICATION_FREQUENCY_CORRECTION_CHANGE,
|
||||
NOTIFICATION_MEASURED_FREQUENCY_ERROR,
|
||||
NOTIFICATION_MEASURED_FREQUENCY_ERROR_SYNC_LOCKED,
|
||||
NOTIFICATION_SAMPLE_RATE_CHANGE,
|
||||
NOTIFICATION_STOP_SAMPLE_STREAM,
|
||||
|
||||
@@ -124,6 +126,14 @@ public class SourceEvent
|
||||
return mSource;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the source associated with this event
|
||||
*/
|
||||
public void setSource(Source source)
|
||||
{
|
||||
mSource = source;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates if this event contains an optional source
|
||||
*/
|
||||
@@ -189,6 +199,28 @@ public class SourceEvent
|
||||
return new SourceEvent(Event.NOTIFICATION_CHANNEL_FREQUENCY_CORRECTION_CHANGE, frequencyCorrection);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new frequency error measurement notification event.
|
||||
*
|
||||
* @param frequencyError in hertz
|
||||
*/
|
||||
public static SourceEvent frequencyErrorMeasurement(long frequencyError)
|
||||
{
|
||||
return new SourceEvent(Event.NOTIFICATION_MEASURED_FREQUENCY_ERROR, frequencyError);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new frequency error measurement notification event. This event is different from
|
||||
* the raw frequency error measurement and indicates that the current state of the PLL is
|
||||
* locked and tracking the signal.
|
||||
*
|
||||
* @param frequencyError in hertz
|
||||
*/
|
||||
public static SourceEvent frequencyErrorMeasurementSyncLocked(long frequencyError, String eventDescription)
|
||||
{
|
||||
return new SourceEvent(Event.NOTIFICATION_MEASURED_FREQUENCY_ERROR_SYNC_LOCKED, frequencyError, eventDescription);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new sample rate change event
|
||||
*
|
||||
@@ -288,7 +320,7 @@ public class SourceEvent
|
||||
{
|
||||
return "SOURCE EVENT:" + mEvent +
|
||||
" VALUE:" + (mValue != null ? mValue : "(empty)") +
|
||||
" SOURCE:" + (mSource != null ? mSource.getClass() : "(null)") +
|
||||
" SOURCE:" + (mSource != null ? mSource.toString() : "(null)") +
|
||||
" DESCRIPTION:" + (mEventDescription != null ? mEventDescription : "");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user