Files
sdrtrunk/src/decode/p25/message/tsbk/osp/data/SNDCPDataChannelAnnouncementExplicit.java

149 lines
4.0 KiB
Java

package decode.p25.message.tsbk.osp.data;
import alias.AliasList;
import bits.BitSetBuffer;
import decode.p25.message.tsbk.osp.control.IdentifierUpdate;
import decode.p25.message.tsbk.osp.control.IdentifierUpdateReceiver;
import decode.p25.reference.DataUnitID;
public class SNDCPDataChannelAnnouncementExplicit extends SNDCPData
implements IdentifierUpdateReceiver
{
public static final int AUTONOMOUS_ACCESS_AVAILABLE_INDICATOR = 88;
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,
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,
123,124,125,126,127 };
public static final int[] DATA_ACCESS_CONTROL = { 128,129,130,131,132,133,
134,135,136,137,138,139,140,141,142,143 };
private IdentifierUpdate mIdentifierUpdateTransmit;
private IdentifierUpdate mIdentifierUpdateReceive;
public SNDCPDataChannelAnnouncementExplicit( BitSetBuffer message,
DataUnitID duid,
AliasList aliasList )
{
super( message, duid, aliasList );
}
public String getMessage()
{
StringBuilder sb = new StringBuilder();
sb.append( getMessageStub() );
if( isEmergency() )
{
sb.append( " EMERGENCY" );
}
if( isAutonomousAccessAvailable() )
{
sb.append( " AUTONOMOUS ACCESS" );
}
if( isRequestedAccessAvailable() )
{
sb.append( " DOWNLINK:" );
sb.append( getTransmitIdentifier() + "-" + getTransmitChannel() );
sb.append( " " + getUplinkFrequency() );
sb.append( " UPLINK:" );
sb.append( getReceiveIdentifier() + "-" + getReceiveChannel() );
sb.append( " " + getDownlinkFrequency() );
sb.append( " DATA ACCESS CONTROL:" );
}
else
{
sb.append( " ACCESS DENIED TO DATA ACCESS CONTROL:" );
}
sb.append( getDataAccessControl() );
return sb.toString();
}
public boolean isAutonomousAccessAvailable()
{
return mMessage.get( AUTONOMOUS_ACCESS_AVAILABLE_INDICATOR );
}
public boolean isRequestedAccessAvailable()
{
return mMessage.get( REQUESTED_ACCESS_AVAILABLE_INDICATOR );
}
public int getTransmitIdentifier()
{
return mMessage.getInt( TRANSMIT_IDENTIFIER );
}
public int getTransmitChannel()
{
return mMessage.getInt( TRANSMIT_CHANNEL );
}
public int getReceiveIdentifier()
{
return mMessage.getInt( RECEIVE_IDENTIFIER );
}
public int getReceiveChannel()
{
return mMessage.getInt( RECEIVE_CHANNEL );
}
public String getDataAccessControl()
{
return mMessage.getHex( DATA_ACCESS_CONTROL, 4 );
}
@Override
public void setIdentifierMessage( int identifier, IdentifierUpdate message )
{
if( identifier == getTransmitIdentifier() )
{
mIdentifierUpdateTransmit = message;
}
else if( identifier == getReceiveIdentifier() )
{
mIdentifierUpdateReceive = message;
}
else
{
throw new IllegalArgumentException( "unexpected channel band "
+ "identifier [" + identifier + "]" );
}
}
@Override
public int[] getIdentifiers()
{
int[] identifiers = new int[ 2 ];
identifiers[ 0 ] = getTransmitIdentifier();
identifiers[ 1 ] = getReceiveIdentifier();
return identifiers;
}
public long getDownlinkFrequency()
{
return calculateDownlink( mIdentifierUpdateTransmit, getReceiveChannel() );
}
public long getUplinkFrequency()
{
return calculateUplink( mIdentifierUpdateReceive, getTransmitChannel() );
}
}