mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 08:37:25 -05:00
-Improved handling of channel grants and call event logging -Prevent traffic channels from changing to control channel state -Change text on PDU Alternate Multi-Block to reflect trunking message type -Added interface for Adjacent Site messages and improved logging
132 lines
5.3 KiB
Java
132 lines
5.3 KiB
Java
package module.decode.p25.message.pdu;
|
|
|
|
import module.decode.p25.message.pdu.osp.control.AdjacentStatusBroadcastExtended;
|
|
import module.decode.p25.message.pdu.osp.control.CallAlertExtended;
|
|
import module.decode.p25.message.pdu.osp.control.GroupAffiliationQueryExtended;
|
|
import module.decode.p25.message.pdu.osp.control.GroupAffiliationResponseExtended;
|
|
import module.decode.p25.message.pdu.osp.control.MessageUpdateExtended;
|
|
import module.decode.p25.message.pdu.osp.control.NetworkStatusBroadcastExtended;
|
|
import module.decode.p25.message.pdu.osp.control.ProtectionParameterBroadcast;
|
|
import module.decode.p25.message.pdu.osp.control.RFSSStatusBroadcastExtended;
|
|
import module.decode.p25.message.pdu.osp.control.RoamingAddressUpdateExtended;
|
|
import module.decode.p25.message.pdu.osp.control.StatusQueryExtended;
|
|
import module.decode.p25.message.pdu.osp.control.StatusUpdateExtended;
|
|
import module.decode.p25.message.pdu.osp.control.UnitRegistrationResponseExtended;
|
|
import module.decode.p25.message.pdu.osp.data.GroupDataChannelGrantExtended;
|
|
import module.decode.p25.message.pdu.osp.data.IndividualDataChannelGrantExtended;
|
|
import module.decode.p25.message.pdu.osp.voice.GroupVoiceChannelGrantExplicit;
|
|
import module.decode.p25.message.pdu.osp.voice.TelephoneInterconnectChannelGrantExplicit;
|
|
import module.decode.p25.message.pdu.osp.voice.TelephoneInterconnectChannelGrantUpdateExplicit;
|
|
import module.decode.p25.message.pdu.osp.voice.UnitToUnitAnswerRequestExplicit;
|
|
import module.decode.p25.message.pdu.osp.voice.UnitToUnitVoiceChannelGrantExtended;
|
|
import module.decode.p25.message.pdu.osp.voice.UnitToUnitVoiceChannelGrantUpdateExtended;
|
|
import module.decode.p25.reference.DataUnitID;
|
|
import module.decode.p25.reference.Opcode;
|
|
import module.decode.p25.reference.PDUFormat;
|
|
import module.decode.p25.reference.Vendor;
|
|
import alias.AliasList;
|
|
import bits.BinaryMessage;
|
|
|
|
public class PDUMessageFactory
|
|
{
|
|
public static PDUMessage getMessage( BinaryMessage message,
|
|
DataUnitID duid,
|
|
AliasList aliasList )
|
|
{
|
|
PDUFormat format = PDUFormat.fromValue(
|
|
message.getInt( PDUMessage.FORMAT ) );
|
|
|
|
switch( format )
|
|
{
|
|
case ALTERNATE_MULTI_BLOCK_TRUNKING_CONTROL:
|
|
Vendor vendor = Vendor.fromValue(
|
|
message.getInt( PDUMessage.VENDOR_ID ) );
|
|
|
|
switch( vendor )
|
|
{
|
|
case STANDARD:
|
|
Opcode opcode = Opcode.fromValue(
|
|
message.getInt( PDUMessage.OPCODE ) );
|
|
|
|
switch( opcode )
|
|
{
|
|
case ADJACENT_STATUS_BROADCAST:
|
|
return new AdjacentStatusBroadcastExtended(
|
|
message, duid, aliasList );
|
|
case CALL_ALERT:
|
|
return new CallAlertExtended( message, duid,
|
|
aliasList );
|
|
case GROUP_AFFILIATION_QUERY:
|
|
return new GroupAffiliationQueryExtended(
|
|
message, duid, aliasList );
|
|
case GROUP_AFFILIATION_RESPONSE:
|
|
return new GroupAffiliationResponseExtended(
|
|
message, duid, aliasList );
|
|
case GROUP_DATA_CHANNEL_GRANT:
|
|
return new GroupDataChannelGrantExtended(
|
|
message, duid, aliasList );
|
|
case GROUP_VOICE_CHANNEL_GRANT:
|
|
|
|
return new GroupVoiceChannelGrantExplicit(
|
|
message, duid, aliasList );
|
|
case INDIVIDUAL_DATA_CHANNEL_GRANT:
|
|
return new IndividualDataChannelGrantExtended(
|
|
message, duid, aliasList );
|
|
case MESSAGE_UPDATE:
|
|
return new MessageUpdateExtended( message, duid,
|
|
aliasList );
|
|
case NETWORK_STATUS_BROADCAST:
|
|
return new NetworkStatusBroadcastExtended(
|
|
message, duid, aliasList );
|
|
case PROTECTION_PARAMETER_BROADCAST:
|
|
return new ProtectionParameterBroadcast(
|
|
message, duid, aliasList );
|
|
case RFSS_STATUS_BROADCAST:
|
|
return new RFSSStatusBroadcastExtended( message,
|
|
duid, aliasList );
|
|
case ROAMING_ADDRESS_UPDATE:
|
|
return new RoamingAddressUpdateExtended(
|
|
message, duid, aliasList );
|
|
case STATUS_QUERY:
|
|
return new StatusQueryExtended( message, duid,
|
|
aliasList );
|
|
case STATUS_UPDATE:
|
|
return new StatusUpdateExtended( message, duid,
|
|
aliasList );
|
|
case TELEPHONE_INTERCONNECT_VOICE_CHANNEL_GRANT:
|
|
return new TelephoneInterconnectChannelGrantExplicit(
|
|
message, duid, aliasList );
|
|
case TELEPHONE_INTERCONNECT_VOICE_CHANNEL_GRANT_UPDATE:
|
|
return new TelephoneInterconnectChannelGrantUpdateExplicit(
|
|
message, duid, aliasList );
|
|
case UNIT_REGISTRATION_RESPONSE:
|
|
return new UnitRegistrationResponseExtended(
|
|
message, duid, aliasList );
|
|
case UNIT_TO_UNIT_ANSWER_REQUEST:
|
|
return new UnitToUnitAnswerRequestExplicit(
|
|
message, duid, aliasList );
|
|
case UNIT_TO_UNIT_VOICE_CHANNEL_GRANT:
|
|
return new UnitToUnitVoiceChannelGrantExtended(
|
|
message, duid, aliasList );
|
|
case UNIT_TO_UNIT_VOICE_CHANNEL_GRANT_UPDATE:
|
|
return new UnitToUnitVoiceChannelGrantUpdateExtended(
|
|
message, duid, aliasList );
|
|
default:
|
|
break;
|
|
}
|
|
case MOTOROLA:
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return new PDUMessage( message, duid, aliasList );
|
|
|
|
case UNCONFIRMED_MULTI_BLOCK_TRUNKING_CONTROL:
|
|
return new PDUMessage( message, duid, aliasList );
|
|
default:
|
|
return new PDUMessage( message, duid, aliasList );
|
|
}
|
|
}
|
|
}
|