mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 08:37:25 -05:00
P25 work in progress - final check-in of channel state and activity summary processing of TSBK and PDU messages and event generation.
This commit is contained in:
@@ -38,7 +38,7 @@ public class ThreadPoolManager
|
||||
{
|
||||
}
|
||||
|
||||
public ScheduledFuture<?> schedule( ThreadType type,
|
||||
public ScheduledFuture<?> scheduleFixedRate( ThreadType type,
|
||||
Runnable command,
|
||||
long period,
|
||||
TimeUnit unit )
|
||||
@@ -66,6 +66,25 @@ public class ThreadPoolManager
|
||||
|
||||
}
|
||||
|
||||
public void scheduleOnce( Runnable command, long delay, TimeUnit unit )
|
||||
throws RejectedExecutionException
|
||||
{
|
||||
if( mExecutor == null )
|
||||
{
|
||||
mExecutor = Executors.newScheduledThreadPool( THREAD_POOL_SIZE );
|
||||
}
|
||||
|
||||
if( mTasks.size() <= MAX_TASK_COUNT )
|
||||
{
|
||||
mExecutor.schedule( command, delay, unit );
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new RejectedExecutionException( "Cannot schedule task - at "
|
||||
+ "max task count [" + mTasks.size() + "]" );
|
||||
}
|
||||
}
|
||||
|
||||
public void cancel( ScheduledFuture<?> task )
|
||||
{
|
||||
task.cancel( true );
|
||||
|
||||
@@ -209,24 +209,29 @@ public abstract class CallEvent
|
||||
|
||||
public enum CallEventType
|
||||
{
|
||||
ACKNOWLEDGE( "Acknowledge" ),
|
||||
CALL( "Call" ),
|
||||
CALL_ALERT( "Call Alert" ),
|
||||
CALL_END( "Call End" ),
|
||||
CALL_DETECT( "Call Detect" ),
|
||||
CALL_UNIQUE_ID( "UID Call" ),
|
||||
CALL_NO_TUNER( "Call - No Tuner" ),
|
||||
CALL_TIMEOUT( "Call Timeout" ),
|
||||
COMMAND( "Command" ),
|
||||
DATA_CALL( "Data Call" ),
|
||||
DEREGISTER( "Deregister" ),
|
||||
EMERGENCY( "EMERGENCY" ),
|
||||
FUNCTION( "Function" ),
|
||||
GPS( "GPS" ),
|
||||
ID_ANI( "ANI" ),
|
||||
ID_UNIQUE( "Unique ID" ),
|
||||
PAGE( "Page" ),
|
||||
QUERY( "Query" ),
|
||||
REGISTER( "Register" ),
|
||||
REGISTER_ESN( "ESN" ),
|
||||
REQUEST( "Request" ),
|
||||
SDM( "SDM" ),
|
||||
RESPONSE( "Response" ),
|
||||
SDM( "Short Data Message" ),
|
||||
STATUS( "Status" ),
|
||||
TELEPHONE_CALL( "Telephone Call" ),
|
||||
UNKNOWN( "Unknown" ),
|
||||
INVALID( "Invalid" );
|
||||
|
||||
|
||||
@@ -283,7 +283,7 @@ public class ProcessingChain implements Listener<Message>
|
||||
{
|
||||
mProcessorTask =
|
||||
mResourceManager.getThreadPoolManager()
|
||||
.schedule( ThreadType.DECODER,
|
||||
.scheduleFixedRate( ThreadType.DECODER,
|
||||
new ComplexProcessor(),
|
||||
50, TimeUnit.MILLISECONDS );
|
||||
|
||||
@@ -305,7 +305,7 @@ public class ProcessingChain implements Listener<Message>
|
||||
{
|
||||
mProcessorTask =
|
||||
mResourceManager.getThreadPoolManager()
|
||||
.schedule( ThreadType.DECODER,
|
||||
.scheduleFixedRate( ThreadType.DECODER,
|
||||
new RealProcessor(),
|
||||
50, TimeUnit.MILLISECONDS );
|
||||
|
||||
|
||||
@@ -136,7 +136,8 @@ public class FleetsyncCallEvent extends CallEvent
|
||||
switch( message.getMessageType() )
|
||||
{
|
||||
case ACKNOWLEDGE:
|
||||
type = CallEventType.ACKNOWLEDGE;
|
||||
type = CallEventType.RESPONSE;
|
||||
sbDetails.append( "ACK" );
|
||||
break;
|
||||
case ANI:
|
||||
type = CallEventType.ID_ANI;
|
||||
|
||||
@@ -128,7 +128,7 @@ public class LJ1200CallEvent extends CallEvent
|
||||
|
||||
public static LJ1200CallEvent getLJ1200Event( LJ1200Message message )
|
||||
{
|
||||
CallEventType type = CallEventType.REQUEST;
|
||||
CallEventType type = CallEventType.COMMAND;
|
||||
|
||||
return new LJ1200CallEvent.Builder( type )
|
||||
.to( message.getAddress() )
|
||||
|
||||
@@ -137,7 +137,7 @@ public class MDCCallEvent extends CallEvent
|
||||
switch( message.getMessageType() )
|
||||
{
|
||||
case ACKNOWLEDGE:
|
||||
type = CallEventType.ACKNOWLEDGE;
|
||||
type = CallEventType.RESPONSE;
|
||||
break;
|
||||
case ANI:
|
||||
type = CallEventType.ID_ANI;
|
||||
|
||||
@@ -125,7 +125,7 @@ public class MPT1327ChannelState extends ChannelState
|
||||
else
|
||||
{
|
||||
mCallEventModel.add(
|
||||
new MPT1327CallEvent.Builder( CallEventType.ACKNOWLEDGE )
|
||||
new MPT1327CallEvent.Builder( CallEventType.RESPONSE )
|
||||
.aliasList( getProcessingChain().getAliasList() )
|
||||
.channel( String.valueOf( mChannelNumber ) )
|
||||
.details( "ACK " + identType.getLabel() )
|
||||
@@ -137,7 +137,7 @@ public class MPT1327ChannelState extends ChannelState
|
||||
break;
|
||||
case AHYC:
|
||||
mCallEventModel.add(
|
||||
new MPT1327CallEvent.Builder( CallEventType.REQUEST )
|
||||
new MPT1327CallEvent.Builder( CallEventType.COMMAND )
|
||||
.aliasList( getProcessingChain().getAliasList() )
|
||||
.channel( String.valueOf( mChannelNumber ) )
|
||||
.details( ( (MPT1327Message) message ).getRequestString() )
|
||||
|
||||
@@ -18,7 +18,10 @@
|
||||
package decode.p25;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
@@ -33,13 +36,16 @@ import alias.AliasList;
|
||||
import controller.activity.ActivitySummaryProvider;
|
||||
import decode.p25.message.pdu.PDUMessage;
|
||||
import decode.p25.message.pdu.osp.control.NetworkStatusBroadcastExtended;
|
||||
import decode.p25.message.pdu.osp.control.ProtectionParameterBroadcast;
|
||||
import decode.p25.message.pdu.osp.control.RFSSStatusBroadcastExtended;
|
||||
import decode.p25.message.tsbk.TSBKMessage;
|
||||
import decode.p25.message.tsbk.osp.control.AdjacentStatusBroadcast;
|
||||
import decode.p25.message.tsbk.osp.control.IdentifierUpdate;
|
||||
import decode.p25.message.tsbk.osp.control.NetworkStatusBroadcast;
|
||||
import decode.p25.message.tsbk.osp.control.RFSSStatusBroadcast;
|
||||
import decode.p25.message.tsbk.osp.control.SecondaryControlChannelBroadcast;
|
||||
import decode.p25.message.tsbk.osp.control.SystemService;
|
||||
import decode.p25.message.tsbk.osp.data.SNDCPDataChannelAnnouncementExplicit;
|
||||
import decode.p25.reference.Service;
|
||||
|
||||
public class P25ActivitySummary implements ActivitySummaryProvider,
|
||||
@@ -57,14 +63,19 @@ public class P25ActivitySummary implements ActivitySummaryProvider,
|
||||
|
||||
private NetworkStatusBroadcast mNetworkStatus;
|
||||
private NetworkStatusBroadcastExtended mNetworkStatusExtended;
|
||||
private ProtectionParameterBroadcast mProtectionParameterBroadcast;
|
||||
private RFSSStatusBroadcast mRFSSStatusMessage;
|
||||
private RFSSStatusBroadcastExtended mRFSSStatusMessageExtended;
|
||||
private SNDCPDataChannelAnnouncementExplicit mSNDCPDataChannel;
|
||||
private HashMap<String,AdjacentStatusBroadcast> mNeighborMap =
|
||||
new HashMap<String,AdjacentStatusBroadcast>();
|
||||
|
||||
private Set<SecondaryControlChannelBroadcast> mSecondaryControlChannels =
|
||||
new TreeSet<SecondaryControlChannelBroadcast>();
|
||||
|
||||
private HashMap<Integer,IdentifierUpdate> mBands =
|
||||
new HashMap<Integer,IdentifierUpdate>();
|
||||
|
||||
public P25ActivitySummary( AliasList list )
|
||||
{
|
||||
mAliasList = list;
|
||||
@@ -94,6 +105,23 @@ public class P25ActivitySummary implements ActivitySummaryProvider,
|
||||
|
||||
mNeighborMap.put( neighborMessage.getUniqueID(), neighborMessage );
|
||||
}
|
||||
else if( message instanceof IdentifierUpdate )
|
||||
{
|
||||
IdentifierUpdate iu = (IdentifierUpdate)message;
|
||||
|
||||
if( !mBands.containsKey( iu.getIdentifier() ) )
|
||||
{
|
||||
mBands.put( iu.getIdentifier(), iu );
|
||||
}
|
||||
}
|
||||
else if( message instanceof NetworkStatusBroadcast )
|
||||
{
|
||||
mNetworkStatus = (NetworkStatusBroadcast)message;
|
||||
}
|
||||
else if( message instanceof RFSSStatusBroadcast )
|
||||
{
|
||||
mRFSSStatusMessage = (RFSSStatusBroadcast)message;
|
||||
}
|
||||
else if( message instanceof SecondaryControlChannelBroadcast )
|
||||
{
|
||||
SecondaryControlChannelBroadcast sccb =
|
||||
@@ -105,13 +133,9 @@ public class P25ActivitySummary implements ActivitySummaryProvider,
|
||||
(SecondaryControlChannelBroadcast)message );
|
||||
}
|
||||
}
|
||||
else if( message instanceof NetworkStatusBroadcast )
|
||||
else if( message instanceof SNDCPDataChannelAnnouncementExplicit )
|
||||
{
|
||||
mNetworkStatus = (NetworkStatusBroadcast)message;
|
||||
}
|
||||
else if( message instanceof RFSSStatusBroadcast )
|
||||
{
|
||||
mRFSSStatusMessage = (RFSSStatusBroadcast)message;
|
||||
mSNDCPDataChannel = (SNDCPDataChannelAnnouncementExplicit)message;
|
||||
}
|
||||
}
|
||||
else if( message instanceof PDUMessage )
|
||||
@@ -120,6 +144,11 @@ public class P25ActivitySummary implements ActivitySummaryProvider,
|
||||
{
|
||||
mNetworkStatusExtended = (NetworkStatusBroadcastExtended)message;
|
||||
}
|
||||
else if( message instanceof ProtectionParameterBroadcast )
|
||||
{
|
||||
mProtectionParameterBroadcast =
|
||||
(ProtectionParameterBroadcast)message;
|
||||
}
|
||||
else if( message instanceof RFSSStatusBroadcastExtended )
|
||||
{
|
||||
mRFSSStatusMessageExtended = (RFSSStatusBroadcastExtended)message;
|
||||
@@ -139,15 +168,21 @@ public class P25ActivitySummary implements ActivitySummaryProvider,
|
||||
if( mNetworkStatus != null )
|
||||
{
|
||||
sb.append( "\nNAC:\t" + mNetworkStatus.getNAC() );
|
||||
sb.append( "\nSYSTEM:\t" + mNetworkStatus.getSystemID() );
|
||||
sb.append( "\nWACN:\t" + mNetworkStatus.getWACN() );
|
||||
sb.append( "\nWACN-SYS:\t" + mNetworkStatus.getWACN() );
|
||||
sb.append( "-" + mNetworkStatus.getSystemID() );
|
||||
sb.append( " [" );
|
||||
sb.append( mNetworkStatus.getNetworkCallsign() );
|
||||
sb.append( "]" );
|
||||
sb.append( "\nLRA:\t" + mNetworkStatus.getLocationRegistrationArea() );
|
||||
}
|
||||
else if( mNetworkStatusExtended != null )
|
||||
{
|
||||
sb.append( "\nNAC:\t" + mNetworkStatusExtended.getNAC() );
|
||||
sb.append( "\nSYSTEM:\t" + mNetworkStatusExtended.getSystemID() );
|
||||
sb.append( "\nWACN:\t" + mNetworkStatusExtended.getWACN() );
|
||||
sb.append( "\nWACN-SYS:\t" + mNetworkStatusExtended.getWACN() );
|
||||
sb.append( "-" + mNetworkStatusExtended.getSystemID() );
|
||||
sb.append( " [" );
|
||||
sb.append( mNetworkStatusExtended.getNetworkCallsign() );
|
||||
sb.append( "]" );
|
||||
sb.append( "\nLRA:\t" + mNetworkStatusExtended.getLocationRegistrationArea() );
|
||||
}
|
||||
|
||||
@@ -228,8 +263,48 @@ public class P25ActivitySummary implements ActivitySummaryProvider,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if( mSNDCPDataChannel != null )
|
||||
{
|
||||
sb.append( "\nSNDCP:" );
|
||||
sb.append( "\tDNLINK " + mFrequencyFormatter.format(
|
||||
(double)mSNDCPDataChannel.getDownlinkFrequency()/1E6D ) +
|
||||
" [" + mSNDCPDataChannel.getTransmitChannel() + "]" );
|
||||
sb.append( "\tUPLINK " + mFrequencyFormatter.format(
|
||||
(double)mSNDCPDataChannel.getUplinkFrequency()/1E6D ) +
|
||||
" [" + mSNDCPDataChannel.getReceiveChannel() + "]" );
|
||||
}
|
||||
|
||||
if( mProtectionParameterBroadcast != null )
|
||||
{
|
||||
sb.append( "\nENCRYPTION:" );
|
||||
sb.append( "\nTYPE:\t" + mProtectionParameterBroadcast
|
||||
.getEncryptionType().name() );
|
||||
sb.append( "\nALGORITHM:\t" + mProtectionParameterBroadcast
|
||||
.getAlgorithmID() );
|
||||
sb.append( "\nKEY:\t" + mProtectionParameterBroadcast.getKeyID() );
|
||||
sb.append( "\nINBOUND IV:\t" + mProtectionParameterBroadcast
|
||||
.getInboundInitializationVector() );
|
||||
sb.append( "\nOUTBOUND IV:\t" + mProtectionParameterBroadcast
|
||||
.getOutboundInitializationVector() );
|
||||
}
|
||||
|
||||
List<Integer> identifiers = new ArrayList( mBands.keySet() );
|
||||
Collections.sort( identifiers );
|
||||
|
||||
sb.append( "\nFREQUENCY BANDS:" );
|
||||
for( Integer id: identifiers )
|
||||
{
|
||||
IdentifierUpdate band = mBands.get( id );
|
||||
|
||||
sb.append( "\n\t" + id );
|
||||
sb.append( "- BASE: " + mFrequencyFormatter.format(
|
||||
(double)band.getBaseFrequency() / 1E6d ) );
|
||||
sb.append( " CHANNEL SIZE: " + mFrequencyFormatter.format(
|
||||
(double)band.getChannelSpacing() / 1E6d ) );
|
||||
sb.append( " UPLINK OFFSET: " + mFrequencyFormatter.format(
|
||||
(double)band.getTransmitOffset() / 1E6D ) );
|
||||
}
|
||||
|
||||
sb.append( "\n\n=================== NEIGHBORS ======================" );
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -30,10 +30,10 @@ public abstract class UnitToUnitChannelGrantExtended extends PDUMessage
|
||||
public static final int[] TARGET_ADDRESS = { 216,217,218,219,220,221,222,
|
||||
223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 };
|
||||
public static final int[] TRANSMIT_IDENTIFIER = { 240,241,242,243 };
|
||||
public static final int[] TRANSMIT_CHANNEL = { 244,245,246,247,248,249,250,
|
||||
public static final int[] TRANSMIT_NUMBER = { 244,245,246,247,248,249,250,
|
||||
251,252,253,254,255 };
|
||||
public static final int[] RECEIVE_IDENTIFIER = { 256,257,258,259 };
|
||||
public static final int[] RECEIVE_CHANNEL = { 260,261,262,263,264,265,266,
|
||||
public static final int[] RECEIVE_NUMBER = { 260,261,262,263,264,265,266,
|
||||
267,268,269,270,271 };
|
||||
public static final int[] MULTIPLE_BLOCK_CRC = { 320,321,322,323,324,325,
|
||||
326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,
|
||||
@@ -78,10 +78,10 @@ public abstract class UnitToUnitChannelGrantExtended extends PDUMessage
|
||||
sb.append( " SYS:" );
|
||||
sb.append( getSourceSystemID() );
|
||||
|
||||
sb.append( " CHAN DN:" + getTransmitIdentifier() + "-" + getTransmitChannel() );
|
||||
sb.append( " CHAN DN:" + getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber() );
|
||||
sb.append( " " + getDownlinkFrequency() );
|
||||
|
||||
sb.append( " CHAN UP:" + getReceiveIdentifier() + "-" + getReceiveChannel() );
|
||||
sb.append( " CHAN UP:" + getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber() );
|
||||
sb.append( " " + getUplinkFrequency() );
|
||||
|
||||
return sb.toString();
|
||||
@@ -133,45 +133,55 @@ public abstract class UnitToUnitChannelGrantExtended extends PDUMessage
|
||||
return mMessage.getHex( TARGET_ADDRESS, 6 );
|
||||
}
|
||||
|
||||
public int getTransmitIdentifier()
|
||||
public int getTransmitChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getTransmitChannel()
|
||||
public int getTransmitChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_CHANNEL );
|
||||
return mMessage.getInt( TRANSMIT_NUMBER );
|
||||
}
|
||||
|
||||
public int getReceiveIdentifier()
|
||||
public String getTransmitChannel()
|
||||
{
|
||||
return getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber();
|
||||
}
|
||||
|
||||
public int getReceiveChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getReceiveChannel()
|
||||
public int getReceiveChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_CHANNEL );
|
||||
return mMessage.getInt( RECEIVE_NUMBER );
|
||||
}
|
||||
|
||||
public String getReceiveChannel()
|
||||
{
|
||||
return getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber();
|
||||
}
|
||||
|
||||
public long getDownlinkFrequency()
|
||||
{
|
||||
return calculateDownlink( mTransmitIdentifierUpdate, getTransmitChannel() );
|
||||
return calculateDownlink( mTransmitIdentifierUpdate, getTransmitChannelNumber() );
|
||||
}
|
||||
|
||||
public long getUplinkFrequency()
|
||||
{
|
||||
return calculateUplink( mReceiveIdentifierUpdate, getReceiveChannel() );
|
||||
return calculateUplink( mReceiveIdentifierUpdate, getReceiveChannelNumber() );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIdentifierMessage( int identifier, IdentifierUpdate message )
|
||||
{
|
||||
if( identifier == getTransmitIdentifier() )
|
||||
if( identifier == getTransmitChannelIdentifier() )
|
||||
{
|
||||
mTransmitIdentifierUpdate = message;
|
||||
}
|
||||
|
||||
if( identifier == getReceiveIdentifier() )
|
||||
if( identifier == getReceiveChannelIdentifier() )
|
||||
{
|
||||
mReceiveIdentifierUpdate = message;
|
||||
}
|
||||
@@ -181,8 +191,8 @@ public abstract class UnitToUnitChannelGrantExtended extends PDUMessage
|
||||
{
|
||||
int[] idens = new int[ 2 ];
|
||||
|
||||
idens[ 0 ] = getTransmitIdentifier();
|
||||
idens[ 1 ] = getReceiveIdentifier();
|
||||
idens[ 0 ] = getTransmitChannelIdentifier();
|
||||
idens[ 1 ] = getReceiveChannelIdentifier();
|
||||
|
||||
return idens;
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ public class GroupAffiliationResponseExtended extends PDUMessage
|
||||
sb.append( getMessageStub() );
|
||||
|
||||
sb.append( "AFFILIATION:" );
|
||||
sb.append( getGroupAffiliationResponse().name() );
|
||||
sb.append( getResponse().name() );
|
||||
|
||||
sb.append( " TO:" );
|
||||
sb.append( getTargetAddress() );
|
||||
@@ -123,7 +123,7 @@ public class GroupAffiliationResponseExtended extends PDUMessage
|
||||
return mMessage.getHex( GROUP_ID, 4 );
|
||||
}
|
||||
|
||||
public Response getGroupAffiliationResponse()
|
||||
public Response getResponse()
|
||||
{
|
||||
return Response.fromValue(
|
||||
mMessage.getInt( GROUP_AFFILIATION_RESPONSE_VALUE ) );
|
||||
|
||||
@@ -9,6 +9,7 @@ import decode.p25.message.tsbk.osp.control.IdentifierUpdateReceiver;
|
||||
import decode.p25.message.tsbk.osp.control.SystemService;
|
||||
import decode.p25.reference.DataUnitID;
|
||||
import decode.p25.reference.Opcode;
|
||||
import decode.p25.reference.P25NetworkCallsign;
|
||||
|
||||
public class NetworkStatusBroadcastExtended extends PDUMessage
|
||||
implements IdentifierUpdateReceiver
|
||||
@@ -88,7 +89,13 @@ public class NetworkStatusBroadcastExtended extends PDUMessage
|
||||
|
||||
public String getWACN()
|
||||
{
|
||||
return mMessage.getHex( WACN, 6 );
|
||||
return mMessage.getHex( WACN, 5 );
|
||||
}
|
||||
|
||||
public String getNetworkCallsign()
|
||||
{
|
||||
return P25NetworkCallsign.getCallsign( mMessage.getInt( WACN ),
|
||||
mMessage.getInt( SYSTEM_ID ) );
|
||||
}
|
||||
|
||||
public int getTransmitIdentifier()
|
||||
|
||||
@@ -10,7 +10,7 @@ import decode.p25.reference.Response;
|
||||
|
||||
public class UnitRegistrationResponseExtended extends PDUMessage
|
||||
{
|
||||
public static final int[] REGISTRATION_DEFAULT_ADDRESS = { 88,89,90,91,92,
|
||||
public static final int[] ASSIGNED_SOURCE_ADDRESS = { 88,89,90,91,92,
|
||||
93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 };
|
||||
public static final int[] WACN = { 128,129,130,131,132,133,134,135,
|
||||
136,137,138,139,140,141,142,143,160,161,162,163 };
|
||||
@@ -48,7 +48,7 @@ public class UnitRegistrationResponseExtended extends PDUMessage
|
||||
sb.append( getMessageStub() );
|
||||
|
||||
sb.append( "REGISTRATION:" );
|
||||
sb.append( getUnitRegistrationResponse().name() );
|
||||
sb.append( getResponse().name() );
|
||||
|
||||
sb.append( " SRC ID:" );
|
||||
sb.append( getSourceID() );
|
||||
@@ -65,6 +65,11 @@ public class UnitRegistrationResponseExtended extends PDUMessage
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String getAssignedSourceAddress()
|
||||
{
|
||||
return mMessage.getHex( ASSIGNED_SOURCE_ADDRESS, 6 );
|
||||
}
|
||||
|
||||
public String getWACN()
|
||||
{
|
||||
return mMessage.getHex( WACN, 5 );
|
||||
@@ -85,7 +90,7 @@ public class UnitRegistrationResponseExtended extends PDUMessage
|
||||
return mMessage.getHex( SOURCE_ADDRESS, 6 );
|
||||
}
|
||||
|
||||
public Response getUnitRegistrationResponse()
|
||||
public Response getResponse()
|
||||
{
|
||||
return Response.fromValue(
|
||||
mMessage.getInt( UNIT_REGISTRATION_RESPONSE_VALUE ) );
|
||||
|
||||
@@ -25,10 +25,10 @@ public class GroupDataChannelGrantExtended extends PDUMessage
|
||||
public static final int[] SERVICE_OPTIONS = { 128,129,130,131,132,133,134,
|
||||
135 };
|
||||
public static final int[] TRANSMIT_IDENTIFIER = { 160,161,162,163 };
|
||||
public static final int[] TRANSMIT_CHANNEL = { 164,165,166,167,168,169,170,
|
||||
public static final int[] TRANSMIT_NUMBER = { 164,165,166,167,168,169,170,
|
||||
171,172,173,174,175 };
|
||||
public static final int[] RECEIVE_IDENTIFIER = { 176,177,178,179 };
|
||||
public static final int[] RECEIVE_CHANNEL = { 180,181,182,183,184,185,186,
|
||||
public static final int[] RECEIVE_NUMBER = { 180,181,182,183,184,185,186,
|
||||
187,188,189,190,191 };
|
||||
public static final int[] GROUP_ADDRESS = { 192,193,194,195,196,197,198,199,
|
||||
200,201,202,203,204,205,206,207 };
|
||||
@@ -72,10 +72,10 @@ public class GroupDataChannelGrantExtended extends PDUMessage
|
||||
sb.append( " TO:" );
|
||||
sb.append( getGroupAddress() );
|
||||
|
||||
sb.append( " CHAN DN:" + getTransmitIdentifier() + "-" + getTransmitChannel() );
|
||||
sb.append( " CHAN DN:" + getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber() );
|
||||
sb.append( " " + getDownlinkFrequency() );
|
||||
|
||||
sb.append( " CHAN UP:" + getReceiveIdentifier() + "-" + getReceiveChannel() );
|
||||
sb.append( " CHAN UP:" + getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber() );
|
||||
sb.append( " " + getUplinkFrequency() );
|
||||
|
||||
return sb.toString();
|
||||
@@ -112,45 +112,55 @@ public class GroupDataChannelGrantExtended extends PDUMessage
|
||||
return mMessage.getHex( GROUP_ADDRESS, 4 );
|
||||
}
|
||||
|
||||
public int getTransmitIdentifier()
|
||||
public int getTransmitChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getTransmitChannel()
|
||||
public int getTransmitChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_CHANNEL );
|
||||
return mMessage.getInt( TRANSMIT_NUMBER );
|
||||
}
|
||||
|
||||
public int getReceiveIdentifier()
|
||||
public String getTransmitChannel()
|
||||
{
|
||||
return getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber();
|
||||
}
|
||||
|
||||
public int getReceiveChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getReceiveChannel()
|
||||
public int getReceiveChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_CHANNEL );
|
||||
return mMessage.getInt( RECEIVE_NUMBER );
|
||||
}
|
||||
|
||||
public String getReceiveChannel()
|
||||
{
|
||||
return getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber();
|
||||
}
|
||||
|
||||
public long getDownlinkFrequency()
|
||||
{
|
||||
return calculateDownlink( mTransmitIdentifierUpdate, getTransmitChannel() );
|
||||
return calculateDownlink( mTransmitIdentifierUpdate, getTransmitChannelNumber() );
|
||||
}
|
||||
|
||||
public long getUplinkFrequency()
|
||||
{
|
||||
return calculateUplink( mReceiveIdentifierUpdate, getReceiveChannel() );
|
||||
return calculateUplink( mReceiveIdentifierUpdate, getReceiveChannelNumber() );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIdentifierMessage( int identifier, IdentifierUpdate message )
|
||||
{
|
||||
if( identifier == getTransmitIdentifier() )
|
||||
if( identifier == getTransmitChannelIdentifier() )
|
||||
{
|
||||
mTransmitIdentifierUpdate = message;
|
||||
}
|
||||
|
||||
if( identifier == getReceiveIdentifier() )
|
||||
if( identifier == getReceiveChannelIdentifier() )
|
||||
{
|
||||
mReceiveIdentifierUpdate = message;
|
||||
}
|
||||
@@ -160,8 +170,8 @@ public class GroupDataChannelGrantExtended extends PDUMessage
|
||||
{
|
||||
int[] idens = new int[ 2 ];
|
||||
|
||||
idens[ 0 ] = getTransmitIdentifier();
|
||||
idens[ 1 ] = getReceiveIdentifier();
|
||||
idens[ 0 ] = getTransmitChannelIdentifier();
|
||||
idens[ 1 ] = getReceiveChannelIdentifier();
|
||||
|
||||
return idens;
|
||||
}
|
||||
|
||||
@@ -23,10 +23,10 @@ public class GroupVoiceChannelGrantExplicit extends PDUMessage
|
||||
public static final int[] SERVICE_OPTIONS = { 128,129,130,131,132,133,134,
|
||||
135 };
|
||||
public static final int[] TRANSMIT_IDENTIFIER = { 176,177,178,179 };
|
||||
public static final int[] TRANSMIT_CHANNEL = { 180,181,182,183,184,185,186,
|
||||
public static final int[] TRANSMIT_NUMBER = { 180,181,182,183,184,185,186,
|
||||
187,188,189,190,191 };
|
||||
public static final int[] RECEIVE_IDENTIFIER = { 192,193,194,195 };
|
||||
public static final int[] RECEIVE_CHANNEL = { 196,197,198,199,200,201,202,
|
||||
public static final int[] RECEIVE_NUMBER = { 196,197,198,199,200,201,202,
|
||||
203,204,205,206,207 };
|
||||
public static final int[] GROUP_ADDRESS = { 208,209,210,211,212,213,214,215,
|
||||
216,217,218,219,220,221,222,223 };
|
||||
@@ -70,10 +70,10 @@ public class GroupVoiceChannelGrantExplicit extends PDUMessage
|
||||
sb.append( " GRP:" );
|
||||
sb.append( getGroupAddress() );
|
||||
|
||||
sb.append( " CHAN DN:" + getTransmitIdentifier() + "-" + getTransmitChannel() );
|
||||
sb.append( " CHAN DN:" + getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber() );
|
||||
sb.append( " " + getDownlinkFrequency() );
|
||||
|
||||
sb.append( " CHAN UP:" + getReceiveIdentifier() + "-" + getReceiveChannel() );
|
||||
sb.append( " CHAN UP:" + getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber() );
|
||||
sb.append( " " + getUplinkFrequency() );
|
||||
|
||||
return sb.toString();
|
||||
@@ -110,45 +110,55 @@ public class GroupVoiceChannelGrantExplicit extends PDUMessage
|
||||
return mMessage.getHex( GROUP_ADDRESS, 4 );
|
||||
}
|
||||
|
||||
public int getTransmitIdentifier()
|
||||
public int getTransmitChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getTransmitChannel()
|
||||
public int getTransmitChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_CHANNEL );
|
||||
return mMessage.getInt( TRANSMIT_NUMBER );
|
||||
}
|
||||
|
||||
public int getReceiveIdentifier()
|
||||
public String getTransmitChannel()
|
||||
{
|
||||
return getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber();
|
||||
}
|
||||
|
||||
public int getReceiveChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getReceiveChannel()
|
||||
public int getReceiveChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_CHANNEL );
|
||||
return mMessage.getInt( RECEIVE_NUMBER );
|
||||
}
|
||||
|
||||
public String getReceiveChannel()
|
||||
{
|
||||
return getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber();
|
||||
}
|
||||
|
||||
public long getDownlinkFrequency()
|
||||
{
|
||||
return calculateDownlink( mTransmitIdentifierUpdate, getTransmitChannel() );
|
||||
return calculateDownlink( mTransmitIdentifierUpdate, getTransmitChannelNumber() );
|
||||
}
|
||||
|
||||
public long getUplinkFrequency()
|
||||
{
|
||||
return calculateUplink( mReceiveIdentifierUpdate, getReceiveChannel() );
|
||||
return calculateUplink( mReceiveIdentifierUpdate, getReceiveChannelNumber() );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIdentifierMessage( int identifier, IdentifierUpdate message )
|
||||
{
|
||||
if( identifier == getTransmitIdentifier() )
|
||||
if( identifier == getTransmitChannelIdentifier() )
|
||||
{
|
||||
mTransmitIdentifierUpdate = message;
|
||||
}
|
||||
|
||||
if( identifier == getReceiveIdentifier() )
|
||||
if( identifier == getReceiveChannelIdentifier() )
|
||||
{
|
||||
mReceiveIdentifierUpdate = message;
|
||||
}
|
||||
@@ -158,8 +168,8 @@ public class GroupVoiceChannelGrantExplicit extends PDUMessage
|
||||
{
|
||||
int[] idens = new int[ 2 ];
|
||||
|
||||
idens[ 0 ] = getTransmitIdentifier();
|
||||
idens[ 1 ] = getReceiveIdentifier();
|
||||
idens[ 0 ] = getTransmitChannelIdentifier();
|
||||
idens[ 1 ] = getReceiveChannelIdentifier();
|
||||
|
||||
return idens;
|
||||
}
|
||||
|
||||
@@ -25,10 +25,10 @@ public class TelephoneInterconnectChannelGrantExplicit extends PDUMessage
|
||||
public static final int[] SERVICE_OPTIONS = { 128,129,130,131,132,133,134,
|
||||
135 };
|
||||
public static final int[] TRANSMIT_IDENTIFIER = { 160,161,162,163 };
|
||||
public static final int[] TRANSMIT_CHANNEL = { 164,165,166,167,168,169,170,
|
||||
public static final int[] TRANSMIT_NUMBER = { 164,165,166,167,168,169,170,
|
||||
171,172,173,174,175 };
|
||||
public static final int[] RECEIVE_IDENTIFIER = { 176,177,178,179 };
|
||||
public static final int[] RECEIVE_CHANNEL = { 180,181,182,183,184,185,186,
|
||||
public static final int[] RECEIVE_NUMBER = { 180,181,182,183,184,185,186,
|
||||
187,188,189,190,191 };
|
||||
public static final int[] CALL_TIMER = { 192,193,194,195,196,197,198,199,
|
||||
200,201,202,203,204,205,206,207 };
|
||||
@@ -72,10 +72,10 @@ public class TelephoneInterconnectChannelGrantExplicit extends PDUMessage
|
||||
sb.append( " CALL TIMER:" );
|
||||
sb.append( mTimeDurationFormat.format( new Date( getCallTimer() ) ) );
|
||||
|
||||
sb.append( " CHAN DN:" + getTransmitIdentifier() + "-" + getTransmitChannel() );
|
||||
sb.append( " CHAN DN:" + getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber() );
|
||||
sb.append( " " + getDownlinkFrequency() );
|
||||
|
||||
sb.append( " CHAN UP:" + getReceiveIdentifier() + "-" + getReceiveChannel() );
|
||||
sb.append( " CHAN UP:" + getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber() );
|
||||
sb.append( " " + getUplinkFrequency() );
|
||||
|
||||
return sb.toString();
|
||||
@@ -86,7 +86,7 @@ public class TelephoneInterconnectChannelGrantExplicit extends PDUMessage
|
||||
return mMessage.get( EMERGENCY_FLAG );
|
||||
}
|
||||
|
||||
public boolean isEncryptedChannel()
|
||||
public boolean isEncrypted()
|
||||
{
|
||||
return mMessage.get( ENCRYPTED_CHANNEL_FLAG );
|
||||
}
|
||||
@@ -117,45 +117,55 @@ public class TelephoneInterconnectChannelGrantExplicit extends PDUMessage
|
||||
return timer / 100;
|
||||
}
|
||||
|
||||
public int getTransmitIdentifier()
|
||||
public int getTransmitChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getTransmitChannel()
|
||||
public int getTransmitChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_CHANNEL );
|
||||
return mMessage.getInt( TRANSMIT_NUMBER );
|
||||
}
|
||||
|
||||
public int getReceiveIdentifier()
|
||||
public String getTransmitChannel()
|
||||
{
|
||||
return getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber();
|
||||
}
|
||||
|
||||
public int getReceiveChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getReceiveChannel()
|
||||
public int getReceiveChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_CHANNEL );
|
||||
return mMessage.getInt( RECEIVE_NUMBER );
|
||||
}
|
||||
|
||||
public String getReceiveChannel()
|
||||
{
|
||||
return getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber();
|
||||
}
|
||||
|
||||
public long getDownlinkFrequency()
|
||||
{
|
||||
return calculateDownlink( mTransmitIdentifierUpdate, getTransmitChannel() );
|
||||
return calculateDownlink( mTransmitIdentifierUpdate, getTransmitChannelNumber() );
|
||||
}
|
||||
|
||||
public long getUplinkFrequency()
|
||||
{
|
||||
return calculateUplink( mReceiveIdentifierUpdate, getReceiveChannel() );
|
||||
return calculateUplink( mReceiveIdentifierUpdate, getReceiveChannelNumber() );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIdentifierMessage( int identifier, IdentifierUpdate message )
|
||||
{
|
||||
if( identifier == getTransmitIdentifier() )
|
||||
if( identifier == getTransmitChannelIdentifier() )
|
||||
{
|
||||
mTransmitIdentifierUpdate = message;
|
||||
}
|
||||
|
||||
if( identifier == getReceiveIdentifier() )
|
||||
if( identifier == getReceiveChannelIdentifier() )
|
||||
{
|
||||
mReceiveIdentifierUpdate = message;
|
||||
}
|
||||
@@ -165,8 +175,8 @@ public class TelephoneInterconnectChannelGrantExplicit extends PDUMessage
|
||||
{
|
||||
int[] idens = new int[ 2 ];
|
||||
|
||||
idens[ 0 ] = getTransmitIdentifier();
|
||||
idens[ 1 ] = getReceiveIdentifier();
|
||||
idens[ 0 ] = getTransmitChannelIdentifier();
|
||||
idens[ 1 ] = getReceiveChannelIdentifier();
|
||||
|
||||
return idens;
|
||||
}
|
||||
|
||||
@@ -95,12 +95,12 @@ public class UnitToUnitAnswerRequestExplicit extends PDUMessage
|
||||
|
||||
public String getWACN()
|
||||
{
|
||||
return mMessage.getHex( WACN, 6 );
|
||||
return mMessage.getHex( WACN, 5 );
|
||||
}
|
||||
|
||||
public String getSourceID()
|
||||
{
|
||||
return mMessage.getHex( SOURCE_ID, 4 );
|
||||
return mMessage.getHex( SOURCE_ID, 6 );
|
||||
}
|
||||
|
||||
public String getTargetAddress()
|
||||
|
||||
@@ -31,10 +31,10 @@ public class UnitToUnitVoiceChannelGrantUpdateExtended extends PDUMessage
|
||||
public static final int[] TARGET_ADDRESS = { 216,217,218,219,220,221,222,
|
||||
223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 };
|
||||
public static final int[] TRANSMIT_IDENTIFIER = { 240,241,242,243 };
|
||||
public static final int[] TRANSMIT_CHANNEL = { 244,245,246,247,248,249,250,
|
||||
public static final int[] TRANSMIT_NUMBER = { 244,245,246,247,248,249,250,
|
||||
251,252,253,254,255 };
|
||||
public static final int[] RECEIVE_IDENTIFIER = { 256,257,258,259 };
|
||||
public static final int[] RECEIVE_CHANNEL = { 260,261,262,263,264,265,266,
|
||||
public static final int[] RECEIVE_NUMBER = { 260,261,262,263,264,265,266,
|
||||
267,268,269,270,271 };
|
||||
public static final int[] MULTIPLE_BLOCK_CRC = { 320,321,322,323,324,325,
|
||||
326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,
|
||||
@@ -85,10 +85,10 @@ public class UnitToUnitVoiceChannelGrantUpdateExtended extends PDUMessage
|
||||
sb.append( " SYS:" );
|
||||
sb.append( getSourceSystemID() );
|
||||
|
||||
sb.append( " CHAN DN:" + getTransmitIdentifier() + "-" + getTransmitChannel() );
|
||||
sb.append( " CHAN DN:" + getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber() );
|
||||
sb.append( " " + getDownlinkFrequency() );
|
||||
|
||||
sb.append( " CHAN UP:" + getReceiveIdentifier() + "-" + getReceiveChannel() );
|
||||
sb.append( " CHAN UP:" + getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber() );
|
||||
sb.append( " " + getUplinkFrequency() );
|
||||
|
||||
return sb.toString();
|
||||
@@ -140,45 +140,55 @@ public class UnitToUnitVoiceChannelGrantUpdateExtended extends PDUMessage
|
||||
return mMessage.getHex( TARGET_ADDRESS, 6 );
|
||||
}
|
||||
|
||||
public int getTransmitIdentifier()
|
||||
public int getTransmitChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getTransmitChannel()
|
||||
public int getTransmitChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_CHANNEL );
|
||||
return mMessage.getInt( TRANSMIT_NUMBER );
|
||||
}
|
||||
|
||||
public int getReceiveIdentifier()
|
||||
public String getTransmitChannel()
|
||||
{
|
||||
return getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber();
|
||||
}
|
||||
|
||||
public int getReceiveChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getReceiveChannel()
|
||||
public int getReceiveChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_CHANNEL );
|
||||
return mMessage.getInt( RECEIVE_NUMBER );
|
||||
}
|
||||
|
||||
public String getReceiveChannel()
|
||||
{
|
||||
return getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber();
|
||||
}
|
||||
|
||||
public long getDownlinkFrequency()
|
||||
{
|
||||
return calculateDownlink( mTransmitIdentifierUpdate, getTransmitChannel() );
|
||||
return calculateDownlink( mTransmitIdentifierUpdate, getTransmitChannelNumber() );
|
||||
}
|
||||
|
||||
public long getUplinkFrequency()
|
||||
{
|
||||
return calculateUplink( mReceiveIdentifierUpdate, getReceiveChannel() );
|
||||
return calculateUplink( mReceiveIdentifierUpdate, getReceiveChannelNumber() );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIdentifierMessage( int identifier, IdentifierUpdate message )
|
||||
{
|
||||
if( identifier == getTransmitIdentifier() )
|
||||
if( identifier == getTransmitChannelIdentifier() )
|
||||
{
|
||||
mTransmitIdentifierUpdate = message;
|
||||
}
|
||||
|
||||
if( identifier == getReceiveIdentifier() )
|
||||
if( identifier == getReceiveChannelIdentifier() )
|
||||
{
|
||||
mReceiveIdentifierUpdate = message;
|
||||
}
|
||||
@@ -188,8 +198,8 @@ public class UnitToUnitVoiceChannelGrantUpdateExtended extends PDUMessage
|
||||
{
|
||||
int[] idens = new int[ 2 ];
|
||||
|
||||
idens[ 0 ] = getTransmitIdentifier();
|
||||
idens[ 1 ] = getReceiveIdentifier();
|
||||
idens[ 0 ] = getTransmitChannelIdentifier();
|
||||
idens[ 1 ] = getReceiveChannelIdentifier();
|
||||
|
||||
return idens;
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ public abstract class ChannelGrant extends ServiceMessage
|
||||
implements IdentifierUpdateReceiver
|
||||
{
|
||||
public static final int[] PRIORITY = { 85,86,87 };
|
||||
public static final int[] CHANNEL_ID = { 88,89,90,91 };
|
||||
public static final int[] CHANNEL_IDENTIFIER = { 88,89,90,91 };
|
||||
public static final int[] CHANNEL_NUMBER = { 92,93,94,95,96,97,98,99,100,
|
||||
101,102,103 };
|
||||
|
||||
@@ -33,14 +33,18 @@ public abstract class ChannelGrant extends ServiceMessage
|
||||
|
||||
public int getChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( CHANNEL_ID );
|
||||
return mMessage.getInt( CHANNEL_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getChannel()
|
||||
public int getChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( CHANNEL_NUMBER );
|
||||
}
|
||||
|
||||
|
||||
public String getChannel()
|
||||
{
|
||||
return getChannelIdentifier() + "-" + getChannelNumber();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIdentifierMessage( int identifier, IdentifierUpdate message )
|
||||
@@ -59,12 +63,12 @@ public abstract class ChannelGrant extends ServiceMessage
|
||||
|
||||
public long getDownlinkFrequency()
|
||||
{
|
||||
return calculateDownlink( mIdentifierUpdate, getChannel() );
|
||||
return calculateDownlink( mIdentifierUpdate, getChannelNumber() );
|
||||
}
|
||||
|
||||
public long getUplinkFrequency()
|
||||
{
|
||||
return calculateUplink( mIdentifierUpdate, getChannel() );
|
||||
return calculateUplink( mIdentifierUpdate, getChannelNumber() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ public abstract class GroupChannelGrant extends ChannelGrant
|
||||
sb.append( getGroupAddress() );
|
||||
|
||||
sb.append( " CHAN:" );
|
||||
sb.append( getChannelIdentifier() + "-" + getChannel() );
|
||||
sb.append( getChannelIdentifier() + "-" + getChannelNumber() );
|
||||
|
||||
sb.append( " DN:" + getDownlinkFrequency() );
|
||||
|
||||
|
||||
@@ -7,11 +7,11 @@ import decode.p25.reference.DataUnitID;
|
||||
|
||||
public abstract class GroupChannelGrantExplicit extends ChannelGrant
|
||||
{
|
||||
public static final int[] TRANSMIT_CHANNEL_ID = { 96,97,98,99 };
|
||||
public static final int[] TRANSMIT_CHANNEL_NUMBER = { 100,101,102,103,
|
||||
public static final int[] TRANSMIT_IDENTIFIER = { 96,97,98,99 };
|
||||
public static final int[] TRANSMIT_NUMBER = { 100,101,102,103,
|
||||
104,105,106,107,108,109,110,111 };
|
||||
public static final int[] RECEIVE_CHANNEL_ID = { 112,113,114,115 };
|
||||
public static final int[] RECEIVE_CHANNEL_NUMBER = { 116,117,118,119,
|
||||
public static final int[] RECEIVE_IDENTIFIER = { 112,113,114,115 };
|
||||
public static final int[] RECEIVE_NUMBER = { 116,117,118,119,
|
||||
120,121,122,123,124,125,126,127 };
|
||||
public static final int[] GROUP_ADDRESS = { 128,129,130,131,132,133,134,135,
|
||||
136,137,138,139,140,141,142,143 };
|
||||
@@ -38,10 +38,10 @@ public abstract class GroupChannelGrantExplicit extends ChannelGrant
|
||||
}
|
||||
|
||||
sb.append( " XMIT:" );
|
||||
sb.append( getTransmitChannelID() + "/" + getTransmitChannelNumber() );
|
||||
sb.append( getTransmitChannelIdentifier() + "/" + getTransmitChannelNumber() );
|
||||
|
||||
sb.append( " RCV:" );
|
||||
sb.append( getReceiveChannelID() + "/" + getReceiveChannelNumber() );
|
||||
sb.append( getReceiveChannelIdentifier() + "/" + getReceiveChannelNumber() );
|
||||
|
||||
sb.append( " GRP:" );
|
||||
sb.append( getGroupAddress() );
|
||||
@@ -49,24 +49,34 @@ public abstract class GroupChannelGrantExplicit extends ChannelGrant
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public int getTransmitChannelID()
|
||||
public int getTransmitChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_CHANNEL_ID );
|
||||
return mMessage.getInt( TRANSMIT_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getTransmitChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_CHANNEL_NUMBER );
|
||||
return mMessage.getInt( TRANSMIT_NUMBER );
|
||||
}
|
||||
|
||||
public int getReceiveChannelID()
|
||||
public String getTransmitChannel()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_CHANNEL_ID );
|
||||
return getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber();
|
||||
}
|
||||
|
||||
public int getReceiveChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getReceiveChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_CHANNEL_NUMBER );
|
||||
return mMessage.getInt( RECEIVE_NUMBER );
|
||||
}
|
||||
|
||||
public String getReceiveChannel()
|
||||
{
|
||||
return getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber();
|
||||
}
|
||||
|
||||
public String getGroupAddress()
|
||||
@@ -77,12 +87,12 @@ public abstract class GroupChannelGrantExplicit extends ChannelGrant
|
||||
@Override
|
||||
public void setIdentifierMessage( int identifier, IdentifierUpdate message )
|
||||
{
|
||||
if( identifier == getTransmitChannelID() )
|
||||
if( identifier == getTransmitChannelIdentifier() )
|
||||
{
|
||||
mTransmitIdentifierUpdate = message;
|
||||
}
|
||||
|
||||
if( identifier == getReceiveChannelID() )
|
||||
if( identifier == getReceiveChannelIdentifier() )
|
||||
{
|
||||
mReceiveIdentifierUpdate = message;
|
||||
}
|
||||
@@ -92,19 +102,19 @@ public abstract class GroupChannelGrantExplicit extends ChannelGrant
|
||||
public int[] getIdentifiers()
|
||||
{
|
||||
int[] identifiers = new int[ 2 ];
|
||||
identifiers[ 0 ] = getTransmitChannelID();
|
||||
identifiers[ 1 ] = getReceiveChannelID();
|
||||
identifiers[ 0 ] = getTransmitChannelIdentifier();
|
||||
identifiers[ 1 ] = getReceiveChannelIdentifier();
|
||||
|
||||
return identifiers;
|
||||
}
|
||||
|
||||
public long getDownlinkFrequency()
|
||||
{
|
||||
return calculateDownlink( mTransmitIdentifierUpdate, getChannel() );
|
||||
return calculateDownlink( mTransmitIdentifierUpdate, getTransmitChannelNumber() );
|
||||
}
|
||||
|
||||
public long getUplinkFrequency()
|
||||
{
|
||||
return calculateUplink( mReceiveIdentifierUpdate, getChannel() );
|
||||
return calculateUplink( mReceiveIdentifierUpdate, getReceiveChannelNumber() );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,16 +9,17 @@ import decode.p25.reference.DataUnitID;
|
||||
public abstract class GroupMultiChannelGrant extends ChannelGrant
|
||||
implements IdentifierUpdateReceiver
|
||||
{
|
||||
public static final int[] CHANNEL_ID_1 = { 80,81,82,83 };
|
||||
public static final int[] CHANNEL_IDENTIFIER_1 = { 80,81,82,83 };
|
||||
public static final int[] CHANNEL_NUMBER_1 = { 84,85,86,87,
|
||||
88,89,90,91,92,93,94,95 };
|
||||
public static final int[] GROUP_ADDRESS_1 = { 96,97,98,99,100,101,102,103 };
|
||||
public static final int[] GROUP_ADDRESS_1 = { 96,97,98,99,100,101,102,103,
|
||||
104,105,106,107,108,109,110,111 };
|
||||
|
||||
public static final int[] CHANNEL_ID_2 = { 104,105,106,107 };
|
||||
public static final int[] CHANNEL_NUMBER_2 = { 108,109,110,111,
|
||||
112,113,114,115,116,117,118,119 };
|
||||
public static final int[] GROUP_ADDRESS_2 = { 120,121,122,123,124,125,126,
|
||||
127,128,129,130,131,132,133,134,135 };
|
||||
public static final int[] CHANNEL_IDENTIFIER_2 = { 112,113,114,115 };
|
||||
public static final int[] CHANNEL_NUMBER_2 = { 116,117,118,119,120,121,122,
|
||||
123,124,125,126,127 };
|
||||
public static final int[] GROUP_ADDRESS_2 = { 128,129,130,131,132,133,134,
|
||||
135,136,137,138,139,140,141,142,143 };
|
||||
|
||||
private IdentifierUpdate mIdentifierUpdate1;
|
||||
private IdentifierUpdate mIdentifierUpdate2;
|
||||
@@ -37,7 +38,7 @@ public abstract class GroupMultiChannelGrant extends ChannelGrant
|
||||
sb.append( getMessageStub() );
|
||||
|
||||
sb.append( " CHAN1:" );
|
||||
sb.append( getChannelID1() + "/" + getChannelNumber1() );
|
||||
sb.append( getChannelIdentifier1() + "/" + getChannelNumber1() );
|
||||
|
||||
sb.append( " GRP1:" );
|
||||
sb.append( getGroupAddress1() );
|
||||
@@ -45,7 +46,7 @@ public abstract class GroupMultiChannelGrant extends ChannelGrant
|
||||
if( hasChannelNumber2() )
|
||||
{
|
||||
sb.append( " CHAN2:" );
|
||||
sb.append( getChannelID2() + "/" + getChannelNumber2() );
|
||||
sb.append( getChannelIdentifier2() + "/" + getChannelNumber2() );
|
||||
|
||||
sb.append( " GRP2:" );
|
||||
sb.append( getGroupAddress2() );
|
||||
@@ -54,9 +55,9 @@ public abstract class GroupMultiChannelGrant extends ChannelGrant
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public int getChannelID1()
|
||||
public int getChannelIdentifier1()
|
||||
{
|
||||
return mMessage.getInt( CHANNEL_ID_1 );
|
||||
return mMessage.getInt( CHANNEL_IDENTIFIER_1 );
|
||||
}
|
||||
|
||||
public int getChannelNumber1()
|
||||
@@ -64,14 +65,19 @@ public abstract class GroupMultiChannelGrant extends ChannelGrant
|
||||
return mMessage.getInt( CHANNEL_NUMBER_1 );
|
||||
}
|
||||
|
||||
public String getChannel1()
|
||||
{
|
||||
return getChannelIdentifier1() + "-" + getChannelNumber1();
|
||||
}
|
||||
|
||||
public String getGroupAddress1()
|
||||
{
|
||||
return mMessage.getHex( GROUP_ADDRESS_1, 4 );
|
||||
}
|
||||
|
||||
public int getChannelID2()
|
||||
public int getChannelIdentifier2()
|
||||
{
|
||||
return mMessage.getInt( CHANNEL_ID_2 );
|
||||
return mMessage.getInt( CHANNEL_IDENTIFIER_2 );
|
||||
}
|
||||
|
||||
public int getChannelNumber2()
|
||||
@@ -79,6 +85,11 @@ public abstract class GroupMultiChannelGrant extends ChannelGrant
|
||||
return mMessage.getInt( CHANNEL_NUMBER_2 );
|
||||
}
|
||||
|
||||
public String getChannel2()
|
||||
{
|
||||
return getChannelIdentifier2() + "-" + getChannelNumber2();
|
||||
}
|
||||
|
||||
public String getGroupAddress2()
|
||||
{
|
||||
return mMessage.getHex( GROUP_ADDRESS_2, 4 );
|
||||
@@ -86,7 +97,8 @@ public abstract class GroupMultiChannelGrant extends ChannelGrant
|
||||
|
||||
public boolean hasChannelNumber2()
|
||||
{
|
||||
return mMessage.getInt( GROUP_ADDRESS_2 ) > 0;
|
||||
return mMessage.getInt( CHANNEL_NUMBER_2 ) !=
|
||||
mMessage.getInt( CHANNEL_NUMBER_1 );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -104,12 +116,12 @@ public abstract class GroupMultiChannelGrant extends ChannelGrant
|
||||
@Override
|
||||
public void setIdentifierMessage( int identifier, IdentifierUpdate message )
|
||||
{
|
||||
if( identifier == getChannelID1() )
|
||||
if( identifier == getChannelIdentifier1() )
|
||||
{
|
||||
mIdentifierUpdate1 = message;
|
||||
}
|
||||
|
||||
if( hasChannelNumber2() && identifier == getChannelID2() )
|
||||
if( hasChannelNumber2() && identifier == getChannelIdentifier2() )
|
||||
{
|
||||
mIdentifierUpdate2 = message;
|
||||
}
|
||||
@@ -123,13 +135,13 @@ public abstract class GroupMultiChannelGrant extends ChannelGrant
|
||||
if( hasChannelNumber2() )
|
||||
{
|
||||
identifiers = new int[ 2 ];
|
||||
identifiers[ 0 ] = getChannelID1();
|
||||
identifiers[ 1 ] = getChannelID2();
|
||||
identifiers[ 0 ] = getChannelIdentifier1();
|
||||
identifiers[ 1 ] = getChannelIdentifier2();
|
||||
}
|
||||
else
|
||||
{
|
||||
identifiers = new int[ 1 ];
|
||||
identifiers[ 0 ] = getChannelID1();
|
||||
identifiers[ 0 ] = getChannelIdentifier1();
|
||||
}
|
||||
|
||||
return identifiers;
|
||||
@@ -137,22 +149,22 @@ public abstract class GroupMultiChannelGrant extends ChannelGrant
|
||||
|
||||
public long getDownlinkFrequency1()
|
||||
{
|
||||
return calculateDownlink( mIdentifierUpdate1, getChannel() );
|
||||
return calculateDownlink( mIdentifierUpdate1, getChannelNumber() );
|
||||
}
|
||||
|
||||
public long getUplinkFrequency1()
|
||||
{
|
||||
return calculateUplink( mIdentifierUpdate1, getChannel() );
|
||||
return calculateUplink( mIdentifierUpdate1, getChannelNumber() );
|
||||
}
|
||||
|
||||
public long getDownlinkFrequency2()
|
||||
{
|
||||
return calculateDownlink( mIdentifierUpdate2, getChannel() );
|
||||
return calculateDownlink( mIdentifierUpdate2, getChannelNumber() );
|
||||
}
|
||||
|
||||
public long getUplinkFrequency2()
|
||||
{
|
||||
return calculateUplink( mIdentifierUpdate2, getChannel() );
|
||||
return calculateUplink( mIdentifierUpdate2, getChannelNumber() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -13,7 +13,10 @@ public class DenyResponse extends TSBKMessage
|
||||
public static final int[] SERVICE_TYPE = { 82,83,84,85,86,87 };
|
||||
public static final int[] REASON_CODE = { 88,89,90,91,92,93,94,95 };
|
||||
|
||||
/* Additional Info block not yet parsed */
|
||||
public static final int[] CALL_OPTIONS = { 96,97,98,99,100,101,102,103 };
|
||||
public static final int[] SOURCE_GROUP = { 104,105,106,107,108,109,110,111 };
|
||||
public static final int[] SOURCE_ADDRESS = { 96,97,98,99,100,101,102,103,104,
|
||||
105,106,107,108,109,110,111 };
|
||||
|
||||
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 };
|
||||
@@ -56,9 +59,27 @@ public class DenyResponse extends TSBKMessage
|
||||
return mMessage.get( ADDITIONAL_INFORMATION_FLAG );
|
||||
}
|
||||
|
||||
public String getServiceType()
|
||||
public Opcode getServiceType()
|
||||
{
|
||||
return mMessage.getHex( SERVICE_TYPE, 2 );
|
||||
return Opcode.fromValue( mMessage.getInt( SERVICE_TYPE ) );
|
||||
}
|
||||
|
||||
public String getSourceAddress()
|
||||
{
|
||||
switch( getServiceType() )
|
||||
{
|
||||
case GROUP_DATA_CHANNEL_GRANT:
|
||||
case GROUP_VOICE_CHANNEL_GRANT:
|
||||
return mMessage.getHex( SOURCE_GROUP, 4 );
|
||||
case UNIT_TO_UNIT_VOICE_CHANNEL_GRANT:
|
||||
case INDIVIDUAL_DATA_CHANNEL_GRANT:
|
||||
case TELEPHONE_INTERCONNECT_VOICE_CHANNEL_GRANT:
|
||||
return mMessage.getHex( SOURCE_ADDRESS, 6 );
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getTargetAddress()
|
||||
|
||||
@@ -4,13 +4,15 @@ import alias.AliasList;
|
||||
import bits.BitSetBuffer;
|
||||
import decode.p25.message.tsbk.TSBKMessage;
|
||||
import decode.p25.reference.DataUnitID;
|
||||
import decode.p25.reference.ExtendedFunction;
|
||||
import decode.p25.reference.Opcode;
|
||||
|
||||
public class ExtendedFunctionCommand extends TSBKMessage
|
||||
{
|
||||
public static final int[] EXTENDED_FUNCTION = { 80,81,82,83,84,85,86,87,
|
||||
88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,
|
||||
108,109,110,111,112,113,114,115,116,117,118,119 };
|
||||
88,89,90,91,92,93,94,95 };
|
||||
public static final int[] ARGUMENT = { 96,97,98,99,100,101,102,103,104,105,
|
||||
106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
|
||||
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 };
|
||||
|
||||
@@ -33,16 +35,43 @@ public class ExtendedFunctionCommand extends TSBKMessage
|
||||
|
||||
sb.append( getMessageStub() );
|
||||
|
||||
sb.append( " EXTENDED FUNCTION:" + getExtendedFunction() );
|
||||
sb.append( " EXTENDED FUNCTION:" + getExtendedFunction().getLabel() );
|
||||
|
||||
sb.append( " ARGUMENT: " + getTargetAddress() );
|
||||
|
||||
sb.append( " TGT ADDR: " + getTargetAddress() );
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String getExtendedFunction()
|
||||
public ExtendedFunction getExtendedFunction()
|
||||
{
|
||||
return mMessage.getHex( EXTENDED_FUNCTION, 10 );
|
||||
return ExtendedFunction.fromValue( mMessage.getInt( EXTENDED_FUNCTION ) );
|
||||
}
|
||||
|
||||
public String getArgument()
|
||||
{
|
||||
return mMessage.getHex( ARGUMENT, 6 );
|
||||
}
|
||||
|
||||
public String getSourceAddress()
|
||||
{
|
||||
switch( getExtendedFunction() )
|
||||
{
|
||||
case RADIO_CHECK:
|
||||
case RADIO_CHECK_ACK:
|
||||
case RADIO_DETACH:
|
||||
case RADIO_DETACH_ACK:
|
||||
case RADIO_INHIBIT:
|
||||
case RADIO_INHIBIT_ACK:
|
||||
case RADIO_UNINHIBIT:
|
||||
case RADIO_UNINHIBIT_ACK:
|
||||
return getArgument();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getTargetAddress()
|
||||
|
||||
@@ -45,7 +45,7 @@ public class GroupAffiliationResponse extends TSBKMessage
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String getAffiliation()
|
||||
public String getAffiliationScope()
|
||||
{
|
||||
return mMessage.get( LOCAL_GLOBAL_AFFILIATION_FLAG) ? " GLOBAL" : " LOCAL";
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import bits.BitSetBuffer;
|
||||
import decode.p25.message.tsbk.TSBKMessage;
|
||||
import decode.p25.reference.DataUnitID;
|
||||
import decode.p25.reference.Opcode;
|
||||
import decode.p25.reference.P25NetworkCallsign;
|
||||
|
||||
public class NetworkStatusBroadcast extends TSBKMessage implements IdentifierUpdateReceiver
|
||||
{
|
||||
@@ -74,6 +75,12 @@ public class NetworkStatusBroadcast extends TSBKMessage implements IdentifierUpd
|
||||
return mMessage.getHex( SYSTEM_ID, 3 );
|
||||
}
|
||||
|
||||
public String getNetworkCallsign()
|
||||
{
|
||||
return P25NetworkCallsign.getCallsign( mMessage.getInt( WACN ),
|
||||
mMessage.getInt( SYSTEM_ID ) );
|
||||
}
|
||||
|
||||
public int getIdentifier()
|
||||
{
|
||||
return mMessage.getInt( IDENTIFIER );
|
||||
|
||||
@@ -13,7 +13,10 @@ public class QueuedResponse extends TSBKMessage
|
||||
public static final int[] SERVICE_TYPE = { 82,83,84,85,86,87 };
|
||||
public static final int[] REASON_CODE = { 88,89,90,91,92,93,94,95 };
|
||||
|
||||
/* Additional Info block not yet parsed */
|
||||
public static final int[] CALL_OPTIONS = { 96,97,98,99,100,101,102,103 };
|
||||
public static final int[] SOURCE_GROUP = { 104,105,106,107,108,109,110,111 };
|
||||
public static final int[] SOURCE_ADDRESS = { 96,97,98,99,100,101,102,103,104,
|
||||
105,106,107,108,109,110,111 };
|
||||
|
||||
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 };
|
||||
@@ -56,9 +59,28 @@ public class QueuedResponse extends TSBKMessage
|
||||
return mMessage.get( ADDITIONAL_INFORMATION_FLAG );
|
||||
}
|
||||
|
||||
public String getServiceType()
|
||||
public Opcode getServiceType()
|
||||
{
|
||||
return mMessage.getHex( SERVICE_TYPE, 2 );
|
||||
return Opcode.fromValue( mMessage.getInt( SERVICE_TYPE ) );
|
||||
}
|
||||
|
||||
public String getSourceAddress()
|
||||
{
|
||||
switch( getServiceType() )
|
||||
{
|
||||
case GROUP_DATA_CHANNEL_GRANT:
|
||||
case GROUP_VOICE_CHANNEL_GRANT:
|
||||
return mMessage.getHex( SOURCE_GROUP, 4 );
|
||||
case UNIT_TO_UNIT_VOICE_CHANNEL_GRANT:
|
||||
case INDIVIDUAL_DATA_CHANNEL_GRANT:
|
||||
return mMessage.getHex( SOURCE_ADDRESS, 6 );
|
||||
case TELEPHONE_INTERCONNECT_VOICE_CHANNEL_GRANT:
|
||||
return "DELAY:" + ( mMessage.getInt( SOURCE_ADDRESS ) * 5 ) + "SECS";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getTargetAddress()
|
||||
|
||||
@@ -21,4 +21,9 @@ public abstract class SNDCPData extends ServiceMessage
|
||||
{
|
||||
super( message, duid, aliasList );
|
||||
}
|
||||
|
||||
public String getNSAPI()
|
||||
{
|
||||
return mMessage.getHex( NETWORK_SERVICE_ACCESS_POINT_ID, 1 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,10 +13,10 @@ public class SNDCPDataChannelAnnouncementExplicit extends SNDCPData
|
||||
public static final int REQUESTED_ACCESS_AVAILABLE_INDICATOR = 89;
|
||||
|
||||
public static final int[] TRANSMIT_IDENTIFIER = { 96,97,98,99 };
|
||||
public static final int[] TRANSMIT_CHANNEL = { 100,101,102,103,104,105,106,
|
||||
public static final int[] TRANSMIT_NUMBER = { 100,101,102,103,104,105,106,
|
||||
107,108,109,110,111 };
|
||||
public static final int[] RECEIVE_IDENTIFIER = { 112,113,114,115 };
|
||||
public static final int[] RECEIVE_CHANNEL = { 116,117,118,119,120,121,122,
|
||||
public static final int[] RECEIVE_NUMBER = { 116,117,118,119,120,121,122,
|
||||
123,124,125,126,127 };
|
||||
|
||||
public static final int[] DATA_ACCESS_CONTROL = { 128,129,130,131,132,133,
|
||||
@@ -51,12 +51,12 @@ public class SNDCPDataChannelAnnouncementExplicit extends SNDCPData
|
||||
if( isRequestedAccessAvailable() )
|
||||
{
|
||||
sb.append( " DOWNLINK:" );
|
||||
sb.append( getTransmitIdentifier() + "-" + getTransmitChannel() );
|
||||
sb.append( getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber() );
|
||||
|
||||
sb.append( " " + getUplinkFrequency() );
|
||||
|
||||
sb.append( " UPLINK:" );
|
||||
sb.append( getReceiveIdentifier() + "-" + getReceiveChannel() );
|
||||
sb.append( getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber() );
|
||||
|
||||
sb.append( " " + getDownlinkFrequency() );
|
||||
|
||||
@@ -82,24 +82,34 @@ public class SNDCPDataChannelAnnouncementExplicit extends SNDCPData
|
||||
return mMessage.get( REQUESTED_ACCESS_AVAILABLE_INDICATOR );
|
||||
}
|
||||
|
||||
public int getTransmitIdentifier()
|
||||
public int getTransmitChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getTransmitChannel()
|
||||
public int getTransmitChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_CHANNEL );
|
||||
return mMessage.getInt( TRANSMIT_NUMBER );
|
||||
}
|
||||
|
||||
public int getReceiveIdentifier()
|
||||
public String getTransmitChannel()
|
||||
{
|
||||
return getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber();
|
||||
}
|
||||
|
||||
public int getReceiveChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getReceiveChannel()
|
||||
public int getReceiveChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_CHANNEL );
|
||||
return mMessage.getInt( RECEIVE_NUMBER );
|
||||
}
|
||||
|
||||
public String getReceiveChannel()
|
||||
{
|
||||
return getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber();
|
||||
}
|
||||
|
||||
public String getDataAccessControl()
|
||||
@@ -110,11 +120,11 @@ public class SNDCPDataChannelAnnouncementExplicit extends SNDCPData
|
||||
@Override
|
||||
public void setIdentifierMessage( int identifier, IdentifierUpdate message )
|
||||
{
|
||||
if( identifier == getTransmitIdentifier() )
|
||||
if( identifier == getTransmitChannelIdentifier() )
|
||||
{
|
||||
mIdentifierUpdateTransmit = message;
|
||||
}
|
||||
else if( identifier == getReceiveIdentifier() )
|
||||
else if( identifier == getReceiveChannelIdentifier() )
|
||||
{
|
||||
mIdentifierUpdateReceive = message;
|
||||
}
|
||||
@@ -130,19 +140,19 @@ public class SNDCPDataChannelAnnouncementExplicit extends SNDCPData
|
||||
{
|
||||
int[] identifiers = new int[ 2 ];
|
||||
|
||||
identifiers[ 0 ] = getTransmitIdentifier();
|
||||
identifiers[ 1 ] = getReceiveIdentifier();
|
||||
identifiers[ 0 ] = getTransmitChannelIdentifier();
|
||||
identifiers[ 1 ] = getReceiveChannelIdentifier();
|
||||
|
||||
return identifiers;
|
||||
}
|
||||
|
||||
public long getDownlinkFrequency()
|
||||
{
|
||||
return calculateDownlink( mIdentifierUpdateTransmit, getReceiveChannel() );
|
||||
return calculateDownlink( mIdentifierUpdateTransmit, getReceiveChannelNumber() );
|
||||
}
|
||||
|
||||
public long getUplinkFrequency()
|
||||
{
|
||||
return calculateUplink( mIdentifierUpdateReceive, getTransmitChannel() );
|
||||
return calculateUplink( mIdentifierUpdateReceive, getTransmitChannelNumber() );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,10 +9,10 @@ import decode.p25.reference.DataUnitID;
|
||||
public class SNDCPDataChannelGrant extends SNDCPData implements IdentifierUpdateReceiver
|
||||
{
|
||||
public static final int[] TRANSMIT_IDENTIFIER = { 88,89,90,91 };
|
||||
public static final int[] TRANSMIT_CHANNEL = { 92,93,94,95,96,97,98,99,100,
|
||||
public static final int[] TRANSMIT_NUMBER = { 92,93,94,95,96,97,98,99,100,
|
||||
101,102,103 };
|
||||
public static final int[] RECEIVE_IDENTIFIER = { 104,105,106,107 };
|
||||
public static final int[] RECEIVE_CHANNEL = { 108,109,110,111,112,113,114,
|
||||
public static final int[] RECEIVE_NUMBER = { 108,109,110,111,112,113,114,
|
||||
115,116,117,118,119 };
|
||||
|
||||
public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
|
||||
@@ -40,12 +40,12 @@ public class SNDCPDataChannelGrant extends SNDCPData implements IdentifierUpdate
|
||||
}
|
||||
|
||||
sb.append( " UPLINK:" );
|
||||
sb.append( getTransmitIdentifier() + "-" + getTransmitChannel() );
|
||||
sb.append( getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber() );
|
||||
|
||||
sb.append( " " + getUplinkFrequency() );
|
||||
|
||||
sb.append( " DOWNLINK:" );
|
||||
sb.append( getReceiveIdentifier() + "-" + getReceiveChannel() );
|
||||
sb.append( getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber() );
|
||||
|
||||
sb.append( " " + getDownlinkFrequency() );
|
||||
|
||||
@@ -55,26 +55,36 @@ public class SNDCPDataChannelGrant extends SNDCPData implements IdentifierUpdate
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public int getTransmitIdentifier()
|
||||
public int getTransmitChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getTransmitChannel()
|
||||
public int getTransmitChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( TRANSMIT_CHANNEL );
|
||||
return mMessage.getInt( TRANSMIT_NUMBER );
|
||||
}
|
||||
|
||||
public int getReceiveIdentifier()
|
||||
public String getTransmitChannel()
|
||||
{
|
||||
return getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber();
|
||||
}
|
||||
|
||||
public int getReceiveChannelIdentifier()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_IDENTIFIER );
|
||||
}
|
||||
|
||||
public int getReceiveChannel()
|
||||
public int getReceiveChannelNumber()
|
||||
{
|
||||
return mMessage.getInt( RECEIVE_CHANNEL );
|
||||
return mMessage.getInt( RECEIVE_NUMBER );
|
||||
}
|
||||
|
||||
public String getReceiveChannel()
|
||||
{
|
||||
return getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber();
|
||||
}
|
||||
|
||||
public String getTargetAddress()
|
||||
{
|
||||
return mMessage.getHex( TARGET_ADDRESS, 6 );
|
||||
@@ -83,11 +93,11 @@ public class SNDCPDataChannelGrant extends SNDCPData implements IdentifierUpdate
|
||||
@Override
|
||||
public void setIdentifierMessage( int identifier, IdentifierUpdate message )
|
||||
{
|
||||
if( identifier == getTransmitIdentifier() )
|
||||
if( identifier == getTransmitChannelIdentifier() )
|
||||
{
|
||||
mIdentifierUpdateTransmit = message;
|
||||
}
|
||||
else if( identifier == getReceiveIdentifier() )
|
||||
else if( identifier == getReceiveChannelIdentifier() )
|
||||
{
|
||||
mIdentifierUpdateReceive = message;
|
||||
}
|
||||
@@ -103,21 +113,19 @@ public class SNDCPDataChannelGrant extends SNDCPData implements IdentifierUpdate
|
||||
{
|
||||
int[] identifiers = new int[ 2 ];
|
||||
|
||||
identifiers[ 0 ] = getTransmitIdentifier();
|
||||
identifiers[ 1 ] = getReceiveIdentifier();
|
||||
identifiers[ 0 ] = getTransmitChannelIdentifier();
|
||||
identifiers[ 1 ] = getReceiveChannelIdentifier();
|
||||
|
||||
return identifiers;
|
||||
}
|
||||
|
||||
public long getDownlinkFrequency()
|
||||
{
|
||||
return calculateDownlink( mIdentifierUpdateReceive, getReceiveChannel() );
|
||||
return calculateDownlink( mIdentifierUpdateTransmit, getTransmitChannelNumber() );
|
||||
}
|
||||
|
||||
public long getUplinkFrequency()
|
||||
{
|
||||
return calculateUplink( mIdentifierUpdateTransmit, getTransmitChannel() );
|
||||
return calculateUplink( mIdentifierUpdateReceive, getReceiveChannelNumber() );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -29,8 +29,10 @@ public class TelephoneInterconnectVoiceChannelGrant extends UnitChannelGrant
|
||||
sb.append( " EMERGENCY" );
|
||||
}
|
||||
|
||||
sb.append( " ADDR:" + getSourceAddress() );
|
||||
|
||||
sb.append( " CHAN:" );
|
||||
sb.append( getChannelIdentifier() + "/" + getChannel() );
|
||||
sb.append( getChannel() );
|
||||
|
||||
sb.append( " CALL TIMER:" );
|
||||
sb.append( getCallTimer() );
|
||||
@@ -41,6 +43,11 @@ public class TelephoneInterconnectVoiceChannelGrant extends UnitChannelGrant
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String getAddress()
|
||||
{
|
||||
return getSourceAddress();
|
||||
}
|
||||
|
||||
/**
|
||||
* Call timer in seconds
|
||||
*/
|
||||
|
||||
@@ -39,7 +39,7 @@ public class UnitToUnitVoiceChannelGrant extends UnitChannelGrant
|
||||
sb.append( " TARGET UNIT:" );
|
||||
sb.append( getTargetAddress() );
|
||||
|
||||
sb.append( " CHAN:" + getChannelIdentifier() + "-" + getChannel() );
|
||||
sb.append( " CHAN:" + getChannelIdentifier() + "-" + getChannelNumber() );
|
||||
sb.append( " DN:" + getDownlinkFrequency() );
|
||||
sb.append( " UP:" + getUplinkFrequency() );
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ public enum Encryption
|
||||
TRIPLE_DES_2_KEY( 0x82 ),
|
||||
TRIPLE_DES_3_KEY( 0x83 ),
|
||||
AES( 0x84 ),
|
||||
ADP( 0xAA ),
|
||||
UNKNOWN( -1 );
|
||||
|
||||
private int mValue;
|
||||
|
||||
71
src/decode/p25/reference/ExtendedFunction.java
Normal file
71
src/decode/p25/reference/ExtendedFunction.java
Normal file
@@ -0,0 +1,71 @@
|
||||
package decode.p25.reference;
|
||||
|
||||
public enum ExtendedFunction
|
||||
{
|
||||
RADIO_CHECK( 0x0000, "RADIO CHECK" ),
|
||||
RADIO_DETACH( 0x007D, "RADIO DETACH" ),
|
||||
RADIO_UNINHIBIT( 0x007E, "RADIO UNINHIBIT" ),
|
||||
RADIO_INHIBIT( 0x007F, "RADIO INHIBIT" ),
|
||||
RADIO_CHECK_ACK( 0x0080, "RADIO CHECK ACK" ),
|
||||
RADIO_DETACH_ACK( 0x00FD, "RADIO DETACH ACK" ),
|
||||
RADIO_UNINHIBIT_ACK( 0x00FE, "RADIO UNINHIBIT ACK" ),
|
||||
RADIO_INHIBIT_ACK( 0x00FF, "RADIO INHIBIT ACK" ),
|
||||
|
||||
GROUP_CONTROL_COMMAND( 0x0100, "GROUP CONTROL COMMAND" ),
|
||||
UNIT_DYNAMIC_COMMAND( 0x0200, "UNIT DYNAMIC COMMAND" ),
|
||||
GROUP_DYNAMIC_COMMAND( 0x0300, "GROUP DYNAMIC COMMAND" ),
|
||||
|
||||
UNKNOWN( -1, "UNKNOWN" );
|
||||
|
||||
private int mFunction;
|
||||
private String mLabel;
|
||||
|
||||
private ExtendedFunction( int function, String label )
|
||||
{
|
||||
mFunction = function;
|
||||
mLabel = label;
|
||||
}
|
||||
|
||||
public String getLabel()
|
||||
{
|
||||
return mLabel;
|
||||
}
|
||||
|
||||
public static ExtendedFunction fromValue( int function )
|
||||
{
|
||||
switch( function )
|
||||
{
|
||||
case 0x0000:
|
||||
return RADIO_CHECK;
|
||||
case 0x007D:
|
||||
return RADIO_DETACH;
|
||||
case 0x007E:
|
||||
return RADIO_UNINHIBIT;
|
||||
case 0x007F:
|
||||
return RADIO_INHIBIT;
|
||||
case 0x0080:
|
||||
return RADIO_CHECK_ACK;
|
||||
case 0x00FD:
|
||||
return RADIO_DETACH_ACK;
|
||||
case 0x00FE:
|
||||
return RADIO_UNINHIBIT_ACK;
|
||||
case 0x00FF:
|
||||
return RADIO_INHIBIT_ACK;
|
||||
}
|
||||
|
||||
if( ( function & 0x0100 ) == 0x0100 )
|
||||
{
|
||||
return GROUP_CONTROL_COMMAND;
|
||||
}
|
||||
if( ( function & 0x0200 ) == 0x0200 )
|
||||
{
|
||||
return UNIT_DYNAMIC_COMMAND;
|
||||
}
|
||||
if( ( function & 0x0300 ) == 0x0300 )
|
||||
{
|
||||
return GROUP_DYNAMIC_COMMAND;
|
||||
}
|
||||
|
||||
return UNKNOWN;
|
||||
}
|
||||
}
|
||||
48
src/decode/p25/reference/P25NetworkCallsign.java
Normal file
48
src/decode/p25/reference/P25NetworkCallsign.java
Normal file
@@ -0,0 +1,48 @@
|
||||
package decode.p25.reference;
|
||||
|
||||
public class P25NetworkCallsign
|
||||
{
|
||||
public static final String[] RADIX_50 = new String[]
|
||||
{ " ", "A", "B", "C", "D", "E", "F", "G",
|
||||
"H", "I", "J", "K", "L", "M", "N", "O",
|
||||
"P", "Q", "R", "S", "T", "U", "V", "W",
|
||||
"X", "Y", "Z", "$", ".", "?", "0", "1",
|
||||
"2", "3", "4", "5", "6", "7", "8", "9" };
|
||||
/**
|
||||
* Decodes the string callsign from which the WACN and System identifiers
|
||||
* were derived.
|
||||
*
|
||||
* Based on code by Eric Carlson at:
|
||||
* http://www.ericcarlson.net/project-25-callsign.html
|
||||
*
|
||||
* @param wacn
|
||||
* @param systemID
|
||||
* @return
|
||||
*/
|
||||
public static String getCallsign( int wacn, int systemID )
|
||||
{
|
||||
int n1 = wacn / 16;
|
||||
int n2 = 4096 * ( wacn % 16 ) + systemID;
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append( getLetter( (int)( n1 / 1600 ) ) );
|
||||
sb.append( getLetter( (int)( ( n1 / 40 ) % 40 ) ) );
|
||||
sb.append( getLetter( (int)( n1 % 40 ) ) );
|
||||
sb.append( getLetter( (int)( n2 / 1600 ) ) );
|
||||
sb.append( getLetter( (int)( ( n2 / 40 ) % 40 ) ) );
|
||||
sb.append( getLetter( (int)( n2 % 40 ) ) );
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static String getLetter( int value )
|
||||
{
|
||||
if( 0 <= value && value < 40 )
|
||||
{
|
||||
return RADIX_50[ value ];
|
||||
}
|
||||
|
||||
return " ";
|
||||
}
|
||||
}
|
||||
@@ -95,7 +95,7 @@ public class TunerChannelSource extends ComplexSource
|
||||
Attribute.SAMPLE_RATE, mTuner.getSampleRate() ) );
|
||||
|
||||
/* Schedule the decimation task to run 50 times a second */
|
||||
mTaskHandle = mThreadPoolManager.schedule( ThreadType.DECIMATION,
|
||||
mTaskHandle = mThreadPoolManager.scheduleFixedRate( ThreadType.DECIMATION,
|
||||
new DecimationProcessor(), 20, TimeUnit.MILLISECONDS );
|
||||
|
||||
/* Finally, register to receive samples from the tuner */
|
||||
|
||||
Reference in New Issue
Block a user