P25 Work-in-progress check-in.

This commit is contained in:
dennis.sheirer
2014-11-10 09:53:03 +00:00
parent 7b89c614e7
commit 46e3594c07
31 changed files with 2271 additions and 227 deletions

View File

@@ -0,0 +1,78 @@
package decode.p25.reference;
/**
* The Data Unit ID (DUID) is part of the Network ID (NID) field and indicates
* the type of message.
*/
public enum DataUnitID
{
NID ( -1, 64, "Network and Data Unit ID", false ),
HDU ( 0, 722, "Header Data Unit", false ),
TDU ( 3, 64, "Simple Terminator Data Unit", false ),
LDU1 ( 5, 1630, "Logical Link Data Unit 1", true ),
TSBK1( 7, 260, "Trunking Signaling Block", false ), //Single Block
TSBK2( 7, 260, "Trunking Signaling Block", false ), //Single Block
TSBK3( 7, 260, "Trunking Signaling Block", false ), //Single Block
LDU2 ( 10, 1632, "Logical Link Data Unit 2", true ),
PDU1 ( 12, 456, "Packet Data Unit", false ),
PDU2 ( 12, 652, "Packet Data Unit", false ),
PDU3 ( 12, 848, "Packet Data Unit", false ),
TDULC( 15, 372, "Terminator Data Unit With Link Control", false ),
UNKN ( -1, 0, "Unknown", false );
private int mValue;
private int mMessageLength;
private String mLabel;
private boolean mParity;
private DataUnitID( int value, int length, String label, boolean parity )
{
mValue = value;
mMessageLength = length;
mLabel = label;
mParity = parity;
}
public int getValue()
{
return mValue;
}
public int getMessageLength()
{
return mMessageLength;
}
public String getLabel()
{
return mLabel;
}
public boolean getParity()
{
return mParity;
}
public static DataUnitID fromValue( int value )
{
switch( value )
{
case 0:
return HDU;
case 3:
return TDU;
case 5:
return LDU1;
case 7:
return TSBK1;
case 10:
return LDU2;
case 12:
return PDU1;
case 15:
return TDULC;
default:
return UNKN;
}
}
}

View File

@@ -0,0 +1,23 @@
package decode.p25.reference;
public enum Encryption
{
ACCORDION_1_3( 0x00 ),
BATON_AUTO_EVEN( 0x01 ),
FIREFLY_TYPE1( 0x02 ),
MAYFLY_TYPE1( 0x03 ),
SAVILLE( 0x04 ),
BATON_AUTO_ODD( 0x41 ),
UNENCRYPTED( 0x80 ),
DES_OFB( 0x81 ),
TRIPLE_DES_2_KEY( 0x82 ),
TRIPLE_DES_3_KEY( 0x83 ),
AES( 0x84 );
private int mValue;
private Encryption( int value )
{
mValue = value;
}
}

View File

