P25 - work in progress - this is a fairly stable version of the P25 channel state. There is still work to do, but I'm going to release a test version based on this commit.

- Channel state now processes HDU, TDU, TDULC, PDU, PDULC, LDU1/2, LDULC
This commit is contained in:
dennis.sheirer
2015-02-22 18:46:03 +00:00
parent a0b38afee1
commit d7a03c7196
59 changed files with 2392 additions and 1331 deletions

View File

@@ -98,6 +98,11 @@ public abstract class CallEvent
return mFromID;
}
public boolean hasFromID()
{
return mFromID != null;
}
public void setFromID( String id )
{
mFromID = id;
@@ -108,6 +113,11 @@ public abstract class CallEvent
return mToID;
}
public boolean hasToID()
{
return mToID != null;
}
public void setToID( String id )
{
mToID = id;

View File

@@ -34,7 +34,7 @@ import sample.Listener;
import alias.Alias;
import alias.AliasList;
import controller.activity.ActivitySummaryProvider;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.pdu.PDUMessage;
import decode.p25.message.pdu.osp.control.NetworkStatusBroadcastExtended;
import decode.p25.message.pdu.osp.control.ProtectionParameterBroadcast;
@@ -296,7 +296,7 @@ public class P25ActivitySummary implements ActivitySummaryProvider,
sb.append( "\nFREQUENCY BANDS:" );
for( Integer id: identifiers )
{
IdentifierProvider band = mBands.get( id );
IBandIdentifier band = mBands.get( id );
sb.append( "\n\t" + id );
sb.append( "- BASE: " + mFrequencyFormatter.format(

File diff suppressed because it is too large Load Diff

View File

@@ -10,8 +10,8 @@ import org.slf4j.LoggerFactory;
import sample.Broadcaster;
import sample.Listener;
import alias.AliasList;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.tsbk.osp.control.IdentifierUpdate;
public class P25MessageProcessor implements Listener<Message>
{
@@ -23,8 +23,8 @@ public class P25MessageProcessor implements Listener<Message>
/* Map of up to 16 band identifiers per RFSS. These identifier update
* messages are inserted into any message that conveys channel information
* so that the uplink/downlink frequencies can be calculated */
private HashMap<Integer,IdentifierUpdate> mIdentifierMap =
new HashMap<Integer,IdentifierUpdate>();
private HashMap<Integer,IBandIdentifier> mBandIdentifierMap =
new HashMap<Integer,IBandIdentifier>();
private AliasList mAliasList;
@@ -48,17 +48,18 @@ public class P25MessageProcessor implements Listener<Message>
for( int identifier: identifiers )
{
receiver.setIdentifierMessage( identifier,
mIdentifierMap.get( identifier ) );
mBandIdentifierMap.get( identifier ) );
}
}
/* Store band identifiers so that they can be injected into channel
* type messages */
if( message instanceof IdentifierUpdate )
if( message instanceof IBandIdentifier )
{
IdentifierUpdate identifierUpdate = (IdentifierUpdate)message;
IBandIdentifier bandIdentifier = (IBandIdentifier)message;
mIdentifierMap.put( identifierUpdate.getIdentifier(), identifierUpdate );
mBandIdentifierMap.put( bandIdentifier.getIdentifier(),
bandIdentifier );
}
mBroadcaster.broadcast( message );
@@ -67,7 +68,7 @@ public class P25MessageProcessor implements Listener<Message>
public void dispose()
{
mIdentifierMap.clear();
mBandIdentifierMap.clear();
mBroadcaster.dispose();
}

View File

@@ -25,6 +25,7 @@ import settings.ColorSetting;
import settings.Setting;
import controller.channel.Channel;
import controller.state.ChannelState.ChangedAttribute;
import controller.state.ChannelState.State;
import controller.state.ChannelStatePanel;
import decode.config.DecodeConfigP25Phase1;
@@ -86,7 +87,7 @@ public class P25Panel extends ChannelStatePanel
mFromAlias.setFont( mFontDecoder );
mFromAlias.setForeground( mColorLabelDecoder );
mNAC.setFont( mFontDecoder );
mNAC.setFont( mFontDetails );
mNAC.setForeground( mColorLabelDecoder );
mTo.setFont( mFontDecoder );
@@ -95,13 +96,13 @@ public class P25Panel extends ChannelStatePanel
mToAlias.setFont( mFontDecoder );
mToAlias.setForeground( mColorLabelDecoder );
mSystem.setFont( mFontDecoder );
mSystem.setFont( mFontDetails );
mSystem.setForeground( mColorLabelDecoder );
mSiteAlias.setFont( mFontDecoder );
mSiteAlias.setForeground( mColorLabelDecoder );
mSite.setFont( mFontDecoder );
mSite.setFont( mFontDetails );
mSite.setForeground( mColorLabelDecoder );
add( mStateLabel );
@@ -135,7 +136,17 @@ public class P25Panel extends ChannelStatePanel
switch( changedAttribute )
{
case CHANNEL_STATE:
mStateLabel.setText( channelState.getState().getDisplayValue() );
State state = channelState.getState();
mStateLabel.setText( state.getDisplayValue() );
if( state == State.IDLE )
{
mFrom.setText( null );
mFromAlias.setText( null );
mTo.setText( null );
mToAlias.setText( null );
}
break;
case SOURCE:
mSourceLabel.setText( mChannel.getSourceConfiguration()

View File

@@ -1,6 +1,6 @@
package decode.p25.message;
public interface IdentifierProvider
public interface IBandIdentifier
{
/**

View File

@@ -8,7 +8,7 @@ package decode.p25.message;
*/
public interface IdentifierReceiver
{
public void setIdentifierMessage( int identifier, IdentifierProvider message );
public void setIdentifierMessage( int identifier, IBandIdentifier message );
public int[] getIdentifiers();
}

View File

@@ -179,7 +179,7 @@ public class P25Message extends Message
* @param channel - channel number
* @return - frequency in Hertz
*/
protected static long calculateUplink( IdentifierProvider iden, int channel )
protected static long calculateUplink( IBandIdentifier iden, int channel )
{
long downlink = calculateDownlink( iden, channel );
@@ -199,7 +199,7 @@ public class P25Message extends Message
* @param channel - channel number
* @return - frequency in Hertz
*/
protected static long calculateDownlink( IdentifierProvider iden, int channel )
protected static long calculateDownlink( IBandIdentifier iden, int channel )
{
if( iden != null )
{

View File

@@ -1,5 +1,6 @@
package decode.p25.message.hdu;
import alias.Alias;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.P25Message;
@@ -58,7 +59,16 @@ public class HDUMessage extends P25Message
if( encryption != Encryption.UNENCRYPTED )
{
sb.append( " ENCRYPTION:" );
sb.append( encryption.name() );
if( encryption == Encryption.UNKNOWN )
{
sb.append( "UNK ALGO ID:" );
sb.append( mMessage.getInt( ALGORITHM_ID ) );
}
else
{
sb.append( encryption.name() );
}
sb.append( " KEY ID:" + getKeyID() );
sb.append( " MSG INDICATOR:" + getMessageIndicator() );
}
@@ -98,6 +108,12 @@ public class HDUMessage extends P25Message
return mMessage.getHex( TALKGROUP_ID, 4 );
}
@Override
public String getToID()
{
return getTalkgroupID();
}
/* Temporary override */
public boolean isValid()
{

View File

@@ -3,7 +3,7 @@ package decode.p25.message.ldu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.ldu.LDU1Message;
import decode.p25.reference.LinkControlOpcode;
@@ -26,7 +26,7 @@ public class AdjacentSiteStatusBroadcast extends LDU1Message
public static final int[] SYSTEM_SERVICE_CLASS = { 744,745,750,751,752,753,
754,755 };
private IdentifierProvider mIdentifierUpdate;
private IBandIdentifier mIdentifierUpdate;
public AdjacentSiteStatusBroadcast( LDU1Message message )
{
@@ -100,7 +100,7 @@ public class AdjacentSiteStatusBroadcast extends LDU1Message
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
mIdentifierUpdate = message;
}

View File

@@ -3,12 +3,12 @@ package decode.p25.message.ldu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.ldu.LDU1Message;
import decode.p25.reference.LinkControlOpcode;
public class ChannelIdentifierUpdate extends LDU1Message
implements IdentifierProvider
implements IBandIdentifier
{
private final static Logger mLog =
LoggerFactory.getLogger( ChannelIdentifierUpdate.class );

View File

@@ -3,12 +3,12 @@ package decode.p25.message.ldu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.ldu.LDU1Message;
import decode.p25.reference.LinkControlOpcode;
public class ChannelIdentifierUpdateExplicit extends LDU1Message
implements IdentifierProvider
implements IBandIdentifier
{
private final static Logger mLog =
LoggerFactory.getLogger( ChannelIdentifierUpdateExplicit.class );

View File

@@ -3,7 +3,7 @@ package decode.p25.message.ldu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.ldu.LDU1Message;
import decode.p25.reference.LinkControlOpcode;
@@ -25,8 +25,8 @@ public class GroupVoiceChannelUpdate extends LDU1Message
public static final int[] GROUP_ADDRESS_B = { 732,733,734,735,740,741,742,
743,744,745,750,751,752,753,754,755 };
private IdentifierProvider mIdentifierUpdateA;
private IdentifierProvider mIdentifierUpdateB;
private IBandIdentifier mIdentifierUpdateA;
private IBandIdentifier mIdentifierUpdateB;
public GroupVoiceChannelUpdate( LDU1Message message )
{
@@ -106,7 +106,7 @@ public class GroupVoiceChannelUpdate extends LDU1Message
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getChannelIdentifierA() )
{

View File

@@ -3,7 +3,7 @@ package decode.p25.message.ldu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.P25Message.DuplexMode;
import decode.p25.message.P25Message.SessionMode;
@@ -29,8 +29,8 @@ public class GroupVoiceChannelUpdateExplicit extends LDU1Message
public static final int[] RECEIVE_CHANNEL = { 740,741,742,743,744,745,750,
751,752,753,754,755 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public GroupVoiceChannelUpdateExplicit( LDU1Message message )
{
@@ -120,7 +120,7 @@ public class GroupVoiceChannelUpdateExplicit extends LDU1Message
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitChannelIdentifier() )
{

View File

@@ -3,7 +3,7 @@ package decode.p25.message.ldu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.ldu.LDU1Message;
import decode.p25.reference.LinkControlOpcode;
@@ -24,7 +24,7 @@ public class NetworkStatusBroadcast extends LDU1Message
public static final int[] SYSTEM_SERVICE_CLASS = { 744,745,750,751,752,753,
754,755 };
private IdentifierProvider mIdentifierUpdate;
private IBandIdentifier mIdentifierUpdate;
public NetworkStatusBroadcast( LDU1Message source )
{
@@ -45,7 +45,7 @@ public class NetworkStatusBroadcast extends LDU1Message
sb.append( getMessageStub() );
sb.append( " NETWORK:" + getNetworkID() );
sb.append( " SYS:" + getSystemID() );
sb.append( " SYS:" + getSystem() );
sb.append( " CHAN:" + getChannel() );
sb.append( " " + Service.getServices( getSystemServiceClass() ).toString() );
@@ -57,7 +57,7 @@ public class NetworkStatusBroadcast extends LDU1Message
return mMessage.getHex( NETWORK_ID, 5 );
}
public String getSystemID()
public String getSystem()
{
return mMessage.getHex( SYSTEM_ID, 3 );
}
@@ -83,7 +83,7 @@ public class NetworkStatusBroadcast extends LDU1Message
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
mIdentifierUpdate = message;
}

View File

@@ -3,7 +3,7 @@ package decode.p25.message.ldu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.ldu.LDU1Message;
import decode.p25.reference.LinkControlOpcode;
@@ -24,8 +24,8 @@ public class NetworkStatusBroadcastExplicit extends LDU1Message
public static final int[] RECEIVE_CHANNEL = { 740,741,742,743,744,745,750,
751,752,753,754,755 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public NetworkStatusBroadcastExplicit( LDU1Message message )
{
@@ -46,7 +46,7 @@ public class NetworkStatusBroadcastExplicit extends LDU1Message
sb.append( getMessageStub() );
sb.append( " NETWORK:" + getNetworkID() );
sb.append( " SYS:" + getSystemID() );
sb.append( " SYS:" + getSystem() );
sb.append( " TRANSMIT:" + getTransmitChannel() );
sb.append( " RECEIVE:" + getReceiveChannel() );
@@ -58,7 +58,7 @@ public class NetworkStatusBroadcastExplicit extends LDU1Message
return mMessage.getHex( NETWORK_ID, 5 );
}
public String getSystemID()
public String getSystem()
{
return mMessage.getHex( SYSTEM_ID, 3 );
}
@@ -94,7 +94,7 @@ public class NetworkStatusBroadcastExplicit extends LDU1Message
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitIdentifier() )
{

View File

@@ -3,7 +3,7 @@ package decode.p25.message.ldu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.ldu.LDU1Message;
import decode.p25.message.tsbk.osp.control.SystemService;
@@ -26,7 +26,7 @@ public class RFSSStatusBroadcast extends LDU1Message
public static final int[] SYSTEM_SERVICE_CLASS = { 744,745,750,751,752,753,
754,755 };
private IdentifierProvider mIdentifierUpdate;
private IBandIdentifier mIdentifierUpdate;
public RFSSStatusBroadcast( LDU1Message message )
{
@@ -102,7 +102,7 @@ public class RFSSStatusBroadcast extends LDU1Message
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
mIdentifierUpdate = message;
}

View File

@@ -3,7 +3,7 @@ package decode.p25.message.ldu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.ldu.LDU1Message;
import decode.p25.message.tsbk.osp.control.SystemService;
@@ -26,8 +26,8 @@ public class RFSSStatusBroadcastExplicit extends LDU1Message
735,740,741,742,743 };
public static final int[] SYSTEM_SERVICE_CLASS = { 744,745,750,751,752,753,754,755 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public RFSSStatusBroadcastExplicit( LDU1Message source )
{
@@ -113,7 +113,7 @@ public class RFSSStatusBroadcastExplicit extends LDU1Message
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitIdentifier() )
{

View File

@@ -3,7 +3,7 @@ package decode.p25.message.ldu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.ldu.LDU1Message;
import decode.p25.message.tsbk.osp.control.SystemService;
@@ -26,8 +26,8 @@ public class SecondaryControlChannelBroadcast extends LDU1Message
741,742,743 };
public static final int[] SYSTEM_SERVICE_CLASS_B = { 744,745,750,751,752,753,754,755 };
private IdentifierProvider mIdentifierProviderA;
private IdentifierProvider mIdentifierProviderB;
private IBandIdentifier mIdentifierProviderA;
private IBandIdentifier mIdentifierProviderB;
public SecondaryControlChannelBroadcast( LDU1Message message )
{
@@ -111,7 +111,7 @@ public class SecondaryControlChannelBroadcast extends LDU1Message
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getIdentifierA() )
{

View File

@@ -3,7 +3,7 @@ package decode.p25.message.ldu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.ldu.LDU1Message;
import decode.p25.message.tsbk.osp.control.SystemService;
@@ -26,8 +26,8 @@ public class SecondaryControlChannelBroadcastExplicit
public static final int[] SYSTEM_SERVICE_CLASS = { 732,733,734,735,740,741,
742,743 };
private IdentifierProvider mTransmitIdentifierProvider;
private IdentifierProvider mReceiveIdentifierProvider;
private IBandIdentifier mTransmitIdentifierProvider;
private IBandIdentifier mReceiveIdentifierProvider;
public SecondaryControlChannelBroadcastExplicit( LDU1Message message )
{
@@ -104,7 +104,7 @@ public class SecondaryControlChannelBroadcastExplicit
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitIdentifier() )
{

View File

@@ -3,6 +3,7 @@ package decode.p25.message.pdu;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.P25Message;
import decode.p25.message.tsbk.vendor.VendorOpcode;
import decode.p25.reference.DataUnitID;
import decode.p25.reference.Opcode;
import decode.p25.reference.PDUFormat;
@@ -151,6 +152,16 @@ public class PDUMessage extends P25Message
return Opcode.UNKNOWN;
}
public VendorOpcode getVendorOpcode()
{
if( getFormat() == PDUFormat.ALTERNATE_MULTI_BLOCK_TRUNKING_CONTROL )
{
return VendorOpcode.fromValue( mMessage.getInt( OPCODE ) );
}
return VendorOpcode.UNKNOWN;
}
public int getDataHeaderOffset()
{
return mMessage.getInt( DATA_HEADER_OFFSET );

View File

@@ -2,7 +2,7 @@ package decode.p25.message.pdu;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.reference.DataUnitID;
import decode.p25.reference.Opcode;
@@ -39,8 +39,8 @@ public abstract class UnitToUnitChannelGrantExtended extends PDUMessage
326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,
343,344,345,346,347,348,349,350,351 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public UnitToUnitChannelGrantExtended( BinaryMessage message,
DataUnitID duid, AliasList aliasList )
@@ -175,7 +175,7 @@ public abstract class UnitToUnitChannelGrantExtended extends PDUMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitChannelIdentifier() )
{

View File

@@ -2,7 +2,7 @@ package decode.p25.message.pdu.osp.control;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.pdu.PDUMessage;
import decode.p25.message.tsbk.osp.control.SystemService;
@@ -31,8 +31,8 @@ public class AdjacentStatusBroadcastExtended extends PDUMessage
230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,
248,249,250,251,252,253,254,255 };
private IdentifierProvider mTransmitIdentifierProvider;
private IdentifierProvider mReceiveIdentifierProvider;
private IBandIdentifier mTransmitIdentifierProvider;
private IBandIdentifier mReceiveIdentifierProvider;
public AdjacentStatusBroadcastExtended( BinaryMessage message,
DataUnitID duid, AliasList aliasList )
@@ -136,7 +136,7 @@ public class AdjacentStatusBroadcastExtended extends PDUMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitIdentifier() )
{

View File

@@ -2,7 +2,7 @@ package decode.p25.message.pdu.osp.control;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.pdu.PDUMessage;
import decode.p25.message.tsbk.osp.control.SystemService;
@@ -31,8 +31,8 @@ public class NetworkStatusBroadcastExtended extends PDUMessage
230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,
248,249,250,251,252,253,254,255 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public NetworkStatusBroadcastExtended( BinaryMessage message,
DataUnitID duid, AliasList aliasList )
@@ -135,7 +135,7 @@ public class NetworkStatusBroadcastExtended extends PDUMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitIdentifier() )
{

View File

@@ -2,7 +2,7 @@ package decode.p25.message.pdu.osp.control;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.pdu.PDUMessage;
import decode.p25.message.tsbk.osp.control.SystemService;
@@ -31,8 +31,8 @@ public class RFSSStatusBroadcastExtended extends PDUMessage
230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,
248,249,250,251,252,253,254,255 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public RFSSStatusBroadcastExtended( BinaryMessage message,
DataUnitID duid, AliasList aliasList )
@@ -139,7 +139,7 @@ public class RFSSStatusBroadcastExtended extends PDUMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitIdentifier() )
{

View File

@@ -4,7 +4,7 @@ import java.util.Date;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.pdu.PDUMessage;
import decode.p25.reference.DataUnitID;
@@ -36,8 +36,8 @@ public class GroupDataChannelGrantExtended extends PDUMessage
230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,
248,249,250,251,252,253,254,255 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public GroupDataChannelGrantExtended( BinaryMessage message,
DataUnitID duid, AliasList aliasList )
@@ -154,7 +154,7 @@ public class GroupDataChannelGrantExtended extends PDUMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitChannelIdentifier() )
{

View File

@@ -2,7 +2,7 @@ package decode.p25.message.pdu.osp.voice;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.pdu.PDUMessage;
import decode.p25.reference.DataUnitID;
@@ -34,8 +34,8 @@ public class GroupVoiceChannelGrantExplicit extends PDUMessage
230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,
248,249,250,251,252,253,254,255 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public GroupVoiceChannelGrantExplicit( BinaryMessage message,
DataUnitID duid, AliasList aliasList )
@@ -152,7 +152,7 @@ public class GroupVoiceChannelGrantExplicit extends PDUMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitChannelIdentifier() )
{

View File

@@ -4,7 +4,7 @@ import java.util.Date;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.pdu.PDUMessage;
import decode.p25.reference.DataUnitID;
@@ -36,8 +36,8 @@ public class TelephoneInterconnectChannelGrantExplicit extends PDUMessage
230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,
248,249,250,251,252,253,254,255 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public TelephoneInterconnectChannelGrantExplicit( BinaryMessage message,
DataUnitID duid, AliasList aliasList )
@@ -159,7 +159,7 @@ public class TelephoneInterconnectChannelGrantExplicit extends PDUMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitChannelIdentifier() )
{

View File

@@ -2,7 +2,7 @@ package decode.p25.message.pdu.osp.voice;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.pdu.PDUMessage;
import decode.p25.reference.DataUnitID;
@@ -40,8 +40,8 @@ public class UnitToUnitVoiceChannelGrantUpdateExtended extends PDUMessage
326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,
343,344,345,346,347,348,349,350,351 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public UnitToUnitVoiceChannelGrantUpdateExtended( BinaryMessage message,
DataUnitID duid, AliasList aliasList )
@@ -182,7 +182,7 @@ public class UnitToUnitVoiceChannelGrantUpdateExtended extends PDUMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitChannelIdentifier() )
{

View File

@@ -1,265 +0,0 @@
package decode.p25.message.tdu;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.P25Message;
import decode.p25.reference.DataUnitID;
import decode.p25.reference.LinkControlOpcode;
import decode.p25.reference.Vendor;
import decode.p25.reference.VendorLinkControlOpcode;
import edac.CRC;
import edac.Galois24;
import edac.ReedSolomon_24_12_13;
public class TDULinkControlMessage extends P25Message
{
public final static Logger mLog = LoggerFactory.getLogger( TDULinkControlMessage.class );
public static final int[] LC_HEX_0 = { 64,65,66,67,68,69 };
public static final int[] LC_HEX_1 = { 70,71,72,73,74,75 };
public static final int[] LC_HEX_2 = { 88,89,90,91,92,93 };
public static final int[] LC_HEX_3 = { 94,95,96,97,98,99 };
public static final int[] LC_HEX_4 = { 112,113,114,115,116,117 };
public static final int[] LC_HEX_5 = { 118,119,120,121,122,123 };
public static final int[] LC_HEX_6 = { 136,137,138,139,140,141 };
public static final int[] LC_HEX_7 = { 142,143,144,145,146,147 };
public static final int[] LC_HEX_8 = { 160,161,162,163,164,165 };
public static final int[] LC_HEX_9 = { 166,167,168,169,170,171 };
public static final int[] LC_HEX_10 = { 184,185,186,187,188,189 };
public static final int[] LC_HEX_11 = { 190,191,192,193,194,195 };
public static final int[] RS_HEX_0 = { 208,209,210,211,212,213 };
public static final int[] RS_HEX_1 = { 214,215,216,217,218,219 };
public static final int[] RS_HEX_2 = { 232,233,234,235,236,237 };
public static final int[] RS_HEX_3 = { 238,239,240,241,242,243 };
public static final int[] RS_HEX_4 = { 256,257,258,259,260,261 };
public static final int[] RS_HEX_5 = { 262,263,264,265,266,267 };
public static final int[] RS_HEX_6 = { 280,281,282,283,284,285 };
public static final int[] RS_HEX_7 = { 286,287,288,289,290,291 };
public static final int[] RS_HEX_8 = { 304,305,306,307,308,309 };
public static final int[] RS_HEX_9 = { 310,311,312,313,314,315 };
public static final int[] RS_HEX_10 = { 328,329,330,331,332,333 };
public static final int[] RS_HEX_11 = { 334,335,336,337,338,339 };
public static final int ENCRYPTION_FLAG = 64;
public static final int IMPLICIT_VENDOR_FLAG = 65;
public static final int[] OPCODE = { 66,67,68,69,70,71 };
public static final int[] VENDOR = { 72,73,74,75,88,89,90,91 };
public static final ReedSolomon_24_12_13 mReedSolomonDecoder =
new ReedSolomon_24_12_13();
public TDULinkControlMessage( BinaryMessage message, DataUnitID duid,
AliasList aliasList )
{
super( message, duid, aliasList );
/* NID CRC is checked in the message framer so a constructed message
* means it passed the CRC */
mCRC = new CRC[ 3 ];
mCRC[ 0 ] = CRC.PASSED;
checkCRC();
}
/**
* Constructs a TDULinkControl message from an existing message and bypasses
* the CRC calculation.
*/
protected TDULinkControlMessage( TDULinkControlMessage message )
{
super( message.getSourceMessage(), DataUnitID.TDULC, message.getAliasList() );
mCRC = message.getCRC();
}
public CRC[] getCRC()
{
return mCRC;
}
@Override
public String getMessage()
{
StringBuilder sb = new StringBuilder();
sb.append( getMessageStub() );
sb.append( " " );
sb.append( mMessage.toString() );
return sb.toString();
}
public String getMessageStub()
{
StringBuilder sb = new StringBuilder();
sb.append( "NAC:" );
sb.append( getNAC() );
sb.append( " " );
sb.append( getDUID().getLabel() );
sb.append( " " );
if( isEncrypted() )
{
sb.append( "ENCRYPTED" );
}
else
{
if( isImplicitFormat() || getVendor() == Vendor.STANDARD )
{
sb.append( getOpcode().getLabel() );
}
else
{
sb.append( "VENDOR:" + getVendor().getLabel() + " " );
sb.append( getVendorOpcode().getLabel() );
}
}
return sb.toString();
}
public boolean isEncrypted()
{
return mMessage.get( ENCRYPTION_FLAG );
}
public boolean isImplicitFormat()
{
return mMessage.get( IMPLICIT_VENDOR_FLAG );
}
public LinkControlOpcode getOpcode()
{
return LinkControlOpcode.fromValue( mMessage.getInt( OPCODE ) );
}
public VendorLinkControlOpcode getVendorOpcode()
{
return VendorLinkControlOpcode.fromValue( mMessage.getInt( OPCODE ) );
}
public Vendor getVendor()
{
if( isImplicitFormat() )
{
return Vendor.STANDARD;
}
return Vendor.fromValue( mMessage.getInt( VENDOR ) );
}
/**
* Checks and repairs the 12 x 24-bit golay(24,12,8) codewords and then
* checks and repairs the 24 x 6-bit link control and reed-solomon
* RS(24,12,13) parity codewords
*/
private void checkCRC()
{
/* Check the Golay codewords */
int x = 64;
mCRC[ 1 ] = CRC.PASSED;
while( x < mMessage.size() )
{
mMessage = Galois24.checkAndCorrect( mMessage, x );
if( !( mMessage.getCRC() == CRC.PASSED ) )
{
mCRC[ 1 ] = CRC.FAILED_CRC;
}
x += 24;
}
/* Check the Reed-Solomon parity bits. The RS decoder expects the link
* control data and reed solomon parity hex codewords in reverse order.
* The RS(24,12,13) code used by P25 removes the left-hand 47 data hex
* words, so we replace them with zeros. */
int[] input = new int [63];
int[] output = new int [63];
input[ 0 ] = mMessage.getInt( RS_HEX_11 );
input[ 1 ] = mMessage.getInt( RS_HEX_10 );
input[ 2 ] = mMessage.getInt( RS_HEX_9 );
input[ 3 ] = mMessage.getInt( RS_HEX_8 );
input[ 4 ] = mMessage.getInt( RS_HEX_7 );
input[ 5 ] = mMessage.getInt( RS_HEX_6 );
input[ 6 ] = mMessage.getInt( RS_HEX_5 );
input[ 7 ] = mMessage.getInt( RS_HEX_4 );
input[ 8 ] = mMessage.getInt( RS_HEX_3 );
input[ 9 ] = mMessage.getInt( RS_HEX_2 );
input[ 10 ] = mMessage.getInt( RS_HEX_1 );
input[ 11 ] = mMessage.getInt( RS_HEX_0 );
input[ 12 ] = mMessage.getInt( LC_HEX_11 );
input[ 13 ] = mMessage.getInt( LC_HEX_10 );
input[ 14 ] = mMessage.getInt( LC_HEX_9 );
input[ 15 ] = mMessage.getInt( LC_HEX_8 );
input[ 16 ] = mMessage.getInt( LC_HEX_7 );
input[ 17 ] = mMessage.getInt( LC_HEX_6 );
input[ 18 ] = mMessage.getInt( LC_HEX_5 );
input[ 19 ] = mMessage.getInt( LC_HEX_4 );
input[ 20 ] = mMessage.getInt( LC_HEX_3 );
input[ 21 ] = mMessage.getInt( LC_HEX_2 );
input[ 22 ] = mMessage.getInt( LC_HEX_1 );
input[ 23 ] = mMessage.getInt( LC_HEX_0 );
/* indexes 24 - 62 are defaulted to zero */
boolean irrecoverableErrors = mReedSolomonDecoder.decode( input, output );
if( irrecoverableErrors )
{
mCRC[ 2 ] = CRC.FAILED_CRC;
}
else
{
mCRC[ 2 ] = CRC.PASSED;
/* Only fix the link control data hex codewords */
repairHexCodeword( input, output, 12, LC_HEX_11 );
repairHexCodeword( input, output, 13, LC_HEX_10 );
repairHexCodeword( input, output, 14, LC_HEX_9 );
repairHexCodeword( input, output, 15, LC_HEX_8 );
repairHexCodeword( input, output, 16, LC_HEX_7 );
repairHexCodeword( input, output, 17, LC_HEX_6 );
repairHexCodeword( input, output, 18, LC_HEX_5 );
repairHexCodeword( input, output, 19, LC_HEX_4 );
repairHexCodeword( input, output, 20, LC_HEX_3 );
repairHexCodeword( input, output, 21, LC_HEX_2 );
repairHexCodeword( input, output, 22, LC_HEX_1 );
repairHexCodeword( input, output, 23, LC_HEX_0 );
/* If the golay check failed, mark it as corrected too */
if( mCRC[ 1 ] == CRC.FAILED_CRC )
{
mCRC[ 1 ] = CRC.CORRECTED;
}
}
}
private void repairHexCodeword( int[] input, int[] output, int index, int[] indexSet )
{
if( input[ index ] != output[ index ] )
{
mMessage.load( indexSet[ 0 ], 6, output[ index ] );
mCRC[ 2 ] = CRC.CORRECTED;
}
}
/**
* Indicates if the message passed the golay and reed-solomon parity checks
* or was corrected.
*/
public boolean isValid()
{
// mCRC[ 0 ] - always passes (otherwise message wouldn't be constructed )
// mCRC[ 1 ] - golay - always passes or corrected if mCRC[2] is valid
return mCRC[ 2 ] == CRC.PASSED || mCRC[ 2 ] == CRC.CORRECTED;
}
}

View File

@@ -3,7 +3,7 @@ package decode.p25.message.tdu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.tsbk.osp.control.SystemService;
import decode.p25.reference.LinkControlOpcode;
@@ -26,7 +26,7 @@ public class AdjacentSiteStatusBroadcast extends TDULinkControlMessage
public static final int[] SYSTEM_SERVICE_CLASS = { 188,189,190,191,192,193,
194,195 };
private IdentifierProvider mIdentifierUpdate;
private IBandIdentifier mIdentifierUpdate;
public AdjacentSiteStatusBroadcast( TDULinkControlMessage source )
{
@@ -100,7 +100,7 @@ public class AdjacentSiteStatusBroadcast extends TDULinkControlMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
mIdentifierUpdate = message;
}

View File

@@ -30,7 +30,7 @@ public class CallTermination extends TDULinkControlMessage
sb.append( getMessageStub() );
sb.append( " FROM:" + getSourceAddress() );
sb.append( " BY:" + getSourceAddress() );
return sb.toString();
}

View File

@@ -3,11 +3,11 @@ package decode.p25.message.tdu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.reference.LinkControlOpcode;
public class ChannelIdentifierUpdate extends TDULinkControlMessage
implements IdentifierProvider
implements IBandIdentifier
{
private final static Logger mLog =
LoggerFactory.getLogger( ChannelIdentifierUpdate.class );

View File

@@ -3,11 +3,11 @@ package decode.p25.message.tdu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.reference.LinkControlOpcode;
public class ChannelIdentifierUpdateExplicit extends TDULinkControlMessage
implements IdentifierProvider
implements IBandIdentifier
{
private final static Logger mLog =
LoggerFactory.getLogger( ChannelIdentifierUpdateExplicit.class );

View File

@@ -1,9 +1,12 @@
package decode.p25.message.tdu.lc;
import java.util.Set;
import java.util.TreeSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.reference.LinkControlOpcode;
@@ -23,8 +26,8 @@ public class GroupVoiceChannelUpdate extends TDULinkControlMessage
public static final int[] GROUP_ADDRESS_B = { 168,169,170,171,184,185,186,
187,188,189,190,191,192,193,194,195 };
private IdentifierProvider mIdentifierUpdateA;
private IdentifierProvider mIdentifierUpdateB;
private IBandIdentifier mIdentifierUpdateA;
private IBandIdentifier mIdentifierUpdateB;
public GroupVoiceChannelUpdate( TDULinkControlMessage source )
{
@@ -103,8 +106,23 @@ public class GroupVoiceChannelUpdate extends TDULinkControlMessage
return mMessage.getHex( GROUP_ADDRESS_B, 4 );
}
/**
* Returns a sorted list of addresses contained in the A and B fields
* @return
*/
public Set<String> getAddresses()
{
Set<String> addresses = new TreeSet<String>();
addresses.add( getGroupAddressA() );
addresses.add( getGroupAddressB() );
return addresses;
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getChannelIdentifierA() )
{

View File

@@ -3,7 +3,7 @@ package decode.p25.message.tdu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.P25Message.DuplexMode;
import decode.p25.message.P25Message.SessionMode;
@@ -28,8 +28,8 @@ public class GroupVoiceChannelUpdateExplicit extends TDULinkControlMessage
public static final int[] RECEIVE_CHANNEL = { 184,185,186,187,188,189,190,
191,192,193,194,195,196,197,198,199 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public GroupVoiceChannelUpdateExplicit( TDULinkControlMessage source )
{
@@ -119,7 +119,7 @@ public class GroupVoiceChannelUpdateExplicit extends TDULinkControlMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitChannelIdentifier() )
{

View File

@@ -3,7 +3,7 @@ package decode.p25.message.tdu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.reference.LinkControlOpcode;
import decode.p25.reference.Service;
@@ -13,9 +13,10 @@ public class NetworkStatusBroadcast extends TDULinkControlMessage
{
private final static Logger mLog =
LoggerFactory.getLogger( NetworkStatusBroadcast.class );
public static final int[] NETWORK_ID = { 72,73,74,75,88,89,90,91,92,93,94,
95,96,97,98,99,112,113,114,115,116,117,118,119,120,121,122,123 };
public static final int[] SYSTEM_ID = { 136,137,138,139,140,141,142,143,144,
public static final int[] WACN = { 72,73,74,75,88,89,90,91,92,93,94,95,96,
97,98,99,112,113,114,115,116,117,118,119,120,121,122,123 };
public static final int[] SYSTEM = { 136,137,138,139,140,141,142,143,144,
145,146,147 };
public static final int[] IDENTIFIER = { 160,161,162,163 };
public static final int[] CHANNEL = { 164,165,166,167,168,169,170,171,184,
@@ -23,7 +24,7 @@ public class NetworkStatusBroadcast extends TDULinkControlMessage
public static final int[] SYSTEM_SERVICE_CLASS = { 188,189,190,191,192,193,
194,195 };
private IdentifierProvider mIdentifierUpdate;
private IBandIdentifier mIdentifierUpdate;
public NetworkStatusBroadcast( TDULinkControlMessage source )
{
@@ -43,22 +44,22 @@ public class NetworkStatusBroadcast extends TDULinkControlMessage
sb.append( getMessageStub() );
sb.append( " NETWORK:" + getNetworkID() );
sb.append( " SYS:" + getSystemID() );
sb.append( " NETWORK:" + getWACN() );
sb.append( " SYS:" + getSystem() );
sb.append( " CHAN:" + getChannel() );
sb.append( " " + Service.getServices( getSystemServiceClass() ).toString() );
return sb.toString();
}
public String getNetworkID()
public String getWACN()
{
return mMessage.getHex( NETWORK_ID, 5 );
return mMessage.getHex( WACN, 5 );
}
public String getSystemID()
public String getSystem()
{
return mMessage.getHex( SYSTEM_ID, 3 );
return mMessage.getHex( SYSTEM, 3 );
}
public int getIdentifier()
@@ -82,7 +83,7 @@ public class NetworkStatusBroadcast extends TDULinkControlMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
mIdentifierUpdate = message;
}

View File

@@ -3,7 +3,7 @@ package decode.p25.message.tdu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.reference.LinkControlOpcode;
import decode.p25.reference.Service;
@@ -13,9 +13,10 @@ public class NetworkStatusBroadcastExplicit extends TDULinkControlMessage
{
private final static Logger mLog =
LoggerFactory.getLogger( NetworkStatusBroadcastExplicit.class );
public static final int[] NETWORK_ID = { 72,73,74,75,88,89,90,91,92,93,94,
95,96,97,98,99,112,113,114,115 };
public static final int[] SYSTEM_ID = { 116,117,118,119,120,121,122,123,136,
public static final int[] WACN = { 72,73,74,75,88,89,90,91,92,93,94,95,96,
97,98,99,112,113,114,115 };
public static final int[] SYSTEM = { 116,117,118,119,120,121,122,123,136,
137,138,139 };
public static final int[] TRANSMIT_IDENTIFIER = { 140,141,142,143 };
public static final int[] TRANSMIT_CHANNEL = { 144,145,146,147,160,161,162,
@@ -24,8 +25,8 @@ public class NetworkStatusBroadcastExplicit extends TDULinkControlMessage
public static final int[] RECEIVE_CHANNEL = { 184,185,186,187,188,189,190,
191,192,193,194,195 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public NetworkStatusBroadcastExplicit( TDULinkControlMessage source )
{
@@ -45,22 +46,22 @@ public class NetworkStatusBroadcastExplicit extends TDULinkControlMessage
sb.append( getMessageStub() );
sb.append( " NETWORK:" + getNetworkID() );
sb.append( " SYS:" + getSystemID() );
sb.append( " NETWORK:" + getWACN() );
sb.append( " SYS:" + getSystem() );
sb.append( " TRANSMIT:" + getTransmitChannel() );
sb.append( " RECEIVE:" + getReceiveChannel() );
return sb.toString();
}
public String getNetworkID()
public String getWACN()
{
return mMessage.getHex( NETWORK_ID, 5 );
return mMessage.getHex( WACN, 5 );
}
public String getSystemID()
public String getSystem()
{
return mMessage.getHex( SYSTEM_ID, 3 );
return mMessage.getHex( SYSTEM, 3 );
}
public int getTransmitIdentifier()
@@ -94,7 +95,7 @@ public class NetworkStatusBroadcastExplicit extends TDULinkControlMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitIdentifier() )
{

View File

@@ -3,7 +3,7 @@ package decode.p25.message.tdu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.tsbk.osp.control.SystemService;
import decode.p25.reference.LinkControlOpcode;
@@ -28,7 +28,7 @@ public class RFSSStatusBroadcast extends TDULinkControlMessage
public static final int[] SYSTEM_SERVICE_CLASS = { 188,189,190,191,192,193,
194,195 };
private IdentifierProvider mIdentifierUpdate;
private IBandIdentifier mIdentifierUpdate;
public RFSSStatusBroadcast( TDULinkControlMessage source )
{
@@ -104,7 +104,7 @@ public class RFSSStatusBroadcast extends TDULinkControlMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
mIdentifierUpdate = message;
}

View File

@@ -3,7 +3,7 @@ package decode.p25.message.tdu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.tsbk.osp.control.SystemService;
import decode.p25.reference.LinkControlOpcode;
@@ -28,8 +28,8 @@ public class RFSSStatusBroadcastExplicit extends TDULinkControlMessage
public static final int[] SYSTEM_SERVICE_CLASS = { 188,189,190,191,192,193,
194,195 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public RFSSStatusBroadcastExplicit( TDULinkControlMessage source )
{
@@ -115,7 +115,7 @@ public class RFSSStatusBroadcastExplicit extends TDULinkControlMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitIdentifier() )
{

View File

@@ -3,7 +3,7 @@ package decode.p25.message.tdu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.tsbk.osp.control.SystemService;
import decode.p25.reference.LinkControlOpcode;
@@ -29,8 +29,8 @@ public class SecondaryControlChannelBroadcast extends TDULinkControlMessage
public static final int[] SYSTEM_SERVICE_CLASS_B = { 188,189,190,191,192,
193,194,195 };
private IdentifierProvider mIdentifierProviderA;
private IdentifierProvider mIdentifierProviderB;
private IBandIdentifier mIdentifierProviderA;
private IBandIdentifier mIdentifierProviderB;
public SecondaryControlChannelBroadcast( TDULinkControlMessage source )
{
@@ -114,7 +114,7 @@ public class SecondaryControlChannelBroadcast extends TDULinkControlMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getIdentifierA() )
{

View File

@@ -3,7 +3,7 @@ package decode.p25.message.tdu.lc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.tsbk.osp.control.SystemService;
import decode.p25.reference.LinkControlOpcode;
@@ -25,8 +25,8 @@ public class SecondaryControlChannelBroadcastExplicit
public static final int[] SYSTEM_SERVICE_CLASS = { 168,169,170,171,184,
185,186,187 };
private IdentifierProvider mTransmitIdentifierProvider;
private IdentifierProvider mReceiveIdentifierProvider;
private IBandIdentifier mTransmitIdentifierProvider;
private IBandIdentifier mReceiveIdentifierProvider;
public SecondaryControlChannelBroadcastExplicit( TDULinkControlMessage source )
{
@@ -103,7 +103,7 @@ public class SecondaryControlChannelBroadcastExplicit
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitIdentifier() )
{

View File

@@ -85,6 +85,7 @@ public class TDULCMessageFactory
{
switch( message.getVendor() )
{
case MOTOROLA:
default:
break;
}

View File

@@ -6,6 +6,7 @@ import org.slf4j.LoggerFactory;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.P25Message;
import decode.p25.message.tsbk.motorola.MotorolaOpcode;
import decode.p25.reference.DataUnitID;
import decode.p25.reference.LinkControlOpcode;
import decode.p25.reference.Vendor;
@@ -131,16 +132,31 @@ public class TDULinkControlMessage extends P25Message
{
return mMessage.get( IMPLICIT_VENDOR_FLAG );
}
/**
* Standard opcodes when the Vendor is STANDARD
*/
public LinkControlOpcode getOpcode()
{
return LinkControlOpcode.fromValue( mMessage.getInt( OPCODE ) );
}
/**
* Returns a generic vendor-neutral opcode. Use this when there is a non
* standard vendor code.
*/
public VendorLinkControlOpcode getVendorOpcode()
{
return VendorLinkControlOpcode.fromValue( mMessage.getInt( OPCODE ) );
}
/**
* If the vendor is motorola, returns the Motorola OPCODE for this message
*/
public MotorolaOpcode getMotorolaOpcode()
{
return MotorolaOpcode.fromValue( mMessage.getInt( OPCODE ) );
}
public Vendor getVendor()
{

View File

@@ -2,7 +2,7 @@ package decode.p25.message.tsbk;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.reference.DataUnitID;
@@ -14,7 +14,7 @@ public abstract class ChannelGrant extends ServiceMessage
public static final int[] CHANNEL_NUMBER = { 92,93,94,95,96,97,98,99,100,
101,102,103 };
private IdentifierProvider mIdentifierUpdate;
private IBandIdentifier mIdentifierUpdate;
public ChannelGrant( BinaryMessage message,
DataUnitID duid,
@@ -47,7 +47,7 @@ public abstract class ChannelGrant extends ServiceMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
mIdentifierUpdate = message;
}

View File

@@ -2,7 +2,7 @@ package decode.p25.message.tsbk;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.reference.DataUnitID;
public abstract class GroupChannelGrantExplicit extends ChannelGrant
@@ -16,8 +16,8 @@ public abstract class GroupChannelGrantExplicit extends ChannelGrant
public static final int[] GROUP_ADDRESS = { 128,129,130,131,132,133,134,135,
136,137,138,139,140,141,142,143 };
private IdentifierProvider mTransmitIdentifierUpdate;
private IdentifierProvider mReceiveIdentifierUpdate;
private IBandIdentifier mTransmitIdentifierUpdate;
private IBandIdentifier mReceiveIdentifierUpdate;
public GroupChannelGrantExplicit( BinaryMessage message,
DataUnitID duid,
@@ -85,7 +85,7 @@ public abstract class GroupChannelGrantExplicit extends ChannelGrant
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitChannelIdentifier() )
{

View File

@@ -2,7 +2,7 @@ package decode.p25.message.tsbk;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.reference.DataUnitID;
@@ -21,8 +21,8 @@ public abstract class GroupMultiChannelGrant extends ChannelGrant
public static final int[] GROUP_ADDRESS_2 = { 128,129,130,131,132,133,134,
135,136,137,138,139,140,141,142,143 };
private IdentifierProvider mIdentifierUpdate1;
private IdentifierProvider mIdentifierUpdate2;
private IBandIdentifier mIdentifierUpdate1;
private IBandIdentifier mIdentifierUpdate2;
public GroupMultiChannelGrant( BinaryMessage message,
DataUnitID duid,
@@ -114,7 +114,7 @@ public abstract class GroupMultiChannelGrant extends ChannelGrant
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getChannelIdentifier1() )
{

View File

@@ -2,7 +2,7 @@ package decode.p25.message.tsbk.motorola;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.reference.DataUnitID;
@@ -22,7 +22,7 @@ public class ChannelCWIDUpdate extends MotorolaTSBKMessage
public static final int[] CHANNEL = { 132,133,134,135,136,137,138,139,140,
141,142,143 };
private IdentifierProvider mIdentifierUpdate;
private IBandIdentifier mIdentifierUpdate;
public ChannelCWIDUpdate( BinaryMessage message,
DataUnitID duid,
@@ -104,7 +104,7 @@ public class ChannelCWIDUpdate extends MotorolaTSBKMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
mIdentifierUpdate = message;
}

View File

@@ -59,6 +59,4 @@ public abstract class PatchGroup extends MotorolaTSBKMessage
{
return mMessage.getHex( GROUP_ADDRESS_3, 4 );
}
}

View File

@@ -2,7 +2,7 @@ package decode.p25.message.tsbk.motorola;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.reference.DataUnitID;
@@ -24,7 +24,7 @@ public class PatchGroupVoiceChannelGrant extends MotorolaTSBKMessage
public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
private IdentifierProvider mIdentifierUpdate;
private IBandIdentifier mIdentifierUpdate;
public PatchGroupVoiceChannelGrant( BinaryMessage message, DataUnitID duid,
AliasList aliasList )
@@ -122,7 +122,7 @@ public class PatchGroupVoiceChannelGrant extends MotorolaTSBKMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
mIdentifierUpdate = message;
}

View File

@@ -2,7 +2,7 @@ package decode.p25.message.tsbk.motorola;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.reference.DataUnitID;
@@ -20,8 +20,8 @@ public class PatchGroupVoiceChannelGrantUpdate extends MotorolaTSBKMessage
public static final int[] PATCH_GROUP_ADDRESS_2 = { 128,129,130,131,132,133,
134,135,136,137,138,139,140,141,142,143 };
private IdentifierProvider mIdentifierUpdate1;
private IdentifierProvider mIdentifierUpdate2;
private IBandIdentifier mIdentifierUpdate1;
private IBandIdentifier mIdentifierUpdate2;
public PatchGroupVoiceChannelGrantUpdate( BinaryMessage message,
DataUnitID duid, AliasList aliasList )
@@ -100,7 +100,7 @@ public class PatchGroupVoiceChannelGrantUpdate extends MotorolaTSBKMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getChannelIdentifier1() )
{

View File

@@ -2,7 +2,7 @@ package decode.p25.message.tsbk.osp.control;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.tsbk.TSBKMessage;
import decode.p25.reference.DataUnitID;
@@ -26,7 +26,7 @@ public class AdjacentStatusBroadcast extends TSBKMessage implements IdentifierRe
public static final int[] SYSTEM_SERVICE_CLASS = { 136,137,138,139,140,141,
142,143 };
private IdentifierProvider mIdentifierUpdate;
private IBandIdentifier mIdentifierUpdate;
public AdjacentStatusBroadcast( BinaryMessage message,
DataUnitID duid,
@@ -163,7 +163,7 @@ public class AdjacentStatusBroadcast extends TSBKMessage implements IdentifierRe
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
/* we're only expecting 1 identifier, so use whatever is received */
mIdentifierUpdate = message;

View File

@@ -2,12 +2,12 @@ package decode.p25.message.tsbk.osp.control;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.tsbk.TSBKMessage;
import decode.p25.reference.DataUnitID;
public abstract class IdentifierUpdate extends TSBKMessage
implements IdentifierProvider
implements IBandIdentifier
{
public static final int[] IDENTIFIER = { 80,81,82,83 };

View File

@@ -2,7 +2,7 @@ package decode.p25.message.tsbk.osp.control;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.tsbk.TSBKMessage;
import decode.p25.reference.DataUnitID;
@@ -23,7 +23,7 @@ public class NetworkStatusBroadcast extends TSBKMessage implements IdentifierRec
public static final int[] SYSTEM_SERVICE_CLASS = { 136,137,138,139,140,141,
142,143 };
private IdentifierProvider mIdentifierUpdate;
private IBandIdentifier mIdentifierUpdate;
public NetworkStatusBroadcast( BinaryMessage message,
DataUnitID duid,
@@ -109,7 +109,7 @@ public class NetworkStatusBroadcast extends TSBKMessage implements IdentifierRec
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
/* we're only expecting 1 identifier, so use whatever is received */
mIdentifierUpdate = message;

View File

@@ -2,7 +2,7 @@ package decode.p25.message.tsbk.osp.control;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.tsbk.TSBKMessage;
import decode.p25.reference.DataUnitID;
@@ -23,7 +23,7 @@ public class RFSSStatusBroadcast extends TSBKMessage implements IdentifierReceiv
public static final int[] SYSTEM_SERVICE_CLASS = { 136,137,138,139,140,141,
142,143 };
private IdentifierProvider mIdentifierUpdate;
private IBandIdentifier mIdentifierUpdate;
public RFSSStatusBroadcast( BinaryMessage message,
DataUnitID duid,
@@ -119,7 +119,7 @@ public class RFSSStatusBroadcast extends TSBKMessage implements IdentifierReceiv
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
/* we're only expecting 1 identifier, so use whatever is received */
mIdentifierUpdate = message;

View File

@@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.message.tsbk.TSBKMessage;
import decode.p25.reference.DataUnitID;
@@ -30,8 +30,8 @@ public class SecondaryControlChannelBroadcast extends TSBKMessage
public static final int[] SYSTEM_SERVICE_CLASS_2 = { 136,137,138,139,140,
141,142,143 };
private IdentifierProvider mIdentifierUpdate1;
private IdentifierProvider mIdentifierUpdate2;
private IBandIdentifier mIdentifierUpdate1;
private IBandIdentifier mIdentifierUpdate2;
public SecondaryControlChannelBroadcast( BinaryMessage message,
DataUnitID duid,
@@ -145,7 +145,7 @@ public class SecondaryControlChannelBroadcast extends TSBKMessage
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getIdentifier1() )
{

View File

@@ -2,7 +2,7 @@ package decode.p25.message.tsbk.osp.data;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.reference.DataUnitID;
@@ -22,8 +22,8 @@ public class SNDCPDataChannelAnnouncementExplicit extends SNDCPData
public static final int[] DATA_ACCESS_CONTROL = { 128,129,130,131,132,133,
134,135,136,137,138,139,140,141,142,143 };
private IdentifierProvider mIdentifierUpdateTransmit;
private IdentifierProvider mIdentifierUpdateReceive;
private IBandIdentifier mIdentifierUpdateTransmit;
private IBandIdentifier mIdentifierUpdateReceive;
public SNDCPDataChannelAnnouncementExplicit( BinaryMessage message,
DataUnitID duid,
@@ -118,7 +118,7 @@ public class SNDCPDataChannelAnnouncementExplicit extends SNDCPData
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitChannelIdentifier() )
{

View File

@@ -2,7 +2,7 @@ package decode.p25.message.tsbk.osp.data;
import alias.AliasList;
import bits.BinaryMessage;
import decode.p25.message.IdentifierProvider;
import decode.p25.message.IBandIdentifier;
import decode.p25.message.IdentifierReceiver;
import decode.p25.reference.DataUnitID;
@@ -18,8 +18,8 @@ public class SNDCPDataChannelGrant extends SNDCPData implements IdentifierReceiv
public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
private IdentifierProvider mIdentifierUpdateTransmit;
private IdentifierProvider mIdentifierUpdateReceive;
private IBandIdentifier mIdentifierUpdateTransmit;
private IBandIdentifier mIdentifierUpdateReceive;
public SNDCPDataChannelGrant( BinaryMessage message,
DataUnitID duid,
@@ -91,7 +91,7 @@ public class SNDCPDataChannelGrant extends SNDCPData implements IdentifierReceiv
}
@Override
public void setIdentifierMessage( int identifier, IdentifierProvider message )
public void setIdentifierMessage( int identifier, IBandIdentifier message )
{
if( identifier == getTransmitChannelIdentifier() )
{

View File

@@ -2,71 +2,71 @@ package decode.p25.reference;
public enum VendorLinkControlOpcode
{
RESERVED_00( "RESERVED_00 ", "Reserved", 0 ),
RESERVED_01( "RESERVED_01 ", "Reserved", 1 ),
RESERVED_02( "RESERVED_02 ", "Reserved", 2 ),
RESERVED_03( "RESERVED_03 ", "Reserved", 3 ),
RESERVED_04( "RESERVED_04 ", "Reserved", 4 ),
RESERVED_05( "RESERVED_05 ", "Reserved", 5 ),
RESERVED_06( "RESERVED_06 ", "Reserved", 6 ),
RESERVED_07( "RESERVED_07 ", "Reserved", 7 ),
RESERVED_08( "RESERVED_0B ", "Reserved", 8 ),
RESERVED_09( "RESERVED_0B ", "Reserved", 9 ),
RESERVED_0A( "RESERVED_0B ", "Reserved", 10 ),
RESERVED_0B( "RESERVED_0B ", "Reserved", 11 ),
RESERVED_0C( "RESERVED_0C ", "Reserved", 12 ),
RESERVED_0D( "RESERVED_0D ", "Reserved", 13 ),
RESERVED_0E( "RESERVED_0E ", "Reserved", 14 ),
RESERVED_0F( "RESERVED_0F ", "Reserved", 15 ),
RESERVED_10( "RESERVED_10 ", "Reserved", 16 ),
RESERVED_11( "RESERVED_11 ", "Reserved", 17 ),
RESERVED_12( "RESERVED_12 ", "Reserved", 18 ),
RESERVED_13( "RESERVED_13 ", "Reserved", 19 ),
RESERVED_14( "RESERVED_14 ", "Reserved", 20 ),
RESERVED_15( "RESERVED_15 ", "Reserved", 21 ),
RESERVED_16( "RESERVED_16 ", "Reserved", 22 ),
RESERVED_17( "RESERVED_17 ", "Reserved", 23 ),
RESERVED_18( "RESERVED_18 ", "Reserved", 24 ),
RESERVED_19( "RESERVED_19 ", "Reserved", 25 ),
RESERVED_1A( "RESERVED_1A ", "Reserved", 26 ),
RESERVED_1B( "RESERVED_1B ", "Reserved", 27 ),
RESERVED_1C( "RESERVED_1C ", "Reserved", 28 ),
RESERVED_1D( "RESERVED_1D ", "Reserved", 29 ),
RESERVED_1E( "RESERVED_1E ", "Reserved", 30 ),
RESERVED_1F( "RESERVED_1F ", "Reserved", 31 ),
RESERVED_20( "RESERVED_20 ", "Reserved", 32 ),
RESERVED_21( "RESERVED_21 ", "Reserved", 33 ),
RESERVED_22( "RESERVED_22 ", "Reserved", 34 ),
RESERVED_23( "RESERVED_23 ", "Reserved", 35 ),
RESERVED_24( "RESERVED_24 ", "Reserved", 36 ),
RESERVED_25( "RESERVED_25 ", "Reserved", 37 ),
RESERVED_26( "RESERVED_26 ", "Reserved", 38 ),
RESERVED_27( "RESERVED_27 ", "Reserved", 39 ),
RESERVED_28( "RESERVED_28 ", "Reserved", 40 ),
RESERVED_29( "RESERVED_29 ", "Reserved", 41 ),
RESERVED_2A( "RESERVED_2A ", "Reserved", 42 ),
RESERVED_2B( "RESERVED_2B ", "Reserved", 43 ),
RESERVED_2C( "RESERVED_2C ", "Reserved", 44 ),
RESERVED_2D( "RESERVED_2D ", "Reserved", 45 ),
RESERVED_2E( "RESERVED_2E ", "Reserved", 46 ),
RESERVED_2F( "RESERVED_2F ", "Reserved", 47 ),
RESERVED_30( "RESERVED_30 ", "Reserved", 48 ),
RESERVED_31( "RESERVED_31 ", "Reserved", 49 ),
RESERVED_32( "RESERVED_32 ", "Reserved", 50 ),
RESERVED_33( "RESERVED_33 ", "Reserved", 51 ),
RESERVED_34( "RESERVED_34 ", "Reserved", 52 ),
RESERVED_35( "RESERVED_35 ", "Reserved", 53 ),
RESERVED_36( "RESERVED_36 ", "Reserved", 54 ),
RESERVED_37( "RESERVED_37 ", "Reserved", 55 ),
RESERVED_38( "RESERVED_38 ", "Reserved", 56 ),
RESERVED_39( "RESERVED_39 ", "Reserved", 57 ),
RESERVED_3A( "RESERVED_3A ", "Reserved", 58 ),
RESERVED_3B( "RESERVED_3B ", "Reserved", 59 ),
RESERVED_3C( "RESERVED_3C ", "Reserved", 60 ),
RESERVED_3D( "RESERVED_3D ", "Reserved", 61 ),
RESERVED_3E( "RESERVED_3E ", "Reserved", 62 ),
RESERVED_3F( "RESERVED_3F ", "Reserved", 63 ),
UNKNOWN( "UNKNOWN ", "Unknown", -1 );
RESERVED_00( "OPCODE_00", "RESERVED", 0 ),
RESERVED_01( "OPCODE_01", "RESERVED", 1 ),
RESERVED_02( "OPCODE_02", "RESERVED", 2 ),
RESERVED_03( "OPCODE_03", "RESERVED", 3 ),
RESERVED_04( "OPCODE_04", "RESERVED", 4 ),
RESERVED_05( "OPCODE_05", "RESERVED", 5 ),
RESERVED_06( "OPCODE_06", "RESERVED", 6 ),
RESERVED_07( "OPCODE_07", "RESERVED", 7 ),
RESERVED_08( "OPCODE_0B", "RESERVED", 8 ),
RESERVED_09( "OPCODE_0B", "RESERVED", 9 ),
RESERVED_0A( "OPCODE_0B", "RESERVED", 10 ),
RESERVED_0B( "OPCODE_0B", "RESERVED", 11 ),
RESERVED_0C( "OPCODE_0C", "RESERVED", 12 ),
RESERVED_0D( "OPCODE_0D", "RESERVED", 13 ),
RESERVED_0E( "OPCODE_0E", "RESERVED", 14 ),
RESERVED_0F( "OPCODE_0F", "RESERVED", 15 ),
RESERVED_10( "OPCODE_10", "RESERVED", 16 ),
RESERVED_11( "OPCODE_11", "RESERVED", 17 ),
RESERVED_12( "OPCODE_12", "RESERVED", 18 ),
RESERVED_13( "OPCODE_13", "RESERVED", 19 ),
RESERVED_14( "OPCODE_14", "RESERVED", 20 ),
RESERVED_15( "OPCODE_15", "RESERVED", 21 ),
RESERVED_16( "OPCODE_16", "RESERVED", 22 ),
RESERVED_17( "OPCODE_17", "RESERVED", 23 ),
RESERVED_18( "OPCODE_18", "RESERVED", 24 ),
RESERVED_19( "OPCODE_19", "RESERVED", 25 ),
RESERVED_1A( "OPCODE_1A", "RESERVED", 26 ),
RESERVED_1B( "OPCODE_1B", "RESERVED", 27 ),
RESERVED_1C( "OPCODE_1C", "RESERVED", 28 ),
RESERVED_1D( "OPCODE_1D", "RESERVED", 29 ),
RESERVED_1E( "OPCODE_1E", "RESERVED", 30 ),
RESERVED_1F( "OPCODE_1F", "RESERVED", 31 ),
RESERVED_20( "OPCODE_20", "RESERVED", 32 ),
RESERVED_21( "OPCODE_21", "RESERVED", 33 ),
RESERVED_22( "OPCODE_22", "RESERVED", 34 ),
RESERVED_23( "OPCODE_23", "RESERVED", 35 ),
RESERVED_24( "OPCODE_24", "RESERVED", 36 ),
RESERVED_25( "OPCODE_25", "RESERVED", 37 ),
RESERVED_26( "OPCODE_26", "RESERVED", 38 ),
RESERVED_27( "OPCODE_27", "RESERVED", 39 ),
RESERVED_28( "OPCODE_28", "RESERVED", 40 ),
RESERVED_29( "OPCODE_29", "RESERVED", 41 ),
RESERVED_2A( "OPCODE_2A", "RESERVED", 42 ),
RESERVED_2B( "OPCODE_2B", "RESERVED", 43 ),
RESERVED_2C( "OPCODE_2C", "RESERVED", 44 ),
RESERVED_2D( "OPCODE_2D", "RESERVED", 45 ),
RESERVED_2E( "OPCODE_2E", "RESERVED", 46 ),
RESERVED_2F( "OPCODE_2F", "RESERVED", 47 ),
RESERVED_30( "OPCODE_30", "RESERVED", 48 ),
RESERVED_31( "OPCODE_31", "RESERVED", 49 ),
RESERVED_32( "OPCODE_32", "RESERVED", 50 ),
RESERVED_33( "OPCODE_33", "RESERVED", 51 ),
RESERVED_34( "OPCODE_34", "RESERVED", 52 ),
RESERVED_35( "OPCODE_35", "RESERVED", 53 ),
RESERVED_36( "OPCODE_36", "RESERVED", 54 ),
RESERVED_37( "OPCODE_37", "RESERVED", 55 ),
RESERVED_38( "OPCODE_38", "RESERVED", 56 ),
RESERVED_39( "OPCODE_39", "RESERVED", 57 ),
RESERVED_3A( "OPCODE_3A", "RESERVED", 58 ),
RESERVED_3B( "OPCODE_3B", "RESERVED", 59 ),
RESERVED_3C( "OPCODE_3C", "RESERVED", 60 ),
RESERVED_3D( "OPCODE_3D", "RESERVED", 61 ),
RESERVED_3E( "OPCODE_3E", "RESERVED", 62 ),
RESERVED_3F( "OPCODE_3F", "RESERVED", 63 ),
UNKNOWN( "UNKNOWN OPCODE", "UNKNOWN", -1 );
private String mLabel;
private String mDescription;