diff --git a/DMRSlot.cpp b/DMRSlot.cpp index bd11a6e..ece7bd2 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -51,10 +51,10 @@ unsigned char* CDMRSlot::m_idle = NULL; FLCO CDMRSlot::m_flco1; unsigned char CDMRSlot::m_id1 = 0U; -unsigned char CDMRSlot::m_activity1 = ACTIVITY_NONE; +ACTIVITY_TYPE CDMRSlot::m_activity1 = ACTIVITY_NONE; FLCO CDMRSlot::m_flco2; unsigned char CDMRSlot::m_id2 = 0U; -unsigned char CDMRSlot::m_activity2 = ACTIVITY_NONE; +ACTIVITY_TYPE CDMRSlot::m_activity2 = ACTIVITY_NONE; const unsigned char TALKER_ID_NONE = 0x00U; const unsigned char TALKER_ID_HEADER = 0x01U; @@ -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_DATA); + setShortLC(m_slotNo, dstId, gi ? FLCO_GROUP : FLCO_USER_USER, ACTIVITY_CSBK); 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_DATA); + setShortLC(m_slotNo, dstId, gi ? FLCO_GROUP : FLCO_USER_USER, ACTIVITY_CSBK); 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) { @@ -1750,7 +1750,7 @@ void CDMRSlot::init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData } -void CDMRSlot::setShortLC(unsigned int slotNo, unsigned int id, FLCO flco, unsigned char type) +void CDMRSlot::setShortLC(unsigned int slotNo, unsigned int id, FLCO flco, ACTIVITY_TYPE type) { assert(m_modem != NULL); @@ -1795,21 +1795,35 @@ void CDMRSlot::setShortLC(unsigned int slotNo, unsigned int id, FLCO flco, unsig lc[3U] = 0x00U; if (m_id1 != 0U) { - unsigned char activity = m_activity1; - if (m_flco1 == FLCO_USER_USER) - activity |= 0x01U; - - lc[2U] = m_id1; - lc[1U] |= (activity << 0); + 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) { - unsigned char activity = m_activity2; - if (m_flco2 == FLCO_USER_USER) - activity |= 0x01U; - - lc[3U] = m_id2; - lc[1U] |= (activity << 4); + 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) + lc[1U] |= 0x09U; + else if (m_activity2 == ACTIVITY_DATA && m_flco2 == FLCO_GROUP) + lc[1U] |= 0x0BU; + else if (m_activity2 == ACTIVITY_DATA && m_flco2 == FLCO_USER_USER) + lc[1U] |= 0x0AU; + else if (m_activity2 == ACTIVITY_CSBK && m_flco2 == FLCO_GROUP) + lc[1U] |= 0x02U; + else if (m_activity2 == ACTIVITY_CSBK && m_flco2 == FLCO_USER_USER) + lc[1U] |= 0x03U; } lc[4U] = CCRC::crc8(lc, 4U); diff --git a/DMRSlot.h b/DMRSlot.h index ff59b40..ff92ea9 100644 --- a/DMRSlot.h +++ b/DMRSlot.h @@ -36,11 +36,12 @@ #include -const unsigned char ACTIVITY_NONE = 0x00U; -const unsigned char ACTIVITY_CSBK = 0x02U; -const unsigned char ACTIVITY_VOICE = 0x08U; -const unsigned char ACTIVITY_DATA = 0x0AU; -const unsigned char ACTIVITY_EMERG = 0x0CU; +enum ACTIVITY_TYPE { + ACTIVITY_NONE, + ACTIVITY_VOICE, + ACTIVITY_DATA, + ACTIVITY_CSBK +}; class CDMRSlot { public: @@ -124,10 +125,10 @@ private: static FLCO m_flco1; static unsigned char m_id1; - static unsigned char m_activity1; + static ACTIVITY_TYPE m_activity1; static FLCO m_flco2; static unsigned char m_id2; - static unsigned char m_activity2; + static ACTIVITY_TYPE m_activity2; void writeQueueRF(const unsigned char* data); void writeQueueNet(const unsigned char* data); @@ -144,7 +145,7 @@ private: bool insertSilence(const unsigned char* data, unsigned char seqNo); void insertSilence(unsigned int count); - static void setShortLC(unsigned int slotNo, unsigned int id, FLCO flco = FLCO_GROUP, unsigned char type = ACTIVITY_NONE); + static void setShortLC(unsigned int slotNo, unsigned int id, FLCO flco = FLCO_GROUP, ACTIVITY_TYPE type = ACTIVITY_NONE); }; #endif