@@ -0,0 +1,99 @@
package decode.p25.reference;
public enum Opcode
{
GROUP_VOICE_CHANNEL_GRANT( "Group Voice Channel Grant", 0 ),
RESERVED_01( "Reserved", 1 ),
GROUP_VOICE_CHANNLE_GRANT_UPDATE( "Group Voice Channel Grant Update", 2 ),
GROUP_VOICE_CHANNEL_GRANT_UPDATE_EXPLICIT( "Group Voice Channel Grant Update - Explicit", 3 ),
UNIT_TO_UNIT_VOICE_CHANNEL_GRANT( "Unit-to-Unit Voice Channel Grant", 4 ),
UNIT_TO_UNIT_ANSWER_REQUEST( "Unit-to-Unit Answer Request", 5 ),
UNIT_TO_UNIT_VOICE_CHANNEL_GRANT_UPDATE( "Unit-to-Unit Voice Channel Grant Update", 6 ),
RESERVED_07( "Reserved", 7 ),
TELEPHONE_INTERCONNECT_VOICE_CHANNEL_GRANT( "Telephone Interconnect Voice Channel Grant", 8 ),
RESERVED_09( "Reserved", 9 ),
TELEPHONE_INTERCONNECT_ANSWER_REQUEST( "Telephone Interconnect Answer Request", 10 ),
RESERVED_0B( "Reserved", 11 ),
RESERVED_0C( "Reserved", 12 ),
RESERVED_0D( "Reserved", 13 ),
RESERVED_0E( "Reserved", 14 ),
RESERVED_0F( "Reserved", 15 ),
INDIVIDUAL_DATA_CHANNEL_GRANT( "Individual Data Channel Grant", 16 ),
GROUP_DATA_CHANNEL_GRANT( "Group Data Channel Grant", 17 ),
GROUP_DATA_CHANNEL_ANNOUNCEMENT( "Group Data Channel Announcement", 18 ),
GROUP_DATA_CHANNEL_ANNOUNCEMENT_EXPLICIT( "Group Data Channel Announcement-Explicit", 19 ),
SNDCP_DATA_CHANNEL_GRANT( "SNDCP Data Channel Grant", 20 ),
SNDCP_DATA_PAGE_REQUEST( "SNDCP Data Page Request", 21 ),
SNDCP_DATA_CHANNEL_ANNOUNCEMENT_EXPLICIT( "SNDCP Data Channel Announcement Explicit", 22 ),
RESERVED_17( "Reserved", 23 ),
STATUS_UPDATE( "Status Update", 24 ),
RESERVED_19( "Reserved", 25 ),
STATUS_QUERY( "Status Query", 26 ),
RESERVED_1B( "Reserved", 27 ),
MESSAGE_UPDATE( "Message Update", 28 ),
RADIO_UNIT_MONITOR_COMMAND( "Radio Unit Monitor Command", 29 ),
RESERVED_1E( "Reserved", 30 ),
CALL_ALERT( "Call Alert", 31 ),
ACKNOWLEDGE_RESPONSE_FNE( "Acknowledge Response - FNE", 32 ),
QUEUED_RESPONSE( "Queued Response", 33 ),
RESERVED_22( "Reserved", 34 ),
RESERVED_23( "Reserved", 35 ),
EXTENDED_FUNCTION_COMMAND( "Extended Function Command", 36 ),
RESERVED_25( "Reserved", 37 ),
RESERVED_26( "Reserved", 38 ),
DENY_RESPONSE( "Deny Response", 39 ),
GROUP_AFFILIATION_RESPONSE( "Group Affiliation Response", 40 ),
SECONDARY_CONTROL_CHANNEL_BROADCAST_EXPLICIT( "Secondary Control Channel Broadcast-Explicit", 41 ),
GROUP_AFFILIATION_QUERY( "Group Affiliation Query", 42 ),
LOCATION_REGISTRATION_RESPONSE( "Location Registration Response", 43 ),
UNIT_REGISTRATION_RESPONSE( "Unit Registration Response", 44 ),
UNIT_REGISTRATION_COMMAND( "Unit Registration Command", 45 ),
AUTHENTICATION_COMMAND( "Authentication Command", 46 ),
UNIT_DEREGISTRATION_ACKNOWLEDGE( "De-Registration Acknowledge", 47 ),
RESERVED_30( "Reserved", 48 ),
RESERVED_31( "Reserved", 49 ),
RESERVED_32( "Reserved", 50 ),
RESERVED_33( "Reserved", 51 ),
IDENTIFIER_UPDATE_VHF_UHF_BANDS( "Identifier Update for VHF/UHF Bands", 52 ),
TIME_DATE_ANNOUNCEMENT( "Time and Date Announcement", 53 ),
ROAMING_ADDRESS_COMMAND( "Roaming Address Command", 54 ),
ROAMING_ADDRESS_UPDATE( "Roaming Address Update", 55 ),
SYSTEM_SERVICE_BROADCAST( "System Service Broadcast", 56 ),
SECONDARY_CONTROL_CHANNEL_BROADCAST( "Secondary Control Channel Broadcast", 57 ),
RFSS_STATUS_BROADCAST( "RFSS Status Broadcast", 58 ),
NETWORK_STATUS_BROADCAST( "Network Status Broadcast", 59 ),
ADJACENT_STATUS_BROADCAST( "Adjacent Status Broadcast", 60 ),
IDENTIFIER_UPDATE_NON_VHF_UHF( "Identifier Update for non-VHF/UHF Bands", 61 ),
PROTECTION_PARAMETER_BROADCAST( "Protection Parameter Broadcast", 62 ),
PROTECTION_PARAMETER_UPDATE( "Protection Parameter Update", 63 ),
UNKNOWN( "Unknown", -1 );
private String mDescription;
private int mCode;
private Opcode( String description, int code )
{
mDescription = description;
mCode = code;
}
public String getDescription()
{
return mDescription;
}
public int getCode()
{
return mCode;
}
public static Opcode fromValue( int value )
{
if( 0 <= value && value <= 63 )
{
return values()[ value ];
}
return UNKNOWN;
}
}

