diff --git a/DMRSlot.cpp b/DMRSlot.cpp index ece7bd2..ba80409 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -472,7 +472,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) // If data preamble, signal its existence if (m_netState == RS_NET_IDLE && csbko == CSBKO_PRECCSBK && csbk.getDataContent()) { - setShortLC(m_slotNo, dstId, gi ? FLCO_GROUP : FLCO_USER_USER, ACTIVITY_CSBK); + setShortLC(m_slotNo, dstId, gi ? FLCO_GROUP : FLCO_USER_USER, ACTIVITY_DATA); m_display->writeDMR(m_slotNo, src, gi, dst, "R"); m_display->writeDMRRSSI(m_slotNo, m_rssi); } @@ -1533,7 +1533,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) // If data preamble, signal its existence if (csbko == CSBKO_PRECCSBK && csbk.getDataContent()) { - setShortLC(m_slotNo, dstId, gi ? FLCO_GROUP : FLCO_USER_USER, ACTIVITY_CSBK); + setShortLC(m_slotNo, dstId, gi ? FLCO_GROUP : FLCO_USER_USER, ACTIVITY_DATA); m_display->writeDMR(m_slotNo, src, gi, dst, "N"); } } else if (dataType == DT_RATE_12_DATA || dataType == DT_RATE_34_DATA || dataType == DT_RATE_1_DATA) { @@ -1797,36 +1797,44 @@ void CDMRSlot::setShortLC(unsigned int slotNo, unsigned int id, FLCO flco, ACTIV if (m_id1 != 0U) { lc[2U] = m_id1; if (m_activity1 == ACTIVITY_VOICE && m_flco1 == FLCO_GROUP) - lc[1U] |= 0x80U; - else if (m_activity1 == ACTIVITY_VOICE && m_flco1 == FLCO_USER_USER) - lc[1U] |= 0x90U; - else if (m_activity1 == ACTIVITY_DATA && m_flco1 == FLCO_GROUP) - lc[1U] |= 0xB0U; - else if (m_activity1 == ACTIVITY_DATA && m_flco1 == FLCO_USER_USER) - lc[1U] |= 0xA0U; - else if (m_activity1 == ACTIVITY_CSBK && m_flco1 == FLCO_GROUP) - lc[1U] |= 0x20U; - else if (m_activity1 == ACTIVITY_CSBK && m_flco1 == FLCO_USER_USER) - lc[1U] |= 0x30U; - } - - if (m_id2 != 0U) { - lc[3U] = m_id2; - if (m_activity2 == ACTIVITY_VOICE && m_flco2 == FLCO_GROUP) lc[1U] |= 0x08U; - else if (m_activity2 == ACTIVITY_VOICE && m_flco2 == FLCO_USER_USER) + else if (m_activity1 == ACTIVITY_VOICE && m_flco1 == FLCO_USER_USER) lc[1U] |= 0x09U; - else if (m_activity2 == ACTIVITY_DATA && m_flco2 == FLCO_GROUP) + else if (m_activity1 == ACTIVITY_DATA && m_flco1 == FLCO_GROUP) lc[1U] |= 0x0BU; - else if (m_activity2 == ACTIVITY_DATA && m_flco2 == FLCO_USER_USER) + else if (m_activity1 == ACTIVITY_DATA && m_flco1 == FLCO_USER_USER) lc[1U] |= 0x0AU; - else if (m_activity2 == ACTIVITY_CSBK && m_flco2 == FLCO_GROUP) + else if (m_activity1 == ACTIVITY_CSBK && m_flco1 == FLCO_GROUP) lc[1U] |= 0x02U; - else if (m_activity2 == ACTIVITY_CSBK && m_flco2 == FLCO_USER_USER) + else if (m_activity1 == ACTIVITY_CSBK && m_flco1 == FLCO_USER_USER) lc[1U] |= 0x03U; + else if (m_activity1 == ACTIVITY_EMERG && m_flco1 == FLCO_GROUP) + lc[1U] |= 0x0CU; + else if (m_activity1 == ACTIVITY_EMERG && m_flco1 == FLCO_USER_USER) + lc[1U] |= 0x0DU; } - lc[4U] = CCRC::crc8(lc, 4U); + if (m_id2 != 0U) { + lc[3U] = m_id2; + if (m_activity2 == ACTIVITY_VOICE && m_flco2 == FLCO_GROUP) + lc[1U] |= 0x80U; + else if (m_activity2 == ACTIVITY_VOICE && m_flco2 == FLCO_USER_USER) + lc[1U] |= 0x90U; + else if (m_activity2 == ACTIVITY_DATA && m_flco2 == FLCO_GROUP) + lc[1U] |= 0xB0U; + else if (m_activity2 == ACTIVITY_DATA && m_flco2 == FLCO_USER_USER) + lc[1U] |= 0xA0U; + else if (m_activity2 == ACTIVITY_CSBK && m_flco2 == FLCO_GROUP) + lc[1U] |= 0x20U; + else if (m_activity2 == ACTIVITY_CSBK && m_flco2 == FLCO_USER_USER) + lc[1U] |= 0x30U; + else if (m_activity2 == ACTIVITY_EMERG && m_flco2 == FLCO_GROUP) + lc[1U] |= 0xC0U; + else if (m_activity2 == ACTIVITY_EMERG && m_flco2 == FLCO_USER_USER) + lc[1U] |= 0xD0U; + } + + lc[4U] = CCRC::crc8(lc, 4U); unsigned char sLC[9U]; diff --git a/DMRSlot.h b/DMRSlot.h index ff92ea9..910943b 100644 --- a/DMRSlot.h +++ b/DMRSlot.h @@ -40,7 +40,8 @@ enum ACTIVITY_TYPE { ACTIVITY_NONE, ACTIVITY_VOICE, ACTIVITY_DATA, - ACTIVITY_CSBK + ACTIVITY_CSBK, + ACTIVITY_EMERG }; class CDMRSlot {