mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-10 23:57:25 -05:00
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.
127 lines
3.7 KiB
Java
127 lines
3.7 KiB
Java
/*******************************************************************************
|
|
* SDR Trunk
|
|
* Copyright (C) 2014-2016 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 io.github.dsheirer.channel.state;
|
|
|
|
import java.util.EnumSet;
|
|
|
|
/**
|
|
* Details the set of states for a channel and the allowable transition states
|
|
*/
|
|
public enum State
|
|
{
|
|
IDLE("IDLE")
|
|
{
|
|
@Override
|
|
public boolean canChangeTo(State state)
|
|
{
|
|
return state != TEARDOWN && state != RESET && state != OVERFLOW;
|
|
}
|
|
},
|
|
CALL("CALL")
|
|
{
|
|
@Override
|
|
public boolean canChangeTo(State state)
|
|
{
|
|
return state == CONTROL || state == DATA || state == ENCRYPTED || state == FADE || state == TEARDOWN;
|
|
}
|
|
},
|
|
DATA("DATA")
|
|
{
|
|
@Override
|
|
public boolean canChangeTo(State state)
|
|
{
|
|
return state == CALL || state == CONTROL || state == ENCRYPTED || state == FADE || state == TEARDOWN;
|
|
}
|
|
},
|
|
ENCRYPTED("ENCRYPTED")
|
|
{
|
|
@Override
|
|
public boolean canChangeTo(State state)
|
|
{
|
|
return state == FADE || state == TEARDOWN;
|
|
}
|
|
},
|
|
CONTROL("CONTROL")
|
|
{
|
|
@Override
|
|
public boolean canChangeTo(State state)
|
|
{
|
|
return state == IDLE || state == FADE;
|
|
}
|
|
},
|
|
FADE("FADE")
|
|
{
|
|
@Override
|
|
public boolean canChangeTo(State state)
|
|
{
|
|
return state != FADE && state != RESET && state != OVERFLOW;
|
|
}
|
|
},
|
|
OVERFLOW("OVERFLOW")
|
|
{
|
|
@Override
|
|
public boolean canChangeTo(State state)
|
|
{
|
|
return false;
|
|
}
|
|
},
|
|
RESET("RESET")
|
|
{
|
|
@Override
|
|
public boolean canChangeTo(State state)
|
|
{
|
|
return state == IDLE;
|
|
}
|
|
},
|
|
TEARDOWN("TEARDOWN")
|
|
{
|
|
@Override
|
|
public boolean canChangeTo(State state)
|
|
{
|
|
return state == RESET;
|
|
}
|
|
};
|
|
|
|
private String mDisplayValue;
|
|
|
|
public static final EnumSet<State> CALL_STATES = EnumSet.of(CALL, CONTROL, DATA, ENCRYPTED);
|
|
public static final EnumSet<State> IDLE_STATES = EnumSet.of(IDLE, FADE);
|
|
|
|
private State(String displayValue)
|
|
{
|
|
mDisplayValue = displayValue;
|
|
}
|
|
|
|
public abstract boolean canChangeTo(State state);
|
|
|
|
/**
|
|
* Indicates that this state is an active (ie decoding) state and is one of the states
|
|
* enumerated in the CALL_STATES enumeration set.
|
|
*
|
|
* @return true if this state is an active state
|
|
*/
|
|
public boolean isActiveState()
|
|
{
|
|
return CALL_STATES.contains(this);
|
|
}
|
|
|
|
public String getDisplayValue()
|
|
{
|
|
return mDisplayValue;
|
|
}
|
|
} |