View File

@@ -0,0 +1,67 @@
package decode.p25.reference;
public enum PDUFormat
{
F00( "F00", 0 ),
F01( "F01", 1 ),
F02( "F02", 2 ),
F03( "F03", 3 ),
F04( "F04", 4 ),
F05( "F05", 5 ),
F06( "F06", 6 ),
F07( "F07", 7 ),
F08( "F08", 8 ),
F09( "F09", 9 ),
F10( "F10", 10 ),
F11( "F11", 11 ),
F12( "F12", 12 ),
F13( "F13", 13 ),
F14( "F14", 14 ),
F15( "F15", 15 ),
F16( "F16", 16 ),
F17( "F17", 17 ),
F18( "F18", 18 ),
F19( "F19", 19 ),
F20( "F20", 20 ),
UNCONFIRMED_MULTI_BLOCK_TRUNKING_CONTROL( "UMBTC", 21 ),
ALTERNATE_MULTI_BLOCK_TRUNKING_CONTROL( "AMBTC", 22 ),
F23( "F23", 23 ),
F24( "F24", 24 ),
F25( "F25", 25 ),
F26( "F26", 26 ),
F27( "F27", 27 ),
F28( "F28", 28 ),
F29( "F29", 29 ),
F30( "F30", 30 ),
F31( "F31", 31 ),
UNKNOWN( "UNKN", -1 );
private String mLabel;
private int mValue;
private PDUFormat( String label, int value )
{
mLabel = label;
mValue = value;
}
public String getLabel()
{
return mLabel;
}
public int getValue()
{
return mValue;
}
public static PDUFormat fromValue( int value )
{
if( 0 <= value && value <= 31 )
{
return values()[ value ];
}
return UNKNOWN;
}
}

View File

