diff --git a/DMRSlot.cpp b/DMRSlot.cpp index ece7bd2..bd11a6e 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; -ACTIVITY_TYPE CDMRSlot::m_activity1 = ACTIVITY_NONE; +unsigned char CDMRSlot::m_activity1 = ACTIVITY_NONE; FLCO CDMRSlot::m_flco2; unsigned char CDMRSlot::m_id2 = 0U; -ACTIVITY_TYPE CDMRSlot::m_activity2 = ACTIVITY_NONE; +unsigned char 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_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) { @@ -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, ACTIVITY_TYPE type) +void CDMRSlot::setShortLC(unsigned int slotNo, unsigned int id, FLCO flco, unsigned char type) { assert(m_modem != NULL); @@ -1795,35 +1795,21 @@ void CDMRSlot::setShortLC(unsigned int slotNo, unsigned int id, FLCO flco, ACTIV lc[3U] = 0x00U; 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; + unsigned char activity = m_activity1; + if (m_flco1 == FLCO_USER_USER) + activity |= 0x01U; + + lc[2U] = m_id1; + lc[1U] |= (activity << 0); } 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) - 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; + unsigned char activity = m_activity2; + if (m_flco2 == FLCO_USER_USER) + activity |= 0x01U; + + lc[3U] = m_id2; + lc[1U] |= (activity << 4); } lc[4U] = CCRC::crc8(lc, 4U); diff --git a/DMRSlot.h b/DMRSlot.h index ff92ea9..ff59b40 100644 --- a/DMRSlot.h +++ b/DMRSlot.h @@ -36,12 +36,11 @@ #include -enum ACTIVITY_TYPE { - ACTIVITY_NONE, - ACTIVITY_VOICE, - ACTIVITY_DATA, - ACTIVITY_CSBK -}; +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; class CDMRSlot { public: @@ -125,10 +124,10 @@ private: static FLCO m_flco1; static unsigned char m_id1; - static ACTIVITY_TYPE m_activity1; + static unsigned char m_activity1; static FLCO m_flco2; static unsigned char m_id2; - static ACTIVITY_TYPE m_activity2; + static unsigned char m_activity2; void writeQueueRF(const unsigned char* data); void writeQueueNet(const unsigned char* data); @@ -145,7 +144,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, ACTIVITY_TYPE type = ACTIVITY_NONE); + static void setShortLC(unsigned int slotNo, unsigned int id, FLCO flco = FLCO_GROUP, unsigned char type = ACTIVITY_NONE); }; #endif