#1304 P25 Phase 1/2 decoder enhancements. (#1898)

* P25 Phase 2 now supports control channel decoding and decoder was enhanced to improve decodes.
* Radio reference site editor updated for phase 2 sites to allow user to select FDMA or TDMA control.
* Decode events are now minimized and de-duplicated.
* Fully parsing all phase 1/2 messages from the latest ICD.
* Vendor specific messaging recoveries (Moto & Harris).
* Patch group management enhancements with stale patch detection.
* Tuner editor now fully resets the min/max frequency values
* Default traffic channel count increased to 20 (from 3).
* ISSI roaming radio and talkgroup values now displayed and aliasable as fully qualified values (e.g. 1234(123.456.7890)
* Moto emergency alarm activation messaging support
* Expanded list of P25 encryption algorithms
* Message (bits) viewer enhanced for P25 phase 1 and phase 2
* IPV4 addresses and UDP ports no longer classified as user values - won't display in event views.
* New framework for describing message binary fields that should reduce overall memory footprint and enhance code readability

Co-authored-by: Dennis Sheirer <dsheirer@github.com>
This commit is contained in:
Denny Sheirer
2024-04-26 13:55:17 -04:00
committed by GitHub
parent f5938fa8e2
commit 7e709d9d6f
430 changed files with 30098 additions and 13300 deletions

View File

@@ -1,6 +1,6 @@
/*
* *****************************************************************************
* Copyright (C) 2014-2020 Dennis Sheirer
* Copyright (C) 2014-2024 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
@@ -30,12 +30,11 @@ import io.github.dsheirer.sample.Listener;
import io.github.dsheirer.source.ISourceEventProvider;
import io.github.dsheirer.source.SourceEvent;
import io.github.dsheirer.util.ThreadPool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collection;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Monitors channel state to detect when a channel is not in an identified active state and issues a request to rotate
@@ -63,10 +62,11 @@ public class ChannelRotationMonitor extends Module implements ISourceEventProvid
* @param activeStates to monitor
* @param rotationDelay specifies how long to remain on each frequency before rotating (in milliseconds).
*/
public ChannelRotationMonitor(Collection<State> activeStates, long rotationDelay)
public ChannelRotationMonitor(Collection<State> activeStates, long rotationDelay, UserPreferences userPreferences)
{
mActiveStates = activeStates;
mRotationDelay = rotationDelay;
mUserPreferences = userPreferences;
if(mRotationDelay == 0)
{

View File

@@ -540,8 +540,13 @@ public abstract class TunerEditor<T extends Tuner,C extends TunerConfiguration>
{
mResetFrequenciesButton = new JButton("Reset");
mResetFrequenciesButton.addActionListener(e -> {
getMinimumFrequencyTextField().setFrequency(getMinimumTunableFrequency());
getMaximumFrequencyTextField().setFrequency(getMaximumTunableFrequency());
long min = getMinimumTunableFrequency();
long max = getMaximumTunableFrequency();
getTuner().getTunerController().setFrequencyExtents(min, max);
getMinimumFrequencyTextField().setFrequency(min);
getMaximumFrequencyTextField().setFrequency(max);
save();
});
}