@@ -0,0 +1,99 @@
package decode.p25.reference;
public enum ServiceAccessPoint
{
SAP_0( "0", 0 ),
SAP_1( "1", 1 ),
SAP_2( "2", 2 ),
SAP_3( "3", 3 ),
SAP_4( "4", 4 ),
SAP_5( "5", 5 ),
SAP_6( "6", 6 ),
SAP_7( "7", 7 ),
SAP_8( "8", 8 ),
SAP_9( "9", 9 ),
SAP_10( "10", 10 ),
SAP_11( "11", 11 ),
SAP_12( "12", 12 ),
SAP_13( "13", 13 ),
SAP_14( "14", 14 ),
SAP_15( "15", 15 ),
SAP_16( "16", 16 ),
SAP_17( "17", 17 ),
SAP_18( "18", 18 ),
SAP_19( "19", 19 ),
SAP_20( "20", 20 ),
SAP_21( "21", 21 ),
SAP_22( "22", 22 ),
SAP_23( "23", 23 ),
SAP_24( "24", 24 ),
SAP_25( "25", 25 ),
SAP_26( "26", 26 ),
SAP_27( "27", 27 ),
SAP_28( "28", 28 ),
SAP_29( "29", 29 ),
SAP_30( "30", 30 ),
SAP_31( "31", 31 ),
SAP_32( "32", 32 ),
SAP_33( "33", 33 ),
SAP_34( "34", 34 ),
SAP_35( "35", 35 ),
SAP_36( "36", 36 ),
SAP_37( "37", 37 ),
SAP_38( "38", 38 ),
SAP_39( "39", 39 ),
SAP_40( "40", 40 ),
SAP_41( "41", 41 ),
SAP_42( "42", 42 ),
SAP_43( "43", 43 ),
SAP_44( "44", 44 ),
SAP_45( "45", 45 ),
SAP_46( "46", 46 ),
SAP_47( "47", 47 ),
SAP_48( "48", 48 ),
SAP_49( "49", 49 ),
SAP_50( "50", 50 ),
SAP_51( "51", 51 ),
SAP_52( "52", 52 ),
SAP_53( "53", 53 ),
SAP_54( "54", 54 ),
SAP_55( "55", 55 ),
SAP_56( "56", 56 ),
SAP_57( "57", 57 ),
SAP_58( "58", 58 ),
SAP_59( "59", 59 ),
SAP_60( "60", 60 ),
UNENCRYPTED_TRUNKING_CONTROL( "OPEN TRUNK", 61 ),
SAP_62( "62", 62 ),
ENCRYPTED_TRUNKING_CONTROL( "ENC TRUNK", 63 ),
UKNOWN( "UNKN", -1 );
private String mLabel;
private int mValue;
private ServiceAccessPoint( String label, int value )
{
mLabel = label;
mValue = value;
}
public String getLabel()
{
return mLabel;
}
public int getValue()
{
return mValue;
}
public static ServiceAccessPoint fromValue( int value )
{
if( 0 <= value && value <= 63 )
{
return values()[ value ];
}
return UKNOWN;
}
}

View File

@@ -0,0 +1,21 @@
package decode.p25.reference;
public enum Status
{
TALKAROUND,
BUSY,
REPEATER,
IDLE,
UNKNOWN;
public Status fromValue( int value )
{
if( 0 <= value && value <= 3 )
{
return values()[ value ];
}
return UNKNOWN;
}
}

View File

