diff --git a/.idea/dictionaries/denny.xml b/.idea/dictionaries/denny.xml index 7f72f826..223a1c26 100644 --- a/.idea/dictionaries/denny.xml +++ b/.idea/dictionaries/denny.xml @@ -18,6 +18,7 @@ talkgroup tgid ultravox + wacn xtea diff --git a/src/channel/details/ChannelDetailPanel.java b/src/channel/details/ChannelDetailPanel.java index 3ed53b2f..4f41e267 100644 --- a/src/channel/details/ChannelDetailPanel.java +++ b/src/channel/details/ChannelDetailPanel.java @@ -38,7 +38,7 @@ public class ChannelDetailPanel extends JPanel implements Listener mCallEventBroadcaster = new Broadcaster<>(); private Broadcaster mAttributeChangeRequestBroadcaster = new Broadcaster<>(); diff --git a/src/module/decode/mpt1327/MPT1327DecoderState.java b/src/module/decode/mpt1327/MPT1327DecoderState.java index 00e85efe..a70b96fa 100644 --- a/src/module/decode/mpt1327/MPT1327DecoderState.java +++ b/src/module/decode/mpt1327/MPT1327DecoderState.java @@ -389,9 +389,9 @@ public class MPT1327DecoderState extends DecoderState { StringBuilder sb = new StringBuilder(); - sb.append("Activity Summary\n"); - sb.append("Decoder:\tMPT-1327\n"); - sb.append("Site:\t"); + sb.append("Activity Summary - Decoder: MPT-1327\n"); + sb.append(DIVIDER1); + sb.append("Site: "); if(mSite != null) { @@ -403,9 +403,7 @@ public class MPT1327DecoderState extends DecoderState if(siteAlias != null) { - sb.append(" "); - sb.append(siteAlias.getName()); - sb.append("\n"); + sb.append(" ").append(siteAlias.getName()).append("\n"); } } } @@ -414,13 +412,11 @@ public class MPT1327DecoderState extends DecoderState sb.append("Unknown\n"); } - sb.append("\n\n"); - - sb.append("Talkgroups\n\n"); + sb.append(DIVIDER2).append("Talkgroups: "); if(mGroups.isEmpty()) { - sb.append(" None\n"); + sb.append("None\n"); } else { @@ -429,8 +425,7 @@ public class MPT1327DecoderState extends DecoderState for(String talkgroup : talkgroups) { - sb.append(" "); - sb.append(talkgroup); + sb.append("\n ").append(talkgroup); if(hasAliasList()) { @@ -450,7 +445,7 @@ public class MPT1327DecoderState extends DecoderState for(String member : members) { - sb.append(" >"); + sb.append(" >"); sb.append(member); if(hasAliasList()) @@ -466,27 +461,26 @@ public class MPT1327DecoderState extends DecoderState sb.append("\n"); } - - sb.append("\n"); } } - sb.append("\n"); + sb.append(DIVIDER2).append("All Idents: "); - sb.append("Individual Idents\n"); if(mIdents.isEmpty()) { - sb.append(" None\n"); + sb.append("None\n"); } else { + sb.append("\n"); + Iterator it = mIdents.iterator(); while(it.hasNext()) { String ident = it.next(); - sb.append(" "); + sb.append(""); sb.append(ident); sb.append(" "); diff --git a/src/module/decode/p25/P25DecoderState.java b/src/module/decode/p25/P25DecoderState.java index 2b835de3..76666ccd 100644 --- a/src/module/decode/p25/P25DecoderState.java +++ b/src/module/decode/p25/P25DecoderState.java @@ -148,6 +148,7 @@ public class P25DecoderState extends DecoderState private static final DecimalFormat mFrequencyFormatter = new DecimalFormat("0.000000"); + private module.decode.p25.message.tsbk.osp.control.NetworkStatusBroadcast mNetworkStatus; private NetworkStatusBroadcastExtended mNetworkStatusExtended; private ProtectionParameterBroadcast mProtectionParameterBroadcast; @@ -3343,29 +3344,25 @@ public class P25DecoderState extends DecoderState { StringBuilder sb = new StringBuilder(); - sb.append("Activity Summary\n"); - sb.append("Decoder:\tP25\n"); - sb.append("===================== THIS SITE ======================"); + sb.append("Activity Summary - Decoder:P25 ").append(getModulation().getLabel()).append("\n"); + sb.append(DIVIDER1); + sb.append("SITE "); if(mNetworkStatus != null) { - sb.append("\nNAC:\t" + mNetworkStatus.getNAC()); - 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()); + sb.append("NAC:" + mNetworkStatus.getNAC()); + sb.append("h WACN:" + mNetworkStatus.getWACN()); + sb.append("h SYS:" + mNetworkStatus.getSystemID()); + sb.append("h [").append(mNetworkStatus.getNetworkCallsign()).append("]"); + sb.append(" LRA:" + mNetworkStatus.getLocationRegistrationArea()); } else if(mNetworkStatusExtended != null) { - sb.append("\nNAC:\t" + mNetworkStatusExtended.getNAC()); - 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()); + sb.append("NAC:" + mNetworkStatusExtended.getNAC()); + sb.append("h WACN:" + mNetworkStatusExtended.getWACN()); + sb.append("h SYS:" + mNetworkStatusExtended.getSystemID()); + sb.append("h [").append(mNetworkStatusExtended.getNetworkCallsign()).append("]"); + sb.append(" LRA:" + mNetworkStatusExtended.getLocationRegistrationArea()); } String site = null; @@ -3376,11 +3373,10 @@ public class P25DecoderState extends DecoderState } else if(mRFSSStatusMessageExtended != null) { - site = mRFSSStatusMessageExtended.getRFSubsystemID() + "-" + - mRFSSStatusMessageExtended.getSiteID(); + site = mRFSSStatusMessageExtended.getRFSubsystemID() + "-" + mRFSSStatusMessageExtended.getSiteID(); } - sb.append("\nRFSS-SITE:\t" + site); + sb.append("h RFSS-SITE:").append(site).append("h"); if(hasAliasList()) { @@ -3392,121 +3388,120 @@ public class P25DecoderState extends DecoderState } } + sb.append("\n").append(DIVIDER2); + if(mNetworkStatus != null) { - sb.append("\nSERVICES:\t" + SystemService.toString( - mNetworkStatus.getSystemServiceClass())); - sb.append("\nPCCH:\tDNLINK " + mFrequencyFormatter.format( - (double)mNetworkStatus.getDownlinkFrequency() / 1E6d) + - " [" + mNetworkStatus.getIdentifier() + "-" + - mNetworkStatus.getChannel() + "]\n"); - sb.append("\tUPLINK " + mFrequencyFormatter.format( - (double)mNetworkStatus.getUplinkFrequency() / 1E6d) + " [" + - mNetworkStatus.getIdentifier() + "-" + - mNetworkStatus.getChannel() + "]\n"); + sb.append("SERVICES: " + SystemService.toString(mNetworkStatus.getSystemServiceClass())).append("\n"); + sb.append(DIVIDER2); + sb.append("PCCH DOWNLINK ") + .append(mFrequencyFormatter.format((double)mNetworkStatus.getDownlinkFrequency() / 1E6d)) + .append(" [").append(mNetworkStatus.getIdentifier()).append("-").append(mNetworkStatus.getChannel()) + .append("] UPLINK ") + .append(mFrequencyFormatter.format((double)mNetworkStatus.getUplinkFrequency() / 1E6d)) + .append(" [").append(mNetworkStatus.getIdentifier()).append("-").append(mNetworkStatus.getChannel()) + .append("]\n"); } else if(mNetworkStatusExtended != null) { - sb.append("\nSERVICES:\t" + SystemService.toString( - mNetworkStatusExtended.getSystemServiceClass())); - sb.append("\nPCCH:\tDNLINK " + mFrequencyFormatter.format( - (double)mNetworkStatusExtended.getDownlinkFrequency() / 1E6d) + - " [" + mNetworkStatusExtended.getTransmitIdentifier() + "-" + - mNetworkStatusExtended.getTransmitChannel() + "]\n"); - sb.append("\tUPLINK " + mFrequencyFormatter.format( - (double)mNetworkStatusExtended.getUplinkFrequency() / 1E6d) + - " [" + mNetworkStatusExtended.getReceiveIdentifier() + "-" + - mNetworkStatusExtended.getReceiveChannel() + "]"); + sb.append("\nSERVICES:").append(SystemService.toString(mNetworkStatusExtended.getSystemServiceClass())) + .append("\n"); + sb.append(DIVIDER2); + sb.append("PCCH DOWNLINK ") + .append(mFrequencyFormatter.format((double)mNetworkStatusExtended.getDownlinkFrequency() / 1E6d)) + .append(" [").append(mNetworkStatusExtended.getTransmitIdentifier()).append("-") + .append(mNetworkStatusExtended.getTransmitChannel()).append("] UPLINK ") + .append(mFrequencyFormatter.format((double)mNetworkStatusExtended.getUplinkFrequency() / 1E6d)) + .append(" [").append(mNetworkStatusExtended.getReceiveIdentifier()).append("-") + .append(mNetworkStatusExtended.getReceiveChannel()).append("]\n"); } if(mSecondaryControlChannels.isEmpty()) { - sb.append("\nSCCH:\tNONE"); + sb.append("SCCH: NONE\n"); } else { - for(module.decode.p25.message.tsbk.osp.control.SecondaryControlChannelBroadcast - sec : mSecondaryControlChannels) + for(module.decode.p25.message.tsbk.osp.control.SecondaryControlChannelBroadcast sec : mSecondaryControlChannels) { - sb.append("\nSCCH:\tDNLINK " + mFrequencyFormatter.format( - (double)sec.getDownlinkFrequency1() / 1E6d) + - " [" + sec.getIdentifier1() + "-" + sec.getChannel1() + "]\n"); - sb.append("\tUPLINK " + mFrequencyFormatter.format( - (double)sec.getUplinkFrequency1() / 1E6d) + " [" + - sec.getIdentifier1() + "-" + sec.getChannel1() + "]\n"); + sb.append("SCCH DOWNLINK ") + .append(mFrequencyFormatter.format((double)sec.getDownlinkFrequency1() / 1E6d)) + .append(" [").append(sec.getIdentifier1()).append("-").append(sec.getChannel1()).append("] UPLINK ") + .append(mFrequencyFormatter.format((double)sec.getUplinkFrequency1() / 1E6d)) + .append(" [").append(sec.getIdentifier1()).append("-").append(sec.getChannel1()).append("]"); if(sec.hasChannel2()) { - sb.append("\nSCCH:\tDNLINK " + mFrequencyFormatter.format( - (double)sec.getDownlinkFrequency2() / 1E6d) + - " [" + sec.getIdentifier2() + "-" + sec.getChannel2() + "]\n"); - sb.append("\tUPLINK " + mFrequencyFormatter.format( - (double)sec.getUplinkFrequency2() / 1E6d) + " [" + - sec.getIdentifier2() + "-" + sec.getChannel2() + "]"); + sb.append(" SCCH 2 DOWNLINK ") + .append(mFrequencyFormatter.format((double)sec.getDownlinkFrequency2() / 1E6d)) + .append(" [").append(sec.getIdentifier2()).append("-").append(sec.getChannel2()) + .append("] UPLINK ").append(mFrequencyFormatter.format((double)sec.getUplinkFrequency2() / 1E6d)) + .append(" [").append(sec.getIdentifier2()).append("-").append(sec.getChannel2()).append("]"); } + + sb.append("\n"); } } + 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() + "]"); + sb.append("SNDCP DOWNLINK ") + .append(mFrequencyFormatter.format((double)mSNDCPDataChannel.getDownlinkFrequency() / 1E6D)) + .append(" [").append(mSNDCPDataChannel.getTransmitChannel()).append("]").append(" UPLINK ") + .append(mFrequencyFormatter.format((double)mSNDCPDataChannel.getUplinkFrequency() / 1E6D)) + .append(" [").append(mSNDCPDataChannel.getReceiveChannel()).append("]\n"); } 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()); + sb.append(DIVIDER2); + sb.append("ENCRYPTION TYPE:").append(mProtectionParameterBroadcast.getEncryptionType().name()); + sb.append(" ALGORITHM:").append(mProtectionParameterBroadcast.getAlgorithmID()); + sb.append(" KEY:").append(mProtectionParameterBroadcast.getKeyID()); + sb.append(" INBOUND IV:").append(mProtectionParameterBroadcast.getInboundInitializationVector()); + sb.append(" OUTBOUND IV:").append(mProtectionParameterBroadcast.getOutboundInitializationVector()); + sb.append("\n"); } List identifiers = new ArrayList<>(mBands.keySet()); Collections.sort(identifiers); - sb.append("\nFREQUENCY BANDS:"); + sb.append(DIVIDER2).append("FREQUENCY BANDS:\n"); for(Integer id : identifiers) { IBandIdentifier 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(band.toString()).append("\n"); +// sb.append(" ").append(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"); } - sb.append("\n\n=================== NEIGHBORS ======================"); + sb.append(DIVIDER2).append("NEIGHBOR SITES: "); if(mNeighborMap.isEmpty()) { - sb.append("\n\tNONE\n"); - sb.append("\n----------------------------------------------------"); + sb.append("NONE\n"); } else { for(IAdjacentSite neighbor : mNeighborMap.values()) { - sb.append("\nNAC:\t" + ((P25Message)neighbor).getNAC()); - sb.append("\nSYSTEM:\t" + neighbor.getSystemID()); - sb.append("\nLRA:\t" + neighbor.getLRA()); + sb.append("\n"); + sb.append("NAC:").append(((P25Message)neighbor).getNAC()); + sb.append("h SYSTEM:" + neighbor.getSystemID()); + sb.append("h LRA:" + neighbor.getLRA()); String neighborID = neighbor.getRFSS() + "-" + neighbor.getSiteID(); - sb.append("\nRFSS-SITE:\t" + neighborID); + sb.append("h RFSS-SITE:" + neighborID); + + sb.append("h "); if(hasAliasList()) { @@ -3514,18 +3509,16 @@ public class P25DecoderState extends DecoderState if(siteAlias != null) { - sb.append(" " + siteAlias.getName()); + sb.append(siteAlias.getName()); } } - sb.append("\nPCCH:\tDNLINK " + mFrequencyFormatter.format( - (double)neighbor.getDownlinkFrequency() / 1E6d) + - " [" + neighbor.getDownlinkChannel() + "]"); - sb.append("\n\tUPLINK:" + mFrequencyFormatter.format( - (double)neighbor.getUplinkFrequency() / 1E6d) + - " [" + neighbor.getDownlinkChannel() + "]\n"); - sb.append("\nSERVICES:\t" + neighbor.getSystemServiceClass()); - sb.append("\n----------------------------------------------------"); + sb.append("\n PCCH: DOWNLINK ") + .append(mFrequencyFormatter.format((double)neighbor.getDownlinkFrequency() / 1E6d)) + .append(" [").append(neighbor.getDownlinkChannel()).append("] UPLINK:") + .append(mFrequencyFormatter.format((double)neighbor.getUplinkFrequency() / 1E6d)) + .append(" [").append(neighbor.getDownlinkChannel()).append("] SERVICES: ") + .append(neighbor.getSystemServiceClass()); } } diff --git a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateNonVUHF.java b/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateNonVUHF.java index e4719edb..0022f082 100644 --- a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateNonVUHF.java +++ b/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateNonVUHF.java @@ -31,17 +31,21 @@ public class IdentifierUpdateNonVUHF extends IdentifierUpdate StringBuilder sb = new StringBuilder(); sb.append( getMessageStub() ); + sb.append(toString()); - sb.append( " IDEN:" + getIdentifier() ); + return sb.toString(); + } + public String toString() + { + StringBuilder sb = new StringBuilder(); + + sb.append( " ID:" + getIdentifier() ); sb.append( " BASE:" + getBaseFrequency() ); - - sb.append( " BW:" + getBandwidth() ); - + sb.append( " BANDWIDTH:" + getBandwidth() ); sb.append( " SPACING:" + getChannelSpacing() ); - sb.append( " OFFSET:" + getTransmitOffset() ); - + return sb.toString(); } diff --git a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateTDMA.java b/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateTDMA.java index 4fb02ca0..7524ce7d 100644 --- a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateTDMA.java +++ b/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateTDMA.java @@ -30,18 +30,26 @@ public class IdentifierUpdateTDMA extends IdentifierUpdate StringBuilder sb = new StringBuilder(); sb.append( getMessageStub() ); + sb.append(toString()); - sb.append( " IDEN:" + getIdentifier() ); - sb.append( " BASE:" + getBaseFrequency() ); - sb.append( " BW:" + getBandwidth() ); - sb.append( " SPACING:" + getChannelSpacing() ); - sb.append( " OFFSET:" + getTransmitOffset() ); - sb.append( " TYPE:" + getChannelType().toString() ); - return sb.toString(); } - - public ChannelType getChannelType() + + public String toString() + { + StringBuilder sb = new StringBuilder(); + + sb.append( " ID:" + getIdentifier() ); + sb.append( " BASE:" + getBaseFrequency() ); + sb.append( " BW:" + getBandwidth() ); + sb.append( " SPACING:" + getChannelSpacing() ); + sb.append( " OFFSET:" + getTransmitOffset() ); + sb.append( " TYPE:" + getChannelType().toString() ); + + return sb.toString(); + } + + public ChannelType getChannelType() { return ChannelType.fromValue( mMessage.getInt( CHANNEL_TYPE) ); } @@ -109,7 +117,7 @@ public class IdentifierUpdateTDMA extends IdentifierUpdate } sb.append( mAccessType.name() ); - sb.append( " BW:" + mBandwidth ); + sb.append( " BANDWIDTH:" + mBandwidth ); sb.append( " SLOT/CARRIER:" + mSlotsPerCarrier ); sb.append( " VOCODER:" + mVocoder.name() ); diff --git a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateVUHF.java b/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateVUHF.java index 3dffa8cd..fb7c7098 100644 --- a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateVUHF.java +++ b/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateVUHF.java @@ -32,17 +32,21 @@ public class IdentifierUpdateVUHF extends IdentifierUpdate StringBuilder sb = new StringBuilder(); sb.append( getMessageStub() ); + sb.append(toString()); - sb.append( " IDEN:" + getIdentifier() ); + return sb.toString(); + } + public String toString() + { + StringBuilder sb = new StringBuilder(); + + sb.append( " ID:" + getIdentifier() ); sb.append( " BASE:" + getBaseFrequency() ); - - sb.append( " BW:" + getBandwidth() ); - + sb.append( " BANDWIDTH:" + getBandwidth() ); sb.append( " SPACING:" + getChannelSpacing() ); - sb.append( " OFFSET:" + getTransmitOffset() ); - + return sb.toString(); } diff --git a/src/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcast.java b/src/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcast.java index 48b61992..25cf1044 100644 --- a/src/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcast.java +++ b/src/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcast.java @@ -1,44 +1,49 @@ package module.decode.p25.message.tsbk.osp.control; +import alias.AliasList; +import bits.BinaryMessage; import module.decode.p25.message.IBandIdentifier; import module.decode.p25.message.IdentifierReceiver; import module.decode.p25.message.tsbk.TSBKMessage; import module.decode.p25.reference.DataUnitID; import module.decode.p25.reference.Opcode; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import alias.AliasList; -import bits.BinaryMessage; - -public class SecondaryControlChannelBroadcast extends TSBKMessage - implements IdentifierReceiver, Comparable +public class SecondaryControlChannelBroadcast extends TSBKMessage + implements IdentifierReceiver, Comparable { - private final static Logger mLog = - LoggerFactory.getLogger( SecondaryControlChannelBroadcast.class ); + private final static Logger mLog = + LoggerFactory.getLogger(SecondaryControlChannelBroadcast.class); + + public static final int[] RFSS_ID = {80, 81, 82, 83, 84, 85, 86, 87}; + public static final int[] SITE_ID = {88, 89, 90, 91, 92, 93, 94, 95}; + public static final int[] IDENTIFIER_1 = {96, 97, 98, 99}; + public static final int[] CHANNEL_1 = {100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111}; + public static final int[] SYSTEM_SERVICE_CLASS_1 = {112, 113, 114, 115, 116, + 117, 118, 119}; + public static final int[] IDENTIFIER_2 = {120, 121, 122, 123}; + public static final int[] CHANNEL_2 = {124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135}; + public static final int[] SYSTEM_SERVICE_CLASS_2 = {136, 137, 138, 139, 140, + 141, 142, 143}; - public static final int[] RFSS_ID = { 80,81,82,83,84,85,86,87 }; - public static final int[] SITE_ID = { 88,89,90,91,92,93,94,95 }; - public static final int[] IDENTIFIER_1 = { 96,97,98,99 }; - public static final int[] CHANNEL_1 = { 100,101,102,103,104,105,106,107,108, - 109,110,111 }; - public static final int[] SYSTEM_SERVICE_CLASS_1 = { 112,113,114,115,116, - 117,118,119 }; - public static final int[] IDENTIFIER_2 = { 120,121,122,123 }; - public static final int[] CHANNEL_2 = { 124,125,126,127,128,129,130,131,132, - 133,134,135 }; - public static final int[] SYSTEM_SERVICE_CLASS_2 = { 136,137,138,139,140, - 141,142,143 }; - private IBandIdentifier mIdentifierUpdate1; private IBandIdentifier mIdentifierUpdate2; - - public SecondaryControlChannelBroadcast( BinaryMessage message, - DataUnitID duid, - AliasList aliasList ) + + private int mRFSS; + private int mSite; + private int mIdent1; + private int mIdent2; + private int mChan1; + private int mChan2; + + public SecondaryControlChannelBroadcast(BinaryMessage message, + DataUnitID duid, + AliasList aliasList) { - super( message, duid, aliasList ); + super(message, duid, aliasList); } @Override @@ -46,162 +51,197 @@ public class SecondaryControlChannelBroadcast extends TSBKMessage { return Opcode.SECONDARY_CONTROL_CHANNEL_BROADCAST.getDescription(); } - + public String getMessage() { StringBuilder sb = new StringBuilder(); - - sb.append( getMessageStub() ); - - sb.append( " SITE:" + getRFSS() + "-" + getSiteID() ); - - sb.append( " CHAN1:" + getIdentifier1() + "-" + getChannel1() ); - - sb.append( " DN1:" + getDownlinkFrequency1() ); - - sb.append( " UP1:" + getUplinkFrequency1() ); - - sb.append( " SVC1:" + - SystemService.toString( getSystemServiceClass1() ) ); - if( hasChannel2() ) + sb.append(getMessageStub()); + + sb.append(" SITE:" + getRFSS() + "-" + getSiteID()); + + sb.append(" CHAN1:" + getIdentifier1() + "-" + getChannel1()); + + sb.append(" DN1:" + getDownlinkFrequency1()); + + sb.append(" UP1:" + getUplinkFrequency1()); + + sb.append(" SVC1:" + + SystemService.toString(getSystemServiceClass1())); + + if(hasChannel2()) { - sb.append( " CHAN2:" + getIdentifier2() + "-" + getChannel2() ); - - sb.append( " DN2:" + getDownlinkFrequency2() ); - - sb.append( " UP2:" + getUplinkFrequency2() ); - - sb.append( " SVC2:" + - SystemService.toString( getSystemServiceClass2() ) ); + sb.append(" CHAN2:" + getIdentifier2() + "-" + getChannel2()); + + sb.append(" DN2:" + getDownlinkFrequency2()); + + sb.append(" UP2:" + getUplinkFrequency2()); + + sb.append(" SVC2:" + + SystemService.toString(getSystemServiceClass2())); } - + return sb.toString(); } - + public String getRFSS() { - return mMessage.getHex( RFSS_ID, 2 ); + return mMessage.getHex(RFSS_ID, 2); } - + public String getSiteID() { - return mMessage.getHex( SITE_ID, 2 ); + return mMessage.getHex(SITE_ID, 2); } - + public int getIdentifier1() { - return mMessage.getInt( IDENTIFIER_1 ); + return mMessage.getInt(IDENTIFIER_1); } - + public int getChannel1() { - return mMessage.getInt( CHANNEL_1 ); + return mMessage.getInt(CHANNEL_1); } - + public int getSystemServiceClass1() { - return mMessage.getInt( SYSTEM_SERVICE_CLASS_1 ); + return mMessage.getInt(SYSTEM_SERVICE_CLASS_1); } public int getIdentifier2() { - return mMessage.getInt( IDENTIFIER_2 ); + return mMessage.getInt(IDENTIFIER_2); } - + public int getChannel2() { - return mMessage.getInt( CHANNEL_2 ); + return mMessage.getInt(CHANNEL_2); } - + public int getSystemServiceClass2() { - return mMessage.getInt( SYSTEM_SERVICE_CLASS_2 ); + return mMessage.getInt(SYSTEM_SERVICE_CLASS_2); } public boolean hasChannel2() { - return getSystemServiceClass2() != 0; + return getSystemServiceClass2() != 0; } - - + + public long getDownlinkFrequency1() { - return calculateDownlink( mIdentifierUpdate1, getChannel1() ); + return calculateDownlink(mIdentifierUpdate1, getChannel1()); } - + public long getUplinkFrequency1() { - return calculateUplink( mIdentifierUpdate1, getChannel1() ); + return calculateUplink(mIdentifierUpdate1, getChannel1()); } public long getDownlinkFrequency2() { - return calculateDownlink( mIdentifierUpdate2, getChannel2() ); + return calculateDownlink(mIdentifierUpdate2, getChannel2()); } - + public long getUplinkFrequency2() { - return calculateUplink( mIdentifierUpdate2, getChannel2() ); + return calculateUplink(mIdentifierUpdate2, getChannel2()); } - @Override - public void setIdentifierMessage( int identifier, IBandIdentifier message ) + @Override + public void setIdentifierMessage(int identifier, IBandIdentifier message) { - if( identifier == getIdentifier1() ) - { - mIdentifierUpdate1 = message; - } - - if( identifier == getIdentifier2() ) - { - mIdentifierUpdate2 = message; - } - } - - public int[] getIdentifiers() - { - int[] idens; - - if( hasChannel2() ) - { - idens = new int[ 2 ]; - - idens[ 0 ] = getIdentifier1(); - idens[ 1 ] = getIdentifier2(); - } - else - { - idens = new int[ 1 ]; - - idens[ 0 ] = getIdentifier1(); - } - - return idens; - } + if(identifier == getIdentifier1()) + { + mIdentifierUpdate1 = message; + } - @Override - public int compareTo( SecondaryControlChannelBroadcast other ) + if(identifier == getIdentifier2()) + { + mIdentifierUpdate2 = message; + } + } + + public int[] getIdentifiers() { - if( other.getSiteID().contentEquals( getSiteID() ) && - other.getIdentifier1() == getIdentifier1() && - other.getChannel1() == getChannel1() && - other.getChannel2() == getChannel2() && - other.getIdentifier2() == getIdentifier2() && - other.getDownlinkFrequency1() == getDownlinkFrequency1() && - other.getUplinkFrequency1() == getUplinkFrequency1() && - other.getDownlinkFrequency2() == getDownlinkFrequency2() && - other.getUplinkFrequency2() == getUplinkFrequency2() ) - { - return 0; - } - else if( other.getIdentifier1() < getIdentifier1() ) - { - return -1; - } - else - { - return 1; - } + int[] idens; + + if(hasChannel2()) + { + idens = new int[2]; + + idens[0] = getIdentifier1(); + idens[1] = getIdentifier2(); + } + else + { + idens = new int[1]; + + idens[0] = getIdentifier1(); + } + + return idens; + } + + @Override + public int compareTo(SecondaryControlChannelBroadcast other) + { + if(other.getRFSS().contentEquals(getRFSS()) && + other.getSiteID().contentEquals(getSiteID()) && + other.getIdentifier1() == getIdentifier1() && + other.getChannel1() == getChannel1()) + { + return 0; + } + else if(other.getIdentifier1() < getIdentifier1()) + { + return -1; + } + else + { + return 1; + } + } + + @Override + public boolean equals(Object o) + { + if(this == o) + { + return true; + } + if(!(o instanceof SecondaryControlChannelBroadcast)) + { + return false; + } + + SecondaryControlChannelBroadcast that = (SecondaryControlChannelBroadcast)o; + + if(getRFSS() != that.getRFSS()) + { + return false; + } + if(getSiteID() != that.getSiteID()) + { + return false; + } + if(getIdentifier1() != that.getIdentifier1()) + { + return false; + } + + return getChannel1() == that.getChannel1(); + } + + @Override + public int hashCode() + { + int result = getRFSS() != null ? getRFSS().hashCode() : 0; + result = 31 * result + getSiteID() != null ? getSiteID().hashCode() : 0; + result = 31 * result + getIdentifier1(); + result = 31 * result + getChannel1(); + return result; } } diff --git a/src/module/decode/p25/message/tsbk/osp/data/SNDCPDataChannelAnnouncementExplicit.java b/src/module/decode/p25/message/tsbk/osp/data/SNDCPDataChannelAnnouncementExplicit.java index e7a9f5c1..1753e030 100644 --- a/src/module/decode/p25/message/tsbk/osp/data/SNDCPDataChannelAnnouncementExplicit.java +++ b/src/module/decode/p25/message/tsbk/osp/data/SNDCPDataChannelAnnouncementExplicit.java @@ -6,28 +6,21 @@ import module.decode.p25.reference.DataUnitID; import alias.AliasList; import bits.BinaryMessage; -public class SNDCPDataChannelAnnouncementExplicit extends SNDCPData - implements IdentifierReceiver +public class SNDCPDataChannelAnnouncementExplicit extends SNDCPData implements IdentifierReceiver { 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_NUMBER = { 100,101,102,103,104,105,106, - 107,108,109,110,111 }; + 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_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, - 134,135,136,137,138,139,140,141,142,143 }; + 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, 134,135,136,137,138,139,140,141,142,143 }; private IBandIdentifier mIdentifierUpdateTransmit; private IBandIdentifier mIdentifierUpdateReceive; - public SNDCPDataChannelAnnouncementExplicit( BinaryMessage message, - DataUnitID duid, - AliasList aliasList ) + public SNDCPDataChannelAnnouncementExplicit( BinaryMessage message, DataUnitID duid, AliasList aliasList ) { super( message, duid, aliasList ); } @@ -148,11 +141,11 @@ public class SNDCPDataChannelAnnouncementExplicit extends SNDCPData public long getDownlinkFrequency() { - return calculateDownlink( mIdentifierUpdateTransmit, getReceiveChannelNumber() ); + return calculateDownlink( mIdentifierUpdateTransmit, getTransmitChannelNumber() ); } public long getUplinkFrequency() { - return calculateUplink( mIdentifierUpdateReceive, getTransmitChannelNumber() ); + return calculateUplink( mIdentifierUpdateReceive, getReceiveChannelNumber() ); } }