implement support for TIA-102.AABF-D LC_EXPLICIT_SOURCE_ID;

pull/39/head
Bryan Biedenkapp 3 years ago
parent 2a3c827cab
commit 3cce6e0b68

@ -66,6 +66,9 @@ LC::LC() :
m_srcId(0U), m_srcId(0U),
m_dstId(0U), m_dstId(0U),
m_grpVchNo(0U), m_grpVchNo(0U),
m_explicitId(false),
m_netId(P25_WACN_STD_DEFAULT),
m_sysId(P25_SID_STD_DEFAULT),
m_emergency(false), m_emergency(false),
m_encrypted(false), m_encrypted(false),
m_priority(4U), m_priority(4U),
@ -512,6 +515,11 @@ void LC::copy(const LC& data)
m_grpVchNo = data.m_grpVchNo; m_grpVchNo = data.m_grpVchNo;
m_explicitId = data.m_explicitId;
m_netId = data.m_netId;
m_sysId = data.m_sysId;
m_emergency = data.m_emergency; m_emergency = data.m_emergency;
m_encrypted = data.m_encrypted; m_encrypted = data.m_encrypted;
m_priority = data.m_priority; m_priority = data.m_priority;
@ -601,6 +609,7 @@ bool LC::decodeLC(const uint8_t* rs)
m_encrypted = (rs[2U] & 0x40U) == 0x40U; // Encryption Flag m_encrypted = (rs[2U] & 0x40U) == 0x40U; // Encryption Flag
} }
m_priority = (rs[2U] & 0x07U); // Priority m_priority = (rs[2U] & 0x07U); // Priority
m_explicitId = (rs[3U] & 0x01U) == 0x01U; // Explicit Source ID Flag
m_dstId = (uint32_t)((rsValue >> 24) & 0xFFFFU); // Talkgroup Address m_dstId = (uint32_t)((rsValue >> 24) & 0xFFFFU); // Talkgroup Address
m_srcId = (uint32_t)(rsValue & 0xFFFFFFU); // Source Radio Address m_srcId = (uint32_t)(rsValue & 0xFFFFFFU); // Source Radio Address
break; break;
@ -626,6 +635,11 @@ bool LC::decodeLC(const uint8_t* rs)
m_srcId = (uint32_t)(rsValue & 0xFFFFFFU); // Source/Target Address m_srcId = (uint32_t)(rsValue & 0xFFFFFFU); // Source/Target Address
} }
break; break;
case LC_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
break;
default: default:
LogError(LOG_P25, "LC::decodeLC(), unknown LC value, mfId = $%02X, lco = $%02X", m_mfId, m_lco); LogError(LOG_P25, "LC::decodeLC(), unknown LC value, mfId = $%02X, lco = $%02X", m_mfId, m_lco);
return false; return false;
@ -686,6 +700,11 @@ void LC::encodeLC(uint8_t* rs)
rsValue = (rsValue << 16) + m_callTimer; // Call Timer rsValue = (rsValue << 16) + m_callTimer; // Call Timer
rsValue = (rsValue << 24) + m_srcId; // Source/Target Radio Address rsValue = (rsValue << 24) + m_srcId; // Source/Target Radio Address
break; break;
case LC_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 LC_RFSS_STS_BCAST:
rs[0U] |= 0x40U; // Implicit Operation rs[0U] |= 0x40U; // Implicit Operation
rsValue = m_siteData.lra(); // Location Registration Area rsValue = m_siteData.lra(); // Location Registration Area

@ -111,6 +111,14 @@ namespace p25
/// <summary>Voice channel number.</summary> /// <summary>Voice channel number.</summary>
__PROPERTY(uint32_t, grpVchNo, GrpVchNo); __PROPERTY(uint32_t, grpVchNo, GrpVchNo);
/// <summary>Flag indicating explicit addressing.</summary>
__PROPERTY(bool, explicitId, ExplicitId);
/// <summary>Network ID.</summary>
__PROPERTY(uint32_t, netId, NetId);
/// <summary>System ID.</summary>
__PROPERTY(uint32_t, sysId, SysId);
/** Service Options */ /** Service Options */
/// <summary>Flag indicating the emergency bits are set.</summary> /// <summary>Flag indicating the emergency bits are set.</summary>
__PROPERTY(bool, emergency, Emergency); __PROPERTY(bool, emergency, Emergency);

Loading…
Cancel
Save

Powered by TurnKey Linux.