@@ -0,0 +1,292 @@
package decode.p25.reference;
public enum Vendor
{
STANDARD( "STANDARD", 0),
V1( "V_01", 1),
V2( "V_02", 2),
V3( "V_03", 3),
V4( "V_04", 4),
V5( "V_05", 5),
V6( "V_06", 6),
V7( "V_07", 7),
V8( "V_08", 8),
V9( "V_09", 9),
V10( "V_0A", 10),
V11( "V_0B", 11),
V12( "V_0C", 12),
V13( "V_0D", 13),
V14( "V_0E", 14),
V15( "V_0F", 15),
RELM( "RELM/BK RADIO", 16),
V17( "V_11", 17),
V18( "V_12", 18),
V19( "V_13", 19),
V20( "V_14", 20),
V21( "V_15", 21),
V22( "V_16", 22),
V23( "V_17", 23),
V24( "V_18", 24),
V25( "V_19", 25),
V26( "V_1A", 26),
V27( "V_1B", 27),
V28( "V_1C", 28),
V29( "V_1D", 29),
V30( "V_1E", 30),
V31( "V_1F", 31),
CYCOMM( "CYCOMM", 32),
V33( "V_21", 33),
V34( "V_22", 34),
V35( "V_23", 35),
V36( "V_24", 36),
V37( "V_25", 37),
V38( "V_26", 38),
V39( "V_27", 39),
EFRATOM( "EFRATOM", 40),
V41( "V_29", 41),
V42( "V_2A", 42),
V43( "V_2B", 43),
V44( "V_2C", 44),
V45( "V_2D", 45),
V46( "V_2E", 46),
V47( "V_2F", 47),
ERICSSON( "ERICSSON", 48),
V49( "V_31", 49),
V50( "V_32", 50),
V51( "V_33", 51),
V52( "V_34", 52),
V53( "V_35", 53),
V54( "V_36", 54),
V55( "V_37", 55),
DATRON( "DATRON", 56),
V57( "V_39", 57),
V58( "V_3A", 58),
V59( "V_3B", 59),
V60( "V_3C", 60),
V61( "V_3D", 61),
V62( "V_3E", 62),
V63( "V_3F", 63),
ICOM( "ICOM", 64),
V65( "V_41", 65),
V66( "V_42", 66),
V67( "V_43", 67),
V68( "V_44", 68),
V69( "V_45", 69),
V70( "V_46", 70),
V71( "V_47", 71),
GARMIN( "GARMIN", 72),
V73( "V_49", 73),
V74( "V_4A", 74),
V75( "V_4B", 75),
V76( "V_4C", 76),
V77( "V_4D", 77),
V78( "V_4E", 78),
V79( "V_4F", 79),
GTE( "GTE", 80),
V81( "V_51", 81),
V82( "V_52", 82),
V83( "V_53", 83),
V84( "V_54", 84),
IFR_SYSTEMS( "IFR SYSTEMS", 85),
V86( "V_56", 86),
V87( "V_57", 87),
V88( "V_58", 88),
V89( "V_59", 89),
V90( "V_5A", 90),
V91( "V_5B", 91),
V92( "V_5C", 92),
V93( "V_5D", 93),
V94( "V_5E", 94),
V95( "V_5F", 95),
GEC_MARCONI( "GEC-MARCONI", 96),
V97( "V_61", 97),
V98( "V_62", 98),
V99( "V_63", 99),
V100( "V_64", 100),
V101( "V_65", 101),
V102( "V_66", 102),
V103( "V_67", 103),
KENWOOD( "KENWOOD", 104),
V105( "V_69", 105),
V106( "V_6A", 106),
V107( "V_6B", 107),
V108( "V_6C", 108),
V109( "V_6D", 109),
V110( "V_6E", 110),
V111( "V_6F", 111),
GLENAYRE( "GLENAYRE ELECTRONICS", 112),
V113( "V_71", 113),
V114( "V_72", 114),
V115( "V_73", 115),
JAPAN_RADIO( "JAPAN RADIO CO", 116),
V117( "V_75", 117),
V118( "V_76", 118),
V119( "V_77", 119),
KOKUSAI( "KOKUSAI", 120),
V121( "V_79", 121),
V122( "V_7A", 122),
V123( "V_7B", 123),
MAXON( "MAXON", 124),
V125( "V_7D", 125),
V126( "V_7E", 126),
V127( "V_7F", 127),
MIDLAND( "MIDLAND", 128),
V129( "V_81", 129),
V130( "V_82", 130),
V131( "V_83", 131),
V132( "V_84", 132),
V133( "V_85", 133),
DANIELS( "DANIELS ELECTRONICS", 134),
V135( "V_87", 135),
V136( "V_88", 136),
V137( "V_89", 137),
V138( "V_8A", 138),
V139( "V_8B", 139),
V140( "V_8C", 140),
V141( "V_8D", 141),
V142( "V_8E", 142),
V143( "V_8F", 143),
MOTOROLA( "MOTOROLA", 144),
V145( "V_91", 145),
V146( "V_92", 146),
V147( "V_93", 147),
V148( "V_94", 148),
V149( "V_95", 149),
V150( "V_96", 150),
V151( "V_97", 151),
V152( "V_98", 152),
V153( "V_99", 153),
V154( "V_9A", 154),
V155( "V_9B", 155),
V156( "V_9C", 156),
V157( "V_9D", 157),
V158( "V_9E", 158),
V159( "V_9F", 159),
THALES( "THALES", 160),
V161( "V_A1", 161),
V162( "V_A2", 162),
V163( "V_A3", 163),
MACOM( "M/A-COM", 164),
V165( "V_A5", 165),
V166( "V_A6", 166),
V167( "V_A7", 167),
V168( "V_A8", 168),
V169( "V_A9", 169),
V170( "V_AA", 170),
V171( "V_AB", 171),
V172( "V_AC", 172),
V173( "V_AD", 173),
V174( "V_AE", 174),
V175( "V_AF", 175),
RATHEON( "RATHEON", 176),
V177( "V_B1", 177),
V178( "V_B2", 178),
V179( "V_B3", 179),
V180( "V_B4", 180),
V181( "V_B5", 181),
V182( "V_B6", 182),
V183( "V_B7", 183),
V184( "V_B8", 184),
V185( "V_B9", 185),
V186( "V_BA", 186),
V187( "V_BB", 187),
V188( "V_BC", 188),
V189( "V_BD", 189),
V190( "V_BE", 190),
V191( "V_BF", 191),
SEA( "SEA", 192),
V193( "V_C1", 193),
V194( "V_C2", 194),
V195( "V_C3", 195),
V196( "V_C4", 196),
V197( "V_C5", 197),
V198( "V_C6", 198),
V199( "V_C7", 199),
SECURICOR( "SECURICOR", 200),
V201( "V_C9", 201),
V202( "V_CA", 202),
V203( "V_CB", 203),
V204( "V_CC", 204),
V205( "V_CD", 205),
V206( "V_CE", 206),
V207( "V_CF", 207),
ADI( "ADI", 208),
V209( "V_D1", 209),
V210( "V_D2", 210),
V211( "V_D3", 211),
V212( "V_D4", 212),
V213( "V_D5", 213),
V214( "V_D6", 214),
V215( "V_D7", 215),
TAIT( "TAIT", 216),
V217( "V_D9", 217),
V218( "V_DA", 218),
V219( "V_DB", 219),
V220( "V_DC", 220),
V221( "V_DD", 221),
V222( "V_DE", 222),
V223( "V_DF", 223),
TELETEC( "TELETEC", 224),
V225( "V_E1", 225),
V226( "V_E2", 226),
V227( "V_E3", 227),
V228( "V_E4", 228),
V229( "V_E5", 229),
V230( "V_E6", 230),
V231( "V_E7", 231),
V232( "V_E8", 232),
V233( "V_E9", 233),
V234( "V_EA", 234),
V235( "V_EB", 235),
V236( "V_EC", 236),
V237( "V_ED", 237),
V238( "V_EE", 238),
V239( "V_EF", 239),
TRANSCRYPT( "TRANSCRYPT", 240),
V241( "V_F1", 241),
V242( "V_F2", 242),
V243( "V_F3", 243),
V244( "V_F4", 244),
V245( "V_F5", 245),
V246( "V_F6", 246),
V247( "V_F7", 247),
V248( "V_F8", 248),
V249( "V_F9", 249),
V250( "V_FA", 250),
V251( "V_FB", 251),
V252( "V_FC", 252),
V253( "V_FD", 253),
V254( "V_FE", 254),
V255( "V_FF", 255),
VUNK( "UNKN", -1 );
private String mLabel;
private int mValue;
private Vendor( String label, int value )
{
mLabel = label;
mValue = value;
}
public String getLabel()
{
return mLabel;
}
public int getValue()
{
return mValue;
}
public static Vendor fromValue( int value )
{
if( 0 <= value && value <= 255 )
{
return values()[ value ];
}
return VUNK;
}
}