diff --git a/src/common/Defines.h b/src/common/Defines.h
index be132fe8..36bd0dae 100644
--- a/src/common/Defines.h
+++ b/src/common/Defines.h
@@ -90,10 +90,10 @@ typedef unsigned long long ulong64_t;
#define VERSION_MAJOR "04"
#define VERSION_MINOR "01"
-#define VERSION_REV "A"
+#define VERSION_REV "B"
#define __NETVER__ "DVM_R" VERSION_MAJOR VERSION_REV VERSION_MINOR
-#define __VER__ VERSION_MAJOR "." VERSION_MINOR " (R" VERSION_MAJOR VERSION_REV VERSION_MINOR " " __GIT_VER__ ")"
+#define __VER__ VERSION_MAJOR "." VERSION_MINOR VERSION_REV " (R" VERSION_MAJOR VERSION_REV VERSION_MINOR " " __GIT_VER__ ")"
#define __BUILD__ __DATE__ " " __TIME__
diff --git a/src/common/dmr/DMRDefines.h b/src/common/dmr/DMRDefines.h
index 887a6625..681ba0fc 100644
--- a/src/common/dmr/DMRDefines.h
+++ b/src/common/dmr/DMRDefines.h
@@ -17,300 +17,408 @@
#include "common/Defines.h"
+// Shorthand macro to dmr::defines -- keeps source code that doesn't use "using" concise
+#define DMRDEF dmr::defines
namespace dmr
{
- // ---------------------------------------------------------------------------
- // Constants
- // ---------------------------------------------------------------------------
+ namespace defines
+ {
+ // ---------------------------------------------------------------------------
+ // Constants
+ // ---------------------------------------------------------------------------
- const uint32_t DMR_FRAME_LENGTH_BITS = 264U;
- const uint32_t DMR_FRAME_LENGTH_BYTES = 33U;
+ const uint32_t DMR_FRAME_LENGTH_BITS = 264U;
+ const uint32_t DMR_FRAME_LENGTH_BYTES = 33U;
- const uint32_t DMR_SYNC_LENGTH_BITS = 48U;
- const uint32_t DMR_SYNC_LENGTH_BYTES = 6U;
+ const uint32_t DMR_SYNC_LENGTH_BITS = 48U;
+ const uint32_t DMR_SYNC_LENGTH_BYTES = 6U;
- const uint32_t DMR_EMB_LENGTH_BITS = 8U;
- const uint32_t DMR_EMB_LENGTH_BYTES = 1U;
+ const uint32_t DMR_EMB_LENGTH_BITS = 8U;
+ const uint32_t DMR_EMB_LENGTH_BYTES = 1U;
- const uint32_t DMR_SLOT_TYPE_LENGTH_BITS = 8U;
- const uint32_t DMR_SLOT_TYPE_LENGTH_BYTES = 1U;
+ const uint32_t DMR_SLOT_TYPE_LENGTH_BITS = 8U;
+ const uint32_t DMR_SLOT_TYPE_LENGTH_BYTES = 1U;
- const uint32_t DMR_EMBEDDED_SIGNALLING_LENGTH_BITS = 32U;
- const uint32_t DMR_EMBEDDED_SIGNALLING_LENGTH_BYTES = 4U;
+ const uint32_t DMR_EMBEDDED_SIGNALLING_LENGTH_BITS = 32U;
+ const uint32_t DMR_EMBEDDED_SIGNALLING_LENGTH_BYTES = 4U;
- const uint32_t DMR_AMBE_LENGTH_BITS = 108U * 2U;
- const uint32_t DMR_AMBE_LENGTH_BYTES = 27U;
+ const uint32_t DMR_AMBE_LENGTH_BITS = 108U * 2U;
+ const uint32_t DMR_AMBE_LENGTH_BYTES = 27U;
- const uint32_t DMR_LC_HEADER_LENGTH_BYTES = 12U;
- const uint32_t DMR_CSBK_LENGTH_BYTES = 12U;
+ const uint32_t DMR_LC_HEADER_LENGTH_BYTES = 12U;
+ const uint32_t DMR_CSBK_LENGTH_BYTES = 12U;
- const uint8_t BS_SOURCED_AUDIO_SYNC[] = { 0x07U, 0x55U, 0xFDU, 0x7DU, 0xF7U, 0x5FU, 0x70U };
- const uint8_t BS_SOURCED_DATA_SYNC[] = { 0x0DU, 0xFFU, 0x57U, 0xD7U, 0x5DU, 0xF5U, 0xD0U };
+ const uint8_t BS_SOURCED_AUDIO_SYNC[] = { 0x07U, 0x55U, 0xFDU, 0x7DU, 0xF7U, 0x5FU, 0x70U };
+ const uint8_t BS_SOURCED_DATA_SYNC[] = { 0x0DU, 0xFFU, 0x57U, 0xD7U, 0x5DU, 0xF5U, 0xD0U };
- const uint8_t MS_SOURCED_AUDIO_SYNC[] = { 0x07U, 0xF7U, 0xD5U, 0xDDU, 0x57U, 0xDFU, 0xD0U };
- const uint8_t MS_SOURCED_DATA_SYNC[] = { 0x0DU, 0x5DU, 0x7FU, 0x77U, 0xFDU, 0x75U, 0x70U };
-
- const uint8_t DIRECT_SLOT1_AUDIO_SYNC[] = { 0x05U, 0xD5U, 0x77U, 0xF7U, 0x75U, 0x7FU, 0xF0U };
- const uint8_t DIRECT_SLOT1_DATA_SYNC[] = { 0x0FU, 0x7FU, 0xDDU, 0x5DU, 0xDFU, 0xD5U, 0x50U };
-
- const uint8_t DIRECT_SLOT2_AUDIO_SYNC[] = { 0x07U, 0xDFU, 0xFDU, 0x5FU, 0x55U, 0xD5U, 0xF0U };
- const uint8_t DIRECT_SLOT2_DATA_SYNC[] = { 0x0DU, 0x75U, 0x57U, 0xF5U, 0xFFU, 0x7FU, 0x50U };
-
- const uint8_t DMR_MS_DATA_SYNC_BYTES[] = { 0x0DU, 0x5DU, 0x7FU, 0x77U, 0xFDU, 0x75U, 0x70U };
- const uint8_t DMR_MS_VOICE_SYNC_BYTES[] = { 0x07U, 0xF7U, 0xD5U, 0xDDU, 0x57U, 0xDFU, 0xD0U };
-
- const uint8_t SYNC_MASK[] = { 0x0FU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xF0U };
-
- // The PR FILL and Data Sync pattern.
- const uint8_t DMR_IDLE_DATA[] = { 0x01U, 0x00U,
- 0x53U, 0xC2U, 0x5EU, 0xABU, 0xA8U, 0x67U, 0x1DU, 0xC7U, 0x38U, 0x3BU, 0xD9U,
- 0x36U, 0x00U, 0x0DU, 0xFFU, 0x57U, 0xD7U, 0x5DU, 0xF5U, 0xD0U, 0x03U, 0xF6U,
- 0xE4U, 0x65U, 0x17U, 0x1BU, 0x48U, 0xCAU, 0x6DU, 0x4FU, 0xC6U, 0x10U, 0xB4U };
-
- // A silence frame only
- const uint8_t DMR_SILENCE_DATA[] = { 0x01U, 0x00U,
- 0xB9U, 0xE8U, 0x81U, 0x52U, 0x61U, 0x73U, 0x00U, 0x2AU, 0x6BU, 0xB9U, 0xE8U,
- 0x81U, 0x52U, 0x60U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x01U, 0x73U, 0x00U,
- 0x2AU, 0x6BU, 0xB9U, 0xE8U, 0x81U, 0x52U, 0x61U, 0x73U, 0x00U, 0x2AU, 0x6BU };
-
- const uint8_t DMR_NULL_AMBE[] = { 0xB1U, 0xA8U, 0x22U, 0x25U, 0x6BU, 0xD1U, 0x6CU, 0xCFU, 0x67U };
-
- const uint8_t PAYLOAD_LEFT_MASK[] = { 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xF0U };
- const uint8_t PAYLOAD_RIGHT_MASK[] = { 0x0FU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU };
-
- const uint8_t VOICE_LC_HEADER_CRC_MASK[] = { 0x96U, 0x96U, 0x96U };
- const uint8_t TERMINATOR_WITH_LC_CRC_MASK[] = { 0x99U, 0x99U, 0x99U };
- const uint8_t PI_HEADER_CRC_MASK[] = { 0x69U, 0x69U };
- const uint8_t DATA_HEADER_CRC_MASK[] = { 0xCCU, 0xCCU };
- const uint8_t CSBK_CRC_MASK[] = { 0xA5U, 0xA5U };
- const uint8_t CSBK_MBC_CRC_MASK[] = { 0xAAU, 0xAAU };
-
- const uint16_t TSCC_MAX_CSC_CNT = 511U;
-
- const uint32_t DMR_SLOT_TIME = 60U;
- const uint32_t AMBE_PER_SLOT = 3U;
-
- const uint8_t DT_MASK = 0x0FU;
-
- const uint8_t DMR_IDLE_RX = 0x80U;
- const uint8_t DMR_SYNC_DATA = 0x40U;
- const uint8_t DMR_SYNC_VOICE = 0x20U;
-
- const uint8_t DMR_SLOT1 = 0x00U;
- const uint8_t DMR_SLOT2 = 0x80U;
-
- const uint32_t DMR_MAX_PDU_COUNT = 32U;
- const uint32_t DMR_MAX_PDU_LENGTH = 512U;
-
- const uint32_t DMR_MI_LENGTH_BYTES = 4U; // This was guessed based on OTA data captures -- the message indicator seems to be the same length as a source/destination address
-
- const uint8_t DMR_ALOHA_VER_151 = 0x00U;
- const uint8_t DMR_CHNULL = 0x00U;
-
- const uint16_t DMR_LOGICAL_CH_ABSOLUTE = 0xFFFU;
-
- const uint8_t DEFAULT_NRAND_WAIT = 8U;
- const uint32_t DEFAULT_SILENCE_THRESHOLD = 21U;
- const uint32_t DEFAULT_FRAME_LOSS_THRESHOLD = 2U;
- const uint32_t MAX_DMR_VOICE_ERRORS = 141U;
-
- const uint32_t DMR_WUID_SUPLI = 0xFFFEC4U;
- const uint32_t DMR_WUID_SDMI = 0xFFFEC5U;
- const uint32_t DMR_WUID_REGI = 0xFFFEC6U;
- const uint32_t DMR_WUID_STUNI = 0xFFFECCU;
- const uint32_t DMR_WUID_AUTHI = 0xFFFECDU;
- const uint32_t DMR_WUID_KILLI = 0xFFFECFU;
- const uint32_t DMR_WUID_TATTSI = 0xFFFED7U;
- const uint32_t DMR_WUID_ALL = 0xFFFFFFU;
-
- // PDU Data Formats
- const uint8_t DPF_UDT = 0x00U;
- const uint8_t DPF_RESPONSE = 0x01U;
- const uint8_t DPF_UNCONFIRMED_DATA = 0x02U;
- const uint8_t DPF_CONFIRMED_DATA = 0x03U;
- const uint8_t DPF_DEFINED_SHORT = 0x0DU;
- const uint8_t DPF_DEFINED_RAW = 0x0EU;
- const uint8_t DPF_PROPRIETARY = 0x0FU;
-
- // PDU ACK Class
- const uint8_t PDU_ACK_CLASS_ACK = 0x00U;
- const uint8_t PDU_ACK_CLASS_NACK = 0x01U;
- const uint8_t PDU_ACK_CLASS_ACK_RETRY = 0x02U;
-
- // PDU ACK Type(s)
- const uint8_t PDU_ACK_TYPE_ACK = 0x01U;
-
- const uint8_t PDU_ACK_TYPE_NACK_ILLEGAL = 0x00U; // Illegal Format
- const uint8_t PDU_ACK_TYPE_NACK_PACKET_CRC = 0x01U; // Packet CRC
- const uint8_t PDU_ACK_TYPE_NACK_MEMORY_FULL = 0x02U; // Memory Full
- const uint8_t PDU_ACK_TYPE_NACK_UNDELIVERABLE = 0x04U;// Undeliverable
-
- // Feature IDs
- const uint8_t FID_ETSI = 0x00U; // ETSI Standard Feature Set
- const uint8_t FID_DMRA = 0x10U; //
- const uint8_t FID_OCS_DVM = 0x9CU; // FID used for internal signalling; Omaha Communication Systems, LLC ($9C)
-
- // LC Service Options
- const uint8_t LC_SVC_OPT_EMERGENCY = 0x80U;
- const uint8_t LC_SVC_OPT_PRIVACY = 0x40U;
- const uint8_t LC_SVC_OPT_BCAST = 0x08U;
- const uint8_t LC_SVC_OPT_OVCM = 0x04U;
-
- // Call Priorities
- const uint8_t CALL_PRIORITY_NONE = 0x00U;
- const uint8_t CALL_PRIORITY_1 = 0x01U;
- const uint8_t CALL_PRIORITY_2 = 0x02U;
- const uint8_t CALL_PRIORITY_3 = 0x03U;
-
- // FID_DMRA Extended Function Opcodes
- const uint32_t DMR_EXT_FNCT_CHECK = 0x0000U; // Radio Check
- const uint32_t DMR_EXT_FNCT_UNINHIBIT = 0x007EU; // Radio Uninhibit
- const uint32_t DMR_EXT_FNCT_INHIBIT = 0x007FU; // Radio Inhibit
- const uint32_t DMR_EXT_FNCT_CHECK_ACK = 0x0080U; // Radio Check Ack
- const uint32_t DMR_EXT_FNCT_UNINHIBIT_ACK = 0x00FEU; // Radio Uninhibit Ack
- const uint32_t DMR_EXT_FNCT_INHIBIT_ACK = 0x00FFU; // Radio Inhibit Ack
-
- // Data Type(s)
- const uint8_t DT_VOICE_PI_HEADER = 0x00U;
-#define DMR_DT_VOICE_PI_HEADER "DMR_DT_VOICE_PI_HEADER (Voice Header with Privacy Indicator)"
- const uint8_t DT_VOICE_LC_HEADER = 0x01U;
-#define DMR_DT_VOICE_LC_HEADER "DMR_DT_VOICE_LC_HEADER (Voice Header with Link Control)"
- const uint8_t DT_TERMINATOR_WITH_LC = 0x02U;
-#define DMR_DT_TERMINATOR_WITH_LC "DMR_DT_TERMINATOR_WITH_LC (Terminator with Link Control)"
- const uint8_t DT_CSBK = 0x03U;
- const uint8_t DT_MBC_HEADER = 0x04U;
- const uint8_t DT_MBC_DATA = 0x05U;
- const uint8_t DT_DATA_HEADER = 0x06U;
-#define DMR_DT_DATA_HEADER "DMR_DT_DATA_HEADER (Data Header)"
- const uint8_t DT_RATE_12_DATA = 0x07U;
-#define DMR_DT_RATE_12_DATA "DMR_DT_RATE_12_DATA (1/2-rate Data)"
- const uint8_t DT_RATE_34_DATA = 0x08U;
-#define DMR_DT_RATE_34_DATA "DMR_DT_RATE_34_DATA (3/4-rate Data)"
- const uint8_t DT_IDLE = 0x09U;
- const uint8_t DT_RATE_1_DATA = 0x0AU;
-#define DMR_DT_RATE_1_DATA "DMR_DT_RATE_1_DATA (1-rate Data)"
-
- /*
- ** Internal Data Type(s)
- */
- const uint8_t DT_VOICE_SYNC = 0xF0U;
-#define DMR_DT_VOICE_SYNC "DMR_DT_VOICE_SYNC (Voice Data with Sync)"
- const uint8_t DT_VOICE = 0xF1U;
-#define DMR_DT_VOICE "DMR_DT_VOICE (Voice Data)"
-
- // Site Models
- const uint8_t SITE_MODEL_TINY = 0x00U;
- const uint8_t SITE_MODEL_SMALL = 0x01U;
- const uint8_t SITE_MODEL_LARGE = 0x02U;
- const uint8_t SITE_MODEL_HUGE = 0x03U;
-
- // Target Address
- const uint8_t TGT_ADRS_SYSCODE = 0x00U;
- const uint8_t TGT_ADRS_TGID = 0x01U;
-
- // Short-Link Control Opcode(s)
- const uint8_t SLCO_NULL = 0x00U;
- const uint8_t SLCO_ACT = 0x01U;
- const uint8_t SLCO_TSCC = 0x02U;
- const uint8_t SLCO_PAYLOAD = 0x03U;
-
- // Reason Code(s)
- const uint8_t TS_ACK_RSN_MSG = 0x60U; // TS - Message Accepted
- const uint8_t TS_ACK_RSN_REG = 0x62U; // TS - Registration Accepted
- const uint8_t TS_ACK_RSN_AUTH_RESP = 0x64U; // TS - Authentication Challenge Response
- const uint8_t TS_ACK_RSN_REG_SUB_ATTACH = 0x65U; // TS - Registration Response with subscription
- const uint8_t MS_ACK_RSN_MSG = 0x44U; // MS - Message Accepted
- const uint8_t MS_ACK_RSN_AUTH_RESP = 0x48U; // MS - Authentication Challenge Response
-
- const uint8_t TS_DENY_RSN_SYS_UNSUPPORTED_SVC = 0x20U;
- const uint8_t TS_DENY_RSN_PERM_USER_REFUSED = 0x21U;
- const uint8_t TS_DENY_RSN_TEMP_USER_REFUSED = 0x22U;
- const uint8_t TS_DENY_RSN_TRSN_SYS_REFUSED = 0x23U;
- const uint8_t TS_DENY_RSN_TGT_NOT_REG = 0x24U;
- const uint8_t TS_DENY_RSN_TGT_UNAVAILABLE = 0x25U;
- const uint8_t TS_DENY_RSN_SYS_BUSY = 0x27U;
- const uint8_t TS_DENY_RSN_SYS_NOT_READY = 0x28U;
- const uint8_t TS_DENY_RSN_CALL_CNCL_REFUSED = 0x29U;
- const uint8_t TS_DENY_RSN_REG_REFUSED = 0x2AU;
- const uint8_t TS_DENY_RSN_REG_DENIED = 0x2BU;
- const uint8_t TS_DENY_RSN_MS_NOT_REG = 0x2DU;
- const uint8_t TS_DENY_RSN_TGT_BUSY = 0x2EU;
- const uint8_t TS_DENY_RSN_TGT_GROUP_NOT_VALID = 0x2FU;
-
- const uint8_t TS_QUEUED_RSN_NO_RESOURCE = 0xA0U;
- const uint8_t TS_QUEUED_RSN_SYS_BUSY = 0xA1U;
-
- const uint8_t TS_WAIT_RSN = 0xE0U;
-
- const uint8_t MS_DENY_RSN_UNSUPPORTED_SVC = 0x00U;
-
- // Random Access Service Kind
- const uint8_t SVC_KIND_IND_VOICE_CALL = 0x00U; // Individual Voice Call
- const uint8_t SVC_KIND_GRP_VOICE_CALL = 0x01U; // Group Voice Call
- const uint8_t SVC_KIND_IND_DATA_CALL = 0x02U; // Individual Data Call
- const uint8_t SVC_KIND_GRP_DATA_CALL = 0x03U; // Group Data Call
- const uint8_t SVC_KIND_IND_UDT_DATA_CALL = 0x04U; // Individual UDT Short Data Call
- const uint8_t SVC_KIND_GRP_UDT_DATA_CALL = 0x05U; // Group UDT Short Data Call
- const uint8_t SVC_KIND_UDT_SHORT_POLL = 0x06U; // UDT Short Data Polling Service
- const uint8_t SVC_KIND_STATUS_TRANSPORT = 0x07U; // Status Transport Service
- const uint8_t SVC_KIND_CALL_DIVERSION = 0x08U; // Call Diversion Service
- const uint8_t SVC_KIND_CALL_ANSWER = 0x09U; // Call Answer Service
- const uint8_t SVC_KIND_SUPPLEMENTARY_SVC = 0x0DU; // Supplementary Service
- const uint8_t SVC_KIND_REG_SVC = 0x0EU; // Registration Service
- const uint8_t SVC_KIND_CANCEL_CALL = 0x0FU; // Cancel Call Service
-
- // Broadcast Announcement Type(s)
- const uint8_t BCAST_ANNC_ANN_WD_TSCC = 0x00U; // Announce-WD TSCC Channel
- const uint8_t BCAST_ANNC_CALL_TIMER_PARMS = 0x01U; // Specify Call Timer Parameters
- const uint8_t BCAST_ANNC_VOTE_NOW = 0x02U; // Vote Now Advice
- const uint8_t BCAST_ANNC_LOCAL_TIME = 0x03U; // Broadcast Local Time
- const uint8_t BCAST_ANNC_MASS_REG = 0x04U; // Mass Registration
- const uint8_t BCAST_ANNC_CHAN_FREQ = 0x05U; // Logical Channel/Frequency
- const uint8_t BCAST_ANNC_ADJ_SITE = 0x06U; // Adjacent Site Information
- const uint8_t BCAST_ANNC_SITE_PARMS = 0x07U; // General Site Parameters
-
- // Full-Link Control Opcode(s)
- const uint8_t FLCO_GROUP = 0x00U; // GRP VCH USER - Group Voice Channel User
- const uint8_t FLCO_PRIVATE = 0x03U; // UU VCH USER - Unit-to-Unit Voice Channel User
- const uint8_t FLCO_TALKER_ALIAS_HEADER = 0x04U; //
- const uint8_t FLCO_TALKER_ALIAS_BLOCK1 = 0x05U; //
- const uint8_t FLCO_TALKER_ALIAS_BLOCK2 = 0x06U; //
- const uint8_t FLCO_TALKER_ALIAS_BLOCK3 = 0x07U; //
- const uint8_t FLCO_GPS_INFO = 0x08U; //
-
- // Control Signalling Block Opcode(s)
- const uint8_t CSBKO_NONE = 0x00U; //
- const uint8_t CSBKO_UU_V_REQ = 0x04U; // UU VCH REQ - Unit-to-Unit Voice Channel Request
- const uint8_t CSBKO_UU_ANS_RSP = 0x05U; // UU ANS RSP - Unit-to-Unit Answer Response
- const uint8_t CSBKO_CTCSBK = 0x07U; // CT CSBK - Channel Timing CSBK
- const uint8_t CSBKO_ALOHA = 0x19U; // ALOHA - Aloha PDU for Random Access
- const uint8_t CSBKO_AHOY = 0x1CU; // AHOY - Enquiry from TSCC
- const uint8_t CSBKO_RAND = 0x1FU; // (ETSI) RAND - Random Access / (DMRA) CALL ALRT - Call Alert
- const uint8_t CSBKO_ACK_RSP = 0x20U; // ACK RSP - Acknowledge Response
- const uint8_t CSBKO_EXT_FNCT = 0x24U; // (DMRA) EXT FNCT - Extended Function
- const uint8_t CSBKO_NACK_RSP = 0x26U; // NACK RSP - Negative Acknowledgement Response
- const uint8_t CSBKO_BROADCAST = 0x28U; // BCAST - Announcement PDU
- const uint8_t CSBKO_MAINT = 0x2AU; // MAINT - Call Maintainence PDU
- const uint8_t CSBKO_P_CLEAR = 0x2EU; // P_CLEAR - Payload Channel Clear
- const uint8_t CSBKO_PV_GRANT = 0x30U; // PV_GRANT - Private Voice Channel Grant
- const uint8_t CSBKO_TV_GRANT = 0x31U; // TV_GRANT - Talkgroup Voice Channel Grant
- const uint8_t CSBKO_BTV_GRANT = 0x32U; // BTV_GRANT - Broadcast Talkgroup Voice Channel Grant
- const uint8_t CSBKO_PD_GRANT = 0x33U; // PD_GRANT - Private Data Channel Grant
- const uint8_t CSBKO_TD_GRANT = 0x34U; // TD_GRANT - Talkgroup Data Channel Grant
- const uint8_t CSBKO_BSDWNACT = 0x38U; // BS DWN ACT - BS Outbound Activation
- const uint8_t CSBKO_PRECCSBK = 0x3DU; // PRE CSBK - Preamble CSBK
-
- const uint8_t CSBKO_DVM_GIT_HASH = 0x3FU; //
-
- const uint8_t TALKER_ID_NONE = 0x00U;
- const uint8_t TALKER_ID_HEADER = 0x01U;
- const uint8_t TALKER_ID_BLOCK1 = 0x02U;
- const uint8_t TALKER_ID_BLOCK2 = 0x04U;
- const uint8_t TALKER_ID_BLOCK3 = 0x08U;
-
- const uint32_t NO_HEADERS_SIMPLEX = 8U;
- const uint32_t NO_HEADERS_DUPLEX = 3U;
- const uint32_t NO_PREAMBLE_CSBK = 15U;
+ const uint8_t MS_SOURCED_AUDIO_SYNC[] = { 0x07U, 0xF7U, 0xD5U, 0xDDU, 0x57U, 0xDFU, 0xD0U };
+ const uint8_t MS_SOURCED_DATA_SYNC[] = { 0x0DU, 0x5DU, 0x7FU, 0x77U, 0xFDU, 0x75U, 0x70U };
+
+ const uint8_t DIRECT_SLOT1_AUDIO_SYNC[] = { 0x05U, 0xD5U, 0x77U, 0xF7U, 0x75U, 0x7FU, 0xF0U };
+ const uint8_t DIRECT_SLOT1_DATA_SYNC[] = { 0x0FU, 0x7FU, 0xDDU, 0x5DU, 0xDFU, 0xD5U, 0x50U };
+
+ const uint8_t DIRECT_SLOT2_AUDIO_SYNC[] = { 0x07U, 0xDFU, 0xFDU, 0x5FU, 0x55U, 0xD5U, 0xF0U };
+ const uint8_t DIRECT_SLOT2_DATA_SYNC[] = { 0x0DU, 0x75U, 0x57U, 0xF5U, 0xFFU, 0x7FU, 0x50U };
+
+ const uint8_t MS_DATA_SYNC_BYTES[] = { 0x0DU, 0x5DU, 0x7FU, 0x77U, 0xFDU, 0x75U, 0x70U };
+ const uint8_t MS_VOICE_SYNC_BYTES[] = { 0x07U, 0xF7U, 0xD5U, 0xDDU, 0x57U, 0xDFU, 0xD0U };
+
+ const uint8_t SYNC_MASK[] = { 0x0FU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xF0U };
+
+ // The PR FILL and Data Sync pattern.
+ const uint8_t IDLE_DATA[] = { 0x01U, 0x00U,
+ 0x53U, 0xC2U, 0x5EU, 0xABU, 0xA8U, 0x67U, 0x1DU, 0xC7U, 0x38U, 0x3BU, 0xD9U,
+ 0x36U, 0x00U, 0x0DU, 0xFFU, 0x57U, 0xD7U, 0x5DU, 0xF5U, 0xD0U, 0x03U, 0xF6U,
+ 0xE4U, 0x65U, 0x17U, 0x1BU, 0x48U, 0xCAU, 0x6DU, 0x4FU, 0xC6U, 0x10U, 0xB4U };
+
+ // A silence frame only
+ const uint8_t SILENCE_DATA[] = { 0x01U, 0x00U,
+ 0xB9U, 0xE8U, 0x81U, 0x52U, 0x61U, 0x73U, 0x00U, 0x2AU, 0x6BU, 0xB9U, 0xE8U,
+ 0x81U, 0x52U, 0x60U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x01U, 0x73U, 0x00U,
+ 0x2AU, 0x6BU, 0xB9U, 0xE8U, 0x81U, 0x52U, 0x61U, 0x73U, 0x00U, 0x2AU, 0x6BU };
+
+ const uint8_t NULL_AMBE[] = { 0xB1U, 0xA8U, 0x22U, 0x25U, 0x6BU, 0xD1U, 0x6CU, 0xCFU, 0x67U };
+
+ const uint8_t PAYLOAD_LEFT_MASK[] = { 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xF0U };
+ const uint8_t PAYLOAD_RIGHT_MASK[] = { 0x0FU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU };
+
+ const uint8_t VOICE_LC_HEADER_CRC_MASK[] = { 0x96U, 0x96U, 0x96U };
+ const uint8_t TERMINATOR_WITH_LC_CRC_MASK[] = { 0x99U, 0x99U, 0x99U };
+ const uint8_t PI_HEADER_CRC_MASK[] = { 0x69U, 0x69U };
+ const uint8_t DATA_HEADER_CRC_MASK[] = { 0xCCU, 0xCCU };
+ const uint8_t CSBK_CRC_MASK[] = { 0xA5U, 0xA5U };
+ const uint8_t CSBK_MBC_CRC_MASK[] = { 0xAAU, 0xAAU };
+
+ const uint8_t DT_MASK = 0x0FU;
+
+ const uint8_t IDLE_RX = 0x80U;
+ const uint8_t SYNC_DATA = 0x40U;
+ const uint8_t SYNC_VOICE = 0x20U;
+
+ const uint8_t SLOT1 = 0x00U;
+ const uint8_t SLOT2 = 0x80U;
+
+ const uint32_t MAX_PDU_COUNT = 32U;
+ const uint32_t MAX_PDU_LENGTH = 512U;
+
+ const uint32_t MI_LENGTH_BYTES = 4U; // This was guessed based on OTA data captures -- the message indicator seems to be the same length as a source/destination address
+
+ /** Thresholds */
+ const uint16_t TSCC_MAX_CSC_CNT = 511U;
+
+ const uint32_t DMR_SLOT_TIME = 60U;
+ const uint32_t AMBE_PER_SLOT = 3U;
+
+ const uint8_t DEFAULT_NRAND_WAIT = 8U;
+ const uint32_t DEFAULT_SILENCE_THRESHOLD = 21U;
+ const uint32_t DEFAULT_FRAME_LOSS_THRESHOLD = 2U;
+ const uint32_t MAX_DMR_VOICE_ERRORS = 141U;
+
+ /** Default Values */
+ const uint8_t DMR_ALOHA_VER_151 = 0x00U;
+ const uint8_t DMR_CHNULL = 0x00U;
+
+ const uint16_t DMR_LOGICAL_CH_ABSOLUTE = 0xFFFU;
+
+ const uint32_t WUID_SUPLI = 0xFFFEC4U; // Supplementary Data Service Working Unit ID
+ const uint32_t WUID_SDMI = 0xFFFEC5U; // UDT Short Data Service Working Unit ID
+ const uint32_t WUID_REGI = 0xFFFEC6U; // Registration Working Unit ID
+ const uint32_t WUID_STUNI = 0xFFFECCU; // MS Stun/Revive Identifier
+ const uint32_t WUID_AUTHI = 0xFFFECDU; // Authentication Working Unit ID
+ const uint32_t WUID_KILLI = 0xFFFECFU; // MS Kill Identifier
+ const uint32_t WUID_TATTSI = 0xFFFED7U; // Talkgroup Subscription/Attachement Service Working Unit ID
+ const uint32_t WUID_ALLL = 0xFFFFFDU; // All-call Site-wide Working Unit ID
+ const uint32_t WUID_ALLZ = 0xFFFFFEU; // All-call System-wide Working Unit ID
+ const uint32_t WUID_ALL = 0xFFFFFFU; // All-call Network-wide Working Unit ID
+
+ const uint32_t NO_HEADERS_SIMPLEX = 8U;
+ const uint32_t NO_HEADERS_DUPLEX = 3U;
+ const uint32_t NO_PREAMBLE_CSBK = 15U;
+
+ ///
+ /// Data Packet Format
+ ///
+ namespace DPF {
+ // Data Packet Format Enumeration
+ enum E : uint8_t {
+ UDT = 0x00U, // Unified Data Transport Header
+ RESPONSE = 0x01U, // Response Data Header
+ UNCONFIRMED_DATA = 0x02U, // Unconfirmed Data Header
+ CONFIRMED_DATA = 0x03U, // Confirmed Data Header
+ DEFINED_SHORT = 0x0DU, // Defined Short Data Header
+ DEFINED_RAW = 0x0EU, // Defined Raw Data Header
+ PROPRIETARY = 0x0FU, // Proprietary
+ };
+ };
+
+ ///
+ /// Data Response Class
+ ///
+ namespace PDUResponseClass {
+ enum : uint8_t {
+ ACK = 0x00U, // Acknowledge
+ NACK = 0x01U, // Negative Acknowledge
+ ACK_RETRY = 0x02U // Acknowlege Retry
+ };
+ };
+
+ ///
+ /// Data Response Type
+ ///
+ namespace PDUResponseType {
+ enum : uint8_t {
+ ACK = 0x01U, // Acknowledge
+
+ NACK_ILLEGAL = 0x00U, // Illegal Format
+ NACK_PACKET_CRC = 0x01U, // Packet CRC
+ NACK_MEMORY_FULL = 0x02U, // Memory Full
+ NACK_UNDELIVERABLE = 0x04U // Undeliverable
+ };
+ };
+
+ /** Feature IDs */
+ const uint8_t FID_ETSI = 0x00U; // ETSI Standard Feature Set
+ const uint8_t FID_DMRA = 0x10U; // Motorola
+ const uint8_t FID_DVM_OCS = 0x9CU; // DVM; Omaha Communication Systems, LLC ($9C)
+
+ /** LC Service Options */
+ const uint8_t LC_SVC_OPT_EMERGENCY = 0x80U;
+ const uint8_t LC_SVC_OPT_PRIVACY = 0x40U;
+ const uint8_t LC_SVC_OPT_BCAST = 0x08U;
+ const uint8_t LC_SVC_OPT_OVCM = 0x04U;
+
+ /** Call Priorities */
+ const uint8_t CALL_PRIORITY_NONE = 0x00U;
+ const uint8_t CALL_PRIORITY_1 = 0x01U;
+ const uint8_t CALL_PRIORITY_2 = 0x02U;
+ const uint8_t CALL_PRIORITY_3 = 0x03U;
+
+ ///
+ /// Short-Link Control Opcode(s)
+ ///
+ namespace SLCO {
+ // Short-Link Control Opcode Enumeration
+ enum E : uint8_t {
+ NONE = 0x00U, // NULL
+ ACT = 0x01U, //
+ TSCC = 0x02U, // TSCC
+ PAYLOAD = 0x03U // Payload
+ };
+ }
+
+ ///
+ /// Full-Link Control Opcode(s)
+ ///
+ namespace FLCO {
+ // Full-Link Control Opcode Enumeration
+ enum E : uint8_t {
+ GROUP = 0x00U, // GRP VCH USER - Group Voice Channel User
+ PRIVATE = 0x03U, // UU VCH USER - Unit-to-Unit Voice Channel User
+
+ TALKER_ALIAS_HEADER = 0x04U, //
+ TALKER_ALIAS_BLOCK1 = 0x05U, //
+ TALKER_ALIAS_BLOCK2 = 0x06U, //
+ TALKER_ALIAS_BLOCK3 = 0x07U, //
+
+ GPS_INFO = 0x08U, //
+ };
+ }
+
+ ///
+ /// FID_DMRA Extended Functions.
+ ///
+ namespace ExtendedFunctions {
+ 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
+ };
+ };
+
+ ///
+ /// Data Type(s)
+ ///
+ namespace DataType {
+ // Data Type Enumeration
+ enum E : uint8_t {
+ VOICE_PI_HEADER = 0x00U, // Voice with Privacy Indicator Header
+ VOICE_LC_HEADER = 0x01U, // Voice with Link Control Header
+
+ TERMINATOR_WITH_LC = 0x02U, // Terminator with Link Control
+
+ CSBK = 0x03U, // CSBK
+
+ MBC_HEADER = 0x04U, // Multi-Block Control Header
+ MBC_DATA = 0x05U, // Multi-Block Control Data
+
+ DATA_HEADER = 0x06U, // Data Header
+ RATE_12_DATA = 0x07U, // 1/2 Rate Data
+ RATE_34_DATA = 0x08U, // 3/4 Rate Data
+
+ IDLE = 0x09U, // Idle
+
+ RATE_1_DATA = 0x0AU, // Rate 1 Data
+
+ /*
+ ** Internal Data Type(s)
+ */
+
+ VOICE_SYNC = 0xF0U, // Internal - Voice Sync
+ VOICE = 0xF1U // Internal - Voice
+ };
+ }
+
+ #define DMR_DT_VOICE_PI_HEADER "DMR, VOICE_PI_HEADER (Voice Header with Privacy Indicator)"
+ #define DMR_DT_VOICE_LC_HEADER "DMR, VOICE_LC_HEADER (Voice Header with Link Control)"
+ #define DMR_DT_TERMINATOR_WITH_LC "DMR, TERMINATOR_WITH_LC (Terminator with Link Control)"
+ #define DMR_DT_DATA_HEADER "DMR, DATA_HEADER (Data Header)"
+ #define DMR_DT_RATE_12_DATA "DMR, RATE_12_DATA (1/2-rate Data)"
+ #define DMR_DT_RATE_34_DATA "DMR, RATE_34_DATA (3/4-rate Data)"
+ #define DMR_DT_RATE_1_DATA "DMR, RATE_1_DATA (1-rate Data)"
+
+ #define DMR_DT_VOICE_SYNC "DMR, VOICE_SYNC (Voice Data with Sync)"
+ #define DMR_DT_VOICE "DMR, VOICE (Voice Data)"
+
+ ///
+ /// Site Models
+ ///
+ namespace SiteModel {
+ // Site Model Enumeration
+ enum E : uint8_t {
+ TINY = 0x00U, // Tiny
+ SMALL = 0x01U, // Small
+ LARGE = 0x02U, // Large
+ HUGE = 0x03U // Huge
+ };
+ }
+
+ // Target Address
+ const uint8_t TGT_ADRS_SYSCODE = 0x00U;
+ const uint8_t TGT_ADRS_TGID = 0x01U;
+
+ ///
+ /// Talker ID
+ ///
+ namespace TalkerID {
+ enum : uint8_t {
+ NONE = 0x00U, // No Talker ID
+
+ HEADER = 0x01U, // Talker ID Header
+
+ BLOCK1 = 0x02U, // Talker ID Block 1
+ BLOCK2 = 0x04U, // Talker ID Block 2
+ BLOCK3 = 0x08U // Talker ID Block 3
+ };
+ }
+
+ ///
+ /// Reason Code(s)
+ ///
+ namespace ReasonCode {
+ enum : uint8_t {
+ TS_ACK_RSN_MSG = 0x60U, // TS - Message Accepted
+ TS_ACK_RSN_REG = 0x62U, // TS - Registration Accepted
+ TS_ACK_RSN_AUTH_RESP = 0x64U, // TS - Authentication Challenge Response
+ TS_ACK_RSN_REG_SUB_ATTACH = 0x65U, // TS - Registration Response with subscription
+ MS_ACK_RSN_MSG = 0x44U, // MS - Message Accepted
+ MS_ACK_RSN_AUTH_RESP = 0x48U, // MS - Authentication Challenge Response
+
+ TS_DENY_RSN_SYS_UNSUPPORTED_SVC = 0x20U,// System Unsupported Service
+ TS_DENY_RSN_PERM_USER_REFUSED = 0x21U, // User Permenantly Refused
+ TS_DENY_RSN_TEMP_USER_REFUSED = 0x22U, // User Temporarily Refused
+ TS_DENY_RSN_TRSN_SYS_REFUSED = 0x23U, // System Refused
+ TS_DENY_RSN_TGT_NOT_REG = 0x24U, // Target Not Registered
+ TS_DENY_RSN_TGT_UNAVAILABLE = 0x25U, // Target Unavailable
+ TS_DENY_RSN_SYS_BUSY = 0x27U, // System Busy
+ TS_DENY_RSN_SYS_NOT_READY = 0x28U, // System Not Ready
+ TS_DENY_RSN_CALL_CNCL_REFUSED = 0x29U, // Call Cancel Refused
+ TS_DENY_RSN_REG_REFUSED = 0x2AU, // Registration Refused
+ TS_DENY_RSN_REG_DENIED = 0x2BU, // Registration Denied
+ TS_DENY_RSN_MS_NOT_REG = 0x2DU, // MS Not Registered
+ TS_DENY_RSN_TGT_BUSY = 0x2EU, // Target Busy
+ TS_DENY_RSN_TGT_GROUP_NOT_VALID = 0x2FU,// Group Not Valid
+
+ TS_QUEUED_RSN_NO_RESOURCE = 0xA0U, // No Resources Available
+ TS_QUEUED_RSN_SYS_BUSY = 0xA1U, // System Busy
+
+ TS_WAIT_RSN = 0xE0U, // Wait
+
+ MS_DENY_RSN_UNSUPPORTED_SVC = 0x00U, // Service Unsupported
+ };
+ }
+
+ ///
+ /// Random Access Service Kind
+ ///
+ namespace ServiceKind {
+ enum : uint8_t {
+ IND_VOICE_CALL = 0x00U, // Individual Voice Call
+ GRP_VOICE_CALL = 0x01U, // Group Voice Call
+ IND_DATA_CALL = 0x02U, // Individual Data Call
+ GRP_DATA_CALL = 0x03U, // Group Data Call
+ IND_UDT_DATA_CALL = 0x04U, // Individual UDT Short Data Call
+ GRP_UDT_DATA_CALL = 0x05U, // Group UDT Short Data Call
+ UDT_SHORT_POLL = 0x06U, // UDT Short Data Polling Service
+ STATUS_TRANSPORT = 0x07U, // Status Transport Service
+ CALL_DIVERSION = 0x08U, // Call Diversion Service
+ CALL_ANSWER = 0x09U, // Call Answer Service
+ SUPPLEMENTARY_SVC = 0x0DU, // Supplementary Service
+ REG_SVC = 0x0EU, // Registration Service
+ CANCEL_CALL = 0x0FU // Cancel Call Service
+ };
+ }
+
+ ///
+ /// Broadcast Announcement Type(s)
+ ///
+ namespace BroadcastAnncType {
+ enum : uint8_t {
+ ANN_WD_TSCC = 0x00U, // Announce-Withdraw TSCC Channel
+ CALL_TIMER_PARMS = 0x01U, // Specify Call Timer Parameters
+ VOTE_NOW = 0x02U, // Vote Now Advice
+ LOCAL_TIME = 0x03U, // Broadcast Local Time
+ MASS_REG = 0x04U, // Mass Registration
+ CHAN_FREQ = 0x05U, // Logical Channel/Frequency
+ ADJ_SITE = 0x06U, // Adjacent Site Information
+ SITE_PARMS = 0x07U // General Site Parameters
+ };
+ }
+
+ ///
+ /// Control Signalling Block Opcode(s)
+ ///
+ namespace CSBKO {
+ enum : uint8_t {
+ // CSBK ISP/OSP Shared Opcode(s)
+ NONE = 0x00U, //
+ UU_V_REQ = 0x04U, // UU VCH REQ - Unit-to-Unit Voice Channel Request
+ UU_ANS_RSP = 0x05U, // UU ANS RSP - Unit-to-Unit Answer Response
+ CTCSBK = 0x07U, // CT CSBK - Channel Timing CSBK
+ ALOHA = 0x19U, // ALOHA - Aloha PDU for Random Access
+ AHOY = 0x1CU, // AHOY - Enquiry from TSCC
+ RAND = 0x1FU, // (ETSI) RAND - Random Access / (DMRA) CALL ALRT - Call Alert
+ ACK_RSP = 0x20U, // ACK RSP - Acknowledge Response
+ EXT_FNCT = 0x24U, // (DMRA) EXT FNCT - Extended Function
+ NACK_RSP = 0x26U, // NACK RSP - Negative Acknowledgement Response
+ BROADCAST = 0x28U, // BCAST - Announcement PDU
+ MAINT = 0x2AU, // MAINT - Call Maintainence PDU
+ P_CLEAR = 0x2EU, // P_CLEAR - Payload Channel Clear
+ PV_GRANT = 0x30U, // PV_GRANT - Private Voice Channel Grant
+ TV_GRANT = 0x31U, // TV_GRANT - Talkgroup Voice Channel Grant
+ BTV_GRANT = 0x32U, // BTV_GRANT - Broadcast Talkgroup Voice Channel Grant
+ PD_GRANT = 0x33U, // PD_GRANT - Private Data Channel Grant
+ TD_GRANT = 0x34U, // TD_GRANT - Talkgroup Data Channel Grant
+ BSDWNACT = 0x38U, // BS DWN ACT - BS Outbound Activation
+ PRECCSBK = 0x3DU, // PRE CSBK - Preamble CSBK
+
+ // CSBK DVM Outbound Signalling Packet (OSP) Opcode(s)
+ DVM_GIT_HASH = 0x3FU //
+ };
+ }
+ } // namespace defines
} // namespace dmr
#endif // __DMR_DEFINES_H__
diff --git a/src/common/dmr/DMRUtils.h b/src/common/dmr/DMRUtils.h
index a92717b1..5bd65194 100644
--- a/src/common/dmr/DMRUtils.h
+++ b/src/common/dmr/DMRUtils.h
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2021 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2021,2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__DMR_UTILS_H__)
@@ -26,6 +26,8 @@ namespace dmr
class HOST_SW_API DMRUtils {
public:
/// Helper to test and clamp a DMR color code.
+ /// Color Code
+ /// Clamped color code.
static uint32_t colorCode(uint32_t colorCode)
{
if (colorCode < 0U) { // clamp to 0
@@ -39,36 +41,40 @@ namespace dmr
}
/// Helper to test and clamp a DMR site ID.
- static uint32_t siteId(uint32_t id, uint8_t siteModel)
+ /// Site ID
+ /// Site Model
+ /// Clamped site ID.
+ static uint32_t siteId(uint32_t id, defines::SiteModel::E siteModel)
{
+ using namespace dmr::defines;
if (id > 0U) {
id--;
}
switch (siteModel)
{
- case SITE_MODEL_TINY:
+ case SiteModel::TINY:
{
if (id > 0x07U) { // clamp to $7
id = 0x07U;
}
}
break;
- case SITE_MODEL_SMALL:
+ case SiteModel::SMALL:
{
if (id > 0x1FU) { // clamp to $1F
id = 0x1FU;
}
}
break;
- case SITE_MODEL_LARGE:
+ case SiteModel::LARGE:
{
if (id > 0x7FU) { // clamp to $7F
id = 0x7FU;
}
}
break;
- case SITE_MODEL_HUGE:
+ case SiteModel::HUGE:
{
if (id > 0x3FFU) { // clamp to $3FF
id = 0x3FFU;
@@ -81,31 +87,35 @@ namespace dmr
}
/// Helper to test and clamp a DMR network ID.
- static uint32_t netId(uint32_t id, uint8_t siteModel)
+ /// Network ID
+ /// Site Model
+ /// Clamped network ID.
+ static uint32_t netId(uint32_t id, defines::SiteModel::E siteModel)
{
+ using namespace dmr::defines;
switch (siteModel) {
- case SITE_MODEL_TINY:
+ case SiteModel::TINY:
{
if (id > 0x1FFU) { // clamp to $1FF
id = 0x1FFU;
}
}
break;
- case SITE_MODEL_SMALL:
+ case SiteModel::SMALL:
{
if (id > 0x7FU) { // clamp to $7F
id = 0x7FU;
}
}
break;
- case SITE_MODEL_LARGE:
+ case SiteModel::LARGE:
{
if (id > 0x1FU) { // clamp to $1F
id = 0x1FU;
}
}
break;
- case SITE_MODEL_HUGE:
+ case SiteModel::HUGE:
{
if (id > 0x03U) { // clamp to $3
id = 0x03U;
diff --git a/src/common/dmr/SiteData.h b/src/common/dmr/SiteData.h
index 3003df0e..89b29f06 100644
--- a/src/common/dmr/SiteData.h
+++ b/src/common/dmr/SiteData.h
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2021 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2021,2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__DMR_SITE_DATA_H__)
@@ -28,7 +28,7 @@ namespace dmr
public:
/// Initializes a new instance of the SiteData class.
SiteData() :
- m_siteModel(SITE_MODEL_SMALL),
+ m_siteModel(defines::SiteModel::SMALL),
m_netId(1U),
m_siteId(1U),
m_parId(3U),
@@ -43,7 +43,7 @@ namespace dmr
/// DMR Site ID.
/// DMR partition ID.
///
- SiteData(uint8_t siteModel, uint16_t netId, uint16_t siteId, uint8_t parId, bool requireReq) :
+ SiteData(defines::SiteModel::E siteModel, uint16_t netId, uint16_t siteId, uint8_t parId, bool requireReq) :
m_siteModel(siteModel),
m_netId(netId),
m_siteId(siteId),
@@ -51,9 +51,10 @@ namespace dmr
m_requireReg(requireReq),
m_netActive(false)
{
+ using namespace dmr::defines;
// siteModel clamping
- if (siteModel > SITE_MODEL_HUGE)
- siteModel = SITE_MODEL_SMALL;
+ if (siteModel > SiteModel::HUGE)
+ siteModel = SiteModel::SMALL;
// netId clamping
m_netId = DMRUtils::netId(netId, siteModel);
@@ -80,29 +81,30 @@ namespace dmr
///
const uint32_t systemIdentity(bool msb = false)
{
+ using namespace dmr::defines;
uint32_t value = m_siteModel;
switch (m_siteModel)
{
- case SITE_MODEL_TINY:
+ case SiteModel::TINY:
{
value = (value << 9) + (m_netId & 0x1FFU);
value = (value << 3) + (m_siteId & 0x07U);
}
break;
- case SITE_MODEL_SMALL:
+ case SiteModel::SMALL:
{
value = (value << 7) + (m_netId & 0x7FU);
value = (value << 5) + (m_siteId & 0x1FU);
}
break;
- case SITE_MODEL_LARGE:
+ case SiteModel::LARGE:
{
value = (value << 5) + (m_netId & 0x1FU);
value = (value << 7) + (m_siteId & 0x7FU);
}
break;
- case SITE_MODEL_HUGE:
+ case SiteModel::HUGE:
{
value = (value << 2) + (m_netId & 0x03U);
value = (value << 10) + (m_siteId & 0x3FFU);
@@ -138,7 +140,7 @@ namespace dmr
public:
/// DMR site model type.
- __READONLY_PROPERTY_PLAIN(uint8_t, siteModel);
+ __READONLY_PROPERTY_PLAIN(defines::SiteModel::E, siteModel);
/// DMR site network ID.
__READONLY_PROPERTY_PLAIN(uint16_t, netId);
/// DMR site ID.
diff --git a/src/common/dmr/SlotType.cpp b/src/common/dmr/SlotType.cpp
index c27a394c..5bc190db 100644
--- a/src/common/dmr/SlotType.cpp
+++ b/src/common/dmr/SlotType.cpp
@@ -9,12 +9,14 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016 Jonathan Naylor, G4KLX
+* Copyright (C) 2024 Bryan Biedenkapp, N2PLL
*
*/
#include "common/dmr/SlotType.h"
#include "common/edac/Golay2087.h"
using namespace dmr;
+using namespace dmr::defines;
#include
@@ -27,7 +29,7 @@ using namespace dmr;
///
SlotType::SlotType() :
m_colorCode(0U),
- m_dataType(0U)
+ m_dataType(DataType::IDLE)
{
/* stub */
}
@@ -45,20 +47,20 @@ void SlotType::decode(const uint8_t* data)
{
assert(data != nullptr);
- uint8_t DMRSlotType[3U];
- DMRSlotType[0U] = (data[12U] << 2) & 0xFCU;
- DMRSlotType[0U] |= (data[13U] >> 6) & 0x03U;
+ uint8_t slotType[3U];
+ slotType[0U] = (data[12U] << 2) & 0xFCU;
+ slotType[0U] |= (data[13U] >> 6) & 0x03U;
- DMRSlotType[1U] = (data[13U] << 2) & 0xC0U;
- DMRSlotType[1U] |= (data[19U] << 2) & 0x3CU;
- DMRSlotType[1U] |= (data[20U] >> 6) & 0x03U;
+ slotType[1U] = (data[13U] << 2) & 0xC0U;
+ slotType[1U] |= (data[19U] << 2) & 0x3CU;
+ slotType[1U] |= (data[20U] >> 6) & 0x03U;
- DMRSlotType[2U] = (data[20U] << 2) & 0xF0U;
+ slotType[2U] = (data[20U] << 2) & 0xF0U;
- uint8_t code = edac::Golay2087::decode(DMRSlotType);
+ uint8_t code = edac::Golay2087::decode(slotType);
m_colorCode = (code >> 4) & 0x0FU;
- m_dataType = (code >> 0) & 0x0FU;
+ m_dataType = (DataType::E)((code >> 0) & 0x0FU);
}
///
@@ -69,16 +71,16 @@ void SlotType::encode(uint8_t* data) const
{
assert(data != nullptr);
- uint8_t DMRSlotType[3U];
- DMRSlotType[0U] = (m_colorCode << 4) & 0xF0U;
- DMRSlotType[0U] |= (m_dataType << 0) & 0x0FU;
- DMRSlotType[1U] = 0x00U;
- DMRSlotType[2U] = 0x00U;
+ uint8_t slotType[3U];
+ slotType[0U] = (m_colorCode << 4) & 0xF0U;
+ slotType[0U] |= (m_dataType << 0) & 0x0FU;
+ slotType[1U] = 0x00U;
+ slotType[2U] = 0x00U;
- edac::Golay2087::encode(DMRSlotType);
+ edac::Golay2087::encode(slotType);
- data[12U] = (data[12U] & 0xC0U) | ((DMRSlotType[0U] >> 2) & 0x3FU);
- data[13U] = (data[13U] & 0x0FU) | ((DMRSlotType[0U] << 6) & 0xC0U) | ((DMRSlotType[1U] >> 2) & 0x30U);
- data[19U] = (data[19U] & 0xF0U) | ((DMRSlotType[1U] >> 2) & 0x0FU);
- data[20U] = (data[20U] & 0x03U) | ((DMRSlotType[1U] << 6) & 0xC0U) | ((DMRSlotType[2U] >> 2) & 0x3CU);
+ data[12U] = (data[12U] & 0xC0U) | ((slotType[0U] >> 2) & 0x3FU);
+ data[13U] = (data[13U] & 0x0FU) | ((slotType[0U] << 6) & 0xC0U) | ((slotType[1U] >> 2) & 0x30U);
+ data[19U] = (data[19U] & 0xF0U) | ((slotType[1U] >> 2) & 0x0FU);
+ data[20U] = (data[20U] & 0x03U) | ((slotType[1U] << 6) & 0xC0U) | ((slotType[2U] >> 2) & 0x3CU);
}
diff --git a/src/common/dmr/SlotType.h b/src/common/dmr/SlotType.h
index aa81b133..8d8aced8 100644
--- a/src/common/dmr/SlotType.h
+++ b/src/common/dmr/SlotType.h
@@ -9,12 +9,14 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016 Jonathan Naylor, G4KLX
+* Copyright (C) 2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__DMR_SLOT_TYPE_H__)
#define __DMR_SLOT_TYPE_H__
#include "common/Defines.h"
+#include "common/dmr/DMRDefines.h"
namespace dmr
{
@@ -40,7 +42,7 @@ namespace dmr
__PROPERTY(uint8_t, colorCode, ColorCode);
/// Slot data type.
- __PROPERTY(uint8_t, dataType, DataType);
+ __PROPERTY(defines::DataType::E, dataType, DataType);
};
} // namespace dmr
diff --git a/src/common/dmr/Sync.cpp b/src/common/dmr/Sync.cpp
index 5a73997a..b453233c 100644
--- a/src/common/dmr/Sync.cpp
+++ b/src/common/dmr/Sync.cpp
@@ -16,6 +16,7 @@
#include "dmr/Sync.h"
using namespace dmr;
+using namespace dmr::defines;
#include
diff --git a/src/common/dmr/data/Data.cpp b/src/common/dmr/data/Data.cpp
index cb2b4b61..917ab5d0 100644
--- a/src/common/dmr/data/Data.cpp
+++ b/src/common/dmr/data/Data.cpp
@@ -9,14 +9,16 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016 Jonathan Naylor, G4KLX
+* Copyright (C) 2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/DMRDefines.h"
#include "dmr/data/Data.h"
-using namespace dmr::data;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::data;
#include
#include
@@ -52,10 +54,10 @@ Data::Data() :
m_slotNo(1U),
m_srcId(0U),
m_dstId(0U),
- m_flco(FLCO_GROUP),
+ m_flco(FLCO::GROUP),
m_n(0U),
m_seqNo(0U),
- m_dataType(0U),
+ m_dataType(DataType::IDLE),
m_ber(0U),
m_rssi(0U),
m_data(nullptr)
diff --git a/src/common/dmr/data/Data.h b/src/common/dmr/data/Data.h
index 0294f127..c98a7d98 100644
--- a/src/common/dmr/data/Data.h
+++ b/src/common/dmr/data/Data.h
@@ -9,12 +9,14 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016 Jonathan Naylor, G4KLX
+* Copyright (C) 2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__DMR_DATA__DATA_H__)
#define __DMR_DATA__DATA_H__
#include "common/Defines.h"
+#include "common/dmr/DMRDefines.h"
namespace dmr
{
@@ -52,7 +54,7 @@ namespace dmr
__PROPERTY(uint32_t, dstId, DstId);
/// Sets the full-link control opcode.
- __PROPERTY(uint8_t, flco, FLCO);
+ __PROPERTY(defines::FLCO::E, flco, FLCO);
///
__PROPERTY(uint8_t, n, N);
@@ -61,7 +63,7 @@ namespace dmr
__PROPERTY(uint8_t, seqNo, SeqNo);
/// Embedded data type.
- __PROPERTY(uint8_t, dataType, DataType);
+ __PROPERTY(defines::DataType::E, dataType, DataType);
/// Bit Error Rate.
__PROPERTY(uint8_t, ber, BER);
diff --git a/src/common/dmr/data/DataHeader.cpp b/src/common/dmr/data/DataHeader.cpp
index 654a80be..dfb2036f 100644
--- a/src/common/dmr/data/DataHeader.cpp
+++ b/src/common/dmr/data/DataHeader.cpp
@@ -10,7 +10,7 @@
*
* Copyright (C) 2012 Ian Wraith
* Copyright (C) 2015,2016,2017 Jonathan Naylor, G4KLX
-* Copyright (C) 2021,2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2021,2023,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -20,8 +20,9 @@
#include "edac/CRC.h"
#include "Utils.h"
-using namespace dmr::data;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::data;
#include
#include
@@ -41,7 +42,7 @@ const uint8_t UDTF_NMEA = 0x05U;
///
DataHeader::DataHeader() :
m_GI(false),
- m_DPF(DPF_UDT),
+ m_DPF(DPF::UDT),
m_sap(0U),
m_fsn(0U),
m_Ns(0U),
@@ -52,8 +53,8 @@ DataHeader::DataHeader() :
m_srcId(0U),
m_dstId(0U),
m_blocks(0U),
- m_rspClass(PDU_ACK_CLASS_NACK),
- m_rspType(PDU_ACK_TYPE_NACK_ILLEGAL),
+ m_rspClass(PDUResponseClass::NACK),
+ m_rspType(PDUResponseType::NACK_ILLEGAL),
m_rspStatus(0U),
m_srcPort(0U),
m_dstPort(0U),
@@ -141,15 +142,15 @@ bool DataHeader::decode(const uint8_t* data)
m_GI = (m_data[0U] & 0x80U) == 0x80U; // Group/Individual Flag
m_A = (m_data[0U] & 0x40U) == 0x40U;
- m_DPF = m_data[0U] & 0x0FU; // Data Packet Format
- if (m_DPF == DPF_PROPRIETARY)
+ m_DPF = (DPF::E)(m_data[0U] & 0x0FU); // Data Packet Format
+ if (m_DPF == DPF::PROPRIETARY)
return true;
m_dstId = m_data[2U] << 16 | m_data[3U] << 8 | m_data[4U]; // Destination ID
m_srcId = m_data[5U] << 16 | m_data[6U] << 8 | m_data[7U]; // Source ID
switch (m_DPF) {
- case DPF_UDT:
+ case DPF::UDT:
#if DEBUG_DMR_PDU_DATA
Utils::dump(1U, "DMR, DataHeader::decode(), Unified Data Transport Header", m_data, DMR_LC_HEADER_LENGTH_BYTES);
#endif
@@ -162,7 +163,7 @@ bool DataHeader::decode(const uint8_t* data)
m_UDTO = m_data[9U] & 0x3FU; // UDT Opcode
break;
- case DPF_UNCONFIRMED_DATA:
+ case DPF::UNCONFIRMED_DATA:
#if DEBUG_DMR_PDU_DATA
Utils::dump(1U, "DMR, DataHeader::decode(), Unconfirmed Data Header", m_data, DMR_LC_HEADER_LENGTH_BYTES);
#endif
@@ -173,7 +174,7 @@ bool DataHeader::decode(const uint8_t* data)
m_fsn = m_data[9U] & 0x0FU; // Fragment Sequence Number
break;
- case DPF_CONFIRMED_DATA:
+ case DPF::CONFIRMED_DATA:
#if DEBUG_DMR_PDU_DATA
Utils::dump(1U, "DMR, DataHeader::decode(), Confirmed Data Header", m_data, DMR_LC_HEADER_LENGTH_BYTES);
#endif
@@ -186,7 +187,7 @@ bool DataHeader::decode(const uint8_t* data)
m_fsn = m_data[9U] & 0x0FU; // Fragement Sequence Number
break;
- case DPF_RESPONSE:
+ case DPF::RESPONSE:
#if DEBUG_DMR_PDU_DATA
Utils::dump(1U, "DMR, DataHeader::decode(), Response Data Header", m_data, DMR_LC_HEADER_LENGTH_BYTES);
#endif
@@ -197,7 +198,7 @@ bool DataHeader::decode(const uint8_t* data)
m_rspStatus = m_data[9U] & 0x07U; // Response Status
break;
- case DPF_DEFINED_SHORT:
+ case DPF::DEFINED_SHORT:
#if DEBUG_DMR_PDU_DATA
Utils::dump(1U, "DMR, DataHeader::decode(), Defined Short Data Header", m_data, DMR_LC_HEADER_LENGTH_BYTES);
#endif
@@ -209,7 +210,7 @@ bool DataHeader::decode(const uint8_t* data)
m_padCount = m_data[9U]; // Bit Padding
break;
- case DPF_DEFINED_RAW:
+ case DPF::DEFINED_RAW:
#if DEBUG_DMR_PDU_DATA
Utils::dump(1U, "DMR, DataHeader::decode(), Raw Data Header", m_data, DMR_LC_HEADER_LENGTH_BYTES);
#endif
@@ -238,7 +239,7 @@ void DataHeader::encode(uint8_t* data) const
assert(data != nullptr);
// perform no processing other then regenerating FEC
- if (m_DPF == DPF_PROPRIETARY) {
+ if (m_DPF == DPF::PROPRIETARY) {
m_data[10U] = m_data[11U] = 0x00U;
// compute CRC-CCITT 16
@@ -272,7 +273,7 @@ void DataHeader::encode(uint8_t* data) const
m_data[7U] = (m_srcId >> 0) & 0xFFU;
switch (m_DPF) {
- case DPF_UDT:
+ case DPF::UDT:
m_data[1U] = ((m_sap & 0x0FU) << 4) + // Service Access Point
(m_dataFormat & 0x0FU); // UDT Format
m_data[8U] = ((m_padCount & 0x1FU) << 3) + // Pad Nibble
@@ -285,7 +286,7 @@ void DataHeader::encode(uint8_t* data) const
#endif
break;
- case DPF_UNCONFIRMED_DATA:
+ case DPF::UNCONFIRMED_DATA:
m_data[0U] = m_data[0U] + (m_padCount & 0x10U); // Octet Pad Count MSB
m_data[1U] = ((m_sap & 0x0FU) << 4) + // Service Access Point
(m_padCount & 0x0FU); // Octet Pad Count LSB
@@ -297,7 +298,7 @@ void DataHeader::encode(uint8_t* data) const
#endif
break;
- case DPF_CONFIRMED_DATA:
+ case DPF::CONFIRMED_DATA:
m_data[0U] = m_data[0U] + (m_padCount & 0x10U); // Octet Pad Count MSB
m_data[1U] = ((m_sap & 0x0FU) << 4) + // Service Access Point
(m_padCount & 0x0FU); // Octet Pad Count LSB
@@ -311,7 +312,7 @@ void DataHeader::encode(uint8_t* data) const
#endif
break;
- case DPF_RESPONSE:
+ case DPF::RESPONSE:
m_data[1U] = ((m_sap & 0x0FU) << 4); // Service Access Point
m_data[8U] = m_blocks & 0x7FU; // Blocks To Follow
m_data[9U] = ((m_rspClass & 0x03U) << 6) + // Response Class
@@ -322,7 +323,7 @@ void DataHeader::encode(uint8_t* data) const
#endif
break;
- case DPF_DEFINED_SHORT:
+ case DPF::DEFINED_SHORT:
m_data[0U] = m_data[0U] + (m_blocks & 0x30U); // Blocks To Follow MSB
m_data[1U] = ((m_sap & 0x0FU) << 4) + // Service Access Point
(m_blocks & 0x0FU); // Blocks To Follow LSB
@@ -335,7 +336,7 @@ void DataHeader::encode(uint8_t* data) const
#endif
break;
- case DPF_DEFINED_RAW:
+ case DPF::DEFINED_RAW:
m_data[0U] = m_data[0U] + (m_blocks & 0x30U); // Blocks To Follow MSB
m_data[1U] = ((m_sap & 0x0FU) << 4) + // Service Access Point
(m_blocks & 0x0FU); // Blocks To Follow LSB
@@ -353,7 +354,7 @@ void DataHeader::encode(uint8_t* data) const
break;
}
- if (m_DPF == DPF_UDT) {
+ if (m_DPF == DPF::UDT) {
m_data[9U] &= 0xFEU;
edac::CRC::addCCITT162(m_data, DMR_LC_HEADER_LENGTH_BYTES);
diff --git a/src/common/dmr/data/DataHeader.h b/src/common/dmr/data/DataHeader.h
index ae53dbe6..c68087f6 100644
--- a/src/common/dmr/data/DataHeader.h
+++ b/src/common/dmr/data/DataHeader.h
@@ -45,8 +45,8 @@ namespace dmr
/// Flag indicating whether the CSBK is group or individual.
__PROPERTY(bool, GI, GI);
- ///
- __PROPERTY(uint8_t, DPF, DPF);
+ /// Data packet format.
+ __PROPERTY(defines::DPF::E, DPF, DPF);
/// Service access point.
__PROPERTY(uint8_t, sap, SAP);
diff --git a/src/common/dmr/data/EmbeddedData.cpp b/src/common/dmr/data/EmbeddedData.cpp
index 458343df..ed5fbfb7 100644
--- a/src/common/dmr/data/EmbeddedData.cpp
+++ b/src/common/dmr/data/EmbeddedData.cpp
@@ -9,6 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016,2017 Jonathan Naylor, G4KLX
+* Copyright (C) 2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -18,8 +19,9 @@
#include "edac/CRC.h"
#include "Utils.h"
-using namespace dmr::data;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::data;
#include
#include
@@ -34,7 +36,7 @@ using namespace dmr;
///
EmbeddedData::EmbeddedData() :
m_valid(false),
- m_FLCO(FLCO_GROUP),
+ m_FLCO(FLCO::GROUP),
m_state(LCS_NONE),
m_data(nullptr),
m_raw(nullptr)
@@ -195,7 +197,7 @@ std::unique_ptr EmbeddedData::getLC() const
if (!m_valid)
return nullptr;
- if (m_FLCO != FLCO_GROUP && m_FLCO != FLCO_PRIVATE)
+ if (m_FLCO != FLCO::GROUP && m_FLCO != FLCO::PRIVATE)
return nullptr;
return std::make_unique(m_data);
@@ -303,7 +305,7 @@ void EmbeddedData::decodeEmbeddedData()
// extract the FLCO
uint8_t flco;
Utils::bitsToByteBE(m_data + 0U, flco);
- m_FLCO = flco & 0x3FU;
+ m_FLCO = (FLCO::E)(flco & 0x3FU);
}
///
diff --git a/src/common/dmr/data/EmbeddedData.h b/src/common/dmr/data/EmbeddedData.h
index 057d346f..af4d83a9 100644
--- a/src/common/dmr/data/EmbeddedData.h
+++ b/src/common/dmr/data/EmbeddedData.h
@@ -9,12 +9,14 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016,2017 Jonathan Naylor, G4KLX
+* Copyright (C) 2024 Bryan Biedenkap, N2PLL
*
*/
#if !defined(__DMR_DATA__EMBEDDED_DATA_H__)
#define __DMR_DATA__EMBEDDED_DATA_H__
#include "common/Defines.h"
+#include "common/dmr/DMRDefines.h"
#include "common/dmr/lc/LC.h"
namespace dmr
@@ -64,7 +66,7 @@ namespace dmr
/// Flag indicating whether or not the embedded data is valid.
__READONLY_PROPERTY_PLAIN(bool, valid);
/// Full-link control opcode.
- __READONLY_PROPERTY(uint8_t, FLCO, FLCO);
+ __READONLY_PROPERTY(defines::FLCO::E, FLCO, FLCO);
private:
LC_STATE m_state;
diff --git a/src/common/dmr/lc/CSBK.cpp b/src/common/dmr/lc/CSBK.cpp
index 67655709..74fa2f8e 100644
--- a/src/common/dmr/lc/CSBK.cpp
+++ b/src/common/dmr/lc/CSBK.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016 Jonathan Naylor, G4KLX
-* Copyright (C) 2019-2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2019-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -19,8 +19,9 @@
#include "Log.h"
#include "Utils.h"
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
#include
@@ -52,14 +53,14 @@ CSBK::CSBK() :
m_colorCode(0U),
m_lastBlock(true),
m_Cdef(false),
- m_CSBKO(CSBKO_NONE),
+ m_CSBKO(CSBKO::NONE),
m_FID(0x00U),
m_GI(false),
m_srcId(0U),
m_dstId(0U),
m_dataContent(false),
m_CBF(0U),
- m_dataType(DT_CSBK),
+ m_dataType(DataType::CSBK),
m_emergency(false),
m_privacy(false),
m_supplementData(false),
@@ -93,7 +94,7 @@ CSBK::~CSBK()
///
std::string CSBK::toString()
{
- return std::string("CSBKO_UNKWN (Unknown CSBK)");
+ return std::string("CSBKO, UNKNOWN (Unknown CSBK)");
}
///
@@ -123,57 +124,69 @@ bool CSBK::regenerate(uint8_t* data, uint8_t dataType)
// validate the CRC-CCITT 16
switch (dataType) {
- case DT_CSBK:
+ case DataType::CSBK:
csbk[10U] ^= CSBK_CRC_MASK[0U];
csbk[11U] ^= CSBK_CRC_MASK[1U];
break;
- case DT_MBC_HEADER:
+ case DataType::MBC_HEADER:
csbk[10U] ^= CSBK_MBC_CRC_MASK[0U];
csbk[11U] ^= CSBK_MBC_CRC_MASK[1U];
break;
+ default:
+ LogError(LOG_DMR, "CSBK::regenerate(), unhandled dataType = $%02X", dataType);
+ break;
}
bool valid = edac::CRC::checkCCITT162(csbk, DMR_CSBK_LENGTH_BYTES);
if (!valid) {
- LogError(LOG_DMR, "CSBK::decode(), failed CRC CCITT-162 check");
+ LogError(LOG_DMR, "CSBK::regenerate(), failed CRC CCITT-162 check");
return false;
}
// restore the checksum
switch (dataType) {
- case DT_CSBK:
+ case DataType::CSBK:
csbk[10U] ^= CSBK_CRC_MASK[0U];
csbk[11U] ^= CSBK_CRC_MASK[1U];
break;
- case DT_MBC_HEADER:
+ case DataType::MBC_HEADER:
csbk[10U] ^= CSBK_MBC_CRC_MASK[0U];
csbk[11U] ^= CSBK_MBC_CRC_MASK[1U];
break;
+ default:
+ LogError(LOG_DMR, "CSBK::regenerate(), unhandled dataType = $%02X", dataType);
+ break;
}
// calculate checksum
switch (dataType) {
- case DT_CSBK:
+ case DataType::CSBK:
csbk[10U] ^= CSBK_CRC_MASK[0U];
csbk[11U] ^= CSBK_CRC_MASK[1U];
break;
- case DT_MBC_HEADER:
+ case DataType::MBC_HEADER:
csbk[10U] ^= CSBK_MBC_CRC_MASK[0U];
csbk[11U] ^= CSBK_MBC_CRC_MASK[1U];
break;
+ default:
+ LogError(LOG_DMR, "CSBK::regenerate(), unhandled dataType = $%02X", dataType);
+ break;
}
edac::CRC::addCCITT162(csbk, 12U);
switch (dataType) {
- case DT_CSBK:
+ case DataType::CSBK:
csbk[10U] ^= CSBK_CRC_MASK[0U];
csbk[11U] ^= CSBK_CRC_MASK[1U];
break;
- case DT_MBC_HEADER:
+ case DataType::MBC_HEADER:
csbk[10U] ^= CSBK_MBC_CRC_MASK[0U];
csbk[11U] ^= CSBK_MBC_CRC_MASK[1U];
break;
+ default:
+ LogError(LOG_DMR, "CSBK::regenerate(), unhandled dataType = $%02X", dataType);
+ break;
}
// encode BPTC (196,96) FEC
@@ -251,14 +264,17 @@ bool CSBK::decode(const uint8_t* data, uint8_t* payload)
// validate the CRC-CCITT 16
switch (m_dataType) {
- case DT_CSBK:
+ case DataType::CSBK:
csbk[10U] ^= CSBK_CRC_MASK[0U];
csbk[11U] ^= CSBK_CRC_MASK[1U];
break;
- case DT_MBC_HEADER:
+ case DataType::MBC_HEADER:
csbk[10U] ^= CSBK_MBC_CRC_MASK[0U];
csbk[11U] ^= CSBK_MBC_CRC_MASK[1U];
break;
+ default:
+ LogError(LOG_DMR, "CSBK::decode(), unhandled dataType = $%02X", m_dataType);
+ break;
}
bool valid = edac::CRC::checkCCITT162(csbk, DMR_CSBK_LENGTH_BYTES);
@@ -269,14 +285,17 @@ bool CSBK::decode(const uint8_t* data, uint8_t* payload)
// restore the checksum
switch (m_dataType) {
- case DT_CSBK:
+ case DataType::CSBK:
csbk[10U] ^= CSBK_CRC_MASK[0U];
csbk[11U] ^= CSBK_CRC_MASK[1U];
break;
- case DT_MBC_HEADER:
+ case DataType::MBC_HEADER:
csbk[10U] ^= CSBK_MBC_CRC_MASK[0U];
csbk[11U] ^= CSBK_MBC_CRC_MASK[1U];
break;
+ default:
+ LogError(LOG_DMR, "CSBK::decode(), unhandled dataType = $%02X", m_dataType);
+ break;
}
if (m_verbose) {
@@ -321,27 +340,33 @@ void CSBK::encode(uint8_t* data, const uint8_t* payload)
}
switch (m_dataType) {
- case DT_CSBK:
+ case DataType::CSBK:
csbk[10U] ^= CSBK_CRC_MASK[0U];
csbk[11U] ^= CSBK_CRC_MASK[1U];
break;
- case DT_MBC_HEADER:
+ case DataType::MBC_HEADER:
csbk[10U] ^= CSBK_MBC_CRC_MASK[0U];
csbk[11U] ^= CSBK_MBC_CRC_MASK[1U];
break;
+ default:
+ LogError(LOG_DMR, "CSBK::encoded(), unhandled dataType = $%02X", m_dataType);
+ break;
}
edac::CRC::addCCITT162(csbk, 12U);
switch (m_dataType) {
- case DT_CSBK:
+ case DataType::CSBK:
csbk[10U] ^= CSBK_CRC_MASK[0U];
csbk[11U] ^= CSBK_CRC_MASK[1U];
break;
- case DT_MBC_HEADER:
+ case DataType::MBC_HEADER:
csbk[10U] ^= CSBK_MBC_CRC_MASK[0U];
csbk[11U] ^= CSBK_MBC_CRC_MASK[1U];
break;
+ default:
+ LogError(LOG_DMR, "CSBK::encode(), unhandled dataType = $%02X", m_dataType);
+ break;
}
if (m_verbose) {
diff --git a/src/common/dmr/lc/CSBK.h b/src/common/dmr/lc/CSBK.h
index 6169b177..d9195bfd 100644
--- a/src/common/dmr/lc/CSBK.h
+++ b/src/common/dmr/lc/CSBK.h
@@ -9,13 +9,14 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016 Jonathan Naylor, G4KLX
-* Copyright (C) 2019-2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2019-2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__DMR_LC__CSBK_H__)
#define __DMR_LC__CSBK_H__
#include "common/Defines.h"
+#include "common/dmr/DMRDefines.h"
#include "common/dmr/SiteData.h"
#include "common/lookups/IdenTableLookup.h"
#include "common/Utils.h"
@@ -95,7 +96,7 @@ namespace dmr
__PROTECTED_PROPERTY(uint8_t, CBF, CBF);
/// Data type for this CSBK.
- __PROTECTED_PROPERTY(uint8_t, dataType, DataType);
+ __PROTECTED_PROPERTY(defines::DataType::E, dataType, DataType);
/** Common Service Options */
/// Flag indicating the emergency bits are set.
diff --git a/src/common/dmr/lc/FullLC.cpp b/src/common/dmr/lc/FullLC.cpp
index 82639661..1c7f1bb5 100644
--- a/src/common/dmr/lc/FullLC.cpp
+++ b/src/common/dmr/lc/FullLC.cpp
@@ -10,7 +10,7 @@
*
* Copyright (C) 2012 Ian Wraith
* Copyright (C) 2015,2016 Jonathan Naylor, G4KLX
-* Copyright (C) 2021 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2021,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -20,8 +20,9 @@
#include "edac/CRC.h"
#include "Log.h"
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
#include
#include
@@ -50,7 +51,7 @@ FullLC::~FullLC() = default;
///
///
///
-std::unique_ptr FullLC::decode(const uint8_t* data, uint8_t type)
+std::unique_ptr FullLC::decode(const uint8_t* data, DataType::E type)
{
assert(data != nullptr);
@@ -59,13 +60,13 @@ std::unique_ptr FullLC::decode(const uint8_t* data, uint8_t type)
m_bptc.decode(data, lcData);
switch (type) {
- case DT_VOICE_LC_HEADER:
+ case DataType::VOICE_LC_HEADER:
lcData[9U] ^= VOICE_LC_HEADER_CRC_MASK[0U];
lcData[10U] ^= VOICE_LC_HEADER_CRC_MASK[1U];
lcData[11U] ^= VOICE_LC_HEADER_CRC_MASK[2U];
break;
- case DT_TERMINATOR_WITH_LC:
+ case DataType::TERMINATOR_WITH_LC:
lcData[9U] ^= TERMINATOR_WITH_LC_CRC_MASK[0U];
lcData[10U] ^= TERMINATOR_WITH_LC_CRC_MASK[1U];
lcData[11U] ^= TERMINATOR_WITH_LC_CRC_MASK[2U];
@@ -89,7 +90,7 @@ std::unique_ptr FullLC::decode(const uint8_t* data, uint8_t type)
///
///
///
-void FullLC::encode(const LC& lc, uint8_t* data, uint8_t type)
+void FullLC::encode(const LC& lc, uint8_t* data, DataType::E type)
{
assert(data != nullptr);
@@ -101,13 +102,13 @@ void FullLC::encode(const LC& lc, uint8_t* data, uint8_t type)
edac::RS129::encode(lcData, 9U, parity);
switch (type) {
- case DT_VOICE_LC_HEADER:
+ case DataType::VOICE_LC_HEADER:
lcData[9U] = parity[2U] ^ VOICE_LC_HEADER_CRC_MASK[0U];
lcData[10U] = parity[1U] ^ VOICE_LC_HEADER_CRC_MASK[1U];
lcData[11U] = parity[0U] ^ VOICE_LC_HEADER_CRC_MASK[2U];
break;
- case DT_TERMINATOR_WITH_LC:
+ case DataType::TERMINATOR_WITH_LC:
lcData[9U] = parity[2U] ^ TERMINATOR_WITH_LC_CRC_MASK[0U];
lcData[10U] = parity[1U] ^ TERMINATOR_WITH_LC_CRC_MASK[1U];
lcData[11U] = parity[0U] ^ TERMINATOR_WITH_LC_CRC_MASK[2U];
diff --git a/src/common/dmr/lc/FullLC.h b/src/common/dmr/lc/FullLC.h
index 8aa07c96..a7c6c8c1 100644
--- a/src/common/dmr/lc/FullLC.h
+++ b/src/common/dmr/lc/FullLC.h
@@ -9,13 +9,14 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016 Jonathan Naylor, G4KLX
-* Copyright (C) 2021 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2021,2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__DMR_LC__FULL_LC_H__)
#define __DMR_LC__FULL_LC_H__
#include "common/Defines.h"
+#include "common/dmr/DMRDefines.h"
#include "common/dmr/lc/LC.h"
#include "common/dmr/lc/PrivacyLC.h"
#include "common/edac/BPTC19696.h"
@@ -37,9 +38,9 @@ namespace dmr
~FullLC();
/// Decode DMR full-link control data.
- std::unique_ptr decode(const uint8_t* data, uint8_t type);
+ std::unique_ptr decode(const uint8_t* data, defines::DataType::E type);
/// Encode DMR full-link control data.
- void encode(const LC& lc, uint8_t* data, uint8_t type);
+ void encode(const LC& lc, uint8_t* data, defines::DataType::E type);
/// Decode DMR privacy control data.
std::unique_ptr decodePI(const uint8_t* data);
diff --git a/src/common/dmr/lc/LC.cpp b/src/common/dmr/lc/LC.cpp
index c4903ced..abc0f57d 100644
--- a/src/common/dmr/lc/LC.cpp
+++ b/src/common/dmr/lc/LC.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016 Jonathan Naylor, G4KLX
-* Copyright (C) 2020-2021 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2020-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -17,8 +17,9 @@
#include "dmr/lc/LC.h"
#include "Utils.h"
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
#include
@@ -32,7 +33,7 @@ using namespace dmr;
/// Full-link Control Opcode.
/// Source ID.
/// Destination ID.
-LC::LC(uint8_t flco, uint32_t srcId, uint32_t dstId) :
+LC::LC(FLCO::E flco, uint32_t srcId, uint32_t dstId) :
m_PF(false),
m_FLCO(flco),
m_FID(FID_ETSI),
@@ -47,13 +48,14 @@ LC::LC(uint8_t flco, uint32_t srcId, uint32_t dstId) :
{
/* stub */
}
+
///
/// Initializes a new instance of the LC class.
///
///
LC::LC(const uint8_t* data) :
m_PF(false),
- m_FLCO(FLCO_GROUP),
+ m_FLCO(FLCO::GROUP),
m_FID(FID_ETSI),
m_srcId(0U),
m_dstId(0U),
@@ -69,7 +71,7 @@ LC::LC(const uint8_t* data) :
m_PF = (data[0U] & 0x80U) == 0x80U;
m_R = (data[0U] & 0x40U) == 0x40U;
- m_FLCO = data[0U] & 0x3FU;
+ m_FLCO = (FLCO::E)(data[0U] & 0x3FU);
m_FID = data[1U];
@@ -82,13 +84,14 @@ LC::LC(const uint8_t* data) :
m_dstId = data[3U] << 16 | data[4U] << 8 | data[5U]; // Destination Address
m_srcId = data[6U] << 16 | data[7U] << 8 | data[8U]; // Source Address
}
+
///
/// Initializes a new instance of the LC class.
///
///
LC::LC(const bool* bits) :
m_PF(false),
- m_FLCO(FLCO_GROUP),
+ m_FLCO(FLCO::GROUP),
m_FID(FID_ETSI),
m_srcId(0U),
m_dstId(0U),
@@ -106,7 +109,7 @@ LC::LC(const bool* bits) :
uint8_t temp1, temp2, temp3;
Utils::bitsToByteBE(bits + 0U, temp1);
- m_FLCO = temp1 & 0x3FU;
+ m_FLCO = (FLCO::E)(temp1 & 0x3FU);
Utils::bitsToByteBE(bits + 8U, temp2);
m_FID = temp2;
@@ -137,7 +140,7 @@ LC::LC(const bool* bits) :
///
LC::LC() :
m_PF(false),
- m_FLCO(FLCO_GROUP),
+ m_FLCO(FLCO::GROUP),
m_FID(FID_ETSI),
m_srcId(0U),
m_dstId(0U),
@@ -164,7 +167,7 @@ void LC::getData(uint8_t* data) const
{
assert(data != nullptr);
- data[0U] = (uint8_t)m_FLCO;
+ data[0U] = m_FLCO;
if (m_PF)
data[0U] |= 0x80U;
diff --git a/src/common/dmr/lc/LC.h b/src/common/dmr/lc/LC.h
index 4b21b221..1ce3c19e 100644
--- a/src/common/dmr/lc/LC.h
+++ b/src/common/dmr/lc/LC.h
@@ -9,13 +9,14 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016 Jonathan Naylor, G4KLX
-* Copyright (C) 2020-2021 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2020-2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__DMR_LC__LC_H__)
#define __DMR_LC__LC_H__
#include "common/Defines.h"
+#include "common/dmr/DMRDefines.h"
namespace dmr
{
@@ -29,7 +30,7 @@ namespace dmr
class HOST_SW_API LC {
public:
/// Initializes a new instance of the LC class.
- LC(uint8_t flco, uint32_t srcId, uint32_t dstId);
+ LC(defines::FLCO::E flco, uint32_t srcId, uint32_t dstId);
/// Initializes a new instance of the LC class.
LC(const uint8_t* data);
/// Initializes a new instance of the LC class.
@@ -49,7 +50,7 @@ namespace dmr
__PROPERTY(bool, PF, PF);
/// Full-link control opcode.
- __PROPERTY(uint8_t, FLCO, FLCO);
+ __PROPERTY(defines::FLCO::E, FLCO, FLCO);
/// Feature ID.
__PROPERTY(uint8_t, FID, FID);
diff --git a/src/common/dmr/lc/PrivacyLC.cpp b/src/common/dmr/lc/PrivacyLC.cpp
index 91c9f14f..beb0a723 100644
--- a/src/common/dmr/lc/PrivacyLC.cpp
+++ b/src/common/dmr/lc/PrivacyLC.cpp
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2021 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2021,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -15,8 +15,9 @@
#include "dmr/lc/PrivacyLC.h"
#include "Utils.h"
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
#include
@@ -38,7 +39,7 @@ PrivacyLC::PrivacyLC(const uint8_t* data) :
{
assert(data != nullptr);
- m_mi = new uint8_t[DMR_MI_LENGTH_BYTES];
+ m_mi = new uint8_t[MI_LENGTH_BYTES];
m_group = (data[0U] & 0x20U) == 0x20U;
m_algId = data[0U] & 7; // Algorithm ID
@@ -67,7 +68,7 @@ PrivacyLC::PrivacyLC(const bool* bits) :
{
assert(bits != nullptr);
- m_mi = new uint8_t[DMR_MI_LENGTH_BYTES];
+ m_mi = new uint8_t[MI_LENGTH_BYTES];
uint8_t temp1, temp2, temp3;
Utils::bitsToByteBE(bits + 0U, temp1);
@@ -110,7 +111,7 @@ PrivacyLC::PrivacyLC() :
m_kId(0U),
m_mi(nullptr)
{
- m_mi = new uint8_t[DMR_MI_LENGTH_BYTES];
+ m_mi = new uint8_t[MI_LENGTH_BYTES];
}
///
diff --git a/src/common/dmr/lc/ShortLC.cpp b/src/common/dmr/lc/ShortLC.cpp
index 60b83a10..9d460ca5 100644
--- a/src/common/dmr/lc/ShortLC.cpp
+++ b/src/common/dmr/lc/ShortLC.cpp
@@ -16,8 +16,8 @@
#include "edac/Hamming.h"
#include "Utils.h"
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::lc;
#include
diff --git a/src/common/dmr/lc/csbk/CSBKFactory.cpp b/src/common/dmr/lc/csbk/CSBKFactory.cpp
index 62d2ac22..e6af2653 100644
--- a/src/common/dmr/lc/csbk/CSBKFactory.cpp
+++ b/src/common/dmr/lc/csbk/CSBKFactory.cpp
@@ -17,9 +17,10 @@
#include "Log.h"
#include "Utils.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -43,7 +44,7 @@ CSBKFactory::~CSBKFactory() = default;
///
///
/// True, if CSBK was decoded, otherwise false.
-std::unique_ptr CSBKFactory::createCSBK(const uint8_t* data, uint8_t dataType)
+std::unique_ptr CSBKFactory::createCSBK(const uint8_t* data, DataType::E dataType)
{
assert(data != nullptr);
@@ -55,47 +56,53 @@ std::unique_ptr CSBKFactory::createCSBK(const uint8_t* data, uint8_t dataT
// validate the CRC-CCITT 16
switch (dataType) {
- case DT_CSBK:
+ case DataType::CSBK:
csbk[10U] ^= CSBK_CRC_MASK[0U];
csbk[11U] ^= CSBK_CRC_MASK[1U];
break;
- case DT_MBC_HEADER:
+ case DataType::MBC_HEADER:
csbk[10U] ^= CSBK_MBC_CRC_MASK[0U];
csbk[11U] ^= CSBK_MBC_CRC_MASK[1U];
break;
+ default:
+ LogError(LOG_DMR, "CSBKFactory::createCSBK(), unhandled dataType = $%02X", dataType);
+ break;
}
bool valid = edac::CRC::checkCCITT162(csbk, DMR_CSBK_LENGTH_BYTES);
if (!valid) {
- LogError(LOG_DMR, "CSBK::decode(), failed CRC CCITT-162 check");
+ LogError(LOG_DMR, "CSBKFactory::createCSBK(), failed CRC CCITT-162 check");
return nullptr;
}
// restore the checksum
switch (dataType) {
- case DT_CSBK:
+ case DataType::CSBK:
csbk[10U] ^= CSBK_CRC_MASK[0U];
csbk[11U] ^= CSBK_CRC_MASK[1U];
break;
- case DT_MBC_HEADER:
+ case DataType::MBC_HEADER:
csbk[10U] ^= CSBK_MBC_CRC_MASK[0U];
csbk[11U] ^= CSBK_MBC_CRC_MASK[1U];
break;
+ default:
+ LogError(LOG_DMR, "CSBKFactory::createCSBK(), unhandled dataType = $%02X", dataType);
+ break;
}
uint8_t CSBKO = csbk[0U] & 0x3FU; // CSBKO
uint8_t FID = csbk[1U]; // Feature ID
switch (CSBKO) {
- case CSBKO_BSDWNACT:
+ case CSBKO::BSDWNACT:
return decode(new CSBK_BSDWNACT(), data);
- case CSBKO_UU_V_REQ:
+ case CSBKO::UU_V_REQ:
return decode(new CSBK_UU_V_REQ(), data);
- case CSBKO_UU_ANS_RSP:
+ case CSBKO::UU_ANS_RSP:
return decode(new CSBK_UU_ANS_RSP(), data);
- case CSBKO_PRECCSBK:
+ case CSBKO::PRECCSBK:
return decode(new CSBK_PRECCSBK(), data);
- case CSBKO_RAND: // CSBKO_CALL_ALRT when FID == FID_DMRA
+ case CSBKO::RAND: // CSBKO::CALL_ALRT when FID == FID_DMRA
switch (FID)
{
case FID_DMRA:
@@ -104,17 +111,17 @@ std::unique_ptr CSBKFactory::createCSBK(const uint8_t* data, uint8_t dataT
default:
return decode(new CSBK_RAND(), data);
}
- case CSBKO_EXT_FNCT:
+ case CSBKO::EXT_FNCT:
return decode(new CSBK_EXT_FNCT(), data);
- case CSBKO_NACK_RSP:
+ case CSBKO::NACK_RSP:
return decode(new CSBK_NACK_RSP(), data);
/** Tier 3 */
- case CSBKO_ACK_RSP:
+ case CSBKO::ACK_RSP:
return decode(new CSBK_ACK_RSP(), data);
- case CSBKO_BROADCAST:
+ case CSBKO::BROADCAST:
return decode(new CSBK_BROADCAST(), data);
- case CSBKO_MAINT:
+ case CSBKO::MAINT:
return decode(new CSBK_MAINT(), data);
default:
diff --git a/src/common/dmr/lc/csbk/CSBKFactory.h b/src/common/dmr/lc/csbk/CSBKFactory.h
index 6de441f2..56e389d1 100644
--- a/src/common/dmr/lc/csbk/CSBKFactory.h
+++ b/src/common/dmr/lc/csbk/CSBKFactory.h
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__DMR_LC__CSBK_FACTORY_H__)
@@ -15,6 +15,7 @@
#include "common/Defines.h"
+#include "common/dmr/DMRDefines.h"
#include "common/dmr/lc/CSBK.h"
#include "common/dmr/lc/csbk/CSBK_ACK_RSP.h"
#include "common/dmr/lc/csbk/CSBK_ALOHA.h"
@@ -55,7 +56,7 @@ namespace dmr
~CSBKFactory();
/// Create an instance of a CSBK.
- static std::unique_ptr createCSBK(const uint8_t* data, uint8_t dataType);
+ static std::unique_ptr createCSBK(const uint8_t* data, defines::DataType::E dataType);
private:
///
diff --git a/src/common/dmr/lc/csbk/CSBK_ACK_RSP.cpp b/src/common/dmr/lc/csbk/CSBK_ACK_RSP.cpp
index ed484fed..cca73e90 100644
--- a/src/common/dmr/lc/csbk/CSBK_ACK_RSP.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_ACK_RSP.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_ACK_RSP.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -28,7 +29,7 @@ using namespace dmr;
///
CSBK_ACK_RSP::CSBK_ACK_RSP() : CSBK()
{
- m_CSBKO = CSBKO_ACK_RSP;
+ m_CSBKO = CSBKO::ACK_RSP;
}
///
@@ -67,7 +68,7 @@ void CSBK_ACK_RSP::encode(uint8_t* data)
ulong64_t csbkValue = 0U;
- if (m_reason == TS_ACK_RSN_REG) {
+ if (m_reason == ReasonCode::TS_ACK_RSN_REG) {
csbkValue = 0U;
} else {
csbkValue = (m_GI ? 0x40U : 0x00U) + // Source Type
@@ -88,5 +89,5 @@ void CSBK_ACK_RSP::encode(uint8_t* data)
///
std::string CSBK_ACK_RSP::toString()
{
- return std::string("CSBKO_ACK_RSP (Acknowledge Response)");
+ return std::string("CSBKO, ACK_RSP (Acknowledge Response)");
}
diff --git a/src/common/dmr/lc/csbk/CSBK_ALOHA.cpp b/src/common/dmr/lc/csbk/CSBK_ALOHA.cpp
index b1849002..4e872cd3 100644
--- a/src/common/dmr/lc/csbk/CSBK_ALOHA.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_ALOHA.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_ALOHA.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -32,7 +33,7 @@ CSBK_ALOHA::CSBK_ALOHA() : CSBK(),
m_backoffNo(1U),
m_nRandWait(DEFAULT_NRAND_WAIT)
{
- m_CSBKO = CSBKO_ALOHA;
+ m_CSBKO = CSBKO::ALOHA;
}
///
@@ -82,7 +83,7 @@ void CSBK_ALOHA::encode(uint8_t* data)
///
std::string CSBK_ALOHA::toString()
{
- return std::string("CSBKO_ALOHA (Aloha PDU)");
+ return std::string("CSBKO, ALOHA (Aloha PDU)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/dmr/lc/csbk/CSBK_BROADCAST.cpp b/src/common/dmr/lc/csbk/CSBK_BROADCAST.cpp
index 63ff59bf..18482ca5 100644
--- a/src/common/dmr/lc/csbk/CSBK_BROADCAST.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_BROADCAST.cpp
@@ -13,9 +13,10 @@
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_BROADCAST.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -27,7 +28,7 @@ using namespace dmr;
/// Initializes a new instance of the CSBK_BROADCAST class.
///
CSBK_BROADCAST::CSBK_BROADCAST() : CSBK(),
- m_anncType(BCAST_ANNC_SITE_PARMS),
+ m_anncType(BroadcastAnncType::SITE_PARMS),
m_hibernating(false),
m_annWdCh1(false),
m_annWdCh2(false),
@@ -35,7 +36,7 @@ CSBK_BROADCAST::CSBK_BROADCAST() : CSBK(),
m_systemId(0U),
m_backoffNo(1U)
{
- m_CSBKO = CSBKO_BROADCAST;
+ m_CSBKO = CSBKO::BROADCAST;
}
///
@@ -60,7 +61,7 @@ bool CSBK_BROADCAST::decode(const uint8_t* data)
switch (m_anncType)
{
- case BCAST_ANNC_ANN_WD_TSCC:
+ case BroadcastAnncType::ANN_WD_TSCC:
// Broadcast Params 1
m_colorCode = (uint8_t)((csbkValue >> 51) & 0x0FU); // Color Code 1
m_annWdCh1 = ((csbkValue >> 44) & 0x04U) == 0x04U; // Announce/Withdraw Channel 1
@@ -95,7 +96,7 @@ void CSBK_BROADCAST::encode(uint8_t* data)
switch (m_anncType)
{
- case BCAST_ANNC_ANN_WD_TSCC:
+ case BroadcastAnncType::ANN_WD_TSCC:
// Broadcast Params 1
csbkValue = (csbkValue << 4) + 0U; // Reserved
csbkValue = (csbkValue << 4) + (m_colorCode & 0x0FU); // Color Code 1
@@ -111,7 +112,7 @@ void CSBK_BROADCAST::encode(uint8_t* data)
csbkValue = (csbkValue << 12) + (m_logicalCh1 & 0xFFFU); // Logical Channel 1
csbkValue = (csbkValue << 12) + (m_logicalCh2 & 0xFFFU); // Logical Channel 2
break;
- case BCAST_ANNC_CHAN_FREQ:
+ case BroadcastAnncType::CHAN_FREQ:
{
uint32_t calcSpace = (uint32_t)(m_siteIdenEntry.chSpaceKhz() / 0.125);
float calcTxOffset = m_siteIdenEntry.txOffsetMhz() * 1000000;
@@ -148,7 +149,7 @@ void CSBK_BROADCAST::encode(uint8_t* data)
csbkValue = (csbkValue << 13) + (rxFreqKhz & 0x3FFFU); // Receive Freq Khz
}
break;
- case BCAST_ANNC_SITE_PARMS:
+ case BroadcastAnncType::SITE_PARMS:
// Broadcast Params 1
csbkValue = (csbkValue << 14) + m_siteData.systemIdentity(true); // Site Identity (Broadcast Params 1)
@@ -174,10 +175,10 @@ void CSBK_BROADCAST::encode(uint8_t* data)
std::string CSBK_BROADCAST::toString()
{
switch (m_anncType) {
- case BCAST_ANNC_ANN_WD_TSCC: return std::string("CSBKO_BROADCAST (Announcement PDU), BCAST_ANNC_ANN_WD_TSCC (Announce-WD TSCC Channel)");
- case BCAST_ANNC_CHAN_FREQ: return std::string("CSBKO_BROADCAST (Announcement PDU), BCAST_ANNC_CHAN_FREQ (Logical Channel/Frequency)");
- case BCAST_ANNC_SITE_PARMS: return std::string("CSBKO_BROADCAST (Announcement PDU), BCAST_ANNC_SITE_PARMS (General Site Parameters)");
- default: return std::string("CSBKO_BROADCAST (Announcement PDU)");
+ case BroadcastAnncType::ANN_WD_TSCC: return std::string("CSBKO, BROADCAST (Announcement PDU), BroadcastAnncType::ANN_WD_TSCC (Announce-WD TSCC Channel)");
+ case BroadcastAnncType::CHAN_FREQ: return std::string("CSBKO, BROADCAST (Announcement PDU), BroadcastAnncType::CHAN_FREQ (Logical Channel/Frequency)");
+ case BroadcastAnncType::SITE_PARMS: return std::string("CSBKO, BROADCAST (Announcement PDU), BroadcastAnncType::SITE_PARMS (General Site Parameters)");
+ default: return std::string("CSBKO, BROADCAST (Announcement PDU)");
}
}
diff --git a/src/common/dmr/lc/csbk/CSBK_BSDWNACT.cpp b/src/common/dmr/lc/csbk/CSBK_BSDWNACT.cpp
index 9a2d2789..88a18058 100644
--- a/src/common/dmr/lc/csbk/CSBK_BSDWNACT.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_BSDWNACT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_BSDWNACT.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -29,7 +30,7 @@ using namespace dmr;
CSBK_BSDWNACT::CSBK_BSDWNACT() : CSBK(),
m_bsId(0U)
{
- m_CSBKO = CSBKO_BSDWNACT;
+ m_CSBKO = CSBKO::BSDWNACT;
}
///
@@ -73,7 +74,7 @@ void CSBK_BSDWNACT::encode(uint8_t* data)
///
std::string CSBK_BSDWNACT::toString()
{
- return std::string("CSBKO_BSDWNACT (BS Outbound Activation)");
+ return std::string("CSBKO, BSDWNACT (BS Outbound Activation)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/dmr/lc/csbk/CSBK_CALL_ALRT.cpp b/src/common/dmr/lc/csbk/CSBK_CALL_ALRT.cpp
index cc054f20..1c9ec91d 100644
--- a/src/common/dmr/lc/csbk/CSBK_CALL_ALRT.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_CALL_ALRT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_CALL_ALRT.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -28,7 +29,7 @@ using namespace dmr;
///
CSBK_CALL_ALRT::CSBK_CALL_ALRT() : CSBK()
{
- m_CSBKO = CSBKO_RAND;
+ m_CSBKO = CSBKO::RAND;
m_FID = FID_DMRA;
}
@@ -81,5 +82,5 @@ void CSBK_CALL_ALRT::encode(uint8_t* data)
///
std::string CSBK_CALL_ALRT::toString()
{
- return std::string("CSBKO_RAND (Call Alert)");
+ return std::string("CSBKO, RAND (Call Alert)");
}
diff --git a/src/common/dmr/lc/csbk/CSBK_EXT_FNCT.cpp b/src/common/dmr/lc/csbk/CSBK_EXT_FNCT.cpp
index dd29efef..293fa79d 100644
--- a/src/common/dmr/lc/csbk/CSBK_EXT_FNCT.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_EXT_FNCT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_EXT_FNCT.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -27,9 +28,9 @@ using namespace dmr;
/// Initializes a new instance of the CSBK_EXT_FNCT class.
///
CSBK_EXT_FNCT::CSBK_EXT_FNCT() : CSBK(),
- m_extendedFunction(DMR_EXT_FNCT_CHECK)
+ m_extendedFunction(ExtendedFunctions::CHECK)
{
- m_CSBKO = CSBKO_EXT_FNCT;
+ m_CSBKO = CSBKO::EXT_FNCT;
m_FID = FID_DMRA;
}
@@ -86,7 +87,7 @@ void CSBK_EXT_FNCT::encode(uint8_t* data)
///
std::string CSBK_EXT_FNCT::toString()
{
- return std::string("CSBKO_EXT_FNCT (Extended Function)");
+ return std::string("CSBKO, EXT_FNCT (Extended Function)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/dmr/lc/csbk/CSBK_MAINT.cpp b/src/common/dmr/lc/csbk/CSBK_MAINT.cpp
index f1da92b5..a0612ad8 100644
--- a/src/common/dmr/lc/csbk/CSBK_MAINT.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_MAINT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_MAINT.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -29,7 +30,7 @@ using namespace dmr;
CSBK_MAINT::CSBK_MAINT() : CSBK(),
m_maintKind(0U)
{
- m_CSBKO = CSBKO_MAINT;
+ m_CSBKO = CSBKO::MAINT;
}
///
@@ -81,7 +82,7 @@ void CSBK_MAINT::encode(uint8_t* data)
///
std::string CSBK_MAINT::toString()
{
- return std::string("CSBKO_MAINT (Call Maintainence)");
+ return std::string("CSBKO, MAINT (Call Maintainence)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/dmr/lc/csbk/CSBK_NACK_RSP.cpp b/src/common/dmr/lc/csbk/CSBK_NACK_RSP.cpp
index ea973c39..87c8febf 100644
--- a/src/common/dmr/lc/csbk/CSBK_NACK_RSP.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_NACK_RSP.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_NACK_RSP.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -29,7 +30,7 @@ using namespace dmr;
CSBK_NACK_RSP::CSBK_NACK_RSP() : CSBK(),
m_serviceKind(0U)
{
- m_CSBKO = CSBKO_NACK_RSP;
+ m_CSBKO = CSBKO::NACK_RSP;
}
///
@@ -86,7 +87,7 @@ void CSBK_NACK_RSP::encode(uint8_t* data)
///
std::string CSBK_NACK_RSP::toString()
{
- return std::string("CSBKO_NACK_RSP (Negative Acknowledgement Response)");
+ return std::string("CSBKO, NACK_RSP (Negative Acknowledgement Response)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/dmr/lc/csbk/CSBK_PD_GRANT.cpp b/src/common/dmr/lc/csbk/CSBK_PD_GRANT.cpp
index e40e3a63..34ea91a3 100644
--- a/src/common/dmr/lc/csbk/CSBK_PD_GRANT.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_PD_GRANT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_PD_GRANT.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -28,7 +29,7 @@ using namespace dmr;
///
CSBK_PD_GRANT::CSBK_PD_GRANT() : CSBK()
{
- m_CSBKO = CSBKO_PD_GRANT;
+ m_CSBKO = CSBKO::PD_GRANT;
}
///
@@ -73,5 +74,5 @@ void CSBK_PD_GRANT::encode(uint8_t* data)
///
std::string CSBK_PD_GRANT::toString()
{
- return std::string("CSBKO_PD_GRANT (Private Data Channel Grant)");
+ return std::string("CSBKO, PD_GRANT (Private Data Channel Grant)");
}
diff --git a/src/common/dmr/lc/csbk/CSBK_PRECCSBK.cpp b/src/common/dmr/lc/csbk/CSBK_PRECCSBK.cpp
index 26dd6327..678865a5 100644
--- a/src/common/dmr/lc/csbk/CSBK_PRECCSBK.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_PRECCSBK.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_PRECCSBK.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -28,7 +29,7 @@ using namespace dmr;
///
CSBK_PRECCSBK::CSBK_PRECCSBK() : CSBK()
{
- m_CSBKO = CSBKO_PRECCSBK;
+ m_CSBKO = CSBKO::PRECCSBK;
}
///
@@ -75,5 +76,5 @@ void CSBK_PRECCSBK::encode(uint8_t* data)
///
std::string CSBK_PRECCSBK::toString()
{
- return std::string("CSBKO_PRECCSBK (Preamble CSBK)");
+ return std::string("CSBKO, PRECCSBK (Preamble CSBK)");
}
diff --git a/src/common/dmr/lc/csbk/CSBK_PV_GRANT.cpp b/src/common/dmr/lc/csbk/CSBK_PV_GRANT.cpp
index 8587e56f..7f65794b 100644
--- a/src/common/dmr/lc/csbk/CSBK_PV_GRANT.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_PV_GRANT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_PV_GRANT.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -28,7 +29,7 @@ using namespace dmr;
///
CSBK_PV_GRANT::CSBK_PV_GRANT() : CSBK()
{
- m_CSBKO = CSBKO_PV_GRANT;
+ m_CSBKO = CSBKO::PV_GRANT;
}
///
@@ -73,5 +74,5 @@ void CSBK_PV_GRANT::encode(uint8_t* data)
///
std::string CSBK_PV_GRANT::toString()
{
- return std::string("CSBKO_PV_GRANT (Private Voice Channel Grant)");
+ return std::string("CSBKO, PV_GRANT (Private Voice Channel Grant)");
}
diff --git a/src/common/dmr/lc/csbk/CSBK_P_CLEAR.cpp b/src/common/dmr/lc/csbk/CSBK_P_CLEAR.cpp
index 90bfcbf2..349953f1 100644
--- a/src/common/dmr/lc/csbk/CSBK_P_CLEAR.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_P_CLEAR.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_P_CLEAR.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -28,7 +29,7 @@ using namespace dmr;
///
CSBK_P_CLEAR::CSBK_P_CLEAR() : CSBK()
{
- m_CSBKO = CSBKO_P_CLEAR;
+ m_CSBKO = CSBKO::P_CLEAR;
}
///
@@ -72,5 +73,5 @@ void CSBK_P_CLEAR::encode(uint8_t* data)
///
std::string CSBK_P_CLEAR::toString()
{
- return std::string("CSBKO_P_CLEAR (Payload Channel Clear)");
+ return std::string("CSBKO, P_CLEAR (Payload Channel Clear)");
}
diff --git a/src/common/dmr/lc/csbk/CSBK_P_GRANT.cpp b/src/common/dmr/lc/csbk/CSBK_P_GRANT.cpp
index 8b7aab8e..cf63773a 100644
--- a/src/common/dmr/lc/csbk/CSBK_P_GRANT.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_P_GRANT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_P_GRANT.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -28,7 +29,7 @@ using namespace dmr;
///
CSBK_P_GRANT::CSBK_P_GRANT() : CSBK()
{
- m_CSBKO = CSBKO_TV_GRANT;
+ m_CSBKO = CSBKO::TV_GRANT;
}
///
@@ -73,5 +74,5 @@ void CSBK_P_GRANT::encode(uint8_t* data)
///
std::string CSBK_P_GRANT::toString()
{
- return std::string("CSBK_P_GRANT (Payload Grant)");
+ return std::string("CSBKO, P_GRANT (Payload Grant)");
}
diff --git a/src/common/dmr/lc/csbk/CSBK_RAND.cpp b/src/common/dmr/lc/csbk/CSBK_RAND.cpp
index 8f4be67d..483dcb8f 100644
--- a/src/common/dmr/lc/csbk/CSBK_RAND.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_RAND.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_RAND.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -31,7 +32,7 @@ CSBK_RAND::CSBK_RAND() : CSBK(),
m_serviceExtra(0U),
m_serviceKind(0U)
{
- m_CSBKO = CSBKO_RAND;
+ m_CSBKO = CSBKO::RAND;
}
///
@@ -90,20 +91,20 @@ void CSBK_RAND::encode(uint8_t* data)
std::string CSBK_RAND::toString()
{
switch (m_serviceKind) {
- case SVC_KIND_IND_VOICE_CALL: return std::string("CSBKO_RAND (Random Access), SVC_KIND_IND_VOICE_CALL (Individual Voice Call)");
- case SVC_KIND_GRP_VOICE_CALL: return std::string("CSBKO_RAND (Random Access), SVC_KIND_GRP_VOICE_CALL (Group Voice Call)");
- case SVC_KIND_IND_DATA_CALL: return std::string("CSBKO_RAND (Random Access), SVC_KIND_IND_DATA_CALL (Individual Data Call)");
- case SVC_KIND_GRP_DATA_CALL: return std::string("CSBKO_RAND (Random Access), SVC_KIND_GRP_DATA_CALL (Group Data Call)");
- case SVC_KIND_IND_UDT_DATA_CALL: return std::string("CSBKO_RAND (Random Access), SVC_KIND_IND_UDT_DATA_CALL (Individual UDT Short Data Call)");
- case SVC_KIND_GRP_UDT_DATA_CALL: return std::string("CSBKO_RAND (Random Access), SVC_KIND_GRP_UDT_DATA_CALL (Group UDT Short Data Call)");
- case SVC_KIND_UDT_SHORT_POLL: return std::string("CSBKO_RAND (Random Access), SVC_KIND_UDT_SHORT_POLL (UDT Short Data Polling Service)");
- case SVC_KIND_STATUS_TRANSPORT: return std::string("CSBKO_RAND (Random Access), SVC_KIND_STATUS_TRANSPORT (Status Transport Service)");
- case SVC_KIND_CALL_DIVERSION: return std::string("CSBKO_RAND (Random Access), SVC_KIND_CALL_DIVERSION (Call Diversion Service)");
- case SVC_KIND_CALL_ANSWER: return std::string("CSBKO_RAND (Random Access), SVC_KIND_CALL_ANSWER (Call Answer Service)");
- case SVC_KIND_SUPPLEMENTARY_SVC: return std::string("CSBKO_RAND (Random Access), SVC_KIND_SUPPLEMENTARY_SVC (Supplementary Service)");
- case SVC_KIND_REG_SVC: return std::string("CSBKO_RAND (Random Access), SVC_KIND_REG_SVC (Registration Service)");
- case SVC_KIND_CANCEL_CALL: return std::string("CSBKO_RAND (Random Access), SVC_KIND_CANCEL_CALL (Cancel Call Service)");
- default: return std::string("CSBKO_RAND (Random Access)");
+ case ServiceKind::IND_VOICE_CALL: return std::string("CSBKO, RAND (Random Access), IND_VOICE_CALL (Individual Voice Call)");
+ case ServiceKind::GRP_VOICE_CALL: return std::string("CSBKO, RAND (Random Access), GRP_VOICE_CALL (Group Voice Call)");
+ case ServiceKind::IND_DATA_CALL: return std::string("CSBKO, RAND (Random Access), IND_DATA_CALL (Individual Data Call)");
+ case ServiceKind::GRP_DATA_CALL: return std::string("CSBKO, RAND (Random Access), GRP_DATA_CALL (Group Data Call)");
+ case ServiceKind::IND_UDT_DATA_CALL: return std::string("CSBKO, RAND (Random Access), IND_UDT_DATA_CALL (Individual UDT Short Data Call)");
+ case ServiceKind::GRP_UDT_DATA_CALL: return std::string("CSBKO, RAND (Random Access), GRP_UDT_DATA_CALL (Group UDT Short Data Call)");
+ case ServiceKind::UDT_SHORT_POLL: return std::string("CSBKO, RAND (Random Access), UDT_SHORT_POLL (UDT Short Data Polling Service)");
+ case ServiceKind::STATUS_TRANSPORT: return std::string("CSBKO, RAND (Random Access), STATUS_TRANSPORT (Status Transport Service)");
+ case ServiceKind::CALL_DIVERSION: return std::string("CSBKO, RAND (Random Access), CALL_DIVERSION (Call Diversion Service)");
+ case ServiceKind::CALL_ANSWER: return std::string("CSBKO, RAND (Random Access), CALL_ANSWER (Call Answer Service)");
+ case ServiceKind::SUPPLEMENTARY_SVC: return std::string("CSBKO, RAND (Random Access), SUPPLEMENTARY_SVC (Supplementary Service)");
+ case ServiceKind::REG_SVC: return std::string("CSBKO, RAND (Random Access), REG_SVC (Registration Service)");
+ case ServiceKind::CANCEL_CALL: return std::string("CSBKO, RAND (Random Access), CANCEL_CALL (Cancel Call Service)");
+ default: return std::string("CSBKO, RAND (Random Access)");
}
}
diff --git a/src/common/dmr/lc/csbk/CSBK_RAW.cpp b/src/common/dmr/lc/csbk/CSBK_RAW.cpp
index 61cd039f..06ce2551 100644
--- a/src/common/dmr/lc/csbk/CSBK_RAW.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_RAW.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_RAW.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -29,7 +30,7 @@ using namespace dmr;
CSBK_RAW::CSBK_RAW() : CSBK(),
m_csbk(nullptr)
{
- m_CSBKO = CSBKO_RAND;
+ m_CSBKO = CSBKO::RAND;
}
///
diff --git a/src/common/dmr/lc/csbk/CSBK_TD_GRANT.cpp b/src/common/dmr/lc/csbk/CSBK_TD_GRANT.cpp
index 4c6e1d51..f3624eb5 100644
--- a/src/common/dmr/lc/csbk/CSBK_TD_GRANT.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_TD_GRANT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_TD_GRANT.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -28,7 +29,7 @@ using namespace dmr;
///
CSBK_TD_GRANT::CSBK_TD_GRANT() : CSBK()
{
- m_CSBKO = CSBKO_TD_GRANT;
+ m_CSBKO = CSBKO::TD_GRANT;
}
///
@@ -73,5 +74,5 @@ void CSBK_TD_GRANT::encode(uint8_t* data)
///
std::string CSBK_TD_GRANT::toString()
{
- return std::string("CSBKO_TD_GRANT (Talkgroup Data Channel Grant)");
+ return std::string("CSBKO, TD_GRANT (Talkgroup Data Channel Grant)");
}
diff --git a/src/common/dmr/lc/csbk/CSBK_TV_GRANT.cpp b/src/common/dmr/lc/csbk/CSBK_TV_GRANT.cpp
index 6f39daa5..7aa35c4f 100644
--- a/src/common/dmr/lc/csbk/CSBK_TV_GRANT.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_TV_GRANT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_TV_GRANT.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -29,7 +30,7 @@ using namespace dmr;
CSBK_TV_GRANT::CSBK_TV_GRANT() : CSBK(),
m_lateEntry(false)
{
- m_CSBKO = CSBKO_TV_GRANT;
+ m_CSBKO = CSBKO::TV_GRANT;
}
///
@@ -74,7 +75,7 @@ void CSBK_TV_GRANT::encode(uint8_t* data)
///
std::string CSBK_TV_GRANT::toString()
{
- return std::string("CSBKO_TV_GRANT (Talkgroup Voice Channel Grant)");
+ return std::string("CSBKO, TV_GRANT (Talkgroup Voice Channel Grant)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/dmr/lc/csbk/CSBK_UU_ANS_RSP.cpp b/src/common/dmr/lc/csbk/CSBK_UU_ANS_RSP.cpp
index d41d629c..69a56fe3 100644
--- a/src/common/dmr/lc/csbk/CSBK_UU_ANS_RSP.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_UU_ANS_RSP.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_UU_ANS_RSP.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -28,7 +29,7 @@ using namespace dmr;
///
CSBK_UU_ANS_RSP::CSBK_UU_ANS_RSP() : CSBK()
{
- m_CSBKO = CSBKO_UU_ANS_RSP;
+ m_CSBKO = CSBKO::UU_ANS_RSP;
}
///
@@ -72,5 +73,5 @@ void CSBK_UU_ANS_RSP::encode(uint8_t* data)
///
std::string CSBK_UU_ANS_RSP::toString()
{
- return std::string("CSBKO_UU_ANS_RSP (Unit-to-Unit Answer Response)");
+ return std::string("CSBKO, UU_ANS_RSP (Unit-to-Unit Answer Response)");
}
diff --git a/src/common/dmr/lc/csbk/CSBK_UU_V_REQ.cpp b/src/common/dmr/lc/csbk/CSBK_UU_V_REQ.cpp
index deef8932..6900253f 100644
--- a/src/common/dmr/lc/csbk/CSBK_UU_V_REQ.cpp
+++ b/src/common/dmr/lc/csbk/CSBK_UU_V_REQ.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_UU_V_REQ.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -28,7 +29,7 @@ using namespace dmr;
///
CSBK_UU_V_REQ::CSBK_UU_V_REQ() : CSBK()
{
- m_CSBKO = CSBKO_UU_V_REQ;
+ m_CSBKO = CSBKO::UU_V_REQ;
}
///
@@ -72,5 +73,5 @@ void CSBK_UU_V_REQ::encode(uint8_t* data)
///
std::string CSBK_UU_V_REQ::toString()
{
- return std::string("CSBKO_UU_V_REQ (Unit-to-Unit Voice Channel Request)");
+ return std::string("CSBKO, UU_V_REQ (Unit-to-Unit Voice Channel Request)");
}
diff --git a/src/common/lookups/RadioIdLookup.cpp b/src/common/lookups/RadioIdLookup.cpp
index aee6961b..61ebb1d0 100644
--- a/src/common/lookups/RadioIdLookup.cpp
+++ b/src/common/lookups/RadioIdLookup.cpp
@@ -74,7 +74,7 @@ void RadioIdLookup::toggleEntry(uint32_t id, bool enabled)
/// Alias for the radio ID
void RadioIdLookup::addEntry(uint32_t id, bool enabled, const std::string& alias)
{
- if ((id == p25::P25_WUID_ALL) || (id == p25::P25_WUID_FNE)) {
+ if ((id == p25::defines::WUID_ALL) || (id == p25::defines::WUID_FNE)) {
return;
}
@@ -121,7 +121,7 @@ RadioId RadioIdLookup::find(uint32_t id)
{
RadioId entry;
- if ((id == p25::P25_WUID_ALL) || (id == p25::P25_WUID_FNE)) {
+ if ((id == p25::defines::WUID_ALL) || (id == p25::defines::WUID_FNE)) {
return RadioId(true, false);
}
diff --git a/src/common/network/BaseNetwork.cpp b/src/common/network/BaseNetwork.cpp
index 2aa8b9a6..aa7f9d69 100644
--- a/src/common/network/BaseNetwork.cpp
+++ b/src/common/network/BaseNetwork.cpp
@@ -14,6 +14,7 @@
*/
#include "Defines.h"
#include "common/dmr/DMRDefines.h"
+#include "common/p25/P25Defines.h"
#include "common/nxdn/NXDNDefines.h"
#include "common/p25/dfsi/DFSIDefines.h"
#include "common/p25/dfsi/LC.h"
@@ -434,6 +435,7 @@ UInt8Array BaseNetwork::readDMR(bool& ret, uint32_t& frameLength)
///
bool BaseNetwork::writeDMR(const dmr::data::Data& data, bool noSequence)
{
+ using namespace dmr::defines;
if (m_status != NET_STAT_RUNNING && m_status != NET_STAT_MST_RUNNING)
return false;
@@ -445,17 +447,17 @@ bool BaseNetwork::writeDMR(const dmr::data::Data& data, bool noSequence)
if (slotNo == 2U && !m_slot2)
return false;
- uint8_t dataType = data.getDataType();
+ DataType::E dataType = data.getDataType();
uint32_t slotIndex = slotNo - 1U;
bool resetSeq = false;
- if (dataType == dmr::DT_VOICE_LC_HEADER) {
+ if (dataType == DataType::VOICE_LC_HEADER) {
resetSeq = true;
m_dmrStreamId[slotIndex] = createStreamId();
}
- if (dataType == dmr::DT_CSBK || dataType == dmr::DT_DATA_HEADER) {
+ if (dataType == DataType::CSBK || dataType == DataType::DATA_HEADER) {
resetSeq = true;
m_dmrStreamId[slotIndex] = createStreamId();
}
@@ -467,7 +469,7 @@ bool BaseNetwork::writeDMR(const dmr::data::Data& data, bool noSequence)
}
uint16_t seq = pktSeq(resetSeq);
- if (dataType == dmr::DT_TERMINATOR_WITH_LC) {
+ if (dataType == DataType::TERMINATOR_WITH_LC) {
seq = RTP_END_OF_CALL_SEQ;
}
@@ -531,7 +533,7 @@ UInt8Array BaseNetwork::readP25(bool& ret, uint32_t& frameLength)
///
///
///
-bool BaseNetwork::writeP25LDU1(const p25::lc::LC& control, const p25::data::LowSpeedData& lsd, const uint8_t* data, uint8_t frameType)
+bool BaseNetwork::writeP25LDU1(const p25::lc::LC& control, const p25::data::LowSpeedData& lsd, const uint8_t* data, p25::defines::FrameType::E frameType)
{
if (m_status != NET_STAT_RUNNING && m_status != NET_STAT_MST_RUNNING)
return false;
@@ -724,6 +726,7 @@ UInt8Array BaseNetwork::readNXDN(bool& ret, uint32_t& frameLength)
///
bool BaseNetwork::writeNXDN(const nxdn::lc::RTCH& lc, const uint8_t* data, const uint32_t len, bool noSequence)
{
+ using namespace nxdn::defines;
if (m_status != NET_STAT_RUNNING && m_status != NET_STAT_MST_RUNNING)
return false;
@@ -740,8 +743,8 @@ bool BaseNetwork::writeNXDN(const nxdn::lc::RTCH& lc, const uint8_t* data, const
}
uint16_t seq = pktSeq(resetSeq);
- if (lc.getMessageType() == nxdn::RTCH_MESSAGE_TYPE_TX_REL ||
- lc.getMessageType() == nxdn::RTCH_MESSAGE_TYPE_TX_REL_EX) {
+ if (lc.getMessageType() == MessageType::RTCH_TX_REL ||
+ lc.getMessageType() == MessageType::RTCH_TX_REL_EX) {
seq = RTP_END_OF_CALL_SEQ;
}
@@ -797,6 +800,7 @@ uint16_t BaseNetwork::pktSeq(bool reset)
///
UInt8Array BaseNetwork::createDMR_Message(uint32_t& length, const uint32_t streamId, const dmr::data::Data& data)
{
+ using namespace dmr::defines;
uint8_t* buffer = new uint8_t[DMR_PACKET_LENGTH + PACKET_PAD];
::memset(buffer, 0x00U, DMR_PACKET_LENGTH + PACKET_PAD);
@@ -821,14 +825,14 @@ UInt8Array BaseNetwork::createDMR_Message(uint32_t& length, const uint32_t strea
buffer[15U] = slotNo == 1U ? 0x00U : 0x80U; // Slot Number
- uint8_t flco = data.getFLCO();
- buffer[15U] |= flco == dmr::FLCO_GROUP ? 0x00U : 0x40U; // Group
+ FLCO::E flco = data.getFLCO();
+ buffer[15U] |= flco == FLCO::GROUP ? 0x00U : 0x40U; // Group
uint8_t dataType = data.getDataType();
- if (dataType == dmr::DT_VOICE_SYNC) {
+ if (dataType == DataType::VOICE_SYNC) {
buffer[15U] |= 0x10U;
}
- else if (dataType == dmr::DT_VOICE) {
+ else if (dataType == DataType::VOICE) {
buffer[15U] |= data.getN();
}
else {
@@ -858,9 +862,10 @@ UInt8Array BaseNetwork::createDMR_Message(uint32_t& length, const uint32_t strea
///
///
///
-void BaseNetwork::createP25_MessageHdr(uint8_t* buffer, uint8_t duid, const p25::lc::LC& control, const p25::data::LowSpeedData& lsd,
- uint8_t frameType)
+void BaseNetwork::createP25_MessageHdr(uint8_t* buffer, p25::defines::DUID::E duid, const p25::lc::LC& control, const p25::data::LowSpeedData& lsd,
+ p25::defines::FrameType::E frameType)
{
+ using namespace p25::defines;
assert(buffer != nullptr);
// construct P25 message header
@@ -889,27 +894,27 @@ void BaseNetwork::createP25_MessageHdr(uint8_t* buffer, uint8_t duid, const p25:
buffer[22U] = duid; // DUID
- if (frameType != p25::P25_FT_TERMINATOR) {
+ if (frameType != FrameType::TERMINATOR) {
buffer[180U] = frameType; // DVM Frame Type
}
// is this the first frame of a call?
- if (frameType == p25::P25_FT_HDU_VALID) {
+ if (frameType == FrameType::HDU_VALID) {
buffer[181U] = control.getAlgId(); // Algorithm ID
uint32_t kid = control.getKId();
__SET_UINT16B(kid, buffer, 182U); // Key ID
// copy MI data
- uint8_t mi[p25::P25_MI_LENGTH_BYTES];
- ::memset(mi, 0x00U, p25::P25_MI_LENGTH_BYTES);
+ uint8_t mi[MI_LENGTH_BYTES];
+ ::memset(mi, 0x00U, MI_LENGTH_BYTES);
control.getMI(mi);
if (m_debug) {
- Utils::dump(1U, "P25 HDU MI written to network", mi, p25::P25_MI_LENGTH_BYTES);
+ Utils::dump(1U, "P25 HDU MI written to network", mi, MI_LENGTH_BYTES);
}
- for (uint8_t i = 0; i < p25::P25_MI_LENGTH_BYTES; i++) {
+ for (uint8_t i = 0; i < MI_LENGTH_BYTES; i++) {
buffer[184U + i] = mi[i]; // Message Indicator
}
}
@@ -925,8 +930,10 @@ void BaseNetwork::createP25_MessageHdr(uint8_t* buffer, uint8_t duid, const p25:
///
///
UInt8Array BaseNetwork::createP25_LDU1Message(uint32_t& length, const p25::lc::LC& control, const p25::data::LowSpeedData& lsd,
- const uint8_t* data, uint8_t frameType)
+ const uint8_t* data, p25::defines::FrameType::E frameType)
{
+ using namespace p25::defines;
+ using namespace p25::dfsi::defines;
assert(data != nullptr);
p25::dfsi::LC dfsiLC = p25::dfsi::LC(control, lsd);
@@ -935,56 +942,56 @@ UInt8Array BaseNetwork::createP25_LDU1Message(uint32_t& length, const p25::lc::L
::memset(buffer, 0x00U, P25_LDU1_PACKET_LENGTH + PACKET_PAD);
// construct P25 message header
- createP25_MessageHdr(buffer, p25::P25_DUID_LDU1, control, lsd, frameType);
+ createP25_MessageHdr(buffer, DUID::LDU1, control, lsd, frameType);
// pack DFSI data
uint32_t count = MSG_HDR_SIZE;
- uint8_t imbe[p25::P25_RAW_IMBE_LENGTH_BYTES];
+ uint8_t imbe[RAW_IMBE_LENGTH_BYTES];
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE1);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE1);
m_audio.decode(data, imbe, 0U);
dfsiLC.encodeLDU1(buffer + 24U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE2);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE2);
m_audio.decode(data, imbe, 1U);
dfsiLC.encodeLDU1(buffer + 46U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE2_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE2_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE3);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE3);
m_audio.decode(data, imbe, 2U);
dfsiLC.encodeLDU1(buffer + 60U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE3_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE3_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE4);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE4);
m_audio.decode(data, imbe, 3U);
dfsiLC.encodeLDU1(buffer + 77U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE4_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE4_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE5);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE5);
m_audio.decode(data, imbe, 4U);
dfsiLC.encodeLDU1(buffer + 94U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE5_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE5_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE6);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE6);
m_audio.decode(data, imbe, 5U);
dfsiLC.encodeLDU1(buffer + 111U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE6_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE6_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE7);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE7);
m_audio.decode(data, imbe, 6U);
dfsiLC.encodeLDU1(buffer + 128U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE7_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE7_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE8);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE8);
m_audio.decode(data, imbe, 7U);
dfsiLC.encodeLDU1(buffer + 145U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE8_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE8_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE9);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE9);
m_audio.decode(data, imbe, 8U);
dfsiLC.encodeLDU1(buffer + 162U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE9_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE9_FRAME_LENGTH_BYTES;
buffer[23U] = count;
@@ -1006,6 +1013,8 @@ UInt8Array BaseNetwork::createP25_LDU1Message(uint32_t& length, const p25::lc::L
UInt8Array BaseNetwork::createP25_LDU2Message(uint32_t& length, const p25::lc::LC& control, const p25::data::LowSpeedData& lsd,
const uint8_t* data)
{
+ using namespace p25::defines;
+ using namespace p25::dfsi::defines;
assert(data != nullptr);
p25::dfsi::LC dfsiLC = p25::dfsi::LC(control, lsd);
@@ -1014,56 +1023,56 @@ UInt8Array BaseNetwork::createP25_LDU2Message(uint32_t& length, const p25::lc::L
::memset(buffer, 0x00U, P25_LDU2_PACKET_LENGTH + PACKET_PAD);
// construct P25 message header
- createP25_MessageHdr(buffer, p25::P25_DUID_LDU2, control, lsd, p25::P25_FT_DATA_UNIT);
+ createP25_MessageHdr(buffer, DUID::LDU2, control, lsd, FrameType::DATA_UNIT);
// pack DFSI data
uint32_t count = MSG_HDR_SIZE;
- uint8_t imbe[p25::P25_RAW_IMBE_LENGTH_BYTES];
+ uint8_t imbe[RAW_IMBE_LENGTH_BYTES];
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE10);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE10);
m_audio.decode(data, imbe, 0U);
dfsiLC.encodeLDU2(buffer + 24U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE11);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE11);
m_audio.decode(data, imbe, 1U);
dfsiLC.encodeLDU2(buffer + 46U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE11_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE11_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE12);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE12);
m_audio.decode(data, imbe, 2U);
dfsiLC.encodeLDU2(buffer + 60U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE12_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE12_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE13);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE13);
m_audio.decode(data, imbe, 3U);
dfsiLC.encodeLDU2(buffer + 77U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE13_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE13_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE14);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE14);
m_audio.decode(data, imbe, 4U);
dfsiLC.encodeLDU2(buffer + 94U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE14_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE14_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE15);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE15);
m_audio.decode(data, imbe, 5U);
dfsiLC.encodeLDU2(buffer + 111U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE15_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE15_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE16);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE16);
m_audio.decode(data, imbe, 6U);
dfsiLC.encodeLDU2(buffer + 128U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE16_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE16_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE17);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE17);
m_audio.decode(data, imbe, 7U);
dfsiLC.encodeLDU2(buffer + 145U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE17_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE17_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE18);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE18);
m_audio.decode(data, imbe, 8U);
dfsiLC.encodeLDU2(buffer + 162U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE18_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE18_FRAME_LENGTH_BYTES;
buffer[23U] = count;
@@ -1084,11 +1093,12 @@ UInt8Array BaseNetwork::createP25_LDU2Message(uint32_t& length, const p25::lc::L
///
UInt8Array BaseNetwork::createP25_TDUMessage(uint32_t& length, const p25::lc::LC& control, const p25::data::LowSpeedData& lsd, const uint8_t controlByte)
{
+ using namespace p25::defines;
uint8_t* buffer = new uint8_t[MSG_HDR_SIZE + PACKET_PAD];
::memset(buffer, 0x00U, MSG_HDR_SIZE + PACKET_PAD);
// construct P25 message header
- createP25_MessageHdr(buffer, p25::P25_DUID_TDU, control, lsd, p25::P25_FT_TERMINATOR);
+ createP25_MessageHdr(buffer, DUID::TDU, control, lsd, FrameType::TERMINATOR);
buffer[14U] = controlByte;
buffer[23U] = MSG_HDR_SIZE;
@@ -1109,6 +1119,7 @@ UInt8Array BaseNetwork::createP25_TDUMessage(uint32_t& length, const p25::lc::LC
///
UInt8Array BaseNetwork::createP25_TSDUMessage(uint32_t& length, const p25::lc::LC& control, const uint8_t* data)
{
+ using namespace p25::defines;
assert(data != nullptr);
uint8_t* buffer = new uint8_t[P25_TSDU_PACKET_LENGTH + PACKET_PAD];
@@ -1116,13 +1127,13 @@ UInt8Array BaseNetwork::createP25_TSDUMessage(uint32_t& length, const p25::lc::L
// construct P25 message header
p25::data::LowSpeedData lsd = p25::data::LowSpeedData();
- createP25_MessageHdr(buffer, p25::P25_DUID_TSDU, control, lsd, p25::P25_FT_TERMINATOR);
+ createP25_MessageHdr(buffer, DUID::TSDU, control, lsd, FrameType::TERMINATOR);
// pack raw P25 TSDU bytes
uint32_t count = MSG_HDR_SIZE;
- ::memcpy(buffer + 24U, data, p25::P25_TSDU_FRAME_LENGTH_BYTES);
- count += p25::P25_TSDU_FRAME_LENGTH_BYTES;
+ ::memcpy(buffer + 24U, data, P25_TSDU_FRAME_LENGTH_BYTES);
+ count += P25_TSDU_FRAME_LENGTH_BYTES;
buffer[23U] = count;
@@ -1145,6 +1156,7 @@ UInt8Array BaseNetwork::createP25_TSDUMessage(uint32_t& length, const p25::lc::L
UInt8Array BaseNetwork::createP25_PDUMessage(uint32_t& length, const p25::data::DataHeader& header,
const uint8_t currentBlock, const uint8_t* data, const uint32_t len)
{
+ using namespace p25::defines;
assert(data != nullptr);
uint8_t* buffer = new uint8_t[DATA_PACKET_LENGTH];
@@ -1159,7 +1171,7 @@ UInt8Array BaseNetwork::createP25_PDUMessage(uint32_t& length, const p25::data::
::memcpy(buffer + 0U, TAG_P25_DATA, 4U);
buffer[4U] = header.getSAP(); // Service Access Point
- if (header.getFormat() == p25::PDU_FMT_CONFIRMED) {
+ if (header.getFormat() == PDUFormatType::CONFIRMED) {
buffer[4U] |= 0x80U;
}
@@ -1170,7 +1182,7 @@ UInt8Array BaseNetwork::createP25_PDUMessage(uint32_t& length, const p25::data::
buffer[20U] = header.getBlocksToFollow(); // Blocks To Follow
buffer[21U] = currentBlock; // Current Block
- buffer[22U] = p25::P25_DUID_PDU; // DUID
+ buffer[22U] = DUID::PDU; // DUID
// pack raw P25 PDU bytes
uint32_t count = MSG_HDR_SIZE;
diff --git a/src/common/network/BaseNetwork.h b/src/common/network/BaseNetwork.h
index 9ca7c9bf..4f1364e7 100644
--- a/src/common/network/BaseNetwork.h
+++ b/src/common/network/BaseNetwork.h
@@ -196,7 +196,7 @@ namespace network
virtual UInt8Array readP25(bool& ret, uint32_t& frameLength);
/// Writes P25 LDU1 frame data to the network.
virtual bool writeP25LDU1(const p25::lc::LC& control, const p25::data::LowSpeedData& lsd, const uint8_t* data,
- uint8_t frameType);
+ p25::defines::FrameType::E frameType);
/// Writes P25 LDU2 frame data to the network.
virtual bool writeP25LDU2(const p25::lc::LC& control, const p25::data::LowSpeedData& lsd, const uint8_t* data);
/// Writes P25 TDU frame data to the network.
@@ -269,12 +269,12 @@ namespace network
UInt8Array createDMR_Message(uint32_t& length, const uint32_t streamId, const dmr::data::Data& data);
/// Creates an P25 frame message header.
- void createP25_MessageHdr(uint8_t* buffer, uint8_t duid, const p25::lc::LC& control, const p25::data::LowSpeedData& lsd,
- uint8_t frameType = p25::P25_FT_DATA_UNIT);
+ void createP25_MessageHdr(uint8_t* buffer, p25::defines::DUID::E duid, const p25::lc::LC& control, const p25::data::LowSpeedData& lsd,
+ p25::defines::FrameType::E frameType = p25::defines::FrameType::DATA_UNIT);
/// Creates an P25 LDU1 frame message.
UInt8Array createP25_LDU1Message(uint32_t& length, const p25::lc::LC& control, const p25::data::LowSpeedData& lsd,
- const uint8_t* data, uint8_t frameType);
+ const uint8_t* data, p25::defines::FrameType::E frameType);
/// Creates an P25 LDU2 frame message.
UInt8Array createP25_LDU2Message(uint32_t& length, const p25::lc::LC& control, const p25::data::LowSpeedData& lsd,
const uint8_t* data);
diff --git a/src/common/nxdn/NXDNDefines.h b/src/common/nxdn/NXDNDefines.h
index f0fc42a9..e77f22c9 100644
--- a/src/common/nxdn/NXDNDefines.h
+++ b/src/common/nxdn/NXDNDefines.h
@@ -17,250 +17,363 @@
#include "common/Defines.h"
+// Shorthand macro to nxdn::defines -- keeps source code that doesn't use "using" concise
+#define NXDDEF nxdn::defines
namespace nxdn
{
- // ---------------------------------------------------------------------------
- // Constants
- // ---------------------------------------------------------------------------
-
- const uint32_t NXDN_FRAME_LENGTH_BITS = 384U;
- const uint32_t NXDN_FRAME_LENGTH_BYTES = NXDN_FRAME_LENGTH_BITS / 8U;
- const uint32_t NXDN_FRAME_LENGTH_SYMBOLS = NXDN_FRAME_LENGTH_BITS / 2U;
-
- const uint32_t NXDN_FSW_LENGTH_BITS = 20U;
- const uint32_t NXDN_FSW_LENGTH_SYMBOLS = NXDN_FSW_LENGTH_BITS / 2U;
-
- const uint8_t NXDN_FSW_BYTES[] = { 0xCDU, 0xF5U, 0x90U };
- const uint8_t NXDN_FSW_BYTES_MASK[] = { 0xFFU, 0xFFU, 0xF0U };
- const uint32_t NXDN_FSW_BYTES_LENGTH = 3U;
-
- const uint8_t NXDN_PREAMBLE[] = { 0x57U, 0x75U, 0xFDU };
-
- const uint32_t NXDN_LICH_LENGTH_BITS = 16U;
- const uint32_t NXDN_LICH_LENGTH_BYTES = NXDN_LICH_LENGTH_BITS / 8U;
-
- const uint32_t NXDN_SACCH_FEC_LENGTH_BITS = 60U; // Puncture and Interleave Length
- const uint32_t NXDN_SACCH_FEC_LENGTH_BYTES = (NXDN_SACCH_FEC_LENGTH_BITS / 8U) + 1U;
- const uint32_t NXDN_SACCH_FEC_CONV_LENGTH_BITS = 72U; // Convolution Length
- const uint32_t NXDN_SACCH_FEC_CONV_LENGTH_BYTES = NXDN_SACCH_FEC_CONV_LENGTH_BITS / 8U;
- const uint32_t NXDN_SACCH_CRC_LENGTH_BITS = 36U; // Data + CRC-6 + 4-bit NULL
- const uint32_t NXDN_SACCH_CRC_LENGTH_BYTES = (NXDN_SACCH_CRC_LENGTH_BITS / 8U) + 1U;
- const uint32_t NXDN_SACCH_LENGTH_BITS = 26U;
-
- const uint32_t NXDN_FACCH1_FEC_LENGTH_BITS = 144U; // Puncture and Interleave Length
- const uint32_t NXDN_FACCH1_FEC_LENGTH_BYTES = NXDN_FACCH1_FEC_LENGTH_BITS / 8U;
- const uint32_t NXDN_FACCH1_FEC_CONV_LENGTH_BITS = 192U; // Convolution Length
- const uint32_t NXDN_FACCH1_FEC_CONV_LENGTH_BYTES = NXDN_FACCH1_FEC_CONV_LENGTH_BITS / 8U;
- const uint32_t NXDN_FACCH1_CRC_LENGTH_BITS = 96U; // Data + CRC-12 + 4-bit NULL
- const uint32_t NXDN_FACCH1_CRC_LENGTH_BYTES = NXDN_FACCH1_CRC_LENGTH_BITS / 8U;
- const uint32_t NXDN_FACCH1_LENGTH_BITS = 80U;
-
- const uint32_t NXDN_UDCH_FEC_LENGTH_BITS = 348U; // Puncture and Interleave Length
- const uint32_t NXDN_UDCH_FEC_LENGTH_BYTES = (NXDN_UDCH_FEC_LENGTH_BITS / 8U) + 1U;
- const uint32_t NXDN_UDCH_FEC_CONV_LENGTH_BITS = 406U; // Convolution Length
- const uint32_t NXDN_UDCH_FEC_CONV_LENGTH_BYTES = (NXDN_UDCH_FEC_CONV_LENGTH_BITS / 8U) + 1U;
- const uint32_t NXDN_UDCH_CRC_LENGTH_BITS = 203U; // Data + CRC-15 + 4-bit NULL
- const uint32_t NXDN_UDCH_CRC_LENGTH_BYTES = (NXDN_UDCH_CRC_LENGTH_BITS / 8U) + 1U;
- const uint32_t NXDN_UDCH_LENGTH_BITS = 184U;
-
- const uint32_t NXDN_CAC_FEC_LENGTH_BITS = 300U; // Puncture and Interleave Length
- const uint32_t NXDN_CAC_FEC_LENGTH_BYTES = (NXDN_CAC_FEC_LENGTH_BITS / 8U) + 1U;
- const uint32_t NXDN_CAC_FEC_CONV_LENGTH_BITS = 350U; // Convolution Length
- const uint32_t NXDN_CAC_FEC_CONV_LENGTH_BYTES = (NXDN_CAC_FEC_CONV_LENGTH_BITS / 8U) + 1U;
- const uint32_t NXDN_CAC_CRC_LENGTH_BITS = 175U; // Data + CRC-16 + 4-bit NULL
- const uint32_t NXDN_CAC_CRC_LENGTH_BYTES = (NXDN_CAC_CRC_LENGTH_BITS / 8U) + 1U;
- const uint32_t NXDN_CAC_LENGTH_BITS = 155U;
- const uint32_t NXDN_CAC_E_POST_FIELD_BITS = 24U;
-
- const uint32_t NXDN_CAC_IN_FEC_LENGTH_BITS = 252U; // Puncture and Interleave Length
- const uint32_t NXDN_CAC_IN_FEC_LENGTH_BYTES = (NXDN_CAC_IN_FEC_LENGTH_BITS / 8U) + 1U;
- const uint32_t NXDN_CAC_LONG_FEC_CONV_LENGTH_BITS = 312U; // Convolution Length
- const uint32_t NXDN_CAC_LONG_FEC_CONV_LENGTH_BYTES = NXDN_CAC_LONG_FEC_CONV_LENGTH_BITS / 8U;
- const uint32_t NXDN_CAC_LONG_CRC_LENGTH_BITS = 156U; // Data + CRC-16 + 4-bit NULL
- const uint32_t NXDN_CAC_LONG_LENGTH_BITS = 136U;
- const uint32_t NXDN_CAC_SHORT_CRC_LENGTH_BITS = 126U; // Data + CRC-16 + 4-bit NULL
- const uint32_t NXDN_CAC_SHORT_LENGTH_BITS = 106U;
-
- const uint32_t NXDN_RTCH_LC_LENGTH_BITS = 176U;
- const uint32_t NXDN_RTCH_LC_LENGTH_BYTES = (NXDN_RTCH_LC_LENGTH_BITS / 8U);
-
- const uint32_t NXDN_RCCH_LC_LENGTH_BITS = 144U;
- const uint32_t NXDN_RCCH_LC_LENGTH_BYTES = (NXDN_RCCH_LC_LENGTH_BITS / 8U);
- const uint32_t NXDN_RCCH_CAC_LC_LONG_LENGTH_BITS = 128U;
- const uint32_t NXDN_RCCH_CAC_LC_SHORT_LENGTH_BITS = 96U;
-
- const uint32_t NXDN_FSW_LICH_SACCH_LENGTH_BITS = NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS;
- const uint32_t NXDN_FSW_LICH_SACCH_LENGTH_BYTES = NXDN_FSW_LICH_SACCH_LENGTH_BITS / 8U;
-
- const uint8_t NXDN_LICH_RFCT_RCCH = 0U;
- const uint8_t NXDN_LICH_RFCT_RTCH = 1U;
- const uint8_t NXDN_LICH_RFCT_RDCH = 2U;
- const uint8_t NXDN_LICH_RFCT_RTCH_C = 3U;
-
- const uint8_t NXDN_LICH_CAC_OUTBOUND = 0U;
- const uint8_t NXDN_LICH_CAC_INBOUND_LONG = 1U;
- const uint8_t NXDN_LICH_CAC_INBOUND_SHORT = 3U;
-
- const uint8_t NXDN_LICH_USC_SACCH_NS = 0U;
- const uint8_t NXDN_LICH_USC_UDCH = 1U;
- const uint8_t NXDN_LICH_USC_SACCH_SS = 2U;
- const uint8_t NXDN_LICH_USC_SACCH_SS_IDLE = 3U;
-
- const uint8_t NXDN_LICH_DATA_NORMAL = 0U;
- const uint8_t NXDN_LICH_DATA_IDLE = 1U;
- const uint8_t NXDN_LICH_DATA_COMMON = 2U;
-
- const uint8_t NXDN_LICH_STEAL_NONE = 3U;
- const uint8_t NXDN_LICH_STEAL_FACCH1_2 = 2U;
- const uint8_t NXDN_LICH_STEAL_FACCH1_1 = 1U;
- const uint8_t NXDN_LICH_STEAL_FACCH = 0U;
-
- const uint8_t NXDN_SR_RCCH_SINGLE = 0x00U;
- const uint8_t NXDN_SR_RCCH_DUAL = 0x01U;
- const uint8_t NXDN_SR_RCCH_HEAD_SINGLE = 0x02U;
- const uint8_t NXDN_SR_RCCH_HEAD_DUAL = 0x03U;
-
- const uint8_t NXDN_SR_SINGLE = 0U;
- const uint8_t NXDN_SR_4_4 = 0U;
- const uint8_t NXDN_SR_3_4 = 1U;
- const uint8_t NXDN_SR_2_4 = 2U;
- const uint8_t NXDN_SR_1_4 = 3U;
-
- const uint8_t SACCH_IDLE[] = { 0x10U, 0x00U, 0x00U };
-
- const uint32_t DEFAULT_SILENCE_THRESHOLD = 14U;
- const uint32_t DEFAULT_FRAME_LOSS_THRESHOLD = 4U;
- const uint32_t MAX_NXDN_VOICE_ERRORS = 144U;
- const uint32_t MAX_NXDN_VOICE_ERRORS_STEAL = 94U;
-
- const uint8_t NXDN_NULL_AMBE[] = { 0xB1U, 0xA8U, 0x22U, 0x25U, 0x6BU, 0xD1U, 0x6CU, 0xCFU, 0x67U };
-
- const uint8_t NXDN_CALLSIGN_LENGTH_BYTES = 8U;
-
- const uint32_t NXDN_MI_LENGTH_BYTES = 8U;
- const uint32_t NXDN_PCKT_INFO_LENGTH_BYTES = 3U;
-
- const uint8_t NXDN_CIPHER_TYPE_NONE = 0x00U;
-
- const uint8_t DATA_RSP_CLASS_ACK = 0x00U;
- const uint8_t DATA_RSP_CLASS_ACK_S = 0x01U;
- const uint8_t DATA_RSP_CLASS_NACK = 0x03U;
-
- const uint8_t NXDN_LOC_CAT_GLOBAL = 0x00U;
- const uint8_t NXDN_LOC_CAT_LOCAL = 0x01U;
- const uint8_t NXDN_LOC_CAT_REGIONAL = 0x02U;
-
- const uint8_t NXDN_CAUSE_RSRC_NOT_AVAIL_NETWORK = 0x51U;
- const uint8_t NXDN_CAUSE_RSRC_NOT_AVAIL_TEMP = 0x52U;
- const uint8_t NXDN_CAUSE_RSRC_NOT_AVAIL_QUEUED = 0x53U;
- const uint8_t NXDN_CAUSE_SVC_UNAVAILABLE = 0x06U;
- const uint8_t NXDN_CAUSE_PROC_ERROR = 0x70U;
- const uint8_t NXDN_CAUSE_PROC_ERROR_UNDEF = 0x71U;
-
- const uint8_t NXDN_CAUSE_MM_REG_ACCEPTED = 0x01U;
- const uint8_t NXDN_CAUSE_MM_LOC_ACPT_GRP_FAIL = 0x04U;
- const uint8_t NXDN_CAUSE_MM_LOC_ACPT_GRP_REFUSE = 0x04U;
- const uint8_t NXDN_CAUSE_MM_REG_FAILED = 0x06U;
- const uint8_t NXDN_CAUSE_MM_REG_REFUSED = 0x08U;
-
- const uint8_t NXDN_CAUSE_VD_ACCEPTED = 0x10U;
- const uint8_t NXDN_CAUSE_VD_GRP_NOT_PERM = 0x11U;
- const uint8_t NXDN_CAUSE_VD_REQ_UNIT_NOT_PERM = 0x12U;
- const uint8_t NXDN_CAUSE_VD_TGT_UNIT_NOT_PERM = 0x13U;
- const uint8_t NXDN_CAUSE_VD_REQ_UNIT_NOT_REG = 0x1CU;
- const uint8_t NXDN_CAUSE_VD_QUE_CHN_RESOURCE_NOT_AVAIL = 0x30U;
- const uint8_t NXDN_CAUSE_VD_QUE_TGT_UNIT_BUSY = 0x38U;
- const uint8_t NXDN_CAUSE_VD_QUE_GRP_BUSY = 0x39U;
-
- const uint8_t NXDN_CAUSE_SS_ACK_R = 0x01U;
- const uint8_t NXDN_CAUSE_SS_ACK_S = 0x02U;
- const uint8_t NXDN_CAUSE_SS_NACK = 0x08U;
- const uint8_t NXDN_CAUSE_SS_ACCEPTED = 0x10U;
- const uint8_t NXDN_CAUSE_SS_GRP_NOT_PERM = 0x11U;
- const uint8_t NXDN_CAUSE_SS_REQ_UNIT_NOT_PERM = 0x12U;
- const uint8_t NXDN_CAUSE_SS_TGT_UNIT_NOT_PERM = 0x13U;
- const uint8_t NXDN_CAUSE_SS_REQ_UNIT_NOT_REG = 0x1CU;
-
- const uint8_t NXDN_CAUSE_DREQ_USER = 0x10U;
- const uint8_t NXDN_CAUSE_DREQ_OTHER = 0x1FU;
-
- const uint8_t NXDN_CAUSE_DISC_USER = 0x10U;
- const uint8_t NXDN_CAUSE_DISC_OTHER = 0x1FU;
-
- const uint8_t NXDN_SIF1_DATA_CALL_SVC = 0x01U;
- const uint8_t NXDN_SIF1_VOICE_CALL_SVC = 0x02U;
- const uint8_t NXDN_SIF1_COMPOSITE_CONTROL = 0x04U;
- const uint8_t NXDN_SIF1_AUTH_SVC = 0x08U;
- const uint8_t NXDN_SIF1_GRP_REG_SVC = 0x10U;
- const uint8_t NXDN_SIF1_LOC_REG_SVC = 0x20U;
- const uint8_t NXDN_SIF1_MULTI_SYSTEM_SVC = 0x40U;
- const uint8_t NXDN_SIF1_MULTI_SITE_SVC = 0x80U;
-
- const uint8_t NXDN_SIF2_IP_NETWORK = 0x10U;
- const uint8_t NXDN_SIF2_PSTN_NETWORK = 0x20U;
- const uint8_t NXDN_SIF2_STATUS_CALL_REM_CTRL = 0x40U;
- const uint8_t NXDN_SIF2_SHORT_DATA_CALL_SVC = 0x80U;
-
- const uint8_t NXDN_CH_ACCESS_STEP_SYS_DEFINED = 0x00U;
- const uint8_t NXDN_CH_ACCESS_STEP_1DOT25K = 0x02U;
- const uint8_t NXDN_CH_ACCESS_STEP_3DOT125K = 0x03U;
-
- const uint8_t NXDN_CH_ACCESS_BASE_FREQ_100 = 0x01U;
- const uint8_t NXDN_CH_ACCESS_BASE_FREQ_330 = 0x02U;
- const uint8_t NXDN_CH_ACCESS_BASE_FREQ_400 = 0x03U;
- const uint8_t NXDN_CH_ACCESS_BASE_FREQ_750 = 0x04U;
- const uint8_t NXDN_CH_ACCESS_BASE_FREQ_SYS_DEFINED = 0x07U;
-
- // Common Message Types
- const uint8_t MESSAGE_TYPE_IDLE = 0x10U; // IDLE - Idle
- const uint8_t MESSAGE_TYPE_DISC = 0x11U; // DISC - Disconnect
- const uint8_t MESSAGE_TYPE_DST_ID_INFO = 0x17U; // DST_ID_INFO - Digital Station ID
- const uint8_t MESSAGE_TYPE_SRV_INFO = 0x19U; // SRV_INFO - Service Information
- const uint8_t MESSAGE_TYPE_CCH_INFO = 0x1AU; // CCH_INFO - Control Channel Information
- const uint8_t MESSAGE_TYPE_ADJ_SITE_INFO = 0x1BU; // ADJ_SITE_INFO - Adjacent Site Information
-
- // Traffic Channel Message Types
- const uint8_t RTCH_MESSAGE_TYPE_VCALL = 0x01U; // VCALL - Voice Call
-#define NXDN_RTCH_MSG_TYPE_VCALL "VCALL (Voice Call)"
-#define NXDN_RTCH_MSG_TYPE_VCALL_RESP "VCALL_RESP (Voice Call Response)"
- const uint8_t RTCH_MESSAGE_TYPE_VCALL_IV = 0x03U; // VCALL_IV - Voice Call Initialization Vector
- const uint8_t RTCH_MESSAGE_TYPE_TX_REL_EX = 0x07U; // TX_REL_EX - Transmission Release Extension
- const uint8_t RTCH_MESSAGE_TYPE_TX_REL = 0x08U; // TX_REL - Transmission Release
-#define NXDN_RTCH_MSG_TYPE_TX_REL "TX_REL (Transmission Release)"
- const uint8_t RTCH_MESSAGE_TYPE_DCALL_HDR = 0x09U; // DCALL - Data Call (Header)
-#define NXDN_RTCH_MSG_TYPE_DCALL_HDR "DCALL (Data Call Header)"
- const uint8_t RTCH_MESSAGE_TYPE_DCALL_DATA = 0x0BU; // DCALL - Data Call (User Data Format)
- const uint8_t RTCH_MESSAGE_TYPE_DCALL_ACK = 0x0CU; // DCALL_ACK - Data Call Acknowledge
- const uint8_t RTCH_MESSAGE_TYPE_HEAD_DLY = 0x0FU; // HEAD_DLY - Header Delay
- const uint8_t RTCH_MESSAGE_TYPE_SDCALL_REQ_HDR = 0x38U; // SDCALL_REQ - Short Data Call Request (Header)
- const uint8_t RTCH_MESSAGE_TYPE_SDCALL_REQ_DATA = 0x39U; // SDCALL_REQ - Short Data Call Request (User Data Format)
- const uint8_t RTCH_MESSAGE_TYPE_SDCALL_IV = 0x3AU; // SDCALL_IV - Short Data Call Initialization Vector
- const uint8_t RTCH_MESSAGE_TYPE_SDCALL_RESP = 0x3BU; // SDCALL_RESP - Short Data Call Response
-
- // Control Channel Message Types
- const uint8_t RCCH_MESSAGE_TYPE_VCALL_CONN = 0x03U; // VCALL_CONN - Voice Call Connection Request (ISP) / Voice Call Connection Response (OSP)
- const uint8_t RCCH_MESSAGE_TYPE_VCALL_ASSGN = 0x04U; // VCALL_ASSGN - Voice Call Assignment
- const uint8_t RCCH_MESSAGE_TYPE_DCALL_ASSGN = 0x14U; // DCALL_ASSGN - Data Call Assignment
- const uint8_t RCCH_MESSAGE_TYPE_SITE_INFO = 0x18U; // SITE_INFO - Site Information
- const uint8_t RCCH_MESSAGE_TYPE_REG = 0x20U; // REG - Registration Request (ISP) / Registration Response (OSP)
- const uint8_t RCCH_MESSAGE_TYPE_REG_C = 0x22U; // REG_C - Registration Clear Request (ISP) / Registration Clear Response (OSP)
- const uint8_t RCCH_MESSAGE_TYPE_REG_COMM = 0x23U; // REG_COMM - Registration Command
- const uint8_t RCCH_MESSAGE_TYPE_GRP_REG = 0x24U; // GRP_REG - Group Registration Request (ISP) / Group Registration Response (OSP)
- const uint8_t RCCH_MESSAGE_TYPE_PROP_FORM = 0x3FU; // PROP_FORM - Proprietary Form
-
- // Call Types
- const uint8_t CALL_TYPE_BROADCAST = 0x00U;
- const uint8_t CALL_TYPE_CONFERENCE = 0x01U;
- const uint8_t CALL_TYPE_UNSPECIFIED = 0x02U;
- const uint8_t CALL_TYPE_INDIVIDUAL = 0x04U;
- const uint8_t CALL_TYPE_INTERCONNECT = 0x06U;
- const uint8_t CALL_TYPE_SPEED_DIAL = 0x07U;
-
- // Transmission Mode
- const uint8_t TRANSMISSION_MODE_4800 = 0x00U;
- const uint8_t TRANSMISSION_MODE_9600 = 0x02U;
- const uint8_t TRANSMISSION_MODE_9600_EFR = 0x03U; // should never be used on data calls
-
+ namespace defines
+ {
+ // ---------------------------------------------------------------------------
+ // Constants
+ // ---------------------------------------------------------------------------
+
+ const uint32_t NXDN_FRAME_LENGTH_BITS = 384U;
+ const uint32_t NXDN_FRAME_LENGTH_BYTES = NXDN_FRAME_LENGTH_BITS / 8U;
+ const uint32_t NXDN_FRAME_LENGTH_SYMBOLS = NXDN_FRAME_LENGTH_BITS / 2U;
+
+ const uint32_t NXDN_FSW_LENGTH_BITS = 20U;
+ const uint32_t NXDN_FSW_LENGTH_SYMBOLS = NXDN_FSW_LENGTH_BITS / 2U;
+
+ const uint8_t NXDN_FSW_BYTES[] = { 0xCDU, 0xF5U, 0x90U };
+ const uint8_t NXDN_FSW_BYTES_MASK[] = { 0xFFU, 0xFFU, 0xF0U };
+ const uint32_t NXDN_FSW_BYTES_LENGTH = 3U;
+
+ const uint8_t NXDN_PREAMBLE[] = { 0x57U, 0x75U, 0xFDU };
+
+ const uint32_t NXDN_LICH_LENGTH_BITS = 16U;
+ const uint32_t NXDN_LICH_LENGTH_BYTES = NXDN_LICH_LENGTH_BITS / 8U;
+
+ const uint32_t NXDN_SACCH_FEC_LENGTH_BITS = 60U; // Puncture and Interleave Length
+ const uint32_t NXDN_SACCH_FEC_LENGTH_BYTES = (NXDN_SACCH_FEC_LENGTH_BITS / 8U) + 1U;
+ const uint32_t NXDN_SACCH_FEC_CONV_LENGTH_BITS = 72U; // Convolution Length
+ const uint32_t NXDN_SACCH_FEC_CONV_LENGTH_BYTES = NXDN_SACCH_FEC_CONV_LENGTH_BITS / 8U;
+ const uint32_t NXDN_SACCH_CRC_LENGTH_BITS = 36U; // Data + CRC-6 + 4-bit NULL
+ const uint32_t NXDN_SACCH_CRC_LENGTH_BYTES = (NXDN_SACCH_CRC_LENGTH_BITS / 8U) + 1U;
+ const uint32_t NXDN_SACCH_LENGTH_BITS = 26U;
+
+ const uint32_t NXDN_FACCH1_FEC_LENGTH_BITS = 144U; // Puncture and Interleave Length
+ const uint32_t NXDN_FACCH1_FEC_LENGTH_BYTES = NXDN_FACCH1_FEC_LENGTH_BITS / 8U;
+ const uint32_t NXDN_FACCH1_FEC_CONV_LENGTH_BITS = 192U; // Convolution Length
+ const uint32_t NXDN_FACCH1_FEC_CONV_LENGTH_BYTES = NXDN_FACCH1_FEC_CONV_LENGTH_BITS / 8U;
+ const uint32_t NXDN_FACCH1_CRC_LENGTH_BITS = 96U; // Data + CRC-12 + 4-bit NULL
+ const uint32_t NXDN_FACCH1_CRC_LENGTH_BYTES = NXDN_FACCH1_CRC_LENGTH_BITS / 8U;
+ const uint32_t NXDN_FACCH1_LENGTH_BITS = 80U;
+
+ const uint32_t NXDN_UDCH_FEC_LENGTH_BITS = 348U; // Puncture and Interleave Length
+ const uint32_t NXDN_UDCH_FEC_LENGTH_BYTES = (NXDN_UDCH_FEC_LENGTH_BITS / 8U) + 1U;
+ const uint32_t NXDN_UDCH_FEC_CONV_LENGTH_BITS = 406U; // Convolution Length
+ const uint32_t NXDN_UDCH_FEC_CONV_LENGTH_BYTES = (NXDN_UDCH_FEC_CONV_LENGTH_BITS / 8U) + 1U;
+ const uint32_t NXDN_UDCH_CRC_LENGTH_BITS = 203U; // Data + CRC-15 + 4-bit NULL
+ const uint32_t NXDN_UDCH_CRC_LENGTH_BYTES = (NXDN_UDCH_CRC_LENGTH_BITS / 8U) + 1U;
+ const uint32_t NXDN_UDCH_LENGTH_BITS = 184U;
+
+ const uint32_t NXDN_CAC_FEC_LENGTH_BITS = 300U; // Puncture and Interleave Length
+ const uint32_t NXDN_CAC_FEC_LENGTH_BYTES = (NXDN_CAC_FEC_LENGTH_BITS / 8U) + 1U;
+ const uint32_t NXDN_CAC_FEC_CONV_LENGTH_BITS = 350U; // Convolution Length
+ const uint32_t NXDN_CAC_FEC_CONV_LENGTH_BYTES = (NXDN_CAC_FEC_CONV_LENGTH_BITS / 8U) + 1U;
+ const uint32_t NXDN_CAC_CRC_LENGTH_BITS = 175U; // Data + CRC-16 + 4-bit NULL
+ const uint32_t NXDN_CAC_CRC_LENGTH_BYTES = (NXDN_CAC_CRC_LENGTH_BITS / 8U) + 1U;
+ const uint32_t NXDN_CAC_LENGTH_BITS = 155U;
+ const uint32_t NXDN_CAC_E_POST_FIELD_BITS = 24U;
+
+ const uint32_t NXDN_CAC_IN_FEC_LENGTH_BITS = 252U; // Puncture and Interleave Length
+ const uint32_t NXDN_CAC_IN_FEC_LENGTH_BYTES = (NXDN_CAC_IN_FEC_LENGTH_BITS / 8U) + 1U;
+ const uint32_t NXDN_CAC_LONG_FEC_CONV_LENGTH_BITS = 312U; // Convolution Length
+ const uint32_t NXDN_CAC_LONG_FEC_CONV_LENGTH_BYTES = NXDN_CAC_LONG_FEC_CONV_LENGTH_BITS / 8U;
+ const uint32_t NXDN_CAC_LONG_CRC_LENGTH_BITS = 156U; // Data + CRC-16 + 4-bit NULL
+ const uint32_t NXDN_CAC_LONG_LENGTH_BITS = 136U;
+ const uint32_t NXDN_CAC_SHORT_CRC_LENGTH_BITS = 126U; // Data + CRC-16 + 4-bit NULL
+ const uint32_t NXDN_CAC_SHORT_LENGTH_BITS = 106U;
+
+ const uint32_t NXDN_RTCH_LC_LENGTH_BITS = 176U;
+ const uint32_t NXDN_RTCH_LC_LENGTH_BYTES = (NXDN_RTCH_LC_LENGTH_BITS / 8U);
+
+ const uint32_t NXDN_RCCH_LC_LENGTH_BITS = 144U;
+ const uint32_t NXDN_RCCH_LC_LENGTH_BYTES = (NXDN_RCCH_LC_LENGTH_BITS / 8U);
+ const uint32_t NXDN_RCCH_CAC_LC_LONG_LENGTH_BITS = 128U;
+ const uint32_t NXDN_RCCH_CAC_LC_SHORT_LENGTH_BITS = 96U;
+
+ const uint32_t NXDN_FSW_LICH_SACCH_LENGTH_BITS = NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS;
+ const uint32_t NXDN_FSW_LICH_SACCH_LENGTH_BYTES = NXDN_FSW_LICH_SACCH_LENGTH_BITS / 8U;
+
+ const uint8_t SACCH_IDLE[] = { 0x10U, 0x00U, 0x00U };
+
+ const uint8_t NULL_AMBE[] = { 0xB1U, 0xA8U, 0x22U, 0x25U, 0x6BU, 0xD1U, 0x6CU, 0xCFU, 0x67U };
+
+ const uint8_t CALLSIGN_LENGTH_BYTES = 8U;
+
+ const uint32_t MI_LENGTH_BYTES = 8U;
+ const uint32_t PCKT_INFO_LENGTH_BYTES = 3U;
+
+ /** Thresholds */
+ const uint32_t DEFAULT_SILENCE_THRESHOLD = 14U;
+ const uint32_t DEFAULT_FRAME_LOSS_THRESHOLD = 4U;
+ const uint32_t MAX_NXDN_VOICE_ERRORS = 144U;
+ const uint32_t MAX_NXDN_VOICE_ERRORS_STEAL = 94U;
+
+ ///
+ /// Link Information Channel - RF Channel Type
+ ///
+ namespace RFChannelType {
+ // RF Channel Type Enumeration
+ enum E : uint8_t {
+ RCCH = 0U, // Control Channel
+ RTCH = 1U, // Traffic Channel
+ RDCH = 2U, // Data Channel
+ RTCH_C = 3U // Composite Control/Traffic Channel
+ };
+ }
+
+ ///
+ /// Link Information Channel - Functional Channel Type
+ ///
+ namespace FuncChannelType {
+ // Functional Channel Type Enumeration
+ enum E : uint8_t {
+ // Common Access Channel
+ CAC_OUTBOUND = 0U, // Common Access Channel - Outbound
+ CAC_INBOUND_LONG = 1U, // Common Access Channel - Inbound Long
+ CAC_INBOUND_SHORT = 3U, // Common Access Channel - Inbound Short
+
+ // Slow Associated Control Channel / User Data Channel
+ USC_SACCH_NS = 0U, //
+ USC_UDCH = 1U, //
+ USC_SACCH_SS = 2U, //
+ USC_SACCH_SS_IDLE = 3U //
+ };
+ }
+
+ ///
+ /// Link Information Channel - Channel Options
+ ///
+ namespace ChOption {
+ // Channel Option(s) Enumeration
+ enum E : uint8_t {
+ DATA_NORMAL = 0U, //
+ DATA_IDLE = 1U, //
+ DATA_COMMON = 2U, //
+
+ STEAL_NONE = 3U, //
+ STEAL_FACCH1_2 = 2U, //
+ STEAL_FACCH1_1 = 1U, //
+ STEAL_FACCH = 0U //
+ };
+ }
+
+ ///
+ /// Common Access Channel - Structure
+ ///
+ namespace ChStructure {
+ // Channel Structure Enumeration
+ enum E : uint8_t {
+ SR_RCCH_SINGLE = 0x00U, //
+ SR_RCCH_DUAL = 0x01U, //
+ SR_RCCH_HEAD_SINGLE = 0x02U, //
+ SR_RCCH_HEAD_DUAL = 0x03U, //
+
+ SR_SINGLE = 0U, //
+ SR_4_4 = 0U, //
+ SR_3_4 = 1U, //
+ SR_2_4 = 2U, //
+ SR_1_4 = 3U //
+ };
+ }
+
+ /** Encryption Algorithms */
+ const uint8_t CIPHER_TYPE_NONE = 0x00U; // Unencrypted
+
+ ///
+ /// Location Category
+ ///
+ namespace LocationCategory {
+ // Location Category Enumeration
+ enum E : uint8_t {
+ GLOBAL = 0x00U, // Global
+ LOCAL = 0x01U, // Local
+ REGIONAL = 0x02U // Regional
+ };
+ }
+
+ ///
+ /// Data Response Class
+ ///
+ namespace PDUResponseClass {
+ enum : uint8_t
+ {
+ ACK = 0x00U, // Acknowledge
+ ACK_S = 0x01U, //
+ NACK = 0x03U // Negative Acknowledge
+ };
+ }
+
+ ///
+ /// Causes
+ ///
+ namespace CauseResponse {
+ enum : uint8_t {
+ RSRC_NOT_AVAIL_NETWORK = 0x51U, // Network Resource Not Available
+ RSRC_NOT_AVAIL_TEMP = 0x52U, // Resource Temporarily Not Available
+ RSRC_NOT_AVAIL_QUEUED = 0x53U, // Resource Queued Not Available
+ SVC_UNAVAILABLE = 0x06U, // Service Unavailable
+ PROC_ERROR = 0x70U, //
+ PROC_ERROR_UNDEF = 0x71U, //
+
+ MM_REG_ACCEPTED = 0x01U, // Registration Accepted
+ MM_LOC_ACPT_GRP_FAIL = 0x04U, // Location Accepted / Group Failed
+ MM_LOC_ACPT_GRP_REFUSE = 0x04U, // Location Accepted / Group Refused
+ MM_REG_FAILED = 0x06U, // Registration Failed
+ MM_REG_REFUSED = 0x08U, // Registration Refused
+
+ VD_ACCEPTED = 0x10U, //
+ VD_GRP_NOT_PERM = 0x11U, //
+ VD_REQ_UNIT_NOT_PERM = 0x12U, //
+ VD_TGT_UNIT_NOT_PERM = 0x13U, //
+ VD_REQ_UNIT_NOT_REG = 0x1CU, //
+ VD_QUE_CHN_RESOURCE_NOT_AVAIL = 0x30U, //
+ VD_QUE_TGT_UNIT_BUSY = 0x38U, //
+ VD_QUE_GRP_BUSY = 0x39U, //
+
+ SS_ACK_R = 0x01U, //
+ SS_ACK_S = 0x02U, //
+ SS_NACK = 0x08U, //
+ SS_ACCEPTED = 0x10U, //
+ SS_GRP_NOT_PERM = 0x11U, //
+ SS_REQ_UNIT_NOT_PERM = 0x12U, //
+ SS_TGT_UNIT_NOT_PERM = 0x13U, //
+ SS_REQ_UNIT_NOT_REG = 0x1CU, //
+
+ DREQ_USER = 0x10U, //
+ DREQ_OTHER = 0x1FU, //
+
+ DISC_USER = 0x10U, //
+ DISC_OTHER = 0x1FU //
+ };
+ }
+
+ ///
+ /// Site Information 1 (SIF1)
+ ///
+ namespace SiteInformation1 {
+ enum : uint8_t {
+ DATA_CALL_SVC = 0x01U, // Data Call Service
+ VOICE_CALL_SVC = 0x02U, // Voice Call Service
+ COMPOSITE_CONTROL = 0x04U, // Composite Control Channel
+ AUTH_SVC = 0x08U, // Authentication Service
+ GRP_REG_SVC = 0x10U, // Group Registration Service
+ LOC_REG_SVC = 0x20U, // Location Registration Service
+ MULTI_SYSTEM_SVC = 0x40U, // Multi-System Service
+ MULTI_SITE_SVC = 0x80U // Multi-Site Service
+ };
+ }
+
+ ///
+ /// Site Information 2 (SIF2)
+ ///
+ namespace SiteInformation2 {
+ enum : uint8_t {
+ IP_NETWORK = 0x10U, // IP Networked
+ PSTN_NETWORK = 0x20U, // PSTN Networked
+ STATUS_CALL_REM_CTRL = 0x40U, //
+ SHORT_DATA_CALL_SVC = 0x80U //
+ };
+ }
+
+ ///
+ /// Channel Access - Step
+ ///
+ namespace ChAccessStep {
+ // Channel Access Step Enumeration
+ enum E : uint8_t {
+ SYS_DEFINED = 0x00U, // System Defined
+ ONEDOT25K = 0x02U, //
+ THREEDOT125K = 0x03U //
+ };
+ }
+
+ ///
+ /// Channel Access - Base
+ ///
+ namespace ChAccessBase {
+ // Channel Access Base Enumeration
+ enum E : uint8_t {
+ FREQ_100 = 0x01U, //
+ FREQ_330 = 0x02U, //
+ FREQ_400 = 0x03U, //
+ FREQ_750 = 0x04U, //
+ FREQ_SYS_DEFINED = 0x07U //
+ };
+ }
+
+ ///
+ /// Call Types
+ ///
+ namespace CallType {
+ enum : uint8_t {
+ BROADCAST = 0x00U, // Broadcast
+ CONFERENCE = 0x01U, // Conference
+ UNSPECIFIED = 0x02U, // Unspecified
+ INDIVIDUAL = 0x04U, // Individual
+ INTERCONNECT = 0x06U, // Interconnect
+ SPEED_DIAL = 0x07U // Speed Dial
+ };
+ }
+
+ ///
+ /// Transmission Mode
+ ///
+ namespace TransmissionMode {
+ enum : uint8_t {
+ MODE_4800 = 0x00U, // 4800-baud
+ MODE_9600 = 0x02U, // 9600-baud
+ MODE_9600_EFR = 0x03U // 9600-baud; should never be used on data calls
+ };
+ }
+
+ ///
+ /// Message Types
+ ///
+ namespace MessageType {
+ enum : uint8_t {
+ // Common Message Types
+ IDLE = 0x10U, // IDLE - Idle
+ DISC = 0x11U, // DISC - Disconnect
+ DST_ID_INFO = 0x17U, // DST_ID_INFO - Digital Station ID
+ SRV_INFO = 0x19U, // SRV_INFO - Service Information
+ CCH_INFO = 0x1AU, // CCH_INFO - Control Channel Information
+ ADJ_SITE_INFO = 0x1BU, // ADJ_SITE_INFO - Adjacent Site Information
+
+ // Traffic Channel Message Types
+ RTCH_VCALL = 0x01U, // VCALL - Voice Call
+ RTCH_VCALL_IV = 0x03U, // VCALL_IV - Voice Call Initialization Vector
+ RTCH_TX_REL_EX = 0x07U, // TX_REL_EX - Transmission Release Extension
+ RTCH_TX_REL = 0x08U, // TX_REL - Transmission Release
+ RTCH_DCALL_HDR = 0x09U, // DCALL - Data Call (Header)
+ RTCH_DCALL_DATA = 0x0BU, // DCALL - Data Call (User Data Format)
+ RTCH_DCALL_ACK = 0x0CU, // DCALL_ACK - Data Call Acknowledge
+ RTCH_HEAD_DLY = 0x0FU, // HEAD_DLY - Header Delay
+ RTCH_SDCALL_REQ_HDR = 0x38U, // SDCALL_REQ - Short Data Call Request (Header)
+ RTCH_SDCALL_REQ_DATA = 0x39U, // SDCALL_REQ - Short Data Call Request (User Data Format)
+ RTCH_SDCALL_IV = 0x3AU, // SDCALL_IV - Short Data Call Initialization Vector
+ RTCH_SDCALL_RESP = 0x3BU, // SDCALL_RESP - Short Data Call Response
+
+ // Control Channel Message Types
+ RCCH_VCALL_CONN = 0x03U, // VCALL_CONN - Voice Call Connection Request (ISP) / Voice Call Connection Response (OSP)
+ RCCH_VCALL_ASSGN = 0x04U, // VCALL_ASSGN - Voice Call Assignment
+ RCCH_DCALL_ASSGN = 0x14U, // DCALL_ASSGN - Data Call Assignment
+ RCCH_SITE_INFO = 0x18U, // SITE_INFO - Site Information
+ RCCH_REG = 0x20U, // REG - Registration Request (ISP) / Registration Response (OSP)
+ RCCH_REG_C = 0x22U, // REG_C - Registration Clear Request (ISP) / Registration Clear Response (OSP)
+ RCCH_REG_COMM = 0x23U, // REG_COMM - Registration Command
+ RCCH_GRP_REG = 0x24U, // GRP_REG - Group Registration Request (ISP) / Group Registration Response (OSP)
+ RCCH_PROP_FORM = 0x3FU // PROP_FORM - Proprietary Form
+ };
+ }
+
+ #define NXDN_RTCH_MSG_TYPE_VCALL "VCALL (Voice Call)"
+ #define NXDN_RTCH_MSG_TYPE_VCALL_RESP "VCALL_RESP (Voice Call Response)"
+ #define NXDN_RTCH_MSG_TYPE_TX_REL "TX_REL (Transmission Release)"
+ #define NXDN_RTCH_MSG_TYPE_DCALL_HDR "DCALL (Data Call Header)"
+ } // namespace defines
} // namespace nxdn
// ---------------------------------------------------------------------------
diff --git a/src/common/nxdn/NXDNUtils.cpp b/src/common/nxdn/NXDNUtils.cpp
index 5d67eee9..5416e569 100644
--- a/src/common/nxdn/NXDNUtils.cpp
+++ b/src/common/nxdn/NXDNUtils.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2020 Jonathan Naylor, G4KLX
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -18,6 +18,7 @@
#include "Utils.h"
using namespace nxdn;
+using namespace nxdn::defines;
#include
diff --git a/src/common/nxdn/SiteData.h b/src/common/nxdn/SiteData.h
index 1268e4ff..e108a515 100644
--- a/src/common/nxdn/SiteData.h
+++ b/src/common/nxdn/SiteData.h
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__NXDN_SITE_DATA_H__)
@@ -30,7 +30,7 @@ namespace nxdn
m_locId(1U),
m_channelId(1U),
m_channelNo(1U),
- m_serviceClass(NXDN_SIF1_VOICE_CALL_SVC | NXDN_SIF1_DATA_CALL_SVC),
+ m_serviceClass(defines::SiteInformation1::VOICE_CALL_SVC | defines::SiteInformation1::DATA_CALL_SVC),
m_isAdjSite(false),
m_callsign("CHANGEME"),
m_requireReg(false),
@@ -48,7 +48,7 @@ namespace nxdn
m_locId(locId),
m_channelId(channelId),
m_channelNo(channelNo),
- m_serviceClass(NXDN_SIF1_VOICE_CALL_SVC | NXDN_SIF1_DATA_CALL_SVC),
+ m_serviceClass(defines::SiteInformation1::VOICE_CALL_SVC | defines::SiteInformation1::DATA_CALL_SVC),
m_isAdjSite(false),
m_callsign("CHANGEME"),
m_requireReg(requireReq),
diff --git a/src/common/nxdn/Sync.cpp b/src/common/nxdn/Sync.cpp
index 1fb727a9..f7c8bacf 100644
--- a/src/common/nxdn/Sync.cpp
+++ b/src/common/nxdn/Sync.cpp
@@ -9,6 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2020 Jonathan Naylor, G4KLX
+* Copyright (C) 2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -16,6 +17,7 @@
#include "nxdn/Sync.h"
using namespace nxdn;
+using namespace nxdn::defines;
#include
diff --git a/src/common/nxdn/channel/CAC.cpp b/src/common/nxdn/channel/CAC.cpp
index 5bab533f..c9c45bd3 100644
--- a/src/common/nxdn/channel/CAC.cpp
+++ b/src/common/nxdn/channel/CAC.cpp
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "nxdn/channel/CAC.h"
@@ -18,6 +18,7 @@
#include "Utils.h"
using namespace nxdn;
+using namespace nxdn::defines;
using namespace nxdn::channel;
#include
@@ -101,7 +102,7 @@ const uint32_t PUNCTURE_LIST_OUT[] = {
///
CAC::CAC() :
m_ran(0U),
- m_structure(NXDN_SR_RCCH_SINGLE),
+ m_structure(ChStructure::SR_RCCH_SINGLE),
m_idleBusy(true),
m_txContinuous(false),
m_receive(true),
@@ -118,7 +119,7 @@ CAC::CAC() :
///
CAC::CAC(const CAC& data) :
m_ran(0U),
- m_structure(NXDN_SR_RCCH_SINGLE),
+ m_structure(ChStructure::SR_RCCH_SINGLE),
m_idleBusy(true),
m_txContinuous(false),
m_receive(true),
@@ -147,7 +148,7 @@ CAC& CAC::operator=(const CAC& data)
::memcpy(m_data, data.m_data, NXDN_CAC_CRC_LENGTH_BYTES);
m_ran = m_data[0U] & 0x3FU;
- m_structure = (m_data[0U] >> 6) & 0x03U;
+ m_structure = (ChStructure::E)((m_data[0U] >> 6) & 0x03U);
m_idleBusy = data.m_idleBusy;
m_txContinuous = data.m_txContinuous;
@@ -217,7 +218,7 @@ bool CAC::decode(const uint8_t* data)
::memset(crc, 0x00U, 2U);
m_ran = m_data[0U] & 0x3FU;
- m_structure = (m_data[0U] >> 6) & 0x03U;
+ m_structure = (ChStructure::E)((m_data[0U] >> 6) & 0x03U);
uint32_t offset = NXDN_CAC_SHORT_CRC_LENGTH_BITS - 20U;
for (uint32_t i = 0U; i < 16U; i++, offset++) {
@@ -362,7 +363,7 @@ void CAC::copy(const CAC& data)
::memcpy(m_data, data.m_data, NXDN_CAC_CRC_LENGTH_BYTES);
m_ran = m_data[0U] & 0x3FU;
- m_structure = (m_data[0U] >> 6) & 0x03U;
+ m_structure = (ChStructure::E)((m_data[0U] >> 6) & 0x03U);
m_idleBusy = data.m_idleBusy;
m_txContinuous = data.m_txContinuous;
diff --git a/src/common/nxdn/channel/CAC.h b/src/common/nxdn/channel/CAC.h
index 19d750e6..f5550f74 100644
--- a/src/common/nxdn/channel/CAC.h
+++ b/src/common/nxdn/channel/CAC.h
@@ -7,13 +7,14 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__NXDN_CHANNEL__CAC_H__)
#define __NXDN_CHANNEL__CAC_H__
#include "common/Defines.h"
+#include "common/nxdn/NXDNDefines.h"
namespace nxdn
{
@@ -51,7 +52,7 @@ namespace nxdn
/// Radio Access Number
__PROPERTY(uint8_t, ran, RAN);
///
- __PROPERTY(uint8_t, structure, Structure);
+ __PROPERTY(defines::ChStructure::E, structure, Structure);
/** Collision Control Field */
/// Idle/Busy.
diff --git a/src/common/nxdn/channel/FACCH1.cpp b/src/common/nxdn/channel/FACCH1.cpp
index 527c1b45..a624c237 100644
--- a/src/common/nxdn/channel/FACCH1.cpp
+++ b/src/common/nxdn/channel/FACCH1.cpp
@@ -19,6 +19,7 @@
#include "Utils.h"
using namespace nxdn;
+using namespace nxdn::defines;
using namespace nxdn::channel;
#include
diff --git a/src/common/nxdn/channel/LICH.cpp b/src/common/nxdn/channel/LICH.cpp
index 58317a2d..3d5d3250 100644
--- a/src/common/nxdn/channel/LICH.cpp
+++ b/src/common/nxdn/channel/LICH.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2018 Jonathan Naylor, G4KLX
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "nxdn/NXDNDefines.h"
@@ -18,6 +18,7 @@
#include "Utils.h"
using namespace nxdn;
+using namespace nxdn::defines;
using namespace nxdn::channel;
#include
@@ -31,9 +32,9 @@ using namespace nxdn::channel;
/// Initializes a new instance of the LICH class.
///
LICH::LICH() :
- m_rfct(NXDN_LICH_RFCT_RCCH),
- m_fct(NXDN_LICH_USC_SACCH_NS),
- m_option(0U),
+ m_rfct(RFChannelType::RCCH),
+ m_fct(FuncChannelType::USC_SACCH_NS),
+ m_option(ChOption::DATA_NORMAL),
m_outbound(true),
m_lich(0U)
{
@@ -45,9 +46,9 @@ LICH::LICH() :
///
///
LICH::LICH(const LICH& data) :
- m_rfct(NXDN_LICH_RFCT_RCCH),
- m_fct(NXDN_LICH_USC_SACCH_NS),
- m_option(0U),
+ m_rfct(RFChannelType::RCCH),
+ m_fct(FuncChannelType::USC_SACCH_NS),
+ m_option(ChOption::DATA_NORMAL),
m_outbound(true),
m_lich(0U)
{
@@ -108,9 +109,9 @@ bool LICH::decode(const uint8_t* data)
bool newParity = getParity();
bool origParity = (m_lich & 0x01U) == 0x01U;
- m_rfct = (m_lich >> 6) & 0x03U;
- m_fct = (m_lich >> 4) & 0x03U;
- m_option = (m_lich >> 2) & 0x03U;
+ m_rfct = (RFChannelType::E)((m_lich >> 6) & 0x03U);
+ m_fct = (FuncChannelType::E)((m_lich >> 4) & 0x03U);
+ m_option = (ChOption::E)((m_lich >> 2) & 0x03U);
m_outbound = ((m_lich >> 1) & 0x01U) == 0x01U;
return origParity == newParity;
@@ -175,9 +176,9 @@ void LICH::copy(const LICH& data)
{
m_lich = data.m_lich;
- m_rfct = (m_lich >> 6) & 0x03U;
- m_fct = (m_lich >> 4) & 0x03U;
- m_option = (m_lich >> 2) & 0x03U;
+ m_rfct = (RFChannelType::E)((m_lich >> 6) & 0x03U);
+ m_fct = (FuncChannelType::E)((m_lich >> 4) & 0x03U);
+ m_option = (ChOption::E)((m_lich >> 2) & 0x03U);
m_outbound = ((m_lich >> 1) & 0x01U) == 0x01U;
}
diff --git a/src/common/nxdn/channel/LICH.h b/src/common/nxdn/channel/LICH.h
index d5e8a6bb..e7c4b94e 100644
--- a/src/common/nxdn/channel/LICH.h
+++ b/src/common/nxdn/channel/LICH.h
@@ -9,13 +9,14 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2018 Jonathan Naylor, G4KLX
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__NXDN_CHANNEL__LICH_H__)
#define __NXDN_CHANNEL__LICH_H__
#include "common/Defines.h"
+#include "common/nxdn/NXDNDefines.h"
namespace nxdn
{
@@ -46,11 +47,11 @@ namespace nxdn
public:
/** Common Data */
/// RF Channel Type
- __PROPERTY(uint8_t, rfct, RFCT);
+ __PROPERTY(defines::RFChannelType::E, rfct, RFCT);
/// Functional Channel Type
- __PROPERTY(uint8_t, fct, FCT);
+ __PROPERTY(defines::FuncChannelType::E, fct, FCT);
/// Channel Options
- __PROPERTY(uint8_t, option, Option);
+ __PROPERTY(defines::ChOption::E, option, Option);
/// Flag indicating outbound traffic direction
__PROPERTY(bool, outbound, Outbound);
diff --git a/src/common/nxdn/channel/SACCH.cpp b/src/common/nxdn/channel/SACCH.cpp
index d8a38d07..dc7cb4a9 100644
--- a/src/common/nxdn/channel/SACCH.cpp
+++ b/src/common/nxdn/channel/SACCH.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2018 Jonathan Naylor, G4KLX
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "nxdn/channel/SACCH.h"
@@ -20,6 +20,7 @@
#include "Utils.h"
using namespace nxdn;
+using namespace nxdn::defines;
using namespace nxdn::channel;
#include
@@ -48,7 +49,7 @@ const uint32_t PUNCTURE_LIST[] = { 5U, 11U, 17U, 23U, 29U, 35U, 41U, 47U, 53U, 5
///
SACCH::SACCH() :
m_ran(0U),
- m_structure(NXDN_SR_SINGLE),
+ m_structure(ChStructure::SR_SINGLE),
m_data(nullptr)
{
m_data = new uint8_t[NXDN_SACCH_CRC_LENGTH_BYTES];
@@ -61,7 +62,7 @@ SACCH::SACCH() :
///
SACCH::SACCH(const SACCH& data) :
m_ran(0U),
- m_structure(NXDN_SR_SINGLE),
+ m_structure(ChStructure::SR_SINGLE),
m_data(nullptr)
{
copy(data);
@@ -86,7 +87,7 @@ SACCH& SACCH::operator=(const SACCH& data)
::memcpy(m_data, data.m_data, NXDN_SACCH_CRC_LENGTH_BYTES);
m_ran = m_data[0U] & 0x3FU;
- m_structure = (m_data[0U] >> 6) & 0x03U;
+ m_structure = (ChStructure::E)((m_data[0U] >> 6) & 0x03U);
}
return *this;
@@ -163,7 +164,7 @@ bool SACCH::decode(const uint8_t* data)
}
m_ran = m_data[0U] & 0x3FU;
- m_structure = (m_data[0U] >> 6) & 0x03U;
+ m_structure = (ChStructure::E)((m_data[0U] >> 6) & 0x03U);
return true;
}
@@ -274,5 +275,5 @@ void SACCH::copy(const SACCH& data)
::memcpy(m_data, data.m_data, NXDN_SACCH_CRC_LENGTH_BYTES);
m_ran = m_data[0U] & 0x3FU;
- m_structure = (m_data[0U] >> 6) & 0x03U;
+ m_structure = (ChStructure::E)((m_data[0U] >> 6) & 0x03U);
}
diff --git a/src/common/nxdn/channel/SACCH.h b/src/common/nxdn/channel/SACCH.h
index 4a03d3bf..b8ff95e2 100644
--- a/src/common/nxdn/channel/SACCH.h
+++ b/src/common/nxdn/channel/SACCH.h
@@ -9,13 +9,14 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2018 Jonathan Naylor, G4KLX
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__NXDN_CHANNEL__SACCH_H__)
#define __NXDN_CHANNEL__SACCH_H__
#include "common/Defines.h"
+#include "common/nxdn/NXDNDefines.h"
namespace nxdn
{
@@ -53,7 +54,7 @@ namespace nxdn
/// Radio Access Number
__PROPERTY(uint8_t, ran, RAN);
///
- __PROPERTY(uint8_t, structure, Structure);
+ __PROPERTY(defines::ChStructure::E, structure, Structure);
private:
uint8_t* m_data;
diff --git a/src/common/nxdn/channel/UDCH.cpp b/src/common/nxdn/channel/UDCH.cpp
index f114b0d3..d295352d 100644
--- a/src/common/nxdn/channel/UDCH.cpp
+++ b/src/common/nxdn/channel/UDCH.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2018 Jonathan Naylor, G4KLX
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "nxdn/channel/UDCH.h"
@@ -20,6 +20,7 @@
#include "Utils.h"
using namespace nxdn;
+using namespace nxdn::defines;
using namespace nxdn::channel;
#include
diff --git a/src/common/nxdn/lc/PacketInformation.cpp b/src/common/nxdn/lc/PacketInformation.cpp
index 06bd06f3..80cd8638 100644
--- a/src/common/nxdn/lc/PacketInformation.cpp
+++ b/src/common/nxdn/lc/PacketInformation.cpp
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -15,8 +15,9 @@
#include "nxdn/lc/PacketInformation.h"
#include "Log.h"
-using namespace nxdn::lc;
using namespace nxdn;
+using namespace nxdn::defines;
+using namespace nxdn::lc;
#include
#include
@@ -36,7 +37,7 @@ PacketInformation::PacketInformation() :
m_start(true),
m_circular(false),
m_fragmentCount(0U),
- m_rspClass(DATA_RSP_CLASS_ACK),
+ m_rspClass(PDUResponseClass::ACK),
m_rspType(1U),
m_rspErrorBlock(0U)
{
@@ -60,7 +61,7 @@ bool PacketInformation::decode(const uint8_t messageType, const uint8_t* data)
switch (messageType)
{
- case RTCH_MESSAGE_TYPE_DCALL_HDR:
+ case MessageType::RTCH_DCALL_HDR:
m_delivery = (data[0U] & 0x80U) == 0x80U; // Delivery
m_selectiveRetry = (data[0U] & 0x20U) == 0x20U; // Selective Retry
m_blockCount = (data[0U] & 0x0FU); // Block Count
@@ -71,12 +72,12 @@ bool PacketInformation::decode(const uint8_t messageType, const uint8_t* data)
m_fragmentCount = ((data[1U] & 0x01U) << 8) + data[2U]; // Fragment Count
break;
- case RTCH_MESSAGE_TYPE_DCALL_ACK:
+ case MessageType::RTCH_DCALL_ACK:
m_rspClass = (data[0U] >> 4) & 0x03U; // Response Class
m_rspType = (data[0U] >> 1) & 0x07U; // Response Type
m_fragmentCount = ((data[0U] & 0x01U) << 8) + data[1U]; // Fragment Count
break;
- case RTCH_MESSAGE_TYPE_SDCALL_REQ_HDR:
+ case MessageType::RTCH_SDCALL_REQ_HDR:
m_delivery = (data[0U] & 0x80U) == 0x80U; // Delivery
m_selectiveRetry = (data[0U] & 0x20U) == 0x20U; // Selective Retry
m_blockCount = (data[0U] & 0x0FU); // Block Count
@@ -104,9 +105,9 @@ void PacketInformation::encode(const uint8_t messageType, uint8_t* data)
switch (messageType)
{
- case RTCH_MESSAGE_TYPE_DCALL_HDR:
+ case MessageType::RTCH_DCALL_HDR:
{
- ::memset(data, 0x00U, NXDN_PCKT_INFO_LENGTH_BYTES);
+ ::memset(data, 0x00U, PCKT_INFO_LENGTH_BYTES);
data[0U] = (m_delivery ? 0x80U : 0x00U) + // Delivery
(m_selectiveRetry ? 0x20U : 0x00U) + // Selective Retry
@@ -121,7 +122,7 @@ void PacketInformation::encode(const uint8_t messageType, uint8_t* data)
data[2U] = m_fragmentCount & 0xFFU; // Fragment Count - bit 0 - 7
}
break;
- case RTCH_MESSAGE_TYPE_DCALL_ACK:
+ case MessageType::RTCH_DCALL_ACK:
{
data[0U] = (m_rspClass & 0x03U << 4) + // Response Class
(m_rspType & 0x07U << 1); // Response Type
@@ -131,8 +132,8 @@ void PacketInformation::encode(const uint8_t messageType, uint8_t* data)
data[1U] = m_fragmentCount & 0xFFU; // Fragment Count - bit 0 - 7
}
break;
- case RTCH_MESSAGE_TYPE_SDCALL_REQ_HDR:
- ::memset(data, 0x00U, NXDN_PCKT_INFO_LENGTH_BYTES);
+ case MessageType::RTCH_SDCALL_REQ_HDR:
+ ::memset(data, 0x00U, PCKT_INFO_LENGTH_BYTES);
data[0U] = (m_delivery ? 0x80U : 0x00U) + // Delivery
(m_selectiveRetry ? 0x20U : 0x00U) + // Selective Retry
@@ -163,7 +164,7 @@ void PacketInformation::reset()
m_fragmentCount = 0U;
- m_rspClass = DATA_RSP_CLASS_ACK;
+ m_rspClass = PDUResponseClass::ACK;
m_rspType = 0U;
m_rspErrorBlock = 0U;
}
diff --git a/src/common/nxdn/lc/RCCH.cpp b/src/common/nxdn/lc/RCCH.cpp
index 8995db67..f6a0a271 100644
--- a/src/common/nxdn/lc/RCCH.cpp
+++ b/src/common/nxdn/lc/RCCH.cpp
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,204 Bryan Biedenkapp, N2PLL
*
*/
#include "nxdn/NXDNDefines.h"
@@ -15,6 +15,7 @@
#include "Utils.h"
using namespace nxdn;
+using namespace nxdn::defines;
using namespace nxdn::lc;
#include
@@ -26,7 +27,7 @@ using namespace nxdn::lc;
bool RCCH::m_verbose = false;
-uint8_t *RCCH::m_siteCallsign = nullptr;
+uint8_t* RCCH::m_siteCallsign = nullptr;
SiteData RCCH::m_siteData = SiteData();
// ---------------------------------------------------------------------------
@@ -46,26 +47,26 @@ RCCH::RCCH(const RCCH& data) : RCCH()
/// Initializes a new instance of the RCCH class.
///
RCCH::RCCH() :
- m_messageType(MESSAGE_TYPE_IDLE),
+ m_messageType(MessageType::IDLE),
m_srcId(0U),
m_dstId(0U),
m_locId(0U),
m_regOption(0U),
m_version(0U),
- m_causeRsp(NXDN_CAUSE_MM_REG_ACCEPTED),
+ m_causeRsp(CauseResponse::MM_REG_ACCEPTED),
m_grpVchNo(0U),
- m_callType(CALL_TYPE_UNSPECIFIED),
+ m_callType(CallType::UNSPECIFIED),
m_emergency(false),
m_encrypted(false),
m_priority(false),
m_group(true),
m_duplex(false),
- m_transmissionMode(TRANSMISSION_MODE_4800),
+ m_transmissionMode(TransmissionMode::MODE_4800),
m_siteIdenEntry()
{
if (m_siteCallsign == nullptr) {
- m_siteCallsign = new uint8_t[NXDN_CALLSIGN_LENGTH_BYTES];
- ::memset(m_siteCallsign, 0x00U, NXDN_CALLSIGN_LENGTH_BYTES);
+ m_siteCallsign = new uint8_t[CALLSIGN_LENGTH_BYTES];
+ ::memset(m_siteCallsign, 0x00U, CALLSIGN_LENGTH_BYTES);
}
}
@@ -94,16 +95,16 @@ std::string RCCH::toString(bool isp)
void RCCH::setCallsign(std::string callsign)
{
if (m_siteCallsign == nullptr) {
- m_siteCallsign = new uint8_t[NXDN_CALLSIGN_LENGTH_BYTES];
- ::memset(m_siteCallsign, 0x00U, NXDN_CALLSIGN_LENGTH_BYTES);
+ m_siteCallsign = new uint8_t[CALLSIGN_LENGTH_BYTES];
+ ::memset(m_siteCallsign, 0x00U, CALLSIGN_LENGTH_BYTES);
}
uint32_t idLength = callsign.length();
if (idLength > 0) {
- ::memset(m_siteCallsign, 0x20U, NXDN_CALLSIGN_LENGTH_BYTES);
+ ::memset(m_siteCallsign, 0x20U, CALLSIGN_LENGTH_BYTES);
- if (idLength > NXDN_CALLSIGN_LENGTH_BYTES)
- idLength = NXDN_CALLSIGN_LENGTH_BYTES;
+ if (idLength > CALLSIGN_LENGTH_BYTES)
+ idLength = CALLSIGN_LENGTH_BYTES;
for (uint32_t i = 0; i < idLength; i++)
m_siteCallsign[i] = callsign[i];
}
diff --git a/src/common/nxdn/lc/RTCH.cpp b/src/common/nxdn/lc/RTCH.cpp
index 0eb9afe6..d98b0ea2 100644
--- a/src/common/nxdn/lc/RTCH.cpp
+++ b/src/common/nxdn/lc/RTCH.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2018 Jonathan Naylor, G4KLX
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "nxdn/NXDNDefines.h"
@@ -18,6 +18,7 @@
#include "Utils.h"
using namespace nxdn;
+using namespace nxdn::defines;
using namespace nxdn::lc;
#include
@@ -37,8 +38,8 @@ bool RTCH::m_verbose = false;
/// Initializes a new instance of the RTCH class.
///
RTCH::RTCH() :
- m_messageType(MESSAGE_TYPE_IDLE),
- m_callType(CALL_TYPE_UNSPECIFIED),
+ m_messageType(MessageType::IDLE),
+ m_callType(CallType::UNSPECIFIED),
m_srcId(0U),
m_dstId(0U),
m_emergency(false),
@@ -46,18 +47,18 @@ RTCH::RTCH() :
m_priority(false),
m_group(true),
m_duplex(false),
- m_transmissionMode(TRANSMISSION_MODE_4800),
+ m_transmissionMode(TransmissionMode::MODE_4800),
m_packetInfo(),
m_rsp(),
m_dataFrameNumber(0U),
m_dataBlockNumber(0U),
m_delayCount(0U),
- m_algId(NXDN_CIPHER_TYPE_NONE),
+ m_algId(CIPHER_TYPE_NONE),
m_kId(0U),
- m_causeRsp(NXDN_CAUSE_VD_ACCEPTED)
+ m_causeRsp(CauseResponse::VD_ACCEPTED)
{
- m_mi = new uint8_t[NXDN_MI_LENGTH_BYTES];
- ::memset(m_mi, 0x00U, NXDN_MI_LENGTH_BYTES);
+ m_mi = new uint8_t[MI_LENGTH_BYTES];
+ ::memset(m_mi, 0x00U, MI_LENGTH_BYTES);
}
///
@@ -65,8 +66,8 @@ RTCH::RTCH() :
///
///
RTCH::RTCH(const RTCH& data) :
- m_messageType(MESSAGE_TYPE_IDLE),
- m_callType(CALL_TYPE_UNSPECIFIED),
+ m_messageType(MessageType::IDLE),
+ m_callType(CallType::UNSPECIFIED),
m_srcId(0U),
m_dstId(0U),
m_emergency(false),
@@ -74,15 +75,15 @@ RTCH::RTCH(const RTCH& data) :
m_priority(false),
m_group(true),
m_duplex(false),
- m_transmissionMode(TRANSMISSION_MODE_4800),
+ m_transmissionMode(TransmissionMode::MODE_4800),
m_packetInfo(),
m_rsp(),
m_dataFrameNumber(0U),
m_dataBlockNumber(0U),
m_delayCount(0U),
- m_algId(NXDN_CIPHER_TYPE_NONE),
+ m_algId(CIPHER_TYPE_NONE),
m_kId(0U),
- m_causeRsp(NXDN_CAUSE_VD_ACCEPTED)
+ m_causeRsp(CauseResponse::VD_ACCEPTED)
{
copy(data);
}
@@ -163,8 +164,8 @@ void RTCH::encode(uint8_t* data, uint32_t length, uint32_t offset)
///
void RTCH::reset()
{
- m_messageType = MESSAGE_TYPE_IDLE;
- m_callType = CALL_TYPE_UNSPECIFIED;
+ m_messageType = MessageType::IDLE;
+ m_callType = CallType::UNSPECIFIED;
m_srcId = 0U;
m_dstId = 0U;
@@ -174,7 +175,7 @@ void RTCH::reset()
m_priority = false;
m_group = true;
m_duplex = false;
- m_transmissionMode = TRANSMISSION_MODE_4800;
+ m_transmissionMode = TransmissionMode::MODE_4800;
m_packetInfo = PacketInformation();
m_rsp = PacketInformation();
@@ -183,13 +184,13 @@ void RTCH::reset()
m_delayCount = 0U;
- m_algId = NXDN_CIPHER_TYPE_NONE;
+ m_algId = CIPHER_TYPE_NONE;
m_kId = 0U;
- m_causeRsp = NXDN_CAUSE_VD_ACCEPTED;
+ m_causeRsp = CauseResponse::VD_ACCEPTED;
}
-/// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
// Private Class Members
// ---------------------------------------------------------------------------
@@ -206,7 +207,7 @@ bool RTCH::decodeLC(const uint8_t* data)
// message type opcodes
switch (m_messageType) {
- case RTCH_MESSAGE_TYPE_VCALL:
+ case MessageType::RTCH_VCALL:
m_callType = (data[2U] >> 5) & 0x07U; // Call Type
m_emergency = (data[1U] & 0x80U) == 0x80U; // Emergency Flag
m_priority = (data[1U] & 0x20U) == 0x20U; // Priority Flag
@@ -217,22 +218,22 @@ bool RTCH::decodeLC(const uint8_t* data)
m_algId = (data[7U] >> 6) & 0x03U; // Cipher Type
m_kId = (data[7U] & 0x3FU); // Key ID
break;
- case RTCH_MESSAGE_TYPE_VCALL_IV:
- case RTCH_MESSAGE_TYPE_SDCALL_IV:
- if (m_algId != NXDN_CIPHER_TYPE_NONE && m_kId > 0U) {
- m_mi = new uint8_t[NXDN_MI_LENGTH_BYTES];
- ::memset(m_mi, 0x00U, NXDN_MI_LENGTH_BYTES);
- ::memcpy(m_mi, data + 1U, NXDN_MI_LENGTH_BYTES); // Message Indicator
+ case MessageType::RTCH_VCALL_IV:
+ case MessageType::RTCH_SDCALL_IV:
+ if (m_algId != CIPHER_TYPE_NONE && m_kId > 0U) {
+ m_mi = new uint8_t[MI_LENGTH_BYTES];
+ ::memset(m_mi, 0x00U, MI_LENGTH_BYTES);
+ ::memcpy(m_mi, data + 1U, MI_LENGTH_BYTES); // Message Indicator
}
break;
- case RTCH_MESSAGE_TYPE_TX_REL:
+ case MessageType::RTCH_TX_REL:
m_callType = (data[2U] >> 5) & 0x07U; // Call Type
m_emergency = (data[1U] & 0x80U) == 0x80U; // Emergency Flag
m_priority = (data[1U] & 0x20U) == 0x20U; // Priority Flag
m_srcId = (uint16_t)((data[3U] << 8) | data[4U]) & 0xFFFFU; // Source Radio Address
m_dstId = (uint16_t)((data[5U] << 8) | data[6U]) & 0xFFFFU; // Target Radio Address
break;
- case RTCH_MESSAGE_TYPE_DCALL_HDR:
+ case MessageType::RTCH_DCALL_HDR:
m_callType = (data[2U] >> 5) & 0x07U; // Call Type
m_emergency = (data[1U] & 0x80U) == 0x80U; // Emergency Flag
m_priority = (data[1U] & 0x20U) == 0x20U; // Priority Flag
@@ -246,17 +247,17 @@ bool RTCH::decodeLC(const uint8_t* data)
m_packetInfo = PacketInformation();
m_packetInfo.decode(m_messageType, data + 8U); // Packet Information
- if (m_algId != NXDN_CIPHER_TYPE_NONE && m_kId > 0U) {
- ::memset(m_mi, 0x00U, NXDN_MI_LENGTH_BYTES);
- ::memcpy(m_mi, data + 11U, NXDN_MI_LENGTH_BYTES); // Message Indicator
+ if (m_algId != CIPHER_TYPE_NONE && m_kId > 0U) {
+ ::memset(m_mi, 0x00U, MI_LENGTH_BYTES);
+ ::memcpy(m_mi, data + 11U, MI_LENGTH_BYTES); // Message Indicator
}
break;
- case RTCH_MESSAGE_TYPE_DCALL_DATA:
- case RTCH_MESSAGE_TYPE_SDCALL_REQ_DATA:
+ case MessageType::RTCH_DCALL_DATA:
+ case MessageType::RTCH_SDCALL_REQ_DATA:
m_dataFrameNumber = (data[1U] >> 4) & 0x0FU; // Frame Number
m_dataBlockNumber = (data[1U] & 0x0FU); // Block Number
break;
- case RTCH_MESSAGE_TYPE_DCALL_ACK:
+ case MessageType::RTCH_DCALL_ACK:
m_callType = (data[2U] >> 5) & 0x07U; // Call Type
m_emergency = (data[1U] & 0x80U) == 0x80U; // Emergency Flag
m_priority = (data[1U] & 0x20U) == 0x20U; // Priority Flag
@@ -268,7 +269,7 @@ bool RTCH::decodeLC(const uint8_t* data)
m_rsp = PacketInformation();
m_rsp.decode(m_messageType, data + 7U); // Response
break;
- case RTCH_MESSAGE_TYPE_HEAD_DLY:
+ case MessageType::RTCH_HEAD_DLY:
m_callType = (data[2U] >> 5) & 0x07U; // Call Type
m_emergency = (data[1U] & 0x80U) == 0x80U; // Emergency Flag
m_priority = (data[1U] & 0x20U) == 0x20U; // Priority Flag
@@ -276,9 +277,9 @@ bool RTCH::decodeLC(const uint8_t* data)
m_dstId = (uint16_t)((data[5U] << 8) | data[6U]) & 0xFFFFU; // Target Radio Address
m_delayCount = (uint16_t)((data[7U] << 8) | data[8U]) & 0xFFFFU; // Delay Count
break;
- case MESSAGE_TYPE_IDLE:
+ case MessageType::IDLE:
break;
- case RTCH_MESSAGE_TYPE_SDCALL_REQ_HDR:
+ case MessageType::RTCH_SDCALL_REQ_HDR:
m_callType = (data[2U] >> 5) & 0x07U; // Call Type
m_emergency = (data[1U] & 0x80U) == 0x80U; // Emergency Flag
m_priority = (data[1U] & 0x20U) == 0x20U; // Priority Flag
@@ -292,7 +293,7 @@ bool RTCH::decodeLC(const uint8_t* data)
m_packetInfo = PacketInformation();
m_packetInfo.decode(m_messageType, data + 8U); // Packet Information
break;
- case RTCH_MESSAGE_TYPE_SDCALL_RESP:
+ case MessageType::RTCH_SDCALL_RESP:
m_callType = (data[2U] >> 5) & 0x07U; // Call Type
m_emergency = (data[1U] & 0x80U) == 0x80U; // Emergency Flag
m_priority = (data[1U] & 0x20U) == 0x20U; // Priority Flag
@@ -322,7 +323,7 @@ void RTCH::encodeLC(uint8_t* data)
// message type opcodes
switch (m_messageType) {
- case RTCH_MESSAGE_TYPE_VCALL:
+ case MessageType::RTCH_VCALL:
data[1U] = (m_emergency ? 0x80U : 0x00U) + // Emergency Flag
(m_priority ? 0x20U : 0x00U); // Priority Flag
data[2U] = ((m_callType & 0x07U) << 5) + // Call Type
@@ -337,12 +338,12 @@ void RTCH::encodeLC(uint8_t* data)
data[7U] = ((m_algId & 0x03U) << 6) + // Cipher Type
(m_kId & 0x3FU); // Key ID
break;
- case RTCH_MESSAGE_TYPE_VCALL_IV:
- if (m_algId != NXDN_CIPHER_TYPE_NONE && m_kId > 0U) {
- ::memcpy(data + 1U, m_mi, NXDN_MI_LENGTH_BYTES); // Message Indicator
+ case MessageType::RTCH_VCALL_IV:
+ if (m_algId != CIPHER_TYPE_NONE && m_kId > 0U) {
+ ::memcpy(data + 1U, m_mi, MI_LENGTH_BYTES); // Message Indicator
}
break;
- case RTCH_MESSAGE_TYPE_TX_REL:
+ case MessageType::RTCH_TX_REL:
data[1U] = (m_emergency ? 0x80U : 0x00U) + // Emergency Flag
(m_priority ? 0x20U : 0x00U); // Priority Flag
data[2U] = (m_callType & 0x07U) << 5; // Call Type
@@ -352,7 +353,7 @@ void RTCH::encodeLC(uint8_t* data)
data[5U] = (m_dstId >> 8U) & 0xFFU; // Target Radio Address
data[6U] = (m_dstId >> 0U) & 0xFFU; // ...
break;
- case RTCH_MESSAGE_TYPE_DCALL_HDR:
+ case MessageType::RTCH_DCALL_HDR:
data[1U] = (m_emergency ? 0x80U : 0x00U) + // Emergency Flag
(m_priority ? 0x20U : 0x00U); // Priority Flag
data[2U] = ((m_callType & 0x07U) << 5) + // Call Type
@@ -369,16 +370,16 @@ void RTCH::encodeLC(uint8_t* data)
m_packetInfo.encode(m_messageType, data + 8U); // Packet Information
- if (m_algId != NXDN_CIPHER_TYPE_NONE && m_kId > 0U) {
- ::memcpy(data + 11U, m_mi, NXDN_MI_LENGTH_BYTES); // Message Indicator
+ if (m_algId != CIPHER_TYPE_NONE && m_kId > 0U) {
+ ::memcpy(data + 11U, m_mi, MI_LENGTH_BYTES); // Message Indicator
}
break;
- case RTCH_MESSAGE_TYPE_DCALL_DATA:
- case RTCH_MESSAGE_TYPE_SDCALL_REQ_DATA:
+ case MessageType::RTCH_DCALL_DATA:
+ case MessageType::RTCH_SDCALL_REQ_DATA:
data[1U] = (m_dataFrameNumber & 0x0FU << 4) + // Frame Number
(m_dataBlockNumber & 0x0FU); // Block Number
break;
- case RTCH_MESSAGE_TYPE_DCALL_ACK:
+ case MessageType::RTCH_DCALL_ACK:
data[1U] = (m_emergency ? 0x80U : 0x00U) + // Emergency Flag
(m_priority ? 0x20U : 0x00U); // Priority Flag
data[2U] = ((m_callType & 0x07U) << 5) + // Call Type
@@ -392,7 +393,7 @@ void RTCH::encodeLC(uint8_t* data)
m_rsp.encode(m_messageType, data + 7U); // Response
break;
- case RTCH_MESSAGE_TYPE_HEAD_DLY:
+ case MessageType::RTCH_HEAD_DLY:
data[1U] = (m_emergency ? 0x80U : 0x00U) + // Emergency Flag
(m_priority ? 0x20U : 0x00U); // Priority Flag
data[2U] = (m_callType & 0x07U) << 5; // Call Type
@@ -405,9 +406,9 @@ void RTCH::encodeLC(uint8_t* data)
data[7U] = (m_delayCount >> 8U) & 0xFFU; // Delay Count
data[8U] = (m_delayCount >> 0U) & 0xFFU; // ...
break;
- case MESSAGE_TYPE_IDLE:
+ case MessageType::IDLE:
break;
- case RTCH_MESSAGE_TYPE_SDCALL_REQ_HDR:
+ case MessageType::RTCH_SDCALL_REQ_HDR:
data[1U] = (m_emergency ? 0x80U : 0x00U) + // Emergency Flag
(m_priority ? 0x20U : 0x00U); // Priority Flag
data[2U] = ((m_callType & 0x07U) << 5) + // Call Type
diff --git a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_DCALL_HDR.cpp b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_DCALL_HDR.cpp
index 159b17b3..b16c105b 100644
--- a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_DCALL_HDR.cpp
+++ b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_DCALL_HDR.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "nxdn/lc/rcch/MESSAGE_TYPE_DCALL_HDR.h"
-using namespace nxdn::lc::rcch;
-using namespace nxdn::lc;
using namespace nxdn;
+using namespace nxdn::defines;
+using namespace nxdn::lc;
+using namespace nxdn::lc::rcch;
#include
@@ -28,7 +29,7 @@ using namespace nxdn;
///
MESSAGE_TYPE_DCALL_HDR::MESSAGE_TYPE_DCALL_HDR() : RCCH()
{
- m_messageType = RTCH_MESSAGE_TYPE_DCALL_HDR;
+ m_messageType = MessageType::RTCH_DCALL_HDR;
}
///
@@ -93,5 +94,5 @@ void MESSAGE_TYPE_DCALL_HDR::encode(uint8_t* data, uint32_t length, uint32_t off
///
std::string MESSAGE_TYPE_DCALL_HDR::toString(bool isp)
{
- return std::string("RTCH_MESSAGE_TYPE_DCALL_HDR (Data Call Header)");
+ return std::string("RTCH_DCALL_HDR (Data Call Header)");
}
diff --git a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_DST_ID_INFO.cpp b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_DST_ID_INFO.cpp
index fe8d45b4..ba530e3a 100644
--- a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_DST_ID_INFO.cpp
+++ b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_DST_ID_INFO.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "nxdn/lc/rcch/MESSAGE_TYPE_DST_ID_INFO.h"
-using namespace nxdn::lc::rcch;
-using namespace nxdn::lc;
using namespace nxdn;
+using namespace nxdn::defines;
+using namespace nxdn::lc;
+using namespace nxdn::lc::rcch;
#include
@@ -28,7 +29,7 @@ using namespace nxdn;
///
MESSAGE_TYPE_DST_ID_INFO::MESSAGE_TYPE_DST_ID_INFO() : RCCH()
{
- m_messageType = nxdn::MESSAGE_TYPE_DST_ID_INFO;
+ m_messageType = MessageType::DST_ID_INFO;
}
///
@@ -60,9 +61,9 @@ void MESSAGE_TYPE_DST_ID_INFO::encode(uint8_t* data, uint32_t length, uint32_t o
uint8_t rcch[NXDN_RCCH_LC_LENGTH_BYTES + 4U];
::memset(rcch, 0x00U, NXDN_RCCH_LC_LENGTH_BYTES + 4U);
- rcch[1U] = 0xC0U + NXDN_CALLSIGN_LENGTH_BYTES; // Station ID Option - Start / End / Character Count
+ rcch[1U] = 0xC0U + CALLSIGN_LENGTH_BYTES; // Station ID Option - Start / End / Character Count
rcch[2U] = (m_siteCallsign[0]); // Character 0
- for (uint8_t i = 1; i < NXDN_CALLSIGN_LENGTH_BYTES; i++) {
+ for (uint8_t i = 1; i < CALLSIGN_LENGTH_BYTES; i++) {
rcch[i + 2U] = m_siteCallsign[i]; // Character 1 - 7
}
@@ -76,5 +77,5 @@ void MESSAGE_TYPE_DST_ID_INFO::encode(uint8_t* data, uint32_t length, uint32_t o
///
std::string MESSAGE_TYPE_DST_ID_INFO::toString(bool isp)
{
- return std::string("MESSAGE_TYPE_DST_ID_INFO (Digital Station ID)");
+ return std::string("DST_ID_INFO (Digital Station ID)");
}
diff --git a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_GRP_REG.cpp b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_GRP_REG.cpp
index 70d74770..bf617eb3 100644
--- a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_GRP_REG.cpp
+++ b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_GRP_REG.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "nxdn/lc/rcch/MESSAGE_TYPE_GRP_REG.h"
-using namespace nxdn::lc::rcch;
-using namespace nxdn::lc;
using namespace nxdn;
+using namespace nxdn::defines;
+using namespace nxdn::lc;
+using namespace nxdn::lc::rcch;
#include
@@ -28,7 +29,7 @@ using namespace nxdn;
///
MESSAGE_TYPE_GRP_REG::MESSAGE_TYPE_GRP_REG() : RCCH()
{
- m_messageType = RCCH_MESSAGE_TYPE_GRP_REG;
+ m_messageType = MessageType::RCCH_GRP_REG;
}
///
@@ -82,6 +83,6 @@ void MESSAGE_TYPE_GRP_REG::encode(uint8_t* data, uint32_t length, uint32_t offse
///
std::string MESSAGE_TYPE_GRP_REG::toString(bool isp)
{
- if (isp) return std::string("RCCH_MESSAGE_TYPE_GRP_REG (Group Registration Request)");
- else return std::string("RCCH_MESSAGE_TYPE_GRP_REG (Group Registration Response)");
+ return (isp) ? std::string("RCCH_GRP_REG (Group Registration Request)") :
+ std::string("RCCH_GRP_REG (Group Registration Response)");
}
diff --git a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_IDLE.cpp b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_IDLE.cpp
index 270f83ed..bbf2d9e4 100644
--- a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_IDLE.cpp
+++ b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_IDLE.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "nxdn/lc/rcch/MESSAGE_TYPE_IDLE.h"
-using namespace nxdn::lc::rcch;
-using namespace nxdn::lc;
using namespace nxdn;
+using namespace nxdn::defines;
+using namespace nxdn::lc;
+using namespace nxdn::lc::rcch;
#include
@@ -28,7 +29,7 @@ using namespace nxdn;
///
MESSAGE_TYPE_IDLE::MESSAGE_TYPE_IDLE() : RCCH()
{
- m_messageType = nxdn::MESSAGE_TYPE_IDLE;
+ m_messageType = MessageType::IDLE;
}
///
@@ -70,5 +71,5 @@ void MESSAGE_TYPE_IDLE::encode(uint8_t* data, uint32_t length, uint32_t offset)
///
std::string MESSAGE_TYPE_IDLE::toString(bool isp)
{
- return std::string("MESSAGE_TYPE_IDLE (Idle)");
+ return std::string("IDLE (Idle)");
}
diff --git a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_REG.cpp b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_REG.cpp
index 0109ad5f..516f90c4 100644
--- a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_REG.cpp
+++ b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_REG.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "nxdn/lc/rcch/MESSAGE_TYPE_REG.h"
-using namespace nxdn::lc::rcch;
-using namespace nxdn::lc;
using namespace nxdn;
+using namespace nxdn::defines;
+using namespace nxdn::lc;
+using namespace nxdn::lc::rcch;
#include
@@ -28,7 +29,7 @@ using namespace nxdn;
///
MESSAGE_TYPE_REG::MESSAGE_TYPE_REG() : RCCH()
{
- m_messageType = RCCH_MESSAGE_TYPE_REG;
+ m_messageType = MessageType::RCCH_REG;
}
///
@@ -85,6 +86,6 @@ void MESSAGE_TYPE_REG::encode(uint8_t* data, uint32_t length, uint32_t offset)
///
std::string MESSAGE_TYPE_REG::toString(bool isp)
{
- if (isp) return std::string("RCCH_MESSAGE_TYPE_REG (Registration Request)");
- else return std::string("RCCH_MESSAGE_TYPE_REG (Registration Response)");
+ return (isp) ? std::string("RCCH_REG (Registration Request)") :
+ std::string("RCCH_REG (Registration Response)");
}
diff --git a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_REG_C.cpp b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_REG_C.cpp
index 18281c95..ca3631a7 100644
--- a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_REG_C.cpp
+++ b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_REG_C.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "nxdn/lc/rcch/MESSAGE_TYPE_REG_C.h"
-using namespace nxdn::lc::rcch;
-using namespace nxdn::lc;
using namespace nxdn;
+using namespace nxdn::defines;
+using namespace nxdn::lc;
+using namespace nxdn::lc::rcch;
#include
@@ -28,7 +29,7 @@ using namespace nxdn;
///
MESSAGE_TYPE_REG_C::MESSAGE_TYPE_REG_C() : RCCH()
{
- m_messageType = RCCH_MESSAGE_TYPE_REG_C;
+ m_messageType = MessageType::RCCH_REG_C;
}
///
@@ -80,6 +81,6 @@ void MESSAGE_TYPE_REG_C::encode(uint8_t* data, uint32_t length, uint32_t offset)
///
std::string MESSAGE_TYPE_REG_C::toString(bool isp)
{
- if (isp) return std::string("RCCH_MESSAGE_TYPE_REG_C (Registration Clear Request)");
- else return std::string("RCCH_MESSAGE_TYPE_REG_C (Registration Clear Response)");
+ return (isp) ? std::string("RCCH_REG_C (Registration Clear Request)") :
+ std::string("RCCH_REG_C (Registration Clear Response)");
}
diff --git a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_REG_COMM.cpp b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_REG_COMM.cpp
index 8f7ceec1..ea6d8af1 100644
--- a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_REG_COMM.cpp
+++ b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_REG_COMM.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "nxdn/lc/rcch/MESSAGE_TYPE_REG_COMM.h"
-using namespace nxdn::lc::rcch;
-using namespace nxdn::lc;
using namespace nxdn;
+using namespace nxdn::defines;
+using namespace nxdn::lc;
+using namespace nxdn::lc::rcch;
#include
@@ -28,7 +29,7 @@ using namespace nxdn;
///
MESSAGE_TYPE_REG_COMM::MESSAGE_TYPE_REG_COMM() : RCCH()
{
- m_messageType = RCCH_MESSAGE_TYPE_REG_COMM;
+ m_messageType = MessageType::RCCH_REG_COMM;
}
///
@@ -75,5 +76,5 @@ void MESSAGE_TYPE_REG_COMM::encode(uint8_t* data, uint32_t length, uint32_t offs
///
std::string MESSAGE_TYPE_REG_COMM::toString(bool isp)
{
- return std::string("RCCH_MESSAGE_TYPE_REG_COMM (Registration Command)");
+ return std::string("RCCH_REG_COMM (Registration Command)");
}
diff --git a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_SITE_INFO.cpp b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_SITE_INFO.cpp
index 8b29bbae..882d8b0f 100644
--- a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_SITE_INFO.cpp
+++ b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_SITE_INFO.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "nxdn/lc/rcch/MESSAGE_TYPE_SITE_INFO.h"
-using namespace nxdn::lc::rcch;
-using namespace nxdn::lc;
using namespace nxdn;
+using namespace nxdn::defines;
+using namespace nxdn::lc;
+using namespace nxdn::lc::rcch;
#include
@@ -33,7 +34,7 @@ MESSAGE_TYPE_SITE_INFO::MESSAGE_TYPE_SITE_INFO() : RCCH(),
m_ccchMultiCnt(2U),
m_rcchIterateCnt(2U)
{
- m_messageType = RCCH_MESSAGE_TYPE_SITE_INFO;
+ m_messageType = MessageType::RCCH_SITE_INFO;
}
///
@@ -76,7 +77,7 @@ void MESSAGE_TYPE_SITE_INFO::encode(uint8_t* data, uint32_t length, uint32_t off
((m_rcchIterateCnt & 0x0FU) << 0); // ... - Number of Iteration
rcch[6U] = m_siteData.serviceClass(); // Service Information
- rcch[7U] = (m_siteData.netActive() ? NXDN_SIF2_IP_NETWORK : 0x00U); // ...
+ rcch[7U] = (m_siteData.netActive() ? SiteInformation2::IP_NETWORK : 0x00U); // ...
// bryanb: this is currently fixed -- maybe dynamic in the future
rcch[8U] = 0U; // Restriction Information - No access restriction / No cycle restriction
@@ -84,7 +85,7 @@ void MESSAGE_TYPE_SITE_INFO::encode(uint8_t* data, uint32_t length, uint32_t off
rcch[10U] = (!m_siteData.netActive() ? 0x01U : 0x00U); // ... - No group ratio restriction / No delay time extension / ISO
// bryanb: this is currently fixed -- maybe dynamic in the future
- rcch[11U] = NXDN_CH_ACCESS_BASE_FREQ_SYS_DEFINED << 2; // Channel Access Information - Channel Version / Sys Defined Step / Sys Defined Base Freq
+ rcch[11U] = ChAccessBase::FREQ_SYS_DEFINED << 2; // Channel Access Information - Channel Version / Sys Defined Step / Sys Defined Base Freq
rcch[14U] = 1U; // Version
@@ -102,7 +103,7 @@ void MESSAGE_TYPE_SITE_INFO::encode(uint8_t* data, uint32_t length, uint32_t off
///
std::string MESSAGE_TYPE_SITE_INFO::toString(bool isp)
{
- return std::string("RCCH_MESSAGE_TYPE_SITE_INFO (Site Information)");
+ return std::string("RCCH_SITE_INFO (Site Information)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_SRV_INFO.cpp b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_SRV_INFO.cpp
index c9e912f4..461df229 100644
--- a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_SRV_INFO.cpp
+++ b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_SRV_INFO.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "nxdn/lc/rcch/MESSAGE_TYPE_SRV_INFO.h"
-using namespace nxdn::lc::rcch;
-using namespace nxdn::lc;
using namespace nxdn;
+using namespace nxdn::defines;
+using namespace nxdn::lc;
+using namespace nxdn::lc::rcch;
#include
@@ -28,7 +29,7 @@ using namespace nxdn;
///
MESSAGE_TYPE_SRV_INFO::MESSAGE_TYPE_SRV_INFO() : RCCH()
{
- m_messageType = nxdn::MESSAGE_TYPE_SRV_INFO;
+ m_messageType = MessageType::SRV_INFO;
}
///
@@ -64,7 +65,7 @@ void MESSAGE_TYPE_SRV_INFO::encode(uint8_t* data, uint32_t length, uint32_t offs
rcch[2U] = (m_siteData.locId() >> 8) & 0xFFU; // ...
rcch[3U] = (m_siteData.locId() >> 0) & 0xFFU; // ...
rcch[4U] = m_siteData.serviceClass(); // Service Information
- rcch[5U] = (m_siteData.netActive() ? NXDN_SIF2_IP_NETWORK : 0x00U); // ...
+ rcch[5U] = (m_siteData.netActive() ? SiteInformation2::IP_NETWORK : 0x00U); // ...
// bryanb: this is currently fixed -- maybe dynamic in the future
rcch[8U] = 0U; // Restriction Information - No access restriction / No cycle restriction
@@ -81,5 +82,5 @@ void MESSAGE_TYPE_SRV_INFO::encode(uint8_t* data, uint32_t length, uint32_t offs
///
std::string MESSAGE_TYPE_SRV_INFO::toString(bool isp)
{
- return std::string("MESSAGE_TYPE_SRV_INFO (Service Information)");
+ return std::string("SRV_INFO (Service Information)");
}
diff --git a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_VCALL_ASSGN.cpp b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_VCALL_ASSGN.cpp
index 8cbc4956..f2b78edd 100644
--- a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_VCALL_ASSGN.cpp
+++ b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_VCALL_ASSGN.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "nxdn/lc/rcch/MESSAGE_TYPE_VCALL_ASSGN.h"
-using namespace nxdn::lc::rcch;
-using namespace nxdn::lc;
using namespace nxdn;
+using namespace nxdn::defines;
+using namespace nxdn::lc;
+using namespace nxdn::lc::rcch;
#include
@@ -28,7 +29,7 @@ using namespace nxdn;
///
MESSAGE_TYPE_VCALL_ASSGN::MESSAGE_TYPE_VCALL_ASSGN() : RCCH()
{
- m_messageType = RCCH_MESSAGE_TYPE_VCALL_ASSGN;
+ m_messageType = MessageType::RCCH_VCALL_ASSGN;
}
///
@@ -87,5 +88,5 @@ void MESSAGE_TYPE_VCALL_ASSGN::encode(uint8_t* data, uint32_t length, uint32_t o
///
std::string MESSAGE_TYPE_VCALL_ASSGN::toString(bool isp)
{
- return std::string("RCCH_MESSAGE_TYPE_VCALL_ASSGN (Voice Call Assignment)");
+ return std::string("RCCH_VCALL_ASSGN (Voice Call Assignment)");
}
diff --git a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_VCALL_CONN.cpp b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_VCALL_CONN.cpp
index b211cff9..7672eae9 100644
--- a/src/common/nxdn/lc/rcch/MESSAGE_TYPE_VCALL_CONN.cpp
+++ b/src/common/nxdn/lc/rcch/MESSAGE_TYPE_VCALL_CONN.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "nxdn/lc/rcch/MESSAGE_TYPE_VCALL_CONN.h"
-using namespace nxdn::lc::rcch;
-using namespace nxdn::lc;
using namespace nxdn;
+using namespace nxdn::defines;
+using namespace nxdn::lc;
+using namespace nxdn::lc::rcch;
#include
@@ -28,7 +29,7 @@ using namespace nxdn;
///
MESSAGE_TYPE_VCALL_CONN::MESSAGE_TYPE_VCALL_CONN() : RCCH()
{
- m_messageType = RCCH_MESSAGE_TYPE_VCALL_CONN;
+ m_messageType = MessageType::RCCH_VCALL_CONN;
}
///
@@ -93,6 +94,6 @@ void MESSAGE_TYPE_VCALL_CONN::encode(uint8_t* data, uint32_t length, uint32_t of
///
std::string MESSAGE_TYPE_VCALL_CONN::toString(bool isp)
{
- if (isp) return std::string("RCCH_MESSAGE_TYPE_VCALL_CONN (Voice Call Connection Request)");
- else return std::string("RCCH_MESSAGE_TYPE_VCALL_CONN (Voice Call Connection Response)");
+ return (isp) ? std::string("RCCH_VCALL_CONN (Voice Call Connection Request)") :
+ std::string("RCCH_VCALL_CONN (Voice Call Connection Response)");
}
diff --git a/src/common/nxdn/lc/rcch/RCCHFactory.cpp b/src/common/nxdn/lc/rcch/RCCHFactory.cpp
index 769434bf..8b62828c 100644
--- a/src/common/nxdn/lc/rcch/RCCHFactory.cpp
+++ b/src/common/nxdn/lc/rcch/RCCHFactory.cpp
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -15,9 +15,10 @@
#include "Log.h"
#include "Utils.h"
-using namespace nxdn::lc::rcch;
-using namespace nxdn::lc;
using namespace nxdn;
+using namespace nxdn::defines;
+using namespace nxdn::lc;
+using namespace nxdn::lc::rcch;
#include
@@ -58,18 +59,18 @@ std::unique_ptr RCCHFactory::createRCCH(const uint8_t* data, uint32_t leng
// message type opcodes
switch (messageType) {
- case RTCH_MESSAGE_TYPE_VCALL:
- case RCCH_MESSAGE_TYPE_VCALL_CONN:
+ case MessageType::RTCH_VCALL:
+ case MessageType::RCCH_VCALL_CONN:
return decode(new MESSAGE_TYPE_VCALL_CONN(), data, length, offset);
- case RTCH_MESSAGE_TYPE_DCALL_HDR:
+ case MessageType::RTCH_DCALL_HDR:
return decode(new MESSAGE_TYPE_DCALL_HDR(), data, length, offset);
- case nxdn::MESSAGE_TYPE_IDLE:
+ case MessageType::IDLE:
return decode(new MESSAGE_TYPE_IDLE(), data, length, offset);
- case RCCH_MESSAGE_TYPE_REG:
+ case MessageType::RCCH_REG:
return decode(new MESSAGE_TYPE_REG(), data, length, offset);
- case RCCH_MESSAGE_TYPE_REG_C:
+ case MessageType::RCCH_REG_C:
return decode(new MESSAGE_TYPE_REG_C(), data, length, offset);
- case RCCH_MESSAGE_TYPE_GRP_REG:
+ case MessageType::RCCH_GRP_REG:
return decode(new MESSAGE_TYPE_GRP_REG(), data, length, offset);
default:
LogError(LOG_NXDN, "RCCH::decodeRCCH(), unknown RCCH value, messageType = $%02X", messageType);
diff --git a/src/common/p25/NID.cpp b/src/common/p25/NID.cpp
index f6cf1f32..b3259acc 100644
--- a/src/common/p25/NID.cpp
+++ b/src/common/p25/NID.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2016 Jonathan Naylor, G4KLX
-* Copyright (C) 2017,2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2017,2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -20,6 +20,7 @@
#include "edac/BCH.h"
using namespace p25;
+using namespace p25::defines;
#include
@@ -38,7 +39,7 @@ const uint32_t MAX_NID_ERRS = 7U;//5U;
///
/// P25 Network Access Code.
NID::NID(uint32_t nac) :
- m_duid(0U),
+ m_duid(DUID::HDU),
m_nac(nac),
m_rxTx(nullptr),
m_tx(nullptr),
@@ -78,51 +79,51 @@ bool NID::decode(const uint8_t* data)
P25Utils::decode(data, nid, 48U, 114U);
// handle digital "squelch" NAC
- if ((m_nac == P25_NAC_DIGITAL_SQ) || (m_nac == P25_NAC_REUSE_RX_NAC)) {
+ if ((m_nac == NAC_DIGITAL_SQ) || (m_nac == NAC_REUSE_RX_NAC)) {
uint32_t nac = ((nid[0U] << 4) + (nid[1U] >> 4)) & 0xFFFU;
cleanupArrays();
createRxTxNID(nac); // bryanb: I hate this and it'll be slow
}
- uint32_t errs = P25Utils::compare(nid, m_rxTx[P25_DUID_LDU1], P25_NID_LENGTH_BYTES);
+ uint32_t errs = P25Utils::compare(nid, m_rxTx[DUID::LDU1], P25_NID_LENGTH_BYTES);
if (errs < MAX_NID_ERRS) {
- m_duid = P25_DUID_LDU1;
+ m_duid = DUID::LDU1;
return true;
}
- errs = P25Utils::compare(nid, m_rxTx[P25_DUID_LDU2], P25_NID_LENGTH_BYTES);
+ errs = P25Utils::compare(nid, m_rxTx[DUID::LDU2], P25_NID_LENGTH_BYTES);
if (errs < MAX_NID_ERRS) {
- m_duid = P25_DUID_LDU2;
+ m_duid = DUID::LDU2;
return true;
}
- errs = P25Utils::compare(nid, m_rxTx[P25_DUID_PDU], P25_NID_LENGTH_BYTES);
+ errs = P25Utils::compare(nid, m_rxTx[DUID::PDU], P25_NID_LENGTH_BYTES);
if (errs < MAX_NID_ERRS) {
- m_duid = P25_DUID_PDU;
+ m_duid = DUID::PDU;
return true;
}
- errs = P25Utils::compare(nid, m_rxTx[P25_DUID_TSDU], P25_NID_LENGTH_BYTES);
+ errs = P25Utils::compare(nid, m_rxTx[DUID::TSDU], P25_NID_LENGTH_BYTES);
if (errs < MAX_NID_ERRS) {
- m_duid = P25_DUID_TSDU;
+ m_duid = DUID::TSDU;
return true;
}
- errs = P25Utils::compare(nid, m_rxTx[P25_DUID_HDU], P25_NID_LENGTH_BYTES);
+ errs = P25Utils::compare(nid, m_rxTx[DUID::HDU], P25_NID_LENGTH_BYTES);
if (errs < MAX_NID_ERRS) {
- m_duid = P25_DUID_HDU;
+ m_duid = DUID::HDU;
return true;
}
- errs = P25Utils::compare(nid, m_rxTx[P25_DUID_TDULC], P25_NID_LENGTH_BYTES);
+ errs = P25Utils::compare(nid, m_rxTx[DUID::TDULC], P25_NID_LENGTH_BYTES);
if (errs < MAX_NID_ERRS) {
- m_duid = P25_DUID_TDULC;
+ m_duid = DUID::TDULC;
return true;
}
- errs = P25Utils::compare(nid, m_rxTx[P25_DUID_TDU], P25_NID_LENGTH_BYTES);
+ errs = P25Utils::compare(nid, m_rxTx[DUID::TDU], P25_NID_LENGTH_BYTES);
if (errs < MAX_NID_ERRS) {
- m_duid = P25_DUID_TDU;
+ m_duid = DUID::TDU;
return true;
}
@@ -134,19 +135,19 @@ bool NID::decode(const uint8_t* data)
///
///
///
-void NID::encode(uint8_t* data, uint8_t duid)
+void NID::encode(uint8_t* data, defines::DUID::E duid)
{
assert(data != nullptr);
if (m_splitNac) {
switch (duid) {
- case P25_DUID_HDU:
- case P25_DUID_TDU:
- case P25_DUID_LDU1:
- case P25_DUID_PDU:
- case P25_DUID_TSDU:
- case P25_DUID_LDU2:
- case P25_DUID_TDULC:
+ case DUID::HDU:
+ case DUID::TDU:
+ case DUID::LDU1:
+ case DUID::PDU:
+ case DUID::TSDU:
+ case DUID::LDU2:
+ case DUID::TDULC:
P25Utils::encode(m_tx[duid], data, 48U, 114U);
break;
default:
@@ -155,19 +156,19 @@ void NID::encode(uint8_t* data, uint8_t duid)
}
else {
// handle digital "squelch" NAC
- if (m_nac == P25_NAC_DIGITAL_SQ) {
+ if (m_nac == NAC_DIGITAL_SQ) {
cleanupArrays();
- createRxTxNID(P25_DEFAULT_NAC);
+ createRxTxNID(DEFAULT_NAC);
}
switch (duid) {
- case P25_DUID_HDU:
- case P25_DUID_TDU:
- case P25_DUID_LDU1:
- case P25_DUID_PDU:
- case P25_DUID_TSDU:
- case P25_DUID_LDU2:
- case P25_DUID_TDULC:
+ case DUID::HDU:
+ case DUID::TDU:
+ case DUID::LDU1:
+ case DUID::PDU:
+ case DUID::TSDU:
+ case DUID::LDU2:
+ case DUID::TDULC:
P25Utils::encode(m_rxTx[duid], data, 48U, 114U);
break;
default:
@@ -219,54 +220,54 @@ void NID::createRxTxNID(uint32_t nac)
{
edac::BCH bch;
- m_rxTx[P25_DUID_HDU] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_rxTx[P25_DUID_HDU][0U] = (nac >> 4) & 0xFFU;
- m_rxTx[P25_DUID_HDU][1U] = (nac << 4) & 0xF0U;
- m_rxTx[P25_DUID_HDU][1U] |= P25_DUID_HDU;
- bch.encode(m_rxTx[P25_DUID_HDU]);
- m_rxTx[P25_DUID_HDU][7U] &= 0xFEU; // Clear the parity bit
-
- m_rxTx[P25_DUID_TDU] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_rxTx[P25_DUID_TDU][0U] = (nac >> 4) & 0xFFU;
- m_rxTx[P25_DUID_TDU][1U] = (nac << 4) & 0xF0U;
- m_rxTx[P25_DUID_TDU][1U] |= P25_DUID_TDU;
- bch.encode(m_rxTx[P25_DUID_TDU]);
- m_rxTx[P25_DUID_TDU][7U] &= 0xFEU; // Clear the parity bit
-
- m_rxTx[P25_DUID_LDU1] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_rxTx[P25_DUID_LDU1][0U] = (nac >> 4) & 0xFFU;
- m_rxTx[P25_DUID_LDU1][1U] = (nac << 4) & 0xF0U;
- m_rxTx[P25_DUID_LDU1][1U] |= P25_DUID_LDU1;
- bch.encode(m_rxTx[P25_DUID_LDU1]);
- m_rxTx[P25_DUID_LDU1][7U] |= 0x01U; // Set the parity bit
-
- m_rxTx[P25_DUID_PDU] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_rxTx[P25_DUID_PDU][0U] = (nac >> 4) & 0xFFU;
- m_rxTx[P25_DUID_PDU][1U] = (nac << 4) & 0xF0U;
- m_rxTx[P25_DUID_PDU][1U] |= P25_DUID_PDU;
- bch.encode(m_rxTx[P25_DUID_PDU]);
- m_rxTx[P25_DUID_PDU][7U] &= 0xFEU; // Clear the parity bit
-
- m_rxTx[P25_DUID_TSDU] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_rxTx[P25_DUID_TSDU][0U] = (nac >> 4) & 0xFFU;
- m_rxTx[P25_DUID_TSDU][1U] = (nac << 4) & 0xF0U;
- m_rxTx[P25_DUID_TSDU][1U] |= P25_DUID_TSDU;
- bch.encode(m_rxTx[P25_DUID_TSDU]);
- m_rxTx[P25_DUID_TSDU][7U] &= 0xFEU; // Clear the parity bit
-
- m_rxTx[P25_DUID_LDU2] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_rxTx[P25_DUID_LDU2][0U] = (nac >> 4) & 0xFFU;
- m_rxTx[P25_DUID_LDU2][1U] = (nac << 4) & 0xF0U;
- m_rxTx[P25_DUID_LDU2][1U] |= P25_DUID_LDU2;
- bch.encode(m_rxTx[P25_DUID_LDU2]);
- m_rxTx[P25_DUID_LDU2][7U] |= 0x01U; // Set the parity bit
-
- m_rxTx[P25_DUID_TDULC] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_rxTx[P25_DUID_TDULC][0U] = (nac >> 4) & 0xFFU;
- m_rxTx[P25_DUID_TDULC][1U] = (nac << 4) & 0xF0U;
- m_rxTx[P25_DUID_TDULC][1U] |= P25_DUID_TDULC;
- bch.encode(m_rxTx[P25_DUID_TDULC]);
- m_rxTx[P25_DUID_TDULC][7U] &= 0xFEU; // Clear the parity bit
+ m_rxTx[DUID::HDU] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_rxTx[DUID::HDU][0U] = (nac >> 4) & 0xFFU;
+ m_rxTx[DUID::HDU][1U] = (nac << 4) & 0xF0U;
+ m_rxTx[DUID::HDU][1U] |= DUID::HDU;
+ bch.encode(m_rxTx[DUID::HDU]);
+ m_rxTx[DUID::HDU][7U] &= 0xFEU; // Clear the parity bit
+
+ m_rxTx[DUID::TDU] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_rxTx[DUID::TDU][0U] = (nac >> 4) & 0xFFU;
+ m_rxTx[DUID::TDU][1U] = (nac << 4) & 0xF0U;
+ m_rxTx[DUID::TDU][1U] |= DUID::TDU;
+ bch.encode(m_rxTx[DUID::TDU]);
+ m_rxTx[DUID::TDU][7U] &= 0xFEU; // Clear the parity bit
+
+ m_rxTx[DUID::LDU1] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_rxTx[DUID::LDU1][0U] = (nac >> 4) & 0xFFU;
+ m_rxTx[DUID::LDU1][1U] = (nac << 4) & 0xF0U;
+ m_rxTx[DUID::LDU1][1U] |= DUID::LDU1;
+ bch.encode(m_rxTx[DUID::LDU1]);
+ m_rxTx[DUID::LDU1][7U] |= 0x01U; // Set the parity bit
+
+ m_rxTx[DUID::PDU] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_rxTx[DUID::PDU][0U] = (nac >> 4) & 0xFFU;
+ m_rxTx[DUID::PDU][1U] = (nac << 4) & 0xF0U;
+ m_rxTx[DUID::PDU][1U] |= DUID::PDU;
+ bch.encode(m_rxTx[DUID::PDU]);
+ m_rxTx[DUID::PDU][7U] &= 0xFEU; // Clear the parity bit
+
+ m_rxTx[DUID::TSDU] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_rxTx[DUID::TSDU][0U] = (nac >> 4) & 0xFFU;
+ m_rxTx[DUID::TSDU][1U] = (nac << 4) & 0xF0U;
+ m_rxTx[DUID::TSDU][1U] |= DUID::TSDU;
+ bch.encode(m_rxTx[DUID::TSDU]);
+ m_rxTx[DUID::TSDU][7U] &= 0xFEU; // Clear the parity bit
+
+ m_rxTx[DUID::LDU2] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_rxTx[DUID::LDU2][0U] = (nac >> 4) & 0xFFU;
+ m_rxTx[DUID::LDU2][1U] = (nac << 4) & 0xF0U;
+ m_rxTx[DUID::LDU2][1U] |= DUID::LDU2;
+ bch.encode(m_rxTx[DUID::LDU2]);
+ m_rxTx[DUID::LDU2][7U] |= 0x01U; // Set the parity bit
+
+ m_rxTx[DUID::TDULC] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_rxTx[DUID::TDULC][0U] = (nac >> 4) & 0xFFU;
+ m_rxTx[DUID::TDULC][1U] = (nac << 4) & 0xF0U;
+ m_rxTx[DUID::TDULC][1U] |= DUID::TDULC;
+ bch.encode(m_rxTx[DUID::TDULC]);
+ m_rxTx[DUID::TDULC][7U] &= 0xFEU; // Clear the parity bit
}
///
@@ -277,52 +278,52 @@ void NID::createTxNID(uint32_t nac)
{
edac::BCH bch;
- m_tx[P25_DUID_HDU] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_tx[P25_DUID_HDU][0U] = (nac >> 4) & 0xFFU;
- m_tx[P25_DUID_HDU][1U] = (nac << 4) & 0xF0U;
- m_tx[P25_DUID_HDU][1U] |= P25_DUID_HDU;
- bch.encode(m_tx[P25_DUID_HDU]);
- m_tx[P25_DUID_HDU][7U] &= 0xFEU; // Clear the parity bit
-
- m_tx[P25_DUID_TDU] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_tx[P25_DUID_TDU][0U] = (nac >> 4) & 0xFFU;
- m_tx[P25_DUID_TDU][1U] = (nac << 4) & 0xF0U;
- m_tx[P25_DUID_TDU][1U] |= P25_DUID_TDU;
- bch.encode(m_tx[P25_DUID_TDU]);
- m_tx[P25_DUID_TDU][7U] &= 0xFEU; // Clear the parity bit
-
- m_tx[P25_DUID_LDU1] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_tx[P25_DUID_LDU1][0U] = (nac >> 4) & 0xFFU;
- m_tx[P25_DUID_LDU1][1U] = (nac << 4) & 0xF0U;
- m_tx[P25_DUID_LDU1][1U] |= P25_DUID_LDU1;
- bch.encode(m_tx[P25_DUID_LDU1]);
- m_tx[P25_DUID_LDU1][7U] |= 0x01U; // Set the parity bit
-
- m_tx[P25_DUID_PDU] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_tx[P25_DUID_PDU][0U] = (nac >> 4) & 0xFFU;
- m_tx[P25_DUID_PDU][1U] = (nac << 4) & 0xF0U;
- m_tx[P25_DUID_PDU][1U] |= P25_DUID_PDU;
- bch.encode(m_tx[P25_DUID_PDU]);
- m_tx[P25_DUID_PDU][7U] &= 0xFEU; // Clear the parity bit
-
- m_tx[P25_DUID_TSDU] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_tx[P25_DUID_TSDU][0U] = (nac >> 4) & 0xFFU;
- m_tx[P25_DUID_TSDU][1U] = (nac << 4) & 0xF0U;
- m_tx[P25_DUID_TSDU][1U] |= P25_DUID_TSDU;
- bch.encode(m_tx[P25_DUID_TSDU]);
- m_tx[P25_DUID_TSDU][7U] &= 0xFEU; // Clear the parity bit
-
- m_tx[P25_DUID_LDU2] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_tx[P25_DUID_LDU2][0U] = (nac >> 4) & 0xFFU;
- m_tx[P25_DUID_LDU2][1U] = (nac << 4) & 0xF0U;
- m_tx[P25_DUID_LDU2][1U] |= P25_DUID_LDU2;
- bch.encode(m_tx[P25_DUID_LDU2]);
- m_tx[P25_DUID_LDU2][7U] |= 0x01U; // Set the parity bit
-
- m_tx[P25_DUID_TDULC] = new uint8_t[P25_NID_LENGTH_BYTES];
- m_tx[P25_DUID_TDULC][0U] = (nac >> 4) & 0xFFU;
- m_tx[P25_DUID_TDULC][1U] = (nac << 4) & 0xF0U;
- m_tx[P25_DUID_TDULC][1U] |= P25_DUID_TDULC;
- bch.encode(m_tx[P25_DUID_TDULC]);
- m_tx[P25_DUID_TDULC][7U] &= 0xFEU; // Clear the parity bit
+ m_tx[DUID::HDU] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_tx[DUID::HDU][0U] = (nac >> 4) & 0xFFU;
+ m_tx[DUID::HDU][1U] = (nac << 4) & 0xF0U;
+ m_tx[DUID::HDU][1U] |= DUID::HDU;
+ bch.encode(m_tx[DUID::HDU]);
+ m_tx[DUID::HDU][7U] &= 0xFEU; // Clear the parity bit
+
+ m_tx[DUID::TDU] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_tx[DUID::TDU][0U] = (nac >> 4) & 0xFFU;
+ m_tx[DUID::TDU][1U] = (nac << 4) & 0xF0U;
+ m_tx[DUID::TDU][1U] |= DUID::TDU;
+ bch.encode(m_tx[DUID::TDU]);
+ m_tx[DUID::TDU][7U] &= 0xFEU; // Clear the parity bit
+
+ m_tx[DUID::LDU1] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_tx[DUID::LDU1][0U] = (nac >> 4) & 0xFFU;
+ m_tx[DUID::LDU1][1U] = (nac << 4) & 0xF0U;
+ m_tx[DUID::LDU1][1U] |= DUID::LDU1;
+ bch.encode(m_tx[DUID::LDU1]);
+ m_tx[DUID::LDU1][7U] |= 0x01U; // Set the parity bit
+
+ m_tx[DUID::PDU] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_tx[DUID::PDU][0U] = (nac >> 4) & 0xFFU;
+ m_tx[DUID::PDU][1U] = (nac << 4) & 0xF0U;
+ m_tx[DUID::PDU][1U] |= DUID::PDU;
+ bch.encode(m_tx[DUID::PDU]);
+ m_tx[DUID::PDU][7U] &= 0xFEU; // Clear the parity bit
+
+ m_tx[DUID::TSDU] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_tx[DUID::TSDU][0U] = (nac >> 4) & 0xFFU;
+ m_tx[DUID::TSDU][1U] = (nac << 4) & 0xF0U;
+ m_tx[DUID::TSDU][1U] |= DUID::TSDU;
+ bch.encode(m_tx[DUID::TSDU]);
+ m_tx[DUID::TSDU][7U] &= 0xFEU; // Clear the parity bit
+
+ m_tx[DUID::LDU2] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_tx[DUID::LDU2][0U] = (nac >> 4) & 0xFFU;
+ m_tx[DUID::LDU2][1U] = (nac << 4) & 0xF0U;
+ m_tx[DUID::LDU2][1U] |= DUID::LDU2;
+ bch.encode(m_tx[DUID::LDU2]);
+ m_tx[DUID::LDU2][7U] |= 0x01U; // Set the parity bit
+
+ m_tx[DUID::TDULC] = new uint8_t[P25_NID_LENGTH_BYTES];
+ m_tx[DUID::TDULC][0U] = (nac >> 4) & 0xFFU;
+ m_tx[DUID::TDULC][1U] = (nac << 4) & 0xF0U;
+ m_tx[DUID::TDULC][1U] |= DUID::TDULC;
+ bch.encode(m_tx[DUID::TDULC]);
+ m_tx[DUID::TDULC][7U] &= 0xFEU; // Clear the parity bit
}
diff --git a/src/common/p25/NID.h b/src/common/p25/NID.h
index 0bfcdc24..ce070e0e 100644
--- a/src/common/p25/NID.h
+++ b/src/common/p25/NID.h
@@ -9,13 +9,14 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2016 Jonathan Naylor, G4KLX
-* Copyright (C) 2017,2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2017,2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__P25_NID_H__)
#define __P25_NID_H__
#include "common/Defines.h"
+#include "common/p25/P25Defines.h"
namespace p25
{
@@ -34,14 +35,14 @@ namespace p25
/// Decodes P25 network identifier data.
bool decode(const uint8_t* data);
/// Encodes P25 network identifier data.
- void encode(uint8_t* data, uint8_t duid);
+ void encode(uint8_t* data, defines::DUID::E duid);
/// Helper to configure a separate Tx NAC.
void setTxNAC(uint32_t nac);
public:
/// Data unit ID.
- __READONLY_PROPERTY(uint8_t, duid, DUID);
+ __READONLY_PROPERTY(defines::DUID::E, duid, DUID);
private:
uint32_t m_nac;
diff --git a/src/common/p25/P25Defines.h b/src/common/p25/P25Defines.h
index 1cb9d332..7b085dfa 100644
--- a/src/common/p25/P25Defines.h
+++ b/src/common/p25/P25Defines.h
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2016 Jonathan Naylor, G4KLX
-* Copyright (C) 2017-2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2017-2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__P25_DEFINES_H__)
@@ -17,371 +17,497 @@
#include "common/Defines.h"
+// Shorthand macro to p25::defines -- keeps source code that doesn't use "using" concise
+#define P25DEF p25::defines
namespace p25
{
- // ---------------------------------------------------------------------------
- // Constants
- // ---------------------------------------------------------------------------
+ namespace defines
+ {
+ // ---------------------------------------------------------------------------
+ // 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_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_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_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_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_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 P25_MI_LENGTH_BYTES = 9U;
- const uint32_t P25_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 P25_NULL_IMBE[] = { 0x04U, 0x0CU, 0xFDU, 0x7BU, 0xFBU, 0x7DU, 0xF2U, 0x7BU, 0x3DU, 0x9EU, 0x45U };
- const uint8_t P25_ENCRYPTED_NULL_IMBE[] = { 0xFCU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U };
-
- const uint8_t P25_MFG_STANDARD = 0x00U;
- const uint8_t P25_MFG_STANDARD_ALT = 0x01U;
-
- const uint8_t P25_MFG_MOT = 0x90U;
- const uint8_t P25_MFG_DVM_OCS = 0x9CU; // P25 MFId used for internal signalling; Omaha Communication Systems, LLC ($9C)
-
- const uint8_t P25_MOT_CALLSIGN_LENGTH_BYTES = 8U;
-
- const uint8_t P25_AUTH_RES_LENGTH_BYTES = 4U;
- const uint8_t P25_AUTH_RAND_SEED_LENGTH_BYTES = 10U;
- const uint8_t P25_AUTH_RAND_CHLNG_LENGTH_BYTES = 5U;
- const uint8_t P25_AUTH_KEY_LENGTH_BYTES = 16U;
-
- const uint8_t P25_ALGO_UNENCRYPT = 0x80U;
-
- const uint8_t P25_IDEN_UP_VU_BW_625K = 0x04U;
- const uint8_t P25_IDEN_UP_VU_BW_125K = 0x05U;
-
- const uint8_t P25_SVC_CLS_INVALID = 0x00U;
- const uint8_t P25_SVC_CLS_COMPOSITE = 0x01U;
- const uint8_t P25_SVC_CLS_VOICE = 0x10U;
- const uint8_t P25_SVC_CLS_DATA = 0x20U;
- const uint8_t P25_SVC_CLS_REG = 0x40U;
- const uint8_t P25_SVC_CLS_AUTH = 0x80U;
-
- const uint32_t P25_SYS_SRV_NET_ACTIVE = 0x0200000U;
- const uint32_t P25_SYS_SRV_GROUP_VOICE = 0x0080000U;
- const uint32_t P25_SYS_SRV_IND_VOICE = 0x0040000U;
- const uint32_t P25_SYS_SRV_PSTN_UNIT_VOICE = 0x0020000U;
- const uint32_t P25_SYS_SRV_UNIT_PSTN_VOICE = 0x0010000U;
- const uint32_t P25_SYS_SRV_GROUP_DATA = 0x0004000U;
- const uint32_t P25_SYS_SRV_IND_DATA = 0x0002000U;
- const uint32_t P25_SYS_SRV_UNIT_REG = 0x0000800U;
- const uint32_t P25_SYS_SRV_GROUP_AFF = 0x0000400U;
- const uint32_t P25_SYS_SRV_GROUP_AFF_Q = 0x0000200U;
- const uint32_t P25_SYS_SRV_USER_STS = 0x0000040U;
- const uint32_t P25_SYS_SRV_USER_MSG = 0x0000020U;
- const uint32_t P25_SYS_SRV_UNIT_STS = 0x0000010U;
- const uint32_t P25_SYS_SRV_USER_STS_Q = 0x0000008U;
- const uint32_t P25_SYS_SRV_UNIT_STS_Q = 0x0000004U;
- const uint32_t P25_SYS_SRV_CALL_ALRT = 0x0000002U;
- const uint32_t P25_SYS_SRV_EMERGENCY = 0x0000001U;
-
- const uint32_t P25_SYS_SRV_DEFAULT = P25_SYS_SRV_EMERGENCY | P25_SYS_SRV_CALL_ALRT | P25_SYS_SRV_USER_MSG |
- P25_SYS_SRV_UNIT_STS_Q | P25_SYS_SRV_USER_STS_Q | P25_SYS_SRV_UNIT_STS | P25_SYS_SRV_USER_STS |
- P25_SYS_SRV_IND_DATA | P25_SYS_SRV_IND_VOICE | P25_SYS_SRV_GROUP_DATA | P25_SYS_SRV_GROUP_VOICE;
- const uint32_t P25_SYS_SRV_TRUNK = P25_SYS_SRV_DEFAULT | P25_SYS_SRV_GROUP_AFF | P25_SYS_SRV_UNIT_REG | P25_SYS_SRV_GROUP_AFF_Q;
-
- const uint8_t P25_CFVA_CONV = 0x08U;
- const uint8_t P25_CFVA_FAILURE = 0x04U;
- const uint8_t P25_CFVA_VALID = 0x02U;
- const uint8_t P25_CFVA_NETWORK = 0x01U;
-
- const uint8_t P25_RSP_ACCEPT = 0x00U;
- const uint8_t P25_RSP_FAIL = 0x01U;
- const uint8_t P25_RSP_DENY = 0x02U;
- const uint8_t P25_RSP_REFUSED = 0x03U;
-
- const uint8_t P25_ANS_RSP_PROCEED = 0x20U;
- const uint8_t P25_ANS_RSP_DENY = 0x21U;
- const uint8_t P25_ANS_RSP_WAIT = 0x22U;
-
- const uint8_t P25_CAN_SRV_NONE = 0x00U;
- const uint8_t P25_CAN_SRV_TERM_QUE = 0x10U;
- const uint8_t P25_CAN_SRV_TERM_RSRC_ASSIGN = 0x20U;
-
- const uint32_t P25_DENY_RSN_REQ_UNIT_NOT_VALID = 0x10U;
- const uint32_t P25_DENY_RSN_REQ_UNIT_NOT_AUTH = 0x11U;
-
- const uint32_t P25_DENY_RSN_TGT_UNIT_NOT_VALID = 0x20U;
- const uint32_t P25_DENY_RSN_TGT_UNIT_NOT_AUTH = 0x21U;
- const uint32_t P25_DENY_RSN_SU_FAILED_AUTH = 0x22U;
- const uint32_t P25_DENY_RSN_TGT_UNIT_REFUSED = 0x2FU;
-
- const uint32_t P25_DENY_RSN_TGT_GROUP_NOT_VALID = 0x30U;
- const uint32_t P25_DENY_RSN_TGT_GROUP_NOT_AUTH = 0x31U;
-
- const uint32_t P25_DENY_RSN_NO_NET_RSRC_AVAIL = 0x53U;
- const uint32_t P25_DENY_RSN_NO_RF_RSRC_AVAIL = 0x54U;
- const uint32_t P25_DENY_RSN_SVC_IN_USE = 0x55U;
-
- const uint32_t P25_DENY_RSN_SITE_ACCESS_DENIAL = 0x60U;
-
- const uint32_t P25_DENY_RSN_PTT_COLLIDE = 0x67U;
- const uint32_t P25_DENY_RSN_PTT_BONK = 0x77U;
-
- const uint32_t P25_DENY_RSN_SYS_UNSUPPORTED_SVC = 0xFFU;
-
- const uint32_t P25_QUE_RSN_REQ_ACTIVE_SERVICE = 0x10U;
- const uint32_t P25_QUE_RSN_TGT_ACTIVE_SERVICE = 0x20U;
-
- const uint32_t P25_QUE_RSN_TGT_UNIT_QUEUED = 0x2FU;
-
- const uint32_t P25_QUE_RSN_CHN_RESOURCE_NOT_AVAIL = 0x40U;
-
- const uint32_t P25_EXT_FNCT_CHECK = 0x0000U; // Radio Check
- const uint32_t P25_EXT_FNCT_UNINHIBIT = 0x007EU; // Radio Uninhibit
- const uint32_t P25_EXT_FNCT_INHIBIT = 0x007FU; // Radio Inhibit
- const uint32_t P25_EXT_FNCT_CHECK_ACK = 0x0080U; // Radio Check Ack
- const uint32_t P25_EXT_FNCT_UNINHIBIT_ACK = 0x00FEU; // Radio Uninhibit Ack
- const uint32_t P25_EXT_FNCT_INHIBIT_ACK = 0x00FFU; // Radio Inhibit Ack
-
- const uint32_t P25_WACN_STD_DEFAULT = 0xBB800U;
-
- const uint32_t P25_SID_STD_DEFAULT = 0x001U;
-
- const uint32_t P25_NAC_DIGITAL_SQ = 0xF7EU;
- const uint32_t P25_NAC_REUSE_RX_NAC = 0xF7FU;
- const uint32_t P25_DEFAULT_NAC = 0x293U;
-
- const uint32_t P25_WUID_FNE = 0xFFFFFCU;
- const uint32_t P25_WUID_REG = 0xFFFFFEU;
- const uint32_t P25_WUID_ALL = 0xFFFFFFU;
-
- const uint32_t P25_TGID_ALL = 0xFFFFU;
-
- const uint32_t DEFAULT_SILENCE_THRESHOLD = 124U;
- const uint32_t DEFAULT_FRAME_LOSS_THRESHOLD = 6U;
- const uint32_t MAX_P25_VOICE_ERRORS = 1233U;
-
- const uint8_t P25_FT_HDU_VALID = 0x01U;
- const uint8_t P25_FT_HDU_LATE_ENTRY = 0x02U;
- const uint8_t P25_FT_TERMINATOR = 0x03U;
- const uint8_t P25_FT_DATA_UNIT = 0x00U;
-
- // PDU Format Type(s)
- const uint8_t PDU_FMT_RSP = 0x03U;
- const uint8_t PDU_FMT_UNCONFIRMED = 0x15U;
- const uint8_t PDU_FMT_CONFIRMED = 0x16U;
- const uint8_t PDU_FMT_AMBT = 0x17U;
-
- // PDU SAP
- const uint8_t PDU_SAP_USER_DATA = 0x00U;
- const uint8_t PDU_SAP_ENC_USER_DATA = 0x01U;
-
- const uint8_t PDU_SAP_PACKET_DATA = 0x04U;
-
- const uint8_t PDU_SAP_ARP = 0x05U;
-
- const uint8_t PDU_SAP_SNDCP_CTRL_DATA = 0x06U;
-
- const uint8_t PDU_SAP_EXT_ADDR = 0x1FU;
-
- const uint8_t PDU_SAP_REG = 0x20U;
-
- const uint8_t PDU_SAP_UNENC_KMM = 0x28U;
- const uint8_t PDU_SAP_ENC_KMM = 0x29U;
-
- const uint8_t PDU_SAP_TRUNK_CTRL = 0x3DU;
-
- // PDU ACK Class
- const uint8_t PDU_ACK_CLASS_ACK = 0x00U;
- const uint8_t PDU_ACK_CLASS_NACK = 0x01U;
- const uint8_t PDU_ACK_CLASS_ACK_RETRY = 0x02U;
-
- // PDU ACK Type(s)
- const uint8_t PDU_ACK_TYPE_RETRY = 0x00U;
-
- const uint8_t PDU_ACK_TYPE_ACK = 0x01U;
-
- const uint8_t PDU_ACK_TYPE_NACK_ILLEGAL = 0x00U; // Illegal Format
- const uint8_t PDU_ACK_TYPE_NACK_PACKET_CRC = 0x01U; // Packet CRC
- const uint8_t PDU_ACK_TYPE_NACK_MEMORY_FULL = 0x02U; // Memory Full
- const uint8_t PDU_ACK_TYPE_NACK_SEQ = 0x03U; // Out of logical sequence FSN
- const uint8_t PDU_ACK_TYPE_NACK_UNDELIVERABLE = 0x04U;// Undeliverable
- const uint8_t PDU_ACK_TYPE_NACK_OUT_OF_SEQ = 0x05U; // Out of sequence, N(S) != V(R) or V(R) + 1
- const uint8_t PDU_ACK_TYPE_NACK_INVL_USER = 0x06U; // Invalid User disallowed by the system
-
- // PDU Registration Type(s)
- const uint8_t PDU_REG_TYPE_REQ_CNCT = 0x00U;
- const uint8_t PDU_REG_TYPE_REQ_DISCNCT = 0x01U;
- const uint8_t PDU_REG_TYPE_RSP_ACCPT = 0x04U;
- const uint8_t PDU_REG_TYPE_RSP_DENY = 0x05U;
-
- // PDU SNDCP Type(s)
- const uint8_t PDU_TYPE_SNDCP_ACT_TDS_CTX_ACCPT = 0x00U;
- const uint8_t PDU_TYPE_SNDCP_DEACT_TDS_CTX_ACCPT = 0x01U;
- const uint8_t PDU_TYPE_SNDCP_DEACT_TDS_CTX_REQ = 0x02U;
- const uint8_t PDU_TYPE_SNDCP_ACT_TDS_CTX_REJECT = 0x03U;
- const uint8_t PDU_TYPE_SNDCP_RF_UNCONFIRMED = 0x04U;
- const uint8_t PDU_TYPE_SNDCP_RF_CONFIRMED = 0x05U;
-
- const uint8_t LC_SVC_OPT_EMERGENCY = 0x80U;
- const uint8_t LC_SVC_OPT_ENCRYPTION = 0x40U;
-
- // LDUx/TDULC Link Control Opcode(s)
- const uint8_t LC_GROUP = 0x00U; // GRP VCH USER - Group Voice Channel User
- const uint8_t LC_GROUP_UPDT = 0x02U; // GRP VCH UPDT - Group Voice Channel Update
- const uint8_t LC_PRIVATE = 0x03U; // UU VCH USER - Unit-to-Unit Voice Channel User
- const uint8_t LC_UU_ANS_REQ = 0x05U; // UU ANS REQ - Unit to Unit Answer Request
- const uint8_t LC_TEL_INT_VCH_USER = 0x06U; // TEL INT VCH USER - Telephone Interconnect Voice Channel User / MOT GPS DATA - Motorola In-Band GPS Data
- const uint8_t LC_TEL_INT_ANS_RQST = 0x07U; // TEL INT ANS RQST - Telephone Interconnect Answer Request
- const uint8_t LC_EXPLICIT_SOURCE_ID = 0x09U; // EXPLICIT SOURCE ID - Explicit Source ID
- const uint8_t LC_CALL_TERM = 0x0FU; // CALL TERM - Call Termination or Cancellation
- const uint8_t LC_IDEN_UP = 0x18U; // IDEN UP - Channel Identifier Update
- const uint8_t LC_SYS_SRV_BCAST = 0x20U; // SYS SRV BCAST - System Service Broadcast
- const uint8_t LC_ADJ_STS_BCAST = 0x22U; // ADJ STS BCAST - Adjacent Site Status Broadcast
- const uint8_t LC_RFSS_STS_BCAST = 0x23U; // RFSS STS BCAST - RFSS Status Broadcast
- const uint8_t LC_NET_STS_BCAST = 0x24U; // NET STS BCAST - Network Status Broadcast
- const uint8_t LC_CONV_FALLBACK = 0x2AU; // CONV FALLBACK - Conventional Fallback
-
- // LDUx/TDULC Motorola Link Control Opcode(s)
- const uint8_t LC_FAILSOFT = 0x02U; // FAILSOFT - Failsoft
-
- // TSBK ISP/OSP Shared Opcode(s)
- const uint8_t TSBK_IOSP_GRP_VCH = 0x00U; // GRP VCH REQ - Group Voice Channel Request (ISP), GRP VCH GRANT - Group Voice Channel Grant (OSP)
- const uint8_t TSBK_IOSP_UU_VCH = 0x04U; // UU VCH REQ - Unit-to-Unit Voice Channel Request (ISP), UU VCH GRANT - Unit-to-Unit Voice Channel Grant (OSP)
- const uint8_t TSBK_IOSP_UU_ANS = 0x05U; // UU ANS RSP - Unit-to-Unit Answer Response (ISP), UU ANS REQ - Unit-to-Unit Answer Request (OSP)
- const uint8_t TSBK_IOSP_TELE_INT_DIAL = 0x08U; // TELE INT DIAL REQ - Telephone Interconnect Request - Explicit (ISP), TELE INT DIAL GRANT - Telephone Interconnect Grant (OSP)
- const uint8_t TSBK_IOSP_TELE_INT_ANS = 0x0AU; // TELE INT ANS RSP - Telephone Interconnect Answer Response (ISP), TELE INT ANS REQ - Telephone Interconnect Answer Request (OSP)
- const uint8_t TSBK_IOSP_STS_UPDT = 0x18U; // STS UPDT REQ - Status Update Request (ISP), STS UPDT - Status Update (OSP)
- const uint8_t TSBK_IOSP_STS_Q = 0x1AU; // STS Q REQ - Status Query Request (ISP), STS Q - Status Query (OSP)
- const uint8_t TSBK_IOSP_MSG_UPDT = 0x1CU; // MSG UPDT REQ - Message Update Request (ISP), MSG UPDT - Message Update (OSP)
- const uint8_t TSBK_IOSP_RAD_MON = 0x1DU; // RAD MON REQ - Radio Unit Monitor Request (ISP), RAD MON CMD - Radio Monitor Command (OSP)
- const uint8_t TSBK_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)
- const uint8_t TSBK_IOSP_CALL_ALRT = 0x1FU; // CALL ALRT REQ - Call Alert Request (ISP), CALL ALRT - Call Alert (OSP)
- const uint8_t TSBK_IOSP_ACK_RSP = 0x20U; // ACK RSP U - Acknowledge Response - Unit (ISP), ACK RSP FNE - Acknowledge Response - FNE (OSP)
- const uint8_t TSBK_IOSP_EXT_FNCT = 0x24U; // EXT FNCT RSP - Extended Function Response (ISP), EXT FNCT CMD - Extended Function Command (OSP)
- const uint8_t TSBK_IOSP_GRP_AFF = 0x28U; // GRP AFF REQ - Group Affiliation Request (ISP), GRP AFF RSP - Group Affiliation Response (OSP)
- const uint8_t TSBK_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)
- const uint8_t TSBK_ISP_TELE_INT_PSTN_REQ = 0x09U; // TELE INT PSTN REQ - Telephone Interconnect Request - Implicit
- const uint8_t TSBK_ISP_SNDCP_CH_REQ = 0x12U; // SNDCP CH REQ - SNDCP Data Channel Request
- const uint8_t TSBK_ISP_STS_Q_RSP = 0x19U; // STS Q RSP - Status Query Response
- const uint8_t TSBK_ISP_STS_Q_REQ = 0x1CU; // STS Q REQ - Status Query Request
- const uint8_t TSBK_ISP_CAN_SRV_REQ = 0x23U; // CAN SRV REQ - Cancel Service Request
- const uint8_t TSBK_ISP_EMERG_ALRM_REQ = 0x27U; // EMERG ALRM REQ - Emergency Alarm Request
- const uint8_t TSBK_ISP_GRP_AFF_Q_RSP = 0x29U; // GRP AFF Q RSP - Group Affiliation Query Response
- const uint8_t TSBK_ISP_U_DEREG_REQ = 0x2BU; // U DE REG REQ - Unit De-Registration Request
- const uint8_t TSBK_ISP_LOC_REG_REQ = 0x2DU; // LOC REG REQ - Location Registration Request
- const uint8_t TSBK_ISP_AUTH_RESP = 0x38U; // AUTH RESP - Authentication Response
- const uint8_t TSBK_ISP_AUTH_RESP_M = 0x39U; // AUTH RESP M - Authentication Response Mutual
- const uint8_t TSBK_ISP_AUTH_FNE_RST = 0x3AU; // AUTH FNE RST - Authentication FNE Result
- const uint8_t TSBK_ISP_AUTH_SU_DMD = 0x3BU; // AUTH SU DMD - Authentication SU Demand
-
- // TSBK Outbound Signalling Packet (OSP) Opcode(s)
- const uint8_t TSBK_OSP_GRP_VCH_GRANT_UPD = 0x02U; // GRP VCH GRANT UPD - Group Voice Channel Grant Update
- const uint8_t TSBK_OSP_UU_VCH_GRANT_UPD = 0x06U; // UU VCH GRANT UPD - Unit-to-Unit Voice Channel Grant Update
- const uint8_t TSBK_OSP_SNDCP_CH_GNT = 0x14U; // SNDCP CH GNT - SNDCP Data Channel Grant
- const uint8_t TSBK_OSP_SNDCP_CH_ANN = 0x16U; // SNDCP CH ANN - SNDCP Data Channel Announcement
- const uint8_t TSBK_OSP_STS_Q = 0x1AU; // STS Q - Status Query
- const uint8_t TSBK_OSP_DENY_RSP = 0x27U; // DENY RSP - Deny Response
- const uint8_t TSBK_OSP_SCCB_EXP = 0x29U; // SCCB - Secondary Control Channel Broadcast - Explicit
- const uint8_t TSBK_OSP_GRP_AFF_Q = 0x2AU; // GRP AFF Q - Group Affiliation Query
- const uint8_t TSBK_OSP_LOC_REG_RSP = 0x2BU; // LOC REG RSP - Location Registration Response
- const uint8_t TSBK_OSP_U_REG_CMD = 0x2DU; // U REG CMD - Unit Registration Command
- const uint8_t TSBK_OSP_U_DEREG_ACK = 0x2FU; // U DE REG ACK - Unit De-Registration Acknowledge
- const uint8_t TSBK_OSP_SYNC_BCAST = 0x30U; // SYNC BCAST - Synchronization Broadcast
- const uint8_t TSBK_OSP_AUTH_DMD = 0x31U; // AUTH DMD - Authentication Demand
- const uint8_t TSBK_OSP_AUTH_FNE_RESP = 0x32U; // AUTH FNE RESP - Authentication FNE Response
- const uint8_t TSBK_OSP_QUE_RSP = 0x33U; // QUE RSP - Queued Response
- const uint8_t TSBK_OSP_IDEN_UP_VU = 0x34U; // IDEN UP VU - Channel Identifier Update for VHF/UHF Bands
- const uint8_t TSBK_OSP_TIME_DATE_ANN = 0x35U; // TIME DATE ANN - Time and Date Announcement
- const uint8_t TSBK_OSP_SYS_SRV_BCAST = 0x38U; // SYS SRV BCAST - System Service Broadcast
- const uint8_t TSBK_OSP_SCCB = 0x39U; // SCCB - Secondary Control Channel Broadcast
- const uint8_t TSBK_OSP_RFSS_STS_BCAST = 0x3AU; // RFSS STS BCAST - RFSS Status Broadcast
- const uint8_t TSBK_OSP_NET_STS_BCAST = 0x3BU; // NET STS BCAST - Network Status Broadcast
- const uint8_t TSBK_OSP_ADJ_STS_BCAST = 0x3CU; // ADJ STS BCAST - Adjacent Site Status Broadcast
- const uint8_t TSBK_OSP_IDEN_UP = 0x3DU; // IDEN UP - Channel Identifier Update
-
- // TSBK Motorola Outbound Signalling Packet (OSP) Opcode(s)
- const uint8_t TSBK_OSP_MOT_GRG_ADD = 0x00U; // MOT GRG ADD - Motorola / Group Regroup Add (Patch Supergroup)
- const uint8_t TSBK_OSP_MOT_GRG_DEL = 0x01U; // MOT GRG DEL - Motorola / Group Regroup Delete (Unpatch Supergroup)
- const uint8_t TSBK_OSP_MOT_GRG_VCH_GRANT = 0x02U; // MOT GRG GROUP VCH GRANT / Group Regroup Voice Channel Grant
- const uint8_t TSBK_OSP_MOT_GRG_VCH_UPD = 0x03U; // MOT GRG GROUP VCH GRANT UPD / Group Regroup Voice Channel Grant Update
- const uint8_t TSBK_OSP_MOT_CC_BSI = 0x0BU; // MOT CC BSI - Motorola / Control Channel Base Station Identifier
- const uint8_t TSBK_OSP_MOT_PSH_CCH = 0x0EU; // MOT PSH CCH - Motorola / Planned Control Channel Shutdown
-
- // TSBK DVM Outbound Signalling Packet (OSP) Opcode(s)
- const uint8_t TSBK_OSP_DVM_GIT_HASH = 0x3FU; //
-
- // Data Unit ID(s)
- const uint8_t P25_DUID_HDU = 0x00U; // Header Data Unit
-#define P25_HDU_STR "P25_DUID_HDU (Header Data Unit)"
- const uint8_t P25_DUID_TDU = 0x03U; // Simple Terminator Data Unit
-#define P25_TDU_STR "P25_DUID_TDU (Simple Terminator Data Unit)"
- const uint8_t P25_DUID_LDU1 = 0x05U; // Logical Link Data Unit 1
-#define P25_LDU1_STR "P25_DUID_LDU1 (Logical Link Data Unit 1)"
- const uint8_t P25_DUID_VSELP1 = 0x06U; // Motorola VSELP 1
-#define P25_VSELP1_STR "P25_DUID_VSELP1 (VSELP Data Unit 1)"
- const uint8_t P25_DUID_TSDU = 0x07U; // Trunking System Data Unit
-#define P25_TSDU_STR "P25_DUID_TSDU (Trunking System Data Unit)"
- const uint8_t P25_DUID_VSELP2 = 0x09U; // Motorola VSELP 2
-#define P25_VSELP2_STR "P25_DUID_VSELP2 (VSELP Data Unit 2)"
- const uint8_t P25_DUID_LDU2 = 0x0AU; // Logical Link Data Unit 2
-#define P25_LDU2_STR "P25_DUID_LDU2 (Logical Link Data Unit 2)"
- const uint8_t P25_DUID_PDU = 0x0CU; // Packet Data Unit
-#define P25_PDU_STR "P25_DUID_PDU (Packet Data Unit)"
- const uint8_t P25_DUID_TDULC = 0x0FU; // Terminator Data Unit with Link Control
-#define P25_TDULC_STR "P25_DUID_TDULC (Terminator Data Unit with Link Control)"
+ 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;
+
+ /** Thresholds */
+ const uint32_t DEFAULT_SILENCE_THRESHOLD = 124U;
+ const uint32_t DEFAULT_FRAME_LOSS_THRESHOLD = 6U;
+ const uint32_t MAX_P25_VOICE_ERRORS = 1233U;
+
+ /** Manufacturer IDs */
+ const uint8_t MFG_STANDARD = 0x00U; // Standard MFId
+ const uint8_t MFG_STANDARD_ALT = 0x01U; // Alternate Standard MFId
+
+ const uint8_t MFG_MOT = 0x90U; // Motorola
+ const uint8_t MFG_DVM_OCS = 0x9CU; // DVM; Omaha Communication Systems, LLC ($9C)
+
+ /** Encryption Algorithms */
+ const uint8_t ALGO_UNENCRYPT = 0x80U; // Unencrypted
+
+ /** IDEN Table Bandwidth Sizes */
+ const uint8_t IDEN_UP_VU_BW_625K = 0x04U;
+ const uint8_t IDEN_UP_VU_BW_125K = 0x05U;
+
+ ///
+ /// Station Service Classes
+ ///
+ namespace ServiceClass {
+ 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
+ };
+ }
+
+ ///
+ /// System Service Types
+ ///
+ namespace SystemService {
+ 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
+ };
+ }
+
+ 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;
+ const uint32_t SYS_SRV_TRUNK = SYS_SRV_DEFAULT | SystemService::GROUP_AFF | SystemService::UNIT_REG | SystemService::GROUP_AFF_Q;
+
+ ///
+ ///
+ ///
+ namespace CFVA {
+ enum : uint8_t {
+ CONV = 0x08U, // Conventional
+ FAILURE = 0x04U, // Failure
+ VALID = 0x02U, // Valid
+ NETWORK = 0x01U // Networked
+ };
+ }
+
+ ///
+ /// Response Codes
+ ///
+ namespace ResponseCode {
+ 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
+ };
+ }
+
+ ///
+ /// Cancel Service Codes
+ ///
+ namespace CancelService {
+ enum : uint8_t {
+ NONE = 0x00U, // None
+ TERM_QUE = 0x10U, // Terminate Queued
+ TERM_RSRC_ASSIGN = 0x20U // Terminate Resource Assigned
+ };
+ }
+
+ ///
+ /// Reason Codes
+ ///
+ namespace ReasonCode {
+ 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
+ };
+ }
+
+ ///
+ /// Extended Functions
+ ///
+ namespace ExtendedFunctions {
+ 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
+ };
+ }
+
+ /** Default Values */
+ const uint32_t NAC_DIGITAL_SQ = 0xF7EU; // Digital Squelch NAC
+ const uint32_t NAC_REUSE_RX_NAC = 0xF7FU; // Reuse RX NAC
+ const uint32_t DEFAULT_NAC = 0x293U; // Default NAC
+
+ const uint32_t WACN_STD_DEFAULT = 0xBB800U; // Default WACN
+ const uint32_t SID_STD_DEFAULT = 0x001U; // Default System ID
+
+ const uint32_t WUID_FNE = 0xFFFFFCU; // FNE Working Unit ID
+ const uint32_t WUID_REG = 0xFFFFFEU; // Registration Working Unit ID
+ const uint32_t WUID_ALL = 0xFFFFFFU; // All-call Working Unit ID
+
+ const uint32_t TGID_ALL = 0xFFFFU; // All-call Talkgroup ID
+
+ ///
+ /// DVM Network Frame Types
+ ///
+ namespace FrameType {
+ // DVM Network Frame Types Enumeration
+ 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
+ };
+ }
+ ///
+ /// Data Format Type
+ ///
+ namespace PDUFormatType {
+ enum : uint8_t {
+ RSP = 0x03U, // Response
+ UNCONFIRMED = 0x15U, // Unconfirmed PDU
+ CONFIRMED = 0x16U, // Confirmed PDU
+ AMBT = 0x17U // Alternate Multi Block Trunking
+ };
+ }
+
+ ///
+ /// Service Access Point
+ ///
+ namespace PDUSAP {
+ 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
+
+ REG = 0x20U, // Registration
+
+ UNENC_KMM = 0x28U, // Unencrypted KMM
+ ENC_KMM = 0x29U, // Encrypted KMM
+
+ TRUNK_CTRL = 0x3DU // Trunking Control
+ };
+ }
+
+ ///
+ /// Acknowledgement Class
+ ///
+ namespace PDUAckClass {
+ enum : uint8_t {
+ ACK = 0x00U, // Acknowledge
+ NACK = 0x01U, // Negative Acknowledge
+ ACK_RETRY = 0x02U // Acknowledge Retry
+ };
+ }
+
+ ///
+ /// Acknowledgement Type
+ ///
+ namespace PDUAckType {
+ 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
+ };
+ }
+
+ ///
+ /// Registration Type
+ ///
+ namespace PDURegType {
+ enum : uint8_t {
+ CNCT = 0x00U, // Connect
+ DISCNCT = 0x01U, // Disconnect
+ ACCPT = 0x04U, // Accept
+ DENY = 0x05U // Deny
+ };
+ }
+
+ ///
+ /// SNDCP Type
+ ///
+ namespace PDUSNDCPType {
+ enum : uint8_t {
+ ACT_TDS_CTX_ACCPT = 0x00U, // Activate Context Accept
+ DEACT_TDS_CTX_ACCPT = 0x01U, // Deactivate Context Accept
+ DEACT_TDS_CTX_REQ = 0x02U, // Deactivate Context Request
+ ACT_TDS_CTX_REJECT = 0x03U, // Activate Context Reject
+ RF_UNCONFIRMED = 0x04U, // RF Unconfirmed
+ RF_CONFIRMED = 0x05U // RF Confirmed
+ };
+ }
+
+ const uint8_t LC_SVC_OPT_EMERGENCY = 0x80U;
+ const uint8_t LC_SVC_OPT_ENCRYPTION = 0x40U;
+
+ ///
+ /// LDUx/TDULC Link Control Opcode(s)
+ ///
+ namespace LCO {
+ 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
+ };
+ }
+
+ ///
+ /// TSBK Control Opcode(s)
+ ///
+ namespace TSBKO {
+ 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_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, //
+ };
+ }
+
+ ///
+ /// Data Unit ID(s)
+ ///
+ namespace DUID {
+ // Data Unit ID Enumeration
+ 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__
diff --git a/src/common/p25/P25Utils.cpp b/src/common/p25/P25Utils.cpp
index 8c42f626..36c69b7a 100644
--- a/src/common/p25/P25Utils.cpp
+++ b/src/common/p25/P25Utils.cpp
@@ -17,6 +17,7 @@
#include "Utils.h"
using namespace p25;
+using namespace p25::defines;
#include
diff --git a/src/common/p25/P25Utils.h b/src/common/p25/P25Utils.h
index 11a906cb..cc7128d5 100644
--- a/src/common/p25/P25Utils.h
+++ b/src/common/p25/P25Utils.h
@@ -28,6 +28,8 @@ namespace p25
class HOST_SW_API P25Utils {
public:
/// Helper to test and clamp a P25 NAC.
+ /// Network Access Code
+ /// Clamped network access code.
static uint32_t nac(uint32_t nac)
{
if (nac < 0U) { // clamp to $000
@@ -41,6 +43,8 @@ namespace p25
}
/// Helper to test and clamp a P25 site ID.
+ /// Site ID
+ /// Clamped site ID.
static uint8_t siteId(uint8_t id)
{
if (id == 0U) { // clamp to 1
@@ -54,6 +58,8 @@ namespace p25
}
/// Helper to test and clamp a P25 network ID.
+ /// Network ID
+ /// Clamped network ID.
static uint32_t netId(uint32_t id)
{
if (id == 0U) { // clamp to 1
@@ -67,6 +73,8 @@ namespace p25
}
/// Helper to test and clamp a P25 system ID.
+ /// System ID
+ /// Clamped system ID.
static uint32_t sysId(uint32_t id)
{
if (id == 0U) { // clamp to 1
@@ -80,6 +88,8 @@ namespace p25
}
/// Helper to test and clamp a P25 RFSS ID.
+ /// RFSS ID
+ /// Clamped RFSS ID.
static uint8_t rfssId(uint8_t id)
{
if (id == 0U) { // clamp to 1
diff --git a/src/common/p25/SiteData.h b/src/common/p25/SiteData.h
index 3a9b9974..32424467 100644
--- a/src/common/p25/SiteData.h
+++ b/src/common/p25/SiteData.h
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2018 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2018,2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__P25_SITE_DATA_H__)
@@ -31,13 +31,13 @@ namespace p25
/// Initializes a new instance of the SiteData class.
SiteData() :
m_lra(0U),
- m_netId(P25_WACN_STD_DEFAULT),
- m_sysId(P25_SID_STD_DEFAULT),
+ m_netId(defines::WACN_STD_DEFAULT),
+ m_sysId(defines::SID_STD_DEFAULT),
m_rfssId(1U),
m_siteId(1U),
m_channelId(1U),
m_channelNo(1U),
- m_serviceClass(P25_SVC_CLS_VOICE | P25_SVC_CLS_DATA),
+ m_serviceClass(defines::ServiceClass::VOICE | defines::ServiceClass::DATA),
m_isAdjSite(false),
m_callsign("CHANGEME"),
m_chCnt(0U),
@@ -58,13 +58,13 @@ namespace p25
/// Local time offset.
SiteData(uint32_t netId, uint32_t sysId, uint8_t rfssId, uint8_t siteId, uint8_t lra, uint8_t channelId, uint32_t channelNo, uint8_t serviceClass, int8_t lto) :
m_lra(0U),
- m_netId(P25_WACN_STD_DEFAULT),
- m_sysId(P25_SID_STD_DEFAULT),
+ m_netId(defines::WACN_STD_DEFAULT),
+ m_sysId(defines::SID_STD_DEFAULT),
m_rfssId(1U),
m_siteId(1U),
m_channelId(1U),
m_channelNo(1U),
- m_serviceClass(P25_SVC_CLS_VOICE | P25_SVC_CLS_DATA),
+ m_serviceClass(defines::ServiceClass::VOICE | defines::ServiceClass::DATA),
m_isAdjSite(false),
m_callsign("CHANGEME"),
m_chCnt(0U),
@@ -110,7 +110,7 @@ namespace p25
std::random_device rd;
std::mt19937 mt(rd());
- std::uniform_int_distribution dist(0x01, P25_WACN_STD_DEFAULT);
+ std::uniform_int_distribution dist(0x01, defines::WACN_STD_DEFAULT);
m_netId = dist(mt);
// netId clamping
diff --git a/src/common/p25/Sync.cpp b/src/common/p25/Sync.cpp
index 5bbbed64..459a08e6 100644
--- a/src/common/p25/Sync.cpp
+++ b/src/common/p25/Sync.cpp
@@ -9,6 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016 Jonathan Naylor, G4KLX
+* Copyright (C) 2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -16,6 +17,7 @@
#include "p25/Sync.h"
using namespace p25;
+using namespace p25::defines;
#include
#include
diff --git a/src/common/p25/data/DataBlock.cpp b/src/common/p25/data/DataBlock.cpp
index 7da5d75e..a1339857 100644
--- a/src/common/p25/data/DataBlock.cpp
+++ b/src/common/p25/data/DataBlock.cpp
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2018,2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2018,2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -17,8 +17,9 @@
#include "Log.h"
#include "Utils.h"
-using namespace p25::data;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::data;
#include
#include
@@ -36,7 +37,7 @@ DataBlock::DataBlock() :
m_llId(0U),
m_sap(0U),
m_trellis(),
- m_fmt(PDU_FMT_CONFIRMED),
+ m_fmt(PDUFormatType::CONFIRMED),
m_headerSap(0U),
m_data(nullptr)
{
@@ -73,7 +74,7 @@ bool DataBlock::decode(const uint8_t* data, const DataHeader& header)
m_lastBlock = false;
m_llId = 0U;
- if (m_fmt == PDU_FMT_CONFIRMED) {
+ if (m_fmt == PDUFormatType::CONFIRMED) {
// decode 3/4 rate Trellis
try {
bool valid = m_trellis.decode34(data, buffer);
@@ -92,7 +93,7 @@ bool DataBlock::decode(const uint8_t* data, const DataHeader& header)
::memset(m_data, 0x00U, P25_PDU_CONFIRMED_DATA_LENGTH_BYTES);
// if this is extended addressing and the first block decode the SAP and LLId
- if (m_headerSap == PDU_SAP_EXT_ADDR && m_serialNo == 0U) {
+ if (m_headerSap == PDUSAP::EXT_ADDR && m_serialNo == 0U) {
m_sap = buffer[5U] & 0x3FU; // Service Access Point
m_llId = (buffer[2U] << 16) + (buffer[3U] << 8) + buffer[4U]; // Logical Link ID
@@ -118,11 +119,11 @@ bool DataBlock::decode(const uint8_t* data, const DataHeader& header)
// compute CRC-9 for the packet
uint16_t calculated = edac::CRC::createCRC9(crcBuffer, 135U);
if ((crc ^ calculated) != 0) {
- LogWarning(LOG_P25, "P25_DUID_PDU, fmt = $%02X, invalid crc = $%04X != $%04X (computed)", m_fmt, crc, calculated);
+ LogWarning(LOG_P25, "PDU, fmt = $%02X, invalid crc = $%04X != $%04X (computed)", m_fmt, crc, calculated);
}
#if DEBUG_P25_PDU_DATA
- LogDebug(LOG_P25, "P25_DUID_PDU, fmt = $%02X, crc = $%04X, calculated = $%04X", m_fmt, crc, calculated);
+ LogDebug(LOG_P25, "PDU, fmt = $%02X, crc = $%04X, calculated = $%04X", m_fmt, crc, calculated);
Utils::dump(1U, "P25, DataBlock::decode(), Confirmed PDU Block Data", m_data, P25_PDU_CONFIRMED_DATA_LENGTH_BYTES);
#endif
}
@@ -131,7 +132,7 @@ bool DataBlock::decode(const uint8_t* data, const DataHeader& header)
return false;
}
}
- else if ((m_fmt == PDU_FMT_UNCONFIRMED) || (m_fmt == PDU_FMT_RSP) || (m_fmt == PDU_FMT_AMBT)) {
+ else if ((m_fmt == PDUFormatType::UNCONFIRMED) || (m_fmt == PDUFormatType::RSP) || (m_fmt == PDUFormatType::AMBT)) {
// decode 1/2 rate Trellis
try {
bool valid = m_trellis.decode12(data, buffer);
@@ -154,7 +155,7 @@ bool DataBlock::decode(const uint8_t* data, const DataHeader& header)
}
}
else {
- LogError(LOG_P25, "unknown FMT value in P25_DUID_PDU, fmt = $%02X", m_fmt);
+ LogError(LOG_P25, "unknown FMT value in PDU, fmt = $%02X", m_fmt);
}
return true;
@@ -169,14 +170,14 @@ void DataBlock::encode(uint8_t* data)
assert(data != nullptr);
assert(m_data != nullptr);
- if (m_fmt == PDU_FMT_CONFIRMED) {
+ if (m_fmt == PDUFormatType::CONFIRMED) {
uint8_t buffer[P25_PDU_CONFIRMED_LENGTH_BYTES];
::memset(buffer, 0x00U, P25_PDU_CONFIRMED_LENGTH_BYTES);
buffer[0U] = ((m_serialNo << 1) & 0xFEU); // Confirmed Data Serial No.
// if this is extended addressing and the first block decode the SAP and LLId
- if (m_headerSap == PDU_SAP_EXT_ADDR && m_serialNo == 0U) {
+ if (m_headerSap == PDUSAP::EXT_ADDR && m_serialNo == 0U) {
buffer[5U] = m_sap & 0x3FU; // Service Access Point
buffer[2U] = (m_llId >> 16) & 0xFFU; // Logical Link ID
@@ -212,7 +213,7 @@ void DataBlock::encode(uint8_t* data)
m_trellis.encode34(buffer, data);
}
- else if (m_fmt == PDU_FMT_UNCONFIRMED || m_fmt == PDU_FMT_RSP || m_fmt == PDU_FMT_AMBT) {
+ else if (m_fmt == PDUFormatType::UNCONFIRMED || m_fmt == PDUFormatType::RSP || m_fmt == PDUFormatType::AMBT) {
uint8_t buffer[P25_PDU_UNCONFIRMED_LENGTH_BYTES];
::memset(buffer, 0x00U, P25_PDU_UNCONFIRMED_LENGTH_BYTES);
@@ -225,7 +226,7 @@ void DataBlock::encode(uint8_t* data)
m_trellis.encode12(buffer, data);
}
else {
- LogError(LOG_P25, "unknown FMT value in P25_DUID_PDU, fmt = $%02X", m_fmt);
+ LogError(LOG_P25, "unknown FMT value in PDU, fmt = $%02X", m_fmt);
return;
}
}
@@ -266,14 +267,14 @@ void DataBlock::setData(const uint8_t* buffer)
assert(buffer != nullptr);
assert(m_data != nullptr);
- if (m_fmt == PDU_FMT_CONFIRMED) {
+ if (m_fmt == PDUFormatType::CONFIRMED) {
::memcpy(m_data, buffer, P25_PDU_CONFIRMED_DATA_LENGTH_BYTES);
}
- else if (m_fmt == PDU_FMT_UNCONFIRMED || m_fmt == PDU_FMT_RSP || m_fmt == PDU_FMT_AMBT) {
+ else if (m_fmt == PDUFormatType::UNCONFIRMED || m_fmt == PDUFormatType::RSP || m_fmt == PDUFormatType::AMBT) {
::memcpy(m_data, buffer, P25_PDU_UNCONFIRMED_LENGTH_BYTES);
}
else {
- LogError(LOG_P25, "unknown FMT value in P25_DUID_PDU, fmt = $%02X", m_fmt);
+ LogError(LOG_P25, "unknown FMT value in PDU, fmt = $%02X", m_fmt);
}
}
@@ -286,16 +287,16 @@ uint32_t DataBlock::getData(uint8_t* buffer) const
assert(buffer != nullptr);
assert(m_data != nullptr);
- if (m_fmt == PDU_FMT_CONFIRMED) {
+ if (m_fmt == PDUFormatType::CONFIRMED) {
::memcpy(buffer, m_data, P25_PDU_CONFIRMED_DATA_LENGTH_BYTES);
return P25_PDU_CONFIRMED_DATA_LENGTH_BYTES;
}
- else if (m_fmt == PDU_FMT_UNCONFIRMED || m_fmt == PDU_FMT_RSP || m_fmt == PDU_FMT_AMBT) {
+ else if (m_fmt == PDUFormatType::UNCONFIRMED || m_fmt == PDUFormatType::RSP || m_fmt == PDUFormatType::AMBT) {
::memcpy(buffer, m_data, P25_PDU_UNCONFIRMED_LENGTH_BYTES);
return P25_PDU_UNCONFIRMED_LENGTH_BYTES;
}
else {
- LogError(LOG_P25, "unknown FMT value in P25_DUID_PDU, fmt = $%02X", m_fmt);
+ LogError(LOG_P25, "unknown FMT value in PDU, fmt = $%02X", m_fmt);
return 0U;
}
}
diff --git a/src/common/p25/data/DataHeader.cpp b/src/common/p25/data/DataHeader.cpp
index d7515ff8..955e9963 100644
--- a/src/common/p25/data/DataHeader.cpp
+++ b/src/common/p25/data/DataHeader.cpp
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2018,2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2018,2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -17,8 +17,9 @@
#include "Log.h"
#include "Utils.h"
-using namespace p25::data;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::data;
#include
#include
@@ -43,9 +44,9 @@ bool DataHeader::m_warnCRC = false;
DataHeader::DataHeader() :
m_ackNeeded(false),
m_outbound(false),
- m_fmt(PDU_FMT_CONFIRMED),
+ m_fmt(PDUFormatType::CONFIRMED),
m_sap(0U),
- m_mfId(P25_MFG_STANDARD),
+ m_mfId(MFG_STANDARD),
m_llId(0U),
m_blocksToFollow(0U),
m_padLength(0U),
@@ -56,8 +57,8 @@ DataHeader::DataHeader() :
m_lastFragment(true),
m_headerOffset(0U),
m_srcLlId(0U),
- m_rspClass(PDU_ACK_CLASS_NACK),
- m_rspType(PDU_ACK_TYPE_NACK_ILLEGAL),
+ m_rspClass(PDUAckClass::NACK),
+ m_rspType(PDUAckType::NACK_ILLEGAL),
m_rspStatus(0U),
m_ambtOpcode(0U),
m_ambtField8(0U),
@@ -136,12 +137,12 @@ bool DataHeader::decode(const uint8_t* data, bool noTrellis)
m_blocksToFollow = m_data[6U] & 0x7FU; // Block Frames to Follow
m_padLength = m_data[7U] & 0x1FU; // Pad Byte Count
- if (m_fmt == PDU_FMT_RSP || m_fmt == PDU_FMT_AMBT) {
+ if (m_fmt == PDUFormatType::RSP || m_fmt == PDUFormatType::AMBT) {
m_padLength = 0U;
}
switch (m_fmt) {
- case PDU_FMT_CONFIRMED:
+ case PDUFormatType::CONFIRMED:
m_S = (m_data[8U] & 0x80U) == 0x80U; // Re-synchronize Flag
m_Ns = (m_data[8U] >> 4) & 0x07U; // Packet Sequence No.
@@ -150,9 +151,9 @@ bool DataHeader::decode(const uint8_t* data, bool noTrellis)
m_headerOffset = m_data[9U] & 0x3FU; // Data Header Offset
break;
- case PDU_FMT_RSP:
+ case PDUFormatType::RSP:
m_ackNeeded = false;
- m_sap = PDU_SAP_USER_DATA;
+ m_sap = PDUSAP::USER_DATA;
m_rspClass = (m_data[1U] >> 6) & 0x03U; // Response Class
m_rspType = (m_data[1U] >> 3) & 0x07U; // Response Type
m_rspStatus = m_data[1U] & 0x07U; // Response Status
@@ -160,12 +161,12 @@ bool DataHeader::decode(const uint8_t* data, bool noTrellis)
m_srcLlId = (m_data[7U] << 16) + (m_data[8U] << 8) + m_data[9U]; // Source Logical Link ID
}
break;
- case PDU_FMT_AMBT:
+ case PDUFormatType::AMBT:
m_ambtOpcode = m_data[7U] & 0x3FU; // AMBT Opcode
m_ambtField8 = m_data[8U]; // AMBT Field 8
m_ambtField9 = m_data[9U]; // AMBT Field 9
// fall-thru
- case PDU_FMT_UNCONFIRMED:
+ case PDUFormatType::UNCONFIRMED:
default:
m_ackNeeded = false;
m_S = false;
@@ -190,12 +191,12 @@ void DataHeader::encode(uint8_t* data, bool noTrellis)
uint8_t header[P25_PDU_HEADER_LENGTH_BYTES];
::memset(header, 0x00U, P25_PDU_HEADER_LENGTH_BYTES);
- if (m_fmt == PDU_FMT_UNCONFIRMED || m_fmt == PDU_FMT_RSP) {
+ if (m_fmt == PDUFormatType::UNCONFIRMED || m_fmt == PDUFormatType::RSP) {
m_ackNeeded = false;
}
- if (m_fmt == PDU_FMT_CONFIRMED && !m_ackNeeded) {
- LogWarning(LOG_P25, "DataHeader::encode(), invalid values for PDU_FMT_CONFIRMED, ackNeeded = %u", m_ackNeeded);
+ if (m_fmt == PDUFormatType::CONFIRMED && !m_ackNeeded) {
+ LogWarning(LOG_P25, "DataHeader::encode(), invalid values for confirmed PDU, ackNeeded = %u", m_ackNeeded);
m_ackNeeded = true; // force set this to true
}
@@ -216,7 +217,7 @@ void DataHeader::encode(uint8_t* data, bool noTrellis)
(m_blocksToFollow & 0x7FU); // Blocks Frames to Follow
switch (m_fmt) {
- case PDU_FMT_CONFIRMED:
+ case PDUFormatType::CONFIRMED:
header[7U] = (m_padLength & 0x1FU); // Pad Byte Count
header[8U] = (m_S ? 0x80U : 0x00U) + // Re-synchronize Flag
((m_Ns & 0x07U) << 4) + // Packet Sequence No.
@@ -225,7 +226,7 @@ void DataHeader::encode(uint8_t* data, bool noTrellis)
header[9U] = m_headerOffset & 0x3FU; // Data Header Offset
break;
- case PDU_FMT_RSP:
+ case PDUFormatType::RSP:
header[1U] = ((m_rspClass & 0x03U) << 6) + // Response Class
((m_rspType & 0x07U) << 3) + // Response Type
((m_rspStatus & 0x07U)); // Response Status
@@ -235,12 +236,12 @@ void DataHeader::encode(uint8_t* data, bool noTrellis)
header[9U] = (m_srcLlId >> 0) & 0xFFU;
}
break;
- case PDU_FMT_AMBT:
+ case PDUFormatType::AMBT:
header[7U] = (m_ambtOpcode & 0x3FU); // AMBT Opcode
header[8U] = m_ambtField8; // AMBT Field 8
header[9U] = m_ambtField9; // AMBT Field 9
break;
- case PDU_FMT_UNCONFIRMED:
+ case PDUFormatType::UNCONFIRMED:
default:
header[7U] = (m_padLength & 0x1FU); // Pad Byte Count
header[8U] = 0x00U;
@@ -271,10 +272,10 @@ void DataHeader::reset()
m_ackNeeded = false;
m_outbound = false;
- m_fmt = PDU_FMT_CONFIRMED;
+ m_fmt = PDUFormatType::CONFIRMED;
- m_sap = PDU_SAP_USER_DATA;
- m_mfId = P25_MFG_STANDARD;
+ m_sap = PDUSAP::USER_DATA;
+ m_mfId = MFG_STANDARD;
m_llId = 0U;
m_F = true;
@@ -290,8 +291,8 @@ void DataHeader::reset()
m_headerOffset = 0U;
m_srcLlId = 0U;
- m_rspClass = PDU_ACK_CLASS_NACK;
- m_rspType = PDU_ACK_TYPE_NACK_ILLEGAL;
+ m_rspClass = PDUAckClass::NACK;
+ m_rspType = PDUAckType::NACK_ILLEGAL;
m_rspStatus = 0U;
m_ambtOpcode = 0U;
@@ -307,7 +308,7 @@ void DataHeader::reset()
///
uint32_t DataHeader::getPacketLength() const
{
- if (m_fmt == PDU_FMT_CONFIRMED) {
+ if (m_fmt == PDUFormatType::CONFIRMED) {
return P25_PDU_CONFIRMED_DATA_LENGTH_BYTES * m_blocksToFollow - 4 - m_padLength;
}
else {
@@ -336,7 +337,7 @@ uint32_t DataHeader::getData(uint8_t* buffer) const
uint32_t DataHeader::calculatePadLength(uint8_t fmt, uint32_t packetLength)
{
uint32_t len = packetLength + 4;
- if (fmt == PDU_FMT_CONFIRMED) {
+ if (fmt == PDUFormatType::CONFIRMED) {
return P25_PDU_CONFIRMED_DATA_LENGTH_BYTES - (len % P25_PDU_CONFIRMED_DATA_LENGTH_BYTES);
}
else {
diff --git a/src/common/p25/data/LowSpeedData.cpp b/src/common/p25/data/LowSpeedData.cpp
index ff5a4b2d..0a97d2ae 100644
--- a/src/common/p25/data/LowSpeedData.cpp
+++ b/src/common/p25/data/LowSpeedData.cpp
@@ -16,8 +16,8 @@
#include "p25/data/LowSpeedData.h"
#include "p25/P25Utils.h"
-using namespace p25::data;
using namespace p25;
+using namespace p25::data;
#include
diff --git a/src/common/p25/dfsi/DFSIDefines.h b/src/common/p25/dfsi/DFSIDefines.h
index cfdfd784..8d41de2a 100644
--- a/src/common/p25/dfsi/DFSIDefines.h
+++ b/src/common/p25/dfsi/DFSIDefines.h
@@ -10,93 +10,105 @@
* Copyright (C) 2022-2024 Bryan Biedenkapp, N2PLL
*
*/
-#if !defined(__P25_DFSI_DEFINES_H__)
-#define __P25_DFSI_DEFINES_H__
+#if !defined(__DFSI_DEFINES_H__)
+#define __DFSI_DEFINES_H__
#include "common/Defines.h"
// Frame Type String(s)
-#define P25_DFSI_SS_STR "P25_DFSI_START_STOP (Start/Stop)"
-#define P25_DFSI_VHDR1_STR "P25_DFSI_VHDR1 (Voice Header 1)"
-#define P25_DFSI_VHDR2_STR "P25_DFSI_VHDR2 (Voice Header 2)"
-#define P25_DFSI_LDU1_STR "P25_DFSI_LDU1 (Logical Link Data Unit 1)"
-#define P25_DFSI_LDU2_STR "P25_DFSI_LDU2 (Logical Link Data Unit 2)"
-#define P25_DFSI_TSBK_STR "P25_DFSI_TSBK (Trunking System Block)"
-
+#define P25_DFSI_SS_STR "P25, DFSI_START_STOP (Start/Stop)"
+#define P25_DFSI_VHDR1_STR "P25, DFSI_VHDR1 (Voice Header 1)"
+#define P25_DFSI_VHDR2_STR "P25, DFSI_VHDR2 (Voice Header 2)"
+#define P25_DFSI_LDU1_STR "P25, DFSI_LDU1 (Logical Link Data Unit 1)"
+#define P25_DFSI_LDU2_STR "P25, DFSI_LDU2 (Logical Link Data Unit 2)"
+#define P25_DFSI_TSBK_STR "P25, DFSI_TSBK (Trunking System Block)"
+
+// Shorthand macro to p25::dfsi::defines -- keeps source code that doesn't use "using" concise
+#define P25DFSIDEF p25::dfsi::defines
namespace p25
{
namespace dfsi
{
- // ---------------------------------------------------------------------------
- // Constants
- // ---------------------------------------------------------------------------
-
- const uint8_t P25_DFSI_STATUS_NO_ERROR = 0x00; //
- const uint8_t P25_DFSI_STATUS_ERASE = 0x02; //
-
- const uint8_t P25_DFSI_RT_ENABLED = 0x02; //
- const uint8_t P25_DFSI_RT_DISABLED = 0x04; //
-
- const uint8_t P25_DFSI_START_FLAG = 0x0C; //
- const uint8_t P25_DFSI_STOP_FLAG = 0x25; //
-
- const uint8_t P25_DFSI_TYPE_DATA_PAYLOAD = 0x06; //
- const uint8_t P25_DFSI_TYPE_VOICE = 0x0B; //
-
- const uint8_t P25_DFSI_DEF_ICW_SOURCE = 0x00; // Infrastructure Source - Default Source
- const uint8_t P25_DFSI_DEF_SOURCE = 0x00; //
-
- const uint8_t P25_DFSI_MOT_START_STOP = 0x00; // Motorola Start/Stop Frame
-
- const uint32_t P25_DFSI_VHDR_RAW_LEN = 36U;
- const uint32_t P25_DFSI_VHDR_LEN = 27U;
-
- const uint32_t P25_DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES = 22U;
- const uint32_t P25_DFSI_LDU1_VOICE2_FRAME_LENGTH_BYTES = 14U;
- const uint32_t P25_DFSI_LDU1_VOICE3_FRAME_LENGTH_BYTES = 17U;
- const uint32_t P25_DFSI_LDU1_VOICE4_FRAME_LENGTH_BYTES = 17U;
- const uint32_t P25_DFSI_LDU1_VOICE5_FRAME_LENGTH_BYTES = 17U;
- const uint32_t P25_DFSI_LDU1_VOICE6_FRAME_LENGTH_BYTES = 17U;
- const uint32_t P25_DFSI_LDU1_VOICE7_FRAME_LENGTH_BYTES = 17U;
- const uint32_t P25_DFSI_LDU1_VOICE8_FRAME_LENGTH_BYTES = 17U;
- const uint32_t P25_DFSI_LDU1_VOICE9_FRAME_LENGTH_BYTES = 16U;
-
- const uint32_t P25_DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES = 22U;
- const uint32_t P25_DFSI_LDU2_VOICE11_FRAME_LENGTH_BYTES = 14U;
- const uint32_t P25_DFSI_LDU2_VOICE12_FRAME_LENGTH_BYTES = 17U;
- const uint32_t P25_DFSI_LDU2_VOICE13_FRAME_LENGTH_BYTES = 17U;
- const uint32_t P25_DFSI_LDU2_VOICE14_FRAME_LENGTH_BYTES = 17U;
- const uint32_t P25_DFSI_LDU2_VOICE15_FRAME_LENGTH_BYTES = 17U;
- const uint32_t P25_DFSI_LDU2_VOICE16_FRAME_LENGTH_BYTES = 17U;
- const uint32_t P25_DFSI_LDU2_VOICE17_FRAME_LENGTH_BYTES = 17U;
- const uint32_t P25_DFSI_LDU2_VOICE18_FRAME_LENGTH_BYTES = 16U;
-
- // Frame Type(s)
- const uint8_t P25_DFSI_MOT_VHDR_1 = 0x60; // Motorola Voice Header 1
- const uint8_t P25_DFSI_MOT_VHDR_2 = 0x61; // Motorola Voice Header 2
-
- const uint8_t P25_DFSI_LDU1_VOICE1 = 0x62U; // IMBE LDU1 - Voice 1
- const uint8_t P25_DFSI_LDU1_VOICE2 = 0x63U; // IMBE LDU1 - Voice 2
- const uint8_t P25_DFSI_LDU1_VOICE3 = 0x64U; // IMBE LDU1 - Voice 3 + Link Control
- const uint8_t P25_DFSI_LDU1_VOICE4 = 0x65U; // IMBE LDU1 - Voice 4 + Link Control
- const uint8_t P25_DFSI_LDU1_VOICE5 = 0x66U; // IMBE LDU1 - Voice 5 + Link Control
- const uint8_t P25_DFSI_LDU1_VOICE6 = 0x67U; // IMBE LDU1 - Voice 6 + Link Control
- const uint8_t P25_DFSI_LDU1_VOICE7 = 0x68U; // IMBE LDU1 - Voice 7 + Link Control
- const uint8_t P25_DFSI_LDU1_VOICE8 = 0x69U; // IMBE LDU1 - Voice 8 + Link Control
- const uint8_t P25_DFSI_LDU1_VOICE9 = 0x6AU; // IMBE LDU1 - Voice 9 + Low Speed Data
-
- const uint8_t P25_DFSI_LDU2_VOICE10 = 0x6BU; // IMBE LDU2 - Voice 10
- const uint8_t P25_DFSI_LDU2_VOICE11 = 0x6CU; // IMBE LDU2 - Voice 11
- const uint8_t P25_DFSI_LDU2_VOICE12 = 0x6DU; // IMBE LDU2 - Voice 12 + Encryption Sync
- const uint8_t P25_DFSI_LDU2_VOICE13 = 0x6EU; // IMBE LDU2 - Voice 13 + Encryption Sync
- const uint8_t P25_DFSI_LDU2_VOICE14 = 0x6FU; // IMBE LDU2 - Voice 14 + Encryption Sync
- const uint8_t P25_DFSI_LDU2_VOICE15 = 0x70U; // IMBE LDU2 - Voice 15 + Encryption Sync
- const uint8_t P25_DFSI_LDU2_VOICE16 = 0x71U; // IMBE LDU2 - Voice 16 + Encryption Sync
- const uint8_t P25_DFSI_LDU2_VOICE17 = 0x72U; // IMBE LDU2 - Voice 17 + Encryption Sync
- const uint8_t P25_DFSI_LDU2_VOICE18 = 0x73U; // IMBE LDU2 - Voice 18 + Low Speed Data
-
- const uint8_t P25_DFSI_TSBK = 0xA1U; // TSBK
+ namespace defines
+ {
+ // ---------------------------------------------------------------------------
+ // Constants
+ // ---------------------------------------------------------------------------
+
+ const uint8_t DFSI_STATUS_NO_ERROR = 0x00U; //
+ const uint8_t DFSI_STATUS_ERASE = 0x02U; //
+
+ const uint8_t DFSI_RT_ENABLED = 0x02U; //
+ const uint8_t DFSI_RT_DISABLED = 0x04U; //
+
+ const uint8_t DFSI_START_FLAG = 0x0CU; //
+ const uint8_t DFSI_STOP_FLAG = 0x25U; //
+
+ const uint8_t DFSI_TYPE_DATA_PAYLOAD = 0x06U; //
+ const uint8_t DFSI_TYPE_VOICE = 0x0BU; //
+
+ const uint8_t DFSI_DEF_ICW_SOURCE = 0x00U; // Infrastructure Source - Default Source
+ const uint8_t DFSI_DEF_SOURCE = 0x00U; //
+
+ const uint32_t DFSI_VHDR_RAW_LEN = 36U;
+ const uint32_t DFSI_VHDR_LEN = 27U;
+
+ const uint32_t DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES = 22U;
+ const uint32_t DFSI_LDU1_VOICE2_FRAME_LENGTH_BYTES = 14U;
+ const uint32_t DFSI_LDU1_VOICE3_FRAME_LENGTH_BYTES = 17U;
+ const uint32_t DFSI_LDU1_VOICE4_FRAME_LENGTH_BYTES = 17U;
+ const uint32_t DFSI_LDU1_VOICE5_FRAME_LENGTH_BYTES = 17U;
+ const uint32_t DFSI_LDU1_VOICE6_FRAME_LENGTH_BYTES = 17U;
+ const uint32_t DFSI_LDU1_VOICE7_FRAME_LENGTH_BYTES = 17U;
+ const uint32_t DFSI_LDU1_VOICE8_FRAME_LENGTH_BYTES = 17U;
+ const uint32_t DFSI_LDU1_VOICE9_FRAME_LENGTH_BYTES = 16U;
+
+ const uint32_t DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES = 22U;
+ const uint32_t DFSI_LDU2_VOICE11_FRAME_LENGTH_BYTES = 14U;
+ const uint32_t DFSI_LDU2_VOICE12_FRAME_LENGTH_BYTES = 17U;
+ const uint32_t DFSI_LDU2_VOICE13_FRAME_LENGTH_BYTES = 17U;
+ const uint32_t DFSI_LDU2_VOICE14_FRAME_LENGTH_BYTES = 17U;
+ const uint32_t DFSI_LDU2_VOICE15_FRAME_LENGTH_BYTES = 17U;
+ const uint32_t DFSI_LDU2_VOICE16_FRAME_LENGTH_BYTES = 17U;
+ const uint32_t DFSI_LDU2_VOICE17_FRAME_LENGTH_BYTES = 17U;
+ const uint32_t DFSI_LDU2_VOICE18_FRAME_LENGTH_BYTES = 16U;
+
+ ///
+ /// Frame Type
+ ///
+ namespace DFSIFrameType {
+ // DFSI Frame Type
+ enum E : uint8_t {
+ MOT_START_STOP = 0x00U, // Motorola Start/Stop
+
+ MOT_VHDR_1 = 0x60U, // Motorola Voice Header 1
+ MOT_VHDR_2 = 0x61U, // Motorola Voice Header 2
+
+ LDU1_VOICE1 = 0x62U, // IMBE LDU1 - Voice 1
+ LDU1_VOICE2 = 0x63U, // IMBE LDU1 - Voice 2
+ LDU1_VOICE3 = 0x64U, // IMBE LDU1 - Voice 3 + Link Control
+ LDU1_VOICE4 = 0x65U, // IMBE LDU1 - Voice 4 + Link Control
+ LDU1_VOICE5 = 0x66U, // IMBE LDU1 - Voice 5 + Link Control
+ LDU1_VOICE6 = 0x67U, // IMBE LDU1 - Voice 6 + Link Control
+ LDU1_VOICE7 = 0x68U, // IMBE LDU1 - Voice 7 + Link Control
+ LDU1_VOICE8 = 0x69U, // IMBE LDU1 - Voice 8 + Link Control
+ LDU1_VOICE9 = 0x6AU, // IMBE LDU1 - Voice 9 + Low Speed Data
+
+ LDU2_VOICE10 = 0x6BU, // IMBE LDU2 - Voice 10
+ LDU2_VOICE11 = 0x6CU, // IMBE LDU2 - Voice 11
+ LDU2_VOICE12 = 0x6DU, // IMBE LDU2 - Voice 12 + Encryption Sync
+ LDU2_VOICE13 = 0x6EU, // IMBE LDU2 - Voice 13 + Encryption Sync
+ LDU2_VOICE14 = 0x6FU, // IMBE LDU2 - Voice 14 + Encryption Sync
+ LDU2_VOICE15 = 0x70U, // IMBE LDU2 - Voice 15 + Encryption Sync
+ LDU2_VOICE16 = 0x71U, // IMBE LDU2 - Voice 16 + Encryption Sync
+ LDU2_VOICE17 = 0x72U, // IMBE LDU2 - Voice 17 + Encryption Sync
+ LDU2_VOICE18 = 0x73U, // IMBE LDU2 - Voice 18 + Low Speed Data
+
+ TSBK = 0xA1U // TSBK
+ };
+ }
+ } // namespace defines
} // namespace dfsi
} // namespace p25
-#endif // __P25_DFSI_DEFINES_H__
+#endif // __DFSI_DEFINES_H__
diff --git a/src/common/p25/dfsi/LC.cpp b/src/common/p25/dfsi/LC.cpp
index bef01cb8..77688e91 100644
--- a/src/common/p25/dfsi/LC.cpp
+++ b/src/common/p25/dfsi/LC.cpp
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -17,8 +17,10 @@
#include "Log.h"
#include "Utils.h"
-using namespace p25::dfsi;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::dfsi;
+using namespace p25::dfsi::defines;
#include
#include
@@ -37,8 +39,8 @@ LC::LC() :
m_rs(),
m_mi(nullptr)
{
- m_mi = new uint8_t[P25_MI_LENGTH_BYTES];
- ::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
+ m_mi = new uint8_t[MI_LENGTH_BYTES];
+ ::memset(m_mi, 0x00U, MI_LENGTH_BYTES);
m_control = new lc::LC();
m_lsd = new data::LowSpeedData();
@@ -118,7 +120,7 @@ bool LC::decodeLDU1(const uint8_t* data, uint8_t* imbe)
// different frame types mean different things
switch (m_frameType)
{
- case P25_DFSI_LDU1_VOICE1:
+ case DFSIFrameType::LDU1_VOICE1:
{
if (m_control != nullptr) {
delete m_control;
@@ -130,15 +132,15 @@ bool LC::decodeLDU1(const uint8_t* data, uint8_t* imbe)
}
m_rssi = data[6U]; // RSSI
- ::memcpy(imbe, data + 10U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 10U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE2:
+ case DFSIFrameType::LDU1_VOICE2:
{
- ::memcpy(imbe, data + 1U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 1U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE3:
+ case DFSIFrameType::LDU1_VOICE3:
{
m_control->setLCO(data[1U]); // LCO
m_control->setMFId(data[2U]); // MFId
@@ -146,48 +148,48 @@ bool LC::decodeLDU1(const uint8_t* data, uint8_t* imbe)
m_control->setEmergency((serviceOptions & 0x80U) == 0x80U);
m_control->setEncrypted((serviceOptions & 0x40U) == 0x40U);
m_control->setPriority((serviceOptions & 0x07U));
- ::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 5U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE4:
+ case DFSIFrameType::LDU1_VOICE4:
{
uint32_t dstId = (data[1U] << 16) | (data[2U] << 8) | (data[3U] << 0);
m_control->setDstId(dstId); // Talkgroup Address
- ::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 5U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE5:
+ case DFSIFrameType::LDU1_VOICE5:
{
uint32_t srcId = (data[1U] << 16) | (data[2U] << 8) | (data[3U] << 0);
m_control->setSrcId(srcId); // Source Address
- ::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 5U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE6:
+ case DFSIFrameType::LDU1_VOICE6:
{
- ::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 5U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE7:
+ case DFSIFrameType::LDU1_VOICE7:
{
- ::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 5U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE8:
+ case DFSIFrameType::LDU1_VOICE8:
{
- ::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 5U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE9:
+ case DFSIFrameType::LDU1_VOICE9:
{
m_lsd->setLSD1(data[1U]); // LSD MSB
m_lsd->setLSD2(data[2U]); // LSD LSB
- ::memcpy(imbe, data + 4U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 4U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
default:
{
- LogError(LOG_P25, "LC::decodeLDU1(), invalid frametype, frameType = $%02X", m_frameType);
+ LogError(LOG_P25, "LC::decodeLDU1(), invalid frame type, frameType = $%02X", m_frameType);
return false;
}
break;
@@ -213,39 +215,39 @@ void LC::encodeLDU1(uint8_t* data, const uint8_t* imbe)
(m_control->getPriority() & 0x07U);
// determine the LDU1 DFSI frame length, its variable
- uint32_t frameLength = P25_DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES;
+ uint32_t frameLength = DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES;
switch (m_frameType)
{
- case P25_DFSI_LDU1_VOICE1:
- frameLength = P25_DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU1_VOICE1:
+ frameLength = DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU1_VOICE2:
- frameLength = P25_DFSI_LDU1_VOICE2_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU1_VOICE2:
+ frameLength = DFSI_LDU1_VOICE2_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU1_VOICE3:
- frameLength = P25_DFSI_LDU1_VOICE3_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU1_VOICE3:
+ frameLength = DFSI_LDU1_VOICE3_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU1_VOICE4:
- frameLength = P25_DFSI_LDU1_VOICE4_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU1_VOICE4:
+ frameLength = DFSI_LDU1_VOICE4_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU1_VOICE5:
- frameLength = P25_DFSI_LDU1_VOICE5_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU1_VOICE5:
+ frameLength = DFSI_LDU1_VOICE5_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU1_VOICE6:
- frameLength = P25_DFSI_LDU1_VOICE6_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU1_VOICE6:
+ frameLength = DFSI_LDU1_VOICE6_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU1_VOICE7:
- frameLength = P25_DFSI_LDU1_VOICE7_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU1_VOICE7:
+ frameLength = DFSI_LDU1_VOICE7_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU1_VOICE8:
- frameLength = P25_DFSI_LDU1_VOICE8_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU1_VOICE8:
+ frameLength = DFSI_LDU1_VOICE8_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU1_VOICE9:
- frameLength = P25_DFSI_LDU1_VOICE9_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU1_VOICE9:
+ frameLength = DFSI_LDU1_VOICE9_FRAME_LENGTH_BYTES;
break;
default:
{
- LogError(LOG_P25, "LC::encodeLDU1(), invalid frametype, frameType = $%02X", m_frameType);
+ LogError(LOG_P25, "LC::encodeLDU1(), invalid frame type, frameType = $%02X", m_frameType);
return;
}
break;
@@ -276,72 +278,72 @@ void LC::encodeLDU1(uint8_t* data, const uint8_t* imbe)
// different frame types mean different things
switch (m_frameType)
{
- case P25_DFSI_LDU1_VOICE2:
+ case DFSIFrameType::LDU1_VOICE2:
{
- ::memcpy(dfsiFrame + 1U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 1U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE3:
+ case DFSIFrameType::LDU1_VOICE3:
{
dfsiFrame[1U] = rs[0U]; // LCO
dfsiFrame[2U] = rs[1U]; // MFId
dfsiFrame[3U] = rs[2U]; // Service Options
- ::memcpy(dfsiFrame + 5U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 5U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE4:
+ case DFSIFrameType::LDU1_VOICE4:
{
dfsiFrame[1U] = rs[3U]; // Target Address
dfsiFrame[2U] = rs[4U];
dfsiFrame[3U] = rs[5U];
- ::memcpy(dfsiFrame + 5U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 5U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE5:
+ case DFSIFrameType::LDU1_VOICE5:
{
dfsiFrame[1U] = rs[6U]; // Source Address
dfsiFrame[2U] = rs[7U];
dfsiFrame[3U] = rs[8U];
- ::memcpy(dfsiFrame + 5U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 5U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE6:
+ case DFSIFrameType::LDU1_VOICE6:
{
dfsiFrame[1U] = rs[9U]; // RS (24,12,13)
dfsiFrame[2U] = rs[10U]; // RS (24,12,13)
dfsiFrame[3U] = rs[11U]; // RS (24,12,13)
- ::memcpy(dfsiFrame + 5U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 5U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE7:
+ case DFSIFrameType::LDU1_VOICE7:
{
dfsiFrame[1U] = rs[12U]; // RS (24,12,13)
dfsiFrame[2U] = rs[13U]; // RS (24,12,13)
dfsiFrame[3U] = rs[14U]; // RS (24,12,13)
- ::memcpy(dfsiFrame + 5U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 5U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE8:
+ case DFSIFrameType::LDU1_VOICE8:
{
dfsiFrame[1U] = rs[15U]; // RS (24,12,13)
dfsiFrame[2U] = rs[16U]; // RS (24,12,13)
dfsiFrame[3U] = rs[17U]; // RS (24,12,13)
- ::memcpy(dfsiFrame + 5U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 5U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE9:
+ case DFSIFrameType::LDU1_VOICE9:
{
dfsiFrame[1U] = m_lsd->getLSD1(); // LSD MSB
dfsiFrame[2U] = m_lsd->getLSD2(); // LSD LSB
- ::memcpy(dfsiFrame + 4U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 4U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU1_VOICE1:
+ case DFSIFrameType::LDU1_VOICE1:
default:
{
dfsiFrame[6U] = m_rssi; // RSSI
- ::memcpy(dfsiFrame + 10U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 10U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
}
@@ -371,76 +373,76 @@ bool LC::decodeLDU2(const uint8_t* data, uint8_t* imbe)
// different frame types mean different things
switch (m_frameType)
{
- case P25_DFSI_LDU2_VOICE10:
+ case DFSIFrameType::LDU2_VOICE10:
{
- ::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
+ ::memset(m_mi, 0x00U, MI_LENGTH_BYTES);
if (m_lsd != nullptr) {
delete m_lsd;
}
m_lsd = new data::LowSpeedData();
m_rssi = data[6U]; // RSSI
- ::memcpy(imbe, data + 10U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 10U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE11:
+ case DFSIFrameType::LDU2_VOICE11:
{
- ::memcpy(imbe, data + 1U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 1U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE12:
+ case DFSIFrameType::LDU2_VOICE12:
{
m_mi[0U] = data[1U]; // Message Indicator
m_mi[1U] = data[2U];
m_mi[2U] = data[3U];
- ::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 5U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE13:
+ case DFSIFrameType::LDU2_VOICE13:
{
m_mi[3U] = data[1U]; // Message Indicator
m_mi[4U] = data[2U];
m_mi[5U] = data[3U];
- ::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 5U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE14:
+ case DFSIFrameType::LDU2_VOICE14:
{
m_mi[6U] = data[1U]; // Message Indicator
m_mi[7U] = data[2U];
m_mi[8U] = data[3U];
m_control->setMI(m_mi);
- ::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 5U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE15:
+ case DFSIFrameType::LDU2_VOICE15:
{
m_control->setAlgId(data[1U]); // Algorithm ID
uint32_t kid = (data[2U] << 8) | (data[3U] << 0); // Key ID
m_control->setKId(kid);
- ::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 5U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE16:
+ case DFSIFrameType::LDU2_VOICE16:
{
- ::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 5U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE17:
+ case DFSIFrameType::LDU2_VOICE17:
{
- ::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 5U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE18:
+ case DFSIFrameType::LDU2_VOICE18:
{
m_lsd->setLSD1(data[1U]); // LSD MSB
m_lsd->setLSD2(data[2U]); // LSD LSB
- ::memcpy(imbe, data + 4U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(imbe, data + 4U, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
default:
{
- LogError(LOG_P25, "LC::decodeLDU2(), invalid frametype, frameType = $%02X", m_frameType);
+ LogError(LOG_P25, "LC::decodeLDU2(), invalid frame type, frameType = $%02X", m_frameType);
return false;
}
break;
@@ -461,44 +463,44 @@ void LC::encodeLDU2(uint8_t* data, const uint8_t* imbe)
assert(m_control != nullptr);
// generate MI data
- uint8_t mi[P25_MI_LENGTH_BYTES];
- ::memset(mi, 0x00U, P25_MI_LENGTH_BYTES);
+ uint8_t mi[MI_LENGTH_BYTES];
+ ::memset(mi, 0x00U, MI_LENGTH_BYTES);
m_control->getMI(mi);
// determine the LDU2 DFSI frame length, its variable
- uint32_t frameLength = P25_DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES;
+ uint32_t frameLength = DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES;
switch (m_frameType)
{
- case P25_DFSI_LDU2_VOICE10:
- frameLength = P25_DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU2_VOICE10:
+ frameLength = DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU2_VOICE11:
- frameLength = P25_DFSI_LDU2_VOICE11_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU2_VOICE11:
+ frameLength = DFSI_LDU2_VOICE11_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU2_VOICE12:
- frameLength = P25_DFSI_LDU2_VOICE12_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU2_VOICE12:
+ frameLength = DFSI_LDU2_VOICE12_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU2_VOICE13:
- frameLength = P25_DFSI_LDU2_VOICE13_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU2_VOICE13:
+ frameLength = DFSI_LDU2_VOICE13_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU2_VOICE14:
- frameLength = P25_DFSI_LDU2_VOICE14_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU2_VOICE14:
+ frameLength = DFSI_LDU2_VOICE14_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU2_VOICE15:
- frameLength = P25_DFSI_LDU2_VOICE15_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU2_VOICE15:
+ frameLength = DFSI_LDU2_VOICE15_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU2_VOICE16:
- frameLength = P25_DFSI_LDU2_VOICE16_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU2_VOICE16:
+ frameLength = DFSI_LDU2_VOICE16_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU2_VOICE17:
- frameLength = P25_DFSI_LDU2_VOICE17_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU2_VOICE17:
+ frameLength = DFSI_LDU2_VOICE17_FRAME_LENGTH_BYTES;
break;
- case P25_DFSI_LDU2_VOICE18:
- frameLength = P25_DFSI_LDU2_VOICE18_FRAME_LENGTH_BYTES;
+ case DFSIFrameType::LDU2_VOICE18:
+ frameLength = DFSI_LDU2_VOICE18_FRAME_LENGTH_BYTES;
break;
default:
{
- LogError(LOG_P25, "LC::encodeLDU2(), invalid frametype, frameType = $%02X", m_frameType);
+ LogError(LOG_P25, "LC::encodeLDU2(), invalid frame type, frameType = $%02X", m_frameType);
return;
}
break;
@@ -507,7 +509,7 @@ void LC::encodeLDU2(uint8_t* data, const uint8_t* imbe)
uint8_t rs[P25_LDU_LC_FEC_LENGTH_BYTES];
::memset(rs, 0x00U, P25_LDU_LC_FEC_LENGTH_BYTES);
- for (uint32_t i = 0; i < P25_MI_LENGTH_BYTES; i++)
+ for (uint32_t i = 0; i < MI_LENGTH_BYTES; i++)
rs[i] = mi[i]; // Message Indicator
rs[9U] = m_control->getAlgId(); // Algorithm ID
@@ -524,72 +526,72 @@ void LC::encodeLDU2(uint8_t* data, const uint8_t* imbe)
// different frame types mean different things
switch (m_frameType)
{
- case P25_DFSI_LDU2_VOICE11:
+ case DFSIFrameType::LDU2_VOICE11:
{
- ::memcpy(dfsiFrame + 1U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 1U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE12:
+ case DFSIFrameType::LDU2_VOICE12:
{
dfsiFrame[1U] = rs[0U]; // Message Indicator
dfsiFrame[2U] = rs[1U];
dfsiFrame[3U] = rs[2U];
- ::memcpy(dfsiFrame + 5U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 5U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE13:
+ case DFSIFrameType::LDU2_VOICE13:
{
dfsiFrame[1U] = rs[3U]; // Message Indicator
dfsiFrame[2U] = rs[4U];
dfsiFrame[3U] = rs[5U];
- ::memcpy(dfsiFrame + 5U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 5U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE14:
+ case DFSIFrameType::LDU2_VOICE14:
{
dfsiFrame[1U] = rs[6U]; // Message Indicator
dfsiFrame[2U] = rs[7U];
dfsiFrame[3U] = rs[8U];
- ::memcpy(dfsiFrame + 5U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 5U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE15:
+ case DFSIFrameType::LDU2_VOICE15:
{
dfsiFrame[1U] = rs[9U]; // Algorithm ID
dfsiFrame[2U] = rs[10U]; // Key ID
dfsiFrame[3U] = rs[11U];
- ::memcpy(dfsiFrame + 5U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 5U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE16:
+ case DFSIFrameType::LDU2_VOICE16:
{
dfsiFrame[1U] = rs[12U]; // RS (24,16,9)
dfsiFrame[2U] = rs[13U]; // RS (24,16,9)
dfsiFrame[3U] = rs[14U]; // RS (24,16,9)
- ::memcpy(dfsiFrame + 5U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 5U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE17:
+ case DFSIFrameType::LDU2_VOICE17:
{
dfsiFrame[1U] = rs[15U]; // RS (24,16,9)
dfsiFrame[2U] = rs[16U]; // RS (24,16,9)
dfsiFrame[3U] = rs[17U]; // RS (24,16,9)
- ::memcpy(dfsiFrame + 5U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 5U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE18:
+ case DFSIFrameType::LDU2_VOICE18:
{
dfsiFrame[1U] = m_lsd->getLSD1(); // LSD MSB
dfsiFrame[2U] = m_lsd->getLSD2(); // LSD LSB
- ::memcpy(dfsiFrame + 4U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 4U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
- case P25_DFSI_LDU2_VOICE10:
+ case DFSIFrameType::LDU2_VOICE10:
default:
{
dfsiFrame[6U] = m_rssi; // RSSI
- ::memcpy(dfsiFrame + 10U, imbe, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
+ ::memcpy(dfsiFrame + 10U, imbe, RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
}
@@ -621,8 +623,8 @@ void LC::copy(const LC& data)
delete[] m_mi;
- uint8_t* mi = new uint8_t[P25_MI_LENGTH_BYTES];
- ::memcpy(mi, data.m_mi, P25_MI_LENGTH_BYTES);
+ uint8_t* mi = new uint8_t[MI_LENGTH_BYTES];
+ ::memcpy(mi, data.m_mi, MI_LENGTH_BYTES);
m_mi = mi;
}
diff --git a/src/common/p25/lc/AMBT.cpp b/src/common/p25/lc/AMBT.cpp
index cdf37ec3..88150f83 100644
--- a/src/common/p25/lc/AMBT.cpp
+++ b/src/common/p25/lc/AMBT.cpp
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -17,8 +17,9 @@
#include "Log.h"
#include "Utils.h"
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
#include
@@ -101,7 +102,7 @@ bool AMBT::decode(const data::DataHeader& dataHeader, const data::DataBlock* blo
assert(blocks != nullptr);
assert(pduUserData != nullptr);
- if (dataHeader.getFormat() != PDU_FMT_AMBT) {
+ if (dataHeader.getFormat() != PDUFormatType::AMBT) {
LogError(LOG_P25, "AMBT::decode(), PDU is not a AMBT PDU");
return false;
}
@@ -150,11 +151,11 @@ void AMBT::encode(data::DataHeader& dataHeader, uint8_t* pduUserData)
{
assert(pduUserData != nullptr);
- dataHeader.setFormat(PDU_FMT_AMBT);
+ dataHeader.setFormat(PDUFormatType::AMBT);
dataHeader.setMFId(m_mfId); // Mfg Id.
dataHeader.setAckNeeded(false);
dataHeader.setOutbound(true);
- dataHeader.setSAP(PDU_SAP_TRUNK_CTRL);
+ dataHeader.setSAP(PDUSAP::TRUNK_CTRL);
dataHeader.setLLId(m_srcId);
dataHeader.setFullMessage(true);
diff --git a/src/common/p25/lc/LC.cpp b/src/common/p25/lc/LC.cpp
index 701e7695..3ee52ed9 100644
--- a/src/common/p25/lc/LC.cpp
+++ b/src/common/p25/lc/LC.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2016,2017 Jonathan Naylor, G4KLX
-* Copyright (C) 2017-2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2017-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -21,8 +21,9 @@
#include "Log.h"
#include "Utils.h"
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
#include
#include
@@ -41,24 +42,23 @@ SiteData LC::m_siteData = SiteData();
///
/// Initializes a new instance of the LC class.
///
-///
LC::LC() :
m_protect(false),
- m_lco(LC_GROUP),
- m_mfId(P25_MFG_STANDARD),
+ m_lco(LCO::GROUP),
+ m_mfId(MFG_STANDARD),
m_srcId(0U),
m_dstId(0U),
m_grpVchNo(0U),
m_grpVchNoB(0U),
m_dstIdB(0U),
m_explicitId(false),
- m_netId(P25_WACN_STD_DEFAULT),
- m_sysId(P25_SID_STD_DEFAULT),
+ m_netId(WACN_STD_DEFAULT),
+ m_sysId(SID_STD_DEFAULT),
m_emergency(false),
m_encrypted(false),
m_priority(4U),
m_group(true),
- m_algId(P25_ALGO_UNENCRYPT),
+ m_algId(ALGO_UNENCRYPT),
m_kId(0U),
m_rs(),
m_encryptOverride(false),
@@ -67,8 +67,8 @@ LC::LC() :
m_rsValue(0U),
m_mi(nullptr)
{
- m_mi = new uint8_t[P25_MI_LENGTH_BYTES];
- ::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
+ m_mi = new uint8_t[MI_LENGTH_BYTES];
+ ::memset(m_mi, 0x00U, MI_LENGTH_BYTES);
}
///
@@ -145,10 +145,10 @@ bool LC::decodeHDU(const uint8_t* data)
m_mfId = rs[9U]; // Mfg Id.
m_algId = rs[10U]; // Algorithm ID
- if (m_algId != P25_ALGO_UNENCRYPT) {
- m_mi = new uint8_t[P25_MI_LENGTH_BYTES];
- ::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
- ::memcpy(m_mi, rs, P25_MI_LENGTH_BYTES); // Message Indicator
+ if (m_algId != ALGO_UNENCRYPT) {
+ m_mi = new uint8_t[MI_LENGTH_BYTES];
+ ::memset(m_mi, 0x00U, MI_LENGTH_BYTES);
+ ::memcpy(m_mi, rs, MI_LENGTH_BYTES); // Message Indicator
m_kId = (rs[11U] << 8) + rs[12U]; // Key ID
if (!m_encrypted) {
@@ -157,8 +157,8 @@ bool LC::decodeHDU(const uint8_t* data)
}
}
else {
- m_mi = new uint8_t[P25_MI_LENGTH_BYTES];
- ::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
+ m_mi = new uint8_t[MI_LENGTH_BYTES];
+ ::memset(m_mi, 0x00U, MI_LENGTH_BYTES);
m_kId = 0x0000U;
if (m_encrypted) {
@@ -191,7 +191,7 @@ void LC::encodeHDU(uint8_t* data)
uint8_t rs[P25_HDU_LENGTH_BYTES];
::memset(rs, 0x00U, P25_HDU_LENGTH_BYTES);
- for (uint32_t i = 0; i < P25_MI_LENGTH_BYTES; i++)
+ for (uint32_t i = 0; i < MI_LENGTH_BYTES; i++)
rs[i] = m_mi[i]; // Message Indicator
rs[9U] = m_mfId; // Mfg Id.
@@ -383,10 +383,10 @@ bool LC::decodeLDU2(const uint8_t* data)
#endif
m_algId = rs[9U]; // Algorithm ID
- if (m_algId != P25_ALGO_UNENCRYPT) {
- m_mi = new uint8_t[P25_MI_LENGTH_BYTES];
- ::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
- ::memcpy(m_mi, rs, P25_MI_LENGTH_BYTES); // Message Indicator
+ if (m_algId != ALGO_UNENCRYPT) {
+ m_mi = new uint8_t[MI_LENGTH_BYTES];
+ ::memset(m_mi, 0x00U, MI_LENGTH_BYTES);
+ ::memcpy(m_mi, rs, MI_LENGTH_BYTES); // Message Indicator
m_kId = (rs[10U] << 8) + rs[11U]; // Key ID
if (!m_encrypted) {
@@ -395,8 +395,8 @@ bool LC::decodeLDU2(const uint8_t* data)
}
}
else {
- m_mi = new uint8_t[P25_MI_LENGTH_BYTES];
- ::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
+ m_mi = new uint8_t[MI_LENGTH_BYTES];
+ ::memset(m_mi, 0x00U, MI_LENGTH_BYTES);
m_kId = 0x0000U;
if (m_encrypted) {
@@ -420,7 +420,7 @@ void LC::encodeLDU2(uint8_t* data)
uint8_t rs[P25_LDU_LC_FEC_LENGTH_BYTES];
::memset(rs, 0x00U, P25_LDU_LC_FEC_LENGTH_BYTES);
- for (uint32_t i = 0; i < P25_MI_LENGTH_BYTES; i++)
+ for (uint32_t i = 0; i < MI_LENGTH_BYTES; i++)
rs[i] = m_mi[i]; // Message Indicator
rs[9U] = m_algId; // Algorithm ID
@@ -470,7 +470,7 @@ void LC::setMI(const uint8_t* mi)
{
assert(mi != nullptr);
- ::memcpy(m_mi, mi, P25_MI_LENGTH_BYTES);
+ ::memcpy(m_mi, mi, MI_LENGTH_BYTES);
}
/// Gets the encryption message indicator.
@@ -479,7 +479,7 @@ void LC::getMI(uint8_t* mi) const
{
assert(mi != nullptr);
- ::memcpy(mi, m_mi, P25_MI_LENGTH_BYTES);
+ ::memcpy(mi, m_mi, MI_LENGTH_BYTES);
}
// ---------------------------------------------------------------------------
@@ -519,11 +519,11 @@ void LC::copy(const LC& data)
m_rsValue = data.m_rsValue;
m_algId = data.m_algId;
- if (m_algId != P25_ALGO_UNENCRYPT) {
+ if (m_algId != ALGO_UNENCRYPT) {
delete[] m_mi;
- m_mi = new uint8_t[P25_MI_LENGTH_BYTES];
- ::memcpy(m_mi, data.m_mi, P25_MI_LENGTH_BYTES);
+ m_mi = new uint8_t[MI_LENGTH_BYTES];
+ ::memcpy(m_mi, data.m_mi, MI_LENGTH_BYTES);
m_kId = data.m_kId;
if (!m_encrypted) {
@@ -534,8 +534,8 @@ void LC::copy(const LC& data)
else {
delete[] m_mi;
- m_mi = new uint8_t[P25_MI_LENGTH_BYTES];
- ::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
+ m_mi = new uint8_t[MI_LENGTH_BYTES];
+ ::memset(m_mi, 0x00U, MI_LENGTH_BYTES);
m_kId = 0x0000U;
if (m_encrypted) {
@@ -572,14 +572,14 @@ bool LC::decodeLC(const uint8_t* rs)
m_mfId = rs[1U]; // Mfg Id.
// non-standard P25 vendor opcodes (these are just detected for passthru)
- if ((m_mfId != P25_MFG_STANDARD) && (m_mfId != P25_MFG_STANDARD_ALT)) {
+ if ((m_mfId != MFG_STANDARD) && (m_mfId != MFG_STANDARD_ALT)) {
m_rsValue = rsValue;
return true;
}
// standard P25 reference opcodes
switch (m_lco) {
- case LC_GROUP:
+ case LCO::GROUP:
m_mfId = rs[1U]; // Mfg Id.
m_group = true;
m_emergency = (rs[2U] & 0x80U) == 0x80U; // Emergency Flag
@@ -591,7 +591,7 @@ bool LC::decodeLC(const uint8_t* rs)
m_dstId = (uint32_t)((rsValue >> 24) & 0xFFFFU); // Talkgroup Address
m_srcId = (uint32_t)(rsValue & 0xFFFFFFU); // Source Radio Address
break;
- case LC_PRIVATE:
+ case LCO::PRIVATE:
m_mfId = rs[1U]; // Mfg Id.
m_group = false;
m_emergency = (rs[2U] & 0x80U) == 0x80U; // Emergency Flag
@@ -602,7 +602,7 @@ bool LC::decodeLC(const uint8_t* rs)
m_dstId = (uint32_t)((rsValue >> 24) & 0xFFFFFFU); // Target Radio Address
m_srcId = (uint32_t)(rsValue & 0xFFFFFFU); // Source Radio Address
break;
- case LC_TEL_INT_VCH_USER:
+ case LCO::TEL_INT_VCH_USER:
m_emergency = (rs[2U] & 0x80U) == 0x80U; // Emergency Flag
if (!m_encryptOverride) {
m_encrypted = (rs[2U] & 0x40U) == 0x40U; // Encryption Flag
@@ -613,7 +613,7 @@ bool LC::decodeLC(const uint8_t* rs)
m_srcId = (uint32_t)(rsValue & 0xFFFFFFU); // Source/Target Address
}
break;
- case LC_EXPLICIT_SOURCE_ID:
+ case LCO::EXPLICIT_SOURCE_ID:
m_netId = (uint32_t)((rsValue >> 36) & 0xFFFFFU); // Network ID
m_sysId = (uint32_t)((rsValue >> 24) & 0xFFFU); // System ID
m_srcId = (uint32_t)(rsValue & 0xFFFFFFU); // Source Radio Address
@@ -642,7 +642,7 @@ void LC::encodeLC(uint8_t* rs)
// standard P25 reference opcodes
switch (m_lco) {
- case LC_GROUP:
+ case LCO::GROUP:
rsValue = m_mfId;
rsValue = (rsValue << 8) +
(m_emergency ? 0x80U : 0x00U) + // Emergency Flag
@@ -651,7 +651,7 @@ void LC::encodeLC(uint8_t* rs)
rsValue = (rsValue << 24) + m_dstId; // Talkgroup Address
rsValue = (rsValue << 24) + m_srcId; // Source Radio Address
break;
- case LC_GROUP_UPDT:
+ case LCO::GROUP_UPDT:
rs[0U] |= 0x40U; // Implicit Operation
rsValue = m_siteData.channelId(); // Group A - Channel ID
rsValue = (rsValue << 12) + m_grpVchNo; // Group A - Channel Number
@@ -660,7 +660,7 @@ void LC::encodeLC(uint8_t* rs)
rsValue = (rsValue << 12) + m_grpVchNoB; // Group B - Channel Number
rsValue = (rsValue << 16) + m_dstIdB; // Group B - Talkgroup Address
break;
- case LC_PRIVATE:
+ case LCO::PRIVATE:
rsValue = m_mfId;
rsValue = (rsValue << 8) +
(m_emergency ? 0x80U : 0x00U) + // Emergency Flag
@@ -669,7 +669,7 @@ void LC::encodeLC(uint8_t* rs)
rsValue = (rsValue << 24) + m_dstId; // Target Radio Address
rsValue = (rsValue << 24) + m_srcId; // Source Radio Address
break;
- case LC_TEL_INT_VCH_USER:
+ case LCO::TEL_INT_VCH_USER:
rs[0U] |= 0x40U; // Implicit Operation
rsValue = (rsValue << 8) +
(m_emergency ? 0x80U : 0x00U) + // Emergency Flag
@@ -678,12 +678,12 @@ void LC::encodeLC(uint8_t* rs)
rsValue = (rsValue << 16) + m_callTimer; // Call Timer
rsValue = (rsValue << 24) + m_srcId; // Source/Target Radio Address
break;
- case LC_EXPLICIT_SOURCE_ID:
+ case LCO::EXPLICIT_SOURCE_ID:
rsValue = m_netId; // Network ID
rsValue = (rsValue << 12) + (m_sysId & 0xFFFU); // System ID
rsValue = (rsValue << 24) + m_srcId; // Source Radio Address
break;
- case LC_RFSS_STS_BCAST:
+ case LCO::RFSS_STS_BCAST:
rs[0U] |= 0x40U; // Implicit Operation
rsValue = m_siteData.lra(); // Location Registration Area
rsValue = (rsValue << 12) + m_siteData.sysId(); // System ID
@@ -699,7 +699,7 @@ void LC::encodeLC(uint8_t* rs)
}
// non-standard P25 vendor opcodes (these are just detected for passthru)
- if ((m_mfId != P25_MFG_STANDARD) && (m_mfId != P25_MFG_STANDARD_ALT)) {
+ if ((m_mfId != MFG_STANDARD) && (m_mfId != MFG_STANDARD_ALT)) {
rsValue = 0U;
rsValue = m_rsValue;
}
diff --git a/src/common/p25/lc/TDULC.cpp b/src/common/p25/lc/TDULC.cpp
index 353fd7b9..4c4c6142 100644
--- a/src/common/p25/lc/TDULC.cpp
+++ b/src/common/p25/lc/TDULC.cpp
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2017-2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2017-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -18,8 +18,9 @@
#include "Log.h"
#include "Utils.h"
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
#include
#include
@@ -74,8 +75,8 @@ TDULC::TDULC(LC* lc) : TDULC()
///
TDULC::TDULC() :
m_protect(false),
- m_lco(LC_GROUP),
- m_mfId(P25_MFG_STANDARD),
+ m_lco(LCO::GROUP),
+ m_mfId(MFG_STANDARD),
m_srcId(0U),
m_dstId(0U),
m_grpVchNo(0U),
diff --git a/src/common/p25/lc/TSBK.cpp b/src/common/p25/lc/TSBK.cpp
index bf89b3cd..e6700c10 100644
--- a/src/common/p25/lc/TSBK.cpp
+++ b/src/common/p25/lc/TSBK.cpp
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2017-2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2017-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -18,8 +18,9 @@
#include "Log.h"
#include "Utils.h"
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
#include
@@ -76,17 +77,17 @@ TSBK::TSBK(LC* lc) : TSBK()
/// This should never be used.
TSBK::TSBK() :
m_protect(false),
- m_lco(LC_GROUP),
- m_mfId(P25_MFG_STANDARD),
+ m_lco(TSBKO::IOSP_GRP_VCH),
+ m_mfId(MFG_STANDARD),
m_srcId(0U),
m_dstId(0U),
m_lastBlock(false),
m_aivFlag(true),
m_extendedAddrFlag(false),
m_service(0U),
- m_response(P25_RSP_ACCEPT),
- m_netId(P25_WACN_STD_DEFAULT),
- m_sysId(P25_SID_STD_DEFAULT),
+ m_response(ResponseCode::ACCEPT),
+ m_netId(WACN_STD_DEFAULT),
+ m_sysId(SID_STD_DEFAULT),
m_grpVchId(0U),
m_grpVchNo(0U),
m_emergency(false),
@@ -99,8 +100,8 @@ TSBK::TSBK() :
m_raw(nullptr)
{
if (m_siteCallsign == nullptr) {
- m_siteCallsign = new uint8_t[P25_MOT_CALLSIGN_LENGTH_BYTES];
- ::memset(m_siteCallsign, 0x00U, P25_MOT_CALLSIGN_LENGTH_BYTES);
+ m_siteCallsign = new uint8_t[MOT_CALLSIGN_LENGTH_BYTES];
+ ::memset(m_siteCallsign, 0x00U, MOT_CALLSIGN_LENGTH_BYTES);
}
#if FORCE_TSBK_CRC_WARN
@@ -124,7 +125,7 @@ TSBK::~TSBK()
///
std::string TSBK::toString(bool isp)
{
- return std::string("TSBK_IOSP_UNKWN (Unknown TSBK)");
+ return std::string("TSBKO, UNKNOWN (Unknown TSBK)");
}
///
@@ -144,16 +145,16 @@ uint8_t* TSBK::getDecodedRaw() const
void TSBK::setCallsign(std::string callsign)
{
if (m_siteCallsign == nullptr) {
- m_siteCallsign = new uint8_t[P25_MOT_CALLSIGN_LENGTH_BYTES];
- ::memset(m_siteCallsign, 0x00U, P25_MOT_CALLSIGN_LENGTH_BYTES);
+ m_siteCallsign = new uint8_t[MOT_CALLSIGN_LENGTH_BYTES];
+ ::memset(m_siteCallsign, 0x00U, MOT_CALLSIGN_LENGTH_BYTES);
}
uint32_t idLength = callsign.length();
if (idLength > 0) {
- ::memset(m_siteCallsign, 0x20U, P25_MOT_CALLSIGN_LENGTH_BYTES);
+ ::memset(m_siteCallsign, 0x20U, MOT_CALLSIGN_LENGTH_BYTES);
- if (idLength > P25_MOT_CALLSIGN_LENGTH_BYTES)
- idLength = P25_MOT_CALLSIGN_LENGTH_BYTES;
+ if (idLength > MOT_CALLSIGN_LENGTH_BYTES)
+ idLength = MOT_CALLSIGN_LENGTH_BYTES;
for (uint32_t i = 0; i < idLength; i++)
m_siteCallsign[i] = callsign[i];
}
diff --git a/src/common/p25/lc/tdulc/LC_ADJ_STS_BCAST.cpp b/src/common/p25/lc/tdulc/LC_ADJ_STS_BCAST.cpp
index 53cc1d2a..502b23a9 100644
--- a/src/common/p25/lc/tdulc/LC_ADJ_STS_BCAST.cpp
+++ b/src/common/p25/lc/tdulc/LC_ADJ_STS_BCAST.cpp
@@ -7,16 +7,17 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tdulc/LC_ADJ_STS_BCAST.h"
#include "Log.h"
-using namespace p25::lc::tdulc;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tdulc;
#include
@@ -28,15 +29,15 @@ using namespace p25;
/// Initializes a new instance of the LC_ADJ_STS_BCAST class.
///
LC_ADJ_STS_BCAST::LC_ADJ_STS_BCAST() : TDULC(),
- m_adjCFVA(P25_CFVA_FAILURE),
+ m_adjCFVA(CFVA::FAILURE),
m_adjSysId(0U),
m_adjRfssId(0U),
m_adjSiteId(0U),
m_adjChannelId(0U),
m_adjChannelNo(0U),
- m_adjServiceClass(P25_SVC_CLS_INVALID)
+ m_adjServiceClass(ServiceClass::INVALID)
{
- m_lco = p25::LC_ADJ_STS_BCAST;
+ m_lco = LCO::ADJ_STS_BCAST;
}
///
@@ -79,7 +80,7 @@ void LC_ADJ_STS_BCAST::encode(uint8_t* data)
rsValue = (rsValue << 8) + m_adjServiceClass; // System Service Class
}
else {
- LogError(LOG_P25, "LC_ADJ_STS_BCAST::encodeLC(), invalid values for LC_ADJ_STS_BCAST, tsbkAdjSiteRFSSId = $%02X, tsbkAdjSiteId = $%02X, tsbkAdjSiteChannel = $%02X",
+ LogError(LOG_P25, "LC_ADJ_STS_BCAST::encodeLC(), invalid values for LC_ADJ_STS_BCAST, adjSiteRFSSId = $%02X, adjSiteId = $%02X, adjSiteChannel = $%02X",
m_adjRfssId, m_adjSiteId, m_adjChannelNo);
return; // blatantly ignore creating this TSBK
}
diff --git a/src/common/p25/lc/tdulc/LC_CALL_TERM.cpp b/src/common/p25/lc/tdulc/LC_CALL_TERM.cpp
index 7691557a..0fec978c 100644
--- a/src/common/p25/lc/tdulc/LC_CALL_TERM.cpp
+++ b/src/common/p25/lc/tdulc/LC_CALL_TERM.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tdulc/LC_CALL_TERM.h"
-using namespace p25::lc::tdulc;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tdulc;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
LC_CALL_TERM::LC_CALL_TERM() : TDULC()
{
- m_lco = p25::LC_CALL_TERM;
+ m_lco = LCO::CALL_TERM;
}
///
@@ -58,7 +59,7 @@ void LC_CALL_TERM::encode(uint8_t* data)
m_implicit = true;
rsValue = 0U;
- rsValue = (rsValue << 24) + P25_WUID_FNE; // System Radio Address
+ rsValue = (rsValue << 24) + WUID_FNE; // System Radio Address
std::unique_ptr rs = TDULC::fromValue(rsValue);
TDULC::encode(data, rs.get());
diff --git a/src/common/p25/lc/tdulc/LC_CONV_FALLBACK.cpp b/src/common/p25/lc/tdulc/LC_CONV_FALLBACK.cpp
index 3fd7613a..51499482 100644
--- a/src/common/p25/lc/tdulc/LC_CONV_FALLBACK.cpp
+++ b/src/common/p25/lc/tdulc/LC_CONV_FALLBACK.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tdulc/LC_CONV_FALLBACK.h"
-using namespace p25::lc::tdulc;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tdulc;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
LC_CONV_FALLBACK::LC_CONV_FALLBACK() : TDULC()
{
- m_lco = p25::LC_CONV_FALLBACK;
+ m_lco = LCO::CONV_FALLBACK;
}
///
diff --git a/src/common/p25/lc/tdulc/LC_FAILSOFT.cpp b/src/common/p25/lc/tdulc/LC_FAILSOFT.cpp
index a9d95a7c..39691b60 100644
--- a/src/common/p25/lc/tdulc/LC_FAILSOFT.cpp
+++ b/src/common/p25/lc/tdulc/LC_FAILSOFT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tdulc/LC_FAILSOFT.h"
-using namespace p25::lc::tdulc;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tdulc;
#include
@@ -28,8 +29,8 @@ using namespace p25;
///
LC_FAILSOFT::LC_FAILSOFT() : TDULC()
{
- m_lco = p25::LC_FAILSOFT;
- m_mfId = p25::P25_MFG_MOT;
+ m_lco = LCO::FAILSOFT;
+ m_mfId = MFG_MOT;
}
///
diff --git a/src/common/p25/lc/tdulc/LC_GROUP.cpp b/src/common/p25/lc/tdulc/LC_GROUP.cpp
index 44909183..b2e077e8 100644
--- a/src/common/p25/lc/tdulc/LC_GROUP.cpp
+++ b/src/common/p25/lc/tdulc/LC_GROUP.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tdulc/LC_GROUP.h"
-using namespace p25::lc::tdulc;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tdulc;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
LC_GROUP::LC_GROUP() : TDULC()
{
- m_lco = p25::LC_GROUP;
+ m_lco = LCO::GROUP;
}
///
diff --git a/src/common/p25/lc/tdulc/LC_GROUP_UPDT.cpp b/src/common/p25/lc/tdulc/LC_GROUP_UPDT.cpp
index e30cc1fb..92a82c62 100644
--- a/src/common/p25/lc/tdulc/LC_GROUP_UPDT.cpp
+++ b/src/common/p25/lc/tdulc/LC_GROUP_UPDT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tdulc/LC_GROUP_UPDT.h"
-using namespace p25::lc::tdulc;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tdulc;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
LC_GROUP_UPDT::LC_GROUP_UPDT() : TDULC()
{
- m_lco = p25::LC_GROUP_UPDT;
+ m_lco = LCO::GROUP_UPDT;
}
///
diff --git a/src/common/p25/lc/tdulc/LC_IDEN_UP.cpp b/src/common/p25/lc/tdulc/LC_IDEN_UP.cpp
index 6d1394c3..910748d8 100644
--- a/src/common/p25/lc/tdulc/LC_IDEN_UP.cpp
+++ b/src/common/p25/lc/tdulc/LC_IDEN_UP.cpp
@@ -7,16 +7,17 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tdulc/LC_IDEN_UP.h"
#include "Log.h"
-using namespace p25::lc::tdulc;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tdulc;
#include
#include
@@ -30,7 +31,7 @@ using namespace p25;
///
LC_IDEN_UP::LC_IDEN_UP() : TDULC()
{
- m_lco = p25::LC_IDEN_UP;
+ m_lco = LCO::IDEN_UP;
}
///
@@ -70,7 +71,7 @@ void LC_IDEN_UP::encode(uint8_t* data)
uCalcTxOffset |= 0x2000U; // this sets a positive offset ...
uint32_t calcBaseFreq = (uint32_t)(m_siteIdenEntry.baseFrequency() / 5);
- uint8_t chanBw = (m_siteIdenEntry.chBandwidthKhz() >= 12.5F) ? P25_IDEN_UP_VU_BW_125K : P25_IDEN_UP_VU_BW_625K;
+ uint8_t chanBw = (m_siteIdenEntry.chBandwidthKhz() >= 12.5F) ? IDEN_UP_VU_BW_125K : IDEN_UP_VU_BW_625K;
rsValue = m_siteIdenEntry.channelId(); // Channel ID
rsValue = (rsValue << 4) + chanBw; // Channel Bandwidth
diff --git a/src/common/p25/lc/tdulc/LC_NET_STS_BCAST.cpp b/src/common/p25/lc/tdulc/LC_NET_STS_BCAST.cpp
index cee0f806..d19504d9 100644
--- a/src/common/p25/lc/tdulc/LC_NET_STS_BCAST.cpp
+++ b/src/common/p25/lc/tdulc/LC_NET_STS_BCAST.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tdulc/LC_NET_STS_BCAST.h"
-using namespace p25::lc::tdulc;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tdulc;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
LC_NET_STS_BCAST::LC_NET_STS_BCAST() : TDULC()
{
- m_lco = p25::LC_NET_STS_BCAST;
+ m_lco = LCO::NET_STS_BCAST;
}
///
diff --git a/src/common/p25/lc/tdulc/LC_PRIVATE.cpp b/src/common/p25/lc/tdulc/LC_PRIVATE.cpp
index dec2c5a7..f4f62d96 100644
--- a/src/common/p25/lc/tdulc/LC_PRIVATE.cpp
+++ b/src/common/p25/lc/tdulc/LC_PRIVATE.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tdulc/LC_PRIVATE.h"
-using namespace p25::lc::tdulc;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tdulc;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
LC_PRIVATE::LC_PRIVATE() : TDULC()
{
- m_lco = p25::LC_PRIVATE;
+ m_lco = LCO::PRIVATE;
}
///
diff --git a/src/common/p25/lc/tdulc/LC_RFSS_STS_BCAST.cpp b/src/common/p25/lc/tdulc/LC_RFSS_STS_BCAST.cpp
index 3c04c32b..24d9863e 100644
--- a/src/common/p25/lc/tdulc/LC_RFSS_STS_BCAST.cpp
+++ b/src/common/p25/lc/tdulc/LC_RFSS_STS_BCAST.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tdulc/LC_RFSS_STS_BCAST.h"
-using namespace p25::lc::tdulc;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tdulc;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
LC_RFSS_STS_BCAST::LC_RFSS_STS_BCAST() : TDULC()
{
- m_lco = p25::LC_RFSS_STS_BCAST;
+ m_lco = LCO::RFSS_STS_BCAST;
}
///
diff --git a/src/common/p25/lc/tdulc/LC_SYS_SRV_BCAST.cpp b/src/common/p25/lc/tdulc/LC_SYS_SRV_BCAST.cpp
index fe43f6e6..c5627551 100644
--- a/src/common/p25/lc/tdulc/LC_SYS_SRV_BCAST.cpp
+++ b/src/common/p25/lc/tdulc/LC_SYS_SRV_BCAST.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tdulc/LC_SYS_SRV_BCAST.h"
-using namespace p25::lc::tdulc;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tdulc;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
LC_SYS_SRV_BCAST::LC_SYS_SRV_BCAST() : TDULC()
{
- m_lco = p25::LC_SYS_SRV_BCAST;
+ m_lco = LCO::SYS_SRV_BCAST;
}
///
@@ -53,7 +54,7 @@ void LC_SYS_SRV_BCAST::encode(uint8_t* data)
{
assert(data != nullptr);
- const uint32_t services = (m_siteData.netActive()) ? P25_SYS_SRV_NET_ACTIVE : 0U | P25_SYS_SRV_DEFAULT;
+ const uint32_t services = (m_siteData.netActive()) ? SystemService::NET_ACTIVE : 0U | SYS_SRV_DEFAULT;
ulong64_t rsValue = 0U;
diff --git a/src/common/p25/lc/tdulc/LC_TEL_INT_VCH_USER.cpp b/src/common/p25/lc/tdulc/LC_TEL_INT_VCH_USER.cpp
index d6e2d832..488d76bd 100644
--- a/src/common/p25/lc/tdulc/LC_TEL_INT_VCH_USER.cpp
+++ b/src/common/p25/lc/tdulc/LC_TEL_INT_VCH_USER.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tdulc/LC_TEL_INT_VCH_USER.h"
-using namespace p25::lc::tdulc;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tdulc;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
LC_TEL_INT_VCH_USER::LC_TEL_INT_VCH_USER() : TDULC()
{
- m_lco = p25::LC_TEL_INT_VCH_USER;
+ m_lco = LCO::TEL_INT_VCH_USER;
}
///
diff --git a/src/common/p25/lc/tdulc/TDULCFactory.cpp b/src/common/p25/lc/tdulc/TDULCFactory.cpp
index 1628af20..b33c6bd2 100644
--- a/src/common/p25/lc/tdulc/TDULCFactory.cpp
+++ b/src/common/p25/lc/tdulc/TDULCFactory.cpp
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -16,9 +16,10 @@
#include "Log.h"
#include "Utils.h"
-using namespace p25::lc::tdulc;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tdulc;
#include
@@ -80,11 +81,11 @@ std::unique_ptr TDULCFactory::createTDULC(const uint8_t* data)
// standard P25 reference opcodes
switch (lco) {
- case p25::LC_GROUP:
+ case LCO::GROUP:
return decode(new LC_GROUP(), data);
- case p25::LC_PRIVATE:
+ case LCO::PRIVATE:
return decode(new LC_PRIVATE(), data);
- case p25::LC_TEL_INT_VCH_USER:
+ case LCO::TEL_INT_VCH_USER:
return decode(new LC_TEL_INT_VCH_USER(), data);
default:
LogError(LOG_P25, "TDULCFactory::create(), unknown TDULC LCO value, lco = $%02X", lco);
diff --git a/src/common/p25/lc/tsbk/IOSP_ACK_RSP.cpp b/src/common/p25/lc/tsbk/IOSP_ACK_RSP.cpp
index d2531ace..f2e69c31 100644
--- a/src/common/p25/lc/tsbk/IOSP_ACK_RSP.cpp
+++ b/src/common/p25/lc/tsbk/IOSP_ACK_RSP.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/IOSP_ACK_RSP.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
IOSP_ACK_RSP::IOSP_ACK_RSP() : TSBK()
{
- m_lco = TSBK_IOSP_ACK_RSP;
+ m_lco = TSBKO::IOSP_ACK_RSP;
}
///
@@ -93,6 +94,6 @@ void IOSP_ACK_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string IOSP_ACK_RSP::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_ACK_RSP (Acknowledge Response - Unit)");
- else return std::string("TSBK_IOSP_ACK_RSP (Acknowledge Response - FNE)");
+ return (isp) ? std::string("TSBKO, IOSP_ACK_RSP (Acknowledge Response - Unit)") :
+ std::string("TSBKO, IOSP_ACK_RSP (Acknowledge Response - FNE)");
}
diff --git a/src/common/p25/lc/tsbk/IOSP_CALL_ALRT.cpp b/src/common/p25/lc/tsbk/IOSP_CALL_ALRT.cpp
index e6f54d8d..68f25c6d 100644
--- a/src/common/p25/lc/tsbk/IOSP_CALL_ALRT.cpp
+++ b/src/common/p25/lc/tsbk/IOSP_CALL_ALRT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/IOSP_CALL_ALRT.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
IOSP_CALL_ALRT::IOSP_CALL_ALRT() : TSBK()
{
- m_lco = TSBK_IOSP_CALL_ALRT;
+ m_lco = TSBKO::IOSP_CALL_ALRT;
}
///
@@ -82,6 +83,6 @@ void IOSP_CALL_ALRT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string IOSP_CALL_ALRT::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_CALL_ALRT (Call Alert Request)");
- else return std::string("TSBK_IOSP_CALL_ALRT (Call Alert)");
+ return (isp) ? std::string("TSBKO, IOSP_CALL_ALRT (Call Alert Request)") :
+ std::string("TSBKO, IOSP_CALL_ALRT (Call Alert)");
}
diff --git a/src/common/p25/lc/tsbk/IOSP_EXT_FNCT.cpp b/src/common/p25/lc/tsbk/IOSP_EXT_FNCT.cpp
index c5daab5c..6c664ab8 100644
--- a/src/common/p25/lc/tsbk/IOSP_EXT_FNCT.cpp
+++ b/src/common/p25/lc/tsbk/IOSP_EXT_FNCT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/IOSP_EXT_FNCT.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -27,9 +28,9 @@ using namespace p25;
/// Initializes a new instance of the IOSP_EXT_FNCT class.
///
IOSP_EXT_FNCT::IOSP_EXT_FNCT() : TSBK(),
- m_extendedFunction(P25_EXT_FNCT_CHECK)
+ m_extendedFunction(ExtendedFunctions::CHECK)
{
- m_lco = TSBK_IOSP_EXT_FNCT;
+ m_lco = TSBKO::IOSP_EXT_FNCT;
}
///
@@ -85,8 +86,8 @@ void IOSP_EXT_FNCT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string IOSP_EXT_FNCT::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_EXT_FNCT (Extended Function Response)");
- else return std::string("TSBK_IOSP_EXT_FNCT (Extended Function Command)");
+ return (isp) ? std::string("TSBKO, IOSP_EXT_FNCT (Extended Function Response)") :
+ std::string("TSBKO, IOSP_EXT_FNCT (Extended Function Command)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/IOSP_GRP_AFF.cpp b/src/common/p25/lc/tsbk/IOSP_GRP_AFF.cpp
index 3736fa22..adac6d70 100644
--- a/src/common/p25/lc/tsbk/IOSP_GRP_AFF.cpp
+++ b/src/common/p25/lc/tsbk/IOSP_GRP_AFF.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/IOSP_GRP_AFF.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -27,9 +28,9 @@ using namespace p25;
/// Initializes a new instance of the IOSP_GRP_AFF class.
///
IOSP_GRP_AFF::IOSP_GRP_AFF() : TSBK(),
- m_announceGroup(P25_WUID_ALL)
+ m_announceGroup(WUID_ALL)
{
- m_lco = TSBK_IOSP_GRP_AFF;
+ m_lco = TSBKO::IOSP_GRP_AFF;
}
///
@@ -87,8 +88,8 @@ void IOSP_GRP_AFF::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string IOSP_GRP_AFF::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_GRP_AFF (Group Affiliation Request)");
- else return std::string("TSBK_IOSP_GRP_AFF (Group Affiliation Response)");
+ return (isp) ? std::string("TSBKO, IOSP_GRP_AFF (Group Affiliation Request)") :
+ std::string("TSBKO, IOSP_GRP_AFF (Group Affiliation Response)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/IOSP_GRP_VCH.cpp b/src/common/p25/lc/tsbk/IOSP_GRP_VCH.cpp
index 072549e8..70d871d3 100644
--- a/src/common/p25/lc/tsbk/IOSP_GRP_VCH.cpp
+++ b/src/common/p25/lc/tsbk/IOSP_GRP_VCH.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/IOSP_GRP_VCH.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -29,7 +30,7 @@ using namespace p25;
IOSP_GRP_VCH::IOSP_GRP_VCH() : TSBK(),
m_forceChannelId(false)
{
- m_lco = TSBK_IOSP_GRP_VCH;
+ m_lco = TSBKO::IOSP_GRP_VCH;
}
///
@@ -99,6 +100,6 @@ void IOSP_GRP_VCH::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string IOSP_GRP_VCH::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_GRP_VCH (Group Voice Channel Request)");
- else return std::string("TSBK_IOSP_GRP_VCH (Group Voice Channel Grant)");
+ return (isp) ? std::string("TSBKO, IOSP_GRP_VCH (Group Voice Channel Request)") :
+ std::string("TSBKO, IOSP_GRP_VCH (Group Voice Channel Grant)");
}
diff --git a/src/common/p25/lc/tsbk/IOSP_MSG_UPDT.cpp b/src/common/p25/lc/tsbk/IOSP_MSG_UPDT.cpp
index 6d7d4eb8..8122f446 100644
--- a/src/common/p25/lc/tsbk/IOSP_MSG_UPDT.cpp
+++ b/src/common/p25/lc/tsbk/IOSP_MSG_UPDT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/IOSP_MSG_UPDT.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -29,7 +30,7 @@ using namespace p25;
IOSP_MSG_UPDT::IOSP_MSG_UPDT() : TSBK(),
m_messageValue(0U)
{
- m_lco = TSBK_IOSP_MSG_UPDT;
+ m_lco = TSBKO::IOSP_MSG_UPDT;
}
///
@@ -85,8 +86,8 @@ void IOSP_MSG_UPDT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string IOSP_MSG_UPDT::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_MSG_UPDT (Message Update Request)");
- else return std::string("TSBK_IOSP_MSG_UPDT (Message Update)");
+ return (isp) ? std::string("TSBKO, IOSP_MSG_UPDT (Message Update Request)") :
+ std::string("TSBKO, IOSP_MSG_UPDT (Message Update)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/IOSP_RAD_MON.cpp b/src/common/p25/lc/tsbk/IOSP_RAD_MON.cpp
index 44501ee7..8143398d 100644
--- a/src/common/p25/lc/tsbk/IOSP_RAD_MON.cpp
+++ b/src/common/p25/lc/tsbk/IOSP_RAD_MON.cpp
@@ -8,15 +8,16 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2022 by Jason-UWU
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/IOSP_RAD_MON.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -30,7 +31,7 @@ using namespace p25;
IOSP_RAD_MON::IOSP_RAD_MON() : TSBK(),
m_txMult(0U)
{
- m_lco = TSBK_IOSP_RAD_MON;
+ m_lco = TSBKO::IOSP_RAD_MON;
}
///
@@ -86,8 +87,8 @@ void IOSP_RAD_MON::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string IOSP_RAD_MON::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_RAD_MON (Radio Unit Monitor Request)");
- else return std::string("TSBK_IOSP_RAD_MON (Radio Unit Monitor Command)");
+ return (isp) ? std::string("TSBKO, IOSP_RAD_MON (Radio Unit Monitor Request)") :
+ std::string("TSBKO, IOSP_RAD_MON (Radio Unit Monitor Command)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/IOSP_STS_UPDT.cpp b/src/common/p25/lc/tsbk/IOSP_STS_UPDT.cpp
index 2aca0948..ef53433a 100644
--- a/src/common/p25/lc/tsbk/IOSP_STS_UPDT.cpp
+++ b/src/common/p25/lc/tsbk/IOSP_STS_UPDT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/IOSP_STS_UPDT.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -29,7 +30,7 @@ using namespace p25;
IOSP_STS_UPDT::IOSP_STS_UPDT() : TSBK(),
m_statusValue(0U)
{
- m_lco = TSBK_IOSP_STS_UPDT;
+ m_lco = TSBKO::IOSP_STS_UPDT;
}
///
@@ -85,8 +86,8 @@ void IOSP_STS_UPDT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string IOSP_STS_UPDT::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_STS_UPDT (Status Update Request)");
- else return std::string("TSBK_IOSP_STS_UPDT (Status Update)");
+ return (isp) ? std::string("TSBKO, IOSP_STS_UPDT (Status Update Request)") :
+ std::string("TSBKO, IOSP_STS_UPDT (Status Update)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/IOSP_UU_ANS.cpp b/src/common/p25/lc/tsbk/IOSP_UU_ANS.cpp
index f163add9..32c2bf86 100644
--- a/src/common/p25/lc/tsbk/IOSP_UU_ANS.cpp
+++ b/src/common/p25/lc/tsbk/IOSP_UU_ANS.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/IOSP_UU_ANS.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
IOSP_UU_ANS::IOSP_UU_ANS() : TSBK()
{
- m_lco = TSBK_IOSP_UU_ANS;
+ m_lco = TSBKO::IOSP_UU_ANS;
}
///
@@ -90,6 +91,6 @@ void IOSP_UU_ANS::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string IOSP_UU_ANS::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_UU_ANS (Unit-to-Unit Answer Response)");
- else return std::string("TSBK_IOSP_UU_ANS (Unit-to-Unit Answer Request)");
+ return (isp) ? std::string("TSBKO, IOSP_UU_ANS (Unit-to-Unit Answer Response)") :
+ std::string("TSBKO, IOSP_UU_ANS (Unit-to-Unit Answer Request)");
}
diff --git a/src/common/p25/lc/tsbk/IOSP_UU_VCH.cpp b/src/common/p25/lc/tsbk/IOSP_UU_VCH.cpp
index 58e31e9e..d1659791 100644
--- a/src/common/p25/lc/tsbk/IOSP_UU_VCH.cpp
+++ b/src/common/p25/lc/tsbk/IOSP_UU_VCH.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/IOSP_UU_VCH.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
IOSP_UU_VCH::IOSP_UU_VCH() : TSBK()
{
- m_lco = TSBK_IOSP_UU_VCH;
+ m_lco = TSBKO::IOSP_UU_VCH;
}
///
@@ -98,6 +99,6 @@ void IOSP_UU_VCH::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string IOSP_UU_VCH::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_UU_VCH (Unit-to-Unit Voice Channel Request)");
- else return std::string("TSBK_IOSP_UU_VCH (Unit-to-Unit Voice Channel Grant)");
+ return (isp) ? std::string("TSBKO, IOSP_UU_VCH (Unit-to-Unit Voice Channel Request)") :
+ std::string("TSBKO, IOSP_UU_VCH (Unit-to-Unit Voice Channel Grant)");
}
diff --git a/src/common/p25/lc/tsbk/IOSP_U_REG.cpp b/src/common/p25/lc/tsbk/IOSP_U_REG.cpp
index 67b0fe9a..c2bb2c2c 100644
--- a/src/common/p25/lc/tsbk/IOSP_U_REG.cpp
+++ b/src/common/p25/lc/tsbk/IOSP_U_REG.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/IOSP_U_REG.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
IOSP_U_REG::IOSP_U_REG() : TSBK()
{
- m_lco = TSBK_IOSP_U_REG;
+ m_lco = TSBKO::IOSP_U_REG;
}
///
@@ -85,6 +86,6 @@ void IOSP_U_REG::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string IOSP_U_REG::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_U_REG (Unit Registration Request)");
- else return std::string("TSBK_IOSP_U_REG (Unit Registration Response)");
+ return (isp) ? std::string("TSBKO, IOSP_U_REG (Unit Registration Request)") :
+ std::string("TSBKO, IOSP_U_REG (Unit Registration Response)");
}
diff --git a/src/common/p25/lc/tsbk/ISP_AUTH_FNE_RST.cpp b/src/common/p25/lc/tsbk/ISP_AUTH_FNE_RST.cpp
index 2595cc27..34a90275 100644
--- a/src/common/p25/lc/tsbk/ISP_AUTH_FNE_RST.cpp
+++ b/src/common/p25/lc/tsbk/ISP_AUTH_FNE_RST.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/ISP_AUTH_FNE_RST.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -30,7 +31,7 @@ ISP_AUTH_FNE_RST::ISP_AUTH_FNE_RST() : TSBK(),
m_authSuccess(false),
m_authStandalone(false)
{
- m_lco = TSBK_ISP_AUTH_FNE_RST;
+ m_lco = TSBKO::ISP_AUTH_FNE_RST;
}
///
@@ -79,7 +80,7 @@ void ISP_AUTH_FNE_RST::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string ISP_AUTH_FNE_RST::toString(bool isp)
{
- return std::string("TSBK_ISP_AUTH_FNE_RST (Authentication FNE Result)");
+ return std::string("TSBKO, ISP_AUTH_FNE_RST (Authentication FNE Result)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/ISP_AUTH_RESP.cpp b/src/common/p25/lc/tsbk/ISP_AUTH_RESP.cpp
index 605c1300..91c57e46 100644
--- a/src/common/p25/lc/tsbk/ISP_AUTH_RESP.cpp
+++ b/src/common/p25/lc/tsbk/ISP_AUTH_RESP.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/ISP_AUTH_RESP.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -30,10 +31,10 @@ ISP_AUTH_RESP::ISP_AUTH_RESP() : TSBK(),
m_authStandalone(false),
m_authRes(nullptr)
{
- m_lco = TSBK_ISP_AUTH_RESP;
+ m_lco = TSBKO::ISP_AUTH_RESP;
- m_authRes = new uint8_t[P25_AUTH_RES_LENGTH_BYTES];
- ::memset(m_authRes, 0x00U, P25_AUTH_RES_LENGTH_BYTES);
+ m_authRes = new uint8_t[AUTH_RES_LENGTH_BYTES];
+ ::memset(m_authRes, 0x00U, AUTH_RES_LENGTH_BYTES);
}
///
@@ -97,7 +98,7 @@ void ISP_AUTH_RESP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string ISP_AUTH_RESP::toString(bool isp)
{
- return std::string("TSBK_ISP_AUTH_RESP (Authentication Response)");
+ return std::string("TSBKO, ISP_AUTH_RESP (Authentication Response)");
}
/// Gets the authentication result.
@@ -106,7 +107,7 @@ void ISP_AUTH_RESP::getAuthRes(uint8_t* res) const
{
assert(res != nullptr);
- ::memcpy(res, m_authRes, P25_AUTH_RES_LENGTH_BYTES);
+ ::memcpy(res, m_authRes, AUTH_RES_LENGTH_BYTES);
}
// ---------------------------------------------------------------------------
@@ -127,6 +128,6 @@ void ISP_AUTH_RESP::copy(const ISP_AUTH_RESP& data)
delete[] m_authRes;
}
- m_authRes = new uint8_t[P25_AUTH_RES_LENGTH_BYTES];
- ::memcpy(m_authRes, data.m_authRes, P25_AUTH_RES_LENGTH_BYTES);
+ m_authRes = new uint8_t[AUTH_RES_LENGTH_BYTES];
+ ::memcpy(m_authRes, data.m_authRes, AUTH_RES_LENGTH_BYTES);
}
diff --git a/src/common/p25/lc/tsbk/ISP_AUTH_SU_DMD.cpp b/src/common/p25/lc/tsbk/ISP_AUTH_SU_DMD.cpp
index 5b3e09fb..d02da778 100644
--- a/src/common/p25/lc/tsbk/ISP_AUTH_SU_DMD.cpp
+++ b/src/common/p25/lc/tsbk/ISP_AUTH_SU_DMD.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/ISP_AUTH_SU_DMD.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
ISP_AUTH_SU_DMD::ISP_AUTH_SU_DMD() : TSBK()
{
- m_lco = TSBK_ISP_AUTH_SU_DMD;
+ m_lco = TSBKO::ISP_AUTH_SU_DMD;
}
///
@@ -75,5 +76,5 @@ void ISP_AUTH_SU_DMD::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string ISP_AUTH_SU_DMD::toString(bool isp)
{
- return std::string("TSBK_ISP_AUTH_SU_DMD (Authentication SU Demand)");
+ return std::string("TSBKO, ISP_AUTH_SU_DMD (Authentication SU Demand)");
}
diff --git a/src/common/p25/lc/tsbk/ISP_CAN_SRV_REQ.cpp b/src/common/p25/lc/tsbk/ISP_CAN_SRV_REQ.cpp
index 1bdae04c..30a9eaeb 100644
--- a/src/common/p25/lc/tsbk/ISP_CAN_SRV_REQ.cpp
+++ b/src/common/p25/lc/tsbk/ISP_CAN_SRV_REQ.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/ISP_CAN_SRV_REQ.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
ISP_CAN_SRV_REQ::ISP_CAN_SRV_REQ() : TSBK()
{
- m_lco = TSBK_ISP_CAN_SRV_REQ;
+ m_lco = TSBKO::ISP_CAN_SRV_REQ;
}
///
@@ -79,5 +80,5 @@ void ISP_CAN_SRV_REQ::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string ISP_CAN_SRV_REQ::toString(bool isp)
{
- return std::string("TSBK_ISP_CAN_SRV_REQ (Cancel Service Request)");
+ return std::string("TSBKO, ISP_CAN_SRV_REQ (Cancel Service Request)");
}
diff --git a/src/common/p25/lc/tsbk/ISP_EMERG_ALRM_REQ.cpp b/src/common/p25/lc/tsbk/ISP_EMERG_ALRM_REQ.cpp
index 8821036c..d2b10e93 100644
--- a/src/common/p25/lc/tsbk/ISP_EMERG_ALRM_REQ.cpp
+++ b/src/common/p25/lc/tsbk/ISP_EMERG_ALRM_REQ.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/ISP_EMERG_ALRM_REQ.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
ISP_EMERG_ALRM_REQ::ISP_EMERG_ALRM_REQ() : TSBK()
{
- m_lco = TSBK_ISP_EMERG_ALRM_REQ;
+ m_lco = TSBKO::ISP_EMERG_ALRM_REQ;
}
///
@@ -90,5 +91,5 @@ void ISP_EMERG_ALRM_REQ::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string ISP_EMERG_ALRM_REQ::toString(bool isp)
{
- return std::string("TSBK_ISP_EMERG_ALRM_REQ (Emergency Alarm Request)");
+ return std::string("TSBKO, ISP_EMERG_ALRM_REQ (Emergency Alarm Request)");
}
diff --git a/src/common/p25/lc/tsbk/ISP_GRP_AFF_Q_RSP.cpp b/src/common/p25/lc/tsbk/ISP_GRP_AFF_Q_RSP.cpp
index 1a01d735..2d2aede4 100644
--- a/src/common/p25/lc/tsbk/ISP_GRP_AFF_Q_RSP.cpp
+++ b/src/common/p25/lc/tsbk/ISP_GRP_AFF_Q_RSP.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/ISP_GRP_AFF_Q_RSP.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -27,9 +28,9 @@ using namespace p25;
/// Initializes a new instance of the ISP_GRP_AFF_Q_RSP class.
///
ISP_GRP_AFF_Q_RSP::ISP_GRP_AFF_Q_RSP() : TSBK(),
- m_announceGroup(P25_WUID_ALL)
+ m_announceGroup(WUID_ALL)
{
- m_lco = TSBK_ISP_GRP_AFF_Q_RSP;
+ m_lco = TSBKO::ISP_GRP_AFF_Q_RSP;
}
///
@@ -78,7 +79,7 @@ void ISP_GRP_AFF_Q_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string ISP_GRP_AFF_Q_RSP::toString(bool isp)
{
- return std::string("TSBK_ISP_GRP_AFF_Q_RSP (Group Affiliation Query Response)");
+ return std::string("TSBKO, ISP_GRP_AFF_Q_RSP (Group Affiliation Query Response)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/ISP_LOC_REG_REQ.cpp b/src/common/p25/lc/tsbk/ISP_LOC_REG_REQ.cpp
index 245326ee..ee612eb6 100644
--- a/src/common/p25/lc/tsbk/ISP_LOC_REG_REQ.cpp
+++ b/src/common/p25/lc/tsbk/ISP_LOC_REG_REQ.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/ISP_LOC_REG_REQ.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -29,7 +30,7 @@ using namespace p25;
ISP_LOC_REG_REQ::ISP_LOC_REG_REQ() : TSBK(),
m_lra(0U)
{
- m_lco = TSBK_ISP_LOC_REG_REQ;
+ m_lco = TSBKO::ISP_LOC_REG_REQ;
}
///
@@ -78,7 +79,7 @@ void ISP_LOC_REG_REQ::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string ISP_LOC_REG_REQ::toString(bool isp)
{
- return std::string("TSBK_ISP_LOC_REG_REQ (Location Registration Request)");
+ return std::string("TSBKO, ISP_LOC_REG_REQ (Location Registration Request)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/ISP_SNDCP_CH_REQ.cpp b/src/common/p25/lc/tsbk/ISP_SNDCP_CH_REQ.cpp
index ba53e802..7e41c218 100644
--- a/src/common/p25/lc/tsbk/ISP_SNDCP_CH_REQ.cpp
+++ b/src/common/p25/lc/tsbk/ISP_SNDCP_CH_REQ.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/ISP_SNDCP_CH_REQ.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -30,7 +31,7 @@ ISP_SNDCP_CH_REQ::ISP_SNDCP_CH_REQ() : TSBK(),
m_dataServiceOptions(0U),
m_dataAccessControl(0U)
{
- m_lco = TSBK_ISP_SNDCP_CH_REQ;
+ m_lco = TSBKO::ISP_SNDCP_CH_REQ;
}
///
@@ -79,7 +80,7 @@ void ISP_SNDCP_CH_REQ::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string ISP_SNDCP_CH_REQ::toString(bool isp)
{
- return std::string("TSBK_ISP_SNDCP_CH_REQ (SNDCP Data Channel Request)");
+ return std::string("TSBKO, ISP_SNDCP_CH_REQ (SNDCP Data Channel Request)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/ISP_U_DEREG_REQ.cpp b/src/common/p25/lc/tsbk/ISP_U_DEREG_REQ.cpp
index 792868e8..6e054992 100644
--- a/src/common/p25/lc/tsbk/ISP_U_DEREG_REQ.cpp
+++ b/src/common/p25/lc/tsbk/ISP_U_DEREG_REQ.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/ISP_U_DEREG_REQ.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
ISP_U_DEREG_REQ::ISP_U_DEREG_REQ() : TSBK()
{
- m_lco = TSBK_ISP_U_DEREG_REQ;
+ m_lco = TSBKO::ISP_U_DEREG_REQ;
}
///
@@ -77,5 +78,5 @@ void ISP_U_DEREG_REQ::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string ISP_U_DEREG_REQ::toString(bool isp)
{
- return std::string("TSBK_ISP_U_DEREG_REQ (Unit De-Registration Request)");
+ return std::string("TSBKO, ISP_U_DEREG_REQ (Unit De-Registration Request)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_ADJ_STS_BCAST.cpp b/src/common/p25/lc/tsbk/OSP_ADJ_STS_BCAST.cpp
index 3a147fef..78156122 100644
--- a/src/common/p25/lc/tsbk/OSP_ADJ_STS_BCAST.cpp
+++ b/src/common/p25/lc/tsbk/OSP_ADJ_STS_BCAST.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_ADJ_STS_BCAST.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -27,15 +28,15 @@ using namespace p25;
/// Initializes a new instance of the OSP_ADJ_STS_BCAST class.
///
OSP_ADJ_STS_BCAST::OSP_ADJ_STS_BCAST() : TSBK(),
- m_adjCFVA(P25_CFVA_FAILURE),
+ m_adjCFVA(CFVA::FAILURE),
m_adjSysId(0U),
m_adjRfssId(0U),
m_adjSiteId(0U),
m_adjChannelId(0U),
m_adjChannelNo(0U),
- m_adjServiceClass(P25_SVC_CLS_INVALID)
+ m_adjServiceClass(ServiceClass::INVALID)
{
- m_lco = TSBK_OSP_ADJ_STS_BCAST;
+ m_lco = TSBKO::OSP_ADJ_STS_BCAST;
}
///
@@ -99,7 +100,7 @@ void OSP_ADJ_STS_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_ADJ_STS_BCAST::toString(bool isp)
{
- return std::string("TSBK_OSP_ADJ_STS_BCAST (Adjacent Site Status Broadcast)");
+ return std::string("TSBKO, OSP_ADJ_STS_BCAST (Adjacent Site Status Broadcast)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/OSP_AUTH_FNE_RESP.cpp b/src/common/p25/lc/tsbk/OSP_AUTH_FNE_RESP.cpp
index 040dc342..d772ea38 100644
--- a/src/common/p25/lc/tsbk/OSP_AUTH_FNE_RESP.cpp
+++ b/src/common/p25/lc/tsbk/OSP_AUTH_FNE_RESP.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_AUTH_FNE_RESP.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -29,10 +30,10 @@ using namespace p25;
OSP_AUTH_FNE_RESP::OSP_AUTH_FNE_RESP() : TSBK(),
m_authRes(nullptr)
{
- m_lco = TSBK_OSP_AUTH_FNE_RESP;
+ m_lco = TSBKO::OSP_AUTH_FNE_RESP;
- m_authRes = new uint8_t[P25_AUTH_RES_LENGTH_BYTES];
- ::memset(m_authRes, 0x00U, P25_AUTH_RES_LENGTH_BYTES);
+ m_authRes = new uint8_t[AUTH_RES_LENGTH_BYTES];
+ ::memset(m_authRes, 0x00U, AUTH_RES_LENGTH_BYTES);
}
///
@@ -90,7 +91,7 @@ void OSP_AUTH_FNE_RESP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_AUTH_FNE_RESP::toString(bool isp)
{
- return std::string("TSBK_OSP_AUTH_FNE_RESP (Authentication FNE Response)");
+ return std::string("TSBKO, OSP_AUTH_FNE_RESP (Authentication FNE Response)");
}
/// Sets the authentication result.
@@ -103,8 +104,8 @@ void OSP_AUTH_FNE_RESP::setAuthRes(const uint8_t* res)
delete[] m_authRes;
}
- m_authRes = new uint8_t[P25_AUTH_RES_LENGTH_BYTES];
- ::memcpy(m_authRes, res, P25_AUTH_RES_LENGTH_BYTES);
+ m_authRes = new uint8_t[AUTH_RES_LENGTH_BYTES];
+ ::memcpy(m_authRes, res, AUTH_RES_LENGTH_BYTES);
}
// ---------------------------------------------------------------------------
@@ -123,6 +124,6 @@ void OSP_AUTH_FNE_RESP::copy(const OSP_AUTH_FNE_RESP& data)
delete[] m_authRes;
}
- m_authRes = new uint8_t[P25_AUTH_RES_LENGTH_BYTES];
- ::memcpy(m_authRes, data.m_authRes, P25_AUTH_RES_LENGTH_BYTES);
+ m_authRes = new uint8_t[AUTH_RES_LENGTH_BYTES];
+ ::memcpy(m_authRes, data.m_authRes, AUTH_RES_LENGTH_BYTES);
}
diff --git a/src/common/p25/lc/tsbk/OSP_DENY_RSP.cpp b/src/common/p25/lc/tsbk/OSP_DENY_RSP.cpp
index febd7e75..44ca8a42 100644
--- a/src/common/p25/lc/tsbk/OSP_DENY_RSP.cpp
+++ b/src/common/p25/lc/tsbk/OSP_DENY_RSP.cpp
@@ -7,16 +7,17 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_DENY_RSP.h"
#include "Log.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -29,7 +30,7 @@ using namespace p25;
///
OSP_DENY_RSP::OSP_DENY_RSP() : TSBK()
{
- m_lco = TSBK_OSP_DENY_RSP;
+ m_lco = TSBKO::OSP_DENY_RSP;
}
///
@@ -73,7 +74,7 @@ void OSP_DENY_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
ulong64_t tsbkValue = 0U;
if (m_response == 0U) {
- LogError(LOG_P25, "OSP_DENY_RSP::encode(), invalid values for TSBK_OSP_DENY_RSP, reason = %u", m_response);
+ LogError(LOG_P25, "OSP_DENY_RSP::encode(), invalid values for TSBKO::OSP_DENY_RSP, reason = %u", m_response);
return; // blatantly ignore creating this TSBK
}
@@ -106,5 +107,5 @@ void OSP_DENY_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_DENY_RSP::toString(bool isp)
{
- return std::string("TSBK_OSP_DENY_RSP (Deny Response)");
+ return std::string("TSBKO, OSP_DENY_RSP (Deny Response)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_DVM_LC_CALL_TERM.cpp b/src/common/p25/lc/tsbk/OSP_DVM_LC_CALL_TERM.cpp
index 057a224e..f7f645fe 100644
--- a/src/common/p25/lc/tsbk/OSP_DVM_LC_CALL_TERM.cpp
+++ b/src/common/p25/lc/tsbk/OSP_DVM_LC_CALL_TERM.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_DVM_LC_CALL_TERM.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,8 +29,7 @@ using namespace p25;
///
OSP_DVM_LC_CALL_TERM::OSP_DVM_LC_CALL_TERM() : TSBK()
{
- m_lco = LC_CALL_TERM;
- m_mfId = P25_MFG_DVM_OCS;
+ m_lco = LCO::CALL_TERM;
}
///
@@ -71,6 +71,8 @@ void OSP_DVM_LC_CALL_TERM::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
ulong64_t tsbkValue = 0U;
+ m_mfId = MFG_DVM_OCS;
+
tsbkValue = (tsbkValue << 4) + m_siteData.channelId(); // Channel ID
tsbkValue = (tsbkValue << 12) + m_grpVchNo; // Channel Number
tsbkValue = (tsbkValue << 16) + m_dstId; // Talkgroup Address
diff --git a/src/common/p25/lc/tsbk/OSP_GRP_AFF_Q.cpp b/src/common/p25/lc/tsbk/OSP_GRP_AFF_Q.cpp
index 085cc7b8..0c023345 100644
--- a/src/common/p25/lc/tsbk/OSP_GRP_AFF_Q.cpp
+++ b/src/common/p25/lc/tsbk/OSP_GRP_AFF_Q.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_GRP_AFF_Q.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
OSP_GRP_AFF_Q::OSP_GRP_AFF_Q() : TSBK()
{
- m_lco = TSBK_OSP_GRP_AFF_Q;
+ m_lco = TSBKO::OSP_GRP_AFF_Q;
}
///
@@ -72,5 +73,5 @@ void OSP_GRP_AFF_Q::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_GRP_AFF_Q::toString(bool isp)
{
- return std::string("TSBK_OSP_GRP_AFF_Q (Group Affiliation Query)");
+ return std::string("TSBKO, OSP_GRP_AFF_Q (Group Affiliation Query)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_GRP_VCH_GRANT_UPD.cpp b/src/common/p25/lc/tsbk/OSP_GRP_VCH_GRANT_UPD.cpp
index f10c9811..92a3ae41 100644
--- a/src/common/p25/lc/tsbk/OSP_GRP_VCH_GRANT_UPD.cpp
+++ b/src/common/p25/lc/tsbk/OSP_GRP_VCH_GRANT_UPD.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_GRP_VCH_GRANT_UPD.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
OSP_GRP_VCH_GRANT_UPD::OSP_GRP_VCH_GRANT_UPD() : TSBK()
{
- m_lco = TSBK_OSP_GRP_VCH_GRANT_UPD;
+ m_lco = TSBKO::OSP_GRP_VCH_GRANT_UPD;
}
///
@@ -90,5 +91,5 @@ void OSP_GRP_VCH_GRANT_UPD::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_GRP_VCH_GRANT_UPD::toString(bool isp)
{
- return std::string("TSBK_OSP_GRP_VCH_GRANT_UPD (Group Voice Channel Grant Update)");
+ return std::string("TSBKO, OSP_GRP_VCH_GRANT_UPD (Group Voice Channel Grant Update)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_IDEN_UP.cpp b/src/common/p25/lc/tsbk/OSP_IDEN_UP.cpp
index 82aa3568..f779cad8 100644
--- a/src/common/p25/lc/tsbk/OSP_IDEN_UP.cpp
+++ b/src/common/p25/lc/tsbk/OSP_IDEN_UP.cpp
@@ -7,16 +7,17 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_IDEN_UP.h"
#include "Log.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
#include
@@ -30,7 +31,7 @@ using namespace p25;
///
OSP_IDEN_UP::OSP_IDEN_UP() : TSBK()
{
- m_lco = TSBK_OSP_IDEN_UP;
+ m_lco = TSBKO::OSP_IDEN_UP;
}
///
@@ -63,7 +64,7 @@ void OSP_IDEN_UP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
if ((m_siteIdenEntry.chBandwidthKhz() != 0.0F) && (m_siteIdenEntry.chSpaceKhz() != 0.0F) &&
(m_siteIdenEntry.txOffsetMhz() != 0.0F) && (m_siteIdenEntry.baseFrequency() != 0U)) {
if (m_siteIdenEntry.baseFrequency() < 762000000U) {
- LogError(LOG_P25, "OSP_IDEN_UP::encode(), invalid values for TSBK_OSP_IDEN_UP, baseFrequency = %uHz",
+ LogError(LOG_P25, "OSP_IDEN_UP::encode(), invalid values for TSBKO::OSP_IDEN_UP, baseFrequency = %uHz",
m_siteIdenEntry.baseFrequency());
return; // blatantly ignore creating this TSBK
}
@@ -85,7 +86,7 @@ void OSP_IDEN_UP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 32) + calcBaseFreq; // Base Frequency
}
else {
- LogError(LOG_P25, "OSP_IDEN_UP::encode(), invalid values for TSBK_OSP_IDEN_UP, baseFrequency = %uHz, txOffsetMhz = %fMHz, chBandwidthKhz = %fKHz, chSpaceKhz = %fKHz",
+ LogError(LOG_P25, "OSP_IDEN_UP::encode(), invalid values for TSBKO::OSP_IDEN_UP, baseFrequency = %uHz, txOffsetMhz = %fMHz, chBandwidthKhz = %fKHz, chSpaceKhz = %fKHz",
m_siteIdenEntry.baseFrequency(), m_siteIdenEntry.txOffsetMhz(), m_siteIdenEntry.chBandwidthKhz(),
m_siteIdenEntry.chSpaceKhz());
return; // blatently ignore creating this TSBK
@@ -102,5 +103,5 @@ void OSP_IDEN_UP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_IDEN_UP::toString(bool isp)
{
- return std::string("TSBK_OSP_IDEN_UP (Channel Identifier Update)");
+ return std::string("TSBKO, OSP_IDEN_UP (Channel Identifier Update)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_IDEN_UP_VU.cpp b/src/common/p25/lc/tsbk/OSP_IDEN_UP_VU.cpp
index 22053098..16b019b5 100644
--- a/src/common/p25/lc/tsbk/OSP_IDEN_UP_VU.cpp
+++ b/src/common/p25/lc/tsbk/OSP_IDEN_UP_VU.cpp
@@ -7,16 +7,17 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_IDEN_UP_VU.h"
#include "Log.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
#include
@@ -30,7 +31,7 @@ using namespace p25;
///
OSP_IDEN_UP_VU::OSP_IDEN_UP_VU() : TSBK()
{
- m_lco = TSBK_OSP_IDEN_UP_VU;
+ m_lco = TSBKO::OSP_IDEN_UP_VU;
}
///
@@ -70,7 +71,7 @@ void OSP_IDEN_UP_VU::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
uCalcTxOffset |= 0x2000U; // this sets a positive offset ...
uint32_t calcBaseFreq = (uint32_t)(m_siteIdenEntry.baseFrequency() / 5);
- uint8_t chanBw = (m_siteIdenEntry.chBandwidthKhz() >= 12.5F) ? P25_IDEN_UP_VU_BW_125K : P25_IDEN_UP_VU_BW_625K;
+ uint8_t chanBw = (m_siteIdenEntry.chBandwidthKhz() >= 12.5F) ? IDEN_UP_VU_BW_125K : IDEN_UP_VU_BW_625K;
tsbkValue = m_siteIdenEntry.channelId(); // Channel ID
tsbkValue = (tsbkValue << 4) + chanBw; // Channel Bandwidth
@@ -79,7 +80,7 @@ void OSP_IDEN_UP_VU::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 32) + calcBaseFreq; // Base Frequency
}
else {
- LogError(LOG_P25, "OSP_IDEN_UP_VU::encode(), invalid values for TSBK_OSP_IDEN_UP_VU, baseFrequency = %uHz, txOffsetMhz = %fMHz, chBandwidthKhz = %fKHz, chSpaceKhz = %fKHz",
+ LogError(LOG_P25, "OSP_IDEN_UP_VU::encode(), invalid values for TSBKO::OSP_IDEN_UP_VU, baseFrequency = %uHz, txOffsetMhz = %fMHz, chBandwidthKhz = %fKHz, chSpaceKhz = %fKHz",
m_siteIdenEntry.baseFrequency(), m_siteIdenEntry.txOffsetMhz(), m_siteIdenEntry.chBandwidthKhz(),
m_siteIdenEntry.chSpaceKhz());
return; // blatantly ignore creating this TSBK
@@ -96,5 +97,5 @@ void OSP_IDEN_UP_VU::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_IDEN_UP_VU::toString(bool isp)
{
- return std::string("TSBK_OSP_IDEN_UP_VU (Channel Identifier Update for VHF/UHF Bands)");
+ return std::string("TSBKO, OSP_IDEN_UP_VU (Channel Identifier Update for VHF/UHF Bands)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_LOC_REG_RSP.cpp b/src/common/p25/lc/tsbk/OSP_LOC_REG_RSP.cpp
index fb53134a..454f3e7e 100644
--- a/src/common/p25/lc/tsbk/OSP_LOC_REG_RSP.cpp
+++ b/src/common/p25/lc/tsbk/OSP_LOC_REG_RSP.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_LOC_REG_RSP.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
OSP_LOC_REG_RSP::OSP_LOC_REG_RSP() : TSBK()
{
- m_lco = TSBK_OSP_LOC_REG_RSP;
+ m_lco = TSBKO::OSP_LOC_REG_RSP;
}
///
@@ -75,5 +76,5 @@ void OSP_LOC_REG_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_LOC_REG_RSP::toString(bool isp)
{
- return std::string("TSBK_OSP_LOC_REG_RSP (Location Registration Response)");
+ return std::string("TSBKO, OSP_LOC_REG_RSP (Location Registration Response)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_MOT_CC_BSI.cpp b/src/common/p25/lc/tsbk/OSP_MOT_CC_BSI.cpp
index 7ae994fc..9135ec55 100644
--- a/src/common/p25/lc/tsbk/OSP_MOT_CC_BSI.cpp
+++ b/src/common/p25/lc/tsbk/OSP_MOT_CC_BSI.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_MOT_CC_BSI.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,8 +29,7 @@ using namespace p25;
///
OSP_MOT_CC_BSI::OSP_MOT_CC_BSI() : TSBK()
{
- m_lco = TSBK_OSP_MOT_CC_BSI;
- m_mfId = P25_MFG_MOT;
+ m_lco = TSBKO::OSP_MOT_CC_BSI;
}
///
@@ -59,8 +59,10 @@ void OSP_MOT_CC_BSI::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
ulong64_t tsbkValue = 0U;
+ m_mfId = MFG_MOT;
+
tsbkValue = (m_siteCallsign[0] - 43U) & 0x3F; // Character 0
- for (uint8_t i = 1; i < P25_MOT_CALLSIGN_LENGTH_BYTES; i++) {
+ for (uint8_t i = 1; i < MOT_CALLSIGN_LENGTH_BYTES; i++) {
tsbkValue = (tsbkValue << 6) + ((m_siteCallsign[i] - 43U) & 0x3F); // Character 1 - 7
}
tsbkValue = (tsbkValue << 4) + m_siteData.channelId(); // Channel ID
@@ -77,5 +79,5 @@ void OSP_MOT_CC_BSI::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_MOT_CC_BSI::toString(bool isp)
{
- return std::string("TSBK_OSP_MOT_CC_BSI (Motorola / Control Channel Base Station Identifier)");
+ return std::string("TSBKO, OSP_MOT_CC_BSI (Motorola / Control Channel Base Station Identifier)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_MOT_GRG_ADD.cpp b/src/common/p25/lc/tsbk/OSP_MOT_GRG_ADD.cpp
index 6a385afa..81498247 100644
--- a/src/common/p25/lc/tsbk/OSP_MOT_GRG_ADD.cpp
+++ b/src/common/p25/lc/tsbk/OSP_MOT_GRG_ADD.cpp
@@ -7,16 +7,17 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_MOT_GRG_ADD.h"
#include "Log.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -33,7 +34,7 @@ OSP_MOT_GRG_ADD::OSP_MOT_GRG_ADD() : TSBK(),
m_patchGroup2Id(0U),
m_patchGroup3Id(0U)
{
- m_lco = TSBK_OSP_MOT_GRG_ADD;
+ m_lco = TSBKO::OSP_MOT_GRG_ADD;
}
///
@@ -63,7 +64,7 @@ void OSP_MOT_GRG_ADD::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
ulong64_t tsbkValue = 0U;
- m_mfId = P25_MFG_MOT;
+ m_mfId = MFG_MOT;
if ((m_patchSuperGroupId != 0U)) {
tsbkValue = m_patchSuperGroupId; // Patch Super Group Address
@@ -84,7 +85,7 @@ void OSP_MOT_GRG_ADD::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
}
}
else {
- LogError(LOG_P25, "OSP_MOT_GRG_ADD::encode(), invalid values for TSBK_OSP_MOT_GRG_DEL, patchSuperGroupId = $%02X, patchGroup1Id = $%02X",
+ LogError(LOG_P25, "OSP_MOT_GRG_ADD::encode(), invalid values for TSBKO::OSP_MOT_GRG_DEL, patchSuperGroupId = $%02X, patchGroup1Id = $%02X",
m_patchSuperGroupId, m_patchGroup1Id);
return; // blatantly ignore creating this TSBK
}
@@ -100,7 +101,7 @@ void OSP_MOT_GRG_ADD::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_MOT_GRG_ADD::toString(bool isp)
{
- return std::string("TSBK_OSP_MOT_GRG_ADD (Motorola / Group Regroup Add)");
+ return std::string("TSBKO, OSP_MOT_GRG_ADD (Motorola / Group Regroup Add)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/OSP_MOT_GRG_DEL.cpp b/src/common/p25/lc/tsbk/OSP_MOT_GRG_DEL.cpp
index 74ca55ce..68b755d0 100644
--- a/src/common/p25/lc/tsbk/OSP_MOT_GRG_DEL.cpp
+++ b/src/common/p25/lc/tsbk/OSP_MOT_GRG_DEL.cpp
@@ -7,16 +7,17 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_MOT_GRG_DEL.h"
#include "Log.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -33,7 +34,7 @@ OSP_MOT_GRG_DEL::OSP_MOT_GRG_DEL() : TSBK(),
m_patchGroup2Id(0U),
m_patchGroup3Id(0U)
{
- m_lco = TSBK_OSP_MOT_GRG_DEL;
+ m_lco = TSBKO::OSP_MOT_GRG_DEL;
}
///
@@ -63,7 +64,7 @@ void OSP_MOT_GRG_DEL::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
ulong64_t tsbkValue = 0U;
- m_mfId = P25_MFG_MOT;
+ m_mfId = MFG_MOT;
if ((m_patchSuperGroupId != 0U) && (m_patchGroup1Id != 0U)) {
tsbkValue = m_patchSuperGroupId; // Patch Super Group Address
@@ -84,7 +85,7 @@ void OSP_MOT_GRG_DEL::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
}
}
else {
- LogError(LOG_P25, "OSP_MOT_GRG_DEL::encode(), invalid values for TSBK_OSP_MOT_GRG_DEL, patchSuperGroupId = $%02X, patchGroup1Id = $%02X",
+ LogError(LOG_P25, "OSP_MOT_GRG_DEL::encode(), invalid values for TSBKO::OSP_MOT_GRG_DEL, patchSuperGroupId = $%02X, patchGroup1Id = $%02X",
m_patchSuperGroupId, m_patchGroup1Id);
return; // blatantly ignore creating this TSBK
}
@@ -100,7 +101,7 @@ void OSP_MOT_GRG_DEL::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_MOT_GRG_DEL::toString(bool isp)
{
- return std::string("TSBK_OSP_MOT_GRG_DEL (Motorola / Group Regroup Delete)");
+ return std::string("TSBKO, OSP_MOT_GRG_DEL (Motorola / Group Regroup Delete)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/OSP_MOT_GRG_VCH_GRANT.cpp b/src/common/p25/lc/tsbk/OSP_MOT_GRG_VCH_GRANT.cpp
index af9cc02f..46103a04 100644
--- a/src/common/p25/lc/tsbk/OSP_MOT_GRG_VCH_GRANT.cpp
+++ b/src/common/p25/lc/tsbk/OSP_MOT_GRG_VCH_GRANT.cpp
@@ -7,16 +7,17 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_MOT_GRG_VCH_GRANT.h"
#include "Log.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -30,7 +31,7 @@ using namespace p25;
OSP_MOT_GRG_VCH_GRANT::OSP_MOT_GRG_VCH_GRANT() : TSBK(),
m_patchSuperGroupId(0U)
{
- m_lco = TSBK_OSP_MOT_GRG_VCH_GRANT;
+ m_lco = TSBKO::OSP_MOT_GRG_VCH_GRANT;
}
///
@@ -60,7 +61,7 @@ void OSP_MOT_GRG_VCH_GRANT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
ulong64_t tsbkValue = 0U;
- m_mfId = P25_MFG_MOT;
+ m_mfId = MFG_MOT;
if (m_patchSuperGroupId != 0U) {
tsbkValue = 0U; // Priority
@@ -70,7 +71,7 @@ void OSP_MOT_GRG_VCH_GRANT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
}
else {
- LogError(LOG_P25, "OSP_MOT_GRG_VCH_GRANT::encode(), invalid values for TSBK_OSP_MOT_GRG_VCH_GRANT, patchSuperGroupId = $%02X", m_patchSuperGroupId);
+ LogError(LOG_P25, "OSP_MOT_GRG_VCH_GRANT::encode(), invalid values for TSBKO::OSP_MOT_GRG_VCH_GRANT, patchSuperGroupId = $%02X", m_patchSuperGroupId);
return; // blatantly ignore creating this TSBK
}
@@ -85,7 +86,7 @@ void OSP_MOT_GRG_VCH_GRANT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_MOT_GRG_VCH_GRANT::toString(bool isp)
{
- return std::string("TSBK_OSP_MOT_GRG_VCH_GRANT (Group Regroup Voice Channel Grant)");
+ return std::string("TSBKO, OSP_MOT_GRG_VCH_GRANT (Group Regroup Voice Channel Grant)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/OSP_MOT_GRG_VCH_UPD.cpp b/src/common/p25/lc/tsbk/OSP_MOT_GRG_VCH_UPD.cpp
index d01f83e0..69f2ef15 100644
--- a/src/common/p25/lc/tsbk/OSP_MOT_GRG_VCH_UPD.cpp
+++ b/src/common/p25/lc/tsbk/OSP_MOT_GRG_VCH_UPD.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_MOT_GRG_VCH_UPD.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -30,7 +31,7 @@ OSP_MOT_GRG_VCH_UPD::OSP_MOT_GRG_VCH_UPD() : TSBK(),
m_patchGroup1Id(0U),
m_patchGroup2Id(0U)
{
- m_lco = TSBK_OSP_MOT_GRG_VCH_UPD;
+ m_lco = TSBKO::OSP_MOT_GRG_VCH_UPD;
}
///
@@ -60,7 +61,7 @@ void OSP_MOT_GRG_VCH_UPD::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
ulong64_t tsbkValue = 0U;
- m_mfId = P25_MFG_MOT;
+ m_mfId = MFG_MOT;
tsbkValue = m_siteData.channelId(); // Channel ID
tsbkValue = (tsbkValue << 4) + m_siteData.channelNo(); // Channel Number
@@ -80,7 +81,7 @@ void OSP_MOT_GRG_VCH_UPD::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_MOT_GRG_VCH_UPD::toString(bool isp)
{
- return std::string("TSBK_OSP_MOT_GRG_VCH_UPD (Group Regroup Voice Channel Grant Update)");
+ return std::string("TSBKO, OSP_MOT_GRG_VCH_UPD (Group Regroup Voice Channel Grant Update)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/OSP_MOT_PSH_CCH.cpp b/src/common/p25/lc/tsbk/OSP_MOT_PSH_CCH.cpp
index 96f634d9..ea6187bb 100644
--- a/src/common/p25/lc/tsbk/OSP_MOT_PSH_CCH.cpp
+++ b/src/common/p25/lc/tsbk/OSP_MOT_PSH_CCH.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_MOT_PSH_CCH.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,8 +29,7 @@ using namespace p25;
///
OSP_MOT_PSH_CCH::OSP_MOT_PSH_CCH() : TSBK()
{
- m_lco = TSBK_OSP_MOT_PSH_CCH;
- m_mfId = P25_MFG_MOT;
+ m_lco = TSBKO::OSP_MOT_PSH_CCH;
}
///
@@ -59,6 +59,8 @@ void OSP_MOT_PSH_CCH::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
ulong64_t tsbkValue = 0U;
+ m_mfId = MFG_MOT;
+
std::unique_ptr tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
@@ -70,5 +72,5 @@ void OSP_MOT_PSH_CCH::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_MOT_PSH_CCH::toString(bool isp)
{
- return std::string("TSBK_OSP_MOT_PSH_CCH (Motorola / Planned Control Channel Shutdown)");
+ return std::string("TSBKO, OSP_MOT_PSH_CCH (Motorola / Planned Control Channel Shutdown)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_NET_STS_BCAST.cpp b/src/common/p25/lc/tsbk/OSP_NET_STS_BCAST.cpp
index b4b69dc3..0fd754e2 100644
--- a/src/common/p25/lc/tsbk/OSP_NET_STS_BCAST.cpp
+++ b/src/common/p25/lc/tsbk/OSP_NET_STS_BCAST.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_NET_STS_BCAST.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
OSP_NET_STS_BCAST::OSP_NET_STS_BCAST() : TSBK()
{
- m_lco = TSBK_OSP_NET_STS_BCAST;
+ m_lco = TSBKO::OSP_NET_STS_BCAST;
}
///
@@ -76,5 +77,5 @@ void OSP_NET_STS_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_NET_STS_BCAST::toString(bool isp)
{
- return std::string("TSBK_OSP_NET_STS_BCAST (Network Status Broadcast)");
+ return std::string("TSBKO, OSP_NET_STS_BCAST (Network Status Broadcast)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_QUE_RSP.cpp b/src/common/p25/lc/tsbk/OSP_QUE_RSP.cpp
index 9ab7c920..da8fcc75 100644
--- a/src/common/p25/lc/tsbk/OSP_QUE_RSP.cpp
+++ b/src/common/p25/lc/tsbk/OSP_QUE_RSP.cpp
@@ -7,16 +7,17 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_QUE_RSP.h"
#include "Log.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -29,7 +30,7 @@ using namespace p25;
///
OSP_QUE_RSP::OSP_QUE_RSP() : TSBK()
{
- m_lco = TSBK_OSP_QUE_RSP;
+ m_lco = TSBKO::OSP_QUE_RSP;
}
///
@@ -73,7 +74,7 @@ void OSP_QUE_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
ulong64_t tsbkValue = 0U;
if (m_response == 0U) {
- LogError(LOG_P25, "OSP_QUE_RSP::encode(), invalid values for TSBK_OSP_QUE_RSP, reason = %u", m_response);
+ LogError(LOG_P25, "OSP_QUE_RSP::encode(), invalid values for TSBKO::OSP_QUE_RSP, reason = %u", m_response);
return; // blatantly ignore creating this TSBK
}
@@ -106,5 +107,5 @@ void OSP_QUE_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_QUE_RSP::toString(bool isp)
{
- return std::string("TSBK_OSP_QUE_RSP (Queued Response)");
+ return std::string("TSBKO, OSP_QUE_RSP (Queued Response)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_RFSS_STS_BCAST.cpp b/src/common/p25/lc/tsbk/OSP_RFSS_STS_BCAST.cpp
index 4d0f86b7..55bc29e5 100644
--- a/src/common/p25/lc/tsbk/OSP_RFSS_STS_BCAST.cpp
+++ b/src/common/p25/lc/tsbk/OSP_RFSS_STS_BCAST.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_RFSS_STS_BCAST.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -29,7 +30,7 @@ using namespace p25;
OSP_RFSS_STS_BCAST::OSP_RFSS_STS_BCAST() : TSBK(),
m_roamerReaccess(false)
{
- m_lco = TSBK_OSP_RFSS_STS_BCAST;
+ m_lco = TSBKO::OSP_RFSS_STS_BCAST;
}
///
@@ -81,5 +82,5 @@ void OSP_RFSS_STS_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_RFSS_STS_BCAST::toString(bool isp)
{
- return std::string("TSBK_OSP_RFSS_STS_BCAST (RFSS Status Broadcast)");
+ return std::string("TSBKO, OSP_RFSS_STS_BCAST (RFSS Status Broadcast)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_SCCB.cpp b/src/common/p25/lc/tsbk/OSP_SCCB.cpp
index b7974e90..b1a4c89b 100644
--- a/src/common/p25/lc/tsbk/OSP_SCCB.cpp
+++ b/src/common/p25/lc/tsbk/OSP_SCCB.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_SCCB.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -30,7 +31,7 @@ OSP_SCCB::OSP_SCCB() : TSBK(),
m_sccbChannelId1(0U),
m_sccbChannelId2(0U)
{
- m_lco = TSBK_OSP_SCCB;
+ m_lco = TSBKO::OSP_SCCB;
}
///
@@ -67,14 +68,14 @@ void OSP_SCCB::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 8) + m_siteData.serviceClass(); // System Service Class
}
else {
- tsbkValue = (tsbkValue << 8) + (P25_SVC_CLS_INVALID); // System Service Class
+ tsbkValue = (tsbkValue << 8) + (ServiceClass::INVALID); // System Service Class
}
tsbkValue = (tsbkValue << 16) + m_sccbChannelId2; // SCCB Channel ID 2
if (m_sccbChannelId2 > 0) {
tsbkValue = (tsbkValue << 8) + m_siteData.serviceClass(); // System Service Class
}
else {
- tsbkValue = (tsbkValue << 8) + (P25_SVC_CLS_INVALID); // System Service Class
+ tsbkValue = (tsbkValue << 8) + (ServiceClass::INVALID); // System Service Class
}
std::unique_ptr tsbk = TSBK::fromValue(tsbkValue);
@@ -88,7 +89,7 @@ void OSP_SCCB::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_SCCB::toString(bool isp)
{
- return std::string("TSBK_OSP_SCCB (Secondary Control Channel Broadcast)");
+ return std::string("TSBKO, OSP_SCCB (Secondary Control Channel Broadcast)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/OSP_SCCB_EXP.cpp b/src/common/p25/lc/tsbk/OSP_SCCB_EXP.cpp
index e813db07..fa350b1e 100644
--- a/src/common/p25/lc/tsbk/OSP_SCCB_EXP.cpp
+++ b/src/common/p25/lc/tsbk/OSP_SCCB_EXP.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_SCCB_EXP.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -30,7 +31,7 @@ OSP_SCCB_EXP::OSP_SCCB_EXP() : TSBK(),
m_sccbChannelId1(0U),
m_sccbChannelNo(0U)
{
- m_lco = TSBK_OSP_SCCB_EXP;
+ m_lco = TSBKO::OSP_SCCB_EXP;
}
///
@@ -72,7 +73,7 @@ void OSP_SCCB_EXP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 8) + m_siteData.serviceClass(); // System Service Class
}
else {
- tsbkValue = (tsbkValue << 8) + (P25_SVC_CLS_INVALID); // System Service Class
+ tsbkValue = (tsbkValue << 8) + (ServiceClass::INVALID); // System Service Class
}
std::unique_ptr tsbk = TSBK::fromValue(tsbkValue);
@@ -86,7 +87,7 @@ void OSP_SCCB_EXP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_SCCB_EXP::toString(bool isp)
{
- return std::string("TSBK_OSP_SCCB_EXP (Secondary Control Channel Broadcast - Explicit)");
+ return std::string("TSBKO, OSP_SCCB_EXP (Secondary Control Channel Broadcast - Explicit)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/OSP_SNDCP_CH_ANN.cpp b/src/common/p25/lc/tsbk/OSP_SNDCP_CH_ANN.cpp
index a8cc6cda..afa77096 100644
--- a/src/common/p25/lc/tsbk/OSP_SNDCP_CH_ANN.cpp
+++ b/src/common/p25/lc/tsbk/OSP_SNDCP_CH_ANN.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_SNDCP_CH_ANN.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -30,7 +31,7 @@ OSP_SNDCP_CH_ANN::OSP_SNDCP_CH_ANN() : TSBK(),
m_sndcpAutoAccess(true),
m_sndcpDAC(1U)
{
- m_lco = TSBK_OSP_SNDCP_CH_ANN;
+ m_lco = TSBKO::OSP_SNDCP_CH_ANN;
}
///
@@ -92,7 +93,7 @@ void OSP_SNDCP_CH_ANN::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_SNDCP_CH_ANN::toString(bool isp)
{
- return std::string("TSBK_OSP_SNDCP_CH_ANN (SNDCP Data Channel Announcement)");
+ return std::string("TSBKO, OSP_SNDCP_CH_ANN (SNDCP Data Channel Announcement)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/OSP_SNDCP_CH_GNT.cpp b/src/common/p25/lc/tsbk/OSP_SNDCP_CH_GNT.cpp
index 184d67c7..63766722 100644
--- a/src/common/p25/lc/tsbk/OSP_SNDCP_CH_GNT.cpp
+++ b/src/common/p25/lc/tsbk/OSP_SNDCP_CH_GNT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_SNDCP_CH_GNT.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -30,7 +31,7 @@ OSP_SNDCP_CH_GNT::OSP_SNDCP_CH_GNT() : TSBK(),
m_dataServiceOptions(0U),
m_dataChannelNo(0U)
{
- m_lco = TSBK_OSP_SNDCP_CH_GNT;
+ m_lco = TSBKO::OSP_SNDCP_CH_GNT;
}
///
@@ -98,7 +99,7 @@ void OSP_SNDCP_CH_GNT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_SNDCP_CH_GNT::toString(bool isp)
{
- return std::string("TSBK_OSP_SNDCP_CH_GNT (SNDCP Data Channel Grant)");
+ return std::string("TSBKO, OSP_SNDCP_CH_GNT (SNDCP Data Channel Grant)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/OSP_SYNC_BCAST.cpp b/src/common/p25/lc/tsbk/OSP_SYNC_BCAST.cpp
index ce8f9013..4326abe6 100644
--- a/src/common/p25/lc/tsbk/OSP_SYNC_BCAST.cpp
+++ b/src/common/p25/lc/tsbk/OSP_SYNC_BCAST.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_SYNC_BCAST.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
#include
@@ -32,7 +33,7 @@ using namespace p25;
OSP_SYNC_BCAST::OSP_SYNC_BCAST() : TSBK(),
m_microslotCount(0U)
{
- m_lco = TSBK_OSP_SYNC_BCAST;
+ m_lco = TSBKO::OSP_SYNC_BCAST;
}
///
@@ -70,7 +71,7 @@ void OSP_SYNC_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
uint32_t tmY = (local_tm.tm_year + 1900) - 2000;
#if DEBUG_P25_TSBK
- LogDebug(LOG_P25, "TSBK_OSP_SYNC_BCAST, tmM = %u / %u, tmY = %u / %u", local_tm.tm_mon, tmM, local_tm.tm_year, tmY);
+ LogDebug(LOG_P25, "TSBKO, OSP_SYNC_BCAST, tmM = %u / %u, tmY = %u / %u", local_tm.tm_mon, tmM, local_tm.tm_year, tmY);
#endif
// determine LTO and direction (positive or negative)
@@ -120,7 +121,7 @@ void OSP_SYNC_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_SYNC_BCAST::toString(bool isp)
{
- return std::string("TSBK_OSP_SYNC_BCAST (Synchronization Broadcast)");
+ return std::string("TSBKO, OSP_SYNC_BCAST (Synchronization Broadcast)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/OSP_SYS_SRV_BCAST.cpp b/src/common/p25/lc/tsbk/OSP_SYS_SRV_BCAST.cpp
index 088b5747..e64e369e 100644
--- a/src/common/p25/lc/tsbk/OSP_SYS_SRV_BCAST.cpp
+++ b/src/common/p25/lc/tsbk/OSP_SYS_SRV_BCAST.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_SYS_SRV_BCAST.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
OSP_SYS_SRV_BCAST::OSP_SYS_SRV_BCAST() : TSBK()
{
- m_lco = TSBK_OSP_SYS_SRV_BCAST;
+ m_lco = TSBKO::OSP_SYS_SRV_BCAST;
}
///
@@ -56,7 +57,7 @@ void OSP_SYS_SRV_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
{
assert(data != nullptr);
- const uint32_t services = (m_siteData.netActive()) ? P25_SYS_SRV_NET_ACTIVE : 0U | P25_SYS_SRV_DEFAULT;
+ const uint32_t services = (m_siteData.netActive()) ? SystemService::NET_ACTIVE : 0U | SYS_SRV_DEFAULT;
ulong64_t tsbkValue = 0U;
@@ -74,5 +75,5 @@ void OSP_SYS_SRV_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_SYS_SRV_BCAST::toString(bool isp)
{
- return std::string("TSBK_OSP_SYS_SRV_BCAST (System Service Broadcast)");
+ return std::string("TSBKO, OSP_SYS_SRV_BCAST (System Service Broadcast)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_TIME_DATE_ANN.cpp b/src/common/p25/lc/tsbk/OSP_TIME_DATE_ANN.cpp
index 22809772..c7432cd3 100644
--- a/src/common/p25/lc/tsbk/OSP_TIME_DATE_ANN.cpp
+++ b/src/common/p25/lc/tsbk/OSP_TIME_DATE_ANN.cpp
@@ -8,15 +8,16 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2022 by Jason-UWU
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_TIME_DATE_ANN.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
#include
@@ -32,7 +33,7 @@ using namespace p25;
///
OSP_TIME_DATE_ANN::OSP_TIME_DATE_ANN() : TSBK()
{
- m_lco = TSBK_OSP_TIME_DATE_ANN;
+ m_lco = TSBKO::OSP_TIME_DATE_ANN;
}
///
@@ -78,7 +79,7 @@ void OSP_TIME_DATE_ANN::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
}
#if DEBUG_P25_TSBK
- LogDebug(LOG_P25, "TSBK_OSP_TIME_DATE_ANN, tmM = %u / %u, tmY = %u / %u", local_tm.tm_mon, tmM, local_tm.tm_year, tmY);
+ LogDebug(LOG_P25, "TSBKO, OSP_TIME_DATE_ANN, tmM = %u / %u, tmY = %u / %u", local_tm.tm_mon, tmM, local_tm.tm_year, tmY);
#endif
uint8_t lto = fabs(m_siteData.lto()) * 2U; // this will cause a bug for half-hour timezone intervals...
@@ -106,7 +107,7 @@ void OSP_TIME_DATE_ANN::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 7); // Reserved
#if DEBUG_P25_TSBK
- LogDebug(LOG_P25, "TSBK_OSP_TIME_DATE_ANN, tmM = %u, tmMDAY = %u, tmY = %u, tmH = %u, tmMin = %u, tmS = %u", tmM, tmMDAY, tmY, tmH, tmMin, tmS);
+ LogDebug(LOG_P25, "TSBKO, OSP_TIME_DATE_ANN, tmM = %u, tmMDAY = %u, tmY = %u, tmH = %u, tmMin = %u, tmS = %u", tmM, tmMDAY, tmY, tmH, tmMin, tmS);
#endif
std::unique_ptr tsbk = TSBK::fromValue(tsbkValue);
@@ -120,5 +121,5 @@ void OSP_TIME_DATE_ANN::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_TIME_DATE_ANN::toString(bool isp)
{
- return std::string("TSBK_OSP_TIME_DATE_ANN (Time and Date Announcement)");
+ return std::string("TSBKO, OSP_TIME_DATE_ANN (Time and Date Announcement)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_TSBK_RAW.cpp b/src/common/p25/lc/tsbk/OSP_TSBK_RAW.cpp
index eabd7206..fde73e26 100644
--- a/src/common/p25/lc/tsbk/OSP_TSBK_RAW.cpp
+++ b/src/common/p25/lc/tsbk/OSP_TSBK_RAW.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_TSBK_RAW.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -29,7 +30,7 @@ using namespace p25;
OSP_TSBK_RAW::OSP_TSBK_RAW() : TSBK(),
m_tsbk(nullptr)
{
- m_lco = TSBK_IOSP_ACK_RSP;
+ m_lco = TSBKO::IOSP_ACK_RSP;
}
///
diff --git a/src/common/p25/lc/tsbk/OSP_UU_VCH_GRANT_UPD.cpp b/src/common/p25/lc/tsbk/OSP_UU_VCH_GRANT_UPD.cpp
index 1c4885e9..68391d75 100644
--- a/src/common/p25/lc/tsbk/OSP_UU_VCH_GRANT_UPD.cpp
+++ b/src/common/p25/lc/tsbk/OSP_UU_VCH_GRANT_UPD.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_UU_VCH_GRANT_UPD.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
OSP_UU_VCH_GRANT_UPD::OSP_UU_VCH_GRANT_UPD() : TSBK()
{
- m_lco = TSBK_OSP_UU_VCH_GRANT_UPD;
+ m_lco = TSBKO::OSP_UU_VCH_GRANT_UPD;
}
///
@@ -91,5 +92,5 @@ void OSP_UU_VCH_GRANT_UPD::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_UU_VCH_GRANT_UPD::toString(bool isp)
{
- return std::string("TSBK_OSP_UU_VCH_GRANT_UPD (Unit-to-Unit Voice Channel Grant Update)");
+ return std::string("TSBKO, OSP_UU_VCH_GRANT_UPD (Unit-to-Unit Voice Channel Grant Update)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_U_DEREG_ACK.cpp b/src/common/p25/lc/tsbk/OSP_U_DEREG_ACK.cpp
index ae0e6694..ee156534 100644
--- a/src/common/p25/lc/tsbk/OSP_U_DEREG_ACK.cpp
+++ b/src/common/p25/lc/tsbk/OSP_U_DEREG_ACK.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_U_DEREG_ACK.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
OSP_U_DEREG_ACK::OSP_U_DEREG_ACK() : TSBK()
{
- m_lco = TSBK_OSP_U_DEREG_ACK;
+ m_lco = TSBKO::OSP_U_DEREG_ACK;
}
///
@@ -84,5 +85,5 @@ void OSP_U_DEREG_ACK::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_U_DEREG_ACK::toString(bool isp)
{
- return std::string("TSBK_OSP_U_DEREG_ACK (Unit De-Registration Acknowledge)");
+ return std::string("TSBKO, OSP_U_DEREG_ACK (Unit De-Registration Acknowledge)");
}
diff --git a/src/common/p25/lc/tsbk/OSP_U_REG_CMD.cpp b/src/common/p25/lc/tsbk/OSP_U_REG_CMD.cpp
index 94badc27..a08fb0ba 100644
--- a/src/common/p25/lc/tsbk/OSP_U_REG_CMD.cpp
+++ b/src/common/p25/lc/tsbk/OSP_U_REG_CMD.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_U_REG_CMD.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
OSP_U_REG_CMD::OSP_U_REG_CMD() : TSBK()
{
- m_lco = TSBK_OSP_U_REG_CMD;
+ m_lco = TSBKO::OSP_U_REG_CMD;
}
///
@@ -72,5 +73,5 @@ void OSP_U_REG_CMD::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_U_REG_CMD::toString(bool isp)
{
- return std::string("TSBK_OSP_U_REG_CMD (Unit Registration Command)");
+ return std::string("TSBKO, OSP_U_REG_CMD (Unit Registration Command)");
}
diff --git a/src/common/p25/lc/tsbk/TSBKFactory.cpp b/src/common/p25/lc/tsbk/TSBKFactory.cpp
index 7623ff03..a650f0f4 100644
--- a/src/common/p25/lc/tsbk/TSBKFactory.cpp
+++ b/src/common/p25/lc/tsbk/TSBKFactory.cpp
@@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -16,9 +16,10 @@
#include "Log.h"
#include "Utils.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -118,34 +119,34 @@ std::unique_ptr TSBKFactory::createTSBK(const uint8_t* data, bool rawTSBK)
uint8_t mfId = tsbk[1U]; // Mfg Id.
// Motorola P25 vendor opcodes
- if (mfId == P25_MFG_MOT) {
+ if (mfId == MFG_MOT) {
switch (lco) {
- case TSBK_IOSP_GRP_VCH:
- case TSBK_IOSP_UU_VCH:
- case TSBK_IOSP_UU_ANS:
- case TSBK_IOSP_TELE_INT_ANS:
- case TSBK_IOSP_STS_UPDT:
- case TSBK_IOSP_STS_Q:
- case TSBK_IOSP_MSG_UPDT:
- case TSBK_IOSP_CALL_ALRT:
- case TSBK_IOSP_ACK_RSP:
- case TSBK_IOSP_GRP_AFF:
- case TSBK_IOSP_U_REG:
- case TSBK_ISP_CAN_SRV_REQ:
- case TSBK_ISP_GRP_AFF_Q_RSP:
- case TSBK_OSP_DENY_RSP:
- case TSBK_OSP_QUE_RSP:
- case TSBK_ISP_U_DEREG_REQ:
- case TSBK_OSP_U_DEREG_ACK:
- case TSBK_ISP_LOC_REG_REQ:
- mfId = P25_MFG_STANDARD;
+ case TSBKO::IOSP_GRP_VCH:
+ case TSBKO::IOSP_UU_VCH:
+ case TSBKO::IOSP_UU_ANS:
+ case TSBKO::IOSP_TELE_INT_ANS:
+ case TSBKO::IOSP_STS_UPDT:
+ case TSBKO::IOSP_STS_Q:
+ case TSBKO::IOSP_MSG_UPDT:
+ case TSBKO::IOSP_CALL_ALRT:
+ case TSBKO::IOSP_ACK_RSP:
+ case TSBKO::IOSP_GRP_AFF:
+ case TSBKO::IOSP_U_REG:
+ case TSBKO::ISP_CAN_SRV_REQ:
+ case TSBKO::ISP_GRP_AFF_Q_RSP:
+ case TSBKO::OSP_DENY_RSP:
+ case TSBKO::OSP_QUE_RSP:
+ case TSBKO::ISP_U_DEREG_REQ:
+ case TSBKO::OSP_U_DEREG_ACK:
+ case TSBKO::ISP_LOC_REG_REQ:
+ mfId = MFG_STANDARD;
break;
default:
LogError(LOG_P25, "TSBKFactory::createTSBK(), unknown TSBK LCO value, mfId = $%02X, lco = $%02X", mfId, lco);
break;
}
- if (mfId == P25_MFG_MOT) {
+ if (mfId == MFG_MOT) {
return nullptr;
}
else {
@@ -154,16 +155,16 @@ std::unique_ptr TSBKFactory::createTSBK(const uint8_t* data, bool rawTSBK)
}
// internal / Omaha Communication Systems P25 vendor opcodes
- if (mfId == P25_MFG_DVM_OCS) {
+ if (mfId == MFG_DVM_OCS) {
switch (lco) {
- case LC_CALL_TERM:
+ case LCO::CALL_TERM:
return decode(new OSP_DVM_LC_CALL_TERM(), data, rawTSBK);
default:
- mfId = P25_MFG_STANDARD;
+ mfId = MFG_STANDARD;
break;
}
- if (mfId == P25_MFG_DVM_OCS) {
+ if (mfId == MFG_DVM_OCS) {
return nullptr;
}
else {
@@ -173,55 +174,55 @@ std::unique_ptr TSBKFactory::createTSBK(const uint8_t* data, bool rawTSBK)
// standard P25 reference opcodes
switch (lco) {
- case TSBK_IOSP_GRP_VCH:
+ case TSBKO::IOSP_GRP_VCH:
return decode(new IOSP_GRP_VCH(), data, rawTSBK);
- case TSBK_OSP_GRP_VCH_GRANT_UPD:
+ case TSBKO::OSP_GRP_VCH_GRANT_UPD:
return decode(new OSP_GRP_VCH_GRANT_UPD(), data, rawTSBK);
- case TSBK_IOSP_UU_VCH:
+ case TSBKO::IOSP_UU_VCH:
return decode(new IOSP_UU_VCH(), data, rawTSBK);
- case TSBK_OSP_UU_VCH_GRANT_UPD:
+ case TSBKO::OSP_UU_VCH_GRANT_UPD:
return decode(new OSP_UU_VCH_GRANT_UPD(), data, rawTSBK);
- case TSBK_IOSP_UU_ANS:
+ case TSBKO::IOSP_UU_ANS:
return decode(new IOSP_UU_ANS(), data, rawTSBK);
- case TSBK_ISP_SNDCP_CH_REQ:
+ case TSBKO::ISP_SNDCP_CH_REQ:
return decode(new ISP_SNDCP_CH_REQ(), data, rawTSBK);
- case TSBK_IOSP_STS_UPDT:
+ case TSBKO::IOSP_STS_UPDT:
return decode(new IOSP_STS_UPDT(), data, rawTSBK);
- case TSBK_IOSP_MSG_UPDT:
+ case TSBKO::IOSP_MSG_UPDT:
return decode(new IOSP_MSG_UPDT(), data, rawTSBK);
- case TSBK_IOSP_RAD_MON:
+ case TSBKO::IOSP_RAD_MON:
return decode(new IOSP_RAD_MON(), data, rawTSBK);
- case TSBK_IOSP_CALL_ALRT:
+ case TSBKO::IOSP_CALL_ALRT:
return decode(new IOSP_CALL_ALRT(), data, rawTSBK);
- case TSBK_IOSP_ACK_RSP:
+ case TSBKO::IOSP_ACK_RSP:
return decode(new IOSP_ACK_RSP(), data, rawTSBK);
- case TSBK_ISP_EMERG_ALRM_REQ:
+ case TSBKO::ISP_EMERG_ALRM_REQ:
return decode(new ISP_EMERG_ALRM_REQ(), data, rawTSBK);
- case TSBK_IOSP_EXT_FNCT:
+ case TSBKO::IOSP_EXT_FNCT:
return decode(new IOSP_EXT_FNCT(), data, rawTSBK);
- case TSBK_IOSP_GRP_AFF:
+ case TSBKO::IOSP_GRP_AFF:
return decode(new IOSP_GRP_AFF(), data, rawTSBK);
- case TSBK_IOSP_U_REG:
+ case TSBKO::IOSP_U_REG:
return decode(new IOSP_U_REG(), data, rawTSBK);
- case TSBK_ISP_CAN_SRV_REQ:
+ case TSBKO::ISP_CAN_SRV_REQ:
return decode(new ISP_CAN_SRV_REQ(), data, rawTSBK);
- case TSBK_ISP_GRP_AFF_Q_RSP:
+ case TSBKO::ISP_GRP_AFF_Q_RSP:
return decode(new ISP_GRP_AFF_Q_RSP(), data, rawTSBK);
- case TSBK_OSP_QUE_RSP:
+ case TSBKO::OSP_QUE_RSP:
return decode(new OSP_QUE_RSP(), data, rawTSBK);
- case TSBK_ISP_U_DEREG_REQ:
+ case TSBKO::ISP_U_DEREG_REQ:
return decode(new ISP_U_DEREG_REQ(), data, rawTSBK);
- case TSBK_OSP_U_DEREG_ACK:
+ case TSBKO::OSP_U_DEREG_ACK:
return decode(new OSP_U_DEREG_ACK(), data, rawTSBK);
- case TSBK_ISP_LOC_REG_REQ:
+ case TSBKO::ISP_LOC_REG_REQ:
return decode(new ISP_LOC_REG_REQ(), data, rawTSBK);
- case TSBK_ISP_AUTH_RESP:
+ case TSBKO::ISP_AUTH_RESP:
return decode(new ISP_AUTH_RESP(), data, rawTSBK);
- case TSBK_ISP_AUTH_FNE_RST:
+ case TSBKO::ISP_AUTH_FNE_RST:
return decode(new ISP_AUTH_FNE_RST(), data, rawTSBK);
- case TSBK_ISP_AUTH_SU_DMD:
+ case TSBKO::ISP_AUTH_SU_DMD:
return decode(new ISP_AUTH_SU_DMD(), data, rawTSBK);
- case TSBK_OSP_ADJ_STS_BCAST:
+ case TSBKO::OSP_ADJ_STS_BCAST:
return decode(new OSP_ADJ_STS_BCAST(), data, rawTSBK);
default:
LogError(LOG_P25, "TSBKFactory::create(), unknown TSBK LCO value, mfId = $%02X, lco = $%02X", mfId, lco);
@@ -241,7 +242,7 @@ std::unique_ptr TSBKFactory::createAMBT(const data::DataHeader& dataHeader
{
assert(blocks != nullptr);
- if (dataHeader.getFormat() != PDU_FMT_AMBT) {
+ if (dataHeader.getFormat() != PDUFormatType::AMBT) {
LogError(LOG_P25, "TSBKFactory::createAMBT(), PDU is not a AMBT PDU");
return nullptr;
}
@@ -255,35 +256,35 @@ std::unique_ptr TSBKFactory::createAMBT(const data::DataHeader& dataHeader
uint8_t mfId = dataHeader.getMFId(); // Mfg Id.
// Motorola P25 vendor opcodes
- if (mfId == P25_MFG_MOT) {
+ if (mfId == MFG_MOT) {
switch (lco) {
- case TSBK_IOSP_GRP_VCH:
- case TSBK_IOSP_UU_VCH:
- case TSBK_IOSP_UU_ANS:
- case TSBK_IOSP_TELE_INT_ANS:
- case TSBK_IOSP_STS_UPDT:
- case TSBK_IOSP_STS_Q:
- case TSBK_IOSP_MSG_UPDT:
- case TSBK_IOSP_CALL_ALRT:
- case TSBK_IOSP_ACK_RSP:
- case TSBK_IOSP_GRP_AFF:
- case TSBK_IOSP_U_REG:
- case TSBK_ISP_CAN_SRV_REQ:
- case TSBK_OSP_DENY_RSP:
- case TSBK_OSP_QUE_RSP:
- case TSBK_ISP_U_DEREG_REQ:
- case TSBK_OSP_U_DEREG_ACK:
- case TSBK_ISP_LOC_REG_REQ:
- mfId = P25_MFG_STANDARD;
+ case TSBKO::IOSP_GRP_VCH:
+ case TSBKO::IOSP_UU_VCH:
+ case TSBKO::IOSP_UU_ANS:
+ case TSBKO::IOSP_TELE_INT_ANS:
+ case TSBKO::IOSP_STS_UPDT:
+ case TSBKO::IOSP_STS_Q:
+ case TSBKO::IOSP_MSG_UPDT:
+ case TSBKO::IOSP_CALL_ALRT:
+ case TSBKO::IOSP_ACK_RSP:
+ case TSBKO::IOSP_GRP_AFF:
+ case TSBKO::IOSP_U_REG:
+ case TSBKO::ISP_CAN_SRV_REQ:
+ case TSBKO::OSP_DENY_RSP:
+ case TSBKO::OSP_QUE_RSP:
+ case TSBKO::ISP_U_DEREG_REQ:
+ case TSBKO::OSP_U_DEREG_ACK:
+ case TSBKO::ISP_LOC_REG_REQ:
+ mfId = MFG_STANDARD;
break;
- case TSBK_ISP_GRP_AFF_Q_RSP:
+ case TSBKO::ISP_GRP_AFF_Q_RSP:
return decode(new MBT_ISP_GRP_AFF_Q_RSP(), dataHeader, blocks);
default:
LogError(LOG_P25, "TSBKFactory::createAMBT(), unknown TSBK LCO value, mfId = $%02X, lco = $%02X", mfId, lco);
break;
}
- if (mfId == P25_MFG_MOT) {
+ if (mfId == MFG_MOT) {
return nullptr;
}
else {
@@ -293,23 +294,23 @@ std::unique_ptr TSBKFactory::createAMBT(const data::DataHeader& dataHeader
// standard P25 reference opcodes
switch (lco) {
- case TSBK_IOSP_STS_UPDT:
+ case TSBKO::IOSP_STS_UPDT:
return decode(new MBT_IOSP_STS_UPDT(), dataHeader, blocks);
- case TSBK_IOSP_MSG_UPDT:
+ case TSBKO::IOSP_MSG_UPDT:
return decode(new MBT_IOSP_MSG_UPDT(), dataHeader, blocks);
- case TSBK_IOSP_CALL_ALRT:
+ case TSBKO::IOSP_CALL_ALRT:
return decode(new MBT_IOSP_CALL_ALRT(), dataHeader, blocks);
- case TSBK_IOSP_ACK_RSP:
+ case TSBKO::IOSP_ACK_RSP:
return decode(new MBT_IOSP_ACK_RSP(), dataHeader, blocks);
- case TSBK_IOSP_GRP_AFF:
+ case TSBKO::IOSP_GRP_AFF:
return decode(new MBT_IOSP_GRP_AFF(), dataHeader, blocks);
- case TSBK_ISP_CAN_SRV_REQ:
+ case TSBKO::ISP_CAN_SRV_REQ:
return decode(new MBT_ISP_CAN_SRV_REQ(), dataHeader, blocks);
- case TSBK_IOSP_EXT_FNCT:
+ case TSBKO::IOSP_EXT_FNCT:
return decode(new MBT_IOSP_EXT_FNCT(), dataHeader, blocks);
- case TSBK_ISP_AUTH_RESP_M:
+ case TSBKO::ISP_AUTH_RESP_M:
return decode(new MBT_ISP_AUTH_RESP_M(), dataHeader, blocks);
- case TSBK_ISP_AUTH_SU_DMD:
+ case TSBKO::ISP_AUTH_SU_DMD:
return decode(new MBT_ISP_AUTH_SU_DMD(), dataHeader, blocks);
default:
LogError(LOG_P25, "TSBKFactory::createAMBT(), unknown TSBK LCO value, mfId = $%02X, lco = $%02X", mfId, lco);
diff --git a/src/common/p25/lc/tsbk/TSBKFactory.h b/src/common/p25/lc/tsbk/TSBKFactory.h
index 54ea39f7..0b34e246 100644
--- a/src/common/p25/lc/tsbk/TSBKFactory.h
+++ b/src/common/p25/lc/tsbk/TSBKFactory.h
@@ -17,6 +17,7 @@
#include "common/edac/Trellis.h"
+// TSBK
#include "common/p25/lc/TSBK.h"
#include "common/p25/lc/tsbk/IOSP_ACK_RSP.h"
#include "common/p25/lc/tsbk/IOSP_CALL_ALRT.h"
@@ -68,6 +69,7 @@
#include "common/p25/lc/tsbk/OSP_U_REG_CMD.h"
#include "common/p25/lc/tsbk/OSP_UU_VCH_GRANT_UPD.h"
+// AMBT
#include "common/p25/lc/AMBT.h"
#include "common/p25/lc/tsbk/mbt/MBT_IOSP_ACK_RSP.h"
#include "common/p25/lc/tsbk/mbt/MBT_IOSP_CALL_ALRT.h"
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_IOSP_ACK_RSP.cpp b/src/common/p25/lc/tsbk/mbt/MBT_IOSP_ACK_RSP.cpp
index 7fd69ac2..4b7bc235 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_IOSP_ACK_RSP.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_IOSP_ACK_RSP.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_IOSP_ACK_RSP.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
MBT_IOSP_ACK_RSP::MBT_IOSP_ACK_RSP() : AMBT()
{
- m_lco = TSBK_IOSP_ACK_RSP;
+ m_lco = TSBKO::IOSP_ACK_RSP;
}
///
@@ -81,6 +82,6 @@ void MBT_IOSP_ACK_RSP::encodeMBT(data::DataHeader& dataHeader, uint8_t* pduUserD
///
std::string MBT_IOSP_ACK_RSP::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_ACK_RSP (Acknowledge Response - Unit)");
- else return std::string("TSBK_IOSP_ACK_RSP (Acknowledge Response - FNE)");
+ return (isp) ? std::string("TSBKO, IOSP_ACK_RSP (Acknowledge Response - Unit)") :
+ std::string("TSBKO, IOSP_ACK_RSP (Acknowledge Response - FNE)");
}
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_IOSP_CALL_ALRT.cpp b/src/common/p25/lc/tsbk/mbt/MBT_IOSP_CALL_ALRT.cpp
index fc91e510..a460c73b 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_IOSP_CALL_ALRT.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_IOSP_CALL_ALRT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_IOSP_CALL_ALRT.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
MBT_IOSP_CALL_ALRT::MBT_IOSP_CALL_ALRT() : AMBT()
{
- m_lco = TSBK_IOSP_CALL_ALRT;
+ m_lco = TSBKO::IOSP_CALL_ALRT;
}
///
@@ -79,6 +80,6 @@ void MBT_IOSP_CALL_ALRT::encodeMBT(data::DataHeader& dataHeader, uint8_t* pduUse
///
std::string MBT_IOSP_CALL_ALRT::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_CALL_ALRT (Call Alert Request)");
- else return std::string("TSBK_IOSP_CALL_ALRT (Call Alert)");
+ return (isp) ? std::string("TSBKO, IOSP_CALL_ALRT (Call Alert Request)") :
+ std::string("TSBKO, IOSP_CALL_ALRT (Call Alert)");
}
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_IOSP_EXT_FNCT.cpp b/src/common/p25/lc/tsbk/mbt/MBT_IOSP_EXT_FNCT.cpp
index 54737b37..a65060c3 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_IOSP_EXT_FNCT.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_IOSP_EXT_FNCT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_IOSP_EXT_FNCT.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -27,9 +28,9 @@ using namespace p25;
/// Initializes a new instance of the MBT_IOSP_EXT_FNCT class.
///
MBT_IOSP_EXT_FNCT::MBT_IOSP_EXT_FNCT() : AMBT(),
- m_extendedFunction(P25_EXT_FNCT_CHECK)
+ m_extendedFunction(ExtendedFunctions::CHECK)
{
- m_lco = TSBK_IOSP_EXT_FNCT;
+ m_lco = TSBKO::IOSP_EXT_FNCT;
}
///
@@ -81,8 +82,8 @@ void MBT_IOSP_EXT_FNCT::encodeMBT(data::DataHeader& dataHeader, uint8_t* pduUser
///
std::string MBT_IOSP_EXT_FNCT::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_EXT_FNCT (Extended Function Response)");
- else return std::string("TSBK_IOSP_EXT_FNCT (Extended Function Command)");
+ return (isp) ? std::string("TSBKO, IOSP_EXT_FNCT (Extended Function Response)") :
+ std::string("TSBKO, IOSP_EXT_FNCT (Extended Function Command)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_IOSP_GRP_AFF.cpp b/src/common/p25/lc/tsbk/mbt/MBT_IOSP_GRP_AFF.cpp
index 258c16fc..14de1405 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_IOSP_GRP_AFF.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_IOSP_GRP_AFF.cpp
@@ -13,9 +13,10 @@
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_IOSP_GRP_AFF.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -27,9 +28,9 @@ using namespace p25;
/// Initializes a new instance of the MBT_IOSP_GRP_AFF class.
///
MBT_IOSP_GRP_AFF::MBT_IOSP_GRP_AFF() : AMBT(),
- m_announceGroup(P25_WUID_ALL)
+ m_announceGroup(WUID_ALL)
{
- m_lco = TSBK_IOSP_GRP_AFF;
+ m_lco = TSBKO::IOSP_GRP_AFF;
}
///
@@ -95,6 +96,6 @@ void MBT_IOSP_GRP_AFF::encodeMBT(data::DataHeader& dataHeader, uint8_t* pduUserD
///
std::string MBT_IOSP_GRP_AFF::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_GRP_AFF (Group Affiliation Request)");
- else return std::string("TSBK_IOSP_GRP_AFF (Group Affiliation Response)");
+ return (isp) ? std::string("TSBKO, IOSP_GRP_AFF (Group Affiliation Request)") :
+ std::string("TSBKO, IOSP_GRP_AFF (Group Affiliation Response)");
}
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_IOSP_MSG_UPDT.cpp b/src/common/p25/lc/tsbk/mbt/MBT_IOSP_MSG_UPDT.cpp
index ede50ee2..9f5f1815 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_IOSP_MSG_UPDT.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_IOSP_MSG_UPDT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_IOSP_MSG_UPDT.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -29,7 +30,7 @@ using namespace p25;
MBT_IOSP_MSG_UPDT::MBT_IOSP_MSG_UPDT() : AMBT(),
m_messageValue(0U)
{
- m_lco = TSBK_IOSP_MSG_UPDT;
+ m_lco = TSBKO::IOSP_MSG_UPDT;
}
///
@@ -81,8 +82,8 @@ void MBT_IOSP_MSG_UPDT::encodeMBT(data::DataHeader& dataHeader, uint8_t* pduUser
///
std::string MBT_IOSP_MSG_UPDT::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_MSG_UPDT (Message Update Request)");
- else return std::string("TSBK_IOSP_MSG_UPDT (Message Update)");
+ return (isp) ? std::string("TSBKO, IOSP_MSG_UPDT (Message Update Request)") :
+ std::string("TSBKO, IOSP_MSG_UPDT (Message Update)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_IOSP_STS_UPDT.cpp b/src/common/p25/lc/tsbk/mbt/MBT_IOSP_STS_UPDT.cpp
index 9609007e..48caec68 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_IOSP_STS_UPDT.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_IOSP_STS_UPDT.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_IOSP_STS_UPDT.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -29,7 +30,7 @@ using namespace p25;
MBT_IOSP_STS_UPDT::MBT_IOSP_STS_UPDT() : AMBT(),
m_statusValue(0U)
{
- m_lco = TSBK_IOSP_STS_UPDT;
+ m_lco = TSBKO::IOSP_STS_UPDT;
}
///
@@ -81,8 +82,8 @@ void MBT_IOSP_STS_UPDT::encodeMBT(data::DataHeader& dataHeader, uint8_t* pduUser
///
std::string MBT_IOSP_STS_UPDT::toString(bool isp)
{
- if (isp) return std::string("TSBK_IOSP_STS_UPDT (Status Update Request)");
- else return std::string("TSBK_IOSP_STS_UPDT (Status Update)");
+ return (isp) ? std::string("TSBKO, IOSP_STS_UPDT (Status Update Request)") :
+ std::string("TSBKO, IOSP_STS_UPDT (Status Update)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_ISP_AUTH_RESP_M.cpp b/src/common/p25/lc/tsbk/mbt/MBT_ISP_AUTH_RESP_M.cpp
index 11516103..bc8b36f8 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_ISP_AUTH_RESP_M.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_ISP_AUTH_RESP_M.cpp
@@ -7,16 +7,17 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_ISP_AUTH_RESP_M.h"
#include "Log.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -30,12 +31,12 @@ using namespace p25;
MBT_ISP_AUTH_RESP_M::MBT_ISP_AUTH_RESP_M() : AMBT(),
m_authStandalone(false)
{
- m_lco = TSBK_ISP_AUTH_RESP_M;
+ m_lco = TSBKO::ISP_AUTH_RESP_M;
- m_authRes = new uint8_t[P25_AUTH_RES_LENGTH_BYTES];
- ::memset(m_authRes, 0x00U, P25_AUTH_RES_LENGTH_BYTES);
- m_authRC = new uint8_t[P25_AUTH_RAND_CHLNG_LENGTH_BYTES];
- ::memset(m_authRC, 0x00U, P25_AUTH_RAND_CHLNG_LENGTH_BYTES);
+ m_authRes = new uint8_t[AUTH_RES_LENGTH_BYTES];
+ ::memset(m_authRes, 0x00U, AUTH_RES_LENGTH_BYTES);
+ m_authRC = new uint8_t[AUTH_RAND_CHLNG_LENGTH_BYTES];
+ ::memset(m_authRC, 0x00U, AUTH_RAND_CHLNG_LENGTH_BYTES);
}
///
@@ -120,7 +121,7 @@ void MBT_ISP_AUTH_RESP_M::encodeMBT(data::DataHeader& dataHeader, uint8_t* pduUs
///
std::string MBT_ISP_AUTH_RESP_M::toString(bool isp)
{
- return std::string("TSBK_ISP_AUTH_RESP_M (Authentication Response Mutual)");
+ return std::string("TSBKO, ISP_AUTH_RESP_M (Authentication Response Mutual)");
}
/// Gets the authentication result.
@@ -129,7 +130,7 @@ void MBT_ISP_AUTH_RESP_M::getAuthRes(uint8_t* res) const
{
assert(res != nullptr);
- ::memcpy(res, m_authRes, P25_AUTH_RES_LENGTH_BYTES);
+ ::memcpy(res, m_authRes, AUTH_RES_LENGTH_BYTES);
}
/// Sets the authentication random challenge.
@@ -138,7 +139,7 @@ void MBT_ISP_AUTH_RESP_M::setAuthRC(const uint8_t* rc)
{
assert(rc != nullptr);
- ::memcpy(m_authRC, rc, P25_AUTH_RAND_CHLNG_LENGTH_BYTES);
+ ::memcpy(m_authRC, rc, AUTH_RAND_CHLNG_LENGTH_BYTES);
}
/// Gets the authentication random challenge.
@@ -147,7 +148,7 @@ void MBT_ISP_AUTH_RESP_M::getAuthRC(uint8_t* rc) const
{
assert(rc != nullptr);
- ::memcpy(rc, m_authRC, P25_AUTH_RAND_CHLNG_LENGTH_BYTES);
+ ::memcpy(rc, m_authRC, AUTH_RAND_CHLNG_LENGTH_BYTES);
}
// ---------------------------------------------------------------------------
@@ -168,13 +169,13 @@ void MBT_ISP_AUTH_RESP_M::copy(const MBT_ISP_AUTH_RESP_M& data)
delete[] m_authRes;
}
- m_authRes = new uint8_t[P25_AUTH_RES_LENGTH_BYTES];
- ::memcpy(m_authRes, data.m_authRes, P25_AUTH_RES_LENGTH_BYTES);
+ m_authRes = new uint8_t[AUTH_RES_LENGTH_BYTES];
+ ::memcpy(m_authRes, data.m_authRes, AUTH_RES_LENGTH_BYTES);
if (m_authRC != nullptr) {
delete[] m_authRC;
}
- m_authRC = new uint8_t[P25_AUTH_RAND_CHLNG_LENGTH_BYTES];
- ::memcpy(m_authRC, data.m_authRC, P25_AUTH_RAND_CHLNG_LENGTH_BYTES);
+ m_authRC = new uint8_t[AUTH_RAND_CHLNG_LENGTH_BYTES];
+ ::memcpy(m_authRC, data.m_authRC, AUTH_RAND_CHLNG_LENGTH_BYTES);
}
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_ISP_AUTH_SU_DMD.cpp b/src/common/p25/lc/tsbk/mbt/MBT_ISP_AUTH_SU_DMD.cpp
index 2d17e68f..c0c2f9c3 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_ISP_AUTH_SU_DMD.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_ISP_AUTH_SU_DMD.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_ISP_AUTH_SU_DMD.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
MBT_ISP_AUTH_SU_DMD::MBT_ISP_AUTH_SU_DMD() : AMBT()
{
- m_lco = TSBK_IOSP_GRP_AFF;
+ m_lco = TSBKO::IOSP_GRP_AFF;
}
///
@@ -78,5 +79,5 @@ void MBT_ISP_AUTH_SU_DMD::encodeMBT(data::DataHeader& dataHeader, uint8_t* pduUs
///
std::string MBT_ISP_AUTH_SU_DMD::toString(bool isp)
{
- return std::string("TSBK_ISP_AUTH_SU_DMD (Authentication SU Demand)");
+ return std::string("TSBKO, ISP_AUTH_SU_DMD (Authentication SU Demand)");
}
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_ISP_CAN_SRV_REQ.cpp b/src/common/p25/lc/tsbk/mbt/MBT_ISP_CAN_SRV_REQ.cpp
index d5d61c5c..5d250bfe 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_ISP_CAN_SRV_REQ.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_ISP_CAN_SRV_REQ.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_ISP_CAN_SRV_REQ.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
MBT_ISP_CAN_SRV_REQ::MBT_ISP_CAN_SRV_REQ() : AMBT()
{
- m_lco = TSBK_ISP_CAN_SRV_REQ;
+ m_lco = TSBKO::ISP_CAN_SRV_REQ;
}
///
@@ -83,5 +84,5 @@ void MBT_ISP_CAN_SRV_REQ::encodeMBT(data::DataHeader& dataHeader, uint8_t* pduUs
///
std::string MBT_ISP_CAN_SRV_REQ::toString(bool isp)
{
- return std::string("TSBK_ISP_CAN_SRV_REQ (Cancel Service Request)");
+ return std::string("TSBKO, ISP_CAN_SRV_REQ (Cancel Service Request)");
}
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_ISP_GRP_AFF_Q_RSP.cpp b/src/common/p25/lc/tsbk/mbt/MBT_ISP_GRP_AFF_Q_RSP.cpp
index 728d22d9..7723d269 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_ISP_GRP_AFF_Q_RSP.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_ISP_GRP_AFF_Q_RSP.cpp
@@ -13,9 +13,10 @@
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_ISP_GRP_AFF_Q_RSP.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
MBT_ISP_GRP_AFF_Q_RSP::MBT_ISP_GRP_AFF_Q_RSP() : AMBT()
{
- m_lco = TSBK_ISP_GRP_AFF_Q_RSP;
+ m_lco = TSBKO::ISP_GRP_AFF_Q_RSP;
}
///
@@ -79,5 +80,5 @@ void MBT_ISP_GRP_AFF_Q_RSP::encodeMBT(data::DataHeader& dataHeader, uint8_t* pdu
///
std::string MBT_ISP_GRP_AFF_Q_RSP::toString(bool isp)
{
- return std::string("TSBK_ISP_GRP_AFF_Q_RSP (Group Affiliation Query Response)");
+ return std::string("TSBKO, ISP_GRP_AFF_Q_RSP (Group Affiliation Query Response)");
}
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_OSP_ADJ_STS_BCAST.cpp b/src/common/p25/lc/tsbk/mbt/MBT_OSP_ADJ_STS_BCAST.cpp
index 983674cc..8bece086 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_OSP_ADJ_STS_BCAST.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_OSP_ADJ_STS_BCAST.cpp
@@ -7,16 +7,17 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_OSP_ADJ_STS_BCAST.h"
#include "Log.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,15 +29,15 @@ using namespace p25;
/// Initializes a new instance of the MBT_OSP_ADJ_STS_BCAST class.
///
MBT_OSP_ADJ_STS_BCAST::MBT_OSP_ADJ_STS_BCAST() : AMBT(),
- m_adjCFVA(P25_CFVA_FAILURE),
+ m_adjCFVA(CFVA::FAILURE),
m_adjSysId(0U),
m_adjRfssId(0U),
m_adjSiteId(0U),
m_adjChannelId(0U),
m_adjChannelNo(0U),
- m_adjServiceClass(P25_SVC_CLS_INVALID)
+ m_adjServiceClass(ServiceClass::INVALID)
{
- m_lco = TSBK_OSP_ADJ_STS_BCAST;
+ m_lco = TSBKO::OSP_ADJ_STS_BCAST;
}
///
@@ -105,7 +106,7 @@ void MBT_OSP_ADJ_STS_BCAST::encodeMBT(data::DataHeader& dataHeader, uint8_t* pdu
///
std::string MBT_OSP_ADJ_STS_BCAST::toString(bool isp)
{
- return std::string("TSBK_OSP_ADJ_STS_BCAST (Adjacent Site Status Broadcast - Explicit)");
+ return std::string("TSBKO, OSP_ADJ_STS_BCAST (Adjacent Site Status Broadcast - Explicit)");
}
// ---------------------------------------------------------------------------
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_OSP_AUTH_DMD.cpp b/src/common/p25/lc/tsbk/mbt/MBT_OSP_AUTH_DMD.cpp
index 22106fec..7caac41f 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_OSP_AUTH_DMD.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_OSP_AUTH_DMD.cpp
@@ -7,16 +7,17 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_OSP_AUTH_DMD.h"
#include "Utils.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -29,12 +30,12 @@ using namespace p25;
///
MBT_OSP_AUTH_DMD::MBT_OSP_AUTH_DMD() : AMBT()
{
- m_lco = TSBK_OSP_AUTH_DMD;
+ m_lco = TSBKO::OSP_AUTH_DMD;
- m_authRS = new uint8_t[P25_AUTH_RAND_SEED_LENGTH_BYTES];
- ::memset(m_authRS, 0x00U, P25_AUTH_RAND_SEED_LENGTH_BYTES);
- m_authRC = new uint8_t[P25_AUTH_RAND_CHLNG_LENGTH_BYTES];
- ::memset(m_authRC, 0x00U, P25_AUTH_RAND_CHLNG_LENGTH_BYTES);
+ m_authRS = new uint8_t[AUTH_RAND_SEED_LENGTH_BYTES];
+ ::memset(m_authRS, 0x00U, AUTH_RAND_SEED_LENGTH_BYTES);
+ m_authRC = new uint8_t[AUTH_RAND_CHLNG_LENGTH_BYTES];
+ ::memset(m_authRC, 0x00U, AUTH_RAND_CHLNG_LENGTH_BYTES);
}
///
@@ -117,7 +118,7 @@ void MBT_OSP_AUTH_DMD::encodeMBT(data::DataHeader& dataHeader, uint8_t* pduUserD
///
std::string MBT_OSP_AUTH_DMD::toString(bool isp)
{
- return std::string("TSBK_OSP_AUTH_DMD (Authentication Demand)");
+ return std::string("TSBKO, OSP_AUTH_DMD (Authentication Demand)");
}
/// Sets the authentication random seed.
@@ -126,7 +127,7 @@ void MBT_OSP_AUTH_DMD::setAuthRS(const uint8_t* rs)
{
assert(rs != nullptr);
- ::memcpy(m_authRS, rs, P25_AUTH_RAND_SEED_LENGTH_BYTES);
+ ::memcpy(m_authRS, rs, AUTH_RAND_SEED_LENGTH_BYTES);
}
/// Gets the authentication random seed.
@@ -135,7 +136,7 @@ void MBT_OSP_AUTH_DMD::getAuthRS(uint8_t* rs) const
{
assert(rs != nullptr);
- ::memcpy(rs, m_authRS, P25_AUTH_RAND_SEED_LENGTH_BYTES);
+ ::memcpy(rs, m_authRS, AUTH_RAND_SEED_LENGTH_BYTES);
}
/// Sets the authentication random challenge.
@@ -144,7 +145,7 @@ void MBT_OSP_AUTH_DMD::setAuthRC(const uint8_t* rc)
{
assert(rc != nullptr);
- ::memcpy(m_authRC, rc, P25_AUTH_RAND_CHLNG_LENGTH_BYTES);
+ ::memcpy(m_authRC, rc, AUTH_RAND_CHLNG_LENGTH_BYTES);
}
/// Gets the authentication random challenge.
@@ -153,7 +154,7 @@ void MBT_OSP_AUTH_DMD::getAuthRC(uint8_t* rc) const
{
assert(rc != nullptr);
- ::memcpy(rc, m_authRC, P25_AUTH_RAND_CHLNG_LENGTH_BYTES);
+ ::memcpy(rc, m_authRC, AUTH_RAND_CHLNG_LENGTH_BYTES);
}
// ---------------------------------------------------------------------------
@@ -172,13 +173,13 @@ void MBT_OSP_AUTH_DMD::copy(const MBT_OSP_AUTH_DMD& data)
delete[] m_authRS;
}
- m_authRS = new uint8_t[P25_AUTH_RAND_SEED_LENGTH_BYTES];
- ::memcpy(m_authRS, data.m_authRS, P25_AUTH_RAND_SEED_LENGTH_BYTES);
+ m_authRS = new uint8_t[AUTH_RAND_SEED_LENGTH_BYTES];
+ ::memcpy(m_authRS, data.m_authRS, AUTH_RAND_SEED_LENGTH_BYTES);
if (m_authRC != nullptr) {
delete[] m_authRC;
}
- m_authRC = new uint8_t[P25_AUTH_RAND_CHLNG_LENGTH_BYTES];
- ::memcpy(m_authRC, data.m_authRC, P25_AUTH_RAND_CHLNG_LENGTH_BYTES);
+ m_authRC = new uint8_t[AUTH_RAND_CHLNG_LENGTH_BYTES];
+ ::memcpy(m_authRC, data.m_authRC, AUTH_RAND_CHLNG_LENGTH_BYTES);
}
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_OSP_NET_STS_BCAST.cpp b/src/common/p25/lc/tsbk/mbt/MBT_OSP_NET_STS_BCAST.cpp
index 17409fc0..89d292c4 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_OSP_NET_STS_BCAST.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_OSP_NET_STS_BCAST.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_OSP_NET_STS_BCAST.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
MBT_OSP_NET_STS_BCAST::MBT_OSP_NET_STS_BCAST() : AMBT()
{
- m_lco = TSBK_OSP_NET_STS_BCAST;
+ m_lco = TSBKO::OSP_NET_STS_BCAST;
}
///
@@ -82,5 +83,5 @@ void MBT_OSP_NET_STS_BCAST::encodeMBT(data::DataHeader& dataHeader, uint8_t* pdu
///
std::string MBT_OSP_NET_STS_BCAST::toString(bool isp)
{
- return std::string("TSBK_OSP_NET_STS_BCAST (Network Status Broadcast - Explicit)");
+ return std::string("TSBKO, OSP_NET_STS_BCAST (Network Status Broadcast - Explicit)");
}
diff --git a/src/common/p25/lc/tsbk/mbt/MBT_OSP_RFSS_STS_BCAST.cpp b/src/common/p25/lc/tsbk/mbt/MBT_OSP_RFSS_STS_BCAST.cpp
index 0d73ebf4..8bc2baaf 100644
--- a/src/common/p25/lc/tsbk/mbt/MBT_OSP_RFSS_STS_BCAST.cpp
+++ b/src/common/p25/lc/tsbk/mbt/MBT_OSP_RFSS_STS_BCAST.cpp
@@ -7,15 +7,16 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/mbt/MBT_OSP_RFSS_STS_BCAST.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -28,7 +29,7 @@ using namespace p25;
///
MBT_OSP_RFSS_STS_BCAST::MBT_OSP_RFSS_STS_BCAST() : AMBT()
{
- m_lco = TSBK_OSP_RFSS_STS_BCAST;
+ m_lco = TSBKO::OSP_RFSS_STS_BCAST;
}
///
@@ -84,5 +85,5 @@ void MBT_OSP_RFSS_STS_BCAST::encodeMBT(data::DataHeader& dataHeader, uint8_t* pd
///
std::string MBT_OSP_RFSS_STS_BCAST::toString(bool isp)
{
- return std::string("TSBK_OSP_RFSS_STS_BCAST (RFSS Status Broadcast)");
+ return std::string("TSBKO, OSP_RFSS_STS_BCAST (RFSS Status Broadcast)");
}
diff --git a/src/dfsi/frames/BlockHeader.cpp b/src/dfsi/frames/BlockHeader.cpp
index 313a0d2b..7bf30d4c 100644
--- a/src/dfsi/frames/BlockHeader.cpp
+++ b/src/dfsi/frames/BlockHeader.cpp
@@ -32,7 +32,7 @@ using namespace p25::dfsi;
///
BlockHeader::BlockHeader() :
m_payloadType(false),
- m_blockLength(UNDEFINED)
+ m_blockLength(BlockType::UNDEFINED)
{
/* stub */
}
@@ -44,7 +44,7 @@ BlockHeader::BlockHeader() :
///
BlockHeader::BlockHeader(uint8_t* data, bool verbose) :
m_payloadType(false),
- m_blockLength(UNDEFINED)
+ m_blockLength(BlockType::UNDEFINED)
{
decode(data, verbose);
}
@@ -68,7 +68,7 @@ bool BlockHeader::decode(const uint8_t* data, bool verbose)
value = (value << 8) + data[3U];
m_payloadType = (data[0U] & 0x80U) == 0x80U; // Payload Type
- m_blockType = (BlockType)(data[0U] & 0x7FU); // Block Type
+ m_blockType = (BlockType::E)(data[0U] & 0x7FU); // Block Type
if (verbose) {
m_timestampOffset = (uint32_t)((value >> 10) & 0x3FFU); // Timestamp Offset
diff --git a/src/dfsi/frames/BlockHeader.h b/src/dfsi/frames/BlockHeader.h
index cdab1824..cb1ea3a0 100644
--- a/src/dfsi/frames/BlockHeader.h
+++ b/src/dfsi/frames/BlockHeader.h
@@ -63,7 +63,7 @@ namespace p25
/// This simple boolean marks this header as either IANA standard, or profile specific.
__PROPERTY(bool, payloadType, PayloadType);
/// Block type.
- __PROPERTY(BlockType, blockType, BlockType);
+ __PROPERTY(BlockType::E, blockType, BlockType);
/// Timestamp Offset.
__PROPERTY(uint16_t, timestampOffset, TimestampOffset);
/// Block length.
diff --git a/src/dfsi/frames/FrameDefines.h b/src/dfsi/frames/FrameDefines.h
index ba36afbe..4318f5c1 100644
--- a/src/dfsi/frames/FrameDefines.h
+++ b/src/dfsi/frames/FrameDefines.h
@@ -28,131 +28,118 @@ namespace p25
///
/// Control Service Message.
///
- enum FSCMessageType {
- ///
- /// Establish connection with FSS.
- ///
- FSC_CONNECT = 0,
-
- ///
- /// Heartbeat/Connectivity Maintenance.
- ///
- FSC_HEARTBEAT = 1,
- ///
- /// Control Service Ack.
- ///
- FSC_ACK = 2,
-
- ///
- /// Detach Control Service.
- ///
- FSC_DISCONNECT = 9,
-
- ///
- /// Invalid Control Message.
- ///
- FSC_INVALID = 127,
- };
+ namespace FSCMessageType {
+ // FSC Control Service Message Enumeration
+ enum E : uint8_t {
+ FSC_CONNECT = 0, // Establish connection with FSS.
+ FSC_HEARTBEAT = 1, // Heartbeat/Connectivity Maintenance.
+ FSC_ACK = 2, // Control Service Ack.
+
+ FSC_DISCONNECT = 9, // Detach Control Service.
+
+ FSC_INVALID = 127, // Invalid Control Message.
+ };
+ }
///
/// ACK/NAK Codes
///
- enum FSCAckResponseCode {
- ///
- /// Acknowledgement.
- ///
- CONTROL_ACK = 0,
- ///
- /// Unspecified Negative Acknowledgement.
- ///
- CONTROL_NAK = 1,
- ///
- /// Server is connected to some other host.
- ///
- CONTROL_NAK_CONNECTED = 2,
- ///
- /// Unsupported Manufactuerer Message.
- ///
- CONTROL_NAK_M_UNSUPP = 3,
- ///
- /// Unsupported Message Version.
- ///
- CONTROL_NAK_V_UNSUPP = 4,
- ///
- /// Unsupported Function.
- ///
- CONTROL_NAK_F_UNSUPP = 5,
- ///
- /// Bad / Unsupported Command Parameters.
- ///
- CONTROL_NAK_PARMS = 6,
- ///
- /// FSS is currently busy with a function.
- ///
- CONTROL_NAK_BUSY = 7
- };
+ namespace FSCAckResponseCode {
+ // FSC ACK/NAK Code Enumeration
+ enum E : uint8_t {
+ CONTROL_ACK = 0, // Acknowledgement.
+ CONTROL_NAK = 1, // Unspecified Negative Acknowledgement.
+ CONTROL_NAK_CONNECTED = 2, // Server is connected to some other host.
+ CONTROL_NAK_M_UNSUPP = 3, // Unsupported Manufactuerer Message.
+ CONTROL_NAK_V_UNSUPP = 4, // Unsupported Message Version.
+ CONTROL_NAK_F_UNSUPP = 5, // Unsupported Function.
+ CONTROL_NAK_PARMS = 6, // Bad / Unsupported Command Parameters.
+ CONTROL_NAK_BUSY = 7 // FSS is currently busy with a function.
+ };
+ }
///
/// DFSI Block Types
///
- enum BlockType {
- FULL_RATE_VOICE = 0,
+ namespace BlockType {
+ // DFSI Block Types Enumeration
+ enum E : uint8_t {
+ FULL_RATE_VOICE = 0, //
- VOICE_HEADER_P1 = 6,
- VOICE_HEADER_P2 = 7,
+ VOICE_HEADER_P1 = 6, //
+ VOICE_HEADER_P2 = 7, //
- START_OF_STREAM = 9,
- END_OF_STREAM = 10,
+ START_OF_STREAM = 9, //
+ END_OF_STREAM = 10, //
- UNDEFINED = 127
- };
+ UNDEFINED = 127 //
+ };
+ }
///
///
///
- enum RTFlag {
- ENABLED = 0x02U,
- DISABLED = 0x04U
- };
+ namespace RTFlag {
+ //
+ enum E : uint8_t {
+ ENABLED = 0x02U, //
+ DISABLED = 0x04U //
+ };
+ }
///
///
///
- enum StartStopFlag {
- START = 0x0CU,
- STOP = 0x25U
- };
+ namespace StartStopFlag {
+ //
+ enum E : uint8_t {
+ START = 0x0CU, //
+ STOP = 0x25U //
+ };
+ }
///
///
///
- enum StreamTypeFlag {
- VOICE = 0x0BU
- };
+ namespace StreamTypeFlag {
+ //
+ enum E : uint8_t {
+ VOICE = 0x0BU //
+ };
+ }
///
///
///
- enum RssiValidityFlag {
- INVALID = 0x00U,
- VALID = 0x1A
- };
+ namespace RssiValidityFlag {
+ //
+ enum E : uint8_t {
+ INVALID = 0x00U, //
+ VALID = 0x1A //
+ };
+ }
///
///
///
- enum SourceFlag {
- SOURCE_DIU = 0x00U,
- SOURCE_QUANTAR = 0x02U
- };
+ namespace SourceFlag {
+ //
+ enum E : uint8_t {
+ DIU = 0x00U, //
+ QUANTAR = 0x02U //
+ };
+ }
///
///
///
- enum ICWFlag {
- ICW_DIU = 0x00U,
- ICW_QUANTAR = 0x1B
- };
+ namespace ICWFlag {
+ //
+ enum E : uint8_t {
+ DIU = 0x00U, //
+ QUANTAR = 0x1B //
+ };
+ }
} // namespace dfsi
} // namespace p25
diff --git a/src/dfsi/frames/FullRateVoice.cpp b/src/dfsi/frames/FullRateVoice.cpp
index 81f21f6f..c6b0e295 100644
--- a/src/dfsi/frames/FullRateVoice.cpp
+++ b/src/dfsi/frames/FullRateVoice.cpp
@@ -22,6 +22,7 @@
using namespace p25;
using namespace p25::dfsi;
+using namespace p25::dfsi::defines;
// ---------------------------------------------------------------------------
// Public Class Members
@@ -33,7 +34,7 @@ using namespace p25::dfsi;
FullRateVoice::FullRateVoice() :
imbeData(nullptr),
additionalData(nullptr),
- m_frameType(P25_DFSI_LDU1_VOICE1),
+ m_frameType(DFSIFrameType::LDU1_VOICE1),
m_totalErrors(0U),
m_muteFrame(false),
m_lostFrame(false),
@@ -51,7 +52,7 @@ FullRateVoice::FullRateVoice() :
FullRateVoice::FullRateVoice(uint8_t* data) :
imbeData(nullptr),
additionalData(nullptr),
- m_frameType(P25_DFSI_LDU1_VOICE1),
+ m_frameType(DFSIFrameType::LDU1_VOICE1),
m_totalErrors(0U),
m_muteFrame(false),
m_lostFrame(false),
@@ -86,7 +87,7 @@ bool FullRateVoice::decode(const uint8_t* data)
imbeData = new uint8_t[IMBE_BUF_LEN];
::memset(imbeData, 0x00U, IMBE_BUF_LEN);
- m_frameType = data[0U]; // Frame Type
+ m_frameType = (DFSIFrameType::E)data[0U]; // Frame Type
::memcpy(imbeData, data + 1U, IMBE_BUF_LEN); // IMBE
m_totalErrors = (uint8_t)((data[12U] >> 5) & 0x07U); // Total Errors
@@ -155,8 +156,8 @@ void FullRateVoice::encode(uint8_t* data)
///
bool FullRateVoice::isVoice3thru8()
{
- if ( (m_frameType == P25_DFSI_LDU1_VOICE3) || (m_frameType == P25_DFSI_LDU1_VOICE4) || (m_frameType == P25_DFSI_LDU1_VOICE5) ||
- (m_frameType == P25_DFSI_LDU1_VOICE6) || (m_frameType == P25_DFSI_LDU1_VOICE7) || (m_frameType == P25_DFSI_LDU1_VOICE8) ) {
+ if ( (m_frameType == DFSIFrameType::LDU1_VOICE3) || (m_frameType == DFSIFrameType::LDU1_VOICE4) || (m_frameType == DFSIFrameType::LDU1_VOICE5) ||
+ (m_frameType == DFSIFrameType::LDU1_VOICE6) || (m_frameType == DFSIFrameType::LDU1_VOICE7) || (m_frameType == DFSIFrameType::LDU1_VOICE8) ) {
return true;
} else {
return false;
@@ -169,8 +170,8 @@ bool FullRateVoice::isVoice3thru8()
///
bool FullRateVoice::isVoice12thru17()
{
- if ( (m_frameType == P25_DFSI_LDU2_VOICE12) || (m_frameType == P25_DFSI_LDU2_VOICE13) || (m_frameType == P25_DFSI_LDU2_VOICE14) ||
- (m_frameType == P25_DFSI_LDU2_VOICE15) || (m_frameType == P25_DFSI_LDU2_VOICE16) || (m_frameType == P25_DFSI_LDU2_VOICE17) ) {
+ if ( (m_frameType == DFSIFrameType::LDU2_VOICE12) || (m_frameType == DFSIFrameType::LDU2_VOICE13) || (m_frameType == DFSIFrameType::LDU2_VOICE14) ||
+ (m_frameType == DFSIFrameType::LDU2_VOICE15) || (m_frameType == DFSIFrameType::LDU2_VOICE16) || (m_frameType == DFSIFrameType::LDU2_VOICE17) ) {
return true;
} else {
return false;
@@ -183,7 +184,7 @@ bool FullRateVoice::isVoice12thru17()
///
bool FullRateVoice::isVoice9or10()
{
- if ( (m_frameType == P25_DFSI_LDU1_VOICE9) || (m_frameType == P25_DFSI_LDU2_VOICE10) ) {
+ if ( (m_frameType == DFSIFrameType::LDU1_VOICE9) || (m_frameType == DFSIFrameType::LDU2_VOICE10) ) {
return true;
} else {
return false;
diff --git a/src/dfsi/frames/FullRateVoice.h b/src/dfsi/frames/FullRateVoice.h
index e662851d..050d1253 100644
--- a/src/dfsi/frames/FullRateVoice.h
+++ b/src/dfsi/frames/FullRateVoice.h
@@ -16,6 +16,7 @@
#include "Defines.h"
#include "common/Defines.h"
+#include "common/p25/dfsi/DFSIDefines.h"
#include "common/Log.h"
#include "common/Utils.h"
#include "frames/FrameDefines.h"
@@ -189,7 +190,7 @@ namespace p25
uint8_t* additionalData; // ?? - this should probably be private with getters/setters
/// Frame Type.
- __PROPERTY(uint8_t, frameType, FrameType);
+ __PROPERTY(defines::DFSIFrameType::E, frameType, FrameType);
/// Total errors detected in the frame.
__PROPERTY(uint8_t, totalErrors, TotalErrors);
/// Flag indicating the frame should be muted.
diff --git a/src/dfsi/frames/MotFullRateVoice.cpp b/src/dfsi/frames/MotFullRateVoice.cpp
index a3d29c27..108ccfdf 100644
--- a/src/dfsi/frames/MotFullRateVoice.cpp
+++ b/src/dfsi/frames/MotFullRateVoice.cpp
@@ -14,6 +14,7 @@
*/
#include "frames/MotFullRateVoice.h"
+#include "common/p25/P25Defines.h"
#include "common/p25/dfsi/DFSIDefines.h"
#include "common/Utils.h"
#include "common/Log.h"
@@ -22,7 +23,9 @@
#include
using namespace p25;
+using namespace p25::defines;
using namespace p25::dfsi;
+using namespace p25::dfsi::defines;
// ---------------------------------------------------------------------------
// Public Class Members
@@ -34,11 +37,11 @@ using namespace p25::dfsi;
MotFullRateVoice::MotFullRateVoice() :
imbeData(nullptr),
additionalData(nullptr),
- m_frameType(P25_DFSI_LDU1_VOICE1),
- m_source(SOURCE_QUANTAR)
+ m_frameType(DFSIFrameType::LDU1_VOICE1),
+ m_source(SourceFlag::QUANTAR)
{
- imbeData = new uint8_t[IMBE_BUF_LEN];
- ::memset(imbeData, 0x00U, IMBE_BUF_LEN);
+ imbeData = new uint8_t[RAW_IMBE_LENGTH_BYTES];
+ ::memset(imbeData, 0x00U, RAW_IMBE_LENGTH_BYTES);
}
///
@@ -100,18 +103,18 @@ bool MotFullRateVoice::decode(const uint8_t* data, bool shortened)
if (imbeData != nullptr)
delete imbeData;
- imbeData = new uint8_t[IMBE_BUF_LEN];
- ::memset(imbeData, 0x00U, IMBE_BUF_LEN);
+ imbeData = new uint8_t[RAW_IMBE_LENGTH_BYTES];
+ ::memset(imbeData, 0x00U, RAW_IMBE_LENGTH_BYTES);
- m_frameType = data[0U];
+ m_frameType = (DFSIFrameType::E)data[0U];
if (isVoice2or11()) {
shortened = true;
}
if (shortened) {
- ::memcpy(imbeData, data + 1U, IMBE_BUF_LEN);
- m_source = (SourceFlag)data[12U];
+ ::memcpy(imbeData, data + 1U, RAW_IMBE_LENGTH_BYTES);
+ m_source = (SourceFlag::E)data[12U];
// Forgot to set this originally and left additionalData uninitialized, whoops!
additionalData = nullptr;
} else {
@@ -128,9 +131,9 @@ bool MotFullRateVoice::decode(const uint8_t* data, bool shortened)
::memcpy(additionalData, data + 1U, ADDITIONAL_LENGTH);
// copy IMBE data based on our imbe start position
- ::memcpy(imbeData, data + imbeStart, IMBE_BUF_LEN);
+ ::memcpy(imbeData, data + imbeStart, RAW_IMBE_LENGTH_BYTES);
- m_source = (SourceFlag)data[IMBE_BUF_LEN + imbeStart];
+ m_source = (SourceFlag::E)data[RAW_IMBE_LENGTH_BYTES + imbeStart];
}
return true;
@@ -154,7 +157,7 @@ void MotFullRateVoice::encode(uint8_t* data, bool shortened)
// copy based on shortened frame or not
if (shortened) {
- ::memcpy(data + 1U, imbeData, IMBE_BUF_LEN);
+ ::memcpy(data + 1U, imbeData, RAW_IMBE_LENGTH_BYTES);
data[12U] = (uint8_t)m_source;
}
// if not shortened, our IMBE data start position depends on frame type
@@ -171,7 +174,7 @@ void MotFullRateVoice::encode(uint8_t* data, bool shortened)
}
// Copy rest of data
- ::memcpy(data + imbeStart, imbeData, IMBE_BUF_LEN);
+ ::memcpy(data + imbeStart, imbeData, RAW_IMBE_LENGTH_BYTES);
// Source byte at the end
data[11U + imbeStart] = (uint8_t)m_source;
@@ -188,7 +191,8 @@ void MotFullRateVoice::encode(uint8_t* data, bool shortened)
///
bool MotFullRateVoice::isVoice1or2or10or11()
{
- if ( (m_frameType == P25_DFSI_LDU1_VOICE1) || (m_frameType == P25_DFSI_LDU1_VOICE2) || (m_frameType == P25_DFSI_LDU2_VOICE10) || (m_frameType == P25_DFSI_LDU2_VOICE11) ) {
+ if ( (m_frameType == DFSIFrameType::LDU1_VOICE1) || (m_frameType == DFSIFrameType::LDU1_VOICE2) ||
+ (m_frameType == DFSIFrameType::LDU2_VOICE10) || (m_frameType == DFSIFrameType::LDU2_VOICE11) ) {
return true;
} else {
return false;
@@ -201,7 +205,7 @@ bool MotFullRateVoice::isVoice1or2or10or11()
///
bool MotFullRateVoice::isVoice2or11()
{
- if ( (m_frameType == P25_DFSI_LDU1_VOICE2) || (m_frameType == P25_DFSI_LDU2_VOICE11) ) {
+ if ( (m_frameType == DFSIFrameType::LDU1_VOICE2) || (m_frameType == DFSIFrameType::LDU2_VOICE11) ) {
return true;
} else {
return false;
@@ -214,7 +218,7 @@ bool MotFullRateVoice::isVoice2or11()
///
bool MotFullRateVoice::isVoice9or18()
{
- if ( (m_frameType == P25_DFSI_LDU1_VOICE9) || (m_frameType == P25_DFSI_LDU2_VOICE18) ) {
+ if ( (m_frameType == DFSIFrameType::LDU1_VOICE9) || (m_frameType == DFSIFrameType::LDU2_VOICE18) ) {
return true;
} else {
return false;
diff --git a/src/dfsi/frames/MotFullRateVoice.h b/src/dfsi/frames/MotFullRateVoice.h
index 68b9dbd3..f49052a6 100644
--- a/src/dfsi/frames/MotFullRateVoice.h
+++ b/src/dfsi/frames/MotFullRateVoice.h
@@ -17,6 +17,7 @@
#include "Defines.h"
#include "common/Defines.h"
+#include "common/p25/dfsi/DFSIDefines.h"
#include "common/Log.h"
#include "common/Utils.h"
#include "frames/FrameDefines.h"
@@ -49,7 +50,6 @@ namespace p25
static const uint8_t LENGTH = 17;
static const uint8_t SHORTENED_LENGTH = 13;
static const uint8_t ADDITIONAL_LENGTH = 4;
- static const uint8_t IMBE_BUF_LEN = 11;
/// Initializes a copy instance of the MotFullRateVoice class.
MotFullRateVoice();
@@ -70,9 +70,9 @@ namespace p25
uint8_t* additionalData; // ?? - this should probably be private with getters/setters
/// Frame Type.
- __PROPERTY(uint8_t, frameType, FrameType);
+ __PROPERTY(defines::DFSIFrameType::E, frameType, FrameType);
///
- __PROPERTY(uint8_t, source, Source);
+ __PROPERTY(SourceFlag::E, source, Source);
private:
///
diff --git a/src/dfsi/frames/MotStartOfStream.cpp b/src/dfsi/frames/MotStartOfStream.cpp
index 317a3e14..aad685bc 100644
--- a/src/dfsi/frames/MotStartOfStream.cpp
+++ b/src/dfsi/frames/MotStartOfStream.cpp
@@ -23,6 +23,7 @@
using namespace p25;
using namespace p25::dfsi;
+using namespace p25::dfsi::defines;
// ---------------------------------------------------------------------------
// Public Class Members
@@ -33,9 +34,9 @@ using namespace p25::dfsi;
///
MotStartOfStream::MotStartOfStream() :
m_marker(FIXED_MARKER),
- m_rt(DISABLED),
- m_startStop(START),
- m_streamType(VOICE)
+ m_rt(RTFlag::DISABLED),
+ m_startStop(StartStopFlag::START),
+ m_streamType(StreamTypeFlag::VOICE)
{
/* stub */
}
@@ -46,9 +47,9 @@ MotStartOfStream::MotStartOfStream() :
///
MotStartOfStream::MotStartOfStream(uint8_t* data) :
m_marker(FIXED_MARKER),
- m_rt(DISABLED),
- m_startStop(START),
- m_streamType(VOICE)
+ m_rt(RTFlag::DISABLED),
+ m_startStop(StartStopFlag::START),
+ m_streamType(StreamTypeFlag::VOICE)
{
decode(data);
}
@@ -62,9 +63,9 @@ bool MotStartOfStream::decode(const uint8_t* data)
{
assert(data != nullptr);
- m_rt = (RTFlag)data[2U];
- m_startStop = (StartStopFlag)data[3U];
- m_streamType = (StreamTypeFlag)data[4U];
+ m_rt = (RTFlag::E)data[2U];
+ m_startStop = (StartStopFlag::E)data[3U];
+ m_streamType = (StreamTypeFlag::E)data[4U];
return true;
}
@@ -77,9 +78,9 @@ void MotStartOfStream::encode(uint8_t* data)
{
assert(data != nullptr);
- data[0U] = P25_DFSI_MOT_START_STOP;
+ data[0U] = DFSIFrameType::MOT_START_STOP;
data[1U] = FIXED_MARKER;
- data[2U] = (uint8_t)m_rt;
- data[3U] = (uint8_t)m_startStop;
- data[4U] = (uint8_t)m_streamType;
+ data[2U] = m_rt;
+ data[3U] = m_startStop;
+ data[4U] = m_streamType;
}
diff --git a/src/dfsi/frames/MotStartOfStream.h b/src/dfsi/frames/MotStartOfStream.h
index a846f33b..bdc05e98 100644
--- a/src/dfsi/frames/MotStartOfStream.h
+++ b/src/dfsi/frames/MotStartOfStream.h
@@ -59,11 +59,11 @@ namespace p25
///
__PROPERTY(uint8_t, marker, Marker);
///
- __PROPERTY(RTFlag, rt, RT);
+ __PROPERTY(RTFlag::E, rt, RT);
///
- __PROPERTY(StartStopFlag, startStop, StartStop);
+ __PROPERTY(StartStopFlag::E, startStop, StartStop);
///
- __PROPERTY(StreamTypeFlag, streamType, StreamType);
+ __PROPERTY(StreamTypeFlag::E, streamType, StreamType);
};
} // namespace dfsi
} // namespace p25
diff --git a/src/dfsi/frames/MotStartVoiceFrame.cpp b/src/dfsi/frames/MotStartVoiceFrame.cpp
index c4a1afb4..fba1d42f 100644
--- a/src/dfsi/frames/MotStartVoiceFrame.cpp
+++ b/src/dfsi/frames/MotStartVoiceFrame.cpp
@@ -23,6 +23,7 @@
using namespace p25;
using namespace p25::dfsi;
+using namespace p25::dfsi::defines;
// ---------------------------------------------------------------------------
// Public Class Members
@@ -34,9 +35,9 @@ using namespace p25::dfsi;
MotStartVoiceFrame::MotStartVoiceFrame() :
startOfStream(nullptr),
fullRateVoice(nullptr),
- m_icw(ICW_DIU),
+ m_icw(ICWFlag::DIU),
m_rssi(0U),
- m_rssiValidity(INVALID),
+ m_rssiValidity(RssiValidityFlag::INVALID),
m_nRssi(0U),
m_adjMM(0U)
{
@@ -51,9 +52,9 @@ MotStartVoiceFrame::MotStartVoiceFrame() :
MotStartVoiceFrame::MotStartVoiceFrame(uint8_t* data) :
startOfStream(nullptr),
fullRateVoice(nullptr),
- m_icw(ICW_DIU),
+ m_icw(ICWFlag::DIU),
m_rssi(0U),
- m_rssiValidity(INVALID),
+ m_rssiValidity(RssiValidityFlag::INVALID),
m_nRssi(0U),
m_adjMM(0U)
{
@@ -105,9 +106,9 @@ bool MotStartVoiceFrame::decode(const uint8_t* data)
fullRateVoice->decode(voiceBuffer, true);
// get rest of data
- m_icw = (ICWFlag)data[5U];
+ m_icw = (ICWFlag::E)data[5U];
m_rssi = data[6U];
- m_rssiValidity = (RssiValidityFlag)data[7U];
+ m_rssiValidity = (RssiValidityFlag::E)data[7U];
m_nRssi = data[8U];
m_adjMM = data[9U];
@@ -143,9 +144,9 @@ void MotStartVoiceFrame::encode(uint8_t* data)
}
// Copy the rest
- data[5U] = (uint8_t)m_icw;
+ data[5U] = m_icw;
data[6U] = m_rssi;
- data[7U] = (uint8_t)m_rssiValidity;
+ data[7U] = m_rssiValidity;
data[8U] = m_nRssi;
data[9U] = m_adjMM;
}
diff --git a/src/dfsi/frames/MotStartVoiceFrame.h b/src/dfsi/frames/MotStartVoiceFrame.h
index d4a770c5..fc183b2d 100644
--- a/src/dfsi/frames/MotStartVoiceFrame.h
+++ b/src/dfsi/frames/MotStartVoiceFrame.h
@@ -69,11 +69,11 @@ namespace p25
MotFullRateVoice* fullRateVoice; // ?? - this should probably be private with getters/setters
///
- __PROPERTY(ICWFlag, icw, ICW);
+ __PROPERTY(ICWFlag::E, icw, ICW);
///
__PROPERTY(uint8_t, rssi, RSSI);
///
- __PROPERTY(RssiValidityFlag, rssiValidity, RSSIValidity);
+ __PROPERTY(RssiValidityFlag::E, rssiValidity, RSSIValidity);
///
__PROPERTY(uint8_t, nRssi, NRSSI);
///
diff --git a/src/dfsi/frames/MotVoiceHeader1.cpp b/src/dfsi/frames/MotVoiceHeader1.cpp
index 048c140c..4177ba5b 100644
--- a/src/dfsi/frames/MotVoiceHeader1.cpp
+++ b/src/dfsi/frames/MotVoiceHeader1.cpp
@@ -23,6 +23,7 @@
using namespace p25;
using namespace p25::dfsi;
+using namespace p25::dfsi::defines;
// ---------------------------------------------------------------------------
// Public Class Members
@@ -34,9 +35,9 @@ using namespace p25::dfsi;
MotVoiceHeader1::MotVoiceHeader1() :
header(nullptr),
startOfStream(nullptr),
- m_icw(ICW_DIU),
+ m_icw(ICWFlag::DIU),
m_rssi(0U),
- m_rssiValidity(INVALID),
+ m_rssiValidity(RssiValidityFlag::INVALID),
m_nRssi(0U)
{
startOfStream = new MotStartOfStream();
@@ -52,9 +53,9 @@ MotVoiceHeader1::MotVoiceHeader1() :
MotVoiceHeader1::MotVoiceHeader1(uint8_t* data) :
header(nullptr),
startOfStream(nullptr),
- m_icw(ICW_DIU),
+ m_icw(ICWFlag::DIU),
m_rssi(0U),
- m_rssiValidity(INVALID),
+ m_rssiValidity(RssiValidityFlag::INVALID),
m_nRssi(0U)
{
decode(data);
@@ -93,9 +94,9 @@ bool MotVoiceHeader1::decode(const uint8_t* data)
startOfStream->decode(buffer);
// decode the other stuff
- m_icw = (ICWFlag)data[5U];
+ m_icw = (ICWFlag::E)data[5U];
m_rssi = data[6U];
- m_rssiValidity = (RssiValidityFlag)data[7U];
+ m_rssiValidity = (RssiValidityFlag::E)data[7U];
m_nRssi = data[8U];
// our header includes the trailing source and check bytes
@@ -117,7 +118,7 @@ void MotVoiceHeader1::encode(uint8_t* data)
assert(data != nullptr);
assert(startOfStream != nullptr);
- data[0U] = P25_DFSI_MOT_VHDR_1;
+ data[0U] = DFSIFrameType::MOT_VHDR_1;
// scope is intentional
{
@@ -129,9 +130,9 @@ void MotVoiceHeader1::encode(uint8_t* data)
::memcpy(data + 1U, buffer + 1U, 4U);
}
- data[5U] = (uint8_t)m_icw;
+ data[5U] = m_icw;
data[6U] = m_rssi;
- data[7U] = (uint8_t)m_rssiValidity;
+ data[7U] = m_rssiValidity;
data[8U] = m_nRssi;
// our header includes the trailing source and check bytes
diff --git a/src/dfsi/frames/MotVoiceHeader1.h b/src/dfsi/frames/MotVoiceHeader1.h
index eacf869c..42442b01 100644
--- a/src/dfsi/frames/MotVoiceHeader1.h
+++ b/src/dfsi/frames/MotVoiceHeader1.h
@@ -73,11 +73,11 @@ namespace p25
MotStartOfStream* startOfStream; // ?? - this should probably be private with getters/setters
///
- __PROPERTY(ICWFlag, icw, ICW);
+ __PROPERTY(ICWFlag::E, icw, ICW);
///
__PROPERTY(uint8_t, rssi, RSSI);
///
- __PROPERTY(RssiValidityFlag, rssiValidity, RSSIValidity);
+ __PROPERTY(RssiValidityFlag::E, rssiValidity, RSSIValidity);
///
__PROPERTY(uint8_t, nRssi, NRSSI);
};
diff --git a/src/dfsi/frames/MotVoiceHeader2.cpp b/src/dfsi/frames/MotVoiceHeader2.cpp
index 75677972..d4fec192 100644
--- a/src/dfsi/frames/MotVoiceHeader2.cpp
+++ b/src/dfsi/frames/MotVoiceHeader2.cpp
@@ -23,6 +23,7 @@
using namespace p25;
using namespace p25::dfsi;
+using namespace p25::dfsi::defines;
// ---------------------------------------------------------------------------
// Public Class Members
@@ -33,7 +34,7 @@ using namespace p25::dfsi;
///
MotVoiceHeader2::MotVoiceHeader2() :
header(nullptr),
- m_source(SOURCE_QUANTAR)
+ m_source(SourceFlag::QUANTAR)
{
header = new uint8_t[HCW_LENGTH];
::memset(header, 0x00U, HCW_LENGTH);
@@ -45,7 +46,7 @@ MotVoiceHeader2::MotVoiceHeader2() :
///
MotVoiceHeader2::MotVoiceHeader2(uint8_t* data) :
header(nullptr),
- m_source(SOURCE_QUANTAR)
+ m_source(SourceFlag::QUANTAR)
{
decode(data);
}
@@ -68,7 +69,7 @@ bool MotVoiceHeader2::decode(const uint8_t* data)
{
assert(data != nullptr);
- m_source = (SourceFlag)data[21];
+ m_source = (SourceFlag::E)data[21];
if (header != nullptr) {
delete[] header;
@@ -89,7 +90,7 @@ void MotVoiceHeader2::encode(uint8_t* data)
{
assert(data != nullptr);
- data[0U] = P25_DFSI_MOT_VHDR_2;
+ data[0U] = DFSIFrameType::MOT_VHDR_2;
if (header != nullptr) {
::memcpy(data + 1U, header, HCW_LENGTH);
diff --git a/src/dfsi/frames/MotVoiceHeader2.h b/src/dfsi/frames/MotVoiceHeader2.h
index 89b921bc..94b5f353 100644
--- a/src/dfsi/frames/MotVoiceHeader2.h
+++ b/src/dfsi/frames/MotVoiceHeader2.h
@@ -68,7 +68,7 @@ namespace p25
uint8_t* header; // ?? - this should probably be a private with getters/setters
///
- __PROPERTY(SourceFlag, source, Source);
+ __PROPERTY(SourceFlag::E, source, Source);
};
} // namespace dfsi
} // namespace p25
diff --git a/src/dfsi/frames/fsc/FSCACK.cpp b/src/dfsi/frames/fsc/FSCACK.cpp
index d64405e3..ba641101 100644
--- a/src/dfsi/frames/fsc/FSCACK.cpp
+++ b/src/dfsi/frames/fsc/FSCACK.cpp
@@ -31,13 +31,13 @@ using namespace p25::dfsi::fsc;
/// Initializes a instance of the FSCACK class.
///
FSCACK::FSCACK() : FSCMessage(),
- m_ackMessageId(FSC_INVALID),
+ m_ackMessageId(FSCMessageType::FSC_INVALID),
m_ackVersion(1U),
m_ackCorrelationTag(0U),
- m_responseCode(CONTROL_ACK),
+ m_responseCode(FSCAckResponseCode::CONTROL_ACK),
m_respLength(0U)
{
- m_messageId = FSC_ACK;
+ m_messageId = FSCMessageType::FSC_ACK;
}
///
@@ -45,10 +45,10 @@ FSCACK::FSCACK() : FSCMessage(),
///
///
FSCACK::FSCACK(uint8_t* data) : FSCMessage(data),
- m_ackMessageId(FSC_INVALID),
+ m_ackMessageId(FSCMessageType::FSC_INVALID),
m_ackVersion(1U),
m_ackCorrelationTag(0U),
- m_responseCode(CONTROL_ACK),
+ m_responseCode(FSCAckResponseCode::CONTROL_ACK),
m_respLength(0U)
{
decode(data);
@@ -64,10 +64,10 @@ bool FSCACK::decode(const uint8_t* data)
assert(data != nullptr);
FSCMessage::decode(data);
- m_ackMessageId = (FSCMessageType)(data[2U]); // Ack Message ID
+ m_ackMessageId = (FSCMessageType::E)(data[2U]); // Ack Message ID
m_ackVersion = data[3U]; // Ack Message Version
m_ackCorrelationTag = data[4U]; // Ack Message Correlation Tag
- m_responseCode = (FSCAckResponseCode)(data[5U]); // Response Code
+ m_responseCode = (FSCAckResponseCode::E)(data[5U]); // Response Code
m_respLength = data[6U]; // Response Data Length
if (m_respLength > 0) {
diff --git a/src/dfsi/frames/fsc/FSCACK.h b/src/dfsi/frames/fsc/FSCACK.h
index f3f963cf..2ea5490f 100644
--- a/src/dfsi/frames/fsc/FSCACK.h
+++ b/src/dfsi/frames/fsc/FSCACK.h
@@ -50,13 +50,13 @@ namespace p25
uint8_t* responseData; // ?? - this should probably be private with getters/setters
/// Acknowledged Message ID.
- __PROPERTY(FSCMessageType, ackMessageId, AckMessageId);
+ __PROPERTY(FSCMessageType::E, ackMessageId, AckMessageId);
/// Acknowledged Message Version.
__READONLY_PROPERTY(uint8_t, ackVersion, AckVersion);
///
__READONLY_PROPERTY(uint8_t, ackCorrelationTag, AckCorrelationTag);
/// Response code.
- __PROPERTY(FSCAckResponseCode, responseCode, ResponseCode);
+ __PROPERTY(FSCAckResponseCode::E, responseCode, ResponseCode);
/// Response Data Length.
__PROPERTY(uint8_t, respLength, ResponseLength);
};
diff --git a/src/dfsi/frames/fsc/FSCConnect.cpp b/src/dfsi/frames/fsc/FSCConnect.cpp
index e9dbd74f..bf2feff8 100644
--- a/src/dfsi/frames/fsc/FSCConnect.cpp
+++ b/src/dfsi/frames/fsc/FSCConnect.cpp
@@ -36,7 +36,7 @@ FSCConnect::FSCConnect() : FSCMessage(),
m_fsHeartbeatPeriod(5U),
m_hostHeartbeatPeriod(5U)
{
- m_messageId = FSC_CONNECT;
+ m_messageId = FSCMessageType::FSC_CONNECT;
}
///
diff --git a/src/dfsi/frames/fsc/FSCDisconnect.cpp b/src/dfsi/frames/fsc/FSCDisconnect.cpp
index d5ae17bb..b23b4b09 100644
--- a/src/dfsi/frames/fsc/FSCDisconnect.cpp
+++ b/src/dfsi/frames/fsc/FSCDisconnect.cpp
@@ -32,7 +32,7 @@ using namespace p25::dfsi::fsc;
///
FSCDisconnect::FSCDisconnect() : FSCMessage()
{
- m_messageId = FSC_DISCONNECT;
+ m_messageId = FSCMessageType::FSC_DISCONNECT;
}
///
diff --git a/src/dfsi/frames/fsc/FSCHeartbeat.cpp b/src/dfsi/frames/fsc/FSCHeartbeat.cpp
index 840fb0a0..c677d43d 100644
--- a/src/dfsi/frames/fsc/FSCHeartbeat.cpp
+++ b/src/dfsi/frames/fsc/FSCHeartbeat.cpp
@@ -32,7 +32,7 @@ using namespace p25::dfsi::fsc;
///
FSCHeartbeat::FSCHeartbeat() : FSCMessage()
{
- m_messageId = FSC_HEARTBEAT;
+ m_messageId = FSCMessageType::FSC_HEARTBEAT;
}
///
diff --git a/src/dfsi/frames/fsc/FSCMessage.cpp b/src/dfsi/frames/fsc/FSCMessage.cpp
index f486e427..b7a0b8d7 100644
--- a/src/dfsi/frames/fsc/FSCMessage.cpp
+++ b/src/dfsi/frames/fsc/FSCMessage.cpp
@@ -31,7 +31,7 @@ using namespace p25::dfsi::fsc;
/// Initializes a instance of the FSCMessage class.
///
FSCMessage::FSCMessage() :
- m_messageId(FSC_INVALID),
+ m_messageId(FSCMessageType::FSC_INVALID),
m_version(1U),
m_correlationTag(0U)
{
@@ -43,7 +43,7 @@ FSCMessage::FSCMessage() :
///
///
FSCMessage::FSCMessage(uint8_t* data) :
- m_messageId(FSC_INVALID),
+ m_messageId(FSCMessageType::FSC_INVALID),
m_version(1U),
m_correlationTag(0U)
{
@@ -59,7 +59,7 @@ bool FSCMessage::decode(const uint8_t* data)
{
assert(data != nullptr);
- m_messageId = (FSCMessageType)(data[0U]); // Message ID
+ m_messageId = (FSCMessageType::E)(data[0U]); // Message ID
m_version = data[1U]; // Message Version
if (m_messageId != FSCMessageType::FSC_HEARTBEAT && m_messageId != FSCMessageType::FSC_ACK)
diff --git a/src/dfsi/frames/fsc/FSCMessage.h b/src/dfsi/frames/fsc/FSCMessage.h
index 0cb07d3d..90d4d265 100644
--- a/src/dfsi/frames/fsc/FSCMessage.h
+++ b/src/dfsi/frames/fsc/FSCMessage.h
@@ -47,7 +47,7 @@ namespace p25
public:
/// Message ID.
- __PROTECTED_PROPERTY(FSCMessageType, messageId, MessageId);
+ __PROTECTED_PROPERTY(FSCMessageType::E, messageId, MessageId);
/// Message Version.
__PROTECTED_READONLY_PROPERTY(uint8_t, version, Version);
///
diff --git a/src/dfsi/network/CallData.cpp b/src/dfsi/network/CallData.cpp
index 186fe1d5..b5298627 100644
--- a/src/dfsi/network/CallData.cpp
+++ b/src/dfsi/network/CallData.cpp
@@ -19,18 +19,19 @@
using namespace network;
using namespace modem;
using namespace p25;
+using namespace p25::defines;
using namespace dfsi;
VoiceCallData::VoiceCallData() :
srcId(0U),
dstId(0U),
lco(0U),
- mfId(P25_MFG_STANDARD),
+ mfId(MFG_STANDARD),
serviceOptions(0U),
lsd1(0U),
lsd2(0U),
mi(),
- algoId(P25_ALGO_UNENCRYPT),
+ algoId(ALGO_UNENCRYPT),
kId(0U),
VHDR1(),
VHDR2(),
@@ -40,7 +41,7 @@ VoiceCallData::VoiceCallData() :
n(0U),
streamId(0U)
{
- mi = new uint8_t[P25_MI_LENGTH_BYTES];
+ mi = new uint8_t[MI_LENGTH_BYTES];
VHDR1 = new uint8_t[MotVoiceHeader1::HCW_LENGTH];
VHDR2 = new uint8_t[MotVoiceHeader2::HCW_LENGTH];
netLDU1 = new uint8_t[9U * 25U];
@@ -62,14 +63,14 @@ void VoiceCallData::resetCallData() {
srcId = 0U;
dstId = 0U;
lco = 0U;
- mfId = P25_MFG_STANDARD;
+ mfId = MFG_STANDARD;
serviceOptions = 0U;
lsd1 = 0U;
lsd2 = 0U;
- ::memset(mi, 0x00U, P25_MI_LENGTH_BYTES);
+ ::memset(mi, 0x00U, MI_LENGTH_BYTES);
- algoId = P25_ALGO_UNENCRYPT;
+ algoId = ALGO_UNENCRYPT;
kId = 0U;
::memset(VHDR1, 0x00U, MotVoiceHeader1::HCW_LENGTH);
diff --git a/src/dfsi/network/DfsiPeerNetwork.cpp b/src/dfsi/network/DfsiPeerNetwork.cpp
index eccd57ad..a5a93e4c 100644
--- a/src/dfsi/network/DfsiPeerNetwork.cpp
+++ b/src/dfsi/network/DfsiPeerNetwork.cpp
@@ -9,6 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2024 Patrick McDonnell, W3AXL
+* Copyright (C) 2024 Bryan Biedenkapp, N2PLL
*
*/
#include "dfsi/Defines.h"
@@ -61,7 +62,7 @@ DfsiPeerNetwork::DfsiPeerNetwork(const std::string& address, uint16_t port, uint
///
///
///
-bool DfsiPeerNetwork::writeP25LDU1(const p25::lc::LC& control, const p25::data::LowSpeedData& lsd, const uint8_t* data, uint8_t frameType)
+bool DfsiPeerNetwork::writeP25LDU1(const p25::lc::LC& control, const p25::data::LowSpeedData& lsd, const uint8_t* data, P25DEF::FrameType::E frameType)
{
if (m_status != NET_STAT_RUNNING && m_status != NET_STAT_MST_RUNNING)
return false;
@@ -187,8 +188,10 @@ bool DfsiPeerNetwork::writeConfig()
///
///
UInt8Array DfsiPeerNetwork::createP25_LDU1Message_Raw(uint32_t& length, const p25::lc::LC& control, const p25::data::LowSpeedData& lsd,
- const uint8_t* data, uint8_t frameType)
+ const uint8_t* data, P25DEF::FrameType::E frameType)
{
+ using namespace p25::dfsi::defines;
+ using namespace p25::defines;
assert(data != nullptr);
p25::dfsi::LC dfsiLC = p25::dfsi::LC(control, lsd);
@@ -197,56 +200,56 @@ UInt8Array DfsiPeerNetwork::createP25_LDU1Message_Raw(uint32_t& length, const p2
::memset(buffer, 0x00U, P25_LDU1_PACKET_LENGTH + PACKET_PAD);
// construct P25 message header
- createP25_MessageHdr(buffer, p25::P25_DUID_LDU1, control, lsd, frameType);
+ createP25_MessageHdr(buffer, DUID::LDU1, control, lsd, frameType);
// pack DFSI data
uint32_t count = MSG_HDR_SIZE;
- uint8_t imbe[p25::P25_RAW_IMBE_LENGTH_BYTES];
+ uint8_t imbe[RAW_IMBE_LENGTH_BYTES];
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE1);
- ::memcpy(imbe, data + 10U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE1);
+ ::memcpy(imbe, data + 10U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU1(buffer + 24U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE2);
- ::memcpy(imbe, data + 26U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE2);
+ ::memcpy(imbe, data + 26U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU1(buffer + 46U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE2_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE2_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE3);
- ::memcpy(imbe, data + 55U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE3);
+ ::memcpy(imbe, data + 55U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU1(buffer + 60U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE3_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE3_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE4);
- ::memcpy(imbe, data + 80U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE4);
+ ::memcpy(imbe, data + 80U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU1(buffer + 77U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE4_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE4_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE5);
- ::memcpy(imbe, data + 105U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE5);
+ ::memcpy(imbe, data + 105U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU1(buffer + 94U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE5_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE5_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE6);
- ::memcpy(imbe, data + 130U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE6);
+ ::memcpy(imbe, data + 130U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU1(buffer + 111U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE6_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE6_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE7);
- ::memcpy(imbe, data + 155U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE7);
+ ::memcpy(imbe, data + 155U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU1(buffer + 128U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE7_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE7_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE8);
- ::memcpy(imbe, data + 180U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE8);
+ ::memcpy(imbe, data + 180U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU1(buffer + 145U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE8_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE8_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU1_VOICE9);
- ::memcpy(imbe, data + 204U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE9);
+ ::memcpy(imbe, data + 204U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU1(buffer + 162U, imbe);
- count += p25::dfsi::P25_DFSI_LDU1_VOICE9_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE9_FRAME_LENGTH_BYTES;
buffer[23U] = count;
@@ -268,6 +271,8 @@ UInt8Array DfsiPeerNetwork::createP25_LDU1Message_Raw(uint32_t& length, const p2
UInt8Array DfsiPeerNetwork::createP25_LDU2Message_Raw(uint32_t& length, const p25::lc::LC& control, const p25::data::LowSpeedData& lsd,
const uint8_t* data)
{
+ using namespace p25::dfsi::defines;
+ using namespace p25::defines;
assert(data != nullptr);
p25::dfsi::LC dfsiLC = p25::dfsi::LC(control, lsd);
@@ -276,56 +281,56 @@ UInt8Array DfsiPeerNetwork::createP25_LDU2Message_Raw(uint32_t& length, const p2
::memset(buffer, 0x00U, P25_LDU2_PACKET_LENGTH + PACKET_PAD);
// construct P25 message header
- createP25_MessageHdr(buffer, p25::P25_DUID_LDU2, control, lsd, p25::P25_FT_DATA_UNIT);
+ createP25_MessageHdr(buffer, DUID::LDU2, control, lsd, FrameType::DATA_UNIT);
// pack DFSI data
uint32_t count = MSG_HDR_SIZE;
- uint8_t imbe[p25::P25_RAW_IMBE_LENGTH_BYTES];
+ uint8_t imbe[RAW_IMBE_LENGTH_BYTES];
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE10);
- ::memcpy(imbe, data + 10U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE10);
+ ::memcpy(imbe, data + 10U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU2(buffer + 24U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE11);
- ::memcpy(imbe, data + 26U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE11);
+ ::memcpy(imbe, data + 26U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU2(buffer + 46U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE11_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE11_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE12);
- ::memcpy(imbe, data + 55U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE12);
+ ::memcpy(imbe, data + 55U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU2(buffer + 60U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE12_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE12_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE13);
- ::memcpy(imbe, data + 80U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE13);
+ ::memcpy(imbe, data + 80U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU2(buffer + 77U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE13_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE13_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE14);
- ::memcpy(imbe, data + 105U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE14);
+ ::memcpy(imbe, data + 105U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU2(buffer + 94U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE14_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE14_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE15);
- ::memcpy(imbe, data + 130U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE15);
+ ::memcpy(imbe, data + 130U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU2(buffer + 111U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE15_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE15_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE16);
- ::memcpy(imbe, data + 155U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE16);
+ ::memcpy(imbe, data + 155U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU2(buffer + 128U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE16_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE16_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE17);
- ::memcpy(imbe, data + 180U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE17);
+ ::memcpy(imbe, data + 180U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU2(buffer + 145U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE17_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE17_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(p25::dfsi::P25_DFSI_LDU2_VOICE18);
- ::memcpy(imbe, data + 204U, p25::P25_RAW_IMBE_LENGTH_BYTES);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE18);
+ ::memcpy(imbe, data + 204U, RAW_IMBE_LENGTH_BYTES);
dfsiLC.encodeLDU2(buffer + 162U, imbe);
- count += p25::dfsi::P25_DFSI_LDU2_VOICE18_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE18_FRAME_LENGTH_BYTES;
buffer[23U] = count;
diff --git a/src/dfsi/network/DfsiPeerNetwork.h b/src/dfsi/network/DfsiPeerNetwork.h
index 68456aad..6a12b34b 100644
--- a/src/dfsi/network/DfsiPeerNetwork.h
+++ b/src/dfsi/network/DfsiPeerNetwork.h
@@ -9,6 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2024 Patrick McDonnell, W3AXL
+* Copyright (C) 2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__DFSI_PEER_NETWORK_H__)
@@ -35,7 +36,7 @@ namespace network
/// Writes P25 LDU1 frame data to the network.
bool writeP25LDU1(const p25::lc::LC& control, const p25::data::LowSpeedData& lsd, const uint8_t* data,
- uint8_t frameType) override;
+ P25DEF::FrameType::E frameType) override;
/// Writes P25 LDU2 frame data to the network.
bool writeP25LDU2(const p25::lc::LC& control, const p25::data::LowSpeedData& lsd, const uint8_t* data) override;
@@ -46,7 +47,7 @@ namespace network
private:
/// Creates an P25 LDU1 frame message.
UInt8Array createP25_LDU1Message_Raw(uint32_t& length, const p25::lc::LC& control, const p25::data::LowSpeedData& lsd,
- const uint8_t* data, uint8_t frameType);
+ const uint8_t* data, P25DEF::FrameType::E frameType);
/// Creates an P25 LDU2 frame message.
UInt8Array createP25_LDU2Message_Raw(uint32_t& length, const p25::lc::LC& control, const p25::data::LowSpeedData& lsd,
const uint8_t* data);
diff --git a/src/dfsi/network/SerialService.cpp b/src/dfsi/network/SerialService.cpp
index 2f5fc9d0..b8633f0c 100644
--- a/src/dfsi/network/SerialService.cpp
+++ b/src/dfsi/network/SerialService.cpp
@@ -21,6 +21,8 @@
using namespace network;
using namespace modem;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::dfsi::defines;
using namespace dfsi;
// ---------------------------------------------------------------------------
@@ -91,7 +93,7 @@ SerialService::SerialService(std::string& portType, const std::string& portName,
}
m_lastIMBE = new uint8_t[11U];
- ::memcpy(m_lastIMBE, P25_NULL_IMBE, 11U);
+ ::memcpy(m_lastIMBE, NULL_IMBE, 11U);
m_msgBuffer = new uint8_t[BUFFER_LENGTH];
}
@@ -277,7 +279,7 @@ void SerialService::processP25FromNet(UInt8Array p25Buffer, uint32_t length)
//bool unitToUnit = (p25Buffer[14U] & 0x01U) == 0x01U;
// Decode network header
- uint8_t duid = p25Buffer[22U];
+ DUID::E duid = (DUID::E)p25Buffer[22U];
uint8_t mfid = p25Buffer[15U];
// Setup P25 data handlers
@@ -285,7 +287,7 @@ void SerialService::processP25FromNet(UInt8Array p25Buffer, uint32_t length)
uint8_t frameLength = p25Buffer[23U];
// Handle PDUs
- if (duid == p25::P25_DUID_PDU) {
+ if (duid == DUID::PDU) {
frameLength = length;
data = std::unique_ptr(new uint8_t[length]);
::memset(data.get(), 0x00U, length);
@@ -313,7 +315,7 @@ void SerialService::processP25FromNet(UInt8Array p25Buffer, uint32_t length)
uint32_t netId = __GET_UINT16(p25Buffer, 16U);
uint8_t lsd1 = p25Buffer[20U];
uint8_t lsd2 = p25Buffer[21U];
- uint8_t frameType = p25::P25_FT_DATA_UNIT;
+ FrameType::E frameType = FrameType::DATA_UNIT;
// Default any 0's
if (netId == 0U) {
@@ -332,22 +334,22 @@ void SerialService::processP25FromNet(UInt8Array p25Buffer, uint32_t length)
data::LowSpeedData lsd;
// is this a LDU1, is this the first of a call?
- if (duid == p25::P25_DUID_LDU1) {
- frameType = p25Buffer[180U];
+ if (duid == DUID::LDU1) {
+ frameType = (FrameType::E)p25Buffer[180U];
if (m_debug) {
LogDebug(LOG_NET, "P25, frameType = $%02X", frameType);
}
- if (frameType == p25::P25_FT_HDU_VALID) {
+ if (frameType == FrameType::HDU_VALID) {
uint8_t algId = p25Buffer[181U];
uint32_t kid = (p25Buffer[182U] << 8) | (p25Buffer[183U] << 0);
// copy MI data
- uint8_t mi[p25::P25_MI_LENGTH_BYTES];
- ::memset(mi, 0x00U, p25::P25_MI_LENGTH_BYTES);
+ uint8_t mi[MI_LENGTH_BYTES];
+ ::memset(mi, 0x00U, MI_LENGTH_BYTES);
- for (uint8_t i = 0; i < p25::P25_MI_LENGTH_BYTES; i++) {
+ for (uint8_t i = 0; i < MI_LENGTH_BYTES; i++) {
mi[i] = p25Buffer[184U + i];
}
@@ -385,54 +387,54 @@ void SerialService::processP25FromNet(UInt8Array p25Buffer, uint32_t length)
// forward onto the specific processor for final processing and delivery
switch (duid) {
- case P25_DUID_LDU1:
+ case DUID::LDU1:
{
- if ((message[0U] == dfsi::P25_DFSI_LDU1_VOICE1) && (message[22U] == dfsi::P25_DFSI_LDU1_VOICE2) &&
- (message[36U] == dfsi::P25_DFSI_LDU1_VOICE3) && (message[53U] == dfsi::P25_DFSI_LDU1_VOICE4) &&
- (message[70U] == dfsi::P25_DFSI_LDU1_VOICE5) && (message[87U] == dfsi::P25_DFSI_LDU1_VOICE6) &&
- (message[104U] == dfsi::P25_DFSI_LDU1_VOICE7) && (message[121U] == dfsi::P25_DFSI_LDU1_VOICE8) &&
- (message[138U] == dfsi::P25_DFSI_LDU1_VOICE9)) {
+ if ((message[0U] == DFSIFrameType::LDU1_VOICE1) && (message[22U] == DFSIFrameType::LDU1_VOICE2) &&
+ (message[36U] == DFSIFrameType::LDU1_VOICE3) && (message[53U] == DFSIFrameType::LDU1_VOICE4) &&
+ (message[70U] == DFSIFrameType::LDU1_VOICE5) && (message[87U] == DFSIFrameType::LDU1_VOICE6) &&
+ (message[104U] == DFSIFrameType::LDU1_VOICE7) && (message[121U] == DFSIFrameType::LDU1_VOICE8) &&
+ (message[138U] == DFSIFrameType::LDU1_VOICE9)) {
uint32_t count = 0U;
dfsi::LC dfsiLC = dfsi::LC(control, lsd);
uint8_t netLDU1[9U * 25U];
::memset(netLDU1, 0x00U, 9U * 25U);
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE1);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE1);
dfsiLC.decodeLDU1(message + count, netLDU1 + 10U);
- count += dfsi::P25_DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE2);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE2);
dfsiLC.decodeLDU1(message + count, netLDU1 + 26U);
- count += dfsi::P25_DFSI_LDU1_VOICE2_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE2_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE3);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE3);
dfsiLC.decodeLDU1(message + count, netLDU1 + 55U);
- count += dfsi::P25_DFSI_LDU1_VOICE3_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE3_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE4);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE4);
dfsiLC.decodeLDU1(message + count, netLDU1 + 80U);
- count += dfsi::P25_DFSI_LDU1_VOICE4_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE4_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE5);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE5);
dfsiLC.decodeLDU1(message + count, netLDU1 + 105U);
- count += dfsi::P25_DFSI_LDU1_VOICE5_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE5_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE6);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE6);
dfsiLC.decodeLDU1(message + count, netLDU1 + 130U);
- count += dfsi::P25_DFSI_LDU1_VOICE6_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE6_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE7);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE7);
dfsiLC.decodeLDU1(message + count, netLDU1 + 155U);
- count += dfsi::P25_DFSI_LDU1_VOICE7_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE7_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE8);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE8);
dfsiLC.decodeLDU1(message + count, netLDU1 + 180U);
- count += dfsi::P25_DFSI_LDU1_VOICE8_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE8_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE9);
+ dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE9);
dfsiLC.decodeLDU1(message + count, netLDU1 + 204U);
- count += dfsi::P25_DFSI_LDU1_VOICE9_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE9_FRAME_LENGTH_BYTES;
control = lc::LC(*dfsiLC.control());
@@ -449,54 +451,54 @@ void SerialService::processP25FromNet(UInt8Array p25Buffer, uint32_t length)
}
}
break;
- case P25_DUID_LDU2:
+ case DUID::LDU2:
{
- if ((message[0U] == dfsi::P25_DFSI_LDU2_VOICE10) && (message[22U] == dfsi::P25_DFSI_LDU2_VOICE11) &&
- (message[36U] == dfsi::P25_DFSI_LDU2_VOICE12) && (message[53U] == dfsi::P25_DFSI_LDU2_VOICE13) &&
- (message[70U] == dfsi::P25_DFSI_LDU2_VOICE14) && (message[87U] == dfsi::P25_DFSI_LDU2_VOICE15) &&
- (message[104U] == dfsi::P25_DFSI_LDU2_VOICE16) && (message[121U] == dfsi::P25_DFSI_LDU2_VOICE17) &&
- (message[138U] == dfsi::P25_DFSI_LDU2_VOICE18)) {
+ if ((message[0U] == DFSIFrameType::LDU2_VOICE10) && (message[22U] == DFSIFrameType::LDU2_VOICE11) &&
+ (message[36U] == DFSIFrameType::LDU2_VOICE12) && (message[53U] == DFSIFrameType::LDU2_VOICE13) &&
+ (message[70U] == DFSIFrameType::LDU2_VOICE14) && (message[87U] == DFSIFrameType::LDU2_VOICE15) &&
+ (message[104U] == DFSIFrameType::LDU2_VOICE16) && (message[121U] == DFSIFrameType::LDU2_VOICE17) &&
+ (message[138U] == DFSIFrameType::LDU2_VOICE18)) {
uint32_t count = 0U;
dfsi::LC dfsiLC = dfsi::LC(control, lsd);
uint8_t netLDU2[9U * 25U];
::memset(netLDU2, 0x00U, 9U * 25U);
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE10);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE10);
dfsiLC.decodeLDU2(message + count, netLDU2 + 10U);
- count += dfsi::P25_DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE11);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE11);
dfsiLC.decodeLDU2(message + count, netLDU2 + 26U);
- count += dfsi::P25_DFSI_LDU2_VOICE11_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE11_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE12);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE12);
dfsiLC.decodeLDU2(message + count, netLDU2 + 55U);
- count += dfsi::P25_DFSI_LDU2_VOICE12_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE12_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE13);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE13);
dfsiLC.decodeLDU2(message + count, netLDU2 + 80U);
- count += dfsi::P25_DFSI_LDU2_VOICE13_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE13_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE14);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE14);
dfsiLC.decodeLDU2(message + count, netLDU2 + 105U);
- count += dfsi::P25_DFSI_LDU2_VOICE14_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE14_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE15);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE15);
dfsiLC.decodeLDU2(message + count, netLDU2 + 130U);
- count += dfsi::P25_DFSI_LDU2_VOICE15_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE15_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE16);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE16);
dfsiLC.decodeLDU2(message + count, netLDU2 + 155U);
- count += dfsi::P25_DFSI_LDU2_VOICE16_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE16_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE17);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE17);
dfsiLC.decodeLDU2(message + count, netLDU2 + 180U);
- count += dfsi::P25_DFSI_LDU2_VOICE17_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE17_FRAME_LENGTH_BYTES;
- dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE18);
+ dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE18);
dfsiLC.decodeLDU2(message + count, netLDU2 + 204U);
- count += dfsi::P25_DFSI_LDU2_VOICE18_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE18_FRAME_LENGTH_BYTES;
control = lc::LC(*dfsiLC.control());
LogInfoEx(LOG_SERIAL, P25_LDU2_STR " audio, algo = $%02X, kid = $%04X", control.getAlgId(), control.getKId());
@@ -508,26 +510,26 @@ void SerialService::processP25FromNet(UInt8Array p25Buffer, uint32_t length)
}
break;
- case P25_DUID_TSDU:
+ case DUID::TSDU:
//processTSDU(data.get(), frameLength, control, lsd); // We don't handle TSDUs right now
break;
- case P25_DUID_TDU:
- case P25_DUID_TDULC:
+ case DUID::TDU:
+ case DUID::TDULC:
{
- if (duid == P25_DUID_TDULC) {
+ if (duid == DUID::TDULC) {
std::unique_ptr tdulc = lc::tdulc::TDULCFactory::createTDULC(data.get());
if (tdulc == nullptr) {
LogWarning(LOG_NET, P25_TDULC_STR ", undecodable TDULC");
}
else {
- if (tdulc->getLCO() != LC_CALL_TERM)
+ if (tdulc->getLCO() != LCO::CALL_TERM)
break;
}
}
// is this an TDU with a grant demand?
- if (duid == P25_DUID_TDU && grantDemand) {
+ if (duid == DUID::TDU && grantDemand) {
break; // ignore grant demands
}
@@ -541,6 +543,9 @@ void SerialService::processP25FromNet(UInt8Array p25Buffer, uint32_t length)
m_sequences[dstId] = RTP_END_OF_CALL_SEQ;
}
break;
+
+ default:
+ break;
}
}
@@ -605,7 +610,7 @@ void SerialService::processP25ToNet()
::memcpy(dfsiData, data + 2U, len - 2);
// Extract DFSI frame type
- uint8_t frameType = dfsiData[0U];
+ DFSIFrameType::E frameType = (DFSIFrameType::E)dfsiData[0U];
//LogDebug(LOG_SERIAL, "Handling DFSI frameType 0x%02X", frameType);
@@ -615,7 +620,7 @@ void SerialService::processP25ToNet()
// Switch based on DFSI frame type
switch (frameType) {
// Start/Stop Frame
- case P25_DFSI_MOT_START_STOP:
+ case DFSIFrameType::MOT_START_STOP:
{
// Decode the frame
MotStartOfStream start = MotStartOfStream(dfsiData);
@@ -644,7 +649,7 @@ void SerialService::processP25ToNet()
}
break;
// VHDR 1 Frame
- case P25_DFSI_MOT_VHDR_1:
+ case DFSIFrameType::MOT_VHDR_1:
{
// Decode
MotVoiceHeader1 vhdr1 = MotVoiceHeader1(dfsiData);
@@ -659,7 +664,7 @@ void SerialService::processP25ToNet()
}
break;
// VHDR 2 Frame
- case P25_DFSI_MOT_VHDR_2:
+ case DFSIFrameType::MOT_VHDR_2:
{
// Decode
MotVoiceHeader2 vhdr2 = MotVoiceHeader2(dfsiData);
@@ -671,7 +676,7 @@ void SerialService::processP25ToNet()
}
// Buffer for raw VHDR data
- uint8_t raw[P25_DFSI_VHDR_RAW_LEN];
+ uint8_t raw[DFSI_VHDR_RAW_LEN];
// Get VHDR1 data
::memcpy(raw, m_rxVoiceCallData->VHDR1, 8U);
::memcpy(raw + 8U, m_rxVoiceCallData->VHDR1 + 9U, 8U);
@@ -682,11 +687,11 @@ void SerialService::processP25ToNet()
::memcpy(raw + 34U, m_rxVoiceCallData->VHDR2 + 18U, 2U);
// Buffer for decoded VHDR data
- uint8_t vhdr[P25_DFSI_VHDR_LEN];
+ uint8_t vhdr[DFSI_VHDR_LEN];
// Copy over the data, decoding hex with the weird bit stuffing nonsense
uint offset = 0U;
- for (uint32_t i = 0; i < P25_DFSI_VHDR_RAW_LEN; i++, offset += 6)
+ for (uint32_t i = 0; i < DFSI_VHDR_RAW_LEN; i++, offset += 6)
Utils::hex2Bin(raw[i], vhdr, offset);
// Try to decode the RS data
@@ -696,7 +701,7 @@ void SerialService::processP25ToNet()
LogError(LOG_SERIAL, "V24 traffic failed to decode RS (36,20,17) FEC [STREAM ID %u]", m_rxVoiceCallData->streamId);
} else {
// Copy Message Indicator
- ::memcpy(m_rxVoiceCallData->mi, vhdr, P25_MI_LENGTH_BYTES);
+ ::memcpy(m_rxVoiceCallData->mi, vhdr, MI_LENGTH_BYTES);
// Get additional info
m_rxVoiceCallData->mfId = vhdr[9U];
m_rxVoiceCallData->algoId = vhdr[10U];
@@ -714,22 +719,22 @@ void SerialService::processP25ToNet()
}
break;
// VOICE1/10 create a start voice frame
- case P25_DFSI_LDU1_VOICE1:
+ case DFSIFrameType::LDU1_VOICE1:
{
// Decode
MotStartVoiceFrame svf = MotStartVoiceFrame(dfsiData);
// Copy
- ::memcpy(m_rxVoiceCallData->netLDU1 + 10U, svf.fullRateVoice->imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU1 + 10U, svf.fullRateVoice->imbeData, RAW_IMBE_LENGTH_BYTES);
// Increment our voice frame counter
m_rxVoiceCallData->n++;
}
break;
- case P25_DFSI_LDU2_VOICE10:
+ case DFSIFrameType::LDU2_VOICE10:
{
// Decode
MotStartVoiceFrame svf = MotStartVoiceFrame(dfsiData);
// Copy
- ::memcpy(m_rxVoiceCallData->netLDU2 + 10U, svf.fullRateVoice->imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU2 + 10U, svf.fullRateVoice->imbeData, RAW_IMBE_LENGTH_BYTES);
// Increment our voice frame counter
m_rxVoiceCallData->n++;
}
@@ -742,15 +747,15 @@ void SerialService::processP25ToNet()
// Copy based on frame type
switch (frameType) {
// VOICE2
- case P25_DFSI_LDU1_VOICE2:
+ case DFSIFrameType::LDU1_VOICE2:
{
- ::memcpy(m_rxVoiceCallData->netLDU1 + 26U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU1 + 26U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
}
break;
// VOICE3
- case P25_DFSI_LDU1_VOICE3:
+ case DFSIFrameType::LDU1_VOICE3:
{
- ::memcpy(m_rxVoiceCallData->netLDU1 + 55U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU1 + 55U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
if (voice.additionalData != nullptr) {
m_rxVoiceCallData->lco = voice.additionalData[0U];
m_rxVoiceCallData->mfId = voice.additionalData[1U];
@@ -761,9 +766,9 @@ void SerialService::processP25ToNet()
}
break;
// VOICE4
- case P25_DFSI_LDU1_VOICE4:
+ case DFSIFrameType::LDU1_VOICE4:
{
- ::memcpy(m_rxVoiceCallData->netLDU1 + 80U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU1 + 80U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
if (voice.additionalData != nullptr) {
m_rxVoiceCallData->dstId = __GET_UINT16(voice.additionalData, 0U);
} else {
@@ -772,9 +777,9 @@ void SerialService::processP25ToNet()
}
break;
// VOICE5
- case P25_DFSI_LDU1_VOICE5:
+ case DFSIFrameType::LDU1_VOICE5:
{
- ::memcpy(m_rxVoiceCallData->netLDU1 + 105U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU1 + 105U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
if (voice.additionalData != nullptr) {
m_rxVoiceCallData->srcId = __GET_UINT16(voice.additionalData, 0U);
} else {
@@ -783,27 +788,27 @@ void SerialService::processP25ToNet()
}
break;
// VOICE6
- case P25_DFSI_LDU1_VOICE6:
+ case DFSIFrameType::LDU1_VOICE6:
{
- ::memcpy(m_rxVoiceCallData->netLDU1 + 130U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU1 + 130U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
}
break;
// VOICE7
- case P25_DFSI_LDU1_VOICE7:
+ case DFSIFrameType::LDU1_VOICE7:
{
- ::memcpy(m_rxVoiceCallData->netLDU1 + 155U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU1 + 155U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
}
break;
// VOICE8
- case P25_DFSI_LDU1_VOICE8:
+ case DFSIFrameType::LDU1_VOICE8:
{
- ::memcpy(m_rxVoiceCallData->netLDU1 + 180U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU1 + 180U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
}
break;
// VOICE9
- case P25_DFSI_LDU1_VOICE9:
+ case DFSIFrameType::LDU1_VOICE9:
{
- ::memcpy(m_rxVoiceCallData->netLDU1 + 204U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU1 + 204U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
if (voice.additionalData != nullptr) {
m_rxVoiceCallData->lsd1 = voice.additionalData[0U];
m_rxVoiceCallData->lsd2 = voice.additionalData[1U];
@@ -813,15 +818,15 @@ void SerialService::processP25ToNet()
}
break;
// VOICE11
- case P25_DFSI_LDU2_VOICE11:
+ case DFSIFrameType::LDU2_VOICE11:
{
- ::memcpy(m_rxVoiceCallData->netLDU2 + 26U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU2 + 26U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
}
break;
// VOICE12
- case P25_DFSI_LDU2_VOICE12:
+ case DFSIFrameType::LDU2_VOICE12:
{
- ::memcpy(m_rxVoiceCallData->netLDU2 + 55U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU2 + 55U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
if (voice.additionalData != nullptr) {
::memcpy(m_rxVoiceCallData->mi, voice.additionalData, 3U);
} else {
@@ -830,9 +835,9 @@ void SerialService::processP25ToNet()
}
break;
// VOICE13
- case P25_DFSI_LDU2_VOICE13:
+ case DFSIFrameType::LDU2_VOICE13:
{
- ::memcpy(m_rxVoiceCallData->netLDU2 + 80U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU2 + 80U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
if (voice.additionalData != nullptr) {
::memcpy(m_rxVoiceCallData->mi + 3U, voice.additionalData, 3U);
} else {
@@ -841,9 +846,9 @@ void SerialService::processP25ToNet()
}
break;
// VOICE14
- case P25_DFSI_LDU2_VOICE14:
+ case DFSIFrameType::LDU2_VOICE14:
{
- ::memcpy(m_rxVoiceCallData->netLDU2 + 105U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU2 + 105U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
if (voice.additionalData != nullptr) {
::memcpy(m_rxVoiceCallData->mi + 6U, voice.additionalData, 3U);
} else {
@@ -852,9 +857,9 @@ void SerialService::processP25ToNet()
}
break;
// VOICE15
- case P25_DFSI_LDU2_VOICE15:
+ case DFSIFrameType::LDU2_VOICE15:
{
- ::memcpy(m_rxVoiceCallData->netLDU2 + 130U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU2 + 130U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
if (voice.additionalData != nullptr) {
m_rxVoiceCallData->algoId = voice.additionalData[0U];
m_rxVoiceCallData->kId = __GET_UINT16B(voice.additionalData, 1U);
@@ -864,21 +869,21 @@ void SerialService::processP25ToNet()
}
break;
// VOICE16
- case P25_DFSI_LDU2_VOICE16:
+ case DFSIFrameType::LDU2_VOICE16:
{
- ::memcpy(m_rxVoiceCallData->netLDU2 + 155U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU2 + 155U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
}
break;
// VOICE17
- case P25_DFSI_LDU2_VOICE17:
+ case DFSIFrameType::LDU2_VOICE17:
{
- ::memcpy(m_rxVoiceCallData->netLDU2 + 180U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU2 + 180U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
}
break;
// VOICE18
- case P25_DFSI_LDU2_VOICE18:
+ case DFSIFrameType::LDU2_VOICE18:
{
- ::memcpy(m_rxVoiceCallData->netLDU2 + 204U, voice.imbeData, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(m_rxVoiceCallData->netLDU2 + 204U, voice.imbeData, RAW_IMBE_LENGTH_BYTES);
if (voice.additionalData != nullptr) {
m_rxVoiceCallData->lsd1 = voice.additionalData[0U];
m_rxVoiceCallData->lsd2 = voice.additionalData[1U];
@@ -887,6 +892,9 @@ void SerialService::processP25ToNet()
}
}
break;
+
+ default:
+ break;
}
// Increment our voice frame counter
@@ -920,7 +928,7 @@ void SerialService::processP25ToNet()
// Send LDU1 if ready
if (m_rxVoiceCallData->n == 9U) {
// Send (TODO: dynamically set HDU_VALID or DATA_VALID depending on start of call or not)
- bool ret = m_network->writeP25LDU1(*m_rxVoiceControl, *m_rxVoiceLsd, m_rxVoiceCallData->netLDU1, P25_FT_HDU_VALID);
+ bool ret = m_network->writeP25LDU1(*m_rxVoiceControl, *m_rxVoiceLsd, m_rxVoiceCallData->netLDU1, FrameType::HDU_VALID);
// Print
LogInfoEx(LOG_NET, P25_LDU1_STR " audio, srcId = %u, dstId = %u", m_rxVoiceCallData->srcId, m_rxVoiceCallData->dstId);
// Optional Debug
@@ -1255,7 +1263,7 @@ uint32_t SerialService::readP25Frame(uint8_t* data)
///
/// This is very similar to the C# Mot_DFSISendFrame functions, we don't implement the TIA DFSI sendframe in serial
/// because the only devices we connect to over serial V24 are Moto
-void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
+void SerialService::writeP25Frame(DUID::E duid, dfsi::LC& lc, uint8_t* ldu)
{
// Sanity check
assert(ldu != nullptr);
@@ -1274,14 +1282,14 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
(control.getPriority() & 0x07U);
// Get the MI
- uint8_t mi[P25_MI_LENGTH_BYTES];
+ uint8_t mi[MI_LENGTH_BYTES];
control.getMI(mi);
// Calculate reed-solomon encoding depending on DUID type
uint8_t rs[P25_LDU_LC_FEC_LENGTH_BYTES];
::memset(rs, 0x00U, P25_LDU_LC_FEC_LENGTH_BYTES);
switch(duid) {
- case P25_DUID_LDU1:
+ case DUID::LDU1:
{
rs[0U] = control.getLCO(); // LCO
rs[1U] = control.getMFId(); // MFId
@@ -1299,9 +1307,9 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
m_rs.encode241213(rs);
}
break;
- case P25_DUID_LDU2:
+ case DUID::LDU2:
{
- for (uint32_t i = 0; i < P25_MI_LENGTH_BYTES; i++)
+ for (uint32_t i = 0; i < MI_LENGTH_BYTES; i++)
rs[i] = mi[i]; // Message Indicator
rs[9U] = control.getAlgId(); // Algorithm ID
@@ -1312,6 +1320,9 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
m_rs.encode24169(rs);
}
break;
+
+ default:
+ break;
}
// Placeholder for last call timestamp retrieved below (Not used yet)
@@ -1337,16 +1348,16 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
}
// Check if we need to start a new data stream
- if (duid == P25_DUID_LDU1 && ((sequence == 0U) || (sequence == RTP_END_OF_CALL_SEQ))) {
+ if (duid == DUID::LDU1 && ((sequence == 0U) || (sequence == RTP_END_OF_CALL_SEQ))) {
// Start the new stream
startOfStream(lc);
// Update our call entry
m_sequences[control.getDstId()] = ++sequence;
// Log
- LogInfoEx(LOG_SERIAL, "CALL START: %svoice call from %u to TG %u", (control.getAlgId() != P25_ALGO_UNENCRYPT) ? "encrypted " : "", control.getSrcId(), control.getDstId());
+ LogInfoEx(LOG_SERIAL, "CALL START: %svoice call from %u to TG %u", (control.getAlgId() != ALGO_UNENCRYPT) ? "encrypted " : "", control.getSrcId(), control.getDstId());
- ActivityLog("network %svoice transmission call from %u to TG %u", (control.getAlgId() != P25_ALGO_UNENCRYPT) ? "encrypted " : "", control.getSrcId(), control.getDstId());
+ ActivityLog("network %svoice transmission call from %u to TG %u", (control.getAlgId() != ALGO_UNENCRYPT) ? "encrypted " : "", control.getSrcId(), control.getDstId());
} else {
// If this TGID isn't either lookup, consider it a late entry and start a new stream
if ( (m_sequences.find(control.getDstId()) == m_sequences.end()) || (m_lastHeard.find(control.getDstId()) == m_lastHeard.end()) ) {
@@ -1355,17 +1366,17 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
m_lastHeard[control.getDstId()] = now;
m_sequences[control.getDstId()] = ++sequence;
- LogInfoEx(LOG_SERIAL, "LATE CALL START: %svoice call from %u to TG %u", (control.getAlgId() != P25_ALGO_UNENCRYPT) ? "encrypted " : "", control.getSrcId(), control.getDstId());
- ActivityLog("network %svoice transmission late entry from %u to TG %u", (control.getAlgId() != P25_ALGO_UNENCRYPT) ? "encrypted " : "", control.getSrcId(), control.getDstId());
+ LogInfoEx(LOG_SERIAL, "LATE CALL START: %svoice call from %u to TG %u", (control.getAlgId() != ALGO_UNENCRYPT) ? "encrypted " : "", control.getSrcId(), control.getDstId());
+ ActivityLog("network %svoice transmission late entry from %u to TG %u", (control.getAlgId() != ALGO_UNENCRYPT) ? "encrypted " : "", control.getSrcId(), control.getDstId());
}
}
// Check if we need to end the call
- if ( (duid == P25_DUID_TDU) || (duid == P25_DUID_TDULC) ) {
+ if ( (duid == DUID::TDU) || (duid == DUID::TDULC) ) {
// Stop
endOfStream();
// Log
- LogInfoEx(LOG_SERIAL, "CALL END: %svoice call from %u to TG %u", (control.getAlgId() != P25_ALGO_UNENCRYPT) ? "encrypted " : "", control.getSrcId(), control.getDstId());
+ LogInfoEx(LOG_SERIAL, "CALL END: %svoice call from %u to TG %u", (control.getAlgId() != ALGO_UNENCRYPT) ? "encrypted " : "", control.getSrcId(), control.getDstId());
// Clear our counters
m_sequences[control.getDstId()] = RTP_END_OF_CALL_SEQ;
}
@@ -1385,7 +1396,7 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
case 0: // VOICE1/10
{
// Set frametype
- voice.setFrameType((duid == P25_DUID_LDU1) ? P25_DFSI_LDU1_VOICE1 : P25_DFSI_LDU2_VOICE10);
+ voice.setFrameType((duid == DUID::LDU1) ? DFSIFrameType::LDU1_VOICE1 : DFSIFrameType::LDU2_VOICE10);
// Create the new frame objects
MotStartVoiceFrame svf = MotStartVoiceFrame();
// Set values appropriately
@@ -1394,10 +1405,10 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
// Set frame type
svf.fullRateVoice->setFrameType(voice.getFrameType());
// Set source flag & ICW flag
- svf.fullRateVoice->setSource(m_diu ? SOURCE_DIU : SOURCE_QUANTAR);
- svf.setICW(m_diu ? ICW_DIU : ICW_QUANTAR);
+ svf.fullRateVoice->setSource(m_diu ? SourceFlag::DIU : SourceFlag::QUANTAR);
+ svf.setICW(m_diu ? ICWFlag::DIU : ICWFlag::QUANTAR);
// Copy data
- ::memcpy(svf.fullRateVoice->imbeData, ldu + 10U, MotFullRateVoice::IMBE_BUF_LEN);
+ ::memcpy(svf.fullRateVoice->imbeData, ldu + 10U, RAW_IMBE_LENGTH_BYTES);
// Encode
buffer = new uint8_t[svf.LENGTH];
::memset(buffer, 0x00U, svf.LENGTH);
@@ -1407,21 +1418,21 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
break;
case 1: // VOICE2/11
{
- voice.setFrameType((duid == P25_DUID_LDU1) ? P25_DFSI_LDU1_VOICE2 : P25_DFSI_LDU2_VOICE11);
+ voice.setFrameType((duid == DUID::LDU1) ? DFSIFrameType::LDU1_VOICE2 : DFSIFrameType::LDU2_VOICE11);
// Set source flag
- voice.setSource(m_diu ? SOURCE_DIU : SOURCE_QUANTAR);
- ::memcpy(voice.imbeData, ldu + 26U, voice.IMBE_BUF_LEN);
+ voice.setSource(m_diu ? SourceFlag::DIU : SourceFlag::QUANTAR);
+ ::memcpy(voice.imbeData, ldu + 26U, RAW_IMBE_LENGTH_BYTES);
}
break;
case 2: // VOICE3/12
{
- voice.setFrameType((duid == P25_DUID_LDU1) ? P25_DFSI_LDU1_VOICE3 : P25_DFSI_LDU2_VOICE12);
- ::memcpy(voice.imbeData, ldu + 55U, voice.IMBE_BUF_LEN);
+ voice.setFrameType((duid == DUID::LDU1) ? DFSIFrameType::LDU1_VOICE3 : DFSIFrameType::LDU2_VOICE12);
+ ::memcpy(voice.imbeData, ldu + 55U, RAW_IMBE_LENGTH_BYTES);
// Create the additional data array
voice.additionalData = new uint8_t[voice.ADDITIONAL_LENGTH];
::memset(voice.additionalData, 0x00U, voice.ADDITIONAL_LENGTH);
// Copy additional data
- if (voice.getFrameType() == P25_DUID_LDU1) {
+ if (voice.getFrameType() == DFSIFrameType::LDU1_VOICE3) {
voice.additionalData[0U] = control.getLCO();
voice.additionalData[1U] = control.getMFId();
voice.additionalData[2U] = serviceOptions;
@@ -1434,20 +1445,20 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
break;
case 3: // VOICE4/13
{
- voice.setFrameType((duid == P25_DUID_LDU1) ? P25_DFSI_LDU1_VOICE4 : P25_DFSI_LDU2_VOICE13);
- ::memcpy(voice.imbeData, ldu + 80U, voice.IMBE_BUF_LEN);
+ voice.setFrameType((duid == DUID::LDU1) ? DFSIFrameType::LDU1_VOICE4 : DFSIFrameType::LDU2_VOICE13);
+ ::memcpy(voice.imbeData, ldu + 80U, RAW_IMBE_LENGTH_BYTES);
// Create the additional data array
voice.additionalData = new uint8_t[voice.ADDITIONAL_LENGTH];
::memset(voice.additionalData, 0x00U, voice.ADDITIONAL_LENGTH);
// We set the additional data based on LDU1/2
switch (duid) {
- case P25_DUID_LDU1:
+ case DUID::LDU1:
{
// Destination address (3 bytes)
__SET_UINT16(control.getDstId(), voice.additionalData, 0U);
}
break;
- case P25_DUID_LDU2:
+ case DUID::LDU2:
{
// Message Indicator
voice.additionalData[0U] = mi[3U];
@@ -1455,25 +1466,27 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
voice.additionalData[2U] = mi[5U];
}
break;
+ default:
+ break;
}
}
break;
case 4: // VOICE5/14
{
- voice.setFrameType((duid == P25_DUID_LDU1) ? P25_DFSI_LDU1_VOICE5 : P25_DFSI_LDU2_VOICE14);
- ::memcpy(voice.imbeData, ldu + 105U, voice.IMBE_BUF_LEN);
+ voice.setFrameType((duid == DUID::LDU1) ? DFSIFrameType::LDU1_VOICE5 : DFSIFrameType::LDU2_VOICE14);
+ ::memcpy(voice.imbeData, ldu + 105U, RAW_IMBE_LENGTH_BYTES);
// Create the additional data array
voice.additionalData = new uint8_t[voice.ADDITIONAL_LENGTH];
::memset(voice.additionalData, 0x00U, voice.ADDITIONAL_LENGTH);
// Same as case 3 above
switch (duid) {
- case P25_DUID_LDU1:
+ case DUID::LDU1:
{
// Source address (3 bytes)
__SET_UINT16(control.getSrcId(), voice.additionalData, 0U);
}
break;
- case P25_DUID_LDU2:
+ case DUID::LDU2:
{
// Message Indicator
voice.additionalData[0U] = mi[6U];
@@ -1481,19 +1494,21 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
voice.additionalData[2U] = mi[8U];
}
break;
+ default:
+ break;
}
}
break;
case 5: // VOICE6/15
{
- voice.setFrameType((duid == P25_DUID_LDU1) ? P25_DFSI_LDU1_VOICE6 : P25_DFSI_LDU2_VOICE15);
- ::memcpy(voice.imbeData, ldu + 130U, voice.IMBE_BUF_LEN);
+ voice.setFrameType((duid == DUID::LDU1) ? DFSIFrameType::LDU1_VOICE6 : DFSIFrameType::LDU2_VOICE15);
+ ::memcpy(voice.imbeData, ldu + 130U, RAW_IMBE_LENGTH_BYTES);
// Create the additional data array
voice.additionalData = new uint8_t[voice.ADDITIONAL_LENGTH];
::memset(voice.additionalData, 0x00U, voice.ADDITIONAL_LENGTH);
// Another switch on LDU1/2
switch (duid) {
- case P25_DUID_LDU1:
+ case DUID::LDU1:
{
// RS encoding
voice.additionalData[0U] = rs[9U];
@@ -1501,19 +1516,21 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
voice.additionalData[2U] = rs[11U];
}
break;
- case P25_DUID_LDU2:
+ case DUID::LDU2:
{
voice.additionalData[0U] = control.getAlgId(); // Algo ID
__SET_UINT16B(control.getKId(), voice.additionalData, 1U); // Key ID
}
break;
+ default:
+ break;
}
}
break;
case 6: // VOICE7/16
{
- voice.setFrameType((duid == P25_DUID_LDU1) ? P25_DFSI_LDU1_VOICE7 : P25_DFSI_LDU2_VOICE16);
- ::memcpy(voice.imbeData, ldu + 155U, voice.IMBE_BUF_LEN);
+ voice.setFrameType((duid == DUID::LDU1) ? DFSIFrameType::LDU1_VOICE7 : DFSIFrameType::LDU2_VOICE16);
+ ::memcpy(voice.imbeData, ldu + 155U, RAW_IMBE_LENGTH_BYTES);
// Create the additional data array
voice.additionalData = new uint8_t[voice.ADDITIONAL_LENGTH];
::memset(voice.additionalData, 0x00U, voice.ADDITIONAL_LENGTH);
@@ -1525,8 +1542,8 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
break;
case 7: // VOICE8/17
{
- voice.setFrameType((duid == P25_DUID_LDU1) ? P25_DFSI_LDU1_VOICE8 : P25_DFSI_LDU2_VOICE17);
- ::memcpy(voice.imbeData, ldu + 180U, voice.IMBE_BUF_LEN);
+ voice.setFrameType((duid == DUID::LDU1) ? DFSIFrameType::LDU1_VOICE8 : DFSIFrameType::LDU2_VOICE17);
+ ::memcpy(voice.imbeData, ldu + 180U, RAW_IMBE_LENGTH_BYTES);
// Create the additional data array
voice.additionalData = new uint8_t[voice.ADDITIONAL_LENGTH];
::memset(voice.additionalData, 0x00U, voice.ADDITIONAL_LENGTH);
@@ -1538,8 +1555,8 @@ void SerialService::writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu)
break;
case 8: // VOICE9/18
{
- voice.setFrameType((duid == P25_DUID_LDU1) ? P25_DFSI_LDU1_VOICE9 : P25_DFSI_LDU2_VOICE18);
- ::memcpy(voice.imbeData, ldu + 204U, voice.IMBE_BUF_LEN);
+ voice.setFrameType((duid == DUID::LDU1) ? DFSIFrameType::LDU1_VOICE9 : DFSIFrameType::LDU2_VOICE18);
+ ::memcpy(voice.imbeData, ldu + 204U, RAW_IMBE_LENGTH_BYTES);
// Create the additional data array
voice.additionalData = new uint8_t[voice.ADDITIONAL_LENGTH];
::memset(voice.additionalData, 0x00U, voice.ADDITIONAL_LENGTH);
@@ -1604,16 +1621,16 @@ void SerialService::startOfStream(const LC& lc)
data::LowSpeedData lsd = data::LowSpeedData(*lc.lsd());
// Init message indicator & get
- uint8_t mi[P25_MI_LENGTH_BYTES];
- ::memset(mi, 0x00U, P25_MI_LENGTH_BYTES);
+ uint8_t mi[MI_LENGTH_BYTES];
+ ::memset(mi, 0x00U, MI_LENGTH_BYTES);
control.getMI(mi);
// Init VHDR data array
- uint8_t vhdr[P25_DFSI_VHDR_LEN];
- ::memset(vhdr, 0x00U, P25_DFSI_VHDR_LEN);
+ uint8_t vhdr[DFSI_VHDR_LEN];
+ ::memset(vhdr, 0x00U, DFSI_VHDR_LEN);
// Copy MI to VHDR
- ::memcpy(vhdr, mi, P25_MI_LENGTH_BYTES);
+ ::memcpy(vhdr, mi, MI_LENGTH_BYTES);
// Set values
vhdr[9U] = control.getMFId();
@@ -1625,9 +1642,9 @@ void SerialService::startOfStream(const LC& lc)
m_rs.encode362017(vhdr);
// Convert the binary bytes to hex bytes (some kind of bit packing thing I don't understand)
- uint8_t raw[P25_DFSI_VHDR_RAW_LEN];
+ uint8_t raw[DFSI_VHDR_RAW_LEN];
uint32_t offset = 0;
- for (uint8_t i = 0; i < P25_DFSI_VHDR_RAW_LEN; i++, offset += 6) {
+ for (uint8_t i = 0; i < DFSI_VHDR_RAW_LEN; i++, offset += 6) {
raw[i] = Utils::bin2Hex(vhdr, offset);
}
@@ -1635,7 +1652,7 @@ void SerialService::startOfStream(const LC& lc)
MotVoiceHeader1 vhdr1 = MotVoiceHeader1();
vhdr1.startOfStream->setStartStop(StartStopFlag::START);
vhdr1.startOfStream->setRT(m_rtrt ? RTFlag::ENABLED : RTFlag::DISABLED);
- vhdr1.setICW(m_diu ? ICW_DIU : ICW_QUANTAR);
+ vhdr1.setICW(m_diu ? ICWFlag::DIU : ICWFlag::QUANTAR);
::memcpy(vhdr1.header, raw, 8U);
::memcpy(vhdr1.header + 9U, raw + 8U, 8U);
::memcpy(vhdr1.header + 18U, raw + 16U, 2U);
diff --git a/src/dfsi/network/SerialService.h b/src/dfsi/network/SerialService.h
index 86881fc5..65122b46 100644
--- a/src/dfsi/network/SerialService.h
+++ b/src/dfsi/network/SerialService.h
@@ -146,7 +146,7 @@ namespace network
int writeSerial();
uint32_t readP25Frame(uint8_t* data);
- void writeP25Frame(uint8_t duid, dfsi::LC& lc, uint8_t* ldu);
+ void writeP25Frame(P25DEF::DUID::E duid, dfsi::LC& lc, uint8_t* ldu);
// Helpers for TX stream data
void startOfStream(const LC& lc);
diff --git a/src/fne/network/RESTAPI.cpp b/src/fne/network/RESTAPI.cpp
index 3e365dcb..6665f504 100644
--- a/src/fne/network/RESTAPI.cpp
+++ b/src/fne/network/RESTAPI.cpp
@@ -1494,6 +1494,7 @@ void RESTAPI::restAPI_GetAffList(const HTTPPayload& request, HTTPPayload& reply,
///
void RESTAPI::restAPI_PutDMRRID(const HTTPPayload& request, HTTPPayload& reply, const RequestMatch& match)
{
+ using namespace dmr::defines;
if (!validateAuth(request, reply)) {
return;
}
@@ -1549,16 +1550,16 @@ void RESTAPI::restAPI_PutDMRRID(const HTTPPayload& request, HTTPPayload& reply,
errorPayload(reply, "OK", HTTPPayload::OK);
std::string command = req["command"].get();
if (::strtolower(command) == RID_CMD_PAGE) {
- m_network->m_tagDMR->write_Call_Alrt(peerId, slot, p25::P25_WUID_FNE, dstId);
+ m_network->m_tagDMR->write_Call_Alrt(peerId, slot, WUID_ALL, dstId);
}
else if (::strtolower(command) == RID_CMD_CHECK) {
- m_network->m_tagDMR->write_Ext_Func(peerId, slot, dmr::DMR_EXT_FNCT_CHECK, p25::P25_WUID_FNE, dstId);
+ m_network->m_tagDMR->write_Ext_Func(peerId, slot, ExtendedFunctions::CHECK, WUID_ALL, dstId);
}
else if (::strtolower(command) == RID_CMD_INHIBIT) {
- m_network->m_tagDMR->write_Ext_Func(peerId, slot, dmr::DMR_EXT_FNCT_INHIBIT, p25::P25_WUID_FNE, dstId);
+ m_network->m_tagDMR->write_Ext_Func(peerId, slot, ExtendedFunctions::INHIBIT, WUID_STUNI, dstId);
}
else if (::strtolower(command) == RID_CMD_UNINHIBIT) {
- m_network->m_tagDMR->write_Ext_Func(peerId, slot, dmr::DMR_EXT_FNCT_UNINHIBIT, p25::P25_WUID_FNE, dstId);
+ m_network->m_tagDMR->write_Ext_Func(peerId, slot, ExtendedFunctions::UNINHIBIT, WUID_STUNI, dstId);
}
else {
errorPayload(reply, "invalid command");
@@ -1578,6 +1579,7 @@ void RESTAPI::restAPI_PutDMRRID(const HTTPPayload& request, HTTPPayload& reply,
///
void RESTAPI::restAPI_PutP25RID(const HTTPPayload& request, HTTPPayload& reply, const RequestMatch& match)
{
+ using namespace p25::defines;
if (!validateAuth(request, reply)) {
return;
}
@@ -1622,16 +1624,16 @@ void RESTAPI::restAPI_PutP25RID(const HTTPPayload& request, HTTPPayload& reply,
errorPayload(reply, "OK", HTTPPayload::OK);
if (::strtolower(command) == RID_CMD_PAGE) {
- m_network->m_tagP25->write_TSDU_Call_Alrt(peerId, p25::P25_WUID_FNE, dstId);
+ m_network->m_tagP25->write_TSDU_Call_Alrt(peerId, WUID_FNE, dstId);
}
else if (::strtolower(command) == RID_CMD_CHECK) {
- m_network->m_tagP25->write_TSDU_Ext_Func(peerId, p25::P25_EXT_FNCT_CHECK, p25::P25_WUID_FNE, dstId);
+ m_network->m_tagP25->write_TSDU_Ext_Func(peerId, ExtendedFunctions::CHECK, WUID_FNE, dstId);
}
else if (::strtolower(command) == RID_CMD_INHIBIT) {
- m_network->m_tagP25->write_TSDU_Ext_Func(peerId, p25::P25_EXT_FNCT_INHIBIT, p25::P25_WUID_FNE, dstId);
+ m_network->m_tagP25->write_TSDU_Ext_Func(peerId, ExtendedFunctions::INHIBIT, WUID_FNE, dstId);
}
else if (::strtolower(command) == RID_CMD_UNINHIBIT) {
- m_network->m_tagP25->write_TSDU_Ext_Func(peerId, p25::P25_EXT_FNCT_UNINHIBIT, p25::P25_WUID_FNE, dstId);
+ m_network->m_tagP25->write_TSDU_Ext_Func(peerId, ExtendedFunctions::UNINHIBIT, WUID_FNE, dstId);
}
else if (::strtolower(command) == RID_CMD_GAQ) {
m_network->m_tagP25->write_TSDU_Grp_Aff_Q(peerId, dstId);
diff --git a/src/fne/network/callhandler/TagDMRData.cpp b/src/fne/network/callhandler/TagDMRData.cpp
index cf719426..9151b500 100644
--- a/src/fne/network/callhandler/TagDMRData.cpp
+++ b/src/fne/network/callhandler/TagDMRData.cpp
@@ -27,6 +27,7 @@ using namespace system_clock;
using namespace network;
using namespace network::callhandler;
using namespace dmr;
+using namespace dmr::defines;
#include
#include
@@ -78,11 +79,11 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
uint32_t srcId = __GET_UINT16(data, 5U);
uint32_t dstId = __GET_UINT16(data, 8U);
- uint8_t flco = (data[15U] & 0x40U) == 0x40U ? FLCO_PRIVATE : FLCO_GROUP;
+ FLCO::E flco = (data[15U] & 0x40U) == 0x40U ? FLCO::PRIVATE : FLCO::GROUP;
uint32_t slotNo = (data[15U] & 0x80U) == 0x80U ? 2U : 1U;
- uint8_t dataType = data[15U] & 0x0FU;
+ DataType::E dataType = (DataType::E)(data[15U] & 0x0FU);
data::Data dmrData;
dmrData.setSeqNo(seqNo);
@@ -101,13 +102,13 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
}
else if (voiceSync) {
dmrData.setData(data + 20U);
- dmrData.setDataType(DT_VOICE_SYNC);
+ dmrData.setDataType(DataType::VOICE_SYNC);
dmrData.setN(0U);
}
else {
uint8_t n = data[15U] & 0x0FU;
dmrData.setData(data + 20U);
- dmrData.setDataType(DT_VOICE);
+ dmrData.setDataType(DataType::VOICE);
dmrData.setN(n);
}
@@ -123,7 +124,7 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
}
// is this the end of the call stream?
- if (dataSync && (dataType == DT_TERMINATOR_WITH_LC)) {
+ if (dataSync && (dataType == DataType::TERMINATOR_WITH_LC)) {
if (srcId == 0U && dstId == 0U) {
LogWarning(LOG_NET, "DMR, invalid TERMINATOR, peer = %u, srcId = %u, dstId = %u, streamId = %u, external = %u", peerId, srcId, dstId, streamId, external);
return false;
@@ -177,7 +178,7 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
}
// is this a new call stream?
- if (dataSync && (dataType == DT_VOICE_LC_HEADER)) {
+ if (dataSync && (dataType == DataType::VOICE_LC_HEADER)) {
if (srcId == 0U && dstId == 0U) {
LogWarning(LOG_NET, "DMR, invalid call, peer = %u, srcId = %u, dstId = %u, streamId = %u, external = %u", peerId, srcId, dstId, streamId, external);
return false;
@@ -481,7 +482,7 @@ void TagDMRData::write_Call_Alrt(uint32_t peerId, uint8_t slot, uint32_t srcId,
///
///
///
-void TagDMRData::routeRewrite(uint8_t* buffer, uint32_t peerId, dmr::data::Data& dmrData, uint8_t dataType, uint32_t dstId, uint32_t slotNo, bool outbound)
+void TagDMRData::routeRewrite(uint8_t* buffer, uint32_t peerId, dmr::data::Data& dmrData, DataType::E dataType, uint32_t dstId, uint32_t slotNo, bool outbound)
{
uint32_t rewriteDstId = dstId;
uint32_t rewriteSlotNo = slotNo;
@@ -500,8 +501,8 @@ void TagDMRData::routeRewrite(uint8_t* buffer, uint32_t peerId, dmr::data::Data&
uint8_t data[DMR_FRAME_LENGTH_BYTES + 2U];
dmrData.getData(data + 2U);
- if (dataType == DT_VOICE_LC_HEADER ||
- dataType == DT_TERMINATOR_WITH_LC) {
+ if (dataType == DataType::VOICE_LC_HEADER ||
+ dataType == DataType::TERMINATOR_WITH_LC) {
// decode and reconstruct embedded DMR data
lc::FullLC fullLC;
std::unique_ptr lc = fullLC.decode(data + 2U, dataType);
@@ -516,7 +517,7 @@ void TagDMRData::routeRewrite(uint8_t* buffer, uint32_t peerId, dmr::data::Data&
fullLC.encode(*lc, data + 2U, dataType);
dmrData.setData(data + 2U);
}
- else if (dataType == DT_VOICE_PI_HEADER) {
+ else if (dataType == DataType::VOICE_PI_HEADER) {
// decode and reconstruct embedded DMR data
lc::FullLC fullLC;
std::unique_ptr lc = fullLC.decodePI(data + 2U);
@@ -584,11 +585,11 @@ bool TagDMRData::peerRewrite(uint32_t peerId, uint32_t& dstId, uint32_t& slotNo,
bool TagDMRData::processCSBK(uint8_t* buffer, uint32_t peerId, dmr::data::Data& dmrData)
{
// are we receiving a CSBK?
- if (dmrData.getDataType() == DT_CSBK) {
+ if (dmrData.getDataType() == DataType::CSBK) {
uint8_t data[DMR_FRAME_LENGTH_BYTES + 2U];
dmrData.getData(data + 2U);
- std::unique_ptr csbk = lc::csbk::CSBKFactory::createCSBK(data + 2U, DT_CSBK);
+ std::unique_ptr csbk = lc::csbk::CSBKFactory::createCSBK(data + 2U, DataType::CSBK);
if (csbk != nullptr) {
// report csbk event to InfluxDB
if (m_network->m_enableInfluxDB && m_network->m_influxLogRawData) {
@@ -612,12 +613,12 @@ bool TagDMRData::processCSBK(uint8_t* buffer, uint32_t peerId, dmr::data::Data&
}
switch (csbk->getCSBKO()) {
- case CSBKO_BROADCAST:
+ case CSBKO::BROADCAST:
{
lc::csbk::CSBK_BROADCAST* osp = static_cast(csbk.get());
- if (osp->getAnncType() == BCAST_ANNC_ANN_WD_TSCC) {
+ if (osp->getAnncType() == BroadcastAnncType::ANN_WD_TSCC) {
if (m_network->m_disallowAdjStsBcast) {
- // LogWarning(LOG_NET, "PEER %u, passing BCAST_ANNC_ANN_WD_TSCC to internal peers is prohibited, dropping", peerId);
+ // LogWarning(LOG_NET, "PEER %u, passing BroadcastAnncType::ANN_WD_TSCC to internal peers is prohibited, dropping", peerId);
return false;
} else {
if (m_network->m_verbose) {
@@ -650,14 +651,14 @@ bool TagDMRData::processCSBK(uint8_t* buffer, uint32_t peerId, dmr::data::Data&
///
bool TagDMRData::isPeerPermitted(uint32_t peerId, data::Data& data, uint32_t streamId, bool external)
{
- if (data.getDataType() == FLCO_PRIVATE) {
+ if (data.getFLCO() == FLCO::PRIVATE) {
if (!m_network->checkU2UDroppedPeer(peerId))
return true;
return false;
}
// is this a group call?
- if (data.getDataType() == FLCO_GROUP) {
+ if (data.getFLCO() == FLCO::GROUP) {
lookups::TalkgroupRuleGroupVoice tg = m_network->m_tidLookup->find(data.getDstId(), data.getSlotNo());
std::vector inclusion = tg.config().inclusion();
@@ -762,11 +763,11 @@ bool TagDMRData::validate(uint32_t peerId, data::Data& data, uint32_t streamId)
}
// always validate a terminator if the source is valid
- if (data.getDataType() == DT_TERMINATOR_WITH_LC)
+ if (data.getDataType() == DataType::TERMINATOR_WITH_LC)
return true;
// is this a private call?
- if (data.getDataType() == FLCO_PRIVATE) {
+ if (data.getFLCO() == FLCO::PRIVATE) {
// is the destination ID a blacklisted ID?
lookups::RadioId rid = m_network->m_ridLookup->find(data.getDstId());
if (!rid.radioDefault()) {
@@ -791,7 +792,7 @@ bool TagDMRData::validate(uint32_t peerId, data::Data& data, uint32_t streamId)
}
// is this a group call?
- if (data.getDataType() == FLCO_GROUP) {
+ if (data.getFLCO() == FLCO::GROUP) {
lookups::TalkgroupRuleGroupVoice tg = m_network->m_tidLookup->find(data.getDstId());
if (tg.isInvalid()) {
// report error event to InfluxDB
@@ -870,7 +871,7 @@ bool TagDMRData::write_CSBK_Grant(uint32_t peerId, uint32_t srcId, uint32_t dstI
bool broadcast = ((serviceOptions & 0xFFU) & 0x10U) == 0x10U; // Broadcast Flag
uint8_t priority = ((serviceOptions & 0xFFU) & 0x03U); // Priority
- if (dstId == DMR_WUID_ALL) {
+ if (dstId == WUID_ALL || dstId == WUID_ALLZ || dstId == WUID_ALLL) {
return true; // do not generate grant packets for $FFFF (All Call) TGID
}
@@ -890,12 +891,12 @@ bool TagDMRData::write_CSBK_Grant(uint32_t peerId, uint32_t srcId, uint32_t dstI
if (grp) {
std::unique_ptr csbk = std::make_unique();
if (broadcast)
- csbk->setCSBKO(CSBKO_BTV_GRANT);
+ csbk->setCSBKO(CSBKO::BTV_GRANT);
csbk->setLogicalCh1(0U);
csbk->setSlotNo(slot);
if (m_network->m_verbose) {
- LogMessage(LOG_NET, "DMR, DT_CSBK, %s, emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u, peerId = %u",
+ LogMessage(LOG_NET, "DMR, CSBK, %s, emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u, peerId = %u",
csbk->toString().c_str(), emergency, privacy, broadcast, priority, csbk->getLogicalCh1(), csbk->getSlotNo(), srcId, dstId, peerId);
}
@@ -911,7 +912,7 @@ bool TagDMRData::write_CSBK_Grant(uint32_t peerId, uint32_t srcId, uint32_t dstI
csbk->setSlotNo(slot);
if (m_network->m_verbose) {
- LogMessage(LOG_NET, "DMR, DT_CSBK, %s, emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u, peerId = %u",
+ LogMessage(LOG_NET, "DMR, CSBK, %s, emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u, peerId = %u",
csbk->toString().c_str(), emergency, privacy, broadcast, priority, csbk->getLogicalCh1(), csbk->getSlotNo(), srcId, dstId, peerId);
}
@@ -937,7 +938,7 @@ void TagDMRData::write_CSBK_NACK_RSP(uint32_t peerId, uint32_t dstId, uint8_t re
std::unique_ptr csbk = std::make_unique();
csbk->setServiceKind(service);
csbk->setReason(reason);
- csbk->setSrcId(DMR_WUID_ALL); // hmmm...
+ csbk->setSrcId(WUID_ALL); // hmmm...
csbk->setDstId(dstId);
write_CSBK(peerId, 1U, csbk.get());
@@ -956,7 +957,7 @@ void TagDMRData::write_CSBK(uint32_t peerId, uint8_t slot, lc::CSBK* csbk)
SlotType slotType;
slotType.setColorCode(0U);
- slotType.setDataType(DT_CSBK);
+ slotType.setDataType(DataType::CSBK);
// Regenerate the CSBK data
csbk->encode(data + 2U);
@@ -969,10 +970,10 @@ void TagDMRData::write_CSBK(uint32_t peerId, uint8_t slot, lc::CSBK* csbk)
data::Data dmrData;
dmrData.setSlotNo(slot);
- dmrData.setDataType(DT_CSBK);
+ dmrData.setDataType(DataType::CSBK);
dmrData.setSrcId(csbk->getSrcId());
dmrData.setDstId(csbk->getDstId());
- dmrData.setFLCO(csbk->getGI() ? FLCO_GROUP : FLCO_PRIVATE);
+ dmrData.setFLCO(csbk->getGI() ? FLCO::GROUP : FLCO::PRIVATE);
dmrData.setN(0U);
dmrData.setSeqNo(0U);
dmrData.setBER(0U);
diff --git a/src/fne/network/callhandler/TagDMRData.h b/src/fne/network/callhandler/TagDMRData.h
index f3c6abc4..790ed273 100644
--- a/src/fne/network/callhandler/TagDMRData.h
+++ b/src/fne/network/callhandler/TagDMRData.h
@@ -88,7 +88,7 @@ namespace network
bool m_debug;
/// Helper to route rewrite the network data buffer.
- void routeRewrite(uint8_t* buffer, uint32_t peerId, dmr::data::Data& dmrData, uint8_t dataType, uint32_t dstId, uint32_t slotNo, bool outbound = true);
+ void routeRewrite(uint8_t* buffer, uint32_t peerId, dmr::data::Data& dmrData, DMRDEF::DataType::E dataType, uint32_t dstId, uint32_t slotNo, bool outbound = true);
/// Helper to route rewrite destination ID and slot.
bool peerRewrite(uint32_t peerId, uint32_t& dstId, uint32_t& slotNo, bool outbound = true);
diff --git a/src/fne/network/callhandler/TagNXDNData.cpp b/src/fne/network/callhandler/TagNXDNData.cpp
index dd8f8d6b..a4fb8541 100644
--- a/src/fne/network/callhandler/TagNXDNData.cpp
+++ b/src/fne/network/callhandler/TagNXDNData.cpp
@@ -29,6 +29,7 @@ using namespace system_clock;
using namespace network;
using namespace network::callhandler;
using namespace nxdn;
+using namespace nxdn::defines;
#include
#include
@@ -101,11 +102,11 @@ bool TagNXDNData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerI
}
// specifically only check the following logic for end of call, voice or data frames
- if ((messageType == RTCH_MESSAGE_TYPE_TX_REL || messageType == RTCH_MESSAGE_TYPE_TX_REL_EX) ||
- (messageType == RTCH_MESSAGE_TYPE_VCALL || messageType == RTCH_MESSAGE_TYPE_DCALL_HDR ||
- messageType == RTCH_MESSAGE_TYPE_DCALL_DATA)) {
+ if ((messageType == MessageType::RTCH_TX_REL || messageType == MessageType::RTCH_TX_REL_EX) ||
+ (messageType == MessageType::RTCH_VCALL || messageType == MessageType::RTCH_DCALL_HDR ||
+ messageType == MessageType::RTCH_DCALL_DATA)) {
// is this the end of the call stream?
- if (messageType == RTCH_MESSAGE_TYPE_TX_REL || messageType == RTCH_MESSAGE_TYPE_TX_REL_EX) {
+ if (messageType == MessageType::RTCH_TX_REL || messageType == MessageType::RTCH_TX_REL_EX) {
if (srcId == 0U && dstId == 0U) {
LogWarning(LOG_NET, "NXDN, invalid TX_REL, peer = %u, srcId = %u, dstId = %u, streamId = %u, external = %u", peerId, srcId, dstId, streamId, external);
return false;
@@ -149,7 +150,7 @@ bool TagNXDNData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerI
}
// is this a new call stream?
- if ((messageType != RTCH_MESSAGE_TYPE_TX_REL && messageType != RTCH_MESSAGE_TYPE_TX_REL_EX)) {
+ if ((messageType != MessageType::RTCH_TX_REL && messageType != MessageType::RTCH_TX_REL_EX)) {
if (srcId == 0U && dstId == 0U) {
LogWarning(LOG_NET, "NXDN, invalid call, peer = %u, srcId = %u, dstId = %u, streamId = %u, external = %u", peerId, srcId, dstId, streamId, external);
return false;
@@ -571,7 +572,7 @@ bool TagNXDNData::validate(uint32_t peerId, lc::RTCH& lc, uint8_t messageType, u
}
// always validate a terminator if the source is valid
- if (messageType == RTCH_MESSAGE_TYPE_TX_REL || messageType == RTCH_MESSAGE_TYPE_TX_REL_EX)
+ if (messageType == MessageType::RTCH_TX_REL || messageType == MessageType::RTCH_TX_REL_EX)
return true;
// is this a private call?
@@ -670,7 +671,7 @@ bool TagNXDNData::write_Message_Grant(uint32_t peerId, uint32_t srcId, uint32_t
}
}
- rcch->setMessageType(RTCH_MESSAGE_TYPE_VCALL);
+ rcch->setMessageType(MessageType::RTCH_VCALL);
rcch->setGrpVchNo(0U);
rcch->setGroup(grp);
rcch->setSrcId(srcId);
@@ -702,9 +703,9 @@ void TagNXDNData::write_Message_Deny(uint32_t peerId, uint32_t srcId, uint32_t d
std::unique_ptr rcch = nullptr;
switch (service) {
- case RTCH_MESSAGE_TYPE_VCALL:
+ case MessageType::RTCH_VCALL:
rcch = std::make_unique();
- rcch->setMessageType(RTCH_MESSAGE_TYPE_VCALL);
+ rcch->setMessageType(MessageType::RTCH_VCALL);
default:
return;
}
@@ -735,9 +736,9 @@ void TagNXDNData::write_Message(uint32_t peerId, lc::RCCH* rcch)
// generate the LICH
channel::LICH lich;
- lich.setRFCT(NXDN_LICH_RFCT_RCCH);
- lich.setFCT(NXDN_LICH_CAC_OUTBOUND);
- lich.setOption(NXDN_LICH_DATA_COMMON);
+ lich.setRFCT(RFChannelType::RCCH);
+ lich.setFCT(FuncChannelType::CAC_OUTBOUND);
+ lich.setOption(ChOption::DATA_COMMON);
lich.setOutbound(true);
lich.encode(data + 2U);
@@ -749,7 +750,7 @@ void TagNXDNData::write_Message(uint32_t peerId, lc::RCCH* rcch)
// generate the CAC
channel::CAC cac;
cac.setRAN(0U);
- cac.setStructure(NXDN_SR_RCCH_SINGLE);
+ cac.setStructure(ChStructure::SR_RCCH_SINGLE);
cac.setData(buffer);
cac.encode(data + 2U);
diff --git a/src/fne/network/callhandler/TagP25Data.cpp b/src/fne/network/callhandler/TagP25Data.cpp
index de2368b2..cfaa01e7 100644
--- a/src/fne/network/callhandler/TagP25Data.cpp
+++ b/src/fne/network/callhandler/TagP25Data.cpp
@@ -25,6 +25,7 @@ using namespace system_clock;
using namespace network;
using namespace network::callhandler;
using namespace p25;
+using namespace p25::defines;
#include
#include
@@ -88,8 +89,8 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
uint8_t lsd1 = data[20U];
uint8_t lsd2 = data[21U];
- uint8_t duid = data[22U];
- uint8_t frameType = P25_FT_DATA_UNIT;
+ DUID::E duid = (DUID::E)data[22U];
+ FrameType::E frameType = FrameType::DATA_UNIT;
// perform TGID route rewrites if configured
routeRewrite(buffer, peerId, duid, dstId, false);
@@ -99,28 +100,28 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
data::LowSpeedData lsd;
// is this a LDU1, is this the first of a call?
- if (duid == P25_DUID_LDU1) {
- frameType = data[180U];
+ if (duid == DUID::LDU1) {
+ frameType = (FrameType::E)data[180U];
if (m_debug) {
LogDebug(LOG_NET, "P25, frameType = $%02X", frameType);
}
- if (frameType == P25_FT_HDU_VALID) {
+ if (frameType == FrameType::HDU_VALID) {
uint8_t algId = data[181U];
uint32_t kid = (data[182U] << 8) | (data[183U] << 0);
// copy MI data
- uint8_t mi[P25_MI_LENGTH_BYTES];
- ::memset(mi, 0x00U, P25_MI_LENGTH_BYTES);
+ uint8_t mi[MI_LENGTH_BYTES];
+ ::memset(mi, 0x00U, MI_LENGTH_BYTES);
- for (uint8_t i = 0; i < P25_MI_LENGTH_BYTES; i++) {
+ for (uint8_t i = 0; i < MI_LENGTH_BYTES; i++) {
mi[i] = data[184U + i];
}
if (m_debug) {
LogDebug(LOG_NET, "P25, HDU algId = $%02X, kId = $%02X", algId, kid);
- Utils::dump(1U, "P25 HDU Network MI", mi, P25_MI_LENGTH_BYTES);
+ Utils::dump(1U, "P25 HDU Network MI", mi, MI_LENGTH_BYTES);
}
control.setAlgId(algId);
@@ -141,7 +142,7 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
// process a TSBK out into a class literal if possible
std::unique_ptr tsbk;
- if (duid == P25_DUID_TSDU) {
+ if (duid == DUID::TSDU) {
UInt8Array data = std::unique_ptr(new uint8_t[frameLength]);
::memset(data.get(), 0x00U, frameLength);
::memcpy(data.get(), buffer + 24U, frameLength);
@@ -157,9 +158,9 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
}
// specifically only check the following logic for end of call or voice frames
- if (duid != P25_DUID_TSDU && duid != P25_DUID_PDU) {
+ if (duid != DUID::TSDU && duid != DUID::PDU) {
// is this the end of the call stream?
- if ((duid == P25_DUID_TDU) || (duid == P25_DUID_TDULC)) {
+ if ((duid == DUID::TDU) || (duid == DUID::TDULC)) {
if (srcId == 0U && dstId == 0U) {
LogWarning(LOG_NET, "P25, invalid TDU, peer = %u, srcId = %u, dstId = %u, streamId = %u, external = %u", peerId, srcId, dstId, streamId, external);
return false;
@@ -213,7 +214,7 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
}
// is this a new call stream?
- if ((duid != P25_DUID_TDU) && (duid != P25_DUID_TDULC)) {
+ if ((duid != DUID::TDU) && (duid != DUID::TDULC)) {
if (srcId == 0U && dstId == 0U) {
LogWarning(LOG_NET, "P25, invalid call, peer = %u, srcId = %u, dstId = %u, streamId = %u, external = %u", peerId, srcId, dstId, streamId, external);
return false;
@@ -222,7 +223,7 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
auto it = std::find_if(m_status.begin(), m_status.end(), [&](StatusMapPair x) { return x.second.dstId == dstId; });
if (it != m_status.end()) {
RxStatus status = m_status[dstId];
- if (streamId != status.streamId && ((duid != P25_DUID_TDU) && (duid != P25_DUID_TDULC))) {
+ if (streamId != status.streamId && ((duid != DUID::TDU) && (duid != DUID::TDULC))) {
if (status.srcId != 0U && status.srcId != srcId) {
LogWarning(LOG_NET, "P25, Call Collision, peer = %u, srcId = %u, dstId = %u, streamId = %u, rxPeer = %u, rxSrcId = %u, rxDstId = %u, rxStreamId = %u, external = %u",
peerId, srcId, dstId, streamId, status.peerId, status.srcId, status.dstId, status.streamId, external);
@@ -565,7 +566,7 @@ void TagP25Data::write_TSDU_Ext_Func(uint32_t peerId, uint32_t func, uint32_t ar
void TagP25Data::write_TSDU_Grp_Aff_Q(uint32_t peerId, uint32_t dstId)
{
std::unique_ptr osp = std::make_unique();
- osp->setSrcId(P25_WUID_FNE);
+ osp->setSrcId(WUID_FNE);
osp->setDstId(dstId);
LogMessage(LOG_NET, P25_TSDU_STR ", %s, dstId = %u", osp->toString().c_str(), dstId);
@@ -581,7 +582,7 @@ void TagP25Data::write_TSDU_Grp_Aff_Q(uint32_t peerId, uint32_t dstId)
void TagP25Data::write_TSDU_U_Reg_Cmd(uint32_t peerId, uint32_t dstId)
{
std::unique_ptr osp = std::make_unique();
- osp->setSrcId(P25_WUID_FNE);
+ osp->setSrcId(WUID_FNE);
osp->setDstId(dstId);
LogMessage(LOG_NET, P25_TSDU_STR ", %s, dstId = %u", osp->toString().c_str(), dstId);
@@ -614,7 +615,7 @@ void TagP25Data::routeRewrite(uint8_t* buffer, uint32_t peerId, uint8_t duid, ui
__SET_UINT16(rewriteDstId, buffer, 8U);
// are we receiving a TSDU?
- if (duid == P25_DUID_TSDU) {
+ if (duid == DUID::TSDU) {
UInt8Array data = std::unique_ptr(new uint8_t[frameLength]);
::memset(data.get(), 0x00U, frameLength);
::memcpy(data.get(), buffer + 24U, frameLength);
@@ -623,7 +624,7 @@ void TagP25Data::routeRewrite(uint8_t* buffer, uint32_t peerId, uint8_t duid, ui
if (tsbk != nullptr) {
// handle standard P25 reference opcodes
switch (tsbk->getLCO()) {
- case TSBK_IOSP_GRP_VCH:
+ case TSBKO::IOSP_GRP_VCH:
{
LogMessage(LOG_NET, P25_TSDU_STR ", %s, emerg = %u, encrypt = %u, prio = %u, chNo = %u, srcId = %u, dstId = %u",
tsbk->toString(true).c_str(), tsbk->getEmergency(), tsbk->getEncrypted(), tsbk->getPriority(), tsbk->getGrpVchNo(), srcId, rewriteDstId);
@@ -652,7 +653,7 @@ void TagP25Data::routeRewrite(uint8_t* buffer, uint32_t peerId, uint8_t duid, ui
Utils::dump(1U, "!!! *TSDU (SBF) TSBK Block Data", data + P25_PREAMBLE_LENGTH_BYTES + 2U, P25_TSBK_FEC_LENGTH_BYTES);
}
- ::memcpy(buffer + 24U, data + 2U, p25::P25_TSDU_FRAME_LENGTH_BYTES);
+ ::memcpy(buffer + 24U, data + 2U, P25_TSDU_FRAME_LENGTH_BYTES);
}
}
}
@@ -701,7 +702,7 @@ bool TagP25Data::peerRewrite(uint32_t peerId, uint32_t& dstId, bool outbound)
bool TagP25Data::processTSDUFrom(uint8_t* buffer, uint32_t peerId, uint8_t duid)
{
// are we receiving a TSDU?
- if (duid == P25_DUID_TSDU) {
+ if (duid == DUID::TSDU) {
uint32_t frameLength = buffer[23U];
UInt8Array data = std::unique_ptr(new uint8_t[frameLength]);
@@ -733,14 +734,14 @@ bool TagP25Data::processTSDUFrom(uint8_t* buffer, uint32_t peerId, uint8_t duid)
// handle standard P25 reference opcodes
switch (tsbk->getLCO()) {
- case TSBK_IOSP_UU_VCH:
- case TSBK_IOSP_UU_ANS:
+ case TSBKO::IOSP_UU_VCH:
+ case TSBKO::IOSP_UU_ANS:
{
if (m_network->checkU2UDroppedPeer(peerId))
return false;
}
break;
- case TSBK_OSP_ADJ_STS_BCAST:
+ case TSBKO::OSP_ADJ_STS_BCAST:
{
if (m_network->m_disallowAdjStsBcast) {
// LogWarning(LOG_NET, "PEER %u, passing ADJ_STS_BCAST to internal peers is prohibited, dropping", peerId);
@@ -776,7 +777,7 @@ bool TagP25Data::processTSDUFrom(uint8_t* buffer, uint32_t peerId, uint8_t duid)
bool TagP25Data::processTSDUTo(uint8_t* buffer, uint32_t peerId, uint8_t duid)
{
// are we receiving a TSDU?
- if (duid == P25_DUID_TSDU) {
+ if (duid == DUID::TSDU) {
uint32_t frameLength = buffer[23U];
UInt8Array data = std::unique_ptr(new uint8_t[frameLength]);
@@ -795,7 +796,7 @@ bool TagP25Data::processTSDUTo(uint8_t* buffer, uint32_t peerId, uint8_t duid)
// handle standard P25 reference opcodes
switch (tsbk->getLCO()) {
- case TSBK_IOSP_GRP_VCH:
+ case TSBKO::IOSP_GRP_VCH:
{
if (m_network->m_restrictGrantToAffOnly) {
lookups::TalkgroupRuleGroupVoice tg = m_network->m_tidLookup->find(dstId);
@@ -848,7 +849,7 @@ bool TagP25Data::processTSDUTo(uint8_t* buffer, uint32_t peerId, uint8_t duid)
bool TagP25Data::processTSDUToExternal(uint8_t* buffer, uint32_t srcPeerId, uint32_t dstPeerId, uint8_t duid)
{
// are we receiving a TSDU?
- if (duid == P25_DUID_TSDU) {
+ if (duid == DUID::TSDU) {
uint32_t frameLength = buffer[23U];
UInt8Array data = std::unique_ptr(new uint8_t[frameLength]);
@@ -859,7 +860,7 @@ bool TagP25Data::processTSDUToExternal(uint8_t* buffer, uint32_t srcPeerId, uint
if (tsbk != nullptr) {
// handle standard P25 reference opcodes
switch (tsbk->getLCO()) {
- case TSBK_OSP_ADJ_STS_BCAST:
+ case TSBKO::OSP_ADJ_STS_BCAST:
{
if (m_network->m_disallowExtAdjStsBcast) {
// LogWarning(LOG_NET, "PEER %u, passing ADJ_STS_BCAST to external peers is prohibited, dropping", dstPeerId);
@@ -895,19 +896,19 @@ bool TagP25Data::processTSDUToExternal(uint8_t* buffer, uint32_t srcPeerId, uint
/// Stream ID
///
///
-bool TagP25Data::isPeerPermitted(uint32_t peerId, lc::LC& control, uint8_t duid, uint32_t streamId, bool external)
+bool TagP25Data::isPeerPermitted(uint32_t peerId, lc::LC& control, DUID::E duid, uint32_t streamId, bool external)
{
- if (control.getLCO() == LC_PRIVATE) {
+ if (control.getLCO() == LCO::PRIVATE) {
if (!m_network->checkU2UDroppedPeer(peerId))
return true;
return false;
}
// always permit a TSDU or PDU
- if (duid == P25_DUID_TSDU || duid == P25_DUID_PDU)
+ if (duid == DUID::TSDU || duid == DUID::PDU)
return true;
- if (duid == P25_DUID_HDU) {
+ if (duid == DUID::HDU) {
if (m_network->m_filterHeaders) {
if (control.getSrcId() != 0U && control.getDstId() != 0U) {
// is this a group call?
@@ -935,12 +936,12 @@ bool TagP25Data::isPeerPermitted(uint32_t peerId, lc::LC& control, uint8_t duid,
return true;
}
- if (duid == P25_DUID_TDULC) {
+ if (duid == DUID::TDULC) {
// always permit a terminator
return true;
}
- if (duid == P25_DUID_TDU) {
+ if (duid == DUID::TDU) {
if (m_network->m_filterTerminators) {
if (control.getSrcId() != 0U && control.getDstId() != 0U) {
// is this a group call?
@@ -1049,7 +1050,7 @@ bool TagP25Data::isPeerPermitted(uint32_t peerId, lc::LC& control, uint8_t duid,
///
/// Stream ID
///
-bool TagP25Data::validate(uint32_t peerId, lc::LC& control, uint8_t duid, const p25::lc::TSBK* tsbk, uint32_t streamId)
+bool TagP25Data::validate(uint32_t peerId, lc::LC& control, DUID::E duid, const p25::lc::TSBK* tsbk, uint32_t streamId)
{
// is the source ID a blacklisted ID?
lookups::RadioId rid = m_network->m_ridLookup->find(control.getSrcId());
@@ -1073,15 +1074,15 @@ bool TagP25Data::validate(uint32_t peerId, lc::LC& control, uint8_t duid, const
}
// always validate a PDU if the source is valid
- if (duid == P25_DUID_PDU)
+ if (duid == DUID::PDU)
return true;
// always validate a terminator if the source is valid
- if (duid == P25_DUID_TDU || duid == P25_DUID_TDULC)
+ if (duid == DUID::TDU || duid == DUID::TDULC)
return true;
// is this a private call?
- if (control.getLCO() == LC_PRIVATE) {
+ if (control.getLCO() == LCO::PRIVATE) {
// is the destination ID a blacklisted ID?
lookups::RadioId rid = m_network->m_ridLookup->find(control.getDstId());
if (!rid.radioDefault()) {
@@ -1107,11 +1108,11 @@ bool TagP25Data::validate(uint32_t peerId, lc::LC& control, uint8_t duid, const
}
// always validate a TSDU or PDU if the source is valid
- if (duid == P25_DUID_TSDU) {
+ if (duid == DUID::TSDU) {
if (tsbk != nullptr) {
// handle standard P25 reference opcodes
switch (tsbk->getLCO()) {
- case TSBK_IOSP_GRP_VCH:
+ case TSBKO::IOSP_GRP_VCH:
{
lookups::TalkgroupRuleGroupVoice tg = m_network->m_tidLookup->find(tsbk->getDstId());
@@ -1185,7 +1186,7 @@ bool TagP25Data::write_TSDU_Grant(uint32_t peerId, uint32_t srcId, uint32_t dstI
bool encryption = ((serviceOptions & 0xFFU) & 0x40U) == 0x40U; // Encryption Flag
uint8_t priority = ((serviceOptions & 0xFFU) & 0x07U); // Priority
- if (dstId == P25_TGID_ALL) {
+ if (dstId == TGID_ALL) {
return true; // do not generate grant packets for $FFFF (All Call) TGID
}
diff --git a/src/fne/network/callhandler/TagP25Data.h b/src/fne/network/callhandler/TagP25Data.h
index b5cdba9e..278d82e8 100644
--- a/src/fne/network/callhandler/TagP25Data.h
+++ b/src/fne/network/callhandler/TagP25Data.h
@@ -109,9 +109,9 @@ namespace network
bool processTSDUToExternal(uint8_t* buffer, uint32_t srcPeerId, uint32_t dstPeerId, uint8_t duid);
/// Helper to determine if the peer is permitted for traffic.
- bool isPeerPermitted(uint32_t peerId, p25::lc::LC& control, uint8_t duid, uint32_t streamId, bool external = false);
+ bool isPeerPermitted(uint32_t peerId, p25::lc::LC& control, P25DEF::DUID::E duid, uint32_t streamId, bool external = false);
/// Helper to validate the P25 call stream.
- bool validate(uint32_t peerId, p25::lc::LC& control, uint8_t duid, const p25::lc::TSBK* tsbk, uint32_t streamId);
+ bool validate(uint32_t peerId, p25::lc::LC& control, P25DEF::DUID::E duid, const p25::lc::TSBK* tsbk, uint32_t streamId);
/// Helper to write a grant packet.
bool write_TSDU_Grant(uint32_t peerId, uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp);
diff --git a/src/host/Host.Config.cpp b/src/host/Host.Config.cpp
index 544eb490..e4742f62 100644
--- a/src/host/Host.Config.cpp
+++ b/src/host/Host.Config.cpp
@@ -271,7 +271,7 @@ bool Host::readParams()
m_dmrColorCode = dmr::DMRUtils::colorCode(m_dmrColorCode);
m_dmrNetId = (uint32_t)::strtoul(rfssConfig["dmrNetId"].as("1").c_str(), NULL, 16);
- m_dmrNetId = dmr::DMRUtils::netId(m_dmrNetId, dmr::SITE_MODEL_SMALL);
+ m_dmrNetId = dmr::DMRUtils::netId(m_dmrNetId, dmr::defines::SiteModel::SMALL);
m_p25NAC = (uint32_t)::strtoul(rfssConfig["nac"].as("F7E").c_str(), NULL, 16);
m_p25NAC = p25::P25Utils::nac(m_p25NAC);
@@ -318,7 +318,7 @@ bool Host::readParams()
LogInfo(" DMR Network Id: $%05X", m_dmrNetId);
LogInfo(" P25 NAC: $%03X", m_p25NAC);
- if (p25TxNAC != p25::P25_NAC_DIGITAL_SQ && p25TxNAC != m_p25NAC) {
+ if (p25TxNAC != p25::defines::NAC_DIGITAL_SQ && p25TxNAC != m_p25NAC) {
LogInfo(" P25 Tx NAC: $%03X", p25TxNAC);
}
@@ -361,7 +361,7 @@ bool Host::createModem()
LogWarning(LOG_HOST, "DMR queue size is excessive, >60 frames!");
}
- m_dmrQueueSizeBytes = dmrQueueSize * (dmr::DMR_FRAME_LENGTH_BYTES * 5U);
+ m_dmrQueueSizeBytes = dmrQueueSize * (dmr::defines::DMR_FRAME_LENGTH_BYTES * 5U);
yaml::Node p25Protocol = protocolConf["p25"];
uint32_t p25QueueSize = p25Protocol["queueSize"].as(12U);
@@ -379,7 +379,7 @@ bool Host::createModem()
LogWarning(LOG_HOST, "P25 queue size is excessive, >30 frames!");
}
- m_p25QueueSizeBytes = p25QueueSize * p25::P25_LDU_FRAME_LENGTH_BYTES;
+ m_p25QueueSizeBytes = p25QueueSize * p25::defines::P25_LDU_FRAME_LENGTH_BYTES;
yaml::Node nxdnProtocol = protocolConf["nxdn"];
uint32_t nxdnQueueSize = nxdnProtocol["queueSize"].as(31U);
@@ -394,7 +394,7 @@ bool Host::createModem()
nxdnQueueSize = 50U;
}
- m_nxdnQueueSizeBytes = nxdnQueueSize * nxdn::NXDN_FRAME_LENGTH_BYTES;
+ m_nxdnQueueSizeBytes = nxdnQueueSize * nxdn::defines::NXDN_FRAME_LENGTH_BYTES;
yaml::Node modemConf = m_conf["system"]["modem"];
@@ -630,8 +630,8 @@ bool Host::createModem()
p25PostBWAdj, nxdnPostBWAdj, adfGainMode, afcEnable, afcKI, afcKP, afcRange);
m_modem->setSoftPot(rxCoarse, rxFine, txCoarse, txFine, rssiCoarse, rssiFine);
m_modem->setDMRColorCode(m_dmrColorCode);
- if (m_p25NAC == p25::P25_NAC_REUSE_RX_NAC)
- m_modem->setP25NAC(p25::P25_NAC_DIGITAL_SQ);
+ if (m_p25NAC == p25::defines::NAC_REUSE_RX_NAC)
+ m_modem->setP25NAC(p25::defines::NAC_DIGITAL_SQ);
else
m_modem->setP25NAC(m_p25NAC);
}
diff --git a/src/host/Host.DMR.cpp b/src/host/Host.DMR.cpp
index 0db552e9..e3a0f6be 100644
--- a/src/host/Host.DMR.cpp
+++ b/src/host/Host.DMR.cpp
@@ -7,7 +7,7 @@
* @package DVM / Modem Host Software
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2017-2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2017-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -58,7 +58,7 @@ void Host::interruptDMRBeacon(dmr::Control* control)
///
void Host::readFramesDMR1(dmr::Control* control, std::function&& afterReadCallback)
{
- uint8_t data[dmr::DMR_FRAME_LENGTH_BYTES * 2U];
+ uint8_t data[DMRDEF::DMR_FRAME_LENGTH_BYTES * 2U];
if (control != nullptr) {
// read DMR slot 1 frames from the modem, and if there is any
@@ -131,7 +131,7 @@ void Host::readFramesDMR1(dmr::Control* control, std::function&& afterRe
///
void Host::writeFramesDMR1(dmr::Control* control, std::function&& afterWriteCallback)
{
- uint8_t data[dmr::DMR_FRAME_LENGTH_BYTES * 2U];
+ uint8_t data[DMRDEF::DMR_FRAME_LENGTH_BYTES * 2U];
if (control != nullptr) {
// check if there is space on the modem for DMR slot 1 frames,
@@ -191,7 +191,7 @@ void Host::writeFramesDMR1(dmr::Control* control, std::function&& afterW
///
void Host::readFramesDMR2(dmr::Control* control, std::function&& afterReadCallback)
{
- uint8_t data[dmr::DMR_FRAME_LENGTH_BYTES * 2U];
+ uint8_t data[DMRDEF::DMR_FRAME_LENGTH_BYTES * 2U];
if (control != nullptr) {
// read DMR slot 2 frames from the modem, and if there is any
@@ -263,7 +263,7 @@ void Host::readFramesDMR2(dmr::Control* control, std::function&& afterRe
///
void Host::writeFramesDMR2(dmr::Control* control, std::function&& afterWriteCallback)
{
- uint8_t data[dmr::DMR_FRAME_LENGTH_BYTES * 2U];
+ uint8_t data[DMRDEF::DMR_FRAME_LENGTH_BYTES * 2U];
if (control != nullptr) {
// check if there is space on the modem for DMR slot 2 frames,
diff --git a/src/host/Host.NXDN.cpp b/src/host/Host.NXDN.cpp
index b99c5bb9..157dcd3a 100644
--- a/src/host/Host.NXDN.cpp
+++ b/src/host/Host.NXDN.cpp
@@ -7,7 +7,7 @@
* @package DVM / Modem Host Software
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2017-2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2017-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -42,7 +42,7 @@ void Host::interruptNXDNControl(nxdn::Control* control)
///
void Host::readFramesNXDN(nxdn::Control* control, std::function&& afterReadCallback)
{
- uint8_t data[nxdn::NXDN_FRAME_LENGTH_BYTES * 2U];
+ uint8_t data[NXDDEF::NXDN_FRAME_LENGTH_BYTES * 2U];
if (control != nullptr) {
uint32_t len = m_modem->readNXDNFrame(data);
@@ -80,7 +80,7 @@ void Host::readFramesNXDN(nxdn::Control* control, std::function&& afterR
///
void Host::writeFramesNXDN(nxdn::Control* control, std::function&& afterWriteCallback)
{
- uint8_t data[nxdn::NXDN_FRAME_LENGTH_BYTES * 2U];
+ uint8_t data[NXDDEF::NXDN_FRAME_LENGTH_BYTES * 2U];
// check if there is space on the modem for NXDN frames,
// if there is read frames from the NXDN controller and write it
diff --git a/src/host/Host.P25.cpp b/src/host/Host.P25.cpp
index 35ed82e5..1fcf9118 100644
--- a/src/host/Host.P25.cpp
+++ b/src/host/Host.P25.cpp
@@ -7,7 +7,7 @@
* @package DVM / Modem Host Software
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2017-2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2017-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -43,7 +43,7 @@ void Host::interruptP25Control(p25::Control* control)
///
void Host::readFramesP25(p25::Control* control, std::function&& afterReadCallback)
{
- uint8_t data[p25::P25_PDU_FRAME_LENGTH_BYTES * 2U];
+ uint8_t data[P25DEF::P25_PDU_FRAME_LENGTH_BYTES * 2U];
// read P25 frames from modem, and if there are frames
// write those frames to the P25 controller
@@ -124,7 +124,7 @@ void Host::readFramesP25(p25::Control* control, std::function&& afterRea
///
void Host::writeFramesP25(p25::Control* control, std::function&& afterWriteCallback)
{
- uint8_t data[p25::P25_PDU_FRAME_LENGTH_BYTES * 2U];
+ uint8_t data[P25DEF::P25_PDU_FRAME_LENGTH_BYTES * 2U];
// check if there is space on the modem for P25 frames,
// if there is read frames from the P25 controller and write it
diff --git a/src/host/dmr/Control.cpp b/src/host/dmr/Control.cpp
index 7ec12074..9d531c91 100644
--- a/src/host/dmr/Control.cpp
+++ b/src/host/dmr/Control.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016,2017 Jonathan Naylor, G4KLX
-* Copyright (C) 2017-2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2017-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -20,6 +20,7 @@
#include "dmr/Control.h"
using namespace dmr;
+using namespace dmr::defines;
#include
#include
@@ -125,7 +126,7 @@ void Control::setOptions(yaml::Node& conf, bool supervisor, ::lookups::VoiceChDa
Slot::m_verifyReg = dmrProtocol["verifyReg"].as(false);
- uint8_t nRandWait = (uint8_t)dmrProtocol["nRandWait"].as(dmr::DEFAULT_NRAND_WAIT);
+ uint8_t nRandWait = (uint8_t)dmrProtocol["nRandWait"].as(DEFAULT_NRAND_WAIT);
if (nRandWait > 15U)
nRandWait = 15U;
uint8_t backOff = (uint8_t)dmrProtocol["backOff"].as(1U);
@@ -181,28 +182,28 @@ void Control::setOptions(yaml::Node& conf, bool supervisor, ::lookups::VoiceChDa
/*
** Voice Silence and Frame Loss Thresholds
*/
- uint32_t silenceThreshold = dmrProtocol["silenceThreshold"].as(dmr::DEFAULT_SILENCE_THRESHOLD);
+ uint32_t silenceThreshold = dmrProtocol["silenceThreshold"].as(DEFAULT_SILENCE_THRESHOLD);
if (silenceThreshold > MAX_DMR_VOICE_ERRORS) {
- LogWarning(LOG_DMR, "Silence threshold > %u, defaulting to %u", dmr::MAX_DMR_VOICE_ERRORS, dmr::DEFAULT_SILENCE_THRESHOLD);
- silenceThreshold = dmr::DEFAULT_SILENCE_THRESHOLD;
+ LogWarning(LOG_DMR, "Silence threshold > %u, defaulting to %u", MAX_DMR_VOICE_ERRORS, DEFAULT_SILENCE_THRESHOLD);
+ silenceThreshold = DEFAULT_SILENCE_THRESHOLD;
}
// either MAX_DMR_VOICE_ERRORS or 0 will disable the threshold logic
if (silenceThreshold == 0U) {
- LogWarning(LOG_DMR, "Silence threshold set to zero, defaulting to %u", dmr::MAX_DMR_VOICE_ERRORS);
- silenceThreshold = dmr::MAX_DMR_VOICE_ERRORS;
+ LogWarning(LOG_DMR, "Silence threshold set to zero, defaulting to %u", MAX_DMR_VOICE_ERRORS);
+ silenceThreshold = MAX_DMR_VOICE_ERRORS;
}
m_slot1->setSilenceThreshold(silenceThreshold);
m_slot2->setSilenceThreshold(silenceThreshold);
- uint8_t frameLossThreshold = (uint8_t)dmrProtocol["frameLossThreshold"].as(dmr::DEFAULT_FRAME_LOSS_THRESHOLD);
+ uint8_t frameLossThreshold = (uint8_t)dmrProtocol["frameLossThreshold"].as(DEFAULT_FRAME_LOSS_THRESHOLD);
if (frameLossThreshold == 0U) {
frameLossThreshold = 1U;
}
- if (frameLossThreshold > dmr::DEFAULT_FRAME_LOSS_THRESHOLD * 2U) {
- LogWarning(LOG_DMR, "Frame loss threshold may be excessive, default is %u, configured is %u", dmr::DEFAULT_FRAME_LOSS_THRESHOLD, frameLossThreshold);
+ if (frameLossThreshold > DEFAULT_FRAME_LOSS_THRESHOLD * 2U) {
+ LogWarning(LOG_DMR, "Frame loss threshold may be excessive, default is %u, configured is %u", DEFAULT_FRAME_LOSS_THRESHOLD, frameLossThreshold);
}
m_slot1->setFrameLossThreshold(frameLossThreshold);
@@ -286,16 +287,16 @@ bool Control::processWakeup(const uint8_t* data)
assert(data != nullptr);
// wakeups always come in on slot 1
- if (data[0U] != modem::TAG_DATA || data[1U] != (DMR_IDLE_RX | DMR_SYNC_DATA | DT_CSBK))
+ if (data[0U] != modem::TAG_DATA || data[1U] != (IDLE_RX | SYNC_DATA | DataType::CSBK))
return false;
// generate a new CSBK and check validity
- std::unique_ptr csbk = lc::csbk::CSBKFactory::createCSBK(data + 2U, DT_CSBK);
+ std::unique_ptr csbk = lc::csbk::CSBKFactory::createCSBK(data + 2U, DataType::CSBK);
if (csbk == nullptr)
return false;
uint8_t csbko = csbk->getCSBKO();
- if (csbko != CSBKO_BSDWNACT)
+ if (csbko != CSBKO::BSDWNACT)
return false;
uint32_t srcId = csbk->getSrcId();
@@ -303,12 +304,12 @@ bool Control::processWakeup(const uint8_t* data)
// check the srcId against the ACL control
bool ret = acl::AccessControl::validateSrcId(srcId);
if (!ret) {
- LogError(LOG_RF, "DMR, invalid CSBKO_BSDWNACT, srcId = %u", srcId);
+ LogError(LOG_RF, "DMR, invalid CSBKO, BSDWNACT, srcId = %u", srcId);
return false;
}
if (m_verbose) {
- LogMessage(LOG_RF, "DMR, CSBKO_BSDWNACT, srcId = %u", srcId);
+ LogMessage(LOG_RF, "DMR, CSBKO, BSDWNACT, srcId = %u", srcId);
}
return true;
@@ -743,7 +744,7 @@ void Control::processNetwork()
uint32_t srcId = __GET_UINT16(buffer, 5U);
uint32_t dstId = __GET_UINT16(buffer, 8U);
- uint8_t flco = (buffer[15U] & 0x40U) == 0x40U ? dmr::FLCO_PRIVATE : dmr::FLCO_GROUP;
+ FLCO::E flco = (buffer[15U] & 0x40U) == 0x40U ? FLCO::PRIVATE : FLCO::GROUP;
uint32_t slotNo = (buffer[15U] & 0x80U) == 0x80U ? 2U : 1U;
@@ -783,20 +784,20 @@ void Control::processNetwork()
// process raw DMR data bytes
if (dataSync) {
- uint8_t dataType = buffer[15U] & 0x0FU;
+ DataType::E dataType = (DataType::E)(buffer[15U] & 0x0FU);
data.setData(buffer.get() + 20U);
data.setDataType(dataType);
data.setN(0U);
}
else if (voiceSync) {
data.setData(buffer.get() + 20U);
- data.setDataType(dmr::DT_VOICE_SYNC);
+ data.setDataType(DataType::VOICE_SYNC);
data.setN(0U);
}
else {
uint8_t n = buffer[15U] & 0x0FU;
data.setData(buffer.get() + 20U);
- data.setDataType(dmr::DT_VOICE);
+ data.setDataType(DataType::VOICE);
data.setN(n);
}
diff --git a/src/host/dmr/Slot.cpp b/src/host/dmr/Slot.cpp
index 8198cf99..63ec3f0c 100644
--- a/src/host/dmr/Slot.cpp
+++ b/src/host/dmr/Slot.cpp
@@ -27,6 +27,7 @@
#include "ActivityLog.h"
using namespace dmr;
+using namespace dmr::defines;
using namespace dmr::packet;
#include
@@ -71,10 +72,10 @@ uint32_t Slot::m_jitterSlots = 6U;
uint8_t* Slot::m_idle = nullptr;
-uint8_t Slot::m_flco1;
+FLCO::E Slot::m_flco1;
uint8_t Slot::m_id1 = 0U;
bool Slot::m_voice1 = true;
-uint8_t Slot::m_flco2;
+FLCO::E Slot::m_flco2;
uint8_t Slot::m_id2 = 0U;
bool Slot::m_voice2 = true;
@@ -270,8 +271,8 @@ bool Slot::processFrame(uint8_t *data, uint32_t len)
m_rssiCount++;
}
- bool dataSync = (data[1U] & DMR_SYNC_DATA) == DMR_SYNC_DATA;
- bool voiceSync = (data[1U] & DMR_SYNC_VOICE) == DMR_SYNC_VOICE;
+ bool dataSync = (data[1U] & SYNC_DATA) == SYNC_DATA;
+ bool voiceSync = (data[1U] & SYNC_VOICE) == SYNC_VOICE;
if (!(dataSync || voiceSync) && m_rfState == RS_RF_LISTENING) {
uint8_t sync[DMR_SYNC_LENGTH_BYTES];
@@ -280,12 +281,12 @@ bool Slot::processFrame(uint8_t *data, uint32_t len)
// count data sync errors
uint8_t dataErrs = 0U;
for (uint8_t i = 0U; i < DMR_SYNC_LENGTH_BYTES; i++)
- dataErrs += Utils::countBits8(sync[i] ^ DMR_MS_DATA_SYNC_BYTES[i]);
+ dataErrs += Utils::countBits8(sync[i] ^ MS_DATA_SYNC_BYTES[i]);
// count voice sync errors
uint8_t voiceErrs = 0U;
for (uint8_t i = 0U; i < DMR_SYNC_LENGTH_BYTES; i++)
- voiceErrs += Utils::countBits8(sync[i] ^ DMR_MS_VOICE_SYNC_BYTES[i]);
+ voiceErrs += Utils::countBits8(sync[i] ^ MS_VOICE_SYNC_BYTES[i]);
LogWarning(LOG_RF, "DMR, possible sync word rejected, dataErrs = %u, voiceErrs = %u, sync word = %02X %02X %02X %02X %02X %02X", dataErrs, voiceErrs,
sync[0U], sync[1U], sync[2U], sync[3U], sync[4U], sync[5U]);
@@ -299,9 +300,9 @@ bool Slot::processFrame(uint8_t *data, uint32_t len)
m_rfTGHang.start();
if (dataSync) {
- uint8_t dataType = data[1U] & 0x0FU;
+ DataType::E dataType = (DataType::E)(data[1U] & 0x0FU);
- if (dataType == DT_CSBK) {
+ if (dataType == DataType::CSBK) {
return m_control->process(data, len);
}
@@ -310,15 +311,15 @@ bool Slot::processFrame(uint8_t *data, uint32_t len)
switch (dataType)
{
- case DT_VOICE_LC_HEADER:
- case DT_VOICE_PI_HEADER:
+ case DataType::VOICE_LC_HEADER:
+ case DataType::VOICE_PI_HEADER:
return m_voice->process(data, len);
- case DT_TERMINATOR_WITH_LC:
+ case DataType::TERMINATOR_WITH_LC:
m_frameLossCnt = 0U;
- case DT_DATA_HEADER:
- case DT_RATE_12_DATA:
- case DT_RATE_34_DATA:
- case DT_RATE_1_DATA:
+ case DataType::DATA_HEADER:
+ case DataType::RATE_12_DATA:
+ case DataType::RATE_34_DATA:
+ case DataType::RATE_1_DATA:
default:
return m_data->process(data, len);
}
@@ -420,30 +421,30 @@ void Slot::processNetwork(const data::Data& dmrData)
m_networkWatchdog.start();
- uint8_t dataType = dmrData.getDataType();
+ DataType::E dataType = dmrData.getDataType();
// ignore non-CSBK data destined for the TSCC slot
if (m_enableTSCC && m_dedicatedTSCC && m_slotNo == m_dmr->m_tsccSlotNo &&
- dataType != DT_CSBK) {
+ dataType != DataType::CSBK) {
return;
}
switch (dataType)
{
- case DT_CSBK:
+ case DataType::CSBK:
m_control->processNetwork(dmrData);
break;
- case DT_VOICE_LC_HEADER:
- case DT_VOICE_PI_HEADER:
- case DT_VOICE_SYNC:
- case DT_VOICE:
+ case DataType::VOICE_LC_HEADER:
+ case DataType::VOICE_PI_HEADER:
+ case DataType::VOICE_SYNC:
+ case DataType::VOICE:
m_voice->processNetwork(dmrData);
break;
- case DT_TERMINATOR_WITH_LC:
- case DT_DATA_HEADER:
- case DT_RATE_12_DATA:
- case DT_RATE_34_DATA:
- case DT_RATE_1_DATA:
+ case DataType::TERMINATOR_WITH_LC:
+ case DataType::DATA_HEADER:
+ case DataType::RATE_12_DATA:
+ case DataType::RATE_34_DATA:
+ case DataType::RATE_1_DATA:
default:
m_data->processNetwork(dmrData);
break;
@@ -542,7 +543,7 @@ void Slot::clock()
}
if ((m_dmr->m_tsccCnt % 2) > 0) {
- setShortLC(m_slotNo, m_tsccPayloadDstId, m_tsccPayloadGroup ? FLCO_GROUP : FLCO_PRIVATE, m_tsccPayloadVoice);
+ setShortLC(m_slotNo, m_tsccPayloadDstId, m_tsccPayloadGroup ? FLCO::GROUP : FLCO::PRIVATE, m_tsccPayloadVoice);
}
}
}
@@ -971,7 +972,7 @@ void Slot::init(Control* dmr, bool authoritative, uint32_t colorCode, SiteData s
HTTP_PUT, PUT_DMR_TSCC_PAYLOAD_ACT, req, voiceChData.ssl(), REST_QUICK_WAIT, tscc->m_debug);
}
else {
- ::LogError(LOG_DMR, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to clear payload channel, chNo = %u, slot = %u", tscc->m_slotNo, chNo, slot);
+ ::LogError(LOG_DMR, "DMR Slot %u, CSBK, RAND (Random Access), failed to clear payload channel, chNo = %u, slot = %u", tscc->m_slotNo, chNo, slot);
}
// callback REST API to clear TG permit for the granted TG on the specified voice channel
@@ -988,7 +989,7 @@ void Slot::init(Control* dmr, bool authoritative, uint32_t colorCode, SiteData s
HTTP_PUT, PUT_PERMIT_TG, req, voiceChData.ssl(), REST_QUICK_WAIT, m_dmr->m_debug);
}
else {
- ::LogError(LOG_DMR, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to clear TG permit, chNo = %u, slot = %u", tscc->m_slotNo, chNo, slot);
+ ::LogError(LOG_DMR, "DMR Slot %u, CSBK, RAND (Random Access), failed to clear TG permit, chNo = %u, slot = %u", tscc->m_slotNo, chNo, slot);
}
}
}
@@ -1010,12 +1011,12 @@ void Slot::init(Control* dmr, bool authoritative, uint32_t colorCode, SiteData s
m_jitterSlots = (uint32_t)(std::ceil(jitter_tmp) * 6.0F);
m_idle = new uint8_t[DMR_FRAME_LENGTH_BYTES + 2U];
- ::memcpy(m_idle, DMR_IDLE_DATA, DMR_FRAME_LENGTH_BYTES + 2U);
+ ::memcpy(m_idle, IDLE_DATA, DMR_FRAME_LENGTH_BYTES + 2U);
// Generate the Slot Type for the Idle frame
SlotType slotType;
slotType.setColorCode(colorCode);
- slotType.setDataType(DT_IDLE);
+ slotType.setDataType(DataType::IDLE);
slotType.encode(m_idle + 2U);
}
@@ -1030,7 +1031,7 @@ void Slot::init(Control* dmr, bool authoritative, uint32_t colorCode, SiteData s
///
void Slot::setSiteData(::lookups::VoiceChData controlChData, uint32_t netId, uint8_t siteId, uint8_t channelId, uint32_t channelNo, bool requireReg)
{
- m_siteData = SiteData(SITE_MODEL_SMALL, netId, siteId, 3U, requireReg);
+ m_siteData = SiteData(SiteModel::SMALL, netId, siteId, 3U, requireReg);
m_channelNo = channelNo;
std::vector<::lookups::IdenTable> entries = m_idenTable->list();
@@ -1254,7 +1255,7 @@ void Slot::notifyCC_TouchGrant(uint32_t dstId)
///
///
///
-void Slot::writeNetwork(const uint8_t* data, uint8_t dataType, uint8_t errors, bool noSequence)
+void Slot::writeNetwork(const uint8_t* data, DataType::E dataType, uint8_t errors, bool noSequence)
{
assert(data != nullptr);
assert(m_rfLC != nullptr);
@@ -1272,7 +1273,7 @@ void Slot::writeNetwork(const uint8_t* data, uint8_t dataType, uint8_t errors, b
///
///
///
-void Slot::writeNetwork(const uint8_t* data, uint8_t dataType, uint8_t flco, uint32_t srcId,
+void Slot::writeNetwork(const uint8_t* data, DataType::E dataType, FLCO::E flco, uint32_t srcId,
uint32_t dstId, uint8_t errors, bool noSequence)
{
assert(data != nullptr);
@@ -1324,11 +1325,11 @@ void Slot::writeEndRF(bool writeEnd)
Sync::addDMRDataSync(data + 2U, m_duplex);
lc::FullLC fullLC;
- fullLC.encode(*m_rfLC, data + 2U, DT_TERMINATOR_WITH_LC);
+ fullLC.encode(*m_rfLC, data + 2U, DataType::TERMINATOR_WITH_LC);
SlotType slotType;
slotType.setColorCode(m_colorCode);
- slotType.setDataType(DT_TERMINATOR_WITH_LC);
+ slotType.setDataType(DataType::TERMINATOR_WITH_LC);
slotType.encode(data + 2U);
data[0U] = modem::TAG_EOT;
@@ -1375,11 +1376,11 @@ void Slot::writeEndNet(bool writeEnd)
Sync::addDMRDataSync(data + 2U, m_duplex);
lc::FullLC fullLC;
- fullLC.encode(*m_netLC, data + 2U, DT_TERMINATOR_WITH_LC);
+ fullLC.encode(*m_netLC, data + 2U, DataType::TERMINATOR_WITH_LC);
SlotType slotType;
slotType.setColorCode(m_colorCode);
- slotType.setDataType(DT_TERMINATOR_WITH_LC);
+ slotType.setDataType(DataType::TERMINATOR_WITH_LC);
slotType.encode(data + 2U);
data[0U] = modem::TAG_EOT;
@@ -1568,7 +1569,7 @@ void Slot::clearTSCCActivated()
///
///
///
-void Slot::setShortLC(uint32_t slotNo, uint32_t id, uint8_t flco, bool voice)
+void Slot::setShortLC(uint32_t slotNo, uint32_t id, FLCO::E flco, bool voice)
{
assert(m_modem != nullptr);
@@ -1607,7 +1608,7 @@ void Slot::setShortLC(uint32_t slotNo, uint32_t id, uint8_t flco, bool voice)
return;
uint8_t lc[5U];
- lc[0U] = SLCO_ACT;
+ lc[0U] = SLCO::ACT;
lc[1U] = 0x00U;
lc[2U] = 0x00U;
lc[3U] = 0x00U;
@@ -1615,13 +1616,13 @@ void Slot::setShortLC(uint32_t slotNo, uint32_t id, uint8_t flco, bool voice)
if (m_id1 != 0U) {
lc[2U] = m_id1;
if (m_voice1) {
- if (m_flco1 == FLCO_GROUP)
+ if (m_flco1 == FLCO::GROUP)
lc[1U] |= 0x80U;
else
lc[1U] |= 0x90U;
}
else {
- if (m_flco1 == FLCO_GROUP)
+ if (m_flco1 == FLCO::GROUP)
lc[1U] |= 0xB0U;
else
lc[1U] |= 0xA0U;
@@ -1631,13 +1632,13 @@ void Slot::setShortLC(uint32_t slotNo, uint32_t id, uint8_t flco, bool voice)
if (m_id2 != 0U) {
lc[3U] = m_id2;
if (m_voice2) {
- if (m_flco2 == FLCO_GROUP)
+ if (m_flco2 == FLCO::GROUP)
lc[1U] |= 0x08U;
else
lc[1U] |= 0x09U;
}
else {
- if (m_flco2 == FLCO_GROUP)
+ if (m_flco2 == FLCO::GROUP)
lc[1U] |= 0x0BU;
else
lc[1U] |= 0x0AU;
@@ -1665,30 +1666,30 @@ void Slot::setShortLC_TSCC(SiteData siteData, uint16_t counter)
uint8_t lc[5U];
uint32_t lcValue = 0U;
- lcValue = SLCO_TSCC;
+ lcValue = SLCO::TSCC;
lcValue = (lcValue << 2) + siteData.siteModel();
switch (siteData.siteModel())
{
- case SITE_MODEL_TINY:
+ case SiteModel::TINY:
{
lcValue = (lcValue << 9) + siteData.netId();
lcValue = (lcValue << 3) + siteData.siteId();
}
break;
- case SITE_MODEL_SMALL:
+ case SiteModel::SMALL:
{
lcValue = (lcValue << 7) + siteData.netId();
lcValue = (lcValue << 5) + siteData.siteId();
}
break;
- case SITE_MODEL_LARGE:
+ case SiteModel::LARGE:
{
lcValue = (lcValue << 5) + siteData.netId();
lcValue = (lcValue << 7) + siteData.siteId();
}
break;
- case SITE_MODEL_HUGE:
+ case SiteModel::HUGE:
{
lcValue = (lcValue << 2) + siteData.netId();
lcValue = (lcValue << 10) + siteData.siteId();
@@ -1728,30 +1729,30 @@ void Slot::setShortLC_Payload(SiteData siteData, uint16_t counter)
uint8_t lc[5U];
uint32_t lcValue = 0U;
- lcValue = SLCO_PAYLOAD;
+ lcValue = SLCO::PAYLOAD;
lcValue = (lcValue << 2) + siteData.siteModel();
switch (siteData.siteModel())
{
- case SITE_MODEL_TINY:
+ case SiteModel::TINY:
{
lcValue = (lcValue << 9) + siteData.netId();
lcValue = (lcValue << 3) + siteData.siteId();
}
break;
- case SITE_MODEL_SMALL:
+ case SiteModel::SMALL:
{
lcValue = (lcValue << 7) + siteData.netId();
lcValue = (lcValue << 5) + siteData.siteId();
}
break;
- case SITE_MODEL_LARGE:
+ case SiteModel::LARGE:
{
lcValue = (lcValue << 5) + siteData.netId();
lcValue = (lcValue << 7) + siteData.siteId();
}
break;
- case SITE_MODEL_HUGE:
+ case SiteModel::HUGE:
{
lcValue = (lcValue << 2) + siteData.netId();
lcValue = (lcValue << 10) + siteData.siteId();
diff --git a/src/host/dmr/Slot.h b/src/host/dmr/Slot.h
index def929e3..f986997b 100644
--- a/src/host/dmr/Slot.h
+++ b/src/host/dmr/Slot.h
@@ -278,11 +278,11 @@ namespace dmr
static uint8_t* m_idle;
- static uint8_t m_flco1;
+ static defines::FLCO::E m_flco1;
static uint8_t m_id1;
static bool m_voice1;
- static uint8_t m_flco2;
+ static defines::FLCO::E m_flco2;
static uint8_t m_id2;
static bool m_voice2;
@@ -303,9 +303,9 @@ namespace dmr
void notifyCC_TouchGrant(uint32_t dstId);
/// Write data frame to the network.
- void writeNetwork(const uint8_t* data, uint8_t dataType, uint8_t errors = 0U, bool noSequence = false);
+ void writeNetwork(const uint8_t* data, defines::DataType::E dataType, uint8_t errors = 0U, bool noSequence = false);
/// Write data frame to the network.
- void writeNetwork(const uint8_t* data, uint8_t dataType, uint8_t flco, uint32_t srcId,
+ void writeNetwork(const uint8_t* data, defines::DataType::E dataType, defines::FLCO::E flco, uint32_t srcId,
uint32_t dstId, uint8_t errors = 0U, bool noSequence = false);
/// Helper to write RF end of frame data.
@@ -320,7 +320,7 @@ namespace dmr
void clearTSCCActivated();
/// Helper to set the DMR short LC.
- static void setShortLC(uint32_t slotNo, uint32_t id, uint8_t flco = FLCO_GROUP, bool voice = true);
+ static void setShortLC(uint32_t slotNo, uint32_t id, defines::FLCO::E flco = defines::FLCO::GROUP, bool voice = true);
/// Helper to set the DMR short LC for TSCC.
static void setShortLC_TSCC(SiteData siteData, uint16_t counter);
/// Helper to set the DMR short LC for payload.
diff --git a/src/host/dmr/lc/csbk/CSBK_DVM_GIT_HASH.cpp b/src/host/dmr/lc/csbk/CSBK_DVM_GIT_HASH.cpp
index 65175be2..e1451896 100644
--- a/src/host/dmr/lc/csbk/CSBK_DVM_GIT_HASH.cpp
+++ b/src/host/dmr/lc/csbk/CSBK_DVM_GIT_HASH.cpp
@@ -7,16 +7,17 @@
* @package DVM / Modem Host Software
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "dmr/lc/csbk/CSBK_DVM_GIT_HASH.h"
#include "HostMain.h"
-using namespace dmr::lc::csbk;
-using namespace dmr::lc;
using namespace dmr;
+using namespace dmr::defines;
+using namespace dmr::lc;
+using namespace dmr::lc::csbk;
#include
@@ -29,8 +30,8 @@ using namespace dmr;
///
CSBK_DVM_GIT_HASH::CSBK_DVM_GIT_HASH() : CSBK()
{
- m_CSBKO = CSBKO_DVM_GIT_HASH;
- m_FID = FID_OCS_DVM;
+ m_CSBKO = CSBKO::DVM_GIT_HASH;
+ m_FID = FID_DVM_OCS;
}
///
@@ -75,5 +76,5 @@ void CSBK_DVM_GIT_HASH::encode(uint8_t* data)
///
std::string CSBK_DVM_GIT_HASH::toString()
{
- return std::string("CSBKO_DVM_GIT_HASH (DVM Git Hash Identifier)");
+ return std::string("CSBKO, DVM_GIT_HASH (DVM Git Hash Identifier)");
}
diff --git a/src/host/dmr/packet/ControlSignaling.cpp b/src/host/dmr/packet/ControlSignaling.cpp
index 27aca4bb..f33c0d1d 100644
--- a/src/host/dmr/packet/ControlSignaling.cpp
+++ b/src/host/dmr/packet/ControlSignaling.cpp
@@ -27,6 +27,7 @@
#include "ActivityLog.h"
using namespace dmr;
+using namespace dmr::defines;
using namespace dmr::lc::csbk;
using namespace dmr::packet;
@@ -54,7 +55,7 @@ using namespace dmr::packet;
#define IS_SUPPORT_CONTROL_CHECK(_PCKT_STR, _PCKT, _SRCID) \
if (!m_slot->m_dmr->getTSCCSlot()->m_enableTSCC) { \
LogWarning(LOG_RF, "DMR Slot %u, %s denial, unsupported service, srcId = %u", m_slot->m_slotNo, _PCKT_STR.c_str(), _SRCID); \
- writeRF_CSBK_ACK_RSP(_SRCID, TS_DENY_RSN_SYS_UNSUPPORTED_SVC, 0U); \
+ writeRF_CSBK_ACK_RSP(_SRCID, ReasonCode::TS_DENY_RSN_SYS_UNSUPPORTED_SVC, 0U); \
return false; \
}
@@ -62,7 +63,7 @@ using namespace dmr::packet;
#define VALID_SRCID(_PCKT_STR, _PCKT, _SRCID) \
if (!acl::AccessControl::validateSrcId(_SRCID)) { \
LogWarning(LOG_RF, "DMR Slot %u, %s denial, RID rejection, srcId = %u", m_slot->m_slotNo, _PCKT_STR.c_str(), _SRCID); \
- writeRF_CSBK_ACK_RSP(_SRCID, TS_DENY_RSN_PERM_USER_REFUSED, 0U); \
+ writeRF_CSBK_ACK_RSP(_SRCID, ReasonCode::TS_DENY_RSN_PERM_USER_REFUSED, 0U); \
return false; \
}
@@ -70,7 +71,7 @@ using namespace dmr::packet;
#define VALID_DSTID(_PCKT_STR, _PCKT, _SRCID, _DSTID) \
if (!acl::AccessControl::validateSrcId(_DSTID)) { \
LogWarning(LOG_RF, "DMR Slot %u, %s denial, RID rejection, dstId = %u", m_slot->m_slotNo, _PCKT_STR.c_str(), _DSTID); \
- writeRF_CSBK_ACK_RSP(_SRCID, TS_DENY_RSN_TEMP_USER_REFUSED, 0U); \
+ writeRF_CSBK_ACK_RSP(_SRCID, ReasonCode::TS_DENY_RSN_TEMP_USER_REFUSED, 0U); \
return false; \
}
@@ -78,7 +79,7 @@ using namespace dmr::packet;
#define VALID_TGID(_PCKT_STR, _PCKT, _SRCID, _DSTID) \
if (!acl::AccessControl::validateTGId(0U, _DSTID)) { \
LogWarning(LOG_RF, "DMR Slot %u, %s denial, TGID rejection, dstId = %u", m_slot->m_slotNo, _PCKT_STR.c_str(), _DSTID); \
- writeRF_CSBK_ACK_RSP(_SRCID, TS_DENY_RSN_TGT_GROUP_NOT_VALID, 0U); \
+ writeRF_CSBK_ACK_RSP(_SRCID, ReasonCode::TS_DENY_RSN_TGT_GROUP_NOT_VALID, 0U); \
return false; \
}
@@ -86,32 +87,32 @@ using namespace dmr::packet;
#define VERIFY_SRCID_REG(_PCKT_STR, _PCKT, _SRCID) \
if (!m_slot->m_affiliations->isUnitReg(_SRCID) && m_slot->m_verifyReg) { \
LogWarning(LOG_RF, "DMR Slot %u, %s denial, RID not registered, srcId = %u", m_slot->m_slotNo, _PCKT_STR.c_str(), _SRCID); \
- writeRF_CSBK_ACK_RSP(_SRCID, TS_DENY_RSN_PERM_USER_REFUSED, 0U); \
+ writeRF_CSBK_ACK_RSP(_SRCID, ReasonCode::TS_DENY_RSN_PERM_USER_REFUSED, 0U); \
return false; \
}
// Macro helper to verbose log a generic CSBK.
#define VERBOSE_LOG_CSBK(_PCKT_STR, _SRCID, _DSTID) \
if (m_verbose) { \
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, %s, srcId = %u, dstId = %u", m_slot->m_slotNo, _PCKT_STR.c_str(), _SRCID, _DSTID); \
+ LogMessage(LOG_RF, "DMR Slot %u, CSBK, %s, srcId = %u, dstId = %u", m_slot->m_slotNo, _PCKT_STR.c_str(), _SRCID, _DSTID); \
}
// Macro helper to verbose log a generic CSBK.
#define VERBOSE_LOG_CSBK_DST(_PCKT_STR, _DSTID) \
if (m_verbose) { \
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, %s, dstId = %u", m_slot->m_slotNo, _PCKT_STR.c_str(), _DSTID); \
+ LogMessage(LOG_RF, "DMR Slot %u, CSBK, %s, dstId = %u", m_slot->m_slotNo, _PCKT_STR.c_str(), _DSTID); \
}
// Macro helper to verbose log a generic network CSBK.
#define VERBOSE_LOG_CSBK_NET(_PCKT_STR, _SRCID, _DSTID) \
if (m_verbose) { \
- LogMessage(LOG_NET, "DMR Slot %u, DT_CSBK, %s, srcId = %u, dstId = %u", m_slot->m_slotNo, _PCKT_STR.c_str(), _SRCID, _DSTID); \
+ LogMessage(LOG_NET, "DMR Slot %u, CSBK, %s, srcId = %u, dstId = %u", m_slot->m_slotNo, _PCKT_STR.c_str(), _SRCID, _DSTID); \
}
// Macro helper to verbose log a generic network CSBK.
#define DEBUG_LOG_CSBK(_PCKT_STR) \
if (m_debug) { \
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, %s", m_slot->m_slotNo, _PCKT_STR.c_str()); \
+ LogMessage(LOG_RF, "DMR Slot %u, CSBK, %s", m_slot->m_slotNo, _PCKT_STR.c_str()); \
}
// ---------------------------------------------------------------------------
@@ -135,21 +136,21 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len)
{
assert(data != nullptr);
- // Get the type from the packet metadata
- uint8_t dataType = data[1U] & 0x0FU;
+ // get the type from the packet metadata
+ DataType::E dataType = (DataType::E)(data[1U] & 0x0FU);
SlotType slotType;
slotType.setColorCode(m_slot->m_colorCode);
slotType.setDataType(dataType);
- if (dataType == DT_CSBK) {
+ if (dataType == DataType::CSBK) {
// generate a new CSBK and check validity
std::unique_ptr csbk = CSBKFactory::createCSBK(data + 2U, dataType);
if (csbk == nullptr)
return false;
uint8_t csbko = csbk->getCSBKO();
- if (csbko == CSBKO_BSDWNACT)
+ if (csbko == CSBKO::BSDWNACT)
return false;
bool gi = csbk->getGI();
@@ -163,7 +164,7 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len)
// validate the source RID
if (!acl::AccessControl::validateSrcId(srcId)) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK denial, RID rejection, srcId = %u", m_slot->m_slotNo, srcId);
+ LogWarning(LOG_RF, "DMR Slot %u, DataType::CSBK denial, RID rejection, srcId = %u", m_slot->m_slotNo, srcId);
m_slot->m_rfState = RS_RF_REJECTED;
return false;
}
@@ -171,7 +172,7 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len)
// validate the target ID
if (gi) {
if (!acl::AccessControl::validateTGId(m_slot->m_slotNo, dstId)) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK denial, TGID rejection, srcId = %u, dstId = %u", m_slot->m_slotNo, srcId, dstId);
+ LogWarning(LOG_RF, "DMR Slot %u, DataType::CSBK denial, TGID rejection, srcId = %u, dstId = %u", m_slot->m_slotNo, srcId, dstId);
m_slot->m_rfState = RS_RF_REJECTED;
return false;
}
@@ -180,17 +181,17 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len)
bool handled = false;
switch (csbko) {
- case CSBKO_UU_V_REQ:
+ case CSBKO::UU_V_REQ:
VERBOSE_LOG_CSBK(csbk->toString(), srcId, dstId);
break;
- case CSBKO_UU_ANS_RSP:
+ case CSBKO::UU_ANS_RSP:
VERBOSE_LOG_CSBK(csbk->toString(), srcId, dstId);
break;
- case CSBKO_RAND:
+ case CSBKO::RAND:
{
if (csbk->getFID() == FID_DMRA) {
if (m_verbose) {
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, %s, srcId = %u, dstId = %u",
+ LogMessage(LOG_RF, "DMR Slot %u, CSBK, %s, srcId = %u, dstId = %u",
m_slot->m_slotNo, csbk->toString().c_str(), srcId, dstId);
}
@@ -200,25 +201,25 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len)
CSBK_RAND* isp = static_cast(csbk.get());
if (m_verbose) {
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), serviceKind = $%02X, serviceOptions = $%02X, serviceExtra = $%02X, srcId = %u, dstId = %u",
+ LogMessage(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access), serviceKind = $%02X, serviceOptions = $%02X, serviceExtra = $%02X, srcId = %u, dstId = %u",
m_slot->m_slotNo, isp->getServiceKind(), isp->getServiceOptions(), isp->getServiceExtra(), isp->getSrcId(), isp->getDstId());
}
switch (isp->getServiceKind()) {
- case SVC_KIND_IND_VOICE_CALL:
+ case ServiceKind::IND_VOICE_CALL:
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(csbk->toString(), SVC_KIND_IND_VOICE_CALL, srcId);
+ IS_SUPPORT_CONTROL_CHECK(csbk->toString(), ServiceKind::IND_VOICE_CALL, srcId);
// validate the source RID
- VALID_SRCID(csbk->toString(), SVC_KIND_IND_VOICE_CALL, srcId);
+ VALID_SRCID(csbk->toString(), ServiceKind::IND_VOICE_CALL, srcId);
// validate the target RID
- VALID_DSTID(csbk->toString(), SVC_KIND_IND_VOICE_CALL, srcId, dstId);
+ VALID_DSTID(csbk->toString(), ServiceKind::IND_VOICE_CALL, srcId, dstId);
// verify the source RID is registered
- VERIFY_SRCID_REG(csbk->toString(), SVC_KIND_IND_VOICE_CALL, srcId);
+ VERIFY_SRCID_REG(csbk->toString(), ServiceKind::IND_VOICE_CALL, srcId);
- writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 1U);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_WAIT_RSN, 1U);
if (m_slot->m_authoritative) {
writeRF_CSBK_Grant(srcId, dstId, isp->getServiceOptions(), false);
@@ -227,17 +228,17 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len)
m_slot->m_network->writeGrantReq(modem::DVM_STATE::STATE_DMR, srcId, dstId, m_slot->m_slotNo, true);
}
break;
- case SVC_KIND_GRP_VOICE_CALL:
+ case ServiceKind::GRP_VOICE_CALL:
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(csbk->toString(), SVC_KIND_GRP_VOICE_CALL, srcId);
+ IS_SUPPORT_CONTROL_CHECK(csbk->toString(), ServiceKind::GRP_VOICE_CALL, srcId);
// validate the source RID
- VALID_SRCID(csbk->toString(), SVC_KIND_GRP_VOICE_CALL, srcId);
+ VALID_SRCID(csbk->toString(), ServiceKind::GRP_VOICE_CALL, srcId);
// validate the talkgroup ID
- VALID_TGID(csbk->toString(), SVC_KIND_GRP_VOICE_CALL, srcId, dstId);
+ VALID_TGID(csbk->toString(), ServiceKind::GRP_VOICE_CALL, srcId, dstId);
- writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 1U);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_WAIT_RSN, 1U);
if (m_slot->m_authoritative) {
writeRF_CSBK_Grant(srcId, dstId, isp->getServiceOptions(), true);
@@ -246,117 +247,117 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len)
m_slot->m_network->writeGrantReq(modem::DVM_STATE::STATE_DMR, srcId, dstId, m_slot->m_slotNo, false);
}
break;
- case SVC_KIND_IND_DATA_CALL:
- case SVC_KIND_IND_UDT_DATA_CALL:
+ case ServiceKind::IND_DATA_CALL:
+ case ServiceKind::IND_UDT_DATA_CALL:
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(csbk->toString(), SVC_KIND_IND_VOICE_CALL, srcId);
+ IS_SUPPORT_CONTROL_CHECK(csbk->toString(), ServiceKind::IND_VOICE_CALL, srcId);
// validate the source RID
- VALID_SRCID(csbk->toString(), SVC_KIND_IND_VOICE_CALL, srcId);
+ VALID_SRCID(csbk->toString(), ServiceKind::IND_VOICE_CALL, srcId);
// validate the target RID
- VALID_DSTID(csbk->toString(), SVC_KIND_IND_VOICE_CALL, srcId, dstId);
+ VALID_DSTID(csbk->toString(), ServiceKind::IND_VOICE_CALL, srcId, dstId);
// verify the source RID is registered
- VERIFY_SRCID_REG(csbk->toString(), SVC_KIND_IND_VOICE_CALL, srcId);
+ VERIFY_SRCID_REG(csbk->toString(), ServiceKind::IND_VOICE_CALL, srcId);
- writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 0U);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_WAIT_RSN, 0U);
writeRF_CSBK_Data_Grant(srcId, dstId, isp->getServiceOptions(), false);
break;
- case SVC_KIND_GRP_DATA_CALL:
- case SVC_KIND_GRP_UDT_DATA_CALL:
+ case ServiceKind::GRP_DATA_CALL:
+ case ServiceKind::GRP_UDT_DATA_CALL:
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(csbk->toString(), SVC_KIND_GRP_VOICE_CALL, srcId);
+ IS_SUPPORT_CONTROL_CHECK(csbk->toString(), ServiceKind::GRP_VOICE_CALL, srcId);
// validate the source RID
- VALID_SRCID(csbk->toString(), SVC_KIND_GRP_VOICE_CALL, srcId);
+ VALID_SRCID(csbk->toString(), ServiceKind::GRP_VOICE_CALL, srcId);
// validate the talkgroup ID
- VALID_TGID(csbk->toString(), SVC_KIND_GRP_VOICE_CALL, srcId, dstId);
+ VALID_TGID(csbk->toString(), ServiceKind::GRP_VOICE_CALL, srcId, dstId);
- writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 0U);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_WAIT_RSN, 0U);
writeRF_CSBK_Data_Grant(srcId, dstId, isp->getServiceOptions(), true);
break;
- case SVC_KIND_REG_SVC:
+ case ServiceKind::REG_SVC:
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(csbk->toString(), SVC_KIND_REG_SVC, srcId);
+ IS_SUPPORT_CONTROL_CHECK(csbk->toString(), ServiceKind::REG_SVC, srcId);
writeRF_CSBK_U_Reg_Rsp(srcId, isp->getServiceOptions());
break;
default:
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), unhandled service, serviceKind = %02X", m_slot->m_slotNo, isp->getServiceKind());
+ LogWarning(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access), unhandled service, serviceKind = %02X", m_slot->m_slotNo, isp->getServiceKind());
// should we drop the CSBK and not repeat it?
break;
}
}
}
break;
- case CSBKO_ACK_RSP:
+ case CSBKO::ACK_RSP:
{
VERBOSE_LOG_CSBK(csbk->toString(), srcId, dstId);
::ActivityLog("DMR", true, "Slot %u ack response from %u to %u", m_slot->m_slotNo, srcId, dstId);
}
break;
- case CSBKO_EXT_FNCT:
+ case CSBKO::EXT_FNCT:
{
CSBK_EXT_FNCT* isp = static_cast(csbk.get());
if (m_verbose) {
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, %s, op = $%02X, arg = %u, tgt = %u",
+ LogMessage(LOG_RF, "DMR Slot %u, CSBK, %s, op = $%02X, arg = %u, tgt = %u",
m_slot->m_slotNo, csbk->toString().c_str(), isp->getExtendedFunction(), dstId, srcId);
}
// generate activity log entry
switch (isp->getExtendedFunction()) {
- case DMR_EXT_FNCT_CHECK:
+ case ExtendedFunctions::CHECK:
::ActivityLog("DMR", true, "Slot %u radio check request from %u to %u", m_slot->m_slotNo, dstId, srcId);
break;
- case DMR_EXT_FNCT_INHIBIT:
+ case ExtendedFunctions::INHIBIT:
::ActivityLog("DMR", true, "Slot %u radio inhibit request from %u to %u", m_slot->m_slotNo, dstId, srcId);
break;
- case DMR_EXT_FNCT_UNINHIBIT:
+ case ExtendedFunctions::UNINHIBIT:
::ActivityLog("DMR", true, "Slot %u radio uninhibit request from %u to %u", m_slot->m_slotNo, dstId, srcId);
break;
- case DMR_EXT_FNCT_CHECK_ACK:
+ case ExtendedFunctions::CHECK_ACK:
::ActivityLog("DMR", true, "Slot %u radio check response from %u to %u", m_slot->m_slotNo, dstId, srcId);
break;
- case DMR_EXT_FNCT_INHIBIT_ACK:
+ case ExtendedFunctions::INHIBIT_ACK:
::ActivityLog("DMR", true, "Slot %u radio inhibit response from %u to %u", m_slot->m_slotNo, dstId, srcId);
break;
- case DMR_EXT_FNCT_UNINHIBIT_ACK:
+ case ExtendedFunctions::UNINHIBIT_ACK:
::ActivityLog("DMR", true, "Slot %u radio uninhibit response from %u to %u", m_slot->m_slotNo, dstId, srcId);
break;
default:
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, %s, unhandled op, op = $%02X", m_slot->m_slotNo, csbk->toString().c_str(), isp->getExtendedFunction());
+ LogWarning(LOG_RF, "DMR Slot %u, CSBK, %s, unhandled op, op = $%02X", m_slot->m_slotNo, csbk->toString().c_str(), isp->getExtendedFunction());
break;
}
}
break;
- case CSBKO_NACK_RSP:
+ case CSBKO::NACK_RSP:
{
VERBOSE_LOG_CSBK(csbk->toString(), srcId, dstId);
}
break;
- case CSBKO_MAINT:
+ case CSBKO::MAINT:
{
CSBK_MAINT* isp = static_cast(csbk.get());
if (m_verbose) {
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, %s, kind = $%02X, srcId = %u",
+ LogMessage(LOG_RF, "DMR Slot %u, CSBK, %s, kind = $%02X, srcId = %u",
m_slot->m_slotNo, csbk->toString().c_str(), isp->getMaintKind(), srcId);
}
}
break;
- case CSBKO_PRECCSBK:
+ case CSBKO::PRECCSBK:
{
if (m_verbose) {
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_PRECCSBK (%s Preamble CSBK), toFollow = %u, srcId = %u, dstId = %u",
+ LogMessage(LOG_RF, "DMR Slot %u, , CSBK, PRECCSBK (%s Preamble CSBK), toFollow = %u, srcId = %u, dstId = %u",
m_slot->m_slotNo, csbk->getDataContent() ? "Data" : "CSBK", csbk->getCBF(), srcId, dstId);
}
}
break;
default:
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, unhandled CSBK, csbko = $%02X, fid = $%02X", m_slot->m_slotNo, csbko, csbk->getFID());
+ LogWarning(LOG_RF, "DMR Slot %u, CSBK, unhandled CSBK, csbko = $%02X, fid = $%02X", m_slot->m_slotNo, csbko, csbk->getFID());
// should we drop the CSBK and not repeat it?
break;
}
@@ -379,7 +380,7 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len)
if (m_slot->m_duplex)
m_slot->addFrame(data);
- m_slot->writeNetwork(data, DT_CSBK, gi ? FLCO_GROUP : FLCO_PRIVATE, srcId, dstId, 0U, true);
+ m_slot->writeNetwork(data, DataType::CSBK, gi ? FLCO::GROUP : FLCO::PRIVATE, srcId, dstId, 0U, true);
}
return true;
@@ -394,26 +395,26 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len)
///
void ControlSignaling::processNetwork(const data::Data & dmrData)
{
- uint8_t dataType = dmrData.getDataType();
+ DataType::E dataType = dmrData.getDataType();
uint8_t data[DMR_FRAME_LENGTH_BYTES + 2U];
dmrData.getData(data + 2U);
- if (dataType == DT_CSBK) {
+ if (dataType == DataType::CSBK) {
std::unique_ptr csbk = CSBKFactory::createCSBK(data + 2U, dataType);
if (csbk == nullptr) {
- LogError(LOG_NET, "DMR Slot %u, DT_CSBK, unable to decode the network CSBK", m_slot->m_slotNo);
+ LogError(LOG_NET, "DMR Slot %u, CSBK, unable to decode the network CSBK", m_slot->m_slotNo);
return;
}
uint8_t csbko = csbk->getCSBKO();
- if (csbko == CSBKO_BSDWNACT)
+ if (csbko == CSBKO::BSDWNACT)
return;
// handle updating internal adjacent site information
- if (csbko == CSBKO_BROADCAST) {
+ if (csbko == CSBKO::BROADCAST) {
CSBK_BROADCAST* osp = static_cast(csbk.get());
- if (osp->getAnncType() == BCAST_ANNC_ANN_WD_TSCC) {
+ if (osp->getAnncType() == BroadcastAnncType::ANN_WD_TSCC) {
if (!m_slot->m_enableTSCC) {
return;
}
@@ -428,7 +429,7 @@ void ControlSignaling::processNetwork(const data::Data & dmrData)
}
if (m_verbose) {
- LogMessage(LOG_NET, "DMR Slot %u, DT_CSBK, %s, sysId = $%03X, chNo = %u", m_slot->m_slotNo, csbk->toString().c_str(),
+ LogMessage(LOG_NET, "DMR Slot %u, CSBK, %s, sysId = $%03X, chNo = %u", m_slot->m_slotNo, csbk->toString().c_str(),
osp->getSystemId(), osp->getLogicalCh1());
}
@@ -451,21 +452,21 @@ void ControlSignaling::processNetwork(const data::Data & dmrData)
bool handled = false;
switch (csbko) {
- case CSBKO_UU_V_REQ:
+ case CSBKO::UU_V_REQ:
{
VERBOSE_LOG_CSBK_NET(csbk->toString(), srcId, dstId);
}
break;
- case CSBKO_UU_ANS_RSP:
+ case CSBKO::UU_ANS_RSP:
{
VERBOSE_LOG_CSBK_NET(csbk->toString(), srcId, dstId);
}
break;
- case CSBKO_RAND:
+ case CSBKO::RAND:
{
if (csbk->getFID() == FID_DMRA) {
if (m_verbose) {
- LogMessage(LOG_NET, "DMR Slot %u, DT_CSBK, %s, srcId = %u, dstId = %u",
+ LogMessage(LOG_NET, "DMR Slot %u, CSBK, %s, srcId = %u, dstId = %u",
m_slot->m_slotNo, csbk->toString().c_str(), srcId, dstId);
}
@@ -473,41 +474,41 @@ void ControlSignaling::processNetwork(const data::Data & dmrData)
} else {
CSBK_RAND* isp = static_cast(csbk.get());
if (m_verbose) {
- LogMessage(LOG_NET, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), serviceKind = $%02X, serviceOptions = $%02X, serviceExtra = $%02X, srcId = %u, dstId = %u",
+ LogMessage(LOG_NET, "DMR Slot %u, , CSBK, RAND (Random Access), serviceKind = $%02X, serviceOptions = $%02X, serviceExtra = $%02X, srcId = %u, dstId = %u",
m_slot->m_slotNo, isp->getServiceKind(), isp->getServiceOptions(), isp->getServiceExtra(), isp->getSrcId(), isp->getDstId());
}
switch (isp->getServiceKind()) {
- case SVC_KIND_IND_VOICE_CALL:
- writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 1U);
+ case ServiceKind::IND_VOICE_CALL:
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_WAIT_RSN, 1U);
if (!m_slot->m_affiliations->isGranted(dstId)) {
writeRF_CSBK_Grant(srcId, dstId, isp->getServiceOptions(), false, true);
}
break;
- case SVC_KIND_GRP_VOICE_CALL:
- writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 1U);
+ case ServiceKind::GRP_VOICE_CALL:
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_WAIT_RSN, 1U);
if (!m_slot->m_affiliations->isGranted(dstId)) {
writeRF_CSBK_Grant(srcId, dstId, isp->getServiceOptions(), true, true);
}
break;
- case SVC_KIND_IND_DATA_CALL:
- case SVC_KIND_IND_UDT_DATA_CALL:
- writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 0U);
+ case ServiceKind::IND_DATA_CALL:
+ case ServiceKind::IND_UDT_DATA_CALL:
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_WAIT_RSN, 0U);
writeRF_CSBK_Data_Grant(srcId, dstId, isp->getServiceOptions(), false, true);
break;
- case SVC_KIND_GRP_DATA_CALL:
- case SVC_KIND_GRP_UDT_DATA_CALL:
- writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 0U);
+ case ServiceKind::GRP_DATA_CALL:
+ case ServiceKind::GRP_UDT_DATA_CALL:
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_WAIT_RSN, 0U);
writeRF_CSBK_Data_Grant(srcId, dstId, isp->getServiceOptions(), true, true);
break;
- case SVC_KIND_REG_SVC:
+ case ServiceKind::REG_SVC:
break;
default:
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), unhandled service, serviceKind = %02X", m_slot->m_slotNo, isp->getServiceKind());
+ LogWarning(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access), unhandled service, serviceKind = %02X", m_slot->m_slotNo, isp->getServiceKind());
// should we drop the CSBK and not repeat it?
break;
}
@@ -516,61 +517,61 @@ void ControlSignaling::processNetwork(const data::Data & dmrData)
}
}
break;
- case CSBKO_ACK_RSP:
+ case CSBKO::ACK_RSP:
{
VERBOSE_LOG_CSBK_NET(csbk->toString(), srcId, dstId);
::ActivityLog("DMR", false, "Slot %u ack response from %u to %u", m_slot->m_slotNo, srcId, dstId);
}
break;
- case CSBKO_EXT_FNCT:
+ case CSBKO::EXT_FNCT:
{
CSBK_EXT_FNCT* isp = static_cast(csbk.get());
if (m_verbose) {
- LogMessage(LOG_NET, "DMR Slot %u, DT_CSBK, %s, op = $%02X, arg = %u, tgt = %u",
+ LogMessage(LOG_NET, "DMR Slot %u, CSBK, %s, op = $%02X, arg = %u, tgt = %u",
m_slot->m_slotNo, csbk->toString().c_str(), isp->getExtendedFunction(), dstId, srcId);
}
// generate activity log entry
switch (isp->getExtendedFunction()) {
- case DMR_EXT_FNCT_CHECK:
+ case ExtendedFunctions::CHECK:
::ActivityLog("DMR", false, "Slot %u radio check request from %u to %u", m_slot->m_slotNo, dstId, srcId);
break;
- case DMR_EXT_FNCT_INHIBIT:
+ case ExtendedFunctions::INHIBIT:
::ActivityLog("DMR", false, "Slot %u radio inhibit request from %u to %u", m_slot->m_slotNo, dstId, srcId);
break;
- case DMR_EXT_FNCT_UNINHIBIT:
+ case ExtendedFunctions::UNINHIBIT:
::ActivityLog("DMR", false, "Slot %u radio uninhibit request from %u to %u", m_slot->m_slotNo, dstId, srcId);
break;
- case DMR_EXT_FNCT_CHECK_ACK:
+ case ExtendedFunctions::CHECK_ACK:
::ActivityLog("DMR", false, "Slot %u radio check response from %u to %u", m_slot->m_slotNo, dstId, srcId);
break;
- case DMR_EXT_FNCT_INHIBIT_ACK:
+ case ExtendedFunctions::INHIBIT_ACK:
::ActivityLog("DMR", false, "Slot %u radio inhibit response from %u to %u", m_slot->m_slotNo, dstId, srcId);
break;
- case DMR_EXT_FNCT_UNINHIBIT_ACK:
+ case ExtendedFunctions::UNINHIBIT_ACK:
::ActivityLog("DMR", false, "Slot %u radio uninhibit response from %u to %u", m_slot->m_slotNo, dstId, srcId);
break;
default:
- LogWarning(LOG_NET, "DMR Slot %u, DT_CSBK, %s, unhandled op, op = $%02X", m_slot->m_slotNo, csbk->toString().c_str(), isp->getExtendedFunction());
+ LogWarning(LOG_NET, "DMR Slot %u, CSBK, %s, unhandled op, op = $%02X", m_slot->m_slotNo, csbk->toString().c_str(), isp->getExtendedFunction());
break;
}
}
break;
- case CSBKO_NACK_RSP:
+ case CSBKO::NACK_RSP:
{
VERBOSE_LOG_CSBK_NET(csbk->toString(), srcId, dstId);
}
break;
- case CSBKO_PRECCSBK:
+ case CSBKO::PRECCSBK:
{
if (m_verbose) {
- LogMessage(LOG_NET, "DMR Slot %u, DT_CSBK, CSBKO_PRECCSBK (%s Preamble CSBK), toFollow = %u, srcId = %u, dstId = %u",
+ LogMessage(LOG_NET, "DMR Slot %u, , CSBK, PRECCSBK (%s Preamble CSBK), toFollow = %u, srcId = %u, dstId = %u",
m_slot->m_slotNo, csbk->getDataContent() ? "Data" : "CSBK", csbk->getCBF(), srcId, dstId);
}
}
break;
default:
- LogWarning(LOG_NET, "DMR Slot %u, DT_CSBK, unhandled network CSBK, csbko = $%02X, fid = $%02X", m_slot->m_slotNo, csbko, csbk->getFID());
+ LogWarning(LOG_NET, "DMR Slot %u, CSBK, unhandled network CSBK, csbko = $%02X, fid = $%02X", m_slot->m_slotNo, csbko, csbk->getFID());
// should we drop the CSBK and not repeat it?
break;
}
@@ -591,7 +592,7 @@ void ControlSignaling::processNetwork(const data::Data & dmrData)
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
- if (csbko == CSBKO_PRECCSBK && csbk->getDataContent()) {
+ if (csbko == CSBKO::PRECCSBK && csbk->getDataContent()) {
uint32_t cbf = NO_PREAMBLE_CSBK + csbk->getCBF() - 1U;
for (uint32_t i = 0U; i < NO_PREAMBLE_CSBK; i++, cbf--) {
// change blocks to follow
@@ -636,14 +637,14 @@ void ControlSignaling::writeAdjSSNetwork()
std::unique_ptr csbk = std::make_unique();
csbk->siteIdenEntry(m_slot->m_idenEntry);
csbk->setCdef(false);
- csbk->setAnncType(BCAST_ANNC_ANN_WD_TSCC);
+ csbk->setAnncType(BroadcastAnncType::ANN_WD_TSCC);
csbk->setLogicalCh1(m_slot->m_channelNo);
csbk->setAnnWdCh1(true);
csbk->setSystemId(m_slot->m_siteData.systemIdentity());
csbk->setRequireReg(m_slot->m_siteData.requireReg());
if (m_verbose) {
- LogMessage(LOG_NET, "DMR Slot %u, DT_CSBK, %s, network announce, sysId = $%03X, chNo = %u", m_slot->m_slotNo, csbk->toString().c_str(),
+ LogMessage(LOG_NET, "DMR Slot %u, CSBK, %s, network announce, sysId = $%03X, chNo = %u", m_slot->m_slotNo, csbk->toString().c_str(),
m_slot->m_siteData.systemIdentity(), m_slot->m_channelNo);
}
@@ -666,18 +667,18 @@ void ControlSignaling::writeRF_Ext_Func(uint32_t func, uint32_t arg, uint32_t ds
csbk->setDstId(dstId);
if (m_verbose) {
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, %s, op = $%02X, arg = %u, tgt = %u",
+ LogMessage(LOG_RF, "DMR Slot %u, CSBK, %s, op = $%02X, arg = %u, tgt = %u",
m_slot->m_slotNo, csbk->toString().c_str(), func, arg, dstId);
}
// generate activity log entry
- if (func == DMR_EXT_FNCT_CHECK) {
+ if (func == ExtendedFunctions::CHECK) {
::ActivityLog("DMR", true, "Slot %u radio check request from %u to %u", m_slot->m_slotNo, arg, dstId);
}
- else if (func == DMR_EXT_FNCT_INHIBIT) {
+ else if (func == ExtendedFunctions::INHIBIT) {
::ActivityLog("DMR", true, "Slot %u radio inhibit request from %u to %u", m_slot->m_slotNo, arg, dstId);
}
- else if (func == DMR_EXT_FNCT_UNINHIBIT) {
+ else if (func == ExtendedFunctions::UNINHIBIT) {
::ActivityLog("DMR", true, "Slot %u radio uninhibit request from %u to %u", m_slot->m_slotNo, arg, dstId);
}
@@ -751,7 +752,7 @@ void ControlSignaling::writeRF_CSBK(lc::CSBK* csbk, bool imm)
SlotType slotType;
slotType.setColorCode(m_slot->m_colorCode);
- slotType.setDataType(DT_CSBK);
+ slotType.setDataType(DataType::CSBK);
// Regenerate the CSBK data
csbk->encode(data + 2U);
@@ -782,7 +783,7 @@ void ControlSignaling::writeNet_CSBK(lc::CSBK* csbk)
SlotType slotType;
slotType.setColorCode(m_slot->m_colorCode);
- slotType.setDataType(DT_CSBK);
+ slotType.setDataType(DataType::CSBK);
// Regenerate the CSBK data
csbk->encode(data + 2U);
@@ -801,7 +802,7 @@ void ControlSignaling::writeNet_CSBK(lc::CSBK* csbk)
if (m_slot->m_duplex)
m_slot->addFrame(data);
- m_slot->writeNetwork(data, DT_CSBK, csbk->getGI() ? FLCO_GROUP : FLCO_PRIVATE, csbk->getSrcId(), csbk->getDstId(), 0U, true);
+ m_slot->writeNetwork(data, DataType::CSBK, csbk->getGI() ? FLCO::GROUP : FLCO::PRIVATE, csbk->getSrcId(), csbk->getDstId(), 0U, true);
}
/*
@@ -819,7 +820,7 @@ void ControlSignaling::writeRF_CSBK_ACK_RSP(uint32_t dstId, uint8_t reason, uint
std::unique_ptr csbk = std::make_unique();
csbk->setResponse(responseInfo);
csbk->setReason(reason);
- csbk->setSrcId(DMR_WUID_ALL); // hmmm...
+ csbk->setSrcId(WUID_ALL); // hmmm...
csbk->setDstId(dstId);
writeRF_CSBK_Imm(csbk.get());
@@ -836,7 +837,7 @@ void ControlSignaling::writeRF_CSBK_NACK_RSP(uint32_t dstId, uint8_t reason, uin
std::unique_ptr csbk = std::make_unique();
csbk->setServiceKind(service);
csbk->setReason(reason);
- csbk->setSrcId(DMR_WUID_ALL); // hmmm...
+ csbk->setSrcId(WUID_ALL); // hmmm...
csbk->setDstId(dstId);
writeRF_CSBK_Imm(csbk.get());
@@ -864,7 +865,7 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
bool broadcast = ((serviceOptions & 0xFFU) & 0x10U) == 0x10U; // Broadcast Flag
uint8_t priority = ((serviceOptions & 0xFFU) & 0x03U); // Priority
- if (dstId == DMR_WUID_ALL) {
+ if (dstId == WUID_ALL || dstId == WUID_ALLZ || dstId == WUID_ALLL) {
return true; // do not generate grant packets for $FFFF (All Call) TGID
}
@@ -872,8 +873,8 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
if (!skip) {
if (m_slot->m_rfState != RS_RF_LISTENING && m_slot->m_rfState != RS_RF_DATA) {
if (!net) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_VOICE_CALL (Voice Call) denied, traffic in progress, dstId = %u", m_tscc->m_slotNo, dstId);
- writeRF_CSBK_ACK_RSP(srcId, TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
+ LogWarning(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access, VOICE_CALL (Voice Call) denied, traffic in progress, dstId = %u", m_tscc->m_slotNo, dstId);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
::ActivityLog("DMR", true, "Slot %u group grant request %u to TG %u denied", m_tscc->m_slotNo, srcId, dstId);
m_slot->m_rfState = RS_RF_REJECTED;
@@ -884,8 +885,8 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
if (m_slot->m_netState != RS_NET_IDLE && dstId == m_slot->m_netLastDstId) {
if (!net) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_VOICE_CALL (Voice Call) denied, traffic in progress, dstId = %u", m_tscc->m_slotNo, dstId);
- writeRF_CSBK_ACK_RSP(srcId, TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
+ LogWarning(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access, VOICE_CALL (Voice Call) denied, traffic in progress, dstId = %u", m_tscc->m_slotNo, dstId);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
::ActivityLog("DMR", true, "Slot %u group grant request %u to TG %u denied", m_tscc->m_slotNo, srcId, dstId);
m_slot->m_rfState = RS_RF_REJECTED;
@@ -898,7 +899,7 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
if (m_slot->m_rfLastDstId != 0U) {
if (m_slot->m_rfLastDstId != dstId && (m_slot->m_rfTGHang.isRunning() && !m_slot->m_rfTGHang.hasExpired())) {
if (!net) {
- writeRF_CSBK_ACK_RSP(srcId, TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
m_slot->m_rfState = RS_RF_REJECTED;
}
@@ -910,8 +911,8 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
if (!m_tscc->m_affiliations->rfCh()->isRFChAvailable()) {
if (grp) {
if (!net) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_GRP_VOICE_CALL (Group Voice Call) queued, no channels available, dstId = %u", m_tscc->m_slotNo, dstId);
- writeRF_CSBK_ACK_RSP(srcId, TS_QUEUED_RSN_NO_RESOURCE, (grp) ? 1U : 0U);
+ LogWarning(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access, GRP_VOICE_CALL (Group Voice Call) queued, no channels available, dstId = %u", m_tscc->m_slotNo, dstId);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_QUEUED_RSN_NO_RESOURCE, (grp) ? 1U : 0U);
::ActivityLog("DMR", true, "Slot %u group grant request %u to TG %u queued", m_tscc->m_slotNo, srcId, dstId);
m_slot->m_rfState = RS_RF_REJECTED;
@@ -921,8 +922,8 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
}
else {
if (!net) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_IND_VOICE_CALL (Individual Voice Call) queued, no channels available, dstId = %u", m_tscc->m_slotNo, dstId);
- writeRF_CSBK_ACK_RSP(srcId, TS_QUEUED_RSN_NO_RESOURCE, (grp) ? 1U : 0U);
+ LogWarning(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access, IND_VOICE_CALL (Individual Voice Call) queued, no channels available, dstId = %u", m_tscc->m_slotNo, dstId);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_QUEUED_RSN_NO_RESOURCE, (grp) ? 1U : 0U);
::ActivityLog("DMR", true, "Slot %u group grant request %u to TG %u queued", m_tscc->m_slotNo, srcId, dstId);
m_slot->m_rfState = RS_RF_REJECTED;
@@ -946,8 +947,8 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
uint32_t grantedSrcId = m_tscc->m_affiliations->getGrantedSrcId(dstId);
if (srcId != grantedSrcId) {
if (!net) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_VOICE_CALL (Voice Call) denied, traffic in progress, dstId = %u", m_tscc->m_slotNo, dstId);
- writeRF_CSBK_ACK_RSP(srcId, TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
+ LogWarning(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access, VOICE_CALL (Voice Call) denied, traffic in progress, dstId = %u", m_tscc->m_slotNo, dstId);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
::ActivityLog("DMR", true, "Slot %u group grant request %u to TG %u denied", m_tscc->m_slotNo, srcId, dstId);
m_slot->m_rfState = RS_RF_REJECTED;
@@ -994,10 +995,10 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
int ret = RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(),
HTTP_PUT, PUT_PERMIT_TG, req, voiceChData.ssl(), REST_QUICK_WAIT, m_tscc->m_debug);
if (ret != network::rest::http::HTTPPayload::StatusType::OK) {
- ::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
+ ::LogError(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
m_tscc->m_affiliations->releaseGrant(dstId, false);
if (!net) {
- writeRF_CSBK_ACK_RSP(srcId, TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
m_slot->m_rfState = RS_RF_REJECTED;
}
@@ -1005,20 +1006,20 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
}
}
else {
- ::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
+ ::LogError(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
}
}
- writeRF_CSBK_ACK_RSP(srcId, TS_ACK_RSN_MSG, (grp) ? 1U : 0U);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_ACK_RSN_MSG, (grp) ? 1U : 0U);
std::unique_ptr csbk = std::make_unique();
if (broadcast)
- csbk->setCSBKO(CSBKO_BTV_GRANT);
+ csbk->setCSBKO(CSBKO::BTV_GRANT);
csbk->setLogicalCh1(chNo);
csbk->setSlotNo(slot);
if (m_verbose) {
- LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, DT_CSBK, %s, emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",
+ LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, CSBK, %s, emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",
m_tscc->m_slotNo, csbk->toString().c_str(), emergency, privacy, broadcast, priority, csbk->getLogicalCh1(), csbk->getSlotNo(), srcId, dstId);
}
@@ -1046,7 +1047,7 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
HTTP_PUT, PUT_DMR_TSCC_PAYLOAD_ACT, req, voiceChData.ssl(), REST_QUICK_WAIT, m_tscc->m_debug);
}
else {
- ::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to activate payload channel, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
+ ::LogError(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access), failed to activate payload channel, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
}
}
else {
@@ -1072,10 +1073,10 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
int ret = RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(),
HTTP_PUT, PUT_PERMIT_TG, req, voiceChData.ssl(), REST_QUICK_WAIT, m_tscc->m_debug);
if (ret != network::rest::http::HTTPPayload::StatusType::OK) {
- ::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
+ ::LogError(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
m_tscc->m_affiliations->releaseGrant(dstId, false);
if (!net) {
- writeRF_CSBK_ACK_RSP(srcId, TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
m_slot->m_rfState = RS_RF_REJECTED;
}
@@ -1083,18 +1084,18 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
}
}
else {
- ::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
+ ::LogError(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
}
}
- writeRF_CSBK_ACK_RSP(srcId, TS_ACK_RSN_MSG, (grp) ? 1U : 0U);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_ACK_RSN_MSG, (grp) ? 1U : 0U);
std::unique_ptr csbk = std::make_unique();
csbk->setLogicalCh1(chNo);
csbk->setSlotNo(slot);
if (m_verbose) {
- LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, DT_CSBK, %s, emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",
+ LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, CSBK, %s, emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",
m_tscc->m_slotNo, csbk->toString().c_str(), emergency, privacy, broadcast, priority, csbk->getLogicalCh1(), csbk->getSlotNo(), srcId, dstId);
}
@@ -1122,7 +1123,7 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
HTTP_PUT, PUT_DMR_TSCC_PAYLOAD_ACT, req, voiceChData.ssl(), REST_QUICK_WAIT, m_tscc->m_debug);
}
else {
- ::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to activate payload channel, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
+ ::LogError(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access), failed to activate payload channel, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
}
}
else {
@@ -1155,7 +1156,7 @@ bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, u
bool broadcast = ((serviceOptions & 0xFFU) & 0x10U) == 0x10U; // Broadcast Flag
uint8_t priority = ((serviceOptions & 0xFFU) & 0x03U); // Priority
- if (dstId == DMR_WUID_ALL) {
+ if (dstId == WUID_ALL || dstId == WUID_ALLZ || dstId == WUID_ALLL) {
return true; // do not generate grant packets for $FFFF (All Call) TGID
}
@@ -1163,8 +1164,8 @@ bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, u
if (!skip) {
if (m_slot->m_rfState != RS_RF_LISTENING && m_slot->m_rfState != RS_RF_DATA) {
if (!net) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_DATA_CALL (Data Call) denied, traffic in progress, dstId = %u", m_tscc->m_slotNo, dstId);
- writeRF_CSBK_ACK_RSP(srcId, TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
+ LogWarning(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access, DATA_CALL (Data Call) denied, traffic in progress, dstId = %u", m_tscc->m_slotNo, dstId);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
::ActivityLog("DMR", true, "Slot %u group grant request %u to TG %u denied", m_tscc->m_slotNo, srcId, dstId);
m_slot->m_rfState = RS_RF_REJECTED;
@@ -1175,8 +1176,8 @@ bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, u
if (m_slot->m_netState != RS_NET_IDLE && dstId == m_slot->m_netLastDstId) {
if (!net) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_DATA_CALL (Data Call) denied, traffic in progress, dstId = %u", m_tscc->m_slotNo, dstId);
- writeRF_CSBK_ACK_RSP(srcId, TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
+ LogWarning(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access, DATA_CALL (Data Call) denied, traffic in progress, dstId = %u", m_tscc->m_slotNo, dstId);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
::ActivityLog("DMR", true, "Slot %u group grant request %u to TG %u denied", m_tscc->m_slotNo, srcId, dstId);
m_slot->m_rfState = RS_RF_REJECTED;
@@ -1189,7 +1190,7 @@ bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, u
if (m_slot->m_rfLastDstId != 0U) {
if (m_slot->m_rfLastDstId != dstId && (m_slot->m_rfTGHang.isRunning() && !m_slot->m_rfTGHang.hasExpired())) {
if (!net) {
- writeRF_CSBK_ACK_RSP(srcId, TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
m_slot->m_rfState = RS_RF_REJECTED;
}
@@ -1201,8 +1202,8 @@ bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, u
if (!m_tscc->m_affiliations->rfCh()->isRFChAvailable()) {
if (grp) {
if (!net) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_GRP_DATA_CALL (Group Data Call) queued, no channels available, dstId = %u", m_tscc->m_slotNo, dstId);
- writeRF_CSBK_ACK_RSP(srcId, TS_QUEUED_RSN_NO_RESOURCE, (grp) ? 1U : 0U);
+ LogWarning(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access, GRP_DATA_CALL (Group Data Call) queued, no channels available, dstId = %u", m_tscc->m_slotNo, dstId);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_QUEUED_RSN_NO_RESOURCE, (grp) ? 1U : 0U);
::ActivityLog("DMR", true, "Slot %u group grant request %u to TG %u queued", m_tscc->m_slotNo, srcId, dstId);
m_slot->m_rfState = RS_RF_REJECTED;
@@ -1212,8 +1213,8 @@ bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, u
}
else {
if (!net) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_IND_DATA_CALL (Individual Data Call) queued, no channels available, dstId = %u", m_tscc->m_slotNo, dstId);
- writeRF_CSBK_ACK_RSP(srcId, TS_QUEUED_RSN_NO_RESOURCE, (grp) ? 1U : 0U);
+ LogWarning(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access, IND_DATA_CALL (Individual Data Call) queued, no channels available, dstId = %u", m_tscc->m_slotNo, dstId);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_QUEUED_RSN_NO_RESOURCE, (grp) ? 1U : 0U);
::ActivityLog("DMR", true, "Slot %u group grant request %u to TG %u queued", m_tscc->m_slotNo, srcId, dstId);
m_slot->m_rfState = RS_RF_REJECTED;
@@ -1245,14 +1246,14 @@ bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, u
::ActivityLog("DMR", true, "Slot %u group grant request from %u to TG %u", m_tscc->m_slotNo, srcId, dstId);
}
- writeRF_CSBK_ACK_RSP(srcId, TS_ACK_RSN_MSG, (grp) ? 1U : 0U);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_ACK_RSN_MSG, (grp) ? 1U : 0U);
std::unique_ptr csbk = std::make_unique();
csbk->setLogicalCh1(chNo);
csbk->setSlotNo(slot);
if (m_verbose) {
- LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, DT_CSBK, %s, emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",
+ LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, CSBK, %s, emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",
m_tscc->m_slotNo, csbk->toString().c_str(), emergency, privacy, broadcast, priority, csbk->getLogicalCh1(), csbk->getSlotNo(), srcId, dstId);
}
@@ -1280,7 +1281,7 @@ bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, u
HTTP_PUT, PUT_DMR_TSCC_PAYLOAD_ACT, req, voiceChData.ssl(), REST_QUICK_WAIT, m_tscc->m_debug);
}
else {
- ::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to activate payload channel, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
+ ::LogError(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access), failed to activate payload channel, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
}
}
else {
@@ -1292,14 +1293,14 @@ bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, u
::ActivityLog("DMR", true, "Slot %u individual grant request from %u to TG %u", m_tscc->m_slotNo, srcId, dstId);
}
- writeRF_CSBK_ACK_RSP(srcId, TS_ACK_RSN_MSG, (grp) ? 1U : 0U);
+ writeRF_CSBK_ACK_RSP(srcId, ReasonCode::TS_ACK_RSN_MSG, (grp) ? 1U : 0U);
std::unique_ptr csbk = std::make_unique();
csbk->setLogicalCh1(chNo);
csbk->setSlotNo(slot);
if (m_verbose) {
- LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, DT_CSBK, %s, emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",
+ LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, CSBK, %s, emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",
m_tscc->m_slotNo, csbk->toString().c_str(), emergency, privacy, broadcast, priority, csbk->getLogicalCh1(), csbk->getSlotNo(), srcId, dstId);
}
@@ -1327,7 +1328,7 @@ bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, u
HTTP_PUT, PUT_DMR_TSCC_PAYLOAD_ACT, req, voiceChData.ssl(), REST_QUICK_WAIT, m_tscc->m_debug);
}
else {
- ::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to activate payload channel, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
+ ::LogError(LOG_RF, "DMR Slot %u, , CSBK, RAND (Random Access), failed to activate payload channel, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
}
}
else {
@@ -1353,7 +1354,7 @@ void ControlSignaling::writeRF_CSBK_U_Reg_Rsp(uint32_t srcId, uint8_t serviceOpt
if (!dereg) {
if (m_verbose) {
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, %s, srcId = %u, serviceOptions = $%02X", m_tscc->m_slotNo, csbk->toString().c_str(), srcId, serviceOptions);
+ LogMessage(LOG_RF, "DMR Slot %u, CSBK, %s, srcId = %u, serviceOptions = $%02X", m_tscc->m_slotNo, csbk->toString().c_str(), srcId, serviceOptions);
}
// remove dynamic unit registration table entry
@@ -1362,22 +1363,22 @@ void ControlSignaling::writeRF_CSBK_U_Reg_Rsp(uint32_t srcId, uint8_t serviceOpt
// if (m_slot->m_network != nullptr)
// m_slot->m_network->announceUnitDeregistration(srcId);
- csbk->setReason(TS_ACK_RSN_REG);
+ csbk->setReason(ReasonCode::TS_ACK_RSN_REG);
}
else
{
- csbk->setReason(TS_ACK_RSN_REG);
+ csbk->setReason(ReasonCode::TS_ACK_RSN_REG);
// validate the source RID
if (!acl::AccessControl::validateSrcId(srcId)) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_CSBK, %s, denial, RID rejection, srcId = %u", m_tscc->m_slotNo, csbk->toString().c_str(), srcId);
+ LogWarning(LOG_RF, "DMR Slot %u, CSBK, %s, denial, RID rejection, srcId = %u", m_tscc->m_slotNo, csbk->toString().c_str(), srcId);
::ActivityLog("DMR", true, "unit registration request from %u denied", srcId);
- csbk->setReason(TS_DENY_RSN_REG_DENIED);
+ csbk->setReason(ReasonCode::TS_DENY_RSN_REG_DENIED);
}
- if (csbk->getReason() == TS_ACK_RSN_REG) {
+ if (csbk->getReason() == ReasonCode::TS_ACK_RSN_REG) {
if (m_verbose) {
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, %s, srcId = %u, serviceOptions = $%02X", m_tscc->m_slotNo, csbk->toString().c_str(), srcId, serviceOptions);
+ LogMessage(LOG_RF, "DMR Slot %u, CSBK, %s, srcId = %u, serviceOptions = $%02X", m_tscc->m_slotNo, csbk->toString().c_str(), srcId, serviceOptions);
}
::ActivityLog("DMR", true, "unit registration request from %u", srcId);
@@ -1392,7 +1393,7 @@ void ControlSignaling::writeRF_CSBK_U_Reg_Rsp(uint32_t srcId, uint8_t serviceOpt
}
}
- csbk->setSrcId(DMR_WUID_REGI);
+ csbk->setSrcId(WUID_REGI);
csbk->setDstId(srcId);
writeRF_CSBK_Imm(csbk.get());
@@ -1450,18 +1451,18 @@ void ControlSignaling::writeRF_CSBK_Payload_Activate(uint32_t dstId, uint32_t sr
std::unique_ptr csbk = std::make_unique();
if (voice) {
if (grp) {
- csbk->setCSBKO(CSBKO_TV_GRANT);
+ csbk->setCSBKO(CSBKO::TV_GRANT);
}
else {
- csbk->setCSBKO(CSBKO_PV_GRANT);
+ csbk->setCSBKO(CSBKO::PV_GRANT);
}
}
else {
if (grp) {
- csbk->setCSBKO(CSBKO_TD_GRANT);
+ csbk->setCSBKO(CSBKO::TD_GRANT);
}
else {
- csbk->setCSBKO(CSBKO_PD_GRANT);
+ csbk->setCSBKO(CSBKO::PD_GRANT);
}
}
@@ -1474,7 +1475,7 @@ void ControlSignaling::writeRF_CSBK_Payload_Activate(uint32_t dstId, uint32_t sr
csbk->setDstId(dstId);
if (m_verbose) {
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, %s, csbko = $%02X, chNo = %u, slot = %u, srcId = %u, dstId = %u",
+ LogMessage(LOG_RF, "DMR Slot %u, CSBK, %s, csbko = $%02X, chNo = %u, slot = %u, srcId = %u, dstId = %u",
m_slot->m_slotNo, csbk->toString().c_str(), csbk->getCSBKO(), csbk->getLogicalCh1(), csbk->getSlotNo(), srcId, dstId);
}
@@ -1505,7 +1506,7 @@ void ControlSignaling::writeRF_CSBK_Payload_Clear(uint32_t dstId, uint32_t srcId
csbk->setDstId(dstId);
if (m_verbose) {
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, %s, group = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",
+ LogMessage(LOG_RF, "DMR Slot %u, CSBK, %s, group = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",
m_slot->m_slotNo, csbk->toString().c_str(), csbk->getGI(), csbk->getLogicalCh1(), csbk->getSlotNo(), srcId, dstId);
}
@@ -1540,14 +1541,14 @@ void ControlSignaling::writeRF_TSCC_Bcast_Ann_Wd(uint32_t channelNo, bool annWd,
std::unique_ptr csbk = std::make_unique();
csbk->siteIdenEntry(m_slot->m_idenEntry);
csbk->setCdef(false);
- csbk->setAnncType(BCAST_ANNC_ANN_WD_TSCC);
+ csbk->setAnncType(BroadcastAnncType::ANN_WD_TSCC);
csbk->setLogicalCh1(channelNo);
csbk->setAnnWdCh1(annWd);
csbk->setSystemId(systemIdentity);
csbk->setRequireReg(requireReg);
if (m_debug) {
- LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, %s, channelNo = %u, annWd = %u",
+ LogMessage(LOG_RF, "DMR Slot %u, CSBK, %s, channelNo = %u, annWd = %u",
m_slot->m_slotNo, csbk->toString().c_str(), channelNo, annWd);
}
@@ -1561,7 +1562,7 @@ void ControlSignaling::writeRF_TSCC_Bcast_Sys_Parm()
{
std::unique_ptr csbk = std::make_unique();
DEBUG_LOG_CSBK(csbk->toString());
- csbk->setAnncType(BCAST_ANNC_SITE_PARMS);
+ csbk->setAnncType(BroadcastAnncType::SITE_PARMS);
writeRF_CSBK(csbk.get());
}
diff --git a/src/host/dmr/packet/Data.cpp b/src/host/dmr/packet/Data.cpp
index 41913186..5c462694 100644
--- a/src/host/dmr/packet/Data.cpp
+++ b/src/host/dmr/packet/Data.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016,2017,2018 Jonathan Naylor, G4KLX
-* Copyright (C) 2017-2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2017-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -27,6 +27,7 @@
#include "ActivityLog.h"
using namespace dmr;
+using namespace dmr::defines;
using namespace dmr::packet;
#include
@@ -84,20 +85,20 @@ bool Data::process(uint8_t* data, uint32_t len)
{
assert(data != nullptr);
- // Get the type from the packet metadata
- uint8_t dataType = data[1U] & 0x0FU;
+ // get the type from the packet metadata
+ DataType::E dataType = (DataType::E)(data[1U] & 0x0FU);
SlotType slotType;
slotType.setColorCode(m_slot->m_colorCode);
slotType.setDataType(dataType);
- if (dataType == DT_TERMINATOR_WITH_LC) {
+ if (dataType == DataType::TERMINATOR_WITH_LC) {
if (m_slot->m_rfState != RS_RF_AUDIO)
return false;
// Regenerate the LC data
lc::FullLC fullLC;
- fullLC.encode(*m_slot->m_rfLC, data + 2U, DT_TERMINATOR_WITH_LC);
+ fullLC.encode(*m_slot->m_rfLC, data + 2U, DataType::TERMINATOR_WITH_LC);
// Regenerate the Slot Type
slotType.encode(data + 2U);
@@ -109,7 +110,7 @@ bool Data::process(uint8_t* data, uint32_t len)
data[0U] = modem::TAG_EOT;
data[1U] = 0x00U;
- m_slot->writeNetwork(data, DT_TERMINATOR_WITH_LC);
+ m_slot->writeNetwork(data, DataType::TERMINATOR_WITH_LC);
if (m_slot->m_duplex) {
for (uint32_t i = 0U; i < m_slot->m_hangCount; i++)
@@ -154,7 +155,7 @@ bool Data::process(uint8_t* data, uint32_t len)
return true;
}
}
- else if (dataType == DT_DATA_HEADER) {
+ else if (dataType == DataType::DATA_HEADER) {
if (m_slot->m_rfState == RS_RF_DATA)
return true;
@@ -178,7 +179,7 @@ bool Data::process(uint8_t* data, uint32_t len)
// validate the source RID
if (!acl::AccessControl::validateSrcId(srcId)) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_DATA_HEADER denial, RID rejection, srcId = %u", m_slot->m_slotNo, srcId);
+ LogWarning(LOG_RF, "DMR Slot %u, DATA_HEADER denial, RID rejection, srcId = %u", m_slot->m_slotNo, srcId);
m_slot->m_rfState = RS_RF_REJECTED;
return false;
}
@@ -186,7 +187,7 @@ bool Data::process(uint8_t* data, uint32_t len)
// validate the target ID
if (gi) {
if (!acl::AccessControl::validateTGId(m_slot->m_slotNo, dstId)) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_DATA_HEADER denial, TGID rejection, srcId = %u, dstId = %u", m_slot->m_slotNo, srcId, dstId);
+ LogWarning(LOG_RF, "DMR Slot %u, DATA_HEADER denial, TGID rejection, srcId = %u, dstId = %u", m_slot->m_slotNo, srcId, dstId);
m_slot->m_rfState = RS_RF_REJECTED;
return false;
}
@@ -194,7 +195,7 @@ bool Data::process(uint8_t* data, uint32_t len)
m_slot->m_rfFrames = dataHeader->getBlocks();
m_slot->m_rfSeqNo = 0U;
- m_slot->m_rfLC = std::make_unique(gi ? FLCO_GROUP : FLCO_PRIVATE, srcId, dstId);
+ m_slot->m_rfLC = std::make_unique(gi ? FLCO::GROUP : FLCO::PRIVATE, srcId, dstId);
// Regenerate the data header
dataHeader->encode(data + 2U);
@@ -211,14 +212,14 @@ bool Data::process(uint8_t* data, uint32_t len)
if (m_slot->m_duplex && m_repeatDataPacket)
m_slot->addFrame(data);
- m_slot->writeNetwork(data, DT_DATA_HEADER);
+ m_slot->writeNetwork(data, DataType::DATA_HEADER);
m_slot->m_rfState = RS_RF_DATA;
m_slot->m_rfLastDstId = dstId;
m_slot->m_rfLastSrcId = srcId;
if (m_slot->m_netState == RS_NET_IDLE) {
- m_slot->setShortLC(m_slot->m_slotNo, dstId, gi ? FLCO_GROUP : FLCO_PRIVATE, false);
+ m_slot->setShortLC(m_slot->m_slotNo, dstId, gi ? FLCO::GROUP : FLCO::PRIVATE, false);
}
if (m_verbose) {
@@ -229,7 +230,7 @@ bool Data::process(uint8_t* data, uint32_t len)
::ActivityLog("DMR", true, "Slot %u RF data header from %u to %s%u, %u blocks", m_slot->m_slotNo, srcId, gi ? "TG " : "", dstId, m_slot->m_rfFrames);
- ::memset(m_pduUserData, 0x00U, DMR_MAX_PDU_COUNT * DMR_MAX_PDU_LENGTH + 2U);
+ ::memset(m_pduUserData, 0x00U, MAX_PDU_COUNT * MAX_PDU_LENGTH + 2U);
m_pduDataOffset = 0U;
if (m_slot->m_rfFrames == 0U) {
@@ -239,7 +240,7 @@ bool Data::process(uint8_t* data, uint32_t len)
return true;
}
- else if (dataType == DT_RATE_12_DATA || dataType == DT_RATE_34_DATA || dataType == DT_RATE_1_DATA) {
+ else if (dataType == DataType::RATE_12_DATA || dataType == DataType::RATE_34_DATA || dataType == DataType::RATE_1_DATA) {
if (m_slot->m_rfState != RS_RF_DATA || m_slot->m_rfFrames == 0U)
return false;
@@ -247,7 +248,7 @@ bool Data::process(uint8_t* data, uint32_t len)
edac::Trellis trellis;
// decode the rate 1/2 payload
- if (dataType == DT_RATE_12_DATA) {
+ if (dataType == DataType::RATE_12_DATA) {
// decode the BPTC (196,96) FEC
uint8_t payload[12U];
bptc.decode(data + 2U, payload);
@@ -259,7 +260,7 @@ bool Data::process(uint8_t* data, uint32_t len)
// encode the BPTC (196,96) FEC
bptc.encode(payload, data + 2U);
}
- else if (dataType == DT_RATE_34_DATA) {
+ else if (dataType == DataType::RATE_34_DATA) {
// decode the Trellis 3/4 rate FEC
uint8_t payload[18U];
bool ret = trellis.decode34(data + 2U, payload);
@@ -271,7 +272,7 @@ bool Data::process(uint8_t* data, uint32_t len)
trellis.encode34(payload, data + 2U);
}
else {
- LogWarning(LOG_RF, "DMR Slot %u, DT_RATE_34_DATA, unfixable RF rate 3/4 data", m_slot->m_slotNo);
+ LogWarning(LOG_RF, "DMR Slot %u, RATE_34_DATA, unfixable RF rate 3/4 data", m_slot->m_slotNo);
Utils::dump(1U, "Unfixable PDU Data", data + 2U, DMR_FRAME_LENGTH_BYTES);
}
@@ -300,15 +301,15 @@ bool Data::process(uint8_t* data, uint32_t len)
Utils::dump(1U, "PDU Packet", m_pduUserData, m_pduDataOffset);
}
- LogMessage(LOG_RF, "DMR Slot %u, DT_RATE_12/34_DATA, ended data transmission", m_slot->m_slotNo);
+ LogMessage(LOG_RF, "DMR Slot %u, RATE_12/34_DATA, ended data transmission", m_slot->m_slotNo);
m_slot->writeEndRF();
}
if (m_verbose) {
- if (dataType == DT_RATE_12_DATA) {
+ if (dataType == DataType::RATE_12_DATA) {
LogMessage(LOG_RF, DMR_DT_RATE_12_DATA ", block = %u", m_slot->m_rfFrames + 1);
}
- else if (dataType == DT_RATE_34_DATA) {
+ else if (dataType == DataType::RATE_34_DATA) {
LogMessage(LOG_RF, DMR_DT_RATE_34_DATA ", block = %u", m_slot->m_rfFrames + 1);
}
else {
@@ -333,18 +334,18 @@ void Data::processNetwork(const data::Data& dmrData)
uint8_t data[DMR_FRAME_LENGTH_BYTES + 2U];
dmrData.getData(data + 2U);
- if (dataType == DT_TERMINATOR_WITH_LC) {
+ if (dataType == DataType::TERMINATOR_WITH_LC) {
if (m_slot->m_netState != RS_NET_AUDIO)
return;
// Regenerate the LC data
lc::FullLC fullLC;
- fullLC.encode(*m_slot->m_netLC, data + 2U, DT_TERMINATOR_WITH_LC);
+ fullLC.encode(*m_slot->m_netLC, data + 2U, DataType::TERMINATOR_WITH_LC);
// Regenerate the Slot Type
SlotType slotType;
slotType.setColorCode(m_slot->m_colorCode);
- slotType.setDataType(DT_TERMINATOR_WITH_LC);
+ slotType.setDataType(DataType::TERMINATOR_WITH_LC);
slotType.encode(data + 2U);
// Convert the Data Sync to be from the BS or MS as needed
@@ -386,14 +387,14 @@ void Data::processNetwork(const data::Data& dmrData)
m_slot->writeEndNet();
}
- else if (dataType == DT_DATA_HEADER) {
+ else if (dataType == DataType::DATA_HEADER) {
if (m_slot->m_netState == RS_NET_DATA)
return;
data::DataHeader* dataHeader = new data::DataHeader();
bool valid = dataHeader->decode(data + 2U);
if (!valid) {
- LogError(LOG_NET, "DMR Slot %u, DT_DATA_HEADER, unable to decode the network data header", m_slot->m_slotNo);
+ LogError(LOG_NET, "DMR Slot %u, DataType::DATA_HEADER, unable to decode the network data header", m_slot->m_slotNo);
return;
}
@@ -411,7 +412,7 @@ void Data::processNetwork(const data::Data& dmrData)
}
m_slot->m_netFrames = dataHeader->getBlocks();
- m_slot->m_netLC = std::make_unique(gi ? FLCO_GROUP : FLCO_PRIVATE, srcId, dstId);
+ m_slot->m_netLC = std::make_unique(gi ? FLCO::GROUP : FLCO::PRIVATE, srcId, dstId);
// Regenerate the data header
dataHeader->encode(data + 2U);
@@ -419,7 +420,7 @@ void Data::processNetwork(const data::Data& dmrData)
// Regenerate the Slot Type
SlotType slotType;
slotType.setColorCode(m_slot->m_colorCode);
- slotType.setDataType(DT_DATA_HEADER);
+ slotType.setDataType(DataType::DATA_HEADER);
slotType.encode(data + 2U);
// Convert the Data Sync to be from the BS or MS as needed
@@ -438,7 +439,7 @@ void Data::processNetwork(const data::Data& dmrData)
m_slot->m_netLastDstId = dstId;
m_slot->m_netLastSrcId = srcId;
- m_slot->setShortLC(m_slot->m_slotNo, dstId, gi ? FLCO_GROUP : FLCO_PRIVATE, false);
+ m_slot->setShortLC(m_slot->m_slotNo, dstId, gi ? FLCO::GROUP : FLCO::PRIVATE, false);
if (m_verbose) {
LogMessage(LOG_NET, DMR_DT_DATA_HEADER ", slot = %u, dpf = $%02X, sap = $%02X, fullMessage = %u, blocksToFollow = %u, padCount = %u, seqNo = %u, dstId = %u, srcId = %u, group = %u",
@@ -449,7 +450,7 @@ void Data::processNetwork(const data::Data& dmrData)
::ActivityLog("DMR", false, "Slot %u network data header from %u to %s%u, %u blocks",
m_slot->m_slotNo, srcId, gi ? "TG " : "", dstId, m_slot->m_netFrames);
- ::memset(m_pduUserData, 0x00U, DMR_MAX_PDU_COUNT * DMR_MAX_PDU_LENGTH + 2U);
+ ::memset(m_pduUserData, 0x00U, MAX_PDU_COUNT * MAX_PDU_LENGTH + 2U);
m_pduDataOffset = 0U;
if (m_slot->m_netFrames == 0U) {
@@ -457,14 +458,14 @@ void Data::processNetwork(const data::Data& dmrData)
m_slot->writeEndNet();
}
}
- else if (dataType == DT_RATE_12_DATA || dataType == DT_RATE_34_DATA || dataType == DT_RATE_1_DATA) {
+ else if (dataType == DataType::RATE_12_DATA || dataType == DataType::RATE_34_DATA || dataType == DataType::RATE_1_DATA) {
if (m_slot->m_netState != RS_NET_DATA || m_slot->m_netFrames == 0U) {
m_slot->writeEndNet();
return;
}
// regenerate the rate 1/2 payload
- if (dataType == DT_RATE_12_DATA) {
+ if (dataType == DataType::RATE_12_DATA) {
// decode the BPTC (196,96) FEC
edac::BPTC19696 bptc;
uint8_t payload[12U];
@@ -477,7 +478,7 @@ void Data::processNetwork(const data::Data& dmrData)
// encode the BPTC (196,96) FEC
bptc.encode(payload, data + 2U);
}
- else if (dataType == DT_RATE_34_DATA) {
+ else if (dataType == DataType::RATE_34_DATA) {
// decode the Trellis 3/4 rate FEC
edac::Trellis trellis;
uint8_t payload[18U];
@@ -490,7 +491,7 @@ void Data::processNetwork(const data::Data& dmrData)
trellis.encode34(payload, data + 2U);
}
else {
- LogWarning(LOG_NET, "DMR Slot %u, DT_RATE_34_DATA, unfixable network rate 3/4 data", m_slot->m_slotNo);
+ LogWarning(LOG_NET, "DMR Slot %u, RATE_34_DATA, unfixable network rate 3/4 data", m_slot->m_slotNo);
Utils::dump(1U, "Data", data + 2U, DMR_FRAME_LENGTH_BYTES);
}
@@ -515,10 +516,10 @@ void Data::processNetwork(const data::Data& dmrData)
m_slot->addFrame(data, true);
if (m_verbose) {
- if (dataType == DT_RATE_12_DATA) {
+ if (dataType == DataType::RATE_12_DATA) {
LogMessage(LOG_RF, DMR_DT_RATE_12_DATA ", block = %u", m_slot->m_netFrames + 1);
}
- else if (dataType == DT_RATE_34_DATA) {
+ else if (dataType == DataType::RATE_34_DATA) {
LogMessage(LOG_RF, DMR_DT_RATE_34_DATA ", block = %u", m_slot->m_netFrames + 1);
}
else {
@@ -532,7 +533,7 @@ void Data::processNetwork(const data::Data& dmrData)
Utils::dump(1U, "PDU Packet", m_pduUserData, m_pduDataOffset);
}
- LogMessage(LOG_NET, "DMR Slot %u, DT_RATE_12/34_DATA, ended data transmission", m_slot->m_slotNo);
+ LogMessage(LOG_NET, "DMR Slot %u, RATE_12/34_DATA, ended data transmission", m_slot->m_slotNo);
m_slot->writeEndNet();
}
}
@@ -565,8 +566,8 @@ Data::Data(Slot* slot, network::BaseNetwork* network, bool dumpDataPacket, bool
m_verbose(verbose),
m_debug(debug)
{
- m_pduUserData = new uint8_t[DMR_MAX_PDU_COUNT * DMR_MAX_PDU_LENGTH + 2U];
- ::memset(m_pduUserData, 0x00U, DMR_MAX_PDU_COUNT * DMR_MAX_PDU_LENGTH + 2U);
+ m_pduUserData = new uint8_t[MAX_PDU_COUNT * MAX_PDU_LENGTH + 2U];
+ ::memset(m_pduUserData, 0x00U, MAX_PDU_COUNT * MAX_PDU_LENGTH + 2U);
}
///
diff --git a/src/host/dmr/packet/Voice.cpp b/src/host/dmr/packet/Voice.cpp
index 1a487d3c..ae1a29e9 100644
--- a/src/host/dmr/packet/Voice.cpp
+++ b/src/host/dmr/packet/Voice.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015,2016,2017,2018 Jonathan Naylor, G4KLX
-* Copyright (C) 2017-2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2017-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -26,6 +26,7 @@
#include "ActivityLog.h"
using namespace dmr;
+using namespace dmr::defines;
using namespace dmr::packet;
#include
@@ -90,28 +91,28 @@ bool Voice::process(uint8_t* data, uint32_t len)
{
assert(data != nullptr);
- bool dataSync = (data[1U] & DMR_SYNC_DATA) == DMR_SYNC_DATA;
- bool voiceSync = (data[1U] & DMR_SYNC_VOICE) == DMR_SYNC_VOICE;
+ bool dataSync = (data[1U] & SYNC_DATA) == SYNC_DATA;
+ bool voiceSync = (data[1U] & SYNC_VOICE) == SYNC_VOICE;
if (dataSync) {
- uint8_t dataType = data[1U] & 0x0FU;
+ DataType::E dataType = (DataType::E)(data[1U] & 0x0FU);
SlotType slotType;
slotType.setColorCode(m_slot->m_colorCode);
slotType.setDataType(dataType);
- if (dataType == DT_VOICE_LC_HEADER) {
+ if (dataType == DataType::VOICE_LC_HEADER) {
if (m_slot->m_rfState == RS_RF_AUDIO)
return true;
lc::FullLC fullLC;
- std::unique_ptr lc = fullLC.decode(data + 2U, DT_VOICE_LC_HEADER);
+ std::unique_ptr lc = fullLC.decode(data + 2U, DataType::VOICE_LC_HEADER);
if (lc == nullptr)
return false;
uint32_t srcId = lc->getSrcId();
uint32_t dstId = lc->getDstId();
- uint8_t flco = lc->getFLCO();
+ FLCO::E flco = lc->getFLCO();
CHECK_AUTHORITATIVE(dstId);
CHECK_TRAFFIC_COLLISION(dstId);
@@ -123,8 +124,8 @@ bool Voice::process(uint8_t* data, uint32_t len)
// validate source RID
if (!acl::AccessControl::validateSrcId(srcId)) {
if (m_slot->m_data->m_lastRejectId == 0U || m_slot->m_data->m_lastRejectId == srcId) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_VOICE_LC_HEADER denial, RID rejection, srcId = %u", m_slot->m_slotNo, srcId);
- ::ActivityLog("DMR", true, "Slot %u RF voice rejection from %u to %s%u ", m_slot->m_slotNo, srcId, flco == FLCO_GROUP ? "TG " : "", dstId);
+ LogWarning(LOG_RF, "DMR Slot %u, VOICE_LC_HEADER denial, RID rejection, srcId = %u", m_slot->m_slotNo, srcId);
+ ::ActivityLog("DMR", true, "Slot %u RF voice rejection from %u to %s%u ", m_slot->m_slotNo, srcId, flco == FLCO::GROUP ? "TG " : "", dstId);
}
m_slot->m_rfLastDstId = 0U;
@@ -136,10 +137,10 @@ bool Voice::process(uint8_t* data, uint32_t len)
}
// validate target TID, if the target is a talkgroup
- if (flco == FLCO_GROUP) {
+ if (flco == FLCO::GROUP) {
if (!acl::AccessControl::validateTGId(m_slot->m_slotNo, dstId)) {
if (m_slot->m_data->m_lastRejectId == 0U || m_slot->m_data->m_lastRejectId == dstId) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_VOICE_LC_HEADER denial, TGID rejection, srcId = %u, dstId = %u", m_slot->m_slotNo, srcId, dstId);
+ LogWarning(LOG_RF, "DMR Slot %u, VOICE_LC_HEADER denial, TGID rejection, srcId = %u, dstId = %u", m_slot->m_slotNo, srcId, dstId);
::ActivityLog("DMR", true, "Slot %u RF voice rejection from %u to TG %u ", m_slot->m_slotNo, srcId, dstId);
}
@@ -168,7 +169,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_slot->m_voice->m_rfEmbeddedData[1U].setLC(*m_slot->m_rfLC);
// Regenerate the LC data
- fullLC.encode(*m_slot->m_rfLC, data + 2U, DT_VOICE_LC_HEADER);
+ fullLC.encode(*m_slot->m_rfLC, data + 2U, DataType::VOICE_LC_HEADER);
// Regenerate the Slot Type
slotType.encode(data + 2U);
@@ -189,7 +190,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_slot->m_voice->m_rfEmbeddedReadN = 0U;
m_slot->m_voice->m_rfEmbeddedWriteN = 1U;
- m_slot->m_voice->m_rfTalkerId = TALKER_ID_NONE;
+ m_slot->m_voice->m_rfTalkerId = TalkerID::NONE;
m_slot->m_minRSSI = m_slot->m_rssi;
m_slot->m_maxRSSI = m_slot->m_rssi;
@@ -204,7 +205,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_slot->addFrame(data);
}
- m_slot->writeNetwork(data, DT_VOICE_LC_HEADER);
+ m_slot->writeNetwork(data, DataType::VOICE_LC_HEADER);
m_slot->m_rfState = RS_RF_AUDIO;
m_slot->m_rfLastDstId = dstId;
@@ -219,17 +220,17 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_slot->m_rfLC->getSrcId(), m_slot->m_rfLC->getDstId(), m_slot->m_rfLC->getFLCO(), m_slot->m_rfLC->getFID(), m_slot->m_rfLC->getPF());
}
- ::ActivityLog("DMR", true, "Slot %u RF %svoice header from %u to %s%u", m_slot->m_slotNo, encrypted ? "encrypted " : "", srcId, flco == FLCO_GROUP ? "TG " : "", dstId);
+ ::ActivityLog("DMR", true, "Slot %u RF %svoice header from %u to %s%u", m_slot->m_slotNo, encrypted ? "encrypted " : "", srcId, flco == FLCO::GROUP ? "TG " : "", dstId);
return true;
}
- else if (dataType == DT_VOICE_PI_HEADER) {
+ else if (dataType == DataType::VOICE_PI_HEADER) {
if (m_slot->m_rfState != RS_RF_AUDIO)
return false;
lc::FullLC fullLC;
std::unique_ptr lc = fullLC.decodePI(data + 2U);
if (lc == nullptr) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_VOICE_PI_HEADER, bad LC received, replacing", m_slot->m_slotNo);
+ LogWarning(LOG_RF, "DMR Slot %u, VOICE_PI_HEADER, bad LC received, replacing", m_slot->m_slotNo);
lc = std::make_unique();
lc->setDstId(m_slot->m_rfLC->getDstId());
}
@@ -251,7 +252,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
if (m_slot->m_duplex)
m_slot->addFrame(data);
- m_slot->writeNetwork(data, DT_VOICE_PI_HEADER);
+ m_slot->writeNetwork(data, DataType::VOICE_PI_HEADER);
if (m_verbose) {
LogMessage(LOG_RF, DMR_DT_VOICE_PI_HEADER ", slot = %u, algId = %u, kId = %u, dstId = %u", m_slot->m_slotNo,
@@ -309,7 +310,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
if (m_slot->m_duplex)
m_slot->addFrame(data);
- m_slot->writeNetwork(data, DT_VOICE_SYNC, errors);
+ m_slot->writeNetwork(data, DataType::VOICE_SYNC, errors);
return true;
}
@@ -382,13 +383,13 @@ bool Voice::process(uint8_t* data, uint32_t len)
char text[80U];
switch (flco) {
- case FLCO_GROUP:
- case FLCO_PRIVATE:
+ case FLCO::GROUP:
+ case FLCO::PRIVATE:
break;
- case FLCO_GPS_INFO:
+ case FLCO::GPS_INFO:
if (m_dumpTAData) {
- ::sprintf(text, "DMR Slot %u, FLCO_GPS_INFO (Embedded GPS Info)", m_slot->m_slotNo);
+ ::sprintf(text, "DMR Slot %u, GPS_INFO (Embedded GPS Info)", m_slot->m_slotNo);
Utils::dump(2U, text, data, 9U);
}
@@ -397,47 +398,47 @@ bool Voice::process(uint8_t* data, uint32_t len)
}
break;
- case FLCO_TALKER_ALIAS_HEADER:
- if (!(m_rfTalkerId & TALKER_ID_HEADER)) {
+ case FLCO::TALKER_ALIAS_HEADER:
+ if (!(m_rfTalkerId & TalkerID::HEADER)) {
if (m_dumpTAData) {
- ::sprintf(text, "DMR Slot %u, FLCO_TALKER_ALIAS_HEADER (Embedded Talker Alias Header)", m_slot->m_slotNo);
+ ::sprintf(text, "DMR Slot %u, TALKER_ALIAS_HEADER (Embedded Talker Alias Header)", m_slot->m_slotNo);
Utils::dump(2U, text, data, 9U);
}
- m_rfTalkerId |= TALKER_ID_HEADER;
+ m_rfTalkerId |= TalkerID::HEADER;
}
break;
- case FLCO_TALKER_ALIAS_BLOCK1:
- if (!(m_rfTalkerId & TALKER_ID_BLOCK1)) {
+ case FLCO::TALKER_ALIAS_BLOCK1:
+ if (!(m_rfTalkerId & TalkerID::BLOCK1)) {
if (m_dumpTAData) {
- ::sprintf(text, "DMR Slot %u, FLCO_TALKER_ALIAS_BLOCK1 (Embedded Talker Alias Block 1)", m_slot->m_slotNo);
+ ::sprintf(text, "DMR Slot %u, TALKER_ALIAS_BLOCK1 (Embedded Talker Alias Block 1)", m_slot->m_slotNo);
Utils::dump(2U, text, data, 9U);
}
- m_rfTalkerId |= TALKER_ID_BLOCK1;
+ m_rfTalkerId |= TalkerID::BLOCK1;
}
break;
- case FLCO_TALKER_ALIAS_BLOCK2:
- if (!(m_rfTalkerId & TALKER_ID_BLOCK2)) {
+ case FLCO::TALKER_ALIAS_BLOCK2:
+ if (!(m_rfTalkerId & TalkerID::BLOCK2)) {
if (m_dumpTAData) {
- ::sprintf(text, "DMR Slot %u, FLCO_TALKER_ALIAS_BLOCK2 (Embedded Talker Alias Block 2)", m_slot->m_slotNo);
+ ::sprintf(text, "DMR Slot %u, TALKER_ALIAS_BLOCK2 (Embedded Talker Alias Block 2)", m_slot->m_slotNo);
Utils::dump(2U, text, data, 9U);
}
- m_rfTalkerId |= TALKER_ID_BLOCK2;
+ m_rfTalkerId |= TalkerID::BLOCK2;
}
break;
- case FLCO_TALKER_ALIAS_BLOCK3:
- if (!(m_rfTalkerId & TALKER_ID_BLOCK3)) {
+ case FLCO::TALKER_ALIAS_BLOCK3:
+ if (!(m_rfTalkerId & TalkerID::BLOCK3)) {
if (m_dumpTAData) {
- ::sprintf(text, "DMR Slot %u, FLCO_TALKER_ALIAS_BLOCK3 (Embedded Talker Alias Block 3)", m_slot->m_slotNo);
+ ::sprintf(text, "DMR Slot %u, TALKER_ALIAS_BLOCK3 (Embedded Talker Alias Block 3)", m_slot->m_slotNo);
Utils::dump(2U, text, data, 9U);
}
- m_rfTalkerId |= TALKER_ID_BLOCK3;
+ m_rfTalkerId |= TalkerID::BLOCK3;
}
break;
@@ -463,7 +464,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
- m_slot->writeNetwork(data, DT_VOICE, errors);
+ m_slot->writeNetwork(data, DataType::VOICE, errors);
if (m_embeddedLCOnly) {
// Only send the previously received LC
@@ -497,22 +498,22 @@ bool Voice::process(uint8_t* data, uint32_t len)
if (lc != nullptr) {
uint32_t srcId = lc->getSrcId();
uint32_t dstId = lc->getDstId();
- uint8_t flco = lc->getFLCO();
+ FLCO::E flco = lc->getFLCO();
CHECK_AUTHORITATIVE(dstId);
CHECK_TRAFFIC_COLLISION(dstId);
// validate the source RID
if (!acl::AccessControl::validateSrcId(srcId)) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_VOICE denial, RID rejection, srcId = %u", m_slot->m_slotNo, srcId);
+ LogWarning(LOG_RF, "DMR Slot %u, VOICE denial, RID rejection, srcId = %u", m_slot->m_slotNo, srcId);
m_slot->m_rfState = RS_RF_REJECTED;
return false;
}
// validate the target ID, if the target is a talkgroup
- if (flco == FLCO_GROUP) {
+ if (flco == FLCO::GROUP) {
if (!acl::AccessControl::validateTGId(m_slot->m_slotNo, dstId)) {
- LogWarning(LOG_RF, "DMR Slot %u, DT_VOICE denial, TGID rejection, srcId = %u, dstId = %u", m_slot->m_slotNo, srcId, dstId);
+ LogWarning(LOG_RF, "DMR Slot %u, VOICE denial, TGID rejection, srcId = %u, dstId = %u", m_slot->m_slotNo, srcId, dstId);
m_slot->m_rfState = RS_RF_REJECTED;
return false;
}
@@ -531,11 +532,11 @@ bool Voice::process(uint8_t* data, uint32_t len)
Sync::addDMRDataSync(start + 2U, m_slot->m_duplex);
lc::FullLC fullLC;
- fullLC.encode(*m_slot->m_rfLC, start + 2U, DT_VOICE_LC_HEADER);
+ fullLC.encode(*m_slot->m_rfLC, start + 2U, DataType::VOICE_LC_HEADER);
SlotType slotType;
slotType.setColorCode(m_slot->m_colorCode);
- slotType.setDataType(DT_VOICE_LC_HEADER);
+ slotType.setDataType(DataType::VOICE_LC_HEADER);
slotType.encode(start + 2U);
start[0U] = modem::TAG_DATA;
@@ -551,7 +552,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_rfEmbeddedReadN = 0U;
m_rfEmbeddedWriteN = 1U;
- m_rfTalkerId = TALKER_ID_NONE;
+ m_rfTalkerId = TalkerID::NONE;
m_slot->m_minRSSI = m_slot->m_rssi;
m_slot->m_maxRSSI = m_slot->m_rssi;
@@ -566,7 +567,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_slot->addFrame(start);
}
- m_slot->writeNetwork(start, DT_VOICE_LC_HEADER);
+ m_slot->writeNetwork(start, DataType::VOICE_LC_HEADER);
m_rfN = data[1U] & 0x0FU;
@@ -615,7 +616,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
if (m_slot->m_duplex)
m_slot->addFrame(data);
- m_slot->writeNetwork(data, DT_VOICE, errors);
+ m_slot->writeNetwork(data, DataType::VOICE, errors);
m_slot->m_rfState = RS_RF_AUDIO;
@@ -628,7 +629,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_slot->setShortLC(m_slot->m_slotNo, dstId, flco, true);
}
- ::ActivityLog("DMR", true, "Slot %u RF late entry from %u to %s%u", m_slot->m_slotNo, srcId, flco == FLCO_GROUP ? "TG " : "", dstId);
+ ::ActivityLog("DMR", true, "Slot %u RF late entry from %u to %s%u", m_slot->m_slotNo, srcId, flco == FLCO::GROUP ? "TG " : "", dstId);
return true;
}
}
@@ -648,20 +649,20 @@ void Voice::processNetwork(const data::Data& dmrData)
uint8_t data[DMR_FRAME_LENGTH_BYTES + 2U];
dmrData.getData(data + 2U);
- if (dataType == DT_VOICE_LC_HEADER) {
+ if (dataType == DataType::VOICE_LC_HEADER) {
if (m_slot->m_netState == RS_NET_AUDIO)
return;
lc::FullLC fullLC;
- std::unique_ptr lc = fullLC.decode(data + 2U, DT_VOICE_LC_HEADER);
+ std::unique_ptr lc = fullLC.decode(data + 2U, DataType::VOICE_LC_HEADER);
if (lc == nullptr) {
- LogWarning(LOG_NET, "DMR Slot %u, DT_VOICE_LC_HEADER, bad LC received from the network, replacing", m_slot->m_slotNo);
+ LogWarning(LOG_NET, "DMR Slot %u, VOICE_LC_HEADER, bad LC received from the network, replacing", m_slot->m_slotNo);
lc = std::make_unique(dmrData.getFLCO(), dmrData.getSrcId(), dmrData.getDstId());
}
uint32_t srcId = lc->getSrcId();
uint32_t dstId = lc->getDstId();
- uint8_t flco = lc->getFLCO();
+ FLCO::E flco = lc->getFLCO();
CHECK_NET_AUTHORITATIVE(dstId);
CHECK_NET_TRAFFIC_COLLISION(dstId);
@@ -671,12 +672,12 @@ void Voice::processNetwork(const data::Data& dmrData)
}
if (dstId != dmrData.getDstId() || srcId != dmrData.getSrcId() || flco != dmrData.getFLCO())
- LogWarning(LOG_NET, "DMR Slot %u, DT_VOICE_LC_HEADER, header doesn't match the DMR RF header: %u->%s%u %u->%s%u", m_slot->m_slotNo,
- dmrData.getSrcId(), dmrData.getFLCO() == FLCO_GROUP ? "TG" : "", dmrData.getDstId(),
- srcId, flco == FLCO_GROUP ? "TG" : "", dstId);
+ LogWarning(LOG_NET, "DMR Slot %u, VOICE_LC_HEADER, header doesn't match the DMR RF header: %u->%s%u %u->%s%u", m_slot->m_slotNo,
+ dmrData.getSrcId(), dmrData.getFLCO() == FLCO::GROUP ? "TG" : "", dmrData.getDstId(),
+ srcId, flco == FLCO::GROUP ? "TG" : "", dstId);
if (m_verbose) {
- LogMessage(LOG_NET, "DMR Slot %u, DT_VOICE_LC_HEADER, srcId = %u, dstId = %u, FLCO = $%02X, FID = $%02X, PF = %u", m_slot->m_slotNo, lc->getSrcId(), lc->getDstId(), lc->getFLCO(), lc->getFID(), lc->getPF());
+ LogMessage(LOG_NET, "DMR Slot %u, VOICE_LC_HEADER, srcId = %u, dstId = %u, FLCO = $%02X, FID = $%02X, PF = %u", m_slot->m_slotNo, lc->getSrcId(), lc->getDstId(), lc->getFLCO(), lc->getFID(), lc->getPF());
}
m_slot->m_netLC = std::move(lc);
@@ -687,12 +688,12 @@ void Voice::processNetwork(const data::Data& dmrData)
m_slot->m_voice->m_netEmbeddedData[1U].setLC(*m_slot->m_netLC);
// Regenerate the LC data
- fullLC.encode(*m_slot->m_netLC, data + 2U, DT_VOICE_LC_HEADER);
+ fullLC.encode(*m_slot->m_netLC, data + 2U, DataType::VOICE_LC_HEADER);
// Regenerate the Slot Type
SlotType slotType;
slotType.setColorCode(m_slot->m_colorCode);
- slotType.setDataType(DT_VOICE_LC_HEADER);
+ slotType.setDataType(DataType::VOICE_LC_HEADER);
slotType.encode(data + 2U);
// Convert the Data Sync to be from the BS or MS as needed
@@ -713,7 +714,7 @@ void Voice::processNetwork(const data::Data& dmrData)
m_slot->m_voice->m_netEmbeddedReadN = 0U;
m_slot->m_voice->m_netEmbeddedWriteN = 1U;
- m_slot->m_voice->m_netTalkerId = TALKER_ID_NONE;
+ m_slot->m_voice->m_netTalkerId = TalkerID::NONE;
if (m_slot->m_duplex) {
m_slot->m_txQueue.clear();
@@ -744,9 +745,9 @@ void Voice::processNetwork(const data::Data& dmrData)
m_slot->m_netLC->getSrcId(), m_slot->m_netLC->getDstId(), m_slot->m_netLC->getFLCO(), m_slot->m_netLC->getFID(), m_slot->m_netLC->getPF());
}
- ::ActivityLog("DMR", false, "Slot %u network voice header from %u to %s%u", m_slot->m_slotNo, srcId, flco == FLCO_GROUP ? "TG " : "", dstId);
+ ::ActivityLog("DMR", false, "Slot %u network voice header from %u to %s%u", m_slot->m_slotNo, srcId, flco == FLCO::GROUP ? "TG " : "", dstId);
}
- else if (dataType == DT_VOICE_PI_HEADER) {
+ else if (dataType == DataType::VOICE_PI_HEADER) {
if (m_slot->m_netState != RS_NET_AUDIO) {
std::unique_ptr lc = std::make_unique(dmrData.getFLCO(), dmrData.getSrcId(), dmrData.getDstId());
@@ -777,11 +778,11 @@ void Voice::processNetwork(const data::Data& dmrData)
Sync::addDMRDataSync(start + 2U, m_slot->m_duplex);
lc::FullLC fullLC;
- fullLC.encode(*m_slot->m_netLC, start + 2U, DT_VOICE_LC_HEADER);
+ fullLC.encode(*m_slot->m_netLC, start + 2U, DataType::VOICE_LC_HEADER);
SlotType slotType;
slotType.setColorCode(m_slot->m_colorCode);
- slotType.setDataType(DT_VOICE_LC_HEADER);
+ slotType.setDataType(DataType::VOICE_LC_HEADER);
slotType.encode(start + 2U);
start[0U] = modem::TAG_DATA;
@@ -809,13 +810,13 @@ void Voice::processNetwork(const data::Data& dmrData)
m_slot->setShortLC(m_slot->m_slotNo, dstId, m_slot->m_netLC->getFLCO(), true);
::ActivityLog("DMR", false, "Slot %u network late entry from %u to %s%u",
- m_slot->m_slotNo, srcId, m_slot->m_netLC->getFLCO() == FLCO_GROUP ? "TG " : "", dstId);
+ m_slot->m_slotNo, srcId, m_slot->m_netLC->getFLCO() == FLCO::GROUP ? "TG " : "", dstId);
}
lc::FullLC fullLC;
std::unique_ptr lc = fullLC.decodePI(data + 2U);
if (lc == nullptr) {
- LogWarning(LOG_NET, "DMR Slot %u, DT_VOICE_PI_HEADER, bad LC received, replacing", m_slot->m_slotNo);
+ LogWarning(LOG_NET, "DMR Slot %u, VOICE_PI_HEADER, bad LC received, replacing", m_slot->m_slotNo);
lc = std::make_unique();
lc->setDstId(dmrData.getDstId());
}
@@ -828,7 +829,7 @@ void Voice::processNetwork(const data::Data& dmrData)
// Regenerate the Slot Type
SlotType slotType;
slotType.setColorCode(m_slot->m_colorCode);
- slotType.setDataType(DT_VOICE_PI_HEADER);
+ slotType.setDataType(DataType::VOICE_PI_HEADER);
slotType.encode(data + 2U);
// Convert the Data Sync to be from the BS or MS as needed
@@ -844,7 +845,7 @@ void Voice::processNetwork(const data::Data& dmrData)
m_slot->m_netPrivacyLC->getAlgId(), m_slot->m_netPrivacyLC->getKId(), m_slot->m_netPrivacyLC->getDstId());
}
}
- else if (dataType == DT_VOICE_SYNC) {
+ else if (dataType == DataType::VOICE_SYNC) {
if (m_slot->m_netState == RS_NET_IDLE) {
std::unique_ptr lc = std::make_unique(dmrData.getFLCO(), dmrData.getSrcId(), dmrData.getDstId());
@@ -879,11 +880,11 @@ void Voice::processNetwork(const data::Data& dmrData)
Sync::addDMRDataSync(start + 2U, m_slot->m_duplex);
lc::FullLC fullLC;
- fullLC.encode(*m_slot->m_netLC, start + 2U, DT_VOICE_LC_HEADER);
+ fullLC.encode(*m_slot->m_netLC, start + 2U, DataType::VOICE_LC_HEADER);
SlotType slotType;
slotType.setColorCode(m_slot->m_colorCode);
- slotType.setDataType(DT_VOICE_LC_HEADER);
+ slotType.setDataType(DataType::VOICE_LC_HEADER);
slotType.encode(start + 2U);
start[0U] = modem::TAG_DATA;
@@ -905,7 +906,7 @@ void Voice::processNetwork(const data::Data& dmrData)
m_netEmbeddedReadN = 0U;
m_netEmbeddedWriteN = 1U;
- m_netTalkerId = TALKER_ID_NONE;
+ m_netTalkerId = TalkerID::NONE;
m_slot->m_netState = RS_NET_AUDIO;
m_slot->m_netLastDstId = dstId;
@@ -915,7 +916,7 @@ void Voice::processNetwork(const data::Data& dmrData)
m_slot->setShortLC(m_slot->m_slotNo, dstId, m_slot->m_netLC->getFLCO(), true);
::ActivityLog("DMR", false, "Slot %u network late entry from %u to %s%u",
- m_slot->m_slotNo, srcId, m_slot->m_netLC->getFLCO() == FLCO_GROUP ? "TG " : "", dstId);
+ m_slot->m_slotNo, srcId, m_slot->m_netLC->getFLCO() == FLCO::GROUP ? "TG " : "", dstId);
}
if (m_slot->m_netState == RS_NET_AUDIO) {
@@ -923,7 +924,7 @@ void Voice::processNetwork(const data::Data& dmrData)
if (fid == FID_ETSI || fid == FID_DMRA) {
m_slot->m_netErrs += m_fec.regenerateDMR(data + 2U);
if (m_verbose) {
- LogMessage(LOG_NET, "DMR Slot %u, DT_VOICE_SYNC audio, sequence no = %u, errs = %u/141 (%.1f%%)",
+ LogMessage(LOG_NET, "DMR Slot %u, VOICE_SYNC audio, sequence no = %u, errs = %u/141 (%.1f%%)",
m_slot->m_slotNo, m_netN, m_slot->m_netErrs, float(m_slot->m_netErrs) / 1.41F);
}
}
@@ -965,7 +966,7 @@ void Voice::processNetwork(const data::Data& dmrData)
m_netN = dmrData.getN();
}
}
- else if (dataType == DT_VOICE) {
+ else if (dataType == DataType::VOICE) {
if (m_slot->m_netState != RS_NET_AUDIO)
return;
@@ -995,55 +996,55 @@ void Voice::processNetwork(const data::Data& dmrData)
char text[80U];
switch (flco) {
- case FLCO_GROUP:
- case FLCO_PRIVATE:
+ case FLCO::GROUP:
+ case FLCO::PRIVATE:
break;
- case FLCO_GPS_INFO:
+ case FLCO::GPS_INFO:
if (m_dumpTAData) {
- ::sprintf(text, "DMR Slot %u, FLCO_GPS_INFO (Embedded GPS Info)", m_slot->m_slotNo);
+ ::sprintf(text, "DMR Slot %u, GPS_INFO (Embedded GPS Info)", m_slot->m_slotNo);
Utils::dump(2U, text, data, 9U);
}
logGPSPosition(m_slot->m_netLC->getSrcId(), data);
break;
- case FLCO_TALKER_ALIAS_HEADER:
- if (!(m_netTalkerId & TALKER_ID_HEADER)) {
+ case FLCO::TALKER_ALIAS_HEADER:
+ if (!(m_netTalkerId & TalkerID::HEADER)) {
if (m_dumpTAData) {
- ::sprintf(text, "DMR Slot %u, FLCO_TALKER_ALIAS_HEADER (Embedded Talker Alias Header)", m_slot->m_slotNo);
+ ::sprintf(text, "DMR Slot %u, TALKER_ALIAS_HEADER (Embedded Talker Alias Header)", m_slot->m_slotNo);
Utils::dump(2U, text, data, 9U);
}
- m_netTalkerId |= TALKER_ID_HEADER;
+ m_netTalkerId |= TalkerID::HEADER;
}
break;
- case FLCO_TALKER_ALIAS_BLOCK1:
- if (!(m_netTalkerId & TALKER_ID_BLOCK1)) {
+ case FLCO::TALKER_ALIAS_BLOCK1:
+ if (!(m_netTalkerId & TalkerID::BLOCK1)) {
if (m_dumpTAData) {
- ::sprintf(text, "DMR Slot %u, FLCO_TALKER_ALIAS_BLOCK1 (Embedded Talker Alias Block 1)", m_slot->m_slotNo);
+ ::sprintf(text, "DMR Slot %u, TALKER_ALIAS_BLOCK1 (Embedded Talker Alias Block 1)", m_slot->m_slotNo);
Utils::dump(2U, text, data, 9U);
}
- m_netTalkerId |= TALKER_ID_BLOCK1;
+ m_netTalkerId |= TalkerID::BLOCK1;
}
break;
- case FLCO_TALKER_ALIAS_BLOCK2:
- if (!(m_netTalkerId & TALKER_ID_BLOCK2)) {
+ case FLCO::TALKER_ALIAS_BLOCK2:
+ if (!(m_netTalkerId & TalkerID::BLOCK2)) {
if (m_dumpTAData) {
- ::sprintf(text, "DMR Slot %u, FLCO_TALKER_ALIAS_BLOCK2 (Embedded Talker Alias Block 2)", m_slot->m_slotNo);
+ ::sprintf(text, "DMR Slot %u, TALKER_ALIAS_BLOCK2 (Embedded Talker Alias Block 2)", m_slot->m_slotNo);
Utils::dump(2U, text, data, 9U);
}
- m_netTalkerId |= TALKER_ID_BLOCK2;
+ m_netTalkerId |= TalkerID::BLOCK2;
}
break;
- case FLCO_TALKER_ALIAS_BLOCK3:
- if (!(m_netTalkerId & TALKER_ID_BLOCK3)) {
+ case FLCO::TALKER_ALIAS_BLOCK3:
+ if (!(m_netTalkerId & TalkerID::BLOCK3)) {
if (m_dumpTAData) {
- ::sprintf(text, "DMR Slot %u, FLCO_TALKER_ALIAS_BLOCK3 (Embedded Talker Alias Block 3)", m_slot->m_slotNo);
+ ::sprintf(text, "DMR Slot %u, TALKER_ALIAS_BLOCK3 (Embedded Talker Alias Block 3)", m_slot->m_slotNo);
Utils::dump(2U, text, data, 9U);
}
- m_netTalkerId |= TALKER_ID_BLOCK3;
+ m_netTalkerId |= TalkerID::BLOCK3;
}
break;
default:
@@ -1128,8 +1129,8 @@ Voice::Voice(Slot* slot, network::BaseNetwork* network, bool embeddedLCOnly, boo
m_netEmbeddedData(nullptr),
m_netEmbeddedReadN(0U),
m_netEmbeddedWriteN(1U),
- m_rfTalkerId(TALKER_ID_NONE),
- m_netTalkerId(TALKER_ID_NONE),
+ m_rfTalkerId(TalkerID::NONE),
+ m_netTalkerId(TalkerID::NONE),
m_fec(),
m_embeddedLCOnly(embeddedLCOnly),
m_dumpTAData(dumpTAData),
@@ -1211,11 +1212,11 @@ void Voice::logGPSPosition(const uint32_t srcId, const uint8_t* data)
///
void Voice::insertNullAudio(uint8_t* data)
{
- uint8_t* ambeBuffer = new uint8_t[dmr::DMR_AMBE_LENGTH_BYTES];
- ::memset(ambeBuffer, 0x00U, dmr::DMR_AMBE_LENGTH_BYTES);
+ uint8_t* ambeBuffer = new uint8_t[DMR_AMBE_LENGTH_BYTES];
+ ::memset(ambeBuffer, 0x00U, DMR_AMBE_LENGTH_BYTES);
for (uint32_t i = 0; i < 3U; i++) {
- ::memcpy(ambeBuffer + (i * 9U), DMR_NULL_AMBE, 9U);
+ ::memcpy(ambeBuffer + (i * 9U), NULL_AMBE, 9U);
}
::memcpy(data, ambeBuffer, 13U);
@@ -1276,7 +1277,7 @@ void Voice::insertSilence(uint32_t count)
}
else {
// Not sure what to do if this isn't AMBE audio
- ::memcpy(data, DMR_SILENCE_DATA, DMR_FRAME_LENGTH_BYTES + 2U);
+ ::memcpy(data, SILENCE_DATA, DMR_FRAME_LENGTH_BYTES + 2U);
}
uint8_t n = (m_netN + 1U) % 6U;
@@ -1290,7 +1291,7 @@ void Voice::insertSilence(uint32_t count)
// only use our silence frame if its AMBE audio data
if (fid == FID_ETSI || fid == FID_DMRA) {
if (i > 0U) {
- ::memcpy(data, DMR_SILENCE_DATA, DMR_FRAME_LENGTH_BYTES + 2U);
+ ::memcpy(data, SILENCE_DATA, DMR_FRAME_LENGTH_BYTES + 2U);
m_lastFrameValid = false;
}
}
diff --git a/src/host/modem/Modem.cpp b/src/host/modem/Modem.cpp
index 566674e5..6a3c1822 100644
--- a/src/host/modem/Modem.cpp
+++ b/src/host/modem/Modem.cpp
@@ -651,7 +651,7 @@ void Modem::clock(uint32_t ms)
uint8_t data = m_length - 2U;
m_rxDMRQueue1.addData(&data, 1U);
- if (m_buffer[3U] == (dmr::DMR_SYNC_DATA | dmr::DT_TERMINATOR_WITH_LC))
+ if (m_buffer[3U] == (DMRDEF::SYNC_DATA | DMRDEF::DataType::TERMINATOR_WITH_LC))
data = TAG_EOT;
else
data = TAG_DATA;
@@ -676,7 +676,7 @@ void Modem::clock(uint32_t ms)
uint8_t data = m_length - 2U;
m_rxDMRQueue2.addData(&data, 1U);
- if (m_buffer[3U] == (dmr::DMR_SYNC_DATA | dmr::DT_TERMINATOR_WITH_LC))
+ if (m_buffer[3U] == (DMRDEF::SYNC_DATA | DMRDEF::DataType::TERMINATOR_WITH_LC))
data = TAG_EOT;
else
data = TAG_DATA;
@@ -897,10 +897,10 @@ void Modem::clock(uint32_t ms)
m_cd = (m_buffer[5U] & 0x40U) == 0x40U;
// spaces from the modem are returned in "logical" frame count, not raw byte size
- m_dmrSpace1 = m_buffer[7U] * (dmr::DMR_FRAME_LENGTH_BYTES + 2U);
- m_dmrSpace2 = m_buffer[8U] * (dmr::DMR_FRAME_LENGTH_BYTES + 2U);
- m_p25Space = m_buffer[10U] * (p25::P25_LDU_FRAME_LENGTH_BYTES);
- m_nxdnSpace = m_buffer[11U] * (nxdn::NXDN_FRAME_LENGTH_BYTES);
+ m_dmrSpace1 = m_buffer[7U] * (DMRDEF::DMR_FRAME_LENGTH_BYTES + 2U);
+ m_dmrSpace2 = m_buffer[8U] * (DMRDEF::DMR_FRAME_LENGTH_BYTES + 2U);
+ m_p25Space = m_buffer[10U] * (P25DEF::P25_LDU_FRAME_LENGTH_BYTES);//(P25DEF::P25_PDU_FRAME_LENGTH_BYTES);
+ m_nxdnSpace = m_buffer[11U] * (NXDDEF::NXDN_FRAME_LENGTH_BYTES);
if (m_dumpModemStatus) {
LogDebug(LOG_MODEM, "Modem::clock(), CMD_GET_STATUS, isHotspot = %u, dmr = %u / %u, p25 = %u / %u, nxdn = %u / %u, modemState = %u, tx = %u, adcOverflow = %u, rxOverflow = %u, txOverflow = %u, dacOverflow = %u, dmrSpace1 = %u, dmrSpace2 = %u, p25Space = %u, nxdnSpace = %u",
@@ -1099,7 +1099,7 @@ uint32_t Modem::readNXDNFrame(uint8_t* data)
/// True, if the DMR Slot 1 ring buffer has free space, otherwise false.
bool Modem::hasDMRSpace1() const
{
- return m_dmrSpace1 >= (dmr::DMR_FRAME_LENGTH_BYTES + 2U);
+ return m_dmrSpace1 >= (DMRDEF::DMR_FRAME_LENGTH_BYTES + 2U);
}
///
@@ -1108,7 +1108,7 @@ bool Modem::hasDMRSpace1() const
/// True, if the DMR Slot 2 ring buffer has free space, otherwise false.
bool Modem::hasDMRSpace2() const
{
- return m_dmrSpace2 >= (dmr::DMR_FRAME_LENGTH_BYTES + 2U);
+ return m_dmrSpace2 >= (DMRDEF::DMR_FRAME_LENGTH_BYTES + 2U);
}
///
@@ -1127,7 +1127,7 @@ bool Modem::hasP25Space(uint32_t length) const
/// True, if the NXDN ring buffer has free space, otherwise false.
bool Modem::hasNXDNSpace() const
{
- return m_nxdnSpace >= nxdn::NXDN_FRAME_LENGTH_BYTES;
+ return m_nxdnSpace >= NXDDEF::NXDN_FRAME_LENGTH_BYTES;
}
///
@@ -1271,7 +1271,7 @@ void Modem::injectDMRFrame1(const uint8_t* data, uint32_t length)
val = TAG_DATA;
m_rxDMRQueue1.addData(&val, 1U);
- val = dmr::DMR_SYNC_VOICE & dmr::DMR_SYNC_DATA; // valid sync
+ val = DMRDEF::SYNC_VOICE & DMRDEF::SYNC_DATA; // valid sync
m_rxDMRQueue1.addData(&val, 1U);
m_rxDMRQueue1.addData(data, length);
@@ -1297,7 +1297,7 @@ void Modem::injectDMRFrame2(const uint8_t* data, uint32_t length)
val = TAG_DATA;
m_rxDMRQueue2.addData(&val, 1U);
- val = dmr::DMR_SYNC_VOICE & dmr::DMR_SYNC_DATA; // valid sync
+ val = DMRDEF::SYNC_VOICE & DMRDEF::SYNC_DATA; // valid sync
m_rxDMRQueue2.addData(&val, 1U);
m_rxDMRQueue2.addData(data, length);
diff --git a/src/host/network/RESTAPI.cpp b/src/host/network/RESTAPI.cpp
index edc35a6c..9d08b665 100644
--- a/src/host/network/RESTAPI.cpp
+++ b/src/host/network/RESTAPI.cpp
@@ -149,7 +149,7 @@ RESTAPI::RESTAPI(const std::string& address, uint16_t port, const std::string& p
m_enableSSL(enableSSL),
#endif // ENABLE_TCP_SSL
m_random(),
- m_p25MFId(p25::P25_MFG_STANDARD),
+ m_p25MFId(P25DEF::MFG_STANDARD),
m_password(password),
m_passwordHash(nullptr),
m_debug(debug),
@@ -1475,6 +1475,7 @@ void RESTAPI::restAPI_GetDMRDumpCSBK(const HTTPPayload& request, HTTPPayload& re
///
void RESTAPI::restAPI_PutDMRRID(const HTTPPayload& request, HTTPPayload& reply, const RequestMatch& match)
{
+ using namespace dmr::defines;
if (!validateAuth(request, reply)) {
return;
}
@@ -1523,16 +1524,16 @@ void RESTAPI::restAPI_PutDMRRID(const HTTPPayload& request, HTTPPayload& reply,
errorPayload(reply, "OK", HTTPPayload::OK);
std::string command = req["command"].get();
if (::strtolower(command) == RID_CMD_PAGE) {
- m_dmr->writeRF_Call_Alrt(slot, p25::P25_WUID_FNE, dstId);
+ m_dmr->writeRF_Call_Alrt(slot, WUID_ALL, dstId);
}
else if (::strtolower(command) == RID_CMD_CHECK) {
- m_dmr->writeRF_Ext_Func(slot, dmr::DMR_EXT_FNCT_CHECK, p25::P25_WUID_FNE, dstId);
+ m_dmr->writeRF_Ext_Func(slot, ExtendedFunctions::CHECK, WUID_ALL, dstId);
}
else if (::strtolower(command) == RID_CMD_INHIBIT) {
- m_dmr->writeRF_Ext_Func(slot, dmr::DMR_EXT_FNCT_INHIBIT, p25::P25_WUID_FNE, dstId);
+ m_dmr->writeRF_Ext_Func(slot, ExtendedFunctions::INHIBIT, WUID_STUNI, dstId);
}
else if (::strtolower(command) == RID_CMD_UNINHIBIT) {
- m_dmr->writeRF_Ext_Func(slot, dmr::DMR_EXT_FNCT_UNINHIBIT, p25::P25_WUID_FNE, dstId);
+ m_dmr->writeRF_Ext_Func(slot, ExtendedFunctions::UNINHIBIT, WUID_STUNI, dstId);
}
else {
errorPayload(reply, "invalid command");
@@ -1840,7 +1841,9 @@ void RESTAPI::restAPI_GetP25DumpTSBK(const HTTPPayload& request, HTTPPayload& re
///
void RESTAPI::restAPI_PutP25RID(const HTTPPayload& request, HTTPPayload& reply, const RequestMatch& match)
{
- if (!validateAuth(request, reply)) {
+ using namespace p25::defines;
+ if (!validateAuth(request, reply))
+ {
return;
}
@@ -1891,16 +1894,16 @@ void RESTAPI::restAPI_PutP25RID(const HTTPPayload& request, HTTPPayload& reply,
m_p25->control()->setLastMFId(mfId);
}
else if (::strtolower(command) == RID_CMD_PAGE) {
- m_p25->control()->writeRF_TSDU_Call_Alrt(p25::P25_WUID_FNE, dstId);
+ m_p25->control()->writeRF_TSDU_Call_Alrt(WUID_FNE, dstId);
}
else if (::strtolower(command) == RID_CMD_CHECK) {
- m_p25->control()->writeRF_TSDU_Ext_Func(p25::P25_EXT_FNCT_CHECK, p25::P25_WUID_FNE, dstId);
+ m_p25->control()->writeRF_TSDU_Ext_Func(ExtendedFunctions::CHECK, WUID_FNE, dstId);
}
else if (::strtolower(command) == RID_CMD_INHIBIT) {
- m_p25->control()->writeRF_TSDU_Ext_Func(p25::P25_EXT_FNCT_INHIBIT, p25::P25_WUID_FNE, dstId);
+ m_p25->control()->writeRF_TSDU_Ext_Func(ExtendedFunctions::INHIBIT, WUID_FNE, dstId);
}
else if (::strtolower(command) == RID_CMD_UNINHIBIT) {
- m_p25->control()->writeRF_TSDU_Ext_Func(p25::P25_EXT_FNCT_UNINHIBIT, p25::P25_WUID_FNE, dstId);
+ m_p25->control()->writeRF_TSDU_Ext_Func(ExtendedFunctions::UNINHIBIT, WUID_FNE, dstId);
}
else if (::strtolower(command) == RID_CMD_GAQ) {
m_p25->control()->writeRF_TSDU_Grp_Aff_Q(dstId);
@@ -2018,7 +2021,9 @@ void RESTAPI::restAPI_GetP25CCBroadcast(const HTTPPayload& request, HTTPPayload&
///
void RESTAPI::restAPI_PutP25RawTSBK(const HTTPPayload& request, HTTPPayload& reply, const RequestMatch& match)
{
- if (!validateAuth(request, reply)) {
+ using namespace p25::defines;
+ if (!validateAuth(request, reply))
+ {
return;
}
@@ -2051,17 +2056,17 @@ void RESTAPI::restAPI_PutP25RawTSBK(const HTTPPayload& request, HTTPPayload& rep
}
const char* tsbkPtr = tsbkBytes.c_str();
- uint8_t* tsbk = new uint8_t[p25::P25_TSBK_LENGTH_BYTES];
- ::memset(tsbk, 0x00U, p25::P25_TSBK_LENGTH_BYTES);
+ uint8_t* tsbk = new uint8_t[P25_TSBK_LENGTH_BYTES];
+ ::memset(tsbk, 0x00U, P25_TSBK_LENGTH_BYTES);
- for (uint8_t i = 0; i < p25::P25_TSBK_LENGTH_BYTES; i++) {
+ for (uint8_t i = 0; i < P25_TSBK_LENGTH_BYTES; i++) {
char t[4] = {tsbkPtr[0], tsbkPtr[1], 0};
tsbk[i] = (uint8_t)::strtoul(t, NULL, 16);
tsbkPtr += 2 * sizeof(char);
}
if (m_debug) {
- Utils::dump("Raw TSBK", tsbk, p25::P25_TSBK_LENGTH_BYTES);
+ Utils::dump("Raw TSBK", tsbk, P25_TSBK_LENGTH_BYTES);
}
m_p25->control()->writeRF_TSDU_Raw(tsbk);
diff --git a/src/host/nxdn/Control.cpp b/src/host/nxdn/Control.cpp
index 829e8473..853542ff 100644
--- a/src/host/nxdn/Control.cpp
+++ b/src/host/nxdn/Control.cpp
@@ -28,6 +28,7 @@
#include "ActivityLog.h"
using namespace nxdn;
+using namespace nxdn::defines;
using namespace nxdn::packet;
#include
@@ -237,39 +238,39 @@ void Control::setOptions(yaml::Node& conf, bool supervisor, const std::string cw
/*
** Voice Silence and Frame Loss Thresholds
*/
- m_voice->m_silenceThreshold = nxdnProtocol["silenceThreshold"].as(nxdn::DEFAULT_SILENCE_THRESHOLD);
+ m_voice->m_silenceThreshold = nxdnProtocol["silenceThreshold"].as(DEFAULT_SILENCE_THRESHOLD);
if (m_voice->m_silenceThreshold > MAX_NXDN_VOICE_ERRORS) {
- LogWarning(LOG_NXDN, "Silence threshold > %u, defaulting to %u", nxdn::MAX_NXDN_VOICE_ERRORS, nxdn::DEFAULT_SILENCE_THRESHOLD);
- m_voice->m_silenceThreshold = nxdn::DEFAULT_SILENCE_THRESHOLD;
+ LogWarning(LOG_NXDN, "Silence threshold > %u, defaulting to %u", MAX_NXDN_VOICE_ERRORS, DEFAULT_SILENCE_THRESHOLD);
+ m_voice->m_silenceThreshold = DEFAULT_SILENCE_THRESHOLD;
}
// either MAX_NXDN_VOICE_ERRORS or 0 will disable the threshold logic
if (m_voice->m_silenceThreshold == 0) {
- LogWarning(LOG_NXDN, "Silence threshold set to zero, defaulting to %u", nxdn::MAX_NXDN_VOICE_ERRORS);
- m_voice->m_silenceThreshold = nxdn::MAX_NXDN_VOICE_ERRORS;
+ LogWarning(LOG_NXDN, "Silence threshold set to zero, defaulting to %u", MAX_NXDN_VOICE_ERRORS);
+ m_voice->m_silenceThreshold = MAX_NXDN_VOICE_ERRORS;
}
- m_frameLossThreshold = (uint8_t)nxdnProtocol["frameLossThreshold"].as(nxdn::DEFAULT_FRAME_LOSS_THRESHOLD);
+ m_frameLossThreshold = (uint8_t)nxdnProtocol["frameLossThreshold"].as(DEFAULT_FRAME_LOSS_THRESHOLD);
if (m_frameLossThreshold == 0U) {
m_frameLossThreshold = 1U;
}
- if (m_frameLossThreshold > nxdn::DEFAULT_FRAME_LOSS_THRESHOLD * 2U) {
- LogWarning(LOG_NXDN, "Frame loss threshold may be excessive, default is %u, configured is %u", nxdn::DEFAULT_FRAME_LOSS_THRESHOLD, m_frameLossThreshold);
+ if (m_frameLossThreshold > DEFAULT_FRAME_LOSS_THRESHOLD * 2U) {
+ LogWarning(LOG_NXDN, "Frame loss threshold may be excessive, default is %u, configured is %u", DEFAULT_FRAME_LOSS_THRESHOLD, m_frameLossThreshold);
}
/*
** CC Service Class
*/
- uint8_t serviceClass = NXDN_SIF1_VOICE_CALL_SVC | NXDN_SIF1_DATA_CALL_SVC;
+ uint8_t serviceClass = SiteInformation1::VOICE_CALL_SVC | SiteInformation1::DATA_CALL_SVC;
if (m_enableControl) {
- serviceClass |= NXDN_SIF1_GRP_REG_SVC;
+ serviceClass |= SiteInformation1::GRP_REG_SVC;
}
/*
** Site Data
*/
// calculate the NXDN location ID
- uint32_t locId = NXDN_LOC_CAT_GLOBAL; // DVM is currently fixed to "global" category
+ uint32_t locId = LocationCategory::GLOBAL; // DVM is currently fixed to "global" category
locId = (locId << 10) + (sysId & 0x3FFU);
locId = (locId << 12) + (siteId & 0xFFFU);
@@ -460,9 +461,9 @@ bool Control::processFrame(uint8_t* data, uint32_t len)
return false;
}
- uint8_t rfct = m_rfLastLICH.getRFCT();
- uint8_t fct = m_rfLastLICH.getFCT();
- uint8_t option = m_rfLastLICH.getOption();
+ RFChannelType::E rfct = m_rfLastLICH.getRFCT();
+ FuncChannelType::E fct = m_rfLastLICH.getFCT();
+ ChOption::E option = m_rfLastLICH.getOption();
if (m_debug) {
LogDebug(LOG_RF, "NXDN, valid LICH, rfState = %u, netState = %u, rfct = %u, fct = %u", m_rfState, m_netState, rfct, fct);
@@ -470,19 +471,19 @@ bool Control::processFrame(uint8_t* data, uint32_t len)
// are we interrupting a running CC?
if (m_ccRunning) {
- if ((fct != NXDN_LICH_CAC_INBOUND_SHORT) || (fct != NXDN_LICH_CAC_INBOUND_LONG)) {
+ if ((fct != FuncChannelType::CAC_INBOUND_SHORT) || (fct != FuncChannelType::CAC_INBOUND_LONG)) {
m_ccHalted = true;
}
}
bool ret = false;
- if (rfct == NXDN_LICH_RFCT_RCCH) {
+ if (rfct == RFChannelType::RCCH) {
ret = m_control->process(fct, option, data, len);
}
- else if (rfct == NXDN_LICH_RFCT_RTCH || rfct == NXDN_LICH_RFCT_RDCH) {
+ else if (rfct == RFChannelType::RTCH || rfct == RFChannelType::RDCH) {
switch (fct) {
- case NXDN_LICH_USC_UDCH:
+ case FuncChannelType::USC_UDCH:
if (!m_dedicatedControl)
ret = m_data->process(option, data, len);
break;
@@ -1016,12 +1017,12 @@ void Control::processNetwork()
if (valid)
m_rfLastLICH = lich;
- uint8_t usc = m_rfLastLICH.getFCT();
- uint8_t option = m_rfLastLICH.getOption();
+ FuncChannelType::E usc = m_rfLastLICH.getFCT();
+ ChOption::E option = m_rfLastLICH.getOption();
// forward onto the specific processor for final processing and delivery
switch (usc) {
- case NXDN_LICH_USC_UDCH:
+ case FuncChannelType::USC_UDCH:
ret = m_data->processNetwork(option, lc, data.get(), frameLength);
break;
default:
@@ -1190,23 +1191,23 @@ void Control::writeRF_Message_Tx_Rel(bool noNetwork)
// generate the LICH
channel::LICH lich;
- lich.setRFCT(NXDN_LICH_RFCT_RTCH);
- lich.setFCT(NXDN_LICH_USC_SACCH_NS);
- lich.setOption(NXDN_LICH_STEAL_FACCH);
+ lich.setRFCT(RFChannelType::RTCH);
+ lich.setFCT(FuncChannelType::USC_SACCH_NS);
+ lich.setOption(ChOption::STEAL_FACCH);
lich.setOutbound(true);
lich.encode(data + 2U);
uint8_t buffer[NXDN_RTCH_LC_LENGTH_BYTES];
::memset(buffer, 0x00U, NXDN_RTCH_LC_LENGTH_BYTES);
- m_rfLC.setMessageType(RTCH_MESSAGE_TYPE_TX_REL);
+ m_rfLC.setMessageType(MessageType::RTCH_TX_REL);
m_rfLC.encode(buffer, NXDN_UDCH_LENGTH_BITS);
// generate the SACCH
channel::SACCH sacch;
sacch.setData(SACCH_IDLE);
sacch.setRAN(m_ran);
- sacch.setStructure(NXDN_SR_SINGLE);
+ sacch.setStructure(ChStructure::SR_SINGLE);
sacch.encode(data + 2U);
// generate the FACCH1
diff --git a/src/host/nxdn/packet/ControlSignaling.cpp b/src/host/nxdn/packet/ControlSignaling.cpp
index 07550467..3e0d4826 100644
--- a/src/host/nxdn/packet/ControlSignaling.cpp
+++ b/src/host/nxdn/packet/ControlSignaling.cpp
@@ -24,6 +24,7 @@
#include "ActivityLog.h"
using namespace nxdn;
+using namespace nxdn::defines;
using namespace nxdn::lc;
using namespace nxdn::lc::rcch;
using namespace nxdn::packet;
@@ -39,7 +40,7 @@ using namespace nxdn::packet;
#define IS_SUPPORT_CONTROL_CHECK(_PCKT_STR, _PCKT, _SRCID) \
if (!m_nxdn->m_enableControl) { \
LogWarning(LOG_RF, "NXDN, %s denial, unsupported service, srcId = %u", _PCKT_STR.c_str(), _SRCID); \
- writeRF_Message_Deny(0U, _SRCID, NXDN_CAUSE_SVC_UNAVAILABLE, _PCKT); \
+ writeRF_Message_Deny(0U, _SRCID, CauseResponse::SVC_UNAVAILABLE, _PCKT); \
m_nxdn->m_rfState = RS_RF_REJECTED; \
return false; \
}
@@ -131,7 +132,7 @@ const uint32_t GRANT_TIMER_TIMEOUT = 15U;
/// Buffer containing data frame.
/// Length of data frame.
///
-bool ControlSignaling::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
+bool ControlSignaling::process(FuncChannelType::E fct, ChOption::E option, uint8_t* data, uint32_t len)
{
assert(data != nullptr);
@@ -166,19 +167,19 @@ bool ControlSignaling::process(uint8_t fct, uint8_t option, uint8_t* data, uint3
m_nxdn->m_affiliations.touchUnitReg(srcId);
switch (rcch->getMessageType()) {
- case RTCH_MESSAGE_TYPE_VCALL:
+ case MessageType::RTCH_VCALL:
{
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(rcch->toString(true), RTCH_MESSAGE_TYPE_VCALL, srcId);
+ IS_SUPPORT_CONTROL_CHECK(rcch->toString(true), MessageType::RTCH_VCALL, srcId);
// validate the source RID
- VALID_SRCID(rcch->toString(true), RTCH_MESSAGE_TYPE_VCALL, srcId, NXDN_CAUSE_VD_REQ_UNIT_NOT_PERM);
+ VALID_SRCID(rcch->toString(true), MessageType::RTCH_VCALL, srcId, CauseResponse::VD_REQ_UNIT_NOT_PERM);
// validate the talkgroup ID
- VALID_TGID(rcch->toString(true), RTCH_MESSAGE_TYPE_VCALL, dstId, srcId, NXDN_CAUSE_VD_TGT_UNIT_NOT_PERM);
+ VALID_TGID(rcch->toString(true), MessageType::RTCH_VCALL, dstId, srcId, CauseResponse::VD_TGT_UNIT_NOT_PERM);
// verify the source RID is affiliated
- VERIFY_SRCID_AFF(rcch->toString(true), RTCH_MESSAGE_TYPE_VCALL, srcId, dstId, NXDN_CAUSE_VD_REQ_UNIT_NOT_REG);
+ VERIFY_SRCID_AFF(rcch->toString(true), MessageType::RTCH_VCALL, srcId, dstId, CauseResponse::VD_REQ_UNIT_NOT_REG);
VERBOSE_LOG_MSG(rcch->toString(true), srcId, dstId);
uint8_t serviceOptions = (rcch->getEmergency() ? 0x80U : 0x00U) + // Emergency Flag
@@ -193,10 +194,10 @@ bool ControlSignaling::process(uint8_t fct, uint8_t option, uint8_t* data, uint3
}
}
break;
- case RCCH_MESSAGE_TYPE_REG:
+ case MessageType::RCCH_REG:
{
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(rcch->toString(true), RCCH_MESSAGE_TYPE_REG, srcId);
+ IS_SUPPORT_CONTROL_CHECK(rcch->toString(true), MessageType::RCCH_REG, srcId);
if (m_verbose) {
LogMessage(LOG_RF, "NXDN, %s, srcId = %u, locId = %u",
@@ -206,10 +207,10 @@ bool ControlSignaling::process(uint8_t fct, uint8_t option, uint8_t* data, uint3
writeRF_Message_U_Reg_Rsp(srcId, rcch->getLocId());
}
break;
- case RCCH_MESSAGE_TYPE_GRP_REG:
+ case MessageType::RCCH_GRP_REG:
{
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(rcch->toString(true), RCCH_MESSAGE_TYPE_GRP_REG, srcId);
+ IS_SUPPORT_CONTROL_CHECK(rcch->toString(true), MessageType::RCCH_GRP_REG, srcId);
if (m_verbose) {
LogMessage(LOG_RF, "NXDN, %s, srcId = %u, dstId = %u, locId = %u",
@@ -237,7 +238,7 @@ bool ControlSignaling::process(uint8_t fct, uint8_t option, uint8_t* data, uint3
/// Buffer containing data frame.
/// Length of data frame.
///
-bool ControlSignaling::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t* data, uint32_t len)
+bool ControlSignaling::processNetwork(FuncChannelType::E fct, ChOption::E option, lc::RTCH& netLC, uint8_t* data, uint32_t len)
{
assert(data != nullptr);
@@ -261,7 +262,7 @@ bool ControlSignaling::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& net
// handle standard NXDN message opcodes
switch (rcch->getMessageType()) {
- case RTCH_MESSAGE_TYPE_VCALL:
+ case MessageType::RTCH_VCALL:
{
if (m_nxdn->m_dedicatedControl) {
if (!m_nxdn->m_affiliations.isGranted(dstId)) {
@@ -279,7 +280,7 @@ bool ControlSignaling::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& net
}
}
return true; // don't allow this to write to the air
- case RCCH_MESSAGE_TYPE_VCALL_CONN:
+ case MessageType::RCCH_VCALL_CONN:
break; // the FNE may explicitly send these
default:
LogError(LOG_NET, "NXDN, unhandled message type, messageType = $%02X", rcch->getMessageType());
@@ -364,9 +365,9 @@ void ControlSignaling::writeRF_Message(RCCH* rcch, bool noNetwork, bool imm)
// generate the LICH
channel::LICH lich;
- lich.setRFCT(NXDN_LICH_RFCT_RCCH);
- lich.setFCT(NXDN_LICH_CAC_OUTBOUND);
- lich.setOption(NXDN_LICH_DATA_COMMON);
+ lich.setRFCT(RFChannelType::RCCH);
+ lich.setFCT(FuncChannelType::CAC_OUTBOUND);
+ lich.setOption(ChOption::DATA_COMMON);
lich.setOutbound(true);
lich.encode(data + 2U);
@@ -378,7 +379,7 @@ void ControlSignaling::writeRF_Message(RCCH* rcch, bool noNetwork, bool imm)
// generate the CAC
channel::CAC cac;
cac.setRAN(m_nxdn->m_ran);
- cac.setStructure(NXDN_SR_RCCH_SINGLE);
+ cac.setStructure(ChStructure::SR_SINGLE);
cac.setData(buffer);
cac.encode(data + 2U);
@@ -473,7 +474,7 @@ bool ControlSignaling::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uin
if (m_nxdn->m_rfState != RS_RF_LISTENING && m_nxdn->m_rfState != RS_RF_DATA) {
if (!net) {
LogWarning(LOG_RF, "NXDN, %s denied, traffic in progress, dstId = %u", rcch->toString().c_str(), dstId);
- writeRF_Message_Deny(0U, srcId, NXDN_CAUSE_VD_QUE_GRP_BUSY, RTCH_MESSAGE_TYPE_VCALL);
+ writeRF_Message_Deny(0U, srcId, CauseResponse::VD_QUE_GRP_BUSY, MessageType::RTCH_VCALL);
::ActivityLog("NXDN", true, "group grant request from %u to TG %u denied", srcId, dstId);
m_nxdn->m_rfState = RS_RF_REJECTED;
@@ -485,7 +486,7 @@ bool ControlSignaling::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uin
if (m_nxdn->m_netState != RS_NET_IDLE && dstId == m_nxdn->m_netLastDstId) {
if (!net) {
LogWarning(LOG_RF, "NXDN, %s denied, traffic in progress, dstId = %u", rcch->toString().c_str(), dstId);
- writeRF_Message_Deny(0U, srcId, NXDN_CAUSE_VD_QUE_GRP_BUSY, RTCH_MESSAGE_TYPE_VCALL);
+ writeRF_Message_Deny(0U, srcId, CauseResponse::VD_QUE_GRP_BUSY, MessageType::RTCH_VCALL);
::ActivityLog("NXDN", true, "group grant request from %u to TG %u denied", srcId, dstId);
m_nxdn->m_rfState = RS_RF_REJECTED;
@@ -498,7 +499,7 @@ bool ControlSignaling::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uin
if (m_nxdn->m_rfLastDstId != 0U) {
if (m_nxdn->m_rfLastDstId != dstId && (m_nxdn->m_rfTGHang.isRunning() && !m_nxdn->m_rfTGHang.hasExpired())) {
if (!net) {
- writeRF_Message_Deny(0U, srcId, NXDN_CAUSE_VD_QUE_GRP_BUSY, RTCH_MESSAGE_TYPE_VCALL);
+ writeRF_Message_Deny(0U, srcId, CauseResponse::VD_QUE_GRP_BUSY, MessageType::RTCH_VCALL);
m_nxdn->m_rfState = RS_RF_REJECTED;
}
@@ -511,7 +512,7 @@ bool ControlSignaling::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uin
if (grp) {
if (!net) {
LogWarning(LOG_RF, "NXDN, %s queued, no channels available, dstId = %u", rcch->toString().c_str(), dstId);
- writeRF_Message_Deny(0U, srcId, NXDN_CAUSE_VD_QUE_CHN_RESOURCE_NOT_AVAIL, RTCH_MESSAGE_TYPE_VCALL);
+ writeRF_Message_Deny(0U, srcId, CauseResponse::VD_QUE_CHN_RESOURCE_NOT_AVAIL, MessageType::RTCH_VCALL);
::ActivityLog("NXDN", true, "group grant request from %u to TG %u queued", srcId, dstId);
m_nxdn->m_rfState = RS_RF_REJECTED;
@@ -522,7 +523,7 @@ bool ControlSignaling::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uin
else {
if (!net) {
LogWarning(LOG_RF, "NXDN, %s queued, no channels available, dstId = %u", rcch->toString().c_str(), dstId);
- writeRF_Message_Deny(0U, srcId, NXDN_CAUSE_VD_QUE_CHN_RESOURCE_NOT_AVAIL, RTCH_MESSAGE_TYPE_VCALL);
+ writeRF_Message_Deny(0U, srcId, CauseResponse::VD_QUE_CHN_RESOURCE_NOT_AVAIL, MessageType::RTCH_VCALL);
::ActivityLog("P25", true, "unit-to-unit grant request from %u to %u queued", srcId, dstId);
m_nxdn->m_rfState = RS_RF_REJECTED;
@@ -545,7 +546,7 @@ bool ControlSignaling::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uin
if (srcId != grantedSrcId) {
if (!net) {
LogWarning(LOG_RF, "NXDN, %s denied, traffic in progress, dstId = %u", rcch->toString().c_str(), dstId);
- writeRF_Message_Deny(0U, srcId, NXDN_CAUSE_VD_QUE_GRP_BUSY, RTCH_MESSAGE_TYPE_VCALL);
+ writeRF_Message_Deny(0U, srcId, CauseResponse::VD_QUE_GRP_BUSY, MessageType::RTCH_VCALL);
::ActivityLog("NXDN", true, "group grant request from %u to TG %u denied", srcId, dstId);
m_nxdn->m_rfState = RS_RF_REJECTED;
@@ -596,7 +597,7 @@ bool ControlSignaling::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uin
::LogError((net) ? LOG_NET : LOG_RF, "NXDN, %s, failed to permit TG for use, chNo = %u", rcch->toString().c_str(), chNo);
m_nxdn->m_affiliations.releaseGrant(dstId, false);
if (!net) {
- writeRF_Message_Deny(0U, srcId, NXDN_CAUSE_VD_QUE_GRP_BUSY, RTCH_MESSAGE_TYPE_VCALL);
+ writeRF_Message_Deny(0U, srcId, CauseResponse::VD_QUE_GRP_BUSY, MessageType::RTCH_VCALL);
m_nxdn->m_rfState = RS_RF_REJECTED;
}
@@ -608,7 +609,7 @@ bool ControlSignaling::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uin
}
}
- rcch->setMessageType(RTCH_MESSAGE_TYPE_VCALL);
+ rcch->setMessageType(MessageType::RTCH_VCALL);
rcch->setGrpVchNo(chNo);
rcch->setGroup(grp);
rcch->setSrcId(srcId);
@@ -640,9 +641,9 @@ void ControlSignaling::writeRF_Message_Deny(uint32_t srcId, uint32_t dstId, uint
std::unique_ptr rcch = nullptr;
switch (service) {
- case RTCH_MESSAGE_TYPE_VCALL:
+ case MessageType::RTCH_VCALL:
rcch = std::make_unique();
- rcch->setMessageType(RTCH_MESSAGE_TYPE_VCALL);
+ rcch->setMessageType(MessageType::RTCH_VCALL);
default:
return;
}
@@ -670,27 +671,27 @@ bool ControlSignaling::writeRF_Message_Grp_Reg_Rsp(uint32_t srcId, uint32_t dstI
bool ret = false;
std::unique_ptr rcch = std::make_unique();
- rcch->setCauseResponse(NXDN_CAUSE_MM_REG_ACCEPTED);
+ rcch->setCauseResponse(CauseResponse::MM_REG_ACCEPTED);
// validate the location ID
if (locId != m_nxdn->m_siteData.locId()) {
LogWarning(LOG_RF, "NXDN, %s denial, LOCID rejection, locId = $%04X", rcch->toString().c_str(), locId);
::ActivityLog("NXDN", true, "group affiliation request from %u denied", srcId);
- rcch->setCauseResponse(NXDN_CAUSE_MM_REG_FAILED);
+ rcch->setCauseResponse(CauseResponse::MM_REG_FAILED);
}
// validate the source RID
if (!acl::AccessControl::validateSrcId(srcId)) {
LogWarning(LOG_RF, "NXDN, %s denial, RID rejection, srcId = %u", rcch->toString().c_str(), srcId);
::ActivityLog("NXDN", true, "group affiliation request from %u to %s %u denied", srcId, "TG ", dstId);
- rcch->setCauseResponse(NXDN_CAUSE_MM_REG_FAILED);
+ rcch->setCauseResponse(CauseResponse::MM_REG_FAILED);
}
// validate the source RID is registered
if (!m_nxdn->m_affiliations.isUnitReg(srcId) && m_verifyReg) {
LogWarning(LOG_RF, "NXDN, %s denial, RID not registered, srcId = %u", rcch->toString().c_str(), srcId);
::ActivityLog("NXDN", true, "group affiliation request from %u to %s %u denied", srcId, "TG ", dstId);
- rcch->setCauseResponse(NXDN_CAUSE_MM_REG_REFUSED);
+ rcch->setCauseResponse(CauseResponse::MM_REG_REFUSED);
}
// validate the talkgroup ID
@@ -701,11 +702,11 @@ bool ControlSignaling::writeRF_Message_Grp_Reg_Rsp(uint32_t srcId, uint32_t dstI
if (!acl::AccessControl::validateTGId(dstId)) {
LogWarning(LOG_RF, "NXDN, %s denial, TGID rejection, dstId = %u", rcch->toString().c_str(), dstId);
::ActivityLog("NXDN", true, "group affiliation request from %u to %s %u denied", srcId, "TG ", dstId);
- rcch->setCauseResponse(NXDN_CAUSE_MM_LOC_ACPT_GRP_REFUSE);
+ rcch->setCauseResponse(CauseResponse::MM_LOC_ACPT_GRP_REFUSE);
}
}
- if (rcch->getCauseResponse() == NXDN_CAUSE_MM_REG_ACCEPTED) {
+ if (rcch->getCauseResponse() == CauseResponse::MM_REG_ACCEPTED) {
VERBOSE_LOG_MSG(rcch->toString(), srcId, dstId);
::ActivityLog("NXDN", true, "group affiliation request from %u to %s %u", srcId, "TG ", dstId);
@@ -729,23 +730,23 @@ bool ControlSignaling::writeRF_Message_Grp_Reg_Rsp(uint32_t srcId, uint32_t dstI
void ControlSignaling::writeRF_Message_U_Reg_Rsp(uint32_t srcId, uint32_t locId)
{
std::unique_ptr rcch = std::make_unique();
- rcch->setCauseResponse(NXDN_CAUSE_MM_REG_ACCEPTED);
+ rcch->setCauseResponse(CauseResponse::MM_REG_ACCEPTED);
// validate the location ID
if (locId != m_nxdn->m_siteData.locId()) {
LogWarning(LOG_RF, "NXDN, %s denial, LOCID rejection, locId = $%04X", rcch->toString().c_str(), locId);
::ActivityLog("NXDN", true, "unit registration request from %u denied", srcId);
- rcch->setCauseResponse(NXDN_CAUSE_MM_REG_FAILED);
+ rcch->setCauseResponse(CauseResponse::MM_REG_FAILED);
}
// validate the source RID
if (!acl::AccessControl::validateSrcId(srcId)) {
LogWarning(LOG_RF, "NXDN, %s denial, RID rejection, srcId = %u", rcch->toString().c_str(), srcId);
::ActivityLog("NXDN", true, "unit registration request from %u denied", srcId);
- rcch->setCauseResponse(NXDN_CAUSE_MM_REG_FAILED);
+ rcch->setCauseResponse(CauseResponse::MM_REG_FAILED);
}
- if (rcch->getCauseResponse() == NXDN_CAUSE_MM_REG_ACCEPTED) {
+ if (rcch->getCauseResponse() == CauseResponse::MM_REG_ACCEPTED) {
if (m_verbose) {
LogMessage(LOG_RF, "NXDN, %s, srcId = %u, locId = %u",
rcch->toString().c_str(), srcId, locId);
@@ -780,9 +781,9 @@ void ControlSignaling::writeRF_CC_Message_Site_Info()
// generate the LICH
channel::LICH lich;
- lich.setRFCT(NXDN_LICH_RFCT_RCCH);
- lich.setFCT(NXDN_LICH_CAC_OUTBOUND);
- lich.setOption(NXDN_LICH_DATA_NORMAL);
+ lich.setRFCT(RFChannelType::RCCH);
+ lich.setFCT(FuncChannelType::CAC_OUTBOUND);
+ lich.setOption(ChOption::DATA_NORMAL);
lich.setOutbound(true);
lich.encode(data + 2U);
@@ -802,7 +803,7 @@ void ControlSignaling::writeRF_CC_Message_Site_Info()
// generate the CAC
channel::CAC cac;
cac.setRAN(m_nxdn->m_ran);
- cac.setStructure(NXDN_SR_RCCH_HEAD_SINGLE);
+ cac.setStructure(ChStructure::SR_RCCH_HEAD_SINGLE);
cac.setData(buffer);
cac.encode(data + 2U);
@@ -829,9 +830,9 @@ void ControlSignaling::writeRF_CC_Message_Service_Info()
// generate the LICH
channel::LICH lich;
- lich.setRFCT(NXDN_LICH_RFCT_RCCH);
- lich.setFCT(NXDN_LICH_CAC_OUTBOUND);
- lich.setOption(NXDN_LICH_DATA_NORMAL);
+ lich.setRFCT(RFChannelType::RCCH);
+ lich.setFCT(FuncChannelType::CAC_OUTBOUND);
+ lich.setOption(ChOption::DATA_NORMAL);
lich.setOutbound(true);
lich.encode(data + 2U);
@@ -846,7 +847,7 @@ void ControlSignaling::writeRF_CC_Message_Service_Info()
// generate the CAC
channel::CAC cac;
cac.setRAN(m_nxdn->m_ran);
- cac.setStructure(NXDN_SR_RCCH_SINGLE);
+ cac.setStructure(ChStructure::SR_RCCH_SINGLE);
cac.setData(buffer);
cac.encode(data + 2U);
diff --git a/src/host/nxdn/packet/ControlSignaling.h b/src/host/nxdn/packet/ControlSignaling.h
index 79db92ab..05830a2d 100644
--- a/src/host/nxdn/packet/ControlSignaling.h
+++ b/src/host/nxdn/packet/ControlSignaling.h
@@ -7,7 +7,7 @@
* @package DVM / Modem Host Software
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022-2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022-2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__NXDN_PACKET_CONTROL_SIGNALING_H__)
@@ -40,9 +40,9 @@ namespace nxdn
class HOST_SW_API ControlSignaling {
public:
/// Process a data frame from the RF interface.
- bool process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len);
+ bool process(defines::FuncChannelType::E fct, defines::ChOption::E option, uint8_t* data, uint32_t len);
/// Process a data frame from the network.
- bool processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t* data, uint32_t len);
+ bool processNetwork(defines::FuncChannelType::E fct, defines::ChOption::E option, lc::RTCH& netLC, uint8_t* data, uint32_t len);
protected:
friend class nxdn::packet::Data;
diff --git a/src/host/nxdn/packet/Data.cpp b/src/host/nxdn/packet/Data.cpp
index 78064d2a..bf48f305 100644
--- a/src/host/nxdn/packet/Data.cpp
+++ b/src/host/nxdn/packet/Data.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015-2020 Jonathan Naylor, G4KLX
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -23,6 +23,7 @@
#include "ActivityLog.h"
using namespace nxdn;
+using namespace nxdn::defines;
using namespace nxdn::packet;
#include
@@ -162,7 +163,7 @@ void Data::resetNet()
/// Buffer containing data frame.
/// Length of data frame.
///
-bool Data::process(uint8_t option, uint8_t* data, uint32_t len)
+bool Data::process(ChOption::E option, uint8_t* data, uint32_t len)
{
assert(data != nullptr);
@@ -190,7 +191,7 @@ bool Data::process(uint8_t option, uint8_t* data, uint32_t len)
if (m_nxdn->m_rfState == RS_RF_LISTENING) {
uint8_t type = lc.getMessageType();
- if (type != RTCH_MESSAGE_TYPE_DCALL_HDR)
+ if (type != MessageType::RTCH_DCALL_HDR)
return false;
CHECK_TRAFFIC_COLLISION(srcId, dstId);
@@ -220,18 +221,18 @@ bool Data::process(uint8_t option, uint8_t* data, uint32_t len)
Sync::addNXDNSync(data + 2U);
channel::LICH lich;
- lich.setRFCT(NXDN_LICH_RFCT_RDCH);
- lich.setFCT(NXDN_LICH_USC_UDCH);
+ lich.setRFCT(RFChannelType::RDCH);
+ lich.setFCT(FuncChannelType::USC_UDCH);
lich.setOption(option);
lich.setOutbound(!m_nxdn->m_duplex ? false : true);
lich.encode(data + 2U);
lich.setOutbound(false);
- uint8_t type = RTCH_MESSAGE_TYPE_DCALL_DATA;
+ uint8_t type = MessageType::RTCH_DCALL_DATA;
if (validUDCH) {
type = lc.getMessageType();
- data[0U] = type == RTCH_MESSAGE_TYPE_TX_REL ? modem::TAG_EOT : modem::TAG_DATA;
+ data[0U] = type == MessageType::RTCH_TX_REL ? modem::TAG_EOT : modem::TAG_DATA;
udch.setRAN(m_nxdn->m_ran);
udch.encode(data + 2U);
@@ -270,7 +271,7 @@ bool Data::process(uint8_t option, uint8_t* data, uint32_t len)
/// Buffer containing data frame.
/// Length of data frame.
///
-bool Data::processNetwork(uint8_t option, lc::RTCH& netLC, uint8_t* data, uint32_t len)
+bool Data::processNetwork(ChOption::E option, lc::RTCH& netLC, uint8_t* data, uint32_t len)
{
assert(data != nullptr);
@@ -306,7 +307,7 @@ bool Data::processNetwork(uint8_t option, lc::RTCH& netLC, uint8_t* data, uint32
if (m_nxdn->m_netState == RS_NET_IDLE) {
uint8_t type = lc.getMessageType();
- if (type != RTCH_MESSAGE_TYPE_DCALL_HDR)
+ if (type != MessageType::RTCH_DCALL_HDR)
return false;
CHECK_NET_TRAFFIC_COLLISION(lc, srcId, dstId);
@@ -336,16 +337,16 @@ bool Data::processNetwork(uint8_t option, lc::RTCH& netLC, uint8_t* data, uint32
Sync::addNXDNSync(data + 2U);
channel::LICH lich;
- lich.setRFCT(NXDN_LICH_RFCT_RDCH);
- lich.setFCT(NXDN_LICH_USC_UDCH);
+ lich.setRFCT(RFChannelType::RDCH);
+ lich.setFCT(FuncChannelType::USC_UDCH);
lich.setOption(option);
lich.setOutbound(true);
lich.encode(data + 2U);
- uint8_t type = RTCH_MESSAGE_TYPE_DCALL_DATA;
+ uint8_t type = MessageType::RTCH_DCALL_DATA;
if (validUDCH) {
type = lc.getMessageType();
- data[0U] = type == RTCH_MESSAGE_TYPE_TX_REL ? modem::TAG_EOT : modem::TAG_DATA;
+ data[0U] = type == MessageType::RTCH_TX_REL ? modem::TAG_EOT : modem::TAG_DATA;
udch.setRAN(m_nxdn->m_ran);
udch.encode(data + 2U);
diff --git a/src/host/nxdn/packet/Data.h b/src/host/nxdn/packet/Data.h
index 4e56a681..2824bb1f 100644
--- a/src/host/nxdn/packet/Data.h
+++ b/src/host/nxdn/packet/Data.h
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015-2020 Jonathan Naylor, G4KLX
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022-2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__NXDN_PACKET_DATA_H__)
@@ -44,9 +44,9 @@ namespace nxdn
void resetNet();
/// Process a data frame from the RF interface.
- bool process(uint8_t option, uint8_t* data, uint32_t len);
+ bool process(defines::ChOption::E option, uint8_t* data, uint32_t len);
/// Process a data frame from the network.
- bool processNetwork(uint8_t option, lc::RTCH& netLC, uint8_t* data, uint32_t len);
+ bool processNetwork(defines::ChOption::E option, lc::RTCH& netLC, uint8_t* data, uint32_t len);
protected:
friend class nxdn::Control;
diff --git a/src/host/nxdn/packet/Voice.cpp b/src/host/nxdn/packet/Voice.cpp
index e95e47d7..8c5312be 100644
--- a/src/host/nxdn/packet/Voice.cpp
+++ b/src/host/nxdn/packet/Voice.cpp
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015-2020 Jonathan Naylor, G4KLX
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
@@ -24,6 +24,7 @@
#include "ActivityLog.h"
using namespace nxdn;
+using namespace nxdn::defines;
using namespace nxdn::packet;
#include
@@ -205,7 +206,7 @@ void Voice::resetNet()
/// Buffer containing data frame.
/// Length of data frame.
///
-bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
+bool Voice::process(FuncChannelType::E fct, ChOption::E option, uint8_t* data, uint32_t len)
{
assert(data != nullptr);
@@ -219,7 +220,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
return false;
}
- if (fct == NXDN_LICH_USC_SACCH_NS) {
+ if (fct == FuncChannelType::USC_SACCH_NS) {
// the SACCH on a non-superblock frame is usually an idle and not interesting apart from the RAN.
channel::FACCH1 facch;
bool valid = facch.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);
@@ -250,7 +251,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
}
uint8_t type = lc.getMessageType();
- if (type == RTCH_MESSAGE_TYPE_TX_REL) {
+ if (type == MessageType::RTCH_TX_REL) {
if (m_nxdn->m_rfState != RS_RF_AUDIO) {
m_nxdn->m_rfState = RS_RF_LISTENING;
m_nxdn->m_rfMask = 0x00U;
@@ -258,7 +259,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
m_nxdn->m_frameLossCnt = 0U;
return false;
}
- } else if (type == RTCH_MESSAGE_TYPE_VCALL) {
+ } else if (type == MessageType::RTCH_VCALL) {
CHECK_TRAFFIC_COLLISION(srcId, dstId);
// validate source RID
@@ -280,9 +281,9 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
// generate the LICH
channel::LICH lich;
- lich.setRFCT(NXDN_LICH_RFCT_RDCH);
- lich.setFCT(NXDN_LICH_USC_SACCH_NS);
- lich.setOption(NXDN_LICH_STEAL_FACCH);
+ lich.setRFCT(RFChannelType::RDCH);
+ lich.setFCT(FuncChannelType::USC_SACCH_NS);
+ lich.setOption(ChOption::STEAL_FACCH);
lich.setOutbound(!m_nxdn->m_duplex ? false : true);
lich.encode(data + 2U);
@@ -290,7 +291,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
channel::SACCH sacch;
sacch.setData(SACCH_IDLE);
sacch.setRAN(m_nxdn->m_ran);
- sacch.setStructure(NXDN_SR_SINGLE);
+ sacch.setStructure(ChStructure::SR_SINGLE);
sacch.encode(data + 2U);
uint8_t lcBuffer[NXDN_RTCH_LC_LENGTH_BYTES];
@@ -305,7 +306,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U);
if (m_nxdn->m_duplex) {
- data[0U] = type == RTCH_MESSAGE_TYPE_TX_REL ? modem::TAG_EOT : modem::TAG_DATA;
+ data[0U] = type == MessageType::RTCH_TX_REL ? modem::TAG_EOT : modem::TAG_DATA;
data[1U] = 0x00U;
m_nxdn->addFrame(data, NXDN_FRAME_LENGTH_BYTES + 2U);
@@ -353,15 +354,15 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
channel::FACCH1 facch;
bool valid = false;
switch (option) {
- case NXDN_LICH_STEAL_FACCH:
+ case ChOption::STEAL_FACCH:
valid = facch.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);
if (!valid)
valid = facch.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS);
break;
- case NXDN_LICH_STEAL_FACCH1_1:
+ case ChOption::STEAL_FACCH1_1:
valid = facch.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);
break;
- case NXDN_LICH_STEAL_FACCH1_2:
+ case ChOption::STEAL_FACCH1_2:
valid = facch.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS);
break;
default:
@@ -376,7 +377,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
lc::RTCH lc;
lc.decode(buffer, NXDN_FACCH1_FEC_LENGTH_BITS);
- hasInfo = lc.getMessageType() == RTCH_MESSAGE_TYPE_VCALL;
+ hasInfo = lc.getMessageType() == MessageType::RTCH_VCALL;
if (!hasInfo)
return false;
@@ -389,22 +390,22 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
uint8_t structure = sacch.getStructure();
switch (structure) {
- case NXDN_SR_1_4:
+ case ChStructure::SR_1_4:
m_nxdn->m_rfLC.decode(message, 18U, 0U);
- if(m_nxdn->m_rfLC.getMessageType() == RTCH_MESSAGE_TYPE_VCALL)
+ if(m_nxdn->m_rfLC.getMessageType() == MessageType::RTCH_VCALL)
m_nxdn->m_rfMask = 0x01U;
else
m_nxdn->m_rfMask = 0x00U;
break;
- case NXDN_SR_2_4:
+ case ChStructure::SR_2_4:
m_nxdn->m_rfMask |= 0x02U;
m_nxdn->m_rfLC.decode(message, 18U, 18U);
break;
- case NXDN_SR_3_4:
+ case ChStructure::SR_3_4:
m_nxdn->m_rfMask |= 0x04U;
m_nxdn->m_rfLC.decode(message, 18U, 36U);
break;
- case NXDN_SR_4_4:
+ case ChStructure::SR_4_4:
m_nxdn->m_rfMask |= 0x08U;
m_nxdn->m_rfLC.decode(message, 18U, 54U);
break;
@@ -416,7 +417,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
return false;
uint8_t type = m_nxdn->m_rfLC.getMessageType();
- if (type != RTCH_MESSAGE_TYPE_VCALL)
+ if (type != MessageType::RTCH_VCALL)
return false;
}
@@ -464,9 +465,9 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
// generate the LICH
channel::LICH lich;
- lich.setRFCT(NXDN_LICH_RFCT_RDCH);
- lich.setFCT(NXDN_LICH_USC_SACCH_NS);
- lich.setOption(NXDN_LICH_STEAL_FACCH);
+ lich.setRFCT(RFChannelType::RDCH);
+ lich.setFCT(FuncChannelType::USC_SACCH_NS);
+ lich.setOption(ChOption::STEAL_FACCH);
lich.setOutbound(!m_nxdn->m_duplex ? false : true);
lich.encode(start + 2U);
@@ -476,7 +477,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
channel::SACCH sacch;
sacch.setData(SACCH_IDLE);
sacch.setRAN(m_nxdn->m_ran);
- sacch.setStructure(NXDN_SR_SINGLE);
+ sacch.setStructure(ChStructure::SR_SINGLE);
sacch.encode(start + 2U);
uint8_t buffer[NXDN_RTCH_LC_LENGTH_BYTES];
@@ -505,8 +506,8 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
// regenerate the LICH
channel::LICH lich;
- lich.setRFCT(NXDN_LICH_RFCT_RDCH);
- lich.setFCT(NXDN_LICH_USC_SACCH_SS);
+ lich.setRFCT(RFChannelType::RDCH);
+ lich.setFCT(FuncChannelType::USC_SACCH_SS);
lich.setOption(option);
lich.setOutbound(!m_nxdn->m_duplex ? false : true);
lich.encode(data + 2U);
@@ -525,7 +526,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
m_nxdn->m_rfLC.encode(lcBuffer, NXDN_RTCH_LC_LENGTH_BITS);
// regenerate the audio and interpret the FACCH1 data
- if (option == NXDN_LICH_STEAL_NONE) {
+ if (option == ChOption::STEAL_NONE) {
edac::AMBEFEC ambe;
uint32_t errors = 0U;
@@ -540,10 +541,10 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
if (errors > m_silenceThreshold) {
// bryanb: this is probably the wrong way to go about this...
// generate null audio
- ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 0U, NXDN_NULL_AMBE, 9U);
- ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U, NXDN_NULL_AMBE, 9U);
- ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U, NXDN_NULL_AMBE, 9U);
- ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U, NXDN_NULL_AMBE, 9U);
+ ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 0U, NULL_AMBE, 9U);
+ ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U, NULL_AMBE, 9U);
+ ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U, NULL_AMBE, 9U);
+ ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U, NULL_AMBE, 9U);
LogWarning(LOG_RF, "NXDN, " NXDN_RTCH_MSG_TYPE_VCALL ", exceeded lost audio threshold, filling in");
}
@@ -554,7 +555,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
if (m_verbose) {
LogMessage(LOG_RF, "NXDN, " NXDN_RTCH_MSG_TYPE_VCALL ", audio, srcId = %u, dstId = %u, errs = %u/188 (%.1f%%)", m_nxdn->m_rfLC.getSrcId(), m_nxdn->m_rfLC.getDstId(), errors, float(errors) / 1.88F);
}
- } else if (option == NXDN_LICH_STEAL_FACCH1_1) {
+ } else if (option == ChOption::STEAL_FACCH1_1) {
channel::FACCH1 facch11;
bool valid = facch11.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);
if (valid)
@@ -572,8 +573,8 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
if (errors > (m_silenceThreshold / 2U)) {
// bryanb: this is probably the wrong way to go about this...
// generate null audio
- ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U, NXDN_NULL_AMBE, 9U);
- ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U, NXDN_NULL_AMBE, 9U);
+ ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U, NULL_AMBE, 9U);
+ ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U, NULL_AMBE, 9U);
LogWarning(LOG_RF, "NXDN, " NXDN_RTCH_MSG_TYPE_VCALL ", exceeded lost audio threshold, filling in");
}
@@ -584,7 +585,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
if (m_verbose) {
LogMessage(LOG_RF, "NXDN, " NXDN_RTCH_MSG_TYPE_VCALL ", audio, srcId = %u, dstId = %u, errs = %u/94 (%.1f%%)", m_nxdn->m_rfLC.getSrcId(), m_nxdn->m_rfLC.getDstId(), errors, float(errors) / 0.94F);
}
- } else if (option == NXDN_LICH_STEAL_FACCH1_2) {
+ } else if (option == ChOption::STEAL_FACCH1_2) {
edac::AMBEFEC ambe;
uint32_t errors = 0U;
@@ -597,8 +598,8 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
if (errors > (m_silenceThreshold / 2U)) {
// bryanb: this is probably the wrong way to go about this...
// generate null audio
- ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 0U, NXDN_NULL_AMBE, 9U);
- ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U, NXDN_NULL_AMBE, 9U);
+ ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 0U, NULL_AMBE, 9U);
+ ::memcpy(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U, NULL_AMBE, 9U);
LogWarning(LOG_RF, "NXDN, " NXDN_RTCH_MSG_TYPE_VCALL ", exceeded lost audio threshold, filling in");
}
@@ -655,7 +656,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
/// Buffer containing data frame.
/// Length of data frame.
///
-bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t *data, uint32_t len)
+bool Voice::processNetwork(FuncChannelType::E fct, ChOption::E option, lc::RTCH& netLC, uint8_t *data, uint32_t len)
{
assert(data != nullptr);
@@ -669,7 +670,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
channel::SACCH sacch;
sacch.decode(data + 2U);
- if (fct == NXDN_LICH_USC_SACCH_NS) {
+ if (fct == FuncChannelType::USC_SACCH_NS) {
// the SACCH on a non-superblock frame is usually an idle and not interesting apart from the RAN.
channel::FACCH1 facch;
bool valid = facch.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);
@@ -708,7 +709,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
}
uint8_t type = lc.getMessageType();
- if (type == RTCH_MESSAGE_TYPE_TX_REL) {
+ if (type == MessageType::RTCH_TX_REL) {
if (m_nxdn->m_netState != RS_NET_AUDIO) {
m_nxdn->m_netState = RS_NET_IDLE;
m_nxdn->m_netMask = 0x00U;
@@ -717,7 +718,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
m_nxdn->m_netLastSrcId = 0U;
return false;
}
- } else if (type == RTCH_MESSAGE_TYPE_VCALL) {
+ } else if (type == MessageType::RTCH_VCALL) {
CHECK_NET_TRAFFIC_COLLISION(lc, srcId, dstId);
// validate source RID
@@ -738,9 +739,9 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
// generate the LICH
channel::LICH lich;
- lich.setRFCT(NXDN_LICH_RFCT_RDCH);
- lich.setFCT(NXDN_LICH_USC_SACCH_NS);
- lich.setOption(NXDN_LICH_STEAL_FACCH);
+ lich.setRFCT(RFChannelType::RDCH);
+ lich.setFCT(FuncChannelType::USC_SACCH_NS);
+ lich.setOption(ChOption::STEAL_FACCH);
lich.setOutbound(true);
lich.encode(data + 2U);
@@ -748,7 +749,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
channel::SACCH sacch;
sacch.setData(SACCH_IDLE);
sacch.setRAN(m_nxdn->m_ran);
- sacch.setStructure(NXDN_SR_SINGLE);
+ sacch.setStructure(ChStructure::SR_SINGLE);
sacch.encode(data + 2U);
facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);
@@ -757,7 +758,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
NXDNUtils::scrambler(data + 2U);
if (m_nxdn->m_duplex) {
- data[0U] = type == RTCH_MESSAGE_TYPE_TX_REL ? modem::TAG_EOT : modem::TAG_DATA;
+ data[0U] = type == MessageType::RTCH_TX_REL ? modem::TAG_EOT : modem::TAG_DATA;
data[1U] = 0x00U;
m_nxdn->addFrame(data, NXDN_FRAME_LENGTH_BYTES + 2U, true);
@@ -790,15 +791,15 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
channel::FACCH1 facch;
bool valid = false;
switch (option) {
- case NXDN_LICH_STEAL_FACCH:
+ case ChOption::STEAL_FACCH:
valid = facch.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);
if (!valid)
valid = facch.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS);
break;
- case NXDN_LICH_STEAL_FACCH1_1:
+ case ChOption::STEAL_FACCH1_1:
valid = facch.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);
break;
- case NXDN_LICH_STEAL_FACCH1_2:
+ case ChOption::STEAL_FACCH1_2:
valid = facch.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS);
break;
default:
@@ -813,7 +814,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
lc::RTCH lc;
lc.decode(buffer, NXDN_FACCH1_FEC_LENGTH_BITS);
- hasInfo = lc.getMessageType() == RTCH_MESSAGE_TYPE_VCALL;
+ hasInfo = lc.getMessageType() == MessageType::RTCH_VCALL;
if (!hasInfo)
return false;
@@ -826,22 +827,22 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
uint8_t structure = sacch.getStructure();
switch (structure) {
- case NXDN_SR_1_4:
+ case ChStructure::SR_1_4:
m_nxdn->m_netLC.decode(message, 18U, 0U);
- if(m_nxdn->m_netLC.getMessageType() == RTCH_MESSAGE_TYPE_VCALL)
+ if(m_nxdn->m_netLC.getMessageType() == MessageType::RTCH_VCALL)
m_nxdn->m_netMask = 0x01U;
else
m_nxdn->m_netMask = 0x00U;
break;
- case NXDN_SR_2_4:
+ case ChStructure::SR_2_4:
m_nxdn->m_netMask |= 0x02U;
m_nxdn->m_netLC.decode(message, 18U, 18U);
break;
- case NXDN_SR_3_4:
+ case ChStructure::SR_3_4:
m_nxdn->m_netMask |= 0x04U;
m_nxdn->m_netLC.decode(message, 18U, 36U);
break;
- case NXDN_SR_4_4:
+ case ChStructure::SR_4_4:
m_nxdn->m_netMask |= 0x08U;
m_nxdn->m_netLC.decode(message, 18U, 54U);
break;
@@ -853,7 +854,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
return false;
uint8_t type = m_nxdn->m_netLC.getMessageType();
- if (type != RTCH_MESSAGE_TYPE_VCALL)
+ if (type != MessageType::RTCH_VCALL)
return false;
}
@@ -895,9 +896,9 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
// generate the LICH
channel::LICH lich;
- lich.setRFCT(NXDN_LICH_RFCT_RDCH);
- lich.setFCT(NXDN_LICH_USC_SACCH_NS);
- lich.setOption(NXDN_LICH_STEAL_FACCH);
+ lich.setRFCT(RFChannelType::RDCH);
+ lich.setFCT(FuncChannelType::USC_SACCH_NS);
+ lich.setOption(ChOption::STEAL_FACCH);
lich.setOutbound(true);
lich.encode(start + 2U);
@@ -905,7 +906,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
channel::SACCH sacch;
sacch.setData(SACCH_IDLE);
sacch.setRAN(m_nxdn->m_ran);
- sacch.setStructure(NXDN_SR_SINGLE);
+ sacch.setStructure(ChStructure::SR_SINGLE);
sacch.encode(start + 2U);
uint8_t buffer[NXDN_RTCH_LC_LENGTH_BYTES];
@@ -932,8 +933,8 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
// regenerate the LICH
channel::LICH lich;
- lich.setRFCT(NXDN_LICH_RFCT_RDCH);
- lich.setFCT(NXDN_LICH_USC_SACCH_SS);
+ lich.setRFCT(RFChannelType::RDCH);
+ lich.setFCT(FuncChannelType::USC_SACCH_SS);
lich.setOption(option);
lich.setOutbound(true);
lich.encode(data + 2U);
@@ -947,7 +948,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
}
// regenerate the audio and interpret the FACCH1 data
- if (option == NXDN_LICH_STEAL_NONE) {
+ if (option == ChOption::STEAL_NONE) {
edac::AMBEFEC ambe;
uint32_t errors = 0U;
@@ -963,7 +964,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
if (m_verbose) {
LogMessage(LOG_NET, "NXDN, " NXDN_RTCH_MSG_TYPE_VCALL ", audio, srcId = %u, dstId = %u, errs = %u/141 (%.1f%%)", m_nxdn->m_netLC.getSrcId(), m_nxdn->m_netLC.getDstId(), errors, float(errors) / 1.88F);
}
- } else if (option == NXDN_LICH_STEAL_FACCH1_1) {
+ } else if (option == ChOption::STEAL_FACCH1_1) {
channel::FACCH1 facch1;
bool valid = facch1.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);
if (valid)
@@ -982,7 +983,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
if (m_verbose) {
LogMessage(LOG_NET, "NXDN, " NXDN_RTCH_MSG_TYPE_VCALL ", audio, srcId = %u, dstId = %u, errs = %u/94 (%.1f%%)", m_nxdn->m_netLC.getSrcId(), m_nxdn->m_netLC.getDstId(), errors, float(errors) / 0.94F);
}
- } else if (option == NXDN_LICH_STEAL_FACCH1_2) {
+ } else if (option == ChOption::STEAL_FACCH1_2) {
edac::AMBEFEC ambe;
uint32_t errors = 0U;
diff --git a/src/host/nxdn/packet/Voice.h b/src/host/nxdn/packet/Voice.h
index 25b9efc2..95033ded 100644
--- a/src/host/nxdn/packet/Voice.h
+++ b/src/host/nxdn/packet/Voice.h
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2015-2020 Jonathan Naylor, G4KLX
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022-2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__NXDN_PACKET_VOICE_H__)
@@ -45,9 +45,9 @@ namespace nxdn
void resetNet();
/// Process a data frame from the RF interface.
- bool process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len);
+ bool process(defines::FuncChannelType::E fct, defines::ChOption::E option, uint8_t* data, uint32_t len);
/// Process a data frame from the network.
- bool processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t* data, uint32_t len);
+ bool processNetwork(defines::FuncChannelType::E fct, defines::ChOption::E option, lc::RTCH& netLC, uint8_t* data, uint32_t len);
protected:
friend class packet::Data;
diff --git a/src/host/p25/Control.cpp b/src/host/p25/Control.cpp
index cedd903f..7ab97c69 100644
--- a/src/host/p25/Control.cpp
+++ b/src/host/p25/Control.cpp
@@ -25,8 +25,9 @@
#include "ActivityLog.h"
#include "HostMain.h"
-using namespace p25;
using namespace p25::packet;
+using namespace p25::defines;
+using namespace p25;
#include
#include
@@ -163,9 +164,9 @@ Control::Control(bool authoritative, uint32_t nac, uint32_t callHang, uint32_t q
m_random = mt;
m_llaK = nullptr;
- m_llaRS = new uint8_t[P25_AUTH_KEY_LENGTH_BYTES];
- m_llaCRS = new uint8_t[P25_AUTH_KEY_LENGTH_BYTES];
- m_llaKS = new uint8_t[P25_AUTH_KEY_LENGTH_BYTES];
+ m_llaRS = new uint8_t[AUTH_KEY_LENGTH_BYTES];
+ m_llaCRS = new uint8_t[AUTH_KEY_LENGTH_BYTES];
+ m_llaKS = new uint8_t[AUTH_KEY_LENGTH_BYTES];
}
///
@@ -241,10 +242,10 @@ void Control::setOptions(yaml::Node& conf, bool supervisor, const std::string cw
if (key.size() == 32) {
if ((key.find_first_not_of("0123456789abcdefABCDEF", 2) == std::string::npos)) {
const char* keyPtr = key.c_str();
- m_llaK = new uint8_t[P25_AUTH_KEY_LENGTH_BYTES];
- ::memset(m_llaK, 0x00U, P25_AUTH_KEY_LENGTH_BYTES);
+ m_llaK = new uint8_t[AUTH_KEY_LENGTH_BYTES];
+ ::memset(m_llaK, 0x00U, AUTH_KEY_LENGTH_BYTES);
- for (uint8_t i = 0; i < P25_AUTH_KEY_LENGTH_BYTES; i++) {
+ for (uint8_t i = 0; i < AUTH_KEY_LENGTH_BYTES; i++) {
char t[4] = {keyPtr[0], keyPtr[1], 0};
m_llaK[i] = (uint8_t)::strtoul(t, NULL, 16);
keyPtr += 2 * sizeof(char);
@@ -336,24 +337,24 @@ void Control::setOptions(yaml::Node& conf, bool supervisor, const std::string cw
/*
** Voice Silence and Frame Loss Thresholds
*/
- m_voice->m_silenceThreshold = p25Protocol["silenceThreshold"].as(p25::DEFAULT_SILENCE_THRESHOLD);
+ m_voice->m_silenceThreshold = p25Protocol["silenceThreshold"].as(DEFAULT_SILENCE_THRESHOLD);
if (m_voice->m_silenceThreshold > MAX_P25_VOICE_ERRORS) {
- LogWarning(LOG_P25, "Silence threshold > %u, defaulting to %u", p25::MAX_P25_VOICE_ERRORS, p25::DEFAULT_SILENCE_THRESHOLD);
- m_voice->m_silenceThreshold = p25::DEFAULT_SILENCE_THRESHOLD;
+ LogWarning(LOG_P25, "Silence threshold > %u, defaulting to %u", MAX_P25_VOICE_ERRORS, DEFAULT_SILENCE_THRESHOLD);
+ m_voice->m_silenceThreshold = DEFAULT_SILENCE_THRESHOLD;
}
// either MAX_P25_VOICE_ERRORS or 0 will disable the threshold logic
if (m_voice->m_silenceThreshold == 0) {
- LogWarning(LOG_P25, "Silence threshold set to zero, defaulting to %u", p25::MAX_P25_VOICE_ERRORS);
- m_voice->m_silenceThreshold = p25::MAX_P25_VOICE_ERRORS;
+ LogWarning(LOG_P25, "Silence threshold set to zero, defaulting to %u", MAX_P25_VOICE_ERRORS);
+ m_voice->m_silenceThreshold = MAX_P25_VOICE_ERRORS;
}
- m_frameLossThreshold = (uint8_t)p25Protocol["frameLossThreshold"].as(p25::DEFAULT_FRAME_LOSS_THRESHOLD);
+ m_frameLossThreshold = (uint8_t)p25Protocol["frameLossThreshold"].as(DEFAULT_FRAME_LOSS_THRESHOLD);
if (m_frameLossThreshold == 0U) {
m_frameLossThreshold = 1U;
}
- if (m_frameLossThreshold > p25::DEFAULT_FRAME_LOSS_THRESHOLD * 2U) {
- LogWarning(LOG_P25, "Frame loss threshold may be excessive, default is %u, configured is %u", p25::DEFAULT_FRAME_LOSS_THRESHOLD, m_frameLossThreshold);
+ if (m_frameLossThreshold > DEFAULT_FRAME_LOSS_THRESHOLD * 2U) {
+ LogWarning(LOG_P25, "Frame loss threshold may be excessive, default is %u, configured is %u", DEFAULT_FRAME_LOSS_THRESHOLD, m_frameLossThreshold);
}
/*
@@ -380,9 +381,9 @@ void Control::setOptions(yaml::Node& conf, bool supervisor, const std::string cw
/*
** CC Service Class
*/
- uint8_t serviceClass = P25_SVC_CLS_VOICE | P25_SVC_CLS_DATA;
+ uint8_t serviceClass = ServiceClass::VOICE | ServiceClass::DATA;
if (m_enableControl) {
- serviceClass |= P25_SVC_CLS_REG;
+ serviceClass |= ServiceClass::REG;
}
/*
@@ -435,7 +436,7 @@ void Control::setOptions(yaml::Node& conf, bool supervisor, const std::string cw
HTTP_PUT, PUT_PERMIT_TG, req, voiceChData.ssl(), REST_DEFAULT_WAIT, m_debug);
}
else {
- ::LogError(LOG_P25, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Grant), failed to clear TG permit, chNo = %u", chNo);
+ ::LogError(LOG_P25, P25_TSDU_STR ", TSBKO, IOSP_GRP_VCH (Group Voice Channel Grant), failed to clear TG permit, chNo = %u", chNo);
}
}
});
@@ -507,7 +508,7 @@ void Control::setOptions(yaml::Node& conf, bool supervisor, const std::string cw
// are we overriding the NAC for split NAC operations?
uint32_t txNAC = (uint32_t)::strtoul(systemConf["config"]["txNAC"].as("F7E").c_str(), NULL, 16);
- if (txNAC != P25_NAC_DIGITAL_SQ && txNAC != m_nac) {
+ if (txNAC != NAC_DIGITAL_SQ && txNAC != m_nac) {
LogMessage(LOG_P25, "Split NAC operations, setting Tx NAC to $%03X", txNAC);
m_txNAC = txNAC;
m_nid.setTxNAC(m_txNAC);
@@ -600,7 +601,7 @@ bool Control::processFrame(uint8_t* data, uint32_t len)
if (!valid && m_rfState == RS_RF_LISTENING)
return false;
- uint8_t duid = m_nid.getDUID();
+ DUID::E duid = m_nid.getDUID();
// Have we got RSSI bytes on the end of a P25 LDU?
if (len == (P25_LDU_FRAME_LENGTH_BYTES + 4U)) {
@@ -632,7 +633,7 @@ bool Control::processFrame(uint8_t* data, uint32_t len)
// are we interrupting a running CC?
if (m_ccRunning) {
- if (duid != P25_DUID_TSDU) {
+ if (duid != DUID::TSDU) {
m_ccHalted = true;
}
}
@@ -641,11 +642,11 @@ bool Control::processFrame(uint8_t* data, uint32_t len)
// handle individual DUIDs
switch (duid) {
- case P25_DUID_HDU:
- case P25_DUID_LDU1:
- case P25_DUID_VSELP1:
- case P25_DUID_VSELP2:
- case P25_DUID_LDU2:
+ case DUID::HDU:
+ case DUID::LDU1:
+ case DUID::VSELP1:
+ case DUID::VSELP2:
+ case DUID::LDU2:
if (m_controlOnly) {
if (m_debug) {
LogDebug(LOG_RF, "CC only mode, ignoring HDU/LDU from RF");
@@ -661,17 +662,17 @@ bool Control::processFrame(uint8_t* data, uint32_t len)
}
break;
- case P25_DUID_TDU:
- case P25_DUID_TDULC:
+ case DUID::TDU:
+ case DUID::TDULC:
m_frameLossCnt = 0U;
ret = m_voice->process(data, len);
break;
- case P25_DUID_PDU:
+ case DUID::PDU:
ret = m_data->process(data, len);
break;
- case P25_DUID_TSDU:
+ case DUID::TSDU:
ret = m_control->process(data, len);
break;
@@ -1249,13 +1250,13 @@ void Control::processNetwork()
bool unitToUnit = (buffer[14U] & 0x01U) == 0x01U;
// process network message header
- uint8_t duid = buffer[22U];
+ DUID::E duid = (DUID::E)buffer[22U];
uint8_t MFId = buffer[15U];
// process raw P25 data bytes
UInt8Array data;
uint8_t frameLength = buffer[23U];
- if (duid == p25::P25_DUID_PDU) {
+ if (duid == DUID::PDU) {
frameLength = length;
data = std::unique_ptr(new uint8_t[length]);
::memset(data.get(), 0x00U, length);
@@ -1274,7 +1275,7 @@ void Control::processNetwork()
}
// is this a PDU?
- if (duid == P25_DUID_PDU) {
+ if (duid == DUID::PDU) {
if (m_controlOnly) {
if (m_debug) {
LogDebug(LOG_NET, "CC only mode, ignoring PDU from network");
@@ -1307,7 +1308,7 @@ void Control::processNetwork()
uint8_t lsd1 = buffer[20U];
uint8_t lsd2 = buffer[21U];
- uint8_t frameType = p25::P25_FT_DATA_UNIT;
+ FrameType::E frameType = FrameType::DATA_UNIT;
// if the netId or sysId is missing; default to our netId and sysId
if (netId == 0U) {
@@ -1326,28 +1327,28 @@ void Control::processNetwork()
data::LowSpeedData lsd;
// is this a LDU1, is this the first of a call?
- if (duid == p25::P25_DUID_LDU1) {
- frameType = buffer[180U];
+ if (duid == DUID::LDU1) {
+ frameType = (FrameType::E)buffer[180U];
if (m_debug) {
LogDebug(LOG_NET, "P25, frameType = $%02X", frameType);
}
- if (frameType == p25::P25_FT_HDU_VALID) {
+ if (frameType == FrameType::HDU_VALID) {
uint8_t algId = buffer[181U];
uint32_t kid = (buffer[182U] << 8) | (buffer[183U] << 0);
// copy MI data
- uint8_t mi[p25::P25_MI_LENGTH_BYTES];
- ::memset(mi, 0x00U, p25::P25_MI_LENGTH_BYTES);
+ uint8_t mi[MI_LENGTH_BYTES];
+ ::memset(mi, 0x00U, MI_LENGTH_BYTES);
- for (uint8_t i = 0; i < p25::P25_MI_LENGTH_BYTES; i++) {
+ for (uint8_t i = 0; i < MI_LENGTH_BYTES; i++) {
mi[i] = buffer[184U + i];
}
if (m_debug) {
LogDebug(LOG_NET, "P25, HDU algId = $%02X, kId = $%02X", algId, kid);
- Utils::dump(1U, "P25 HDU Network MI", mi, p25::P25_MI_LENGTH_BYTES);
+ Utils::dump(1U, "P25 HDU Network MI", mi, MI_LENGTH_BYTES);
}
control.setAlgId(algId);
@@ -1375,11 +1376,11 @@ void Control::processNetwork()
// forward onto the specific processor for final processing and delivery
switch (duid) {
- case P25_DUID_HDU:
- case P25_DUID_LDU1:
- case P25_DUID_VSELP1:
- case P25_DUID_VSELP2:
- case P25_DUID_LDU2:
+ case DUID::HDU:
+ case DUID::LDU1:
+ case DUID::VSELP1:
+ case DUID::VSELP2:
+ case DUID::LDU2:
if (m_controlOnly) {
if (m_debug) {
LogDebug(LOG_NET, "CC only mode, ignoring HDU/LDU from network");
@@ -1390,10 +1391,10 @@ void Control::processNetwork()
ret = m_voice->processNetwork(data.get(), frameLength, control, lsd, duid, frameType);
break;
- case P25_DUID_TDU:
- case P25_DUID_TDULC:
+ case DUID::TDU:
+ case DUID::TDULC:
// is this an TDU with a grant demand?
- if (duid == P25_DUID_TDU && m_enableControl && grantDemand) {
+ if (duid == DUID::TDU && m_enableControl && grantDemand) {
if (m_disableNetworkGrant) {
return;
}
@@ -1418,7 +1419,7 @@ void Control::processNetwork()
// are we denying the grant?
if (grantDenial) {
- m_control->writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_PTT_COLLIDE, (!unitToUnit) ? TSBK_IOSP_GRP_VCH : TSBK_IOSP_UU_VCH);
+ m_control->writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_PTT_COLLIDE, (!unitToUnit) ? TSBKO::IOSP_GRP_VCH : TSBKO::IOSP_UU_VCH);
return;
}
@@ -1435,10 +1436,13 @@ void Control::processNetwork()
m_voice->processNetwork(data.get(), frameLength, control, lsd, duid, frameType);
break;
- case P25_DUID_TSDU:
+ case DUID::TSDU:
m_control->processNetwork(data.get(), frameLength, control, lsd, duid);
break;
- }
+
+ default:
+ break;
+ }
}
///
@@ -1466,7 +1470,7 @@ void Control::processFrameLoss()
m_control->writeNet_TSDU_Call_Term(m_voice->m_rfLC.getSrcId(), m_voice->m_rfLC.getDstId());
writeRF_TDU(false);
- m_voice->m_lastDUID = P25_DUID_TDU;
+ m_voice->m_lastDUID = DUID::TDU;
m_voice->writeNet_TDU();
m_rfState = RS_RF_LISTENING;
@@ -1634,7 +1638,7 @@ bool Control::writeRF_ControlEnd()
if (m_netState == RS_NET_IDLE && m_rfState == RS_RF_LISTENING) {
for (uint32_t i = 0; i < TSBK_PCH_CCH_CNT; i++) {
- m_control->queueRF_TSBK_Ctrl(TSBK_OSP_MOT_PSH_CCH);
+ m_control->queueRF_TSBK_Ctrl(TSBKO::OSP_MOT_PSH_CCH);
}
writeRF_Nulls();
@@ -1710,13 +1714,13 @@ void Control::writeRF_TDU(bool noNetwork)
Sync::addP25Sync(data + 2U);
// Generate NID
- m_nid.encode(data + 2U, P25_DUID_TDU);
+ m_nid.encode(data + 2U, DUID::TDU);
// Add busy bits
P25Utils::addBusyBits(data + 2U, P25_TDU_FRAME_LENGTH_BITS, true, true);
if (!noNetwork)
- m_voice->writeNetwork(data + 2U, P25_DUID_TDU);
+ m_voice->writeNetwork(data + 2U, DUID::TDU);
if (m_duplex) {
data[0U] = modem::TAG_EOT;
@@ -1731,9 +1735,9 @@ void Control::writeRF_TDU(bool noNetwork)
///
void Control::generateLLA_AM1_Parameters()
{
- ::memset(m_llaRS, 0x00U, P25_AUTH_KEY_LENGTH_BYTES);
- ::memset(m_llaCRS, 0x00U, P25_AUTH_KEY_LENGTH_BYTES);
- ::memset(m_llaKS, 0x00U, P25_AUTH_KEY_LENGTH_BYTES);
+ ::memset(m_llaRS, 0x00U, AUTH_KEY_LENGTH_BYTES);
+ ::memset(m_llaCRS, 0x00U, AUTH_KEY_LENGTH_BYTES);
+ ::memset(m_llaKS, 0x00U, AUTH_KEY_LENGTH_BYTES);
if (m_llaK == nullptr) {
return;
@@ -1742,7 +1746,7 @@ void Control::generateLLA_AM1_Parameters()
crypto::AES* aes = new crypto::AES(crypto::AESKeyLength::AES_128);
// generate new RS
- uint8_t RS[P25_AUTH_RAND_SEED_LENGTH_BYTES];
+ uint8_t RS[AUTH_RAND_SEED_LENGTH_BYTES];
std::uniform_int_distribution dist(DVM_RAND_MIN, DVM_RAND_MAX);
uint32_t rnd = dist(m_random);
__SET_UINT32(rnd, RS, 0U);
@@ -1754,16 +1758,16 @@ void Control::generateLLA_AM1_Parameters()
RS[9U] = (uint8_t)(rnd & 0xFFU);
// expand RS to 16 bytes
- for (uint32_t i = 0; i < P25_AUTH_RAND_SEED_LENGTH_BYTES; i++)
+ for (uint32_t i = 0; i < AUTH_RAND_SEED_LENGTH_BYTES; i++)
m_llaRS[i] = RS[i];
// complement RS
- for (uint32_t i = 0; i < P25_AUTH_KEY_LENGTH_BYTES; i++)
+ for (uint32_t i = 0; i < AUTH_KEY_LENGTH_BYTES; i++)
m_llaCRS[i] = ~m_llaRS[i];
// perform crypto
- uint8_t* KS = aes->encryptECB(m_llaRS, P25_AUTH_KEY_LENGTH_BYTES * sizeof(uint8_t), m_llaK);
- ::memcpy(m_llaKS, KS, P25_AUTH_KEY_LENGTH_BYTES);
+ uint8_t* KS = aes->encryptECB(m_llaRS, AUTH_KEY_LENGTH_BYTES * sizeof(uint8_t), m_llaK);
+ ::memcpy(m_llaKS, KS, AUTH_KEY_LENGTH_BYTES);
if (m_verbose) {
LogMessage(LOG_P25, "P25, generated LLA AM1 parameters");
diff --git a/src/host/p25/lc/tsbk/OSP_DVM_GIT_HASH.cpp b/src/host/p25/lc/tsbk/OSP_DVM_GIT_HASH.cpp
index 44fadde7..e68165e5 100644
--- a/src/host/p25/lc/tsbk/OSP_DVM_GIT_HASH.cpp
+++ b/src/host/p25/lc/tsbk/OSP_DVM_GIT_HASH.cpp
@@ -7,16 +7,17 @@
* @package DVM / Modem Host Software
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#include "Defines.h"
#include "p25/lc/tsbk/OSP_DVM_GIT_HASH.h"
#include "HostMain.h"
-using namespace p25::lc::tsbk;
-using namespace p25::lc;
using namespace p25;
+using namespace p25::defines;
+using namespace p25::lc;
+using namespace p25::lc::tsbk;
#include
@@ -29,8 +30,7 @@ using namespace p25;
///
OSP_DVM_GIT_HASH::OSP_DVM_GIT_HASH() : TSBK()
{
- m_lco = TSBK_OSP_DVM_GIT_HASH;
- m_mfId = P25_MFG_DVM_OCS;
+ m_lco = TSBKO::OSP_DVM_GIT_HASH;
}
///
@@ -60,6 +60,8 @@ void OSP_DVM_GIT_HASH::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
ulong64_t tsbkValue = 0U;
+ m_mfId = MFG_DVM_OCS;
+
tsbkValue = g_gitHashBytes[0]; // ...
tsbkValue = (tsbkValue << 8) + (g_gitHashBytes[1U]); // ...
tsbkValue = (tsbkValue << 8) + (g_gitHashBytes[2U]); // ...
@@ -79,5 +81,5 @@ void OSP_DVM_GIT_HASH::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
///
std::string OSP_DVM_GIT_HASH::toString(bool isp)
{
- return std::string("TSBK_OSP_DVM_GIT_HASH (DVM Git Hash Identifier)");
+ return std::string("TSBKO, OSP_DVM_GIT_HASH (DVM Git Hash Identifier)");
}
diff --git a/src/host/p25/packet/ControlSignaling.cpp b/src/host/p25/packet/ControlSignaling.cpp
index 861dbc62..1f6399d6 100644
--- a/src/host/p25/packet/ControlSignaling.cpp
+++ b/src/host/p25/packet/ControlSignaling.cpp
@@ -30,8 +30,9 @@
#include "HostMain.h"
using namespace p25;
-using namespace p25::data;
+using namespace p25::defines;
using namespace p25::lc::tsbk;
+using namespace p25::data;
using namespace p25::packet;
#include
@@ -46,7 +47,7 @@ using namespace p25::packet;
#define IS_SUPPORT_CONTROL_CHECK(_PCKT_STR, _PCKT, _SRCID) \
if (!m_p25->m_enableControl) { \
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, unsupported service, srcId = %u", _PCKT_STR.c_str(), _SRCID); \
- writeRF_TSDU_Deny(_SRCID, P25_WUID_FNE, P25_DENY_RSN_SYS_UNSUPPORTED_SVC, _PCKT); \
+ writeRF_TSDU_Deny(_SRCID, WUID_FNE, ReasonCode::DENY_SYS_UNSUPPORTED_SVC, _PCKT); \
m_p25->m_rfState = RS_RF_REJECTED; \
return false; \
}
@@ -55,7 +56,7 @@ using namespace p25::packet;
#define VALID_SRCID(_PCKT_STR, _PCKT, _SRCID) \
if (!acl::AccessControl::validateSrcId(_SRCID)) { \
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, RID rejection, srcId = %u", _PCKT_STR.c_str(), _SRCID); \
- writeRF_TSDU_Deny(_SRCID, P25_WUID_FNE, P25_DENY_RSN_REQ_UNIT_NOT_VALID, _PCKT); \
+ writeRF_TSDU_Deny(_SRCID, WUID_FNE, ReasonCode::DENY_REQ_UNIT_NOT_VALID, _PCKT); \
denialInhibit(_SRCID); \
m_p25->m_rfState = RS_RF_REJECTED; \
return false; \
@@ -65,7 +66,7 @@ using namespace p25::packet;
#define VALID_DSTID(_PCKT_STR, _PCKT, _SRCID, _DSTID) \
if (!acl::AccessControl::validateSrcId(_DSTID)) { \
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, RID rejection, dstId = %u", _PCKT_STR.c_str(), _DSTID); \
- writeRF_TSDU_Deny(_SRCID, _DSTID, P25_DENY_RSN_TGT_UNIT_NOT_VALID, _PCKT); \
+ writeRF_TSDU_Deny(_SRCID, _DSTID, ReasonCode::DENY_TGT_UNIT_NOT_VALID, _PCKT); \
m_p25->m_rfState = RS_RF_REJECTED; \
return false; \
}
@@ -74,7 +75,7 @@ using namespace p25::packet;
#define VALID_TGID(_PCKT_STR, _PCKT, _SRCID, _DSTID) \
if (!acl::AccessControl::validateTGId(_DSTID)) { \
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, TGID rejection, dstId = %u", _PCKT_STR.c_str(), _DSTID); \
- writeRF_TSDU_Deny(_SRCID, _DSTID, P25_DENY_RSN_TGT_GROUP_NOT_VALID, _PCKT); \
+ writeRF_TSDU_Deny(_SRCID, _DSTID, ReasonCode::DENY_TGT_GROUP_NOT_VALID, _PCKT); \
m_p25->m_rfState = RS_RF_REJECTED; \
return false; \
}
@@ -83,7 +84,7 @@ using namespace p25::packet;
#define VERIFY_SRCID_REG(_PCKT_STR, _PCKT, _SRCID) \
if (!m_p25->m_affiliations.isUnitReg(_SRCID) && m_verifyReg) { \
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, RID not registered, srcId = %u", _PCKT_STR.c_str(), _SRCID); \
- writeRF_TSDU_Deny(_SRCID, P25_WUID_FNE, P25_DENY_RSN_REQ_UNIT_NOT_AUTH, _PCKT); \
+ writeRF_TSDU_Deny(_SRCID, WUID_FNE, ReasonCode::DENY_REQ_UNIT_NOT_AUTH, _PCKT); \
writeRF_TSDU_U_Reg_Cmd(_SRCID); \
m_p25->m_rfState = RS_RF_REJECTED; \
return false; \
@@ -93,7 +94,7 @@ using namespace p25::packet;
#define VERIFY_SRCID_AFF(_PCKT_STR, _PCKT, _SRCID, _DSTID) \
if (!m_p25->m_affiliations.isGroupAff(_SRCID, _DSTID) && m_verifyAff) { \
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, RID not affiliated to TGID, srcId = %u, dstId = %u", _PCKT_STR.c_str(), _SRCID, _DSTID); \
- writeRF_TSDU_Deny(_SRCID, _DSTID, P25_DENY_RSN_REQ_UNIT_NOT_AUTH, _PCKT); \
+ writeRF_TSDU_Deny(_SRCID, _DSTID, ReasonCode::DENY_REQ_UNIT_NOT_AUTH, _PCKT); \
writeRF_TSDU_U_Reg_Cmd(_SRCID); \
m_p25->m_rfState = RS_RF_REJECTED; \
return false; \
@@ -173,7 +174,7 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrm_enableControl)
return false;
- uint8_t duid = 0U;
+ DUID::E duid = DUID::HDU;
if (preDecodedTSBK == nullptr) {
// Decode the NID
bool valid = m_p25->m_nid.decode(data + 2U);
@@ -183,14 +184,14 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrm_nid.getDUID();
} else {
- duid = P25_DUID_TSDU;
+ duid = DUID::TSDU;
}
RPT_RF_STATE prevRfState = m_p25->m_rfState;
std::unique_ptr tsbk;
// handle individual DUIDs
- if (duid == P25_DUID_TSDU) {
+ if (duid == DUID::TSDU) {
if (m_p25->m_rfState != RS_RF_DATA) {
m_p25->m_rfState = RS_RF_DATA;
}
@@ -219,19 +220,19 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrgetLCO()) {
- case TSBK_IOSP_GRP_VCH:
+ case TSBKO::IOSP_GRP_VCH:
{
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBK_IOSP_GRP_VCH, srcId);
+ IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBKO::IOSP_GRP_VCH, srcId);
// validate the source RID
- VALID_SRCID(tsbk->toString(true), TSBK_IOSP_GRP_VCH, srcId);
+ VALID_SRCID(tsbk->toString(true), TSBKO::IOSP_GRP_VCH, srcId);
// validate the talkgroup ID
- VALID_TGID(tsbk->toString(true), TSBK_IOSP_GRP_VCH, srcId, dstId);
+ VALID_TGID(tsbk->toString(true), TSBKO::IOSP_GRP_VCH, srcId, dstId);
// verify the source RID is affiliated
- VERIFY_SRCID_AFF(tsbk->toString(true), TSBK_IOSP_GRP_VCH, srcId, dstId);
+ VERIFY_SRCID_AFF(tsbk->toString(true), TSBKO::IOSP_GRP_VCH, srcId, dstId);
VERBOSE_LOG_TSBK(tsbk->toString(true), srcId, dstId);
if (m_p25->m_authoritative) {
@@ -246,19 +247,19 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrtoString(true), TSBK_IOSP_UU_VCH, srcId);
+ IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBKO::IOSP_UU_VCH, srcId);
// validate the source RID
- VALID_SRCID(tsbk->toString(true), TSBK_IOSP_UU_VCH, srcId);
+ VALID_SRCID(tsbk->toString(true), TSBKO::IOSP_UU_VCH, srcId);
// validate the target RID
- VALID_DSTID(tsbk->toString(true), TSBK_IOSP_UU_VCH, srcId, dstId);
+ VALID_DSTID(tsbk->toString(true), TSBKO::IOSP_UU_VCH, srcId, dstId);
// verify the source RID is registered
- VERIFY_SRCID_REG(tsbk->toString(true), TSBK_IOSP_UU_VCH, srcId);
+ VERIFY_SRCID_REG(tsbk->toString(true), TSBKO::IOSP_UU_VCH, srcId);
VERBOSE_LOG_TSBK(tsbk->toString(true), srcId, dstId);
if (m_unitToUnitAvailCheck) {
@@ -278,16 +279,16 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrtoString(true), TSBK_IOSP_UU_ANS, srcId);
+ IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBKO::IOSP_UU_ANS, srcId);
// validate the source RID
- VALID_SRCID(tsbk->toString(true), TSBK_IOSP_UU_ANS, srcId);
+ VALID_SRCID(tsbk->toString(true), TSBKO::IOSP_UU_ANS, srcId);
// validate the target RID
- VALID_DSTID(tsbk->toString(true), TSBK_IOSP_UU_ANS, srcId, dstId);
+ VALID_DSTID(tsbk->toString(true), TSBKO::IOSP_UU_ANS, srcId, dstId);
IOSP_UU_ANS* iosp = static_cast(tsbk.get());
if (m_verbose) {
@@ -295,7 +296,7 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrtoString(true).c_str(), iosp->getResponse(), srcId, dstId);
}
- if (iosp->getResponse() == P25_ANS_RSP_PROCEED) {
+ if (iosp->getResponse() == ResponseCode::ANS_PROCEED) {
if (m_p25->m_authoritative) {
uint8_t serviceOptions = (tsbk->getEmergency() ? 0x80U : 0x00U) + // Emergency Flag
(tsbk->getEncrypted() ? 0x40U : 0x00U) + // Encrypted Flag
@@ -307,32 +308,32 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrm_network->writeGrantReq(modem::DVM_STATE::STATE_P25, srcId, dstId, 0U, true);
}
}
- else if (iosp->getResponse() == P25_ANS_RSP_DENY) {
- writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_TGT_UNIT_REFUSED, TSBK_IOSP_UU_ANS);
+ else if (iosp->getResponse() == ResponseCode::ANS_DENY) {
+ writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_TGT_UNIT_REFUSED, TSBKO::IOSP_UU_ANS);
}
- else if (iosp->getResponse() == P25_ANS_RSP_WAIT) {
- writeRF_TSDU_Queue(srcId, dstId, P25_QUE_RSN_TGT_UNIT_QUEUED, TSBK_IOSP_UU_ANS);
+ else if (iosp->getResponse() == ResponseCode::ANS_WAIT) {
+ writeRF_TSDU_Queue(srcId, dstId, ReasonCode::QUE_TGT_UNIT_QUEUED, TSBKO::IOSP_UU_ANS);
}
}
break;
- case TSBK_IOSP_TELE_INT_ANS:
+ case TSBKO::IOSP_TELE_INT_ANS:
{
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBK_IOSP_TELE_INT_ANS, srcId);
+ IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBKO::IOSP_TELE_INT_ANS, srcId);
// validate the source RID
- VALID_SRCID(tsbk->toString(true), TSBK_IOSP_TELE_INT_ANS, srcId);
+ VALID_SRCID(tsbk->toString(true), TSBKO::IOSP_TELE_INT_ANS, srcId);
- writeRF_TSDU_Deny(srcId, P25_WUID_FNE, P25_DENY_RSN_SYS_UNSUPPORTED_SVC, TSBK_IOSP_TELE_INT_ANS);
+ writeRF_TSDU_Deny(srcId, WUID_FNE, ReasonCode::DENY_SYS_UNSUPPORTED_SVC, TSBKO::IOSP_TELE_INT_ANS);
}
break;
- case TSBK_ISP_SNDCP_CH_REQ:
+ case TSBKO::ISP_SNDCP_CH_REQ:
{
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBK_ISP_SNDCP_CH_REQ, srcId);
+ IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBKO::ISP_SNDCP_CH_REQ, srcId);
// validate the source RID
- VALID_SRCID(tsbk->toString(true), TSBK_ISP_SNDCP_CH_REQ, srcId);
+ VALID_SRCID(tsbk->toString(true), TSBKO::ISP_SNDCP_CH_REQ, srcId);
ISP_SNDCP_CH_REQ* isp = static_cast(tsbk.get());
if (m_verbose) {
@@ -344,14 +345,14 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrtoString(true), TSBK_IOSP_STS_UPDT, srcId);
+ VALID_SRCID(tsbk->toString(true), TSBKO::IOSP_STS_UPDT, srcId);
IOSP_STS_UPDT* iosp = static_cast(tsbk.get());
if (m_verbose) {
@@ -362,16 +363,16 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrtoString(true), TSBK_IOSP_MSG_UPDT, srcId);
+ VALID_SRCID(tsbk->toString(true), TSBKO::IOSP_MSG_UPDT, srcId);
IOSP_MSG_UPDT* iosp = static_cast(tsbk.get());
if (m_verbose) {
@@ -382,19 +383,19 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrtoString(true), TSBK_IOSP_RAD_MON, srcId);
+ VALID_SRCID(tsbk->toString(true), TSBKO::IOSP_RAD_MON, srcId);
// validate the target RID
- VALID_DSTID(tsbk->toString(true), TSBK_IOSP_RAD_MON, srcId, dstId);
+ VALID_DSTID(tsbk->toString(true), TSBKO::IOSP_RAD_MON, srcId, dstId);
IOSP_RAD_MON* iosp = static_cast(tsbk.get());
if (m_verbose) {
@@ -407,13 +408,13 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrgetTxMult());
}
break;
- case TSBK_IOSP_CALL_ALRT:
+ case TSBKO::IOSP_CALL_ALRT:
{
// validate the source RID
- VALID_SRCID(tsbk->toString(true), TSBK_IOSP_CALL_ALRT, srcId);
+ VALID_SRCID(tsbk->toString(true), TSBKO::IOSP_CALL_ALRT, srcId);
// validate the target RID
- VALID_DSTID(tsbk->toString(true), TSBK_IOSP_CALL_ALRT, srcId, dstId);
+ VALID_DSTID(tsbk->toString(true), TSBKO::IOSP_CALL_ALRT, srcId, dstId);
VERBOSE_LOG_TSBK(tsbk->toString(true), srcId, dstId);
::ActivityLog("P25", true, "call alert request from %u to %u", srcId, dstId);
@@ -421,13 +422,13 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrtoString(true), TSBK_IOSP_ACK_RSP, srcId);
+ VALID_SRCID(tsbk->toString(true), TSBKO::IOSP_ACK_RSP, srcId);
// validate the target RID
- VALID_DSTID(tsbk->toString(true), TSBK_IOSP_ACK_RSP, srcId, dstId);
+ VALID_DSTID(tsbk->toString(true), TSBKO::IOSP_ACK_RSP, srcId, dstId);
IOSP_ACK_RSP* iosp = static_cast(tsbk.get());
if (m_verbose) {
@@ -448,7 +449,7 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptr(tsbk.get());
if (m_verbose) {
@@ -458,10 +459,10 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptr(tsbk.get());
if (m_verbose) {
@@ -470,20 +471,20 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrgetExtendedFunction() == P25_EXT_FNCT_CHECK_ACK) {
+ if (iosp->getExtendedFunction() == ExtendedFunctions::CHECK_ACK) {
::ActivityLog("P25", true, "radio check response from %u to %u", dstId, srcId);
}
- else if (iosp->getExtendedFunction() == P25_EXT_FNCT_INHIBIT_ACK) {
+ else if (iosp->getExtendedFunction() == ExtendedFunctions::INHIBIT_ACK) {
::ActivityLog("P25", true, "radio inhibit response from %u to %u", dstId, srcId);
}
- else if (iosp->getExtendedFunction() == P25_EXT_FNCT_UNINHIBIT_ACK) {
+ else if (iosp->getExtendedFunction() == ExtendedFunctions::UNINHIBIT_ACK) {
::ActivityLog("P25", true, "radio uninhibit response from %u to %u", dstId, srcId);
}
writeRF_TSDU_SBF(iosp, true);
}
break;
- case TSBK_ISP_EMERG_ALRM_REQ:
+ case TSBKO::ISP_EMERG_ALRM_REQ:
{
ISP_EMERG_ALRM_REQ* isp = static_cast(tsbk.get());
if (isp->getEmergency()) {
@@ -493,30 +494,30 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrtoString(true), TSBK_IOSP_GRP_AFF, srcId);
+ IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBKO::IOSP_GRP_AFF, srcId);
VERBOSE_LOG_TSBK(tsbk->toString(true), srcId, dstId);
if (m_p25->m_ackTSBKRequests) {
- writeRF_TSDU_ACK_FNE(srcId, TSBK_IOSP_GRP_AFF, true, true);
+ writeRF_TSDU_ACK_FNE(srcId, TSBKO::IOSP_GRP_AFF, true, true);
}
writeRF_TSDU_Grp_Aff_Rsp(srcId, dstId);
}
break;
- case TSBK_ISP_GRP_AFF_Q_RSP:
+ case TSBKO::ISP_GRP_AFF_Q_RSP:
{
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBK_ISP_GRP_AFF_Q_RSP, srcId);
+ IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBKO::ISP_GRP_AFF_Q_RSP, srcId);
if (m_p25->m_ackTSBKRequests) {
- writeRF_TSDU_ACK_FNE(srcId, TSBK_ISP_GRP_AFF_Q_RSP, true, true);
+ writeRF_TSDU_ACK_FNE(srcId, TSBKO::ISP_GRP_AFF_Q_RSP, true, true);
}
ISP_GRP_AFF_Q_RSP* isp = static_cast(tsbk.get());
@@ -528,13 +529,13 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrtoString(true), TSBK_ISP_U_DEREG_REQ, srcId);
+ IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBKO::ISP_U_DEREG_REQ, srcId);
// validate the source RID
- VALID_SRCID(tsbk->toString(true), TSBK_ISP_U_DEREG_REQ, srcId);
+ VALID_SRCID(tsbk->toString(true), TSBKO::ISP_U_DEREG_REQ, srcId);
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", %s, srcId = %u, sysId = $%03X, netId = $%05X",
@@ -542,16 +543,16 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrm_ackTSBKRequests) {
- writeRF_TSDU_ACK_FNE(srcId, TSBK_ISP_U_DEREG_REQ, true, true);
+ writeRF_TSDU_ACK_FNE(srcId, TSBKO::ISP_U_DEREG_REQ, true, true);
}
writeRF_TSDU_U_Dereg_Ack(srcId);
}
break;
- case TSBK_IOSP_U_REG:
+ case TSBKO::IOSP_U_REG:
{
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBK_IOSP_U_REG, srcId);
+ IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBKO::IOSP_U_REG, srcId);
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", %s, srcId = %u, sysId = $%03X, netId = $%05X",
@@ -559,7 +560,7 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrm_ackTSBKRequests) {
- writeRF_TSDU_ACK_FNE(srcId, TSBK_IOSP_U_REG, true, true);
+ writeRF_TSDU_ACK_FNE(srcId, TSBKO::IOSP_U_REG, true, true);
}
if (m_requireLLAForReg) {
@@ -570,19 +571,19 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrtoString(true), TSBK_ISP_LOC_REG_REQ, srcId);
+ IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBKO::ISP_LOC_REG_REQ, srcId);
VERBOSE_LOG_TSBK(tsbk->toString(true), srcId, dstId);
writeRF_TSDU_Loc_Reg_Rsp(srcId, dstId, tsbk->getGroup());
}
break;
- case TSBK_ISP_AUTH_RESP:
+ case TSBKO::ISP_AUTH_RESP:
{
// make sure control data is supported
- IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBK_ISP_AUTH_RESP, srcId);
+ IS_SUPPORT_CONTROL_CHECK(tsbk->toString(true), TSBKO::ISP_AUTH_RESP, srcId);
ISP_AUTH_RESP* isp = static_cast(tsbk.get());
if (m_verbose) {
@@ -595,7 +596,7 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrgetAuthRes(RES1);
// get challenge for our SU
@@ -607,22 +608,22 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptr> 8, RC, 0);
RC[4U] = (uint8_t)(challenge & 0xFFU);
// expand RAND1 to 16 bytes
uint8_t expandedRAND1[16];
- ::memset(expandedRAND1, 0x00U, P25_AUTH_KEY_LENGTH_BYTES);
- for (uint32_t i = 0; i < P25_AUTH_RAND_CHLNG_LENGTH_BYTES; i++)
+ ::memset(expandedRAND1, 0x00U, AUTH_KEY_LENGTH_BYTES);
+ for (uint32_t i = 0; i < AUTH_RAND_CHLNG_LENGTH_BYTES; i++)
expandedRAND1[i] = RC[i];
// generate XRES1
- uint8_t* XRES1 = aes->encryptECB(expandedRAND1, P25_AUTH_KEY_LENGTH_BYTES * sizeof(uint8_t), m_p25->m_llaKS);
+ uint8_t* XRES1 = aes->encryptECB(expandedRAND1, AUTH_KEY_LENGTH_BYTES * sizeof(uint8_t), m_p25->m_llaKS);
// compare RES1 and XRES1
bool authFailed = false;
- for (uint32_t i = 0; i < P25_AUTH_RES_LENGTH_BYTES; i++) {
+ for (uint32_t i = 0; i < AUTH_RES_LENGTH_BYTES; i++) {
if (XRES1[i] != RES1[i]) {
authFailed = true;
}
@@ -637,7 +638,7 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrtoString().c_str(), srcId);
::ActivityLog("P25", true, "unit registration request from %u denied, authentication failure", srcId);
- writeRF_TSDU_Deny(srcId, P25_WUID_FNE, P25_DENY_RSN_SU_FAILED_AUTH, TSBK_IOSP_U_REG);
+ writeRF_TSDU_Deny(srcId, WUID_FNE, ReasonCode::DENY_SU_FAILED_AUTH, TSBKO::IOSP_U_REG);
}
}
break;
@@ -670,7 +671,7 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptr
///
///
-bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, uint8_t& duid)
+bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, DUID::E& duid)
{
if (!m_p25->m_enableControl)
return false;
@@ -678,7 +679,7 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
return false;
switch (duid) {
- case P25_DUID_TSDU:
+ case DUID::TSDU:
if (m_p25->m_netState == RS_NET_IDLE) {
std::unique_ptr tsbk = TSBKFactory::createTSBK(data);
if (tsbk == nullptr) {
@@ -686,7 +687,7 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
}
// handle updating internal adjacent site information
- if (tsbk->getLCO() == TSBK_OSP_ADJ_STS_BCAST) {
+ if (tsbk->getLCO() == TSBKO::OSP_ADJ_STS_BCAST) {
if (!m_p25->m_enableControl) {
return false;
}
@@ -741,9 +742,9 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
uint32_t dstId = tsbk->getDstId();
// handle internal / Omaha Communication Systems DVM TSDUs
- if (tsbk->getMFId() == P25_MFG_DVM_OCS) {
+ if (tsbk->getMFId() == MFG_DVM_OCS) {
switch (tsbk->getLCO()) {
- case LC_CALL_TERM:
+ case LCO::CALL_TERM:
{
if (m_p25->m_dedicatedControl) {
uint32_t chNo = tsbk->getGrpVchNo();
@@ -761,7 +762,7 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
return true; // don't allow this to write to the air
}
- case TSBK_OSP_DVM_GIT_HASH:
+ case TSBKO::OSP_DVM_GIT_HASH:
// ignore
return true; // don't allow this to write to the air
default:
@@ -775,8 +776,8 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
// handle standard P25 reference opcodes
switch (tsbk->getLCO()) {
- case TSBK_IOSP_GRP_VCH:
- case TSBK_IOSP_UU_VCH:
+ case TSBKO::IOSP_GRP_VCH:
+ case TSBKO::IOSP_UU_VCH:
{
if (m_p25->m_enableControl && m_p25->m_dedicatedControl) {
if (!m_p25->m_affiliations.isGranted(dstId)) {
@@ -789,15 +790,15 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
(tsbk->getEncrypted() ? 0x40U : 0x00U) + // Encrypted Flag
(tsbk->getPriority() & 0x07U); // Priority
- writeRF_TSDU_Grant(srcId, dstId, serviceOptions, (tsbk->getLCO() == TSBK_IOSP_GRP_VCH), true);
+ writeRF_TSDU_Grant(srcId, dstId, serviceOptions, (tsbk->getLCO() == TSBKO::IOSP_GRP_VCH), true);
}
}
}
return true; // don't allow this to write to the air
- case TSBK_OSP_GRP_VCH_GRANT_UPD:
- case TSBK_OSP_UU_VCH_GRANT_UPD:
+ case TSBKO::OSP_GRP_VCH_GRANT_UPD:
+ case TSBKO::OSP_UU_VCH_GRANT_UPD:
return true; // don't allow this to write to the air
- case TSBK_IOSP_UU_ANS:
+ case TSBKO::IOSP_UU_ANS:
{
IOSP_UU_ANS* iosp = static_cast(tsbk.get());
if (iosp->getResponse() > 0U) {
@@ -811,7 +812,7 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
}
}
break;
- case TSBK_IOSP_STS_UPDT:
+ case TSBKO::IOSP_STS_UPDT:
{
// validate the source RID
VALID_SRCID_NET(tsbk->toString(), srcId);
@@ -825,7 +826,7 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
::ActivityLog("P25", false, "status update from %u", srcId);
}
break;
- case TSBK_IOSP_MSG_UPDT:
+ case TSBKO::IOSP_MSG_UPDT:
{
// validate the source RID
VALID_SRCID_NET(tsbk->toString(), srcId);
@@ -839,13 +840,13 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
::ActivityLog("P25", false, "message update from %u", srcId);
}
break;
- case TSBK_IOSP_RAD_MON:
+ case TSBKO::IOSP_RAD_MON:
{
// validate the source RID
- VALID_SRCID(tsbk->toString(true), TSBK_IOSP_RAD_MON, srcId);
+ VALID_SRCID(tsbk->toString(true), TSBKO::IOSP_RAD_MON, srcId);
// validate the target RID
- VALID_DSTID(tsbk->toString(true), TSBK_IOSP_RAD_MON, srcId, dstId);
+ VALID_DSTID(tsbk->toString(true), TSBKO::IOSP_RAD_MON, srcId, dstId);
IOSP_RAD_MON* iosp = static_cast(tsbk.get());
VERBOSE_LOG_TSBK_NET(tsbk->toString(true), srcId, dstId);
@@ -855,7 +856,7 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
writeRF_TSDU_Radio_Mon(srcId , dstId , iosp->getTxMult());
}
break;
- case TSBK_IOSP_CALL_ALRT:
+ case TSBKO::IOSP_CALL_ALRT:
{
// validate the source RID
VALID_SRCID_NET(tsbk->toString(true), srcId);
@@ -865,7 +866,7 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
// validate source RID
if (!acl::AccessControl::validateSrcId(srcId)) {
- LogWarning(LOG_NET, "P25_DUID_TSDU (Trunking System Data Unit) denial, RID rejection, srcId = %u", srcId);
+ LogWarning(LOG_NET, "DUID::TSDU (Trunking System Data Unit) denial, RID rejection, srcId = %u", srcId);
return false;
}
@@ -873,7 +874,7 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
::ActivityLog("P25", false, "call alert request from %u to %u", srcId, dstId);
}
break;
- case TSBK_IOSP_ACK_RSP:
+ case TSBKO::IOSP_ACK_RSP:
{
// validate the source RID
VALID_SRCID_NET(tsbk->toString(true), srcId);
@@ -890,7 +891,7 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
::ActivityLog("P25", false, "ack response from %u to %u", srcId, dstId);
}
break;
- case TSBK_IOSP_EXT_FNCT:
+ case TSBKO::IOSP_EXT_FNCT:
{
// validate the target RID
VALID_DSTID_NET(tsbk->toString(true), dstId);
@@ -902,9 +903,9 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
}
}
break;
- case TSBK_ISP_EMERG_ALRM_REQ:
+ case TSBKO::ISP_EMERG_ALRM_REQ:
{
- // non-emergency mode is a TSBK_OSP_DENY_RSP
+ // non-emergency mode is a TSBKO::OSP_DENY_RSP
if (!tsbk->getEmergency()) {
break; // the FNE may explicitly send these
} else {
@@ -913,18 +914,18 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr
}
}
break;
- case TSBK_IOSP_GRP_AFF:
+ case TSBKO::IOSP_GRP_AFF:
// ignore a network group affiliation command
return true; // don't allow this to write to the air
- case TSBK_OSP_U_DEREG_ACK:
+ case TSBKO::OSP_U_DEREG_ACK:
// ignore a network user deregistration command
return true; // don't allow this to write to the air
- case TSBK_OSP_LOC_REG_RSP:
+ case TSBKO::OSP_LOC_REG_RSP:
// ignore a network location registration command
return true; // don't allow this to write to the air
- case TSBK_OSP_U_REG_CMD:
+ case TSBKO::OSP_U_REG_CMD:
break; // the FNE may explicitly send these
- case TSBK_OSP_QUE_RSP:
+ case TSBKO::OSP_QUE_RSP:
break; // the FNE may explicitly send these
default:
LogError(LOG_NET, P25_TSDU_STR ", unhandled LCO, mfId = $%02X, lco = $%02X", tsbk->getMFId(), tsbk->getLCO());
@@ -975,14 +976,14 @@ void ControlSignaling::writeAdjSSNetwork()
}
if (m_p25->m_network != nullptr) {
- uint8_t cfva = P25_CFVA_VALID;
+ uint8_t cfva = CFVA::VALID;
if (m_p25->m_enableControl && !m_p25->m_dedicatedControl) {
- cfva |= P25_CFVA_CONV;
+ cfva |= CFVA::CONV;
}
// transmit adjacent site broadcast
std::unique_ptr osp = std::make_unique();
- osp->setSrcId(P25_WUID_FNE);
+ osp->setSrcId(WUID_FNE);
osp->setAdjSiteCFVA(cfva);
osp->setAdjSiteSysId(m_p25->m_siteData.sysId());
osp->setAdjSiteRFSSId(m_p25->m_siteData.rfssId());
@@ -1011,9 +1012,9 @@ void ControlSignaling::writeRF_TSDU_Call_Alrt(uint32_t srcId, uint32_t dstId)
iosp->setSrcId(srcId);
iosp->setDstId(dstId);
- if (m_lastMFID != P25_MFG_STANDARD) {
+ if (m_lastMFID != MFG_STANDARD) {
iosp->setMFId(m_lastMFID);
- m_lastMFID = P25_MFG_STANDARD;
+ m_lastMFID = MFG_STANDARD;
}
VERBOSE_LOG_TSBK(iosp->toString(), srcId, dstId);
@@ -1057,9 +1058,9 @@ void ControlSignaling::writeRF_TSDU_Ext_Func(uint32_t func, uint32_t arg, uint32
iosp->setSrcId(arg);
iosp->setDstId(dstId);
- if (m_lastMFID != P25_MFG_STANDARD) {
+ if (m_lastMFID != MFG_STANDARD) {
iosp->setMFId(m_lastMFID);
- m_lastMFID = P25_MFG_STANDARD;
+ m_lastMFID = MFG_STANDARD;
}
if (m_verbose) {
@@ -1068,13 +1069,13 @@ void ControlSignaling::writeRF_TSDU_Ext_Func(uint32_t func, uint32_t arg, uint32
}
// generate activity log entry
- if (func == P25_EXT_FNCT_CHECK) {
+ if (func == ExtendedFunctions::CHECK) {
::ActivityLog("P25", true, "radio check request from %u to %u", arg, dstId);
}
- else if (func == P25_EXT_FNCT_INHIBIT) {
+ else if (func == ExtendedFunctions::INHIBIT) {
::ActivityLog("P25", true, "radio inhibit request from %u to %u", arg, dstId);
}
- else if (func == P25_EXT_FNCT_UNINHIBIT) {
+ else if (func == ExtendedFunctions::UNINHIBIT) {
::ActivityLog("P25", true, "radio uninhibit request from %u to %u", arg, dstId);
}
@@ -1088,16 +1089,16 @@ void ControlSignaling::writeRF_TSDU_Ext_Func(uint32_t func, uint32_t arg, uint32
void ControlSignaling::writeRF_TSDU_Grp_Aff_Q(uint32_t dstId)
{
std::unique_ptr osp = std::make_unique();
- osp->setSrcId(P25_WUID_FNE);
+ osp->setSrcId(WUID_FNE);
osp->setDstId(dstId);
- if (m_lastMFID != P25_MFG_STANDARD) {
+ if (m_lastMFID != MFG_STANDARD) {
osp->setMFId(m_lastMFID);
- m_lastMFID = P25_MFG_STANDARD;
+ m_lastMFID = MFG_STANDARD;
}
VERBOSE_LOG_TSBK_DST(osp->toString(), dstId);
- ::ActivityLog("P25", true, "group affiliation query command from %u to %u", P25_WUID_FNE, dstId);
+ ::ActivityLog("P25", true, "group affiliation query command from %u to %u", WUID_FNE, dstId);
writeRF_TSDU_SBF(osp.get(), true);
}
@@ -1109,16 +1110,16 @@ void ControlSignaling::writeRF_TSDU_Grp_Aff_Q(uint32_t dstId)
void ControlSignaling::writeRF_TSDU_U_Reg_Cmd(uint32_t dstId)
{
std::unique_ptr osp = std::make_unique();
- osp->setSrcId(P25_WUID_FNE);
+ osp->setSrcId(WUID_FNE);
osp->setDstId(dstId);
- if (m_lastMFID != P25_MFG_STANDARD) {
+ if (m_lastMFID != MFG_STANDARD) {
osp->setMFId(m_lastMFID);
- m_lastMFID = P25_MFG_STANDARD;
+ m_lastMFID = MFG_STANDARD;
}
VERBOSE_LOG_TSBK_DST(osp->toString(), dstId);
- ::ActivityLog("P25", true, "unit registration command from %u to %u", P25_WUID_FNE, dstId);
+ ::ActivityLog("P25", true, "unit registration command from %u to %u", WUID_FNE, dstId);
writeRF_TSDU_SBF(osp.get(), true);
}
@@ -1211,7 +1212,7 @@ ControlSignaling::ControlSignaling(Control* p25, bool dumpTSBKData, bool debug,
m_sccbTable(),
m_sccbUpdateCnt(),
m_llaDemandTable(),
- m_lastMFID(P25_MFG_STANDARD),
+ m_lastMFID(MFG_STANDARD),
m_noStatusAck(false),
m_noMessageAck(true),
m_unitToUnitAvailCheck(true),
@@ -1330,7 +1331,7 @@ void ControlSignaling::writeRF_TDULC(lc::TDULC* lc, bool noNetwork)
Sync::addP25Sync(data + 2U);
// Generate NID
- m_p25->m_nid.encode(data + 2U, P25_DUID_TDULC);
+ m_p25->m_nid.encode(data + 2U, DUID::TDULC);
// Generate TDULC Data
lc->encode(data + 2U);
@@ -1341,7 +1342,7 @@ void ControlSignaling::writeRF_TDULC(lc::TDULC* lc, bool noNetwork)
m_p25->m_rfTimeout.stop();
if (!noNetwork)
- writeNetworkRF(lc, data + 2U, P25_DUID_TDULC);
+ writeNetworkRF(lc, data + 2U, false);
if (m_p25->m_duplex) {
data[0U] = modem::TAG_EOT;
@@ -1371,7 +1372,7 @@ void ControlSignaling::writeNet_TDULC(lc::TDULC* lc)
Sync::addP25Sync(buffer + 2U);
// Generate NID
- m_p25->m_nid.encode(buffer + 2U, P25_DUID_TDULC);
+ m_p25->m_nid.encode(buffer + 2U, DUID::TDULC);
// Regenerate TDULC Data
lc->encode(buffer + 2U);
@@ -1423,7 +1424,7 @@ void ControlSignaling::writeRF_TSDU_SBF(lc::TSBK* tsbk, bool noNetwork, bool for
Sync::addP25Sync(data + 2U);
// Generate NID
- m_p25->m_nid.encode(data + 2U, P25_DUID_TSDU);
+ m_p25->m_nid.encode(data + 2U, DUID::TSDU);
// Generate TSBK block
tsbk->setLastBlock(true); // always set last block -- this a Single Block TSDU
@@ -1494,7 +1495,7 @@ void ControlSignaling::writeNet_TSDU(lc::TSBK* tsbk)
Sync::addP25Sync(buffer + 2U);
// Generate NID
- m_p25->m_nid.encode(buffer + 2U, P25_DUID_TSDU);
+ m_p25->m_nid.encode(buffer + 2U, DUID::TSDU);
// Regenerate TSDU Data
tsbk->setLastBlock(true); // always set last block -- this a Single Block TSDU
@@ -1590,7 +1591,7 @@ void ControlSignaling::writeRF_TSDU_MBF(lc::TSBK* tsbk)
Sync::addP25Sync(data + 2U);
// Generate NID
- m_p25->m_nid.encode(data + 2U, P25_DUID_TSDU);
+ m_p25->m_nid.encode(data + 2U, DUID::TSDU);
// interleave
P25Utils::encode(tsdu, data + 2U, 114U, 720U);
@@ -1707,7 +1708,7 @@ void ControlSignaling::writeRF_TDULC_ChanRelease(bool grp, uint32_t srcId, uint3
}
if (m_verbose) {
- LogMessage(LOG_RF, P25_TDULC_STR ", LC_CALL_TERM (Call Termination), srcId = %u, dstId = %u", srcId, dstId);
+ LogMessage(LOG_RF, P25_TDULC_STR ", CALL_TERM (Call Termination), srcId = %u, dstId = %u", srcId, dstId);
}
lc = std::make_unique();
@@ -1774,28 +1775,28 @@ void ControlSignaling::writeRF_ControlData(uint8_t frameCnt, uint8_t n, bool adj
/** required data */
case 0:
default:
- queueRF_TSBK_Ctrl(TSBK_OSP_IDEN_UP);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_IDEN_UP);
break;
case 1:
if (alt)
- queueRF_TSBK_Ctrl(TSBK_OSP_RFSS_STS_BCAST);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_RFSS_STS_BCAST);
else
- queueRF_TSBK_Ctrl(TSBK_OSP_NET_STS_BCAST);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_NET_STS_BCAST);
break;
case 2:
if (alt)
- queueRF_TSBK_Ctrl(TSBK_OSP_NET_STS_BCAST);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_NET_STS_BCAST);
else
- queueRF_TSBK_Ctrl(TSBK_OSP_RFSS_STS_BCAST);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_RFSS_STS_BCAST);
break;
case 3:
if (alt)
- queueRF_TSBK_Ctrl(TSBK_OSP_RFSS_STS_BCAST);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_RFSS_STS_BCAST);
else
- queueRF_TSBK_Ctrl(TSBK_OSP_NET_STS_BCAST);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_NET_STS_BCAST);
break;
case 4:
- queueRF_TSBK_Ctrl(TSBK_OSP_SYNC_BCAST);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_SYNC_BCAST);
break;
/** update data */
case 5:
@@ -1805,12 +1806,12 @@ void ControlSignaling::writeRF_ControlData(uint8_t frameCnt, uint8_t n, bool adj
break;
/** extra data */
case 6:
- queueRF_TSBK_Ctrl(TSBK_OSP_SNDCP_CH_ANN);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_SNDCP_CH_ANN);
break;
case 7:
// write ADJSS
if (adjSS && m_adjSiteTable.size() > 0) {
- queueRF_TSBK_Ctrl(TSBK_OSP_ADJ_STS_BCAST);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_ADJ_STS_BCAST);
break;
} else {
forcePad = true;
@@ -1819,7 +1820,7 @@ void ControlSignaling::writeRF_ControlData(uint8_t frameCnt, uint8_t n, bool adj
case 8:
// write SCCB
if (adjSS && m_sccbTable.size() > 0) {
- queueRF_TSBK_Ctrl(TSBK_OSP_SCCB_EXP);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_SCCB_EXP);
break;
}
break;
@@ -1828,19 +1829,19 @@ void ControlSignaling::writeRF_ControlData(uint8_t frameCnt, uint8_t n, bool adj
// are we transmitting the time/date annoucement?
bool timeDateAnn = (frameCnt % 64U) == 0U;
if (m_ctrlTimeDateAnn && timeDateAnn && n > 4U) {
- queueRF_TSBK_Ctrl(TSBK_OSP_TIME_DATE_ANN);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_TIME_DATE_ANN);
}
// should we insert the BSI bursts?
bool bsi = (frameCnt % 127U) == 0U;
if (bsi && n > 4U) {
- queueRF_TSBK_Ctrl(TSBK_OSP_MOT_CC_BSI);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_MOT_CC_BSI);
}
// should we insert the Git Hash burst?
bool hash = (frameCnt % 125U) == 0U;
if (hash && n > 4U) {
- queueRF_TSBK_Ctrl(TSBK_OSP_DVM_GIT_HASH);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_DVM_GIT_HASH);
}
// add padding after the last sequence or if forced; and only
@@ -1849,8 +1850,8 @@ void ControlSignaling::writeRF_ControlData(uint8_t frameCnt, uint8_t n, bool adj
{
// pad MBF if we have 1 queued TSDUs
if (m_mbfCnt == 1U) {
- queueRF_TSBK_Ctrl(TSBK_OSP_RFSS_STS_BCAST);
- queueRF_TSBK_Ctrl(TSBK_OSP_NET_STS_BCAST);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_RFSS_STS_BCAST);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_NET_STS_BCAST);
if (m_debug) {
LogDebug(LOG_P25, "writeRF_ControlData, have 1 pad 2, mbfCnt = %u", m_mbfCnt);
}
@@ -1860,10 +1861,10 @@ void ControlSignaling::writeRF_ControlData(uint8_t frameCnt, uint8_t n, bool adj
if (m_mbfCnt == 2U) {
std::vector<::lookups::IdenTable> entries = m_p25->m_idenTable->list();
if (entries.size() > 1U) {
- queueRF_TSBK_Ctrl(TSBK_OSP_IDEN_UP);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_IDEN_UP);
}
else {
- queueRF_TSBK_Ctrl(TSBK_OSP_RFSS_STS_BCAST);
+ queueRF_TSBK_Ctrl(TSBKO::OSP_RFSS_STS_BCAST);
}
if (m_debug) {
@@ -1890,7 +1891,7 @@ void ControlSignaling::queueRF_TSBK_Ctrl(uint8_t lco)
std::unique_ptr tsbk;
switch (lco) {
- case TSBK_OSP_IDEN_UP:
+ case TSBKO::OSP_IDEN_UP:
{
std::vector<::lookups::IdenTable> entries = m_p25->m_idenTable->list();
if (m_mbfIdenCnt >= entries.size())
@@ -1931,17 +1932,17 @@ void ControlSignaling::queueRF_TSBK_Ctrl(uint8_t lco)
}
}
break;
- case TSBK_OSP_NET_STS_BCAST:
+ case TSBKO::OSP_NET_STS_BCAST:
// transmit net status burst
tsbk = std::make_unique();
DEBUG_LOG_TSBK(tsbk->toString());
break;
- case TSBK_OSP_RFSS_STS_BCAST:
+ case TSBKO::OSP_RFSS_STS_BCAST:
// transmit rfss status burst
tsbk = std::make_unique();
DEBUG_LOG_TSBK(tsbk->toString());
break;
- case TSBK_OSP_ADJ_STS_BCAST:
+ case TSBKO::OSP_ADJ_STS_BCAST:
// write ADJSS
if (m_adjSiteTable.size() > 0) {
if (m_mbfAdjSSCnt >= m_adjSiteTable.size())
@@ -1965,12 +1966,12 @@ void ControlSignaling::queueRF_TSBK_Ctrl(uint8_t lco)
site.siteId() == m_p25->m_siteData.siteId() && site.sysId() == m_p25->m_siteData.sysId())
continue;
- uint8_t cfva = P25_CFVA_NETWORK;
+ uint8_t cfva = CFVA::NETWORK;
if (m_adjSiteUpdateCnt[site.siteId()] == 0U) {
- cfva |= P25_CFVA_FAILURE;
+ cfva |= CFVA::FAILURE;
}
else {
- cfva |= P25_CFVA_VALID;
+ cfva |= CFVA::VALID;
}
// transmit adjacent site broadcast
@@ -1992,7 +1993,7 @@ void ControlSignaling::queueRF_TSBK_Ctrl(uint8_t lco)
return; // don't create anything
}
break;
- case TSBK_OSP_SCCB_EXP:
+ case TSBKO::OSP_SCCB_EXP:
// write SCCB
if (m_sccbTable.size() > 0) {
if (m_mbfSCCBCnt >= m_sccbTable.size())
@@ -2012,7 +2013,7 @@ void ControlSignaling::queueRF_TSBK_Ctrl(uint8_t lco)
SiteData site = entry.second;
// transmit SCCB broadcast
- osp->setLCO(TSBK_OSP_SCCB_EXP);
+ osp->setLCO(TSBKO::OSP_SCCB_EXP);
osp->setSCCBChnId1(site.channelId());
osp->setSCCBChnNo(site.channelNo());
@@ -2026,12 +2027,12 @@ void ControlSignaling::queueRF_TSBK_Ctrl(uint8_t lco)
return; // don't create anything
}
break;
- case TSBK_OSP_SNDCP_CH_ANN:
+ case TSBKO::OSP_SNDCP_CH_ANN:
// transmit SNDCP announcement
tsbk = std::make_unique();
DEBUG_LOG_TSBK(tsbk->toString());
break;
- case TSBK_OSP_SYNC_BCAST:
+ case TSBKO::OSP_SYNC_BCAST:
{
// transmit sync broadcast
std::unique_ptr osp = std::make_unique();
@@ -2040,7 +2041,7 @@ void ControlSignaling::queueRF_TSBK_Ctrl(uint8_t lco)
tsbk = std::move(osp);
}
break;
- case TSBK_OSP_TIME_DATE_ANN:
+ case TSBKO::OSP_TIME_DATE_ANN:
{
if (m_ctrlTimeDateAnn) {
// transmit time/date announcement
@@ -2051,20 +2052,20 @@ void ControlSignaling::queueRF_TSBK_Ctrl(uint8_t lco)
break;
/** Motorola CC data */
- case TSBK_OSP_MOT_PSH_CCH:
+ case TSBKO::OSP_MOT_PSH_CCH:
// transmit motorola PSH CCH burst
tsbk = std::make_unique();
DEBUG_LOG_TSBK(tsbk->toString());
break;
- case TSBK_OSP_MOT_CC_BSI:
+ case TSBKO::OSP_MOT_CC_BSI:
// transmit motorola CC BSI burst
tsbk = std::make_unique();
DEBUG_LOG_TSBK(tsbk->toString());
break;
/** DVM CC data */
- case TSBK_OSP_DVM_GIT_HASH:
+ case TSBKO::OSP_DVM_GIT_HASH:
// transmit git hash burst
tsbk = std::make_unique();
DEBUG_LOG_TSBK(tsbk->toString());
@@ -2100,7 +2101,7 @@ bool ControlSignaling::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_
bool encryption = ((serviceOptions & 0xFFU) & 0x40U) == 0x40U; // Encryption Flag
uint8_t priority = ((serviceOptions & 0xFFU) & 0x07U); // Priority
- if (dstId == P25_TGID_ALL) {
+ if (dstId == TGID_ALL) {
return true; // do not generate grant packets for $FFFF (All Call) TGID
}
@@ -2109,8 +2110,8 @@ bool ControlSignaling::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_
// don't process RF grant if the network isn't in a idle state and the RF destination is the network destination
if (m_p25->m_netState != RS_NET_IDLE && dstId == m_p25->m_netLastDstId) {
LogWarning(LOG_RF, "Traffic collision detect, preempting new RF traffic to existing network traffic!");
- LogWarning(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic collision, dstId = %u", dstId);
- writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_PTT_COLLIDE, (grp) ? TSBK_IOSP_GRP_VCH : TSBK_IOSP_UU_VCH, grp, true);
+ LogWarning(LOG_RF, P25_TSDU_STR ", TSBKO, IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic collision, dstId = %u", dstId);
+ writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_PTT_COLLIDE, (grp) ? TSBKO::IOSP_GRP_VCH : TSBKO::IOSP_UU_VCH, grp, true);
::ActivityLog("P25", true, "group grant request from %u to TG %u denied", srcId, dstId);
m_p25->m_rfState = RS_RF_REJECTED;
@@ -2127,14 +2128,14 @@ bool ControlSignaling::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_
if (!skip) {
if (m_p25->m_rfState != RS_RF_LISTENING && m_p25->m_rfState != RS_RF_DATA) {
if (!net) {
- LogWarning(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic in progress, dstId = %u", dstId);
- writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_PTT_COLLIDE, (grp) ? TSBK_IOSP_GRP_VCH : TSBK_IOSP_UU_VCH, grp, true);
+ LogWarning(LOG_RF, P25_TSDU_STR ", TSBKO, IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic in progress, dstId = %u", dstId);
+ writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_PTT_COLLIDE, (grp) ? TSBKO::IOSP_GRP_VCH : TSBKO::IOSP_UU_VCH, grp, true);
::ActivityLog("P25", true, "group grant request from %u to TG %u denied", srcId, dstId);
m_p25->m_rfState = RS_RF_REJECTED;
}
else {
- LogWarning(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic in progress, dstId = %u", dstId);
+ LogWarning(LOG_NET, P25_TSDU_STR ", TSBKO, IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic in progress, dstId = %u", dstId);
}
return false;
@@ -2144,14 +2145,14 @@ bool ControlSignaling::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_
if (!m_p25->m_dedicatedControl) {
if (m_p25->m_netState != RS_NET_IDLE && dstId == m_p25->m_netLastDstId) {
if (!net) {
- LogWarning(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic in progress, dstId = %u", dstId);
- writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_PTT_COLLIDE, (grp) ? TSBK_IOSP_GRP_VCH : TSBK_IOSP_UU_VCH, grp, true);
+ LogWarning(LOG_RF, P25_TSDU_STR ", TSBKO, IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic in progress, dstId = %u", dstId);
+ writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_PTT_COLLIDE, (grp) ? TSBKO::IOSP_GRP_VCH : TSBKO::IOSP_UU_VCH, grp, true);
::ActivityLog("P25", true, "group grant request from %u to TG %u denied", srcId, dstId);
m_p25->m_rfState = RS_RF_REJECTED;
}
else {
- LogWarning(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic in progress, dstId = %u", dstId);
+ LogWarning(LOG_NET, P25_TSDU_STR ", TSBKO, IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic in progress, dstId = %u", dstId);
}
return false;
@@ -2161,7 +2162,7 @@ bool ControlSignaling::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_
if (m_p25->m_rfLastDstId != 0U) {
if (m_p25->m_rfLastDstId != dstId && (m_p25->m_rfTGHang.isRunning() && !m_p25->m_rfTGHang.hasExpired())) {
if (!net) {
- writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_PTT_BONK, (grp) ? TSBK_IOSP_GRP_VCH : TSBK_IOSP_UU_VCH, grp, true);
+ writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_PTT_BONK, (grp) ? TSBKO::IOSP_GRP_VCH : TSBKO::IOSP_UU_VCH, grp, true);
m_p25->m_rfState = RS_RF_REJECTED;
}
@@ -2174,28 +2175,28 @@ bool ControlSignaling::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_
if (!m_p25->m_affiliations.rfCh()->isRFChAvailable()) {
if (grp) {
if (!net) {
- LogWarning(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Request) denied, no channels available, dstId = %u", dstId);
- writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_NO_RF_RSRC_AVAIL, TSBK_IOSP_GRP_VCH, grp, true);
+ LogWarning(LOG_RF, P25_TSDU_STR ", TSBKO, IOSP_GRP_VCH (Group Voice Channel Request) denied, no channels available, dstId = %u", dstId);
+ writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_NO_RF_RSRC_AVAIL, TSBKO::IOSP_GRP_VCH, grp, true);
::ActivityLog("P25", true, "group grant request from %u to TG %u denied", srcId, dstId);
m_p25->m_rfState = RS_RF_REJECTED;
}
else {
- LogWarning(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Request) denied, no channels available, dstId = %u", dstId);
+ LogWarning(LOG_NET, P25_TSDU_STR ", TSBKO, IOSP_GRP_VCH (Group Voice Channel Request) denied, no channels available, dstId = %u", dstId);
}
return false;
}
else {
if (!net) {
- LogWarning(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_UU_VCH (Unit-to-Unit Voice Channel Request) denied, no channels available, dstId = %u", dstId);
- writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_NO_RF_RSRC_AVAIL, TSBK_IOSP_GRP_VCH, grp, true);
+ LogWarning(LOG_RF, P25_TSDU_STR ", TSBKO, IOSP_UU_VCH (Unit-to-Unit Voice Channel Request) denied, no channels available, dstId = %u", dstId);
+ writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_NO_RF_RSRC_AVAIL, TSBKO::IOSP_GRP_VCH, grp, true);
::ActivityLog("P25", true, "unit-to-unit grant request from %u to %u denied", srcId, dstId);
m_p25->m_rfState = RS_RF_REJECTED;
}
else {
- LogWarning(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_UU_VCH (Unit-to-Unit Voice Channel Request) denied, no channels available, dstId = %u", dstId);
+ LogWarning(LOG_NET, P25_TSDU_STR ", TSBKO, IOSP_UU_VCH (Unit-to-Unit Voice Channel Request) denied, no channels available, dstId = %u", dstId);
}
return false;
@@ -2215,14 +2216,14 @@ bool ControlSignaling::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_
uint32_t grantedSrcId = m_p25->m_affiliations.getGrantedSrcId(dstId);
if (srcId != grantedSrcId) {
if (!net) {
- LogWarning(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic collision, dstId = %u", dstId);
- writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_PTT_COLLIDE, (grp) ? TSBK_IOSP_GRP_VCH : TSBK_IOSP_UU_VCH, grp, true);
+ LogWarning(LOG_RF, P25_TSDU_STR ", TSBKO, IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic collision, dstId = %u", dstId);
+ writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_PTT_COLLIDE, (grp) ? TSBKO::IOSP_GRP_VCH : TSBKO::IOSP_UU_VCH, grp, true);
::ActivityLog("P25", true, "group grant request from %u to TG %u denied", srcId, dstId);
m_p25->m_rfState = RS_RF_REJECTED;
}
else {
- LogWarning(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic collision, dstId = %u", dstId);
+ LogWarning(LOG_NET, P25_TSDU_STR ", TSBKO, IOSP_GRP_VCH (Group Voice Channel Request) denied, traffic collision, dstId = %u", dstId);
}
return false;
@@ -2259,10 +2260,10 @@ bool ControlSignaling::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_
int ret = RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(),
HTTP_PUT, PUT_PERMIT_TG, req, voiceChData.ssl(), REST_QUICK_WAIT, m_p25->m_debug);
if (ret != network::rest::http::HTTPPayload::StatusType::OK) {
- ::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Request), failed to permit TG for use, chNo = %u", chNo);
+ ::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBKO, IOSP_GRP_VCH (Group Voice Channel Request), failed to permit TG for use, chNo = %u", chNo);
m_p25->m_affiliations.releaseGrant(dstId, false);
if (!net) {
- writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_PTT_BONK, (grp) ? TSBK_IOSP_GRP_VCH : TSBK_IOSP_UU_VCH, grp, true);
+ writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_PTT_BONK, (grp) ? TSBKO::IOSP_GRP_VCH : TSBKO::IOSP_UU_VCH, grp, true);
m_p25->m_rfState = RS_RF_REJECTED;
}
@@ -2270,7 +2271,7 @@ bool ControlSignaling::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_
}
}
else {
- ::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Request), failed to permit TG for use, chNo = %u", chNo);
+ ::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBKO, IOSP_GRP_VCH (Group Voice Channel Request), failed to permit TG for use, chNo = %u", chNo);
}
}
@@ -2313,10 +2314,10 @@ bool ControlSignaling::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_
int ret = RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(),
HTTP_PUT, PUT_PERMIT_TG, req, voiceChData.ssl(), REST_QUICK_WAIT, m_p25->m_debug);
if (ret != network::rest::http::HTTPPayload::StatusType::OK) {
- ::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBK_IOSP_UU_VCH (Unit-to-Unit Voice Channel Request), failed to permit TG for use, chNo = %u", chNo);
+ ::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBKO, IOSP_UU_VCH (Unit-to-Unit Voice Channel Request), failed to permit TG for use, chNo = %u", chNo);
m_p25->m_affiliations.releaseGrant(dstId, false);
if (!net) {
- writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_PTT_BONK, (grp) ? TSBK_IOSP_GRP_VCH : TSBK_IOSP_UU_VCH, grp, true);
+ writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_PTT_BONK, (grp) ? TSBKO::IOSP_GRP_VCH : TSBKO::IOSP_UU_VCH, grp, true);
m_p25->m_rfState = RS_RF_REJECTED;
}
@@ -2324,7 +2325,7 @@ bool ControlSignaling::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_
}
}
else {
- ::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBK_IOSP_UU_VCH (Unit-to-Unit Voice Channel Request), failed to permit TG for use, chNo = %u", chNo);
+ ::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBKO, IOSP_UU_VCH (Unit-to-Unit Voice Channel Request), failed to permit TG for use, chNo = %u", chNo);
}
}
@@ -2401,7 +2402,7 @@ void ControlSignaling::writeRF_TSDU_Grant_Update()
DEBUG_LOG_TSBK(osp->toString());
// transmit group voice grant update
- osp->setLCO(TSBK_OSP_GRP_VCH_GRANT_UPD);
+ osp->setLCO(TSBKO::OSP_GRP_VCH_GRANT_UPD);
osp->setDstId(dstId);
osp->setGrpVchId(voiceChData.chId());
osp->setGrpVchNo(chNo);
@@ -2415,7 +2416,7 @@ void ControlSignaling::writeRF_TSDU_Grant_Update()
DEBUG_LOG_TSBK(osp->toString());
// transmit group voice grant update
- osp->setLCO(TSBK_OSP_UU_VCH_GRANT_UPD);
+ osp->setLCO(TSBKO::OSP_UU_VCH_GRANT_UPD);
osp->setSrcId(srcId);
osp->setDstId(dstId);
osp->setGrpVchId(voiceChData.chId());
@@ -2454,7 +2455,7 @@ bool ControlSignaling::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId,
osp->setSrcId(srcId);
osp->setDstId(dstId);
- if (dstId == P25_TGID_ALL) {
+ if (dstId == TGID_ALL) {
return true; // do not generate grant packets for $FFFF (All Call) TGID
}
@@ -2462,8 +2463,8 @@ bool ControlSignaling::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId,
if (!skip) {
if (m_p25->m_rfState != RS_RF_LISTENING && m_p25->m_rfState != RS_RF_DATA) {
if (!net) {
- LogWarning(LOG_RF, P25_TSDU_STR ", TSBK_ISP_SNDCP_CH_REQ (SNDCP Data Channel Request) denied, traffic in progress, srcId = %u", srcId);
- writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_PTT_COLLIDE, TSBK_ISP_SNDCP_CH_REQ, false, true);
+ LogWarning(LOG_RF, P25_TSDU_STR ", TSBKO, ISP_SNDCP_CH_REQ (SNDCP Data Channel Request) denied, traffic in progress, srcId = %u", srcId);
+ writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_PTT_COLLIDE, TSBKO::ISP_SNDCP_CH_REQ, false, true);
::ActivityLog("P25", true, "SNDCP grant request from %u denied", srcId);
m_p25->m_rfState = RS_RF_REJECTED;
@@ -2475,8 +2476,8 @@ bool ControlSignaling::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId,
if (!m_p25->m_affiliations.isGranted(srcId)) {
if (!m_p25->m_affiliations.rfCh()->isRFChAvailable()) {
if (!net) {
- LogWarning(LOG_RF, P25_TSDU_STR ", TSBK_ISP_SNDCP_CH_REQ (SNDCP Data Channel Request) denied, no channels available, srcId = %u", srcId);
- writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_NO_RF_RSRC_AVAIL, TSBK_ISP_SNDCP_CH_REQ, false, true);
+ LogWarning(LOG_RF, P25_TSDU_STR ", TSBKO, ISP_SNDCP_CH_REQ (SNDCP Data Channel Request) denied, no channels available, srcId = %u", srcId);
+ writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_NO_RF_RSRC_AVAIL, TSBKO::ISP_SNDCP_CH_REQ, false, true);
::ActivityLog("P25", true, "SNDCP grant request from %u denied", srcId);
m_p25->m_rfState = RS_RF_REJECTED;
@@ -2608,7 +2609,7 @@ bool ControlSignaling::writeRF_TSDU_Grp_Aff_Rsp(uint32_t srcId, uint32_t dstId)
iosp->setAnnounceGroup(m_announcementGroup);
iosp->setSrcId(srcId);
iosp->setDstId(dstId);
- iosp->setResponse(P25_RSP_ACCEPT);
+ iosp->setResponse(ResponseCode::ACCEPT);
bool noNet = false;
@@ -2616,17 +2617,17 @@ bool ControlSignaling::writeRF_TSDU_Grp_Aff_Rsp(uint32_t srcId, uint32_t dstId)
if (!acl::AccessControl::validateSrcId(srcId)) {
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, RID rejection, srcId = %u", iosp->toString().c_str(), srcId);
::ActivityLog("P25", true, "group affiliation request from %u to %s %u denied", srcId, "TG ", dstId);
- iosp->setResponse(P25_RSP_REFUSED);
+ iosp->setResponse(ResponseCode::REFUSED);
noNet = true;
}
// register the RID if the MFID is $90 (this is typically DVRS, and DVRS won't unit register so we'll do it for them)
- if (!m_p25->m_affiliations.isUnitReg(srcId) && m_lastMFID == P25_MFG_MOT) {
+ if (!m_p25->m_affiliations.isUnitReg(srcId) && m_lastMFID == MFG_MOT) {
// validate the source RID
if (!acl::AccessControl::validateSrcId(srcId)) {
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, RID rejection, srcId = %u", iosp->toString().c_str(), srcId);
::ActivityLog("P25", true, "unit registration request from %u denied", srcId);
- iosp->setResponse(P25_RSP_REFUSED);
+ iosp->setResponse(ResponseCode::REFUSED);
noNet = true;
}
else {
@@ -2644,7 +2645,7 @@ bool ControlSignaling::writeRF_TSDU_Grp_Aff_Rsp(uint32_t srcId, uint32_t dstId)
if (!m_p25->m_affiliations.isUnitReg(srcId) && m_verifyReg) {
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, RID not registered, srcId = %u", iosp->toString().c_str(), srcId);
::ActivityLog("P25", true, "group affiliation request from %u to %s %u denied", srcId, "TG ", dstId);
- iosp->setResponse(P25_RSP_REFUSED);
+ iosp->setResponse(ResponseCode::REFUSED);
noNet = true;
}
@@ -2656,7 +2657,7 @@ bool ControlSignaling::writeRF_TSDU_Grp_Aff_Rsp(uint32_t srcId, uint32_t dstId)
if (!acl::AccessControl::validateTGId(dstId)) {
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, TGID rejection, dstId = %u", iosp->toString().c_str(), dstId);
::ActivityLog("P25", true, "group affiliation request from %u to %s %u denied", srcId, "TG ", dstId);
- iosp->setResponse(P25_RSP_DENY);
+ iosp->setResponse(ResponseCode::DENY);
noNet = true;
}
@@ -2664,12 +2665,12 @@ bool ControlSignaling::writeRF_TSDU_Grp_Aff_Rsp(uint32_t srcId, uint32_t dstId)
if (acl::AccessControl::tgidNonPreferred(dstId)) {
LogWarning(LOG_RF, P25_TSDU_STR ", %s non-preferred on this site, TGID rejection, dstId = %u", iosp->toString().c_str(), dstId);
::ActivityLog("P25", true, "group affiliation request from %u to %s %u denied", srcId, "TG ", dstId);
- iosp->setResponse(P25_RSP_DENY);
+ iosp->setResponse(ResponseCode::DENY);
noNet = true;
}
}
- if (iosp->getResponse() == P25_RSP_ACCEPT) {
+ if (iosp->getResponse() == ResponseCode::ACCEPT) {
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", %s, anncId = %u, srcId = %u, dstId = %u",
iosp->toString().c_str(), m_announcementGroup, srcId, dstId);
@@ -2698,7 +2699,7 @@ void ControlSignaling::writeRF_TSDU_U_Reg_Rsp(uint32_t srcId, uint32_t sysId)
{
std::unique_ptr iosp = std::make_unique();
iosp->setMFId(m_lastMFID);
- iosp->setResponse(P25_RSP_ACCEPT);
+ iosp->setResponse(ResponseCode::ACCEPT);
iosp->setSrcId(srcId);
iosp->setDstId(srcId);
@@ -2706,17 +2707,17 @@ void ControlSignaling::writeRF_TSDU_U_Reg_Rsp(uint32_t srcId, uint32_t sysId)
if (sysId != m_p25->m_siteData.sysId()) {
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, SYSID rejection, sysId = $%03X", iosp->toString().c_str(), sysId);
::ActivityLog("P25", true, "unit registration request from %u denied", srcId);
- iosp->setResponse(P25_RSP_DENY);
+ iosp->setResponse(ResponseCode::DENY);
}
// validate the source RID
if (!acl::AccessControl::validateSrcId(srcId)) {
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, RID rejection, srcId = %u", iosp->toString().c_str(), srcId);
::ActivityLog("P25", true, "unit registration request from %u denied", srcId);
- iosp->setResponse(P25_RSP_REFUSED);
+ iosp->setResponse(ResponseCode::REFUSED);
}
- if (iosp->getResponse() == P25_RSP_ACCEPT) {
+ if (iosp->getResponse() == ResponseCode::ACCEPT) {
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", %s, srcId = %u, sysId = $%03X", iosp->toString().c_str(), srcId, sysId);
}
@@ -2754,7 +2755,7 @@ void ControlSignaling::writeRF_TSDU_U_Dereg_Ack(uint32_t srcId)
if (dereged) {
std::unique_ptr osp = std::make_unique();
osp->setMFId(m_lastMFID);
- osp->setSrcId(P25_WUID_FNE);
+ osp->setSrcId(WUID_FNE);
osp->setDstId(srcId);
if (m_verbose) {
@@ -2808,7 +2809,7 @@ bool ControlSignaling::writeRF_TSDU_Loc_Reg_Rsp(uint32_t srcId, uint32_t dstId,
std::unique_ptr osp = std::make_unique();
osp->setMFId(m_lastMFID);
- osp->setResponse(P25_RSP_ACCEPT);
+ osp->setResponse(ResponseCode::ACCEPT);
osp->setDstId(dstId);
osp->setSrcId(srcId);
@@ -2818,7 +2819,7 @@ bool ControlSignaling::writeRF_TSDU_Loc_Reg_Rsp(uint32_t srcId, uint32_t dstId,
if (!acl::AccessControl::validateSrcId(srcId)) {
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, RID rejection, srcId = %u", osp->toString().c_str(), srcId);
::ActivityLog("P25", true, "location registration request from %u denied", srcId);
- osp->setResponse(P25_RSP_REFUSED);
+ osp->setResponse(ResponseCode::REFUSED);
noNet = true;
}
@@ -2839,13 +2840,13 @@ bool ControlSignaling::writeRF_TSDU_Loc_Reg_Rsp(uint32_t srcId, uint32_t dstId,
if (!acl::AccessControl::validateTGId(dstId)) {
LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, TGID rejection, dstId = %u", osp->toString().c_str(), dstId);
::ActivityLog("P25", true, "location registration request from %u to %s %u denied", srcId, "TG ", dstId);
- osp->setResponse(P25_RSP_DENY);
+ osp->setResponse(ResponseCode::DENY);
noNet = true;
}
}
}
- if (osp->getResponse() == P25_RSP_ACCEPT) {
+ if (osp->getResponse() == ResponseCode::ACCEPT) {
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", %s, srcId = %u, dstId = %u", osp->toString().c_str(), srcId, dstId);
}
@@ -2865,12 +2866,12 @@ bool ControlSignaling::writeRF_TSDU_Loc_Reg_Rsp(uint32_t srcId, uint32_t dstId,
void ControlSignaling::writeRF_TSDU_Auth_Dmd(uint32_t srcId)
{
std::unique_ptr osp = std::make_unique();
- osp->setSrcId(P25_WUID_FNE);
+ osp->setSrcId(WUID_FNE);
osp->setDstId(srcId);
osp->setAuthRS(m_p25->m_llaRS);
// generate challenge
- uint8_t RC[P25_AUTH_RAND_CHLNG_LENGTH_BYTES];
+ uint8_t RC[AUTH_RAND_CHLNG_LENGTH_BYTES];
std::uniform_int_distribution dist(DVM_RAND_MIN, DVM_RAND_MAX);
uint32_t rnd = dist(m_p25->m_random);
__SET_UINT32(rnd, RC, 0U);
@@ -2930,7 +2931,7 @@ void ControlSignaling::writeNet_TSDU_From_RF(lc::TSBK* tsbk, uint8_t* data)
Sync::addP25Sync(data);
// Generate NID
- m_p25->m_nid.encode(data, P25_DUID_TSDU);
+ m_p25->m_nid.encode(data, DUID::TSDU);
// Regenerate TSDU Data
tsbk->setLastBlock(true); // always set last block -- this a Single Block TSDU
@@ -2956,6 +2957,6 @@ void ControlSignaling::denialInhibit(uint32_t srcId)
// this check should have already been done -- but do it again anyway
if (!acl::AccessControl::validateSrcId(srcId)) {
LogWarning(LOG_P25, P25_TSDU_STR ", denial, system auto-inhibit RID, srcId = %u", srcId);
- writeRF_TSDU_Ext_Func(P25_EXT_FNCT_INHIBIT, P25_WUID_FNE, srcId);
+ writeRF_TSDU_Ext_Func(ExtendedFunctions::INHIBIT, WUID_FNE, srcId);
}
}
diff --git a/src/host/p25/packet/ControlSignaling.h b/src/host/p25/packet/ControlSignaling.h
index d12eaf28..faad840d 100644
--- a/src/host/p25/packet/ControlSignaling.h
+++ b/src/host/p25/packet/ControlSignaling.h
@@ -50,7 +50,7 @@ namespace p25
/// Process a data frame from the RF interface.
bool process(uint8_t* data, uint32_t len, std::unique_ptr preDecodedTSBK = nullptr);
/// Process a data frame from the network.
- bool processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, uint8_t& duid);
+ bool processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, defines::DUID::E& duid);
/// Helper used to process AMBTs from PDU data.
bool processMBT(data::DataHeader& dataHeader, data::DataBlock* blocks);
diff --git a/src/host/p25/packet/Data.cpp b/src/host/p25/packet/Data.cpp
index 5dcd299a..15f8450c 100644
--- a/src/host/p25/packet/Data.cpp
+++ b/src/host/p25/packet/Data.cpp
@@ -23,9 +23,10 @@
#include "p25/packet/Data.h"
#include "ActivityLog.h"
-using namespace p25;
-using namespace p25::data;
using namespace p25::packet;
+using namespace p25::data;
+using namespace p25::defines;
+using namespace p25;
#include
#include
@@ -80,7 +81,7 @@ bool Data::process(uint8_t* data, uint32_t len)
}
// handle individual DUIDs
- if (duid == P25_DUID_PDU) {
+ if (duid == DUID::PDU) {
if (m_p25->m_rfState != RS_RF_DATA) {
m_rfDataHeader.reset();
m_rfDataBlockCnt = 0U;
@@ -142,7 +143,7 @@ bool Data::process(uint8_t* data, uint32_t len)
}
// if we're a dedicated CC or in control only mode, we only want to handle AMBTs. Otherwise return
- if ((m_p25->m_dedicatedControl || m_p25->m_controlOnly) && m_rfDataHeader.getFormat() != PDU_FMT_AMBT) {
+ if ((m_p25->m_dedicatedControl || m_p25->m_controlOnly) && m_rfDataHeader.getFormat() != PDUFormatType::AMBT) {
if (m_debug) {
LogDebug(LOG_RF, "CC only mode, ignoring non-AMBT PDU from RF");
}
@@ -160,9 +161,9 @@ bool Data::process(uint8_t* data, uint32_t len)
// only send data blocks across the network, if we're not an AMBT,
// an RSP or a registration service
- if ((m_rfDataHeader.getFormat() != PDU_FMT_AMBT) &&
- (m_rfDataHeader.getFormat() != PDU_FMT_RSP) &&
- (m_rfDataHeader.getSAP() != PDU_SAP_REG)) {
+ if ((m_rfDataHeader.getFormat() != PDUFormatType::AMBT) &&
+ (m_rfDataHeader.getFormat() != PDUFormatType::RSP) &&
+ (m_rfDataHeader.getSAP() != PDUSAP::REG)) {
writeNetwork(0U, buffer, P25_PDU_FEC_LENGTH_BYTES, false);
}
}
@@ -170,8 +171,8 @@ bool Data::process(uint8_t* data, uint32_t len)
if (m_p25->m_rfState == RS_RF_DATA) {
uint32_t blocksToFollow = m_rfDataHeader.getBlocksToFollow();
// process second header if we're using enhanced addressing
- if (m_rfDataHeader.getSAP() == PDU_SAP_EXT_ADDR &&
- m_rfDataHeader.getFormat() == PDU_FMT_UNCONFIRMED) {
+ if (m_rfDataHeader.getSAP() == PDUSAP::EXT_ADDR &&
+ m_rfDataHeader.getFormat() == PDUFormatType::UNCONFIRMED) {
::memset(buffer, 0x00U, P25_PDU_FEC_LENGTH_BYTES);
Utils::getBitRange(m_rfPDU, buffer, offset, P25_PDU_FEC_LENGTH_BITS);
bool ret = m_rfSecondHeader.decode(buffer);
@@ -200,9 +201,9 @@ bool Data::process(uint8_t* data, uint32_t len)
// only send data blocks across the network, if we're not an AMBT,
// an RSP or a registration service
- if ((m_rfDataHeader.getFormat() != PDU_FMT_AMBT) &&
- (m_rfDataHeader.getFormat() != PDU_FMT_RSP) &&
- (m_rfDataHeader.getSAP() != PDU_SAP_REG)) {
+ if ((m_rfDataHeader.getFormat() != PDUFormatType::AMBT) &&
+ (m_rfDataHeader.getFormat() != PDUFormatType::RSP) &&
+ (m_rfDataHeader.getSAP() != PDUSAP::REG)) {
writeNetwork(1U, buffer, P25_PDU_FEC_LENGTH_BYTES, false);
}
@@ -236,14 +237,14 @@ bool Data::process(uint8_t* data, uint32_t len)
if (ret) {
// if we are getting unconfirmed or confirmed blocks, and if we've reached the total number of blocks
// set this block as the last block for full packet CRC
- if ((m_rfDataHeader.getFormat() == PDU_FMT_CONFIRMED) || (m_rfDataHeader.getFormat() == PDU_FMT_UNCONFIRMED)) {
+ if ((m_rfDataHeader.getFormat() == PDUFormatType::CONFIRMED) || (m_rfDataHeader.getFormat() == PDUFormatType::UNCONFIRMED)) {
if ((m_rfDataBlockCnt + 1U) == blocksToFollow) {
m_rfData[i].setLastBlock(true);
}
}
// are we processing extended address data from the first block?
- if (m_rfDataHeader.getSAP() == PDU_SAP_EXT_ADDR && m_rfDataHeader.getFormat() == PDU_FMT_CONFIRMED &&
+ if (m_rfDataHeader.getSAP() == PDUSAP::EXT_ADDR && m_rfDataHeader.getFormat() == PDUFormatType::CONFIRMED &&
m_rfData[i].getSerialNo() == 0U) {
if (m_verbose) {
LogMessage(LOG_RF, P25_PDU_STR ", ISP, block %u, fmt = $%02X, lastBlock = %u, sap = $%02X, llId = %u",
@@ -268,7 +269,7 @@ bool Data::process(uint8_t* data, uint32_t len)
else {
if (m_verbose) {
LogMessage(LOG_RF, P25_PDU_STR ", ISP, block %u, fmt = $%02X, lastBlock = %u",
- (m_rfDataHeader.getFormat() == PDU_FMT_CONFIRMED) ? m_rfData[i].getSerialNo() : m_rfDataBlockCnt, m_rfData[i].getFormat(),
+ (m_rfDataHeader.getFormat() == PDUFormatType::CONFIRMED) ? m_rfData[i].getSerialNo() : m_rfDataBlockCnt, m_rfData[i].getFormat(),
m_rfData[i].getLastBlock());
if (m_dumpPDUData) {
@@ -281,14 +282,14 @@ bool Data::process(uint8_t* data, uint32_t len)
}
m_rfData[i].getData(m_pduUserData + dataOffset);
- dataOffset += (m_rfDataHeader.getFormat() == PDU_FMT_CONFIRMED) ? P25_PDU_CONFIRMED_DATA_LENGTH_BYTES : P25_PDU_UNCONFIRMED_LENGTH_BYTES;
+ dataOffset += (m_rfDataHeader.getFormat() == PDUFormatType::CONFIRMED) ? P25_PDU_CONFIRMED_DATA_LENGTH_BYTES : P25_PDU_UNCONFIRMED_LENGTH_BYTES;
m_pduUserDataLength = dataOffset;
// only send data blocks across the network, if we're not an AMBT,
// an RSP or a registration service
- if ((m_rfDataHeader.getFormat() != PDU_FMT_AMBT) &&
- (m_rfDataHeader.getFormat() != PDU_FMT_RSP) &&
- (m_rfDataHeader.getSAP() != PDU_SAP_REG)) {
+ if ((m_rfDataHeader.getFormat() != PDUFormatType::AMBT) &&
+ (m_rfDataHeader.getFormat() != PDUFormatType::RSP) &&
+ (m_rfDataHeader.getSAP() != PDUSAP::REG)) {
writeNetwork(m_rfDataBlockCnt, buffer, P25_PDU_FEC_LENGTH_BYTES, m_rfData[i].getLastBlock());
}
@@ -303,7 +304,7 @@ bool Data::process(uint8_t* data, uint32_t len)
}
}
else {
- if (m_rfData[i].getFormat() == PDU_FMT_CONFIRMED) {
+ if (m_rfData[i].getFormat() == PDUFormatType::CONFIRMED) {
LogWarning(LOG_RF, P25_PDU_STR ", unfixable PDU data (3/4 rate or CRC), block %u", i);
// to prevent data block offset errors fill the bad block with 0's
@@ -341,7 +342,7 @@ bool Data::process(uint8_t* data, uint32_t len)
}
// did we receive a response header?
- if (m_rfDataHeader.getFormat() == PDU_FMT_RSP) {
+ if (m_rfDataHeader.getFormat() == PDUFormatType::RSP) {
if (m_verbose) {
LogMessage(LOG_RF, P25_PDU_STR ", ISP, response, fmt = $%02X, rspClass = $%02X, rspType = $%02X, rspStatus = $%02X, llId = %u, srcLlId = %u",
m_rfDataHeader.getFormat(), m_rfDataHeader.getResponseClass(), m_rfDataHeader.getResponseType(), m_rfDataHeader.getResponseStatus(),
@@ -350,7 +351,7 @@ bool Data::process(uint8_t* data, uint32_t len)
if (m_repeatPDU) {
if (!m_rfDataHeader.getFullMessage()) {
- m_rfDataHeader.setSAP(PDU_SAP_EXT_ADDR);
+ m_rfDataHeader.setSAP(PDUSAP::EXT_ADDR);
}
writeRF_PDU_Ack_Response(m_rfDataHeader.getResponseClass(), m_rfDataHeader.getResponseType(), m_rfDataHeader.getResponseStatus(),
@@ -360,18 +361,18 @@ bool Data::process(uint8_t* data, uint32_t len)
else {
// handle standard P25 service access points
switch (m_rfDataHeader.getSAP()) {
- case PDU_SAP_REG:
+ case PDUSAP::REG:
{
uint8_t regType = (m_pduUserData[0] >> 4) & 0x0F;
switch (regType) {
- case PDU_REG_TYPE_REQ_CNCT:
+ case PDURegType::CNCT:
{
uint32_t llId = (m_pduUserData[1U] << 16) + (m_pduUserData[2U] << 8) + m_pduUserData[3U];
ulong64_t ipAddr = (m_pduUserData[8U] << 24) + (m_pduUserData[9U] << 16) +
(m_pduUserData[10U] << 8) + m_pduUserData[11U];
if (m_verbose) {
- LogMessage(LOG_RF, P25_PDU_STR ", PDU_REG_TYPE_REQ_CNCT (Registration Request Connect), llId = %u, ipAddr = %s", llId, __IP_FROM_ULONG(ipAddr).c_str());
+ LogMessage(LOG_RF, P25_PDU_STR ", CNCT (Registration Request Connect), llId = %u, ipAddr = %s", llId, __IP_FROM_ULONG(ipAddr).c_str());
}
m_connQueueTable[llId] = std::make_tuple(m_rfDataHeader.getMFId(), ipAddr);
@@ -380,12 +381,12 @@ bool Data::process(uint8_t* data, uint32_t len)
m_connTimerTable[llId].start();
}
break;
- case PDU_REG_TYPE_REQ_DISCNCT:
+ case PDURegType::DISCNCT:
{
uint32_t llId = (m_pduUserData[1U] << 16) + (m_pduUserData[2U] << 8) + m_pduUserData[3U];
if (m_verbose) {
- LogMessage(LOG_RF, P25_PDU_STR ", PDU_REG_TYPE_REQ_DISCNCT (Registration Request Disconnect), llId = %u", llId);
+ LogMessage(LOG_RF, P25_PDU_STR ", DISCNCT (Registration Request Disconnect), llId = %u", llId);
}
if (hasLLIdFNEReg(llId)) {
@@ -406,10 +407,10 @@ bool Data::process(uint8_t* data, uint32_t len)
}
}
break;
- case PDU_SAP_TRUNK_CTRL:
+ case PDUSAP::TRUNK_CTRL:
{
if (m_verbose) {
- LogMessage(LOG_RF, P25_PDU_STR ", PDU_SAP_TRUNK_CTRL (Alternate MBT Packet), lco = $%02X, blocksToFollow = %u",
+ LogMessage(LOG_RF, P25_PDU_STR ", TRUNK_CTRL (Alternate MBT Packet), lco = $%02X, blocksToFollow = %u",
m_rfDataHeader.getAMBTOpcode(), m_rfDataHeader.getBlocksToFollow());
}
@@ -514,7 +515,7 @@ bool Data::processNetwork(uint8_t* data, uint32_t len, uint32_t blockLength)
}
// if we're a dedicated CC or in control only mode, we only want to handle AMBTs. Otherwise return
- if ((m_p25->m_dedicatedControl || m_p25->m_controlOnly) && m_netDataHeader.getFormat() != PDU_FMT_AMBT) {
+ if ((m_p25->m_dedicatedControl || m_p25->m_controlOnly) && m_netDataHeader.getFormat() != PDUFormatType::AMBT) {
if (m_debug) {
LogDebug(LOG_NET, "CC only mode, ignoring non-AMBT PDU from network");
}
@@ -545,8 +546,8 @@ bool Data::processNetwork(uint8_t* data, uint32_t len, uint32_t blockLength)
uint8_t buffer[P25_PDU_FEC_LENGTH_BYTES];
// process second header if we're using enhanced addressing
- if (m_netDataHeader.getSAP() == PDU_SAP_EXT_ADDR &&
- m_netDataHeader.getFormat() == PDU_FMT_UNCONFIRMED) {
+ if (m_netDataHeader.getSAP() == PDUSAP::EXT_ADDR &&
+ m_netDataHeader.getFormat() == PDUFormatType::UNCONFIRMED) {
::memset(buffer, 0x00U, P25_PDU_FEC_LENGTH_BYTES);
::memcpy(buffer, m_netPDU, P25_PDU_FEC_LENGTH_BYTES);
@@ -598,14 +599,14 @@ bool Data::processNetwork(uint8_t* data, uint32_t len, uint32_t blockLength)
if (ret) {
// if we are getting unconfirmed or confirmed blocks, and if we've reached the total number of blocks
// set this block as the last block for full packet CRC
- if ((m_netDataHeader.getFormat() == PDU_FMT_CONFIRMED) || (m_netDataHeader.getFormat() == PDU_FMT_UNCONFIRMED)) {
+ if ((m_netDataHeader.getFormat() == PDUFormatType::CONFIRMED) || (m_netDataHeader.getFormat() == PDUFormatType::UNCONFIRMED)) {
if ((m_netDataBlockCnt + 1U) == blocksToFollow) {
m_netData[i].setLastBlock(true);
}
}
// are we processing extended address data from the first block?
- if (m_netDataHeader.getSAP() == PDU_SAP_EXT_ADDR && m_netDataHeader.getFormat() == PDU_FMT_CONFIRMED &&
+ if (m_netDataHeader.getSAP() == PDUSAP::EXT_ADDR && m_netDataHeader.getFormat() == PDUFormatType::CONFIRMED &&
m_netData[i].getSerialNo() == 0U) {
LogMessage(LOG_NET, P25_PDU_STR ", block %u, fmt = $%02X, lastBlock = %u, sap = $%02X, llId = %u",
m_netData[i].getSerialNo(), m_netData[i].getFormat(), m_netData[i].getLastBlock(), m_netData[i].getSAP(), m_netData[i].getLLId());
@@ -618,12 +619,12 @@ bool Data::processNetwork(uint8_t* data, uint32_t len, uint32_t blockLength)
}
else {
LogMessage(LOG_NET, P25_PDU_STR ", block %u, fmt = $%02X, lastBlock = %u",
- (m_netDataHeader.getFormat() == PDU_FMT_CONFIRMED) ? m_netData[i].getSerialNo() : m_netDataBlockCnt, m_netData[i].getFormat(),
+ (m_netDataHeader.getFormat() == PDUFormatType::CONFIRMED) ? m_netData[i].getSerialNo() : m_netDataBlockCnt, m_netData[i].getFormat(),
m_netData[i].getLastBlock());
}
m_netData[i].getData(m_pduUserData + dataOffset);
- dataOffset += (m_rfDataHeader.getFormat() == PDU_FMT_CONFIRMED) ? P25_PDU_CONFIRMED_DATA_LENGTH_BYTES : P25_PDU_UNCONFIRMED_LENGTH_BYTES;
+ dataOffset += (m_rfDataHeader.getFormat() == PDUFormatType::CONFIRMED) ? P25_PDU_CONFIRMED_DATA_LENGTH_BYTES : P25_PDU_UNCONFIRMED_LENGTH_BYTES;
m_pduUserDataLength = dataOffset;
m_netDataBlockCnt++;
@@ -637,7 +638,7 @@ bool Data::processNetwork(uint8_t* data, uint32_t len, uint32_t blockLength)
}
}
else {
- if (m_netData[i].getFormat() == PDU_FMT_CONFIRMED)
+ if (m_netData[i].getFormat() == PDUFormatType::CONFIRMED)
LogWarning(LOG_NET, P25_PDU_STR ", unfixable PDU data (3/4 rate or CRC), block %u", i);
else
LogWarning(LOG_NET, P25_PDU_STR ", unfixable PDU data (1/2 rate or CRC), block %u", i);
@@ -734,7 +735,7 @@ void Data::writeRF_PDU_User(data::DataHeader& dataHeader, const uint8_t* pduUser
DataBlock rspBlock = DataBlock();
uint32_t dataOffset = 0U;
for (uint8_t i = 0; i < dataHeader.getBlocksToFollow(); i++) {
- rspBlock.setFormat(PDU_FMT_UNCONFIRMED);
+ rspBlock.setFormat(PDUFormatType::UNCONFIRMED);
rspBlock.setSerialNo(0U);
rspBlock.setData(pduUserData + dataOffset);
@@ -771,8 +772,8 @@ void Data::clock(uint32_t ms)
uint64_t ipAddr = std::get<1>(m_connQueueTable[llId]);
if (!acl::AccessControl::validateSrcId(llId)) {
- LogWarning(LOG_RF, P25_PDU_STR ", PDU_REG_TYPE_RSP_DENY (Registration Response Deny), llId = %u, ipAddr = %s", llId, __IP_FROM_ULONG(ipAddr).c_str());
- writeRF_PDU_Reg_Response(PDU_REG_TYPE_RSP_DENY, mfId, llId, ipAddr);
+ LogWarning(LOG_RF, P25_PDU_STR ", DENY (Registration Response Deny), llId = %u, ipAddr = %s", llId, __IP_FROM_ULONG(ipAddr).c_str());
+ writeRF_PDU_Reg_Response(PDURegType::DENY, mfId, llId, ipAddr);
}
else {
if (!hasLLIdFNEReg(llId)) {
@@ -781,10 +782,10 @@ void Data::clock(uint32_t ms)
}
if (m_verbose) {
- LogMessage(LOG_RF, P25_PDU_STR ", PDU_REG_TYPE_RSP_ACCPT (Registration Response Accept), llId = %u, ipAddr = %s", llId, __IP_FROM_ULONG(ipAddr).c_str());
+ LogMessage(LOG_RF, P25_PDU_STR ", ACCPT (Registration Response Accept), llId = %u, ipAddr = %s", llId, __IP_FROM_ULONG(ipAddr).c_str());
}
- writeRF_PDU_Reg_Response(PDU_REG_TYPE_RSP_ACCPT, mfId, llId, ipAddr);
+ writeRF_PDU_Reg_Response(PDURegType::ACCPT, mfId, llId, ipAddr);
}
m_connQueueTable.erase(llId);
@@ -908,7 +909,7 @@ void Data::writeRF_PDU(const uint8_t* pdu, uint32_t bitLength, bool noNulls)
Sync::addP25Sync(data + 2U);
// Regenerate NID
- m_p25->m_nid.encode(data + 2U, P25_DUID_PDU);
+ m_p25->m_nid.encode(data + 2U, DUID::PDU);
// Add busy bits
P25Utils::addBusyBits(data + 2U, newBitLength, true, false);
@@ -993,7 +994,7 @@ void Data::writeNet_PDU_Buffered()
Utils::setBitRange(block, data, offset, P25_PDU_FEC_LENGTH_BITS);
// are we processing extended address data from the first block?
- if (m_netDataHeader.getSAP() == PDU_SAP_EXT_ADDR && m_netDataHeader.getFormat() == PDU_FMT_CONFIRMED &&
+ if (m_netDataHeader.getSAP() == PDUSAP::EXT_ADDR && m_netDataHeader.getFormat() == PDUFormatType::CONFIRMED &&
m_netData[i].getSerialNo() == 0U) {
if (m_verbose) {
LogMessage(LOG_NET, P25_PDU_STR ", OSP, block %u, fmt = $%02X, lastBlock = %u, sap = $%02X, llId = %u",
@@ -1010,7 +1011,7 @@ void Data::writeNet_PDU_Buffered()
else {
if (m_verbose) {
LogMessage(LOG_NET, P25_PDU_STR ", OSP, block %u, fmt = $%02X, lastBlock = %u",
- (m_netDataHeader.getFormat() == PDU_FMT_CONFIRMED) ? m_netData[i].getSerialNo() : i, m_netData[i].getFormat(),
+ (m_netDataHeader.getFormat() == PDUFormatType::CONFIRMED) ? m_netData[i].getSerialNo() : i, m_netData[i].getFormat(),
m_netData[i].getLastBlock());
if (m_dumpPDUData) {
@@ -1023,7 +1024,7 @@ void Data::writeNet_PDU_Buffered()
}
offset += P25_PDU_FEC_LENGTH_BITS;
- dataOffset += (m_netDataHeader.getFormat() == PDU_FMT_CONFIRMED) ? P25_PDU_CONFIRMED_DATA_LENGTH_BYTES : P25_PDU_UNCONFIRMED_LENGTH_BYTES;
+ dataOffset += (m_netDataHeader.getFormat() == PDUFormatType::CONFIRMED) ? P25_PDU_CONFIRMED_DATA_LENGTH_BYTES : P25_PDU_UNCONFIRMED_LENGTH_BYTES;
}
writeRF_PDU(data, bitLength);
@@ -1089,7 +1090,7 @@ void Data::writeRF_PDU_Buffered()
m_rfData[i].setData(m_pduUserData + dataOffset);
// are we processing extended address data from the first block?
- if (m_rfDataHeader.getSAP() == PDU_SAP_EXT_ADDR && m_rfDataHeader.getFormat() == PDU_FMT_CONFIRMED &&
+ if (m_rfDataHeader.getSAP() == PDUSAP::EXT_ADDR && m_rfDataHeader.getFormat() == PDUFormatType::CONFIRMED &&
m_rfData[i].getSerialNo() == 0U) {
if (m_verbose) {
LogMessage(LOG_RF, P25_PDU_STR ", OSP, block %u, fmt = $%02X, lastBlock = %u, sap = $%02X, llId = %u",
@@ -1106,7 +1107,7 @@ void Data::writeRF_PDU_Buffered()
else {
if (m_verbose) {
LogMessage(LOG_RF, P25_PDU_STR ", OSP, block %u, fmt = $%02X, lastBlock = %u",
- (m_rfDataHeader.getFormat() == PDU_FMT_CONFIRMED) ? m_rfData[i].getSerialNo() : i, m_rfData[i].getFormat(),
+ (m_rfDataHeader.getFormat() == PDUFormatType::CONFIRMED) ? m_rfData[i].getSerialNo() : i, m_rfData[i].getFormat(),
m_rfData[i].getLastBlock());
if (m_dumpPDUData) {
@@ -1123,7 +1124,7 @@ void Data::writeRF_PDU_Buffered()
Utils::setBitRange(block, data, offset, P25_PDU_FEC_LENGTH_BITS);
offset += P25_PDU_FEC_LENGTH_BITS;
- dataOffset += (m_rfDataHeader.getFormat() == PDU_FMT_CONFIRMED) ? P25_PDU_CONFIRMED_DATA_LENGTH_BYTES : P25_PDU_UNCONFIRMED_LENGTH_BYTES;
+ dataOffset += (m_rfDataHeader.getFormat() == PDUFormatType::CONFIRMED) ? P25_PDU_CONFIRMED_DATA_LENGTH_BYTES : P25_PDU_UNCONFIRMED_LENGTH_BYTES;
}
writeRF_PDU(data, bitLength);
@@ -1138,7 +1139,7 @@ void Data::writeRF_PDU_Buffered()
///
void Data::writeRF_PDU_Reg_Response(uint8_t regType, uint8_t mfId, uint32_t llId, ulong64_t ipAddr)
{
- if ((regType != PDU_REG_TYPE_RSP_ACCPT) && (regType != PDU_REG_TYPE_RSP_DENY))
+ if ((regType != PDURegType::ACCPT) && (regType != PDURegType::DENY))
return;
uint32_t bitLength = (2U * P25_PDU_FEC_LENGTH_BITS) + P25_PREAMBLE_LENGTH_BITS;
@@ -1150,11 +1151,11 @@ void Data::writeRF_PDU_Reg_Response(uint8_t regType, uint8_t mfId, uint32_t llId
::memset(block, 0x00U, P25_PDU_FEC_LENGTH_BYTES);
DataHeader rspHeader = DataHeader();
- rspHeader.setFormat(PDU_FMT_CONFIRMED);
+ rspHeader.setFormat(PDUFormatType::CONFIRMED);
rspHeader.setMFId(mfId);
rspHeader.setAckNeeded(true);
rspHeader.setOutbound(true);
- rspHeader.setSAP(PDU_SAP_REG);
+ rspHeader.setSAP(PDUSAP::REG);
rspHeader.setLLId(llId);
rspHeader.setBlocksToFollow(1U);
@@ -1171,7 +1172,7 @@ void Data::writeRF_PDU_Reg_Response(uint8_t regType, uint8_t mfId, uint32_t llId
rspData[1U] = (llId >> 16) & 0xFFU; // Logical Link ID
rspData[2U] = (llId >> 8) & 0xFFU;
rspData[3U] = (llId >> 0) & 0xFFU;
- if (regType == PDU_REG_TYPE_RSP_ACCPT) {
+ if (regType == PDURegType::ACCPT) {
rspData[8U] = (ipAddr >> 24) & 0xFFU; // IP Address
rspData[9U] = (ipAddr >> 16) & 0xFFU;
rspData[10U] = (ipAddr >> 8) & 0xFFU;
@@ -1182,7 +1183,7 @@ void Data::writeRF_PDU_Reg_Response(uint8_t regType, uint8_t mfId, uint32_t llId
// Generate the PDU data
DataBlock rspBlock = DataBlock();
- rspBlock.setFormat(PDU_FMT_CONFIRMED);
+ rspBlock.setFormat(PDUFormatType::CONFIRMED);
rspBlock.setSerialNo(0U);
rspBlock.setData(rspData);
@@ -1204,7 +1205,7 @@ void Data::writeRF_PDU_Reg_Response(uint8_t regType, uint8_t mfId, uint32_t llId
///
void Data::writeRF_PDU_Ack_Response(uint8_t ackClass, uint8_t ackType, uint8_t ackStatus, uint32_t llId, uint32_t srcLlId, bool noNulls)
{
- if (ackClass == PDU_ACK_CLASS_ACK && ackType != PDU_ACK_TYPE_ACK)
+ if (ackClass == PDUAckClass::ACK && ackType != PDUAckType::ACK)
return;
uint32_t bitLength = (1U * P25_PDU_FEC_LENGTH_BITS) + P25_PREAMBLE_LENGTH_BITS;
@@ -1216,14 +1217,14 @@ void Data::writeRF_PDU_Ack_Response(uint8_t ackClass, uint8_t ackType, uint8_t a
::memset(block, 0x00U, P25_PDU_FEC_LENGTH_BYTES);
DataHeader rspHeader = DataHeader();
- rspHeader.setFormat(PDU_FMT_RSP);
+ rspHeader.setFormat(PDUFormatType::RSP);
rspHeader.setMFId(m_rfDataHeader.getMFId());
rspHeader.setOutbound(true);
rspHeader.setResponseClass(ackClass);
rspHeader.setResponseType(ackType);
rspHeader.setResponseStatus(ackStatus);
rspHeader.setLLId(llId);
- if (m_rfDataHeader.getSAP() == PDU_SAP_EXT_ADDR) {
+ if (m_rfDataHeader.getSAP() == PDUSAP::EXT_ADDR) {
rspHeader.setSrcLLId(srcLlId);
rspHeader.setFullMessage(false);
}
diff --git a/src/host/p25/packet/Voice.cpp b/src/host/p25/packet/Voice.cpp
index adcaf030..9a3a3933 100644
--- a/src/host/p25/packet/Voice.cpp
+++ b/src/host/p25/packet/Voice.cpp
@@ -26,8 +26,10 @@
#include "p25/packet/Voice.h"
#include "ActivityLog.h"
-using namespace p25;
using namespace p25::packet;
+using namespace p25::dfsi::defines;
+using namespace p25::defines;
+using namespace p25;
#include
#include
@@ -97,19 +99,19 @@ bool Voice::process(uint8_t* data, uint32_t len)
return false;
}
- uint8_t duid = m_p25->m_nid.getDUID();
+ DUID::E duid = m_p25->m_nid.getDUID();
if (m_p25->m_rfState != RS_RF_LISTENING) {
m_p25->m_rfTGHang.start();
}
- if (duid == P25_DUID_HDU && m_lastDUID == P25_DUID_HDU) {
- duid = P25_DUID_LDU1;
+ if (duid == DUID::HDU && m_lastDUID == DUID::HDU) {
+ duid = DUID::LDU1;
}
// handle individual DUIDs
- if (duid == P25_DUID_HDU) {
- m_lastDUID = P25_DUID_HDU;
+ if (duid == DUID::HDU) {
+ m_lastDUID = DUID::HDU;
if (m_p25->m_rfState == RS_RF_LISTENING || m_p25->m_rfState == RS_RF_AUDIO) {
resetRF();
@@ -123,10 +125,11 @@ bool Voice::process(uint8_t* data, uint32_t len)
}
if (m_verbose && m_debug) {
- uint8_t mi[P25_MI_LENGTH_BYTES];
- ::memset(mi, 0x00U, p25::P25_MI_LENGTH_BYTES);
+ uint8_t mi[MI_LENGTH_BYTES];
+ ::memset(mi, 0x00U, MI_LENGTH_BYTES);
lc.getMI(mi);
- Utils::dump(1U, "P25 HDU MI read from RF", mi, P25_MI_LENGTH_BYTES);
+
+ Utils::dump(1U, "P25 HDU MI read from RF", mi, MI_LENGTH_BYTES);
}
if (m_verbose) {
@@ -187,15 +190,15 @@ bool Voice::process(uint8_t* data, uint32_t len)
return true;
}
- else if (duid == P25_DUID_LDU1) {
+ else if (duid == DUID::LDU1) {
// prevent two xDUs of the same type from being sent consecutively
- if (m_lastDUID == P25_DUID_LDU1) {
+ if (m_lastDUID == DUID::LDU1) {
return false;
}
- m_lastDUID = P25_DUID_LDU1;
+ m_lastDUID = DUID::LDU1;
bool alreadyDecoded = false;
- uint8_t frameType = P25_FT_DATA_UNIT;
+ FrameType::E frameType = FrameType::DATA_UNIT;
if (m_p25->m_rfState == RS_RF_LISTENING) {
lc::LC lc = lc::LC();
bool ret = lc.decodeLDU1(data + 2U);
@@ -286,7 +289,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
if (m_lastRejectId == 0U || m_lastRejectId != srcId) {
LogWarning(LOG_RF, P25_HDU_STR " denial, RID rejection, srcId = %u", srcId);
if (m_p25->m_enableControl) {
- m_p25->m_control->writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_REQ_UNIT_NOT_VALID, (group ? TSBK_IOSP_GRP_VCH : TSBK_IOSP_UU_VCH), group, true);
+ m_p25->m_control->writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_REQ_UNIT_NOT_VALID, (group ? TSBKO::IOSP_GRP_VCH : TSBKO::IOSP_UU_VCH), group, true);
m_p25->m_control->denialInhibit(srcId);
}
@@ -308,7 +311,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
if (m_lastRejectId == 0 || m_lastRejectId != dstId) {
LogWarning(LOG_RF, P25_HDU_STR " denial, RID rejection, dstId = %u", dstId);
if (m_p25->m_enableControl) {
- m_p25->m_control->writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_TGT_UNIT_NOT_VALID, TSBK_IOSP_UU_VCH, false, true);
+ m_p25->m_control->writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_TGT_UNIT_NOT_VALID, TSBKO::IOSP_UU_VCH, false, true);
}
::ActivityLog("P25", true, "RF voice rejection from %u to %s%u ", srcId, group ? "TG " : "", dstId);
@@ -328,7 +331,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
if (m_lastRejectId == 0 || m_lastRejectId != dstId) {
LogWarning(LOG_RF, P25_HDU_STR " denial, TGID rejection, dstId = %u", dstId);
if (m_p25->m_enableControl) {
- m_p25->m_control->writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_TGT_GROUP_NOT_VALID, TSBK_IOSP_GRP_VCH, true, true);
+ m_p25->m_control->writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_TGT_GROUP_NOT_VALID, TSBKO::IOSP_GRP_VCH, true, true);
}
::ActivityLog("P25", true, "RF voice rejection from %u to %s%u ", srcId, group ? "TG " : "", dstId);
@@ -349,7 +352,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
if (!m_p25->m_affiliations.isGroupAff(srcId, dstId) && m_p25->m_control->m_verifyAff) {
if (m_lastRejectId == 0 || m_lastRejectId != srcId) {
LogWarning(LOG_RF, P25_HDU_STR " denial, RID not affiliated to TGID, srcId = %u, dstId = %u", srcId, dstId);
- m_p25->m_control->writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_REQ_UNIT_NOT_AUTH, TSBK_IOSP_GRP_VCH, true, true);
+ m_p25->m_control->writeRF_TSDU_Deny(srcId, dstId, ReasonCode::DENY_REQ_UNIT_NOT_AUTH, TSBKO::IOSP_GRP_VCH, true, true);
m_p25->m_control->writeRF_TSDU_U_Reg_Cmd(srcId);
::ActivityLog("P25", true, "RF voice rejection from %u to %s%u ", srcId, group ? "TG " : "", dstId);
@@ -432,7 +435,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
osp = std::make_unique();
// transmit group voice grant update
- osp->setLCO(TSBK_OSP_GRP_VCH_GRANT_UPD);
+ osp->setLCO(TSBKO::OSP_GRP_VCH_GRANT_UPD);
osp->setDstId(dstId);
osp->setGrpVchId(voiceChData.chId());
osp->setGrpVchNo(chNo);
@@ -443,7 +446,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
osp = std::make_unique();
// transmit group voice grant update
- osp->setLCO(TSBK_OSP_UU_VCH_GRANT_UPD);
+ osp->setLCO(TSBKO::OSP_UU_VCH_GRANT_UPD);
osp->setSrcId(srcId);
osp->setDstId(dstId);
osp->setGrpVchId(voiceChData.chId());
@@ -484,7 +487,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_rfLC.setAlgId(m_rfLastHDU.getAlgId());
m_rfLC.setKId(m_rfLastHDU.getKId());
- uint8_t mi[P25_MI_LENGTH_BYTES];
+ uint8_t mi[MI_LENGTH_BYTES];
m_rfLastHDU.getMI(mi);
m_rfLC.setMI(mi);
@@ -495,7 +498,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
Sync::addP25Sync(buffer + 2U);
// Generate NID
- m_p25->m_nid.encode(buffer + 2U, P25_DUID_HDU);
+ m_p25->m_nid.encode(buffer + 2U, DUID::HDU);
// Generate HDU
m_rfLC.encodeHDU(buffer + 2U);
@@ -503,7 +506,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
// Add busy bits
P25Utils::addBusyBits(buffer + 2U, P25_HDU_FRAME_LENGTH_BITS, false, true);
- writeNetwork(buffer, P25_DUID_HDU);
+ writeNetwork(buffer, DUID::HDU);
if (m_p25->m_duplex) {
buffer[0U] = modem::TAG_DATA;
@@ -512,14 +515,14 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_p25->addFrame(buffer, P25_HDU_FRAME_LENGTH_BYTES + 2U);
}
- frameType = P25_FT_HDU_VALID;
+ frameType = FrameType::HDU_VALID;
if (m_verbose) {
LogMessage(LOG_RF, P25_HDU_STR ", dstId = %u, algo = $%02X, kid = $%04X", m_rfLC.getDstId(), m_rfLC.getAlgId(), m_rfLC.getKId());
}
}
else {
- frameType = P25_FT_HDU_LATE_ENTRY;
+ frameType = FrameType::HDU_LATE_ENTRY;
LogWarning(LOG_RF, P25_HDU_STR ", not transmitted; possible late entry, dstId = %u, algo = $%02X, kid = $%04X", m_rfLastHDU.getDstId(), m_rfLastHDU.getAlgId(), m_rfLastHDU.getKId());
}
@@ -535,7 +538,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
osp = std::make_unique();
// transmit group voice grant update
- osp->setLCO(TSBK_OSP_GRP_VCH_GRANT_UPD);
+ osp->setLCO(TSBKO::OSP_GRP_VCH_GRANT_UPD);
osp->setDstId(dstId);
osp->setGrpVchId(voiceChData.chId());
osp->setGrpVchNo(chNo);
@@ -546,7 +549,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
osp = std::make_unique();
// transmit group voice grant update
- osp->setLCO(TSBK_OSP_UU_VCH_GRANT_UPD);
+ osp->setLCO(TSBKO::OSP_UU_VCH_GRANT_UPD);
osp->setSrcId(srcId);
osp->setDstId(dstId);
osp->setGrpVchId(voiceChData.chId());
@@ -569,7 +572,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_vocLDU1Count = 0U;
m_roamLDU1Count = 0U;
m_p25->m_rfTimeout.start();
- m_lastDUID = P25_DUID_HDU;
+ m_lastDUID = DUID::HDU;
m_rfLastHDU = lc::LC();
}
@@ -657,7 +660,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_vocLDU1Count++;
if (m_vocLDU1Count > VOC_LDU1_COUNT) {
m_vocLDU1Count = 0U;
- m_rfLC.setLCO(LC_RFSS_STS_BCAST);
+ m_rfLC.setLCO(LCO::RFSS_STS_BCAST);
}
}
@@ -665,7 +668,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
Sync::addP25Sync(data + 2U);
// generate NID
- m_p25->m_nid.encode(data + 2U, P25_DUID_LDU1);
+ m_p25->m_nid.encode(data + 2U, DUID::LDU1);
// generate LDU1 Data
m_rfLC.encodeLDU1(data + 2U);
@@ -711,7 +714,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
// add busy bits
P25Utils::addBusyBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, false, true);
- writeNetwork(data + 2U, P25_DUID_LDU1, frameType);
+ writeNetwork(data + 2U, DUID::LDU1, frameType);
if (m_p25->m_duplex) {
data[0U] = modem::TAG_DATA;
@@ -728,12 +731,12 @@ bool Voice::process(uint8_t* data, uint32_t len)
return true;
}
}
- else if (duid == P25_DUID_LDU2) {
+ else if (duid == DUID::LDU2) {
// prevent two xDUs of the same type from being sent consecutively
- if (m_lastDUID == P25_DUID_LDU2) {
+ if (m_lastDUID == DUID::LDU2) {
return false;
}
- m_lastDUID = P25_DUID_LDU2;
+ m_lastDUID = DUID::LDU2;
if (m_p25->m_rfState == RS_RF_LISTENING) {
return false;
@@ -746,18 +749,18 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_rfUndecodableLC++;
// regenerate the MI using LFSR
- uint8_t lastMI[P25_MI_LENGTH_BYTES];
- ::memset(lastMI, 0x00U, P25_MI_LENGTH_BYTES);
+ uint8_t lastMI[MI_LENGTH_BYTES];
+ ::memset(lastMI, 0x00U, MI_LENGTH_BYTES);
- uint8_t nextMI[P25_MI_LENGTH_BYTES];
- ::memset(nextMI, 0x00U, P25_MI_LENGTH_BYTES);
+ uint8_t nextMI[MI_LENGTH_BYTES];
+ ::memset(nextMI, 0x00U, MI_LENGTH_BYTES);
m_rfLastLDU2.getMI(lastMI);
getNextMI(lastMI, nextMI);
if (m_verbose && m_debug) {
- Utils::dump(1U, "Previous P25 HDU MI", lastMI, P25_MI_LENGTH_BYTES);
- Utils::dump(1U, "Calculated next P25 HDU MI", nextMI, P25_MI_LENGTH_BYTES);
+ Utils::dump(1U, "Previous P25 HDU MI", lastMI, MI_LENGTH_BYTES);
+ Utils::dump(1U, "Calculated next P25 HDU MI", nextMI, MI_LENGTH_BYTES);
}
m_rfLC.setMI(nextMI);
@@ -771,7 +774,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
Sync::addP25Sync(data + 2U);
// generate NID
- m_p25->m_nid.encode(data + 2U, P25_DUID_LDU2);
+ m_p25->m_nid.encode(data + 2U, DUID::LDU2);
// generate LDU2 data
m_rfLC.encodeLDU2(data + 2U);
@@ -817,7 +820,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
// add busy bits
P25Utils::addBusyBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, false, true);
- writeNetwork(data + 2U, P25_DUID_LDU2);
+ writeNetwork(data + 2U, DUID::LDU2);
if (m_p25->m_duplex) {
data[0U] = modem::TAG_DATA;
@@ -834,12 +837,12 @@ bool Voice::process(uint8_t* data, uint32_t len)
return true;
}
}
- else if (duid == P25_DUID_VSELP1) {
+ else if (duid == DUID::VSELP1) {
// prevent two xDUs of the same type from being sent consecutively
- if (m_lastDUID == P25_DUID_VSELP1) {
+ if (m_lastDUID == DUID::VSELP1) {
return false;
}
- m_lastDUID = P25_DUID_VSELP1;
+ m_lastDUID = DUID::VSELP1;
// VSELP has no decoding -- its just passed transparently
@@ -885,7 +888,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_rfLC.setAlgId(m_rfLastHDU.getAlgId());
m_rfLC.setKId(m_rfLastHDU.getKId());
- uint8_t mi[P25_MI_LENGTH_BYTES];
+ uint8_t mi[MI_LENGTH_BYTES];
m_rfLastHDU.getMI(mi);
m_rfLC.setMI(mi);
@@ -896,7 +899,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
Sync::addP25Sync(buffer + 2U);
// Generate NID
- m_p25->m_nid.encode(buffer + 2U, P25_DUID_HDU);
+ m_p25->m_nid.encode(buffer + 2U, DUID::HDU);
// Generate HDU
m_rfLC.encodeHDU(buffer + 2U);
@@ -904,7 +907,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
// Add busy bits
P25Utils::addBusyBits(buffer + 2U, P25_HDU_FRAME_LENGTH_BITS, false, true);
- writeNetwork(buffer, P25_DUID_HDU);
+ writeNetwork(buffer, DUID::HDU);
if (m_p25->m_duplex) {
buffer[0U] = modem::TAG_DATA;
@@ -928,7 +931,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_vocLDU1Count = 0U;
m_roamLDU1Count = 0U;
m_p25->m_rfTimeout.start();
- m_lastDUID = P25_DUID_HDU;
+ m_lastDUID = DUID::HDU;
m_rfLastHDU = lc::LC();
}
@@ -940,12 +943,12 @@ bool Voice::process(uint8_t* data, uint32_t len)
Sync::addP25Sync(data + 2U);
// generate NID
- m_p25->m_nid.encode(data + 2U, P25_DUID_VSELP1);
+ m_p25->m_nid.encode(data + 2U, DUID::VSELP1);
// add busy bits
P25Utils::addBusyBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, false, true);
- writeNetwork(data + 2U, P25_DUID_VSELP1);
+ writeNetwork(data + 2U, DUID::VSELP1);
if (m_p25->m_duplex) {
data[0U] = modem::TAG_DATA;
@@ -961,12 +964,12 @@ bool Voice::process(uint8_t* data, uint32_t len)
return true;
}
}
- else if (duid == P25_DUID_VSELP2) {
+ else if (duid == DUID::VSELP2) {
// prevent two xDUs of the same type from being sent consecutively
- if (m_lastDUID == P25_DUID_VSELP2) {
+ if (m_lastDUID == DUID::VSELP2) {
return false;
}
- m_lastDUID = P25_DUID_VSELP2;
+ m_lastDUID = DUID::VSELP2;
// VSELP has no decoding -- its just passed transparently
@@ -980,12 +983,12 @@ bool Voice::process(uint8_t* data, uint32_t len)
Sync::addP25Sync(data + 2U);
// generate NID
- m_p25->m_nid.encode(data + 2U, P25_DUID_VSELP2);
+ m_p25->m_nid.encode(data + 2U, DUID::VSELP2);
// add busy bits
P25Utils::addBusyBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, false, true);
- writeNetwork(data + 2U, P25_DUID_VSELP2);
+ writeNetwork(data + 2U, DUID::VSELP2);
if (m_p25->m_duplex) {
data[0U] = modem::TAG_DATA;
@@ -1001,7 +1004,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
return true;
}
}
- else if (duid == P25_DUID_TDU || duid == P25_DUID_TDULC) {
+ else if (duid == DUID::TDU || duid == DUID::TDULC) {
if (!m_p25->m_enableControl) {
m_p25->m_affiliations.releaseGrant(m_rfLC.getDstId(), false);
}
@@ -1010,7 +1013,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
m_p25->notifyCC_ReleaseGrant(m_rfLC.getDstId());
}
- if (duid == P25_DUID_TDU) {
+ if (duid == DUID::TDU) {
m_p25->writeRF_TDU(false);
m_lastDUID = duid;
@@ -1077,7 +1080,7 @@ bool Voice::process(uint8_t* data, uint32_t len)
/// Data Unit ID.
/// Network Frame Type.
///
-bool Voice::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, uint8_t& duid, uint8_t& frameType)
+bool Voice::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, defines::DUID::E& duid, defines::FrameType::E& frameType)
{
uint32_t dstId = control.getDstId();
uint32_t srcId = control.getSrcId();
@@ -1099,7 +1102,7 @@ bool Voice::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
// perform authoritative network TG hangtimer and traffic preemption
if (m_p25->m_authoritative) {
// don't process network frames if the destination ID's don't match and the network TG hang timer is running
- if (m_p25->m_netLastDstId != 0U && dstId != 0U && (duid == P25_DUID_LDU1 || duid == P25_DUID_LDU2)) {
+ if (m_p25->m_netLastDstId != 0U && dstId != 0U && (duid == DUID::LDU1 || duid == DUID::LDU2)) {
if (m_p25->m_netLastDstId != dstId && (m_p25->m_netTGHang.isRunning() && !m_p25->m_netTGHang.hasExpired())) {
return false;
}
@@ -1141,50 +1144,50 @@ bool Voice::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
uint32_t count = 0U;
switch (duid) {
- case P25_DUID_LDU1:
- if ((data[0U] == dfsi::P25_DFSI_LDU1_VOICE1) && (data[22U] == dfsi::P25_DFSI_LDU1_VOICE2) &&
- (data[36U] == dfsi::P25_DFSI_LDU1_VOICE3) && (data[53U] == dfsi::P25_DFSI_LDU1_VOICE4) &&
- (data[70U] == dfsi::P25_DFSI_LDU1_VOICE5) && (data[87U] == dfsi::P25_DFSI_LDU1_VOICE6) &&
- (data[104U] == dfsi::P25_DFSI_LDU1_VOICE7) && (data[121U] == dfsi::P25_DFSI_LDU1_VOICE8) &&
- (data[138U] == dfsi::P25_DFSI_LDU1_VOICE9)) {
+ case DUID::LDU1:
+ if ((data[0U] == DFSIFrameType::LDU1_VOICE1) && (data[22U] == DFSIFrameType::LDU1_VOICE2) &&
+ (data[36U] == DFSIFrameType::LDU1_VOICE3) && (data[53U] == DFSIFrameType::LDU1_VOICE4) &&
+ (data[70U] == DFSIFrameType::LDU1_VOICE5) && (data[87U] == DFSIFrameType::LDU1_VOICE6) &&
+ (data[104U] == DFSIFrameType::LDU1_VOICE7) && (data[121U] == DFSIFrameType::LDU1_VOICE8) &&
+ (data[138U] == DFSIFrameType::LDU1_VOICE9)) {
m_dfsiLC = dfsi::LC(control, lsd);
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE1);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE1);
m_dfsiLC.decodeLDU1(data + count, m_netLDU1 + 10U);
- count += dfsi::P25_DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE1_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE2);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE2);
m_dfsiLC.decodeLDU1(data + count, m_netLDU1 + 26U);
- count += dfsi::P25_DFSI_LDU1_VOICE2_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE2_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE3);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE3);
m_dfsiLC.decodeLDU1(data + count, m_netLDU1 + 55U);
- count += dfsi::P25_DFSI_LDU1_VOICE3_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE3_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE4);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE4);
m_dfsiLC.decodeLDU1(data + count, m_netLDU1 + 80U);
- count += dfsi::P25_DFSI_LDU1_VOICE4_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE4_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE5);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE5);
m_dfsiLC.decodeLDU1(data + count, m_netLDU1 + 105U);
- count += dfsi::P25_DFSI_LDU1_VOICE5_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE5_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE6);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE6);
m_dfsiLC.decodeLDU1(data + count, m_netLDU1 + 130U);
- count += dfsi::P25_DFSI_LDU1_VOICE6_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE6_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE7);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE7);
m_dfsiLC.decodeLDU1(data + count, m_netLDU1 + 155U);
- count += dfsi::P25_DFSI_LDU1_VOICE7_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE7_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE8);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE8);
m_dfsiLC.decodeLDU1(data + count, m_netLDU1 + 180U);
- count += dfsi::P25_DFSI_LDU1_VOICE8_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE8_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU1_VOICE9);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU1_VOICE9);
m_dfsiLC.decodeLDU1(data + count, m_netLDU1 + 204U);
- count += dfsi::P25_DFSI_LDU1_VOICE9_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU1_VOICE9_FRAME_LENGTH_BYTES;
// these aren't set by the DFSI decoder, so we'll manually
// reset them
@@ -1224,47 +1227,47 @@ bool Voice::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
}
}
break;
- case P25_DUID_LDU2:
- if ((data[0U] == dfsi::P25_DFSI_LDU2_VOICE10) && (data[22U] == dfsi::P25_DFSI_LDU2_VOICE11) &&
- (data[36U] == dfsi::P25_DFSI_LDU2_VOICE12) && (data[53U] == dfsi::P25_DFSI_LDU2_VOICE13) &&
- (data[70U] == dfsi::P25_DFSI_LDU2_VOICE14) && (data[87U] == dfsi::P25_DFSI_LDU2_VOICE15) &&
- (data[104U] == dfsi::P25_DFSI_LDU2_VOICE16) && (data[121U] == dfsi::P25_DFSI_LDU2_VOICE17) &&
- (data[138U] == dfsi::P25_DFSI_LDU2_VOICE18)) {
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE10);
+ case DUID::LDU2:
+ if ((data[0U] == DFSIFrameType::LDU2_VOICE10) && (data[22U] == DFSIFrameType::LDU2_VOICE11) &&
+ (data[36U] == DFSIFrameType::LDU2_VOICE12) && (data[53U] == DFSIFrameType::LDU2_VOICE13) &&
+ (data[70U] == DFSIFrameType::LDU2_VOICE14) && (data[87U] == DFSIFrameType::LDU2_VOICE15) &&
+ (data[104U] == DFSIFrameType::LDU2_VOICE16) && (data[121U] == DFSIFrameType::LDU2_VOICE17) &&
+ (data[138U] == DFSIFrameType::LDU2_VOICE18)) {
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE10);
m_dfsiLC.decodeLDU2(data + count, m_netLDU2 + 10U);
- count += dfsi::P25_DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE10_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE11);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE11);
m_dfsiLC.decodeLDU2(data + count, m_netLDU2 + 26U);
- count += dfsi::P25_DFSI_LDU2_VOICE11_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE11_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE12);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE12);
m_dfsiLC.decodeLDU2(data + count, m_netLDU2 + 55U);
- count += dfsi::P25_DFSI_LDU2_VOICE12_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE12_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE13);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE13);
m_dfsiLC.decodeLDU2(data + count, m_netLDU2 + 80U);
- count += dfsi::P25_DFSI_LDU2_VOICE13_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE13_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE14);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE14);
m_dfsiLC.decodeLDU2(data + count, m_netLDU2 + 105U);
- count += dfsi::P25_DFSI_LDU2_VOICE14_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE14_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE15);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE15);
m_dfsiLC.decodeLDU2(data + count, m_netLDU2 + 130U);
- count += dfsi::P25_DFSI_LDU2_VOICE15_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE15_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE16);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE16);
m_dfsiLC.decodeLDU2(data + count, m_netLDU2 + 155U);
- count += dfsi::P25_DFSI_LDU2_VOICE16_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE16_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE17);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE17);
m_dfsiLC.decodeLDU2(data + count, m_netLDU2 + 180U);
- count += dfsi::P25_DFSI_LDU2_VOICE17_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE17_FRAME_LENGTH_BYTES;
- m_dfsiLC.setFrameType(dfsi::P25_DFSI_LDU2_VOICE18);
+ m_dfsiLC.setFrameType(DFSIFrameType::LDU2_VOICE18);
m_dfsiLC.decodeLDU2(data + count, m_netLDU2 + 204U);
- count += dfsi::P25_DFSI_LDU2_VOICE18_FRAME_LENGTH_BYTES;
+ count += DFSI_LDU2_VOICE18_FRAME_LENGTH_BYTES;
if (m_p25->m_enableControl) {
lc::LC control = lc::LC(*m_dfsiLC.control());
@@ -1298,12 +1301,12 @@ bool Voice::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
}
}
break;
- case P25_DUID_VSELP1:
- case P25_DUID_VSELP2:
+ case DUID::VSELP1:
+ case DUID::VSELP2:
// currently ignored -- this is a TODO
break;
- case P25_DUID_TDU:
- case P25_DUID_TDULC:
+ case DUID::TDU:
+ case DUID::TDULC:
// ignore a TDU that doesn't contain our destination ID
if (control.getDstId() != m_p25->m_netLastDstId) {
return false;
@@ -1324,12 +1327,15 @@ bool Voice::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
}
if (m_p25->m_netState != RS_NET_IDLE) {
- if (duid == P25_DUID_TDU)
+ if (duid == DUID::TDU)
writeNet_TDU();
resetNet();
}
break;
+
+ default:
+ break;
}
return true;
@@ -1360,13 +1366,13 @@ Voice::Voice(Control* p25, bool debug, bool verbose) :
m_rfLastLDU2(),
m_netLC(),
m_netLastLDU1(),
- m_netLastFrameType(P25_FT_DATA_UNIT),
+ m_netLastFrameType(FrameType::DATA_UNIT),
m_rfLSD(),
m_netLSD(),
m_dfsiLC(),
m_netLDU1(nullptr),
m_netLDU2(nullptr),
- m_lastDUID(P25_DUID_TDU),
+ m_lastDUID(DUID::TDU),
m_lastIMBE(nullptr),
m_lastMI(nullptr),
m_hadVoice(false),
@@ -1383,11 +1389,11 @@ Voice::Voice(Control* p25, bool debug, bool verbose) :
::memset(m_netLDU1, 0x00U, 9U * 25U);
::memset(m_netLDU2, 0x00U, 9U * 25U);
- m_lastIMBE = new uint8_t[11U];
- ::memcpy(m_lastIMBE, P25_NULL_IMBE, 11U);
+ m_lastIMBE = new uint8_t[RAW_IMBE_LENGTH_BYTES];
+ ::memcpy(m_lastIMBE, NULL_IMBE, RAW_IMBE_LENGTH_BYTES);
- m_lastMI = new uint8_t[P25_MI_LENGTH_BYTES];
- ::memset(m_lastMI, 0x00U, P25_MI_LENGTH_BYTES);
+ m_lastMI = new uint8_t[MI_LENGTH_BYTES];
+ ::memset(m_lastMI, 0x00U, MI_LENGTH_BYTES);
}
///
@@ -1407,7 +1413,7 @@ Voice::~Voice()
///
///
///
-void Voice::writeNetwork(const uint8_t *data, uint8_t duid, uint8_t frameType)
+void Voice::writeNetwork(const uint8_t *data, defines::DUID::E duid, defines::FrameType::E frameType)
{
assert(data != nullptr);
@@ -1418,17 +1424,17 @@ void Voice::writeNetwork(const uint8_t *data, uint8_t duid, uint8_t frameType)
return;
switch (duid) {
- case P25_DUID_HDU:
+ case DUID::HDU:
// ignore HDU
break;
- case P25_DUID_LDU1:
+ case DUID::LDU1:
m_p25->m_network->writeP25LDU1(m_rfLC, m_rfLSD, data, frameType);
break;
- case P25_DUID_LDU2:
+ case DUID::LDU2:
m_p25->m_network->writeP25LDU2(m_rfLC, m_rfLSD, data);
break;
- case P25_DUID_TDU:
- case P25_DUID_TDULC:
+ case DUID::TDU:
+ case DUID::TDULC:
m_p25->m_network->writeP25TDU(m_rfLC, m_rfLSD);
break;
default:
@@ -1473,7 +1479,7 @@ void Voice::writeNet_TDU()
Sync::addP25Sync(buffer + 2U);
// Generate NID
- m_p25->m_nid.encode(buffer + 2U, P25_DUID_TDU);
+ m_p25->m_nid.encode(buffer + 2U, DUID::TDU);
// Add busy bits
P25Utils::addBusyBits(buffer + 2U, P25_TDU_FRAME_LENGTH_BITS, true, true);
@@ -1544,7 +1550,7 @@ void Voice::writeNet_LDU1()
uint32_t dstId = control.getDstId();
uint32_t srcId = control.getSrcId();
- bool group = control.getLCO() == LC_GROUP;
+ bool group = control.getLCO() == LCO::GROUP;
// ensure our dstId are sane from the last LDU1
if (m_netLastLDU1.getDstId() != 0U) {
@@ -1597,19 +1603,19 @@ void Voice::writeNet_LDU1()
// if we are idle lets generate HDU data
if (m_p25->m_netState == RS_NET_IDLE) {
- uint8_t mi[P25_MI_LENGTH_BYTES];
- ::memset(mi, 0x00U, P25_MI_LENGTH_BYTES);
+ uint8_t mi[MI_LENGTH_BYTES];
+ ::memset(mi, 0x00U, MI_LENGTH_BYTES);
- if (m_netLastLDU1.getAlgId() != P25_ALGO_UNENCRYPT && m_netLastLDU1.getKId() != 0) {
+ if (m_netLastLDU1.getAlgId() != ALGO_UNENCRYPT && m_netLastLDU1.getKId() != 0) {
control.setAlgId(m_netLastLDU1.getAlgId());
control.setKId(m_netLastLDU1.getKId());
}
// restore MI from member variable
- ::memcpy(mi, m_lastMI, P25_MI_LENGTH_BYTES);
+ ::memcpy(mi, m_lastMI, MI_LENGTH_BYTES);
if (m_verbose && m_debug) {
- Utils::dump(1U, "P25 HDU MI from network to RF", mi, P25_MI_LENGTH_BYTES);
+ Utils::dump(1U, "P25 HDU MI from network to RF", mi, MI_LENGTH_BYTES);
}
m_netLC.setMI(mi);
@@ -1667,7 +1673,7 @@ void Voice::writeNet_LDU1()
m_netLC = lc::LC();
m_netLastLDU1 = lc::LC();
- m_netLastFrameType = P25_FT_DATA_UNIT;
+ m_netLastFrameType = FrameType::DATA_UNIT;
m_p25->m_netState = RS_NET_IDLE;
m_p25->m_netLastDstId = 0U;
@@ -1695,7 +1701,7 @@ void Voice::writeNet_LDU1()
osp = std::make_unique();
// transmit group voice grant update
- osp->setLCO(TSBK_OSP_GRP_VCH_GRANT_UPD);
+ osp->setLCO(TSBKO::OSP_GRP_VCH_GRANT_UPD);
osp->setDstId(dstId);
osp->setGrpVchId(voiceChData.chId());
osp->setGrpVchNo(chNo);
@@ -1706,7 +1712,7 @@ void Voice::writeNet_LDU1()
osp = std::make_unique();
// transmit group voice grant update
- osp->setLCO(TSBK_OSP_UU_VCH_GRANT_UPD);
+ osp->setLCO(TSBKO::OSP_UU_VCH_GRANT_UPD);
osp->setSrcId(srcId);
osp->setDstId(dstId);
osp->setGrpVchId(voiceChData.chId());
@@ -1735,7 +1741,7 @@ void Voice::writeNet_LDU1()
m_roamLDU1Count = 0U;
if (!m_p25->m_disableNetworkHDU) {
- if (m_netLastFrameType != P25_FT_HDU_LATE_ENTRY) {
+ if (m_netLastFrameType != FrameType::HDU_LATE_ENTRY) {
uint8_t buffer[P25_HDU_FRAME_LENGTH_BYTES + 2U];
::memset(buffer, 0x00U, P25_HDU_FRAME_LENGTH_BYTES + 2U);
@@ -1743,7 +1749,7 @@ void Voice::writeNet_LDU1()
Sync::addP25Sync(buffer + 2U);
// Generate NID
- m_p25->m_nid.encode(buffer + 2U, P25_DUID_HDU);
+ m_p25->m_nid.encode(buffer + 2U, DUID::HDU);
// Generate header
m_netLC.encodeHDU(buffer + 2U);
@@ -1796,11 +1802,11 @@ void Voice::writeNet_LDU1()
m_roamLDU1Count = 0U;
m_netLC.setNetId(netId);
m_netLC.setSysId(sysId);
- m_netLC.setLCO(LC_EXPLICIT_SOURCE_ID);
+ m_netLC.setLCO(LCO::EXPLICIT_SOURCE_ID);
}
else {
// flag explicit block to follow in next LDU1
- if (m_netLC.getLCO() == LC_GROUP) {
+ if (m_netLC.getLCO() == LCO::GROUP) {
m_netLC.setExplicitId(true);
}
}
@@ -1817,7 +1823,7 @@ void Voice::writeNet_LDU1()
m_vocLDU1Count++;
if (m_vocLDU1Count > VOC_LDU1_COUNT) {
m_vocLDU1Count = 0U;
- m_netLC.setLCO(LC_RFSS_STS_BCAST);
+ m_netLC.setLCO(LCO::RFSS_STS_BCAST);
}
}
@@ -1830,7 +1836,7 @@ void Voice::writeNet_LDU1()
Sync::addP25Sync(buffer + 2U);
// Generate NID
- m_p25->m_nid.encode(buffer + 2U, P25_DUID_LDU1);
+ m_p25->m_nid.encode(buffer + 2U, DUID::LDU1);
// Generate LDU1 data
m_netLC.encodeLDU1(buffer + 2U);
@@ -1906,11 +1912,11 @@ void Voice::writeNet_LDU2()
return;
}
- uint8_t mi[P25_MI_LENGTH_BYTES];
+ uint8_t mi[MI_LENGTH_BYTES];
control.getMI(mi);
if (m_verbose && m_debug) {
- Utils::dump(1U, "Network LDU2 MI", mi, P25_MI_LENGTH_BYTES);
+ Utils::dump(1U, "Network LDU2 MI", mi, MI_LENGTH_BYTES);
}
m_netLC.setMI(mi);
@@ -1926,7 +1932,7 @@ void Voice::writeNet_LDU2()
Sync::addP25Sync(buffer + 2U);
// Generate NID
- m_p25->m_nid.encode(buffer + 2U, P25_DUID_LDU2);
+ m_p25->m_nid.encode(buffer + 2U, DUID::LDU2);
// Generate LDU2 data
m_netLC.encodeLDU2(buffer + 2U);
@@ -2050,39 +2056,39 @@ void Voice::insertMissingAudio(uint8_t *data)
void Voice::insertNullAudio(uint8_t *data)
{
if (data[0U] == 0x00U) {
- ::memcpy(data + 10U, P25_NULL_IMBE, 11U);
+ ::memcpy(data + 10U, NULL_IMBE, 11U);
}
if (data[25U] == 0x00U) {
- ::memcpy(data + 26U, P25_NULL_IMBE, 11U);
+ ::memcpy(data + 26U, NULL_IMBE, 11U);
}
if (data[50U] == 0x00U) {
- ::memcpy(data + 55U, P25_NULL_IMBE, 11U);
+ ::memcpy(data + 55U, NULL_IMBE, 11U);
}
if (data[75U] == 0x00U) {
- ::memcpy(data + 80U, P25_NULL_IMBE, 11U);
+ ::memcpy(data + 80U, NULL_IMBE, 11U);
}
if (data[100U] == 0x00U) {
- ::memcpy(data + 105U, P25_NULL_IMBE, 11U);
+ ::memcpy(data + 105U, NULL_IMBE, 11U);
}
if (data[125U] == 0x00U) {
- ::memcpy(data + 130U, P25_NULL_IMBE, 11U);
+ ::memcpy(data + 130U, NULL_IMBE, 11U);
}
if (data[150U] == 0x00U) {
- ::memcpy(data + 155U, P25_NULL_IMBE, 11U);
+ ::memcpy(data + 155U, NULL_IMBE, 11U);
}
if (data[175U] == 0x00U) {
- ::memcpy(data + 180U, P25_NULL_IMBE, 11U);
+ ::memcpy(data + 180U, NULL_IMBE, 11U);
}
if (data[200U] == 0x00U) {
- ::memcpy(data + 204U, P25_NULL_IMBE, 11U);
+ ::memcpy(data + 204U, NULL_IMBE, 11U);
}
}
@@ -2093,39 +2099,39 @@ void Voice::insertNullAudio(uint8_t *data)
void Voice::insertEncryptedNullAudio(uint8_t *data)
{
if (data[0U] == 0x00U) {
- ::memcpy(data + 10U, P25_ENCRYPTED_NULL_IMBE, 11U);
+ ::memcpy(data + 10U, ENCRYPTED_NULL_IMBE, 11U);
}
if (data[25U] == 0x00U) {
- ::memcpy(data + 26U, P25_ENCRYPTED_NULL_IMBE, 11U);
+ ::memcpy(data + 26U, ENCRYPTED_NULL_IMBE, 11U);
}
if (data[50U] == 0x00U) {
- ::memcpy(data + 55U, P25_ENCRYPTED_NULL_IMBE, 11U);
+ ::memcpy(data + 55U, ENCRYPTED_NULL_IMBE, 11U);
}
if (data[75U] == 0x00U) {
- ::memcpy(data + 80U, P25_ENCRYPTED_NULL_IMBE, 11U);
+ ::memcpy(data + 80U, ENCRYPTED_NULL_IMBE, 11U);
}
if (data[100U] == 0x00U) {
- ::memcpy(data + 105U, P25_ENCRYPTED_NULL_IMBE, 11U);
+ ::memcpy(data + 105U, ENCRYPTED_NULL_IMBE, 11U);
}
if (data[125U] == 0x00U) {
- ::memcpy(data + 130U, P25_ENCRYPTED_NULL_IMBE, 11U);
+ ::memcpy(data + 130U, ENCRYPTED_NULL_IMBE, 11U);
}
if (data[150U] == 0x00U) {
- ::memcpy(data + 155U, P25_ENCRYPTED_NULL_IMBE, 11U);
+ ::memcpy(data + 155U, ENCRYPTED_NULL_IMBE, 11U);
}
if (data[175U] == 0x00U) {
- ::memcpy(data + 180U, P25_ENCRYPTED_NULL_IMBE, 11U);
+ ::memcpy(data + 180U, ENCRYPTED_NULL_IMBE, 11U);
}
if (data[200U] == 0x00U) {
- ::memcpy(data + 204U, P25_ENCRYPTED_NULL_IMBE, 11U);
+ ::memcpy(data + 204U, ENCRYPTED_NULL_IMBE, 11U);
}
}
diff --git a/src/host/p25/packet/Voice.h b/src/host/p25/packet/Voice.h
index f7537c17..03dc3e98 100644
--- a/src/host/p25/packet/Voice.h
+++ b/src/host/p25/packet/Voice.h
@@ -9,7 +9,7 @@
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2016,2017 Jonathan Naylor, G4KLX
-* Copyright (C) 2017-2022 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2017-2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__P25_PACKET_VOICE_H__)
@@ -51,7 +51,7 @@ namespace p25
/// Process a data frame from the RF interface.
bool process(uint8_t* data, uint32_t len);
/// Process a data frame from the network.
- bool processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, uint8_t& duid, uint8_t& frameType);
+ bool processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, defines::DUID::E& duid, defines::FrameType::E& frameType);
protected:
friend class packet::ControlSignaling;
@@ -74,7 +74,7 @@ namespace p25
lc::LC m_netLC;
lc::LC m_netLastLDU1;
- uint8_t m_netLastFrameType;
+ defines::FrameType::E m_netLastFrameType;
data::LowSpeedData m_rfLSD;
data::LowSpeedData m_netLSD;
@@ -83,7 +83,7 @@ namespace p25
uint8_t* m_netLDU1;
uint8_t* m_netLDU2;
- uint8_t m_lastDUID;
+ defines::DUID::E m_lastDUID;
uint8_t* m_lastIMBE;
uint8_t* m_lastMI;
@@ -104,7 +104,7 @@ namespace p25
~Voice();
/// Write data processed from RF to the network.
- void writeNetwork(const uint8_t* data, uint8_t duid, uint8_t frameType = P25_FT_DATA_UNIT);
+ void writeNetwork(const uint8_t* data, defines::DUID::E duid, defines::FrameType::E frameType = defines::FrameType::DATA_UNIT);
/// Helper to write end of voice frame data.
void writeRF_EndOfVoice();
diff --git a/src/host/setup/HostSetup.cpp b/src/host/setup/HostSetup.cpp
index 976f97cb..a9c6b9a3 100644
--- a/src/host/setup/HostSetup.cpp
+++ b/src/host/setup/HostSetup.cpp
@@ -10,7 +10,7 @@
*
* Copyright (C) 2015,2016,2017 Jonathan Naylor, G4KLX
* Copyright (C) 2017,2018 Andy Uribe, CA6JAU
-* Copyright (C) 2021-2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2021-2024 Bryan Biedenkapp, N2PLL
*
*/
#include "common/dmr/DMRDefines.h"
@@ -331,7 +331,7 @@ bool HostSetup::portModemHandler(Modem* modem, uint32_t ms, RESP_TYPE_DVM rspTyp
m_queue.peek(&dataLen, 1U);
if (!m_queue.isEmpty() && m_modem->m_p25Space >= dataLen) {
- uint8_t data[p25::P25_LDU_FRAME_LENGTH_BYTES + 2U];
+ uint8_t data[p25::defines::P25_LDU_FRAME_LENGTH_BYTES + 2U];
dataLen = 0U;
m_queue.get(&dataLen, 1U);
@@ -508,10 +508,10 @@ bool HostSetup::portModemHandler(Modem* modem, uint32_t ms, RESP_TYPE_DVM rspTyp
bool dacOverflow = (buffer[5U] & 0x20U) == 0x20U;
// spaces from the modem are returned in "logical" frame count, not raw byte size
- m_modem->m_dmrSpace1 = buffer[7U] * (dmr::DMR_FRAME_LENGTH_BYTES + 2U);
- m_modem->m_dmrSpace2 = buffer[8U] * (dmr::DMR_FRAME_LENGTH_BYTES + 2U);
- m_modem->m_p25Space = buffer[10U] * (p25::P25_LDU_FRAME_LENGTH_BYTES);
- m_modem->m_nxdnSpace = buffer[11U] * (nxdn::NXDN_FRAME_LENGTH_BYTES);
+ m_modem->m_dmrSpace1 = buffer[7U] * (dmr::defines::DMR_FRAME_LENGTH_BYTES + 2U);
+ m_modem->m_dmrSpace2 = buffer[8U] * (dmr::defines::DMR_FRAME_LENGTH_BYTES + 2U);
+ m_modem->m_p25Space = buffer[10U] * (p25::defines::P25_PDU_FRAME_LENGTH_BYTES);
+ m_modem->m_nxdnSpace = buffer[11U] * (nxdn::defines::NXDN_FRAME_LENGTH_BYTES);
if (m_hasFetchedStatus && m_requestedStatus) {
LogMessage(LOG_CAL, "Diagnostic Values [Modem State: %u, Transmitting: %d, ADC Overflow: %d, Rx Overflow: %d, Tx Overflow: %d, DAC Overflow: %d, HS: %u]",
@@ -1111,6 +1111,7 @@ void HostSetup::processDMR1KBER(const uint8_t* buffer, uint8_t seq)
/// Buffer containing P25 data
void HostSetup::processP25BER(const uint8_t* buffer)
{
+ using namespace p25::defines;
using namespace p25;
uint8_t sync[P25_SYNC_LENGTH_BYTES];
@@ -1125,14 +1126,14 @@ void HostSetup::processP25BER(const uint8_t* buffer)
uint8_t nid[P25_NID_LENGTH_BYTES];
P25Utils::decode(buffer, nid, 48U, 114U);
- uint8_t duid = nid[1U] & 0x0FU;
+ DUID::E duid = (DUID::E)(nid[1U] & 0x0FU);
uint32_t errs = 0U;
uint8_t imbe[18U];
lc::LC lc = lc::LC();
data::DataHeader dataHeader = data::DataHeader();
- if (duid == P25_DUID_HDU) {
+ if (duid == DUID::HDU) {
timerStart();
bool ret = lc.decodeHDU(buffer);
@@ -1150,7 +1151,7 @@ void HostSetup::processP25BER(const uint8_t* buffer)
m_berUndecodableLC = 0U;
m_berUncorrectable = 0U;
}
- else if (duid == P25_DUID_TDU) {
+ else if (duid == DUID::TDU) {
if (m_berFrames != 0U) {
LogMessage(LOG_CAL, P25_TDU_STR ", total frames: %d, bits: %d, uncorrectable frames: %d, undecodable LC: %d, errors: %d, BER: %.4f%%", m_berFrames, m_berBits, m_berUncorrectable, m_berUndecodableLC, m_berErrs, float(m_berErrs * 100U) / float(m_berBits));
}
@@ -1168,7 +1169,7 @@ void HostSetup::processP25BER(const uint8_t* buffer)
m_berUncorrectable = 0U;
return;
}
- else if (duid == P25_DUID_LDU1) {
+ else if (duid == DUID::LDU1) {
timerStart();
bool ret = lc.decodeLDU1(buffer);
@@ -1223,7 +1224,7 @@ void HostSetup::processP25BER(const uint8_t* buffer)
m_berErrs += errs;
m_berFrames++;
}
- else if (duid == P25_DUID_LDU2) {
+ else if (duid == DUID::LDU2) {
timerStart();
bool ret = lc.decodeLDU2(buffer);
@@ -1278,7 +1279,7 @@ void HostSetup::processP25BER(const uint8_t* buffer)
m_berErrs += errs;
m_berFrames++;
}
- else if (duid == P25_DUID_PDU) {
+ else if (duid == DUID::PDU) {
timerStop();
// note: for the calibrator we will only process the PDU header -- and not the PDU data
@@ -1308,7 +1309,7 @@ void HostSetup::processP25BER(const uint8_t* buffer)
delete[] rfPDU;
}
- else if (duid == P25_DUID_TSDU) {
+ else if (duid == DUID::TSDU) {
timerStop();
std::unique_ptr tsbk = lc::tsbk::TSBKFactory::createTSBK(buffer);
@@ -1332,16 +1333,17 @@ void HostSetup::processP25BER(const uint8_t* buffer)
/// Buffer containing P25 data
void HostSetup::processP251KBER(const uint8_t* buffer)
{
+ using namespace p25::defines;
using namespace p25;
uint8_t nid[P25_NID_LENGTH_BYTES];
P25Utils::decode(buffer, nid, 48U, 114U);
- uint8_t duid = nid[1U] & 0x0FU;
+ DUID::E duid = (DUID::E)(nid[1U] & 0x0FU);
uint32_t errs = 0U;
lc::LC lc = lc::LC();
- if (duid == P25_DUID_HDU) {
+ if (duid == DUID::HDU) {
timerStart();
bool ret = lc.decodeHDU(buffer);
@@ -1359,7 +1361,7 @@ void HostSetup::processP251KBER(const uint8_t* buffer)
m_berUndecodableLC = 0U;
m_berUncorrectable = 0U;
}
- else if (duid == P25_DUID_TDU) {
+ else if (duid == DUID::TDU) {
if (m_berFrames != 0U) {
LogMessage(LOG_CAL, P25_TDU_STR ", total frames: %d, bits: %d, uncorrectable frames: %d, undecodable LC: %d, errors: %d, BER: %.4f%%", m_berFrames, m_berBits, m_berUncorrectable, m_berUndecodableLC, m_berErrs, float(m_berErrs * 100U) / float(m_berBits));
}
@@ -1377,7 +1379,7 @@ void HostSetup::processP251KBER(const uint8_t* buffer)
m_berUncorrectable = 0U;
return;
}
- else if (duid == P25_DUID_LDU1) {
+ else if (duid == DUID::LDU1) {
timerStart();
bool ret = lc.decodeLDU1(buffer);
@@ -1408,7 +1410,7 @@ void HostSetup::processP251KBER(const uint8_t* buffer)
m_berErrs += errs;
m_berFrames++;
}
- else if (duid == P25_DUID_LDU2) {
+ else if (duid == DUID::LDU2) {
timerStart();
bool ret = lc.decodeLDU2(buffer);
@@ -1447,6 +1449,7 @@ void HostSetup::processP251KBER(const uint8_t* buffer)
/// Buffer containing NXDN data
void HostSetup::processNXDNBER(const uint8_t* buffer)
{
+ using namespace nxdn::defines;
using namespace nxdn;
uint8_t data[NXDN_FRAME_LENGTH_BYTES];
@@ -1457,10 +1460,10 @@ void HostSetup::processNXDNBER(const uint8_t* buffer)
bool valid = lich.decode(data);
if (valid) {
- uint8_t usc = lich.getFCT();
- uint8_t opt = lich.getOption();
+ FuncChannelType::E usc = lich.getFCT();
+ ChOption::E opt = lich.getOption();
- if (usc == NXDN_LICH_USC_SACCH_NS) {
+ if (usc == FuncChannelType::USC_SACCH_NS) {
if (m_berFrames == 0U) {
LogMessage(LOG_CAL, "NXDN VCALL (Voice Call), BER Start");
@@ -1482,7 +1485,7 @@ void HostSetup::processNXDNBER(const uint8_t* buffer)
m_berFrames = 0U;
return;
}
- } else if (opt == NXDN_LICH_STEAL_NONE) {
+ } else if (opt == ChOption::STEAL_NONE) {
timerStart();
uint32_t errors = 0U;
diff --git a/src/host/setup/SetupApplication.h b/src/host/setup/SetupApplication.h
index 3939a298..86b10fe9 100644
--- a/src/host/setup/SetupApplication.h
+++ b/src/host/setup/SetupApplication.h
@@ -7,7 +7,7 @@
* @package DVM / Modem Host Software
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__SETUP_APPLICATION_H__)
@@ -45,25 +45,26 @@ protected:
///
void processExternalUserEvent() override
{
+ using namespace p25::defines;
if (m_setup->m_isConnected) {
- if (m_setup->m_p25TduTest && m_setup->m_queue.hasSpace(p25::P25_TDU_FRAME_LENGTH_BYTES + 2U)) {
- uint8_t data[p25::P25_TDU_FRAME_LENGTH_BYTES + 2U];
- ::memset(data + 2U, 0x00U, p25::P25_TDU_FRAME_LENGTH_BYTES);
+ if (m_setup->m_p25TduTest && m_setup->m_queue.hasSpace(P25_TDU_FRAME_LENGTH_BYTES + 2U)) {
+ uint8_t data[P25_TDU_FRAME_LENGTH_BYTES + 2U];
+ ::memset(data + 2U, 0x00U, P25_TDU_FRAME_LENGTH_BYTES);
// Generate Sync
p25::Sync::addP25Sync(data + 2U);
// Generate NID
std::unique_ptr nid = std::make_unique(1U);
- nid->encode(data + 2U, p25::P25_DUID_TDU);
+ nid->encode(data + 2U, DUID::TDU);
// Add busy bits
- p25::P25Utils::addBusyBits(data + 2U, p25::P25_TDU_FRAME_LENGTH_BITS, true, true);
+ p25::P25Utils::addBusyBits(data + 2U, P25_TDU_FRAME_LENGTH_BITS, true, true);
data[0U] = modem::TAG_EOT;
data[1U] = 0x00U;
- m_setup->addFrame(data, p25::P25_TDU_FRAME_LENGTH_BYTES + 2U, p25::P25_LDU_FRAME_LENGTH_BYTES);
+ m_setup->addFrame(data, P25_TDU_FRAME_LENGTH_BYTES + 2U, P25_LDU_FRAME_LENGTH_BYTES);
}
// ------------------------------------------------------
diff --git a/src/host/setup/SiteParamSetWnd.h b/src/host/setup/SiteParamSetWnd.h
index a6d16009..3d20b6c6 100644
--- a/src/host/setup/SiteParamSetWnd.h
+++ b/src/host/setup/SiteParamSetWnd.h
@@ -7,7 +7,7 @@
* @package DVM / Modem Host Software
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
-* Copyright (C) 2023 Bryan Biedenkapp, N2PLL
+* Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__SITE_PARAM_SET_WND_H__)
@@ -180,7 +180,7 @@ private:
m_dmrNetId.setInputFilter("[[:xdigit:]]");
m_dmrNetId.addCallback("changed", [&]() {
uint32_t id = (uint32_t)::strtoul(std::string(m_dmrNetId.getText().toString()).c_str(), NULL, 16);
- id = dmr::DMRUtils::netId(id, dmr::SITE_MODEL_TINY);
+ id = dmr::DMRUtils::netId(id, dmr::defines::SiteModel::TINY);
m_setup->m_conf["system"]["config"]["dmrNetId"] = __INT_HEX_STR(id);
});