mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-11 08:07:24 -05:00
Issue identified with Patch Group management and circular dependencies that can develop because of stale patch groups. Refactored all patch group management into a new PatchGroupManager. Patch groups are now automatically deleted if we don't receive any update messages within 5 seconds. The PatchGroupAlias was also updated to not roll-up attributes from subordinate patched group aliases when those aliases are also patch group aliases -- this eliminates the circular dependency chaining. Added IOverflowListener interface and updated Sources to support overflow listeners. Updated ChannelState to register as an overflow listener so that it can visually depict to the user when the channel enters/exits source overflow state. Added new color pattern for OVERFLOW with yellow text on red.
116 lines
3.3 KiB
Java
116 lines
3.3 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 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);
|
|
|
|
public String getDisplayValue()
|
|
{
|
|
return mDisplayValue;
|
|
}
|
|
} |