|
|
|
@ -66,6 +66,7 @@ LC::LC() :
|
|
|
|
m_rs(),
|
|
|
|
m_rs(),
|
|
|
|
m_encryptOverride(false),
|
|
|
|
m_encryptOverride(false),
|
|
|
|
m_tsbkVendorSkip(false),
|
|
|
|
m_tsbkVendorSkip(false),
|
|
|
|
|
|
|
|
m_demandUseRawLC(false),
|
|
|
|
m_callTimer(0U),
|
|
|
|
m_callTimer(0U),
|
|
|
|
m_mi(nullptr)
|
|
|
|
m_mi(nullptr)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
@ -507,6 +508,7 @@ void LC::copy(const LC& data)
|
|
|
|
m_callTimer = data.m_callTimer;
|
|
|
|
m_callTimer = data.m_callTimer;
|
|
|
|
|
|
|
|
|
|
|
|
m_rsValue = data.m_rsValue;
|
|
|
|
m_rsValue = data.m_rsValue;
|
|
|
|
|
|
|
|
m_demandUseRawLC = data.m_demandUseRawLC;
|
|
|
|
|
|
|
|
|
|
|
|
m_algId = data.m_algId;
|
|
|
|
m_algId = data.m_algId;
|
|
|
|
if (m_algId != ALGO_UNENCRYPT) {
|
|
|
|
if (m_algId != ALGO_UNENCRYPT) {
|
|
|
|
@ -541,6 +543,8 @@ void LC::copy(const LC& data)
|
|
|
|
|
|
|
|
|
|
|
|
bool LC::decodeLC(const uint8_t* rs)
|
|
|
|
bool LC::decodeLC(const uint8_t* rs)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
m_demandUseRawLC = false;
|
|
|
|
|
|
|
|
|
|
|
|
ulong64_t rsValue = 0U;
|
|
|
|
ulong64_t rsValue = 0U;
|
|
|
|
|
|
|
|
|
|
|
|
// combine bytes into ulong64_t (8 byte) value
|
|
|
|
// combine bytes into ulong64_t (8 byte) value
|
|
|
|
@ -563,6 +567,7 @@ bool LC::decodeLC(const uint8_t* rs)
|
|
|
|
// as the packed RS value)
|
|
|
|
// as the packed RS value)
|
|
|
|
if ((m_mfId != MFG_STANDARD) && (m_mfId != MFG_STANDARD_ALT)) {
|
|
|
|
if ((m_mfId != MFG_STANDARD) && (m_mfId != MFG_STANDARD_ALT)) {
|
|
|
|
//Utils::dump(1U, "Decoded P25 Non-Standard RS", rs, P25_LDU_LC_FEC_LENGTH_BYTES);
|
|
|
|
//Utils::dump(1U, "Decoded P25 Non-Standard RS", rs, P25_LDU_LC_FEC_LENGTH_BYTES);
|
|
|
|
|
|
|
|
m_demandUseRawLC = true;
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -580,6 +585,9 @@ bool LC::decodeLC(const uint8_t* rs)
|
|
|
|
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;
|
|
|
|
|
|
|
|
case LCO::GROUP_UPDT:
|
|
|
|
|
|
|
|
m_demandUseRawLC = true;
|
|
|
|
|
|
|
|
break;
|
|
|
|
case LCO::PRIVATE:
|
|
|
|
case LCO::PRIVATE:
|
|
|
|
m_mfId = rs[1U]; // Mfg Id.
|
|
|
|
m_mfId = rs[1U]; // Mfg Id.
|
|
|
|
m_group = false;
|
|
|
|
m_group = false;
|
|
|
|
@ -607,6 +615,9 @@ bool LC::decodeLC(const uint8_t* rs)
|
|
|
|
m_sysId = (uint32_t)((rsValue >> 24) & 0xFFFU); // System ID
|
|
|
|
m_sysId = (uint32_t)((rsValue >> 24) & 0xFFFU); // System ID
|
|
|
|
m_srcId = (uint32_t)(rsValue & 0xFFFFFFU); // Source Radio Address
|
|
|
|
m_srcId = (uint32_t)(rsValue & 0xFFFFFFU); // Source Radio Address
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case LCO::RFSS_STS_BCAST:
|
|
|
|
|
|
|
|
m_demandUseRawLC = true;
|
|
|
|
|
|
|
|
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;
|
|
|
|
|