You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dvmhost/src/common/p25/P25Defines.h

666 lines
35 KiB

// SPDX-License-Identifier: GPL-2.0-only
/*
* Digital Voice Modem - Common Library
* GPLv2 Open Source. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright (C) 2016 Jonathan Naylor, G4KLX
* Copyright (C) 2017-2024 Bryan Biedenkapp, N2PLL
*
*/
/**
* @defgroup p25 Project 25
* @brief Implementation for the TIA-102 Project 25 standard.
* @ingroup common
*
* @file P25Defines.h
* @ingroup p25
*/
#if !defined(__P25_DEFINES_H__)
#define __P25_DEFINES_H__
#include "common/Defines.h"
// Shorthand macro to p25::defines -- keeps source code that doesn't use "using" concise
#define P25DEF p25::defines
namespace p25
{
namespace defines
{
// ---------------------------------------------------------------------------
// Constants
// ---------------------------------------------------------------------------
/**
* @addtogroup p25
* @{
*/
/** @name Frame Lengths and Misc Constants */
const uint32_t P25_HDU_FRAME_LENGTH_BYTES = 99U;
const uint32_t P25_HDU_FRAME_LENGTH_BITS = P25_HDU_FRAME_LENGTH_BYTES * 8U;
const uint32_t P25_TDU_FRAME_LENGTH_BYTES = 18U;
const uint32_t P25_TDU_FRAME_LENGTH_BITS = P25_TDU_FRAME_LENGTH_BYTES * 8U;
const uint32_t P25_LDU_FRAME_LENGTH_BYTES = 216U;
const uint32_t P25_LDU_FRAME_LENGTH_BITS = P25_LDU_FRAME_LENGTH_BYTES * 8U;
const uint32_t P25_TSDU_FRAME_LENGTH_BYTES = 45U;
const uint32_t P25_TSDU_FRAME_LENGTH_BITS = P25_TSDU_FRAME_LENGTH_BYTES * 8U;
const uint32_t P25_TSDU_DOUBLE_FRAME_LENGTH_BYTES = 72U;
const uint32_t P25_TSDU_DOUBLE_FRAME_LENGTH_BITS = P25_TSDU_DOUBLE_FRAME_LENGTH_BYTES * 8U;
const uint32_t P25_TSDU_TRIPLE_FRAME_LENGTH_BYTES = 90U;
const uint32_t P25_TSDU_TRIPLE_FRAME_LENGTH_BITS = P25_TSDU_TRIPLE_FRAME_LENGTH_BYTES * 8U;
const uint32_t P25_PDU_FRAME_LENGTH_BYTES = 512U;
const uint32_t P25_PDU_FRAME_LENGTH_BITS = P25_PDU_FRAME_LENGTH_BYTES * 8U;
const uint32_t P25_TDULC_FRAME_LENGTH_BYTES = 54U;
const uint32_t P25_TDULC_FRAME_LENGTH_BITS = P25_TDULC_FRAME_LENGTH_BYTES * 8U;
const uint32_t P25_NID_LENGTH_BYTES = 8U;
const uint32_t P25_NID_LENGTH_BITS = P25_NID_LENGTH_BYTES * 8U;
const uint8_t P25_SYNC_BYTES[] = { 0x55U, 0x75U, 0xF5U, 0xFFU, 0x77U, 0xFFU };
const uint32_t P25_SYNC_LENGTH_BYTES = 6U;
const uint32_t P25_SYNC_LENGTH_BITS = P25_SYNC_LENGTH_BYTES * 8U;
const uint8_t P25_START_SYNC = 0x5FU;
const uint32_t P25_PREAMBLE_LENGTH_BYTES = P25_SYNC_LENGTH_BYTES + P25_NID_LENGTH_BYTES;
const uint32_t P25_PREAMBLE_LENGTH_BITS = P25_SYNC_LENGTH_BITS + P25_NID_LENGTH_BITS;
const uint32_t P25_LDU_FRAME_TIME = 180U;
const uint32_t P25_HDU_LENGTH_BYTES = 81U;
const uint32_t P25_LDU_LC_FEC_LENGTH_BYTES = 18U;
const uint32_t P25_TDULC_FEC_LENGTH_BYTES = 36U;
const uint32_t P25_TDULC_LENGTH_BYTES = 18U;
const uint32_t P25_TDULC_PAYLOAD_LENGTH_BYTES = 8U;
const uint32_t P25_TSBK_FEC_LENGTH_BYTES = 25U;
const uint32_t P25_TSBK_FEC_LENGTH_BITS = P25_TSBK_FEC_LENGTH_BYTES * 8U - 4U; // Trellis is actually 196 bits
const uint32_t P25_TSBK_LENGTH_BYTES = 12U;
const uint32_t P25_MAX_PDU_BLOCKS = 42U;
const uint32_t P25_PDU_HEADER_LENGTH_BYTES = 12U;
const uint32_t P25_PDU_CONFIRMED_LENGTH_BYTES = 18U;
const uint32_t P25_PDU_CONFIRMED_DATA_LENGTH_BYTES = 16U;
const uint32_t P25_PDU_UNCONFIRMED_LENGTH_BYTES = 12U;
const uint32_t P25_PDU_FEC_LENGTH_BYTES = 25U;
const uint32_t P25_PDU_FEC_LENGTH_BITS = P25_PDU_FEC_LENGTH_BYTES * 8U - 4U; // Trellis is actually 196 bits
const uint32_t MI_LENGTH_BYTES = 9U;
const uint32_t RAW_IMBE_LENGTH_BYTES = 11U;
const uint32_t P25_SS0_START = 70U;
const uint32_t P25_SS1_START = 71U;
const uint32_t P25_SS_INCREMENT = 72U;
const uint8_t NULL_IMBE[] = { 0x04U, 0x0CU, 0xFDU, 0x7BU, 0xFBU, 0x7DU, 0xF2U, 0x7BU, 0x3DU, 0x9EU, 0x45U };
const uint8_t ENCRYPTED_NULL_IMBE[] = { 0xFCU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U };
const uint8_t MOT_CALLSIGN_LENGTH_BYTES = 8U;
const uint8_t AUTH_RES_LENGTH_BYTES = 4U;
const uint8_t AUTH_RAND_SEED_LENGTH_BYTES = 10U;
const uint8_t AUTH_RAND_CHLNG_LENGTH_BYTES = 5U;
const uint8_t AUTH_KEY_LENGTH_BYTES = 16U;
/* @} */
/** @name Thresholds */
/** @brief Default Silence Threshold */
const uint32_t DEFAULT_SILENCE_THRESHOLD = 124U;
/** @brief Default Frame Loss Threshold */
const uint32_t DEFAULT_FRAME_LOSS_THRESHOLD = 6U;
/** @brief Maximum P25 voice frame errors */
const uint32_t MAX_P25_VOICE_ERRORS = 1233U;
/** @} */
/** @name Manufacturer IDs */
/** @brief Standard MFId */
const uint8_t MFG_STANDARD = 0x00U;
/** @brief Alternate Standard MFId */
const uint8_t MFG_STANDARD_ALT = 0x01U;
/** @brief Motorola MFId */
const uint8_t MFG_MOT = 0x90U;
/** @brief DVM; Omaha Communication Systems, LLC ($9C) */
const uint8_t MFG_DVM_OCS = 0x9CU;
/** @} */
/** @name Encryption Algorithms */
/** @brief Unencrypted */
const uint8_t ALGO_UNENCRYPT = 0x80U;
/** @} */
/** @name IDEN Table Bandwidth Sizes */
/** @brief 6.25khz VHF/UHF IDEN Bandwidth */
const uint8_t IDEN_UP_VU_BW_625K = 0x04U;
/** @brief 12.5khz VHF/UHF IDEN Bandwidth */
const uint8_t IDEN_UP_VU_BW_125K = 0x05U;
/** @} */
/** @name Default Values */
/** @brief Digital Squelch NAC */
const uint32_t NAC_DIGITAL_SQ = 0xF7EU;
/** @brief Reuse RX NAC */
const uint32_t NAC_REUSE_RX_NAC = 0xF7FU;
/** @brief Default NAC */
const uint32_t DEFAULT_NAC = 0x293U;
/** @brief Default WACN */
const uint32_t WACN_STD_DEFAULT = 0xBB800U;
/** @brief Default System ID */
const uint32_t SID_STD_DEFAULT = 0x001U;
/** @brief FNE Working Unit ID */
const uint32_t WUID_FNE = 0xFFFFFCU;
/** @brief Registration Working Unit ID */
const uint32_t WUID_REG = 0xFFFFFEU;
/** @brief All-call Working Unit ID */
const uint32_t WUID_ALL = 0xFFFFFFU;
/** @brief All-call Talkgroup ID */
const uint32_t TGID_ALL = 0xFFFFU;
/** @} */
/** @brief Station Service Classes */
namespace ServiceClass {
/** @brief Station Service Classes */
enum : uint8_t {
INVALID = 0x00U, //! Invalid Service Class
COMPOSITE = 0x01U, //! Composite Control Channel
VOICE = 0x10U, //! Voice
DATA = 0x20U, //! Data
REG = 0x40U, //! Registration
AUTH = 0x80U //! Authentication
};
}
/** @brief System Service Types */
namespace SystemService {
/** @brief System Service Types */
enum : uint32_t {
NET_ACTIVE = 0x0200000U, //! Network Active
GROUP_VOICE = 0x0080000U, //! Group Voice
IND_VOICE = 0x0040000U, //! Individual Voice
PSTN_UNIT_VOICE = 0x0020000U, //! PSTN Unit Voice
UNIT_PSTN_VOICE = 0x0010000U, //! Unit PSTN Voice
GROUP_DATA = 0x0004000U, //! Group Data
IND_DATA = 0x0002000U, //! Individual Data
UNIT_REG = 0x0000800U, //! Unit Registration
GROUP_AFF = 0x0000400U, //! Group Affiliation
GROUP_AFF_Q = 0x0000200U, //! Group Affiliation Query
USER_STS = 0x0000040U, //! User Status
USER_MSG = 0x0000020U, //! User Message
UNIT_STS = 0x0000010U, //! Unit Status
USER_STS_Q = 0x0000008U, //! User Status Query
UNIT_STS_Q = 0x0000004U, //! Unit Status Query
CALL_ALRT = 0x0000002U, //! Call Alert
EMERGENCY = 0x0000001U //! Emergency
};
}
/** @name Default System Service Types */
/** @brief System Service Defaults */
const uint32_t SYS_SRV_DEFAULT = SystemService::EMERGENCY | SystemService::CALL_ALRT | SystemService::USER_MSG |
SystemService::UNIT_STS_Q | SystemService::USER_STS_Q | SystemService::UNIT_STS | SystemService::USER_STS |
SystemService::IND_DATA | SystemService::IND_VOICE | SystemService::GROUP_DATA | SystemService::GROUP_VOICE;
/** @brief System Service Trunking Defaults */
const uint32_t SYS_SRV_TRUNK = SYS_SRV_DEFAULT | SystemService::GROUP_AFF | SystemService::UNIT_REG | SystemService::GROUP_AFF_Q;
/** @} */
/** @brief Conventional/Failur/Valid/Networked Flags */
namespace CFVA {
/** @brief Conventional/Failur/Valid/Networked Flags */
enum : uint8_t {
CONV = 0x08U, //! Conventional
FAILURE = 0x04U, //! Failure
VALID = 0x02U, //! Valid
NETWORK = 0x01U //! Networked
};
}
/** @brief Response Codes */
namespace ResponseCode {
/** @brief Response Codes */
enum : uint8_t {
// General Codes
ACCEPT = 0x00U, //! Accept
FAIL = 0x01U, //! Fail
DENY = 0x02U, //! Deny
REFUSED = 0x03U, //! Refused
// Answer Codes
ANS_PROCEED = 0x20U, //! Proceed
ANS_DENY = 0x21U, //! Deny
ANS_WAIT = 0x22U //! Wait
};
}
/** @brief Cancel Service Codes */
namespace CancelService {
/** @brief Cancel Service Codes */
enum : uint8_t {
NONE = 0x00U, //! None
TERM_QUE = 0x10U, //! Terminate Queued
TERM_RSRC_ASSIGN = 0x20U //! Terminate Resource Assigned
};
}
/** @brief Reason Codes */
namespace ReasonCode {
/** @brief Reason Codes */
enum : uint8_t {
// Denial Codes
DENY_REQ_UNIT_NOT_VALID = 0x10U, //! Requesting Unit Not Valid
DENY_REQ_UNIT_NOT_AUTH = 0x11U, //! Requesting Unit Not Authenticated
DENY_TGT_UNIT_NOT_VALID = 0x20U, //! Target Unit Not Vaild
DENY_TGT_UNIT_NOT_AUTH = 0x21U, //! Target Unit Not Authenticated
DENY_SU_FAILED_AUTH = 0x22U, //! Subscriber Failed Authentication
DENY_TGT_UNIT_REFUSED = 0x2FU, //! Target Unit Refused
DENY_TGT_GROUP_NOT_VALID = 0x30U, //! Target Group Not Valid
DENY_TGT_GROUP_NOT_AUTH = 0x31U, //! Target Group Not Authenticated
DENY_NO_NET_RSRC_AVAIL = 0x53U, //! No Network Resources Available
DENY_NO_RF_RSRC_AVAIL = 0x54U, //! No RF Resources Available
DENY_SVC_IN_USE = 0x55U, //! Service In Use
DENY_SITE_ACCESS_DENIAL = 0x60U, //! Site Access Denial
DENY_PTT_COLLIDE = 0x67U, //! Push-to-Talk Collision
DENY_PTT_BONK = 0x77U, //! Push-to-Talk Denial/Bonk
DENY_SYS_UNSUPPORTED_SVC = 0xFFU, //! Service Unsupported
// Queue Codes
QUE_REQ_ACTIVE_SERVICE = 0x10U, //! Requested Service Active
QUE_TGT_ACTIVE_SERVICE = 0x20U, //! Target Service Active
QUE_TGT_UNIT_QUEUED = 0x2FU, //! Target Unit Queued
QUE_CHN_RESOURCE_NOT_AVAIL = 0x40U //! Channel Resource Not Available
};
}
/** @brief Extended Function Opcodes */
namespace ExtendedFunctions {
/** @brief Extended Function Opcodes */
enum : uint16_t {
CHECK = 0x0000U, //! Radio Check
UNINHIBIT = 0x007EU, //! Radio Uninhibit
INHIBIT = 0x007FU, //! Radio Inhibit
CHECK_ACK = 0x0080U, //! Radio Check Ack
UNINHIBIT_ACK = 0x00FEU, //! Radio Uninhibit Ack
INHIBIT_ACK = 0x00FFU //! Radio Inhibit Ack
};
}
/** @brief DVM Network Frame Types */
namespace FrameType {
/** @brief DVM Network Frame Types */
enum E : uint8_t {
HDU_VALID = 0x01U, //! HDU Valid
HDU_LATE_ENTRY = 0x02U, //! HDU Late Entry
TERMINATOR = 0x03U, //! TDU/TDULC Terminator
DATA_UNIT = 0x00U //! Standard Data Unit
};
}
/** @brief Data Format Type */
namespace PDUFormatType {
/** @brief Data Format Type */
enum : uint8_t {
RSP = 0x03U, //! Response
UNCONFIRMED = 0x15U, //! Unconfirmed PDU
CONFIRMED = 0x16U, //! Confirmed PDU
AMBT = 0x17U //! Alternate Multi Block Trunking
};
}
/** @brief Service Access Point */
namespace PDUSAP {
/** @brief Service Access Point */
enum : uint8_t {
USER_DATA = 0x00U, //! User Data
ENC_USER_DATA = 0x01U, //! Encrypted User Data
PACKET_DATA = 0x04U, //! Packet Data
ARP = 0x05U, //! ARP
SNDCP_CTRL_DATA = 0x06U, //! SNDCP Control Data
EXT_ADDR = 0x1FU, //! Extended Addressing
CONV_DATA_REG = 0x20U, //! Registration
UNENC_KMM = 0x28U, //! Unencrypted KMM
ENC_KMM = 0x29U, //! Encrypted KMM
TRUNK_CTRL = 0x3DU //! Trunking Control
};
}
/** @brief Acknowledgement Class */
namespace PDUAckClass {
/** @brief Acknowledgement Class */
enum : uint8_t {
ACK = 0x00U, //! Acknowledge
NACK = 0x01U, //! Negative Acknowledge
ACK_RETRY = 0x02U //! Acknowledge Retry
};
}
/** @brief Acknowledgement Type */
namespace PDUAckType {
/** @brief Acknowledgement Type */
enum : uint8_t {
RETRY = 0x00U, //! Retry
ACK = 0x01U, //! Acknowledge
NACK_ILLEGAL = 0x00U, //! Illegal Format
NACK_PACKET_CRC = 0x01U, //! Packet CRC
NACK_MEMORY_FULL = 0x02U, //! Memory Full
NACK_SEQ = 0x03U, //! Out of logical sequence FSN
NACK_UNDELIVERABLE = 0x04U, //! Undeliverable
NACK_OUT_OF_SEQ = 0x05U, //! Out of sequence, N(S) != V(R) or V(R) + 1
NACK_INVL_USER = 0x06U //! Invalid User disallowed by the system
};
}
/** @brief Registration Type */
namespace PDURegType {
/** @brief Registration Type */
enum : uint8_t {
CONNECT = 0x00U, //! Connect
DISCONNECT = 0x01U, //! Disconnect
ACCEPT = 0x04U, //! Accept
DENY = 0x05U //! Deny
};
}
/** @brief SNDCP version 1 */
const uint8_t SNDCP_VERSION_1 = 0x01U;
/** @brief 296 byte MTU */
const uint8_t SNDCP_MTU_296 = 1U;
/** @brief 510 byte MTU */
const uint8_t SNDCP_MTU_510 = 2U;
/** @brief Default NSAPI */
const uint8_t DEFAULT_NSAPI = 1U;
/** @brief SNDCP PDU Message Type */
namespace SNDCP_PDUType {
/** @brief SNDCP PDU Message Type */
enum : uint8_t {
ACT_TDS_CTX = 0x00U, //! Context Activation Request (ISP) / Context Activation Accept (OSP)
DEACT_TDS_CTX_REQ = 0x02U, //! Deactivate Context Request
ACT_TDS_CTX_REJECT = 0x03U, //! Activate Context Reject
RF_UNCONFIRMED = 0x04U, //! Data Unconfirmed
RF_CONFIRMED = 0x05U //! Data Confirmed
};
}
/** @brief SNDCP Activation TDS States */
namespace SNDCPState {
/** @brief SNDCP Activation TDS States */
enum E : uint8_t {
IDLE = 0U, //! Idle - Waiting for SU Registration
READY_S = 1U, //! Ready* - Waiting for SU Activation
STANDBY = 2U, //! Standby - SU Activated
READY = 3U, //! Ready - SU Activated and Rx/Tx Data
CLOSED = 4U, //! Closed - SU not yet Registered or Deregistered
ILLEGAL = 255U //! Illegal/Unknown
};
}
/** @brief SNDCP Network Address Type */
namespace SNDCPNAT {
/** @brief SNDCP Network Address Type */
enum : uint8_t {
IPV4_STATIC_ADDR = 0U, //! IPv4 Static Address
IPV4_DYN_ADDR = 1U, //! IPv4 Dynamic Address
IPV4_NO_ADDRESS = 15U //! No Address
};
}
/** @brief SNDCP Data Subscriber Unit Type */
namespace SNDCP_DSUT {
/** @brief SNDCP Data Subscriber Unit Type */
enum : uint8_t {
TRUNKED_DATA_ONLY = 0U, //! Trunked Data Only
ALTERNATING_TRUNKED_DATA_VOICE = 1U, //! Alternating Trunked Voice & Data
CONV_DATA_ONLY = 2U, //! Conventional Data Only
ALTERNATING_CONV_DATA_VOICE = 3U, //! Alternating Conventional Voice & Data
TRUNKED_CONV_DATA_ONLY = 4U, //! Trunked and Conventional Data Only
ALT_T_AND_C_DATA_VOICE = 5U //! Alternating Trunked and Conventional Voice & Data
};
}
/** @brief SNDCP Ready Timer */
namespace SNDCPReadyTimer {
/** @brief SNDCP Ready Timer */
enum : uint8_t {
NOT_ALLOWED = 0U, //! Not Allowed
ONE_SECOND = 1U, //! 1 Second
TWO_SECONDS = 2U, //! 2 Seconds
FOUR_SECONDS = 3U, //! 4 Seconds
SIX_SECONDS = 4U, //! 6 Seconds
EIGHT_SECONDS = 5U, //! 8 Seconds
TEN_SECONDS = 6U, //! 10 Seconds
FIFTEEN_SECONDS = 7U, //! 15 Seconds
TWENTY_SECONDS = 8U, //! 20 Seconds
TWENTYFIVE_SECONDS = 9U, //! 25 Seconds
THIRTY_SECONDS = 10U, //! 30 Seconds
SIXTY_SECONDS = 11U, //! 60 Seconds
ONE_TWENTY_SECONDS = 12U, //! 120 Seconds
ONE_EIGHT_SECONDS = 13U, //! 180 Seconds
THREE_HUNDRED_SECONDS = 14U, //! 300 Seconds
ALWAYS = 15U //! Always
};
}
/** @brief SNDCP Standby Timer */
namespace SNDCPStandbyTimer {
/** @brief SNDCP Standby Timer */
enum : uint8_t {
NOT_ALLOWED = 0U, //! Not Allowed
TEN_SECONDS = 1U, //! 10 Seconds
THIRTY_SECONDS = 2U, //! 30 Seconds
ONE_MINUTE = 3U, //! 1 Minute
FIVE_MINUTES = 4U, //! 5 Minutes
TEN_MINUTES = 5U, //! 10 Minutes
THIRTY_MINUTES = 6U, //! 30 Minutes
ONE_HOUR = 7U, //! 1 Hour
TWO_HOURS = 8U, //! 2 Hours
FOUR_HOURS = 9U, //! 4 Hours
EIGHT_HOURS = 10U, //! 8 Hours
TWELVE_HOURS = 11U, //! 12 Hours
TWENTY_FOUR_HOURS = 12U, //! 24 Hours
FORTY_EIGHT_HOURS = 13U, //! 48 Hours
SEVENTY_TWO_HOURS = 14U, //! 72 Hours
ALWAYS = 15U //! Always
};
}
/** @brief SNDCP Reject Reasons */
namespace SNDCPRejectReason {
/** @brief SNDCP Reject Reasons */
enum : uint8_t {
ANY_REASON = 0U, //! Any Reason
SU_NOT_PROVISIONED = 1U, //! Subscriber Not Provisioned
SU_DSUT_NOT_SUPPORTED = 2U, //! Subscriber Data Unit Type Not Supported
MAX_TDS_CTX_EXCEEDED = 3U, //! Maximum Number of TDS Contexts Exceeded
SNDCP_VER_NOT_SUPPORTED = 4U, //! SNDCP Version Not Supported
PDS_NOT_SUPPORTED_SITE = 5U, //! Packet Data Service Not Supported on Site
PDS_NOT_SUPPORTED_SYSTEM = 6U, //! Packet Data Service Not Supported on System
STATIC_IP_NOT_CORRECT = 7U, //! Static IP Address Not Correct
STATIC_IP_ALLOCATION_UNSUPPORTED = 8U, //! Static IP Address Allocation Unsupported
STATIC_IP_IN_USE = 9U, //! Static IP In Use
IPV4_NOT_SUPPORTED = 10U, //! IPv4 Not Supported
DYN_IP_POOL_EMPTY = 11U, //! Dynamic IP Address Pool Empty
DYN_IP_ALLOCATION_UNSUPPORTED = 12U //! Dynamic IP Address Allocation Unsupported
};
}
/** @brief SNDCP Deactivation Types */
namespace SNDCPDeactivationType {
/** @brief SNDCP Deactivation Types */
enum : uint8_t {
DEACT_ALL = 0U, //! Deactivate all NSAPIs
DEACT_THIS_PDU = 1U //! Deactivate NSAPI in this PDU
};
}
/** @brief LC Service Option - Emergency */
const uint8_t LC_SVC_OPT_EMERGENCY = 0x80U;
/** @brief LC Service Option - Encryption */
const uint8_t LC_SVC_OPT_ENCRYPTION = 0x40U;
/** @brief LDUx/TDULC Link Control Opcode(s) */
namespace LCO {
/** @brief LDUx/TDULC Link Control Opcode(s) */
enum : uint8_t {
GROUP = 0x00U, //! GRP VCH USER - Group Voice Channel User
GROUP_UPDT = 0x02U, //! GRP VCH UPDT - Group Voice Channel Update
PRIVATE = 0x03U, //! UU VCH USER - Unit-to-Unit Voice Channel User
UU_ANS_REQ = 0x05U, //! UU ANS REQ - Unit to Unit Answer Request
TEL_INT_VCH_USER = 0x06U, //! TEL INT VCH USER - Telephone Interconnect Voice Channel User / MOT GPS DATA - Motorola In-Band GPS Data
TEL_INT_ANS_RQST = 0x07U, //! TEL INT ANS RQST - Telephone Interconnect Answer Request
EXPLICIT_SOURCE_ID = 0x09U, //! EXPLICIT SOURCE ID - Explicit Source ID
CALL_TERM = 0x0FU, //! CALL TERM - Call Termination or Cancellation
IDEN_UP = 0x18U, //! IDEN UP - Channel Identifier Update
SYS_SRV_BCAST = 0x20U, //! SYS SRV BCAST - System Service Broadcast
ADJ_STS_BCAST = 0x22U, //! ADJ STS BCAST - Adjacent Site Status Broadcast
RFSS_STS_BCAST = 0x23U, //! RFSS STS BCAST - RFSS Status Broadcast
NET_STS_BCAST = 0x24U, //! NET STS BCAST - Network Status Broadcast
CONV_FALLBACK = 0x2AU, //! CONV FALLBACK - Conventional Fallback
// LDUx/TDULC Motorola Link Control Opcode(s)
FAILSOFT = 0x02U //! FAILSOFT - Failsoft
};
}
/** @brief TSBK Control Opcode(s) */
namespace TSBKO {
/** @brief TSBK Control Opcode(s) */
enum : uint8_t {
// TSBK ISP/OSP Shared Opcode(s)
IOSP_GRP_VCH = 0x00U, //! GRP VCH REQ - Group Voice Channel Request (ISP), GRP VCH GRANT - Group Voice Channel Grant (OSP)
IOSP_UU_VCH = 0x04U, //! UU VCH REQ - Unit-to-Unit Voice Channel Request (ISP), UU VCH GRANT - Unit-to-Unit Voice Channel Grant (OSP)
IOSP_UU_ANS = 0x05U, //! UU ANS RSP - Unit-to-Unit Answer Response (ISP), UU ANS REQ - Unit-to-Unit Answer Request (OSP)
IOSP_TELE_INT_DIAL = 0x08U, //! TELE INT DIAL REQ - Telephone Interconnect Request - Explicit (ISP), TELE INT DIAL GRANT - Telephone Interconnect Grant (OSP)
IOSP_TELE_INT_ANS = 0x0AU, //! TELE INT ANS RSP - Telephone Interconnect Answer Response (ISP), TELE INT ANS REQ - Telephone Interconnect Answer Request (OSP)
IOSP_STS_UPDT = 0x18U, //! STS UPDT REQ - Status Update Request (ISP), STS UPDT - Status Update (OSP)
IOSP_STS_Q = 0x1AU, //! STS Q REQ - Status Query Request (ISP), STS Q - Status Query (OSP)
IOSP_MSG_UPDT = 0x1CU, //! MSG UPDT REQ - Message Update Request (ISP), MSG UPDT - Message Update (OSP)
IOSP_RAD_MON = 0x1DU, //! RAD MON REQ - Radio Unit Monitor Request (ISP), RAD MON CMD - Radio Monitor Command (OSP)
IOSP_RAD_MON_ENH = 0x1EU, //! RAD MON ENH REQ - Radio Unit Monitor Enhanced Request (ISP), RAD MON ENH CMD - Radio Unit Monitor Enhanced Command (OSP)
IOSP_CALL_ALRT = 0x1FU, //! CALL ALRT REQ - Call Alert Request (ISP), CALL ALRT - Call Alert (OSP)
IOSP_ACK_RSP = 0x20U, //! ACK RSP U - Acknowledge Response - Unit (ISP), ACK RSP FNE - Acknowledge Response - FNE (OSP)
IOSP_EXT_FNCT = 0x24U, //! EXT FNCT RSP - Extended Function Response (ISP), EXT FNCT CMD - Extended Function Command (OSP)
IOSP_GRP_AFF = 0x28U, //! GRP AFF REQ - Group Affiliation Request (ISP), GRP AFF RSP - Group Affiliation Response (OSP)
IOSP_U_REG = 0x2CU, //! U REG REQ - Unit Registration Request (ISP), U REG RSP - Unit Registration Response (OSP)
// TSBK Inbound Signalling Packet (ISP) Opcode(s)
ISP_TELE_INT_PSTN_REQ = 0x09U, //! TELE INT PSTN REQ - Telephone Interconnect Request - Implicit
ISP_SNDCP_CH_REQ = 0x12U, //! SNDCP CH REQ - SNDCP Data Channel Request
ISP_SNDCP_REC_REQ = 0x14U, //! SNDCP REC REQ - SNDCP Reconnect Request
ISP_STS_Q_RSP = 0x19U, //! STS Q RSP - Status Query Response
ISP_STS_Q_REQ = 0x1CU, //! STS Q REQ - Status Query Request
ISP_CAN_SRV_REQ = 0x23U, //! CAN SRV REQ - Cancel Service Request
ISP_EMERG_ALRM_REQ = 0x27U, //! EMERG ALRM REQ - Emergency Alarm Request
ISP_GRP_AFF_Q_RSP = 0x29U, //! GRP AFF Q RSP - Group Affiliation Query Response
ISP_U_DEREG_REQ = 0x2BU, //! U DE REG REQ - Unit De-Registration Request
ISP_LOC_REG_REQ = 0x2DU, //! LOC REG REQ - Location Registration Request
ISP_AUTH_RESP = 0x38U, //! AUTH RESP - Authentication Response
ISP_AUTH_RESP_M = 0x39U, //! AUTH RESP M - Authentication Response Mutual
ISP_AUTH_FNE_RST = 0x3AU, //! AUTH FNE RST - Authentication FNE Result
ISP_AUTH_SU_DMD = 0x3BU, //! AUTH SU DMD - Authentication SU Demand
// TSBK Outbound Signalling Packet (OSP) Opcode(s)
OSP_GRP_VCH_GRANT_UPD = 0x02U, //! GRP VCH GRANT UPD - Group Voice Channel Grant Update
OSP_UU_VCH_GRANT_UPD = 0x06U, //! UU VCH GRANT UPD - Unit-to-Unit Voice Channel Grant Update
OSP_SNDCP_CH_GNT = 0x14U, //! SNDCP CH GNT - SNDCP Data Channel Grant
OSP_SNDCP_CH_ANN = 0x16U, //! SNDCP CH ANN - SNDCP Data Channel Announcement
OSP_STS_Q = 0x1AU, //! STS Q - Status Query
OSP_DENY_RSP = 0x27U, //! DENY RSP - Deny Response
OSP_SCCB_EXP = 0x29U, //! SCCB - Secondary Control Channel Broadcast - Explicit
OSP_GRP_AFF_Q = 0x2AU, //! GRP AFF Q - Group Affiliation Query
OSP_LOC_REG_RSP = 0x2BU, //! LOC REG RSP - Location Registration Response
OSP_U_REG_CMD = 0x2DU, //! U REG CMD - Unit Registration Command
OSP_U_DEREG_ACK = 0x2FU, //! U DE REG ACK - Unit De-Registration Acknowledge
OSP_SYNC_BCAST = 0x30U, //! SYNC BCAST - Synchronization Broadcast
OSP_AUTH_DMD = 0x31U, //! AUTH DMD - Authentication Demand
OSP_AUTH_FNE_RESP = 0x32U, //! AUTH FNE RESP - Authentication FNE Response
OSP_QUE_RSP = 0x33U, //! QUE RSP - Queued Response
OSP_IDEN_UP_VU = 0x34U, //! IDEN UP VU - Channel Identifier Update for VHF/UHF Bands
OSP_TIME_DATE_ANN = 0x35U, //! TIME DATE ANN - Time and Date Announcement
OSP_SYS_SRV_BCAST = 0x38U, //! SYS SRV BCAST - System Service Broadcast
OSP_SCCB = 0x39U, //! SCCB - Secondary Control Channel Broadcast
OSP_RFSS_STS_BCAST = 0x3AU, //! RFSS STS BCAST - RFSS Status Broadcast
OSP_NET_STS_BCAST = 0x3BU, //! NET STS BCAST - Network Status Broadcast
OSP_ADJ_STS_BCAST = 0x3CU, //! ADJ STS BCAST - Adjacent Site Status Broadcast
OSP_IDEN_UP = 0x3DU, //! IDEN UP - Channel Identifier Update
// TSBK Motorola Outbound Signalling Packet (OSP) Opcode(s)
OSP_MOT_GRG_ADD = 0x00U, //! MOT GRG ADD - Motorola / Group Regroup Add (Patch Supergroup)
OSP_MOT_GRG_DEL = 0x01U, //! MOT GRG DEL - Motorola / Group Regroup Delete (Unpatch Supergroup)
OSP_MOT_GRG_VCH_GRANT = 0x02U, //! MOT GRG GROUP VCH GRANT / Group Regroup Voice Channel Grant
OSP_MOT_GRG_VCH_UPD = 0x03U, //! MOT GRG GROUP VCH GRANT UPD / Group Regroup Voice Channel Grant Update
OSP_MOT_CC_BSI = 0x0BU, //! MOT CC BSI - Motorola / Control Channel Base Station Identifier
OSP_MOT_PSH_CCH = 0x0EU, //! MOT PSH CCH - Motorola / Planned Control Channel Shutdown
// TSBK DVM Outbound Signalling Packet (OSP) Opcode(s)
OSP_DVM_GIT_HASH = 0x3FU, //!
};
}
/** @brief Data Unit ID(s) */
namespace DUID {
/** @brief Data Unit ID(s) */
enum E : uint8_t {
HDU = 0x00U, //! Header Data Unit
TDU = 0x03U, //! Simple Terminator Data Unit
LDU1 = 0x05U, //! Logical Link Data Unit 1
VSELP1 = 0x06U, //! Motorola VSELP 1
TSDU = 0x07U, //! Trunking System Data Unit
VSELP2 = 0x09U, //! Motorola VSELP 2
LDU2 = 0x0AU, //! Logical Link Data Unit 2
PDU = 0x0CU, //! Packet Data Unit
TDULC = 0x0FU //! Terminator Data Unit with Link Control
};
}
/** @} */
#define P25_HDU_STR "P25, HDU (Header Data Unit)"
#define P25_TDU_STR "P25, TDU (Simple Terminator Data Unit)"
#define P25_LDU1_STR "P25, LDU1 (Logical Link Data Unit 1)"
#define P25_VSELP1_STR "P25, VSELP1 (VSELP Data Unit 1)"
#define P25_TSDU_STR "P25, TSDU (Trunking System Data Unit)"
#define P25_VSELP2_STR "P25, VSELP2 (VSELP Data Unit 2)"
#define P25_LDU2_STR "P25, LDU2 (Logical Link Data Unit 2)"
#define P25_PDU_STR "P25, PDU (Packet Data Unit)"
#define P25_TDULC_STR "P25, TDULC (Terminator Data Unit with Link Control)"
} // namespace defines
} // namespace p25
#endif // __P25_DEFINES_H__

Powered by TurnKey Linux.