diff --git a/reflector/CodecStream.cpp b/reflector/CodecStream.cpp index c53e851..27643ba 100644 --- a/reflector/CodecStream.cpp +++ b/reflector/CodecStream.cpp @@ -129,23 +129,6 @@ void CCodecStream::Task(void) STCPacket pack; if (g_TCServer.Receive(m_CSModule, &pack, 8)) { - // update statistics - auto rt = pack.rt_timer.time(); // the round-trip time - if (0 == m_RTCount) - { - m_RTMin = rt; - m_RTMax = rt; - } - else - { - if (rt < m_RTMin) - m_RTMin = rt; - else if (rt > m_RTMax) - m_RTMax = rt; - } - m_RTSum += rt; - m_RTCount++; - if ( m_LocalQueue.IsEmpty() ) { std::cout << "Unexpected transcoded packet received from transcoder: Module='" << pack.module << "' StreamID=" << std::hex << std::showbase << ntohs(pack.streamid) << std::endl; @@ -158,6 +141,23 @@ void CCodecStream::Task(void) // make sure this is the correct packet if ((pack.streamid == Packet->GetCodecPacket()->streamid) && (pack.sequence == Packet->GetCodecPacket()->sequence)) { + // update statistics + auto rt =Packet->m_rtTimer.time(); // the round-trip time + if (0 == m_RTCount) + { + m_RTMin = rt; + m_RTMax = rt; + } + else + { + if (rt < m_RTMin) + m_RTMin = rt; + else if (rt > m_RTMax) + m_RTMax = rt; + } + m_RTSum += rt; + m_RTCount++; + // update content with transcoded data Packet->SetCodecData(&pack); // mark the DStar sync frames if the source isn't dstar @@ -207,6 +207,7 @@ void CCodecStream::Task(void) return; } + Frame->m_rtTimer.start(); // start the round-trip timer if (g_TCServer.Send(Frame->GetCodecPacket())) { // ditto, we'll try to fix this on the next pass @@ -214,6 +215,7 @@ void CCodecStream::Task(void) } // the fd was good and then the send was successful, so... // push the frame to our local queue where it can wait for the transcoder + m_LocalQueue.Push(std::move(m_Queue.Pop())); } } diff --git a/reflector/DVFramePacket.cpp b/reflector/DVFramePacket.cpp index 0dfc2b1..d00c00c 100644 --- a/reflector/DVFramePacket.cpp +++ b/reflector/DVFramePacket.cpp @@ -23,14 +23,14 @@ // default constructor CDvFramePacket::CDvFramePacket() { - memset(m_TCPack.dstar, 0, 9); - memset(m_uiDvData, 0, 3); - memset(m_TCPack.dmr, 0, 9); - memset(m_uiDvSync, 0, 7); - memset(m_TCPack.m17, 0, 16); - memset(m_TCPack.p25, 0, 11); - memset(m_TCPack.usrp, 0, 320); - memset(m_Nonce, 0, 14); + memset(m_TCPack.dstar, 0, sizeof(m_TCPack.dstar)); + memset(m_uiDvData, 0, sizeof(m_uiDvData)); + memset(m_TCPack.dmr, 0, sizeof(m_TCPack.dmr)); + memset(m_uiDvSync, 0, sizeof(m_uiDvSync)); + memset(m_TCPack.m17, 0, sizeof(m_TCPack.m17)); + memset(m_TCPack.p25, 0, sizeof(m_TCPack.p25)); + memset(m_TCPack.usrp, 0, sizeof(m_TCPack.usrp)); + memset(m_Nonce, 0, sizeof(m_Nonce)); m_TCPack.codec_in = ECodecType::none; }; @@ -38,14 +38,14 @@ CDvFramePacket::CDvFramePacket() CDvFramePacket::CDvFramePacket(const SDStarFrame *dvframe, uint16_t sid, uint8_t pid) : CPacket(sid, pid) { - memcpy(m_TCPack.dstar, dvframe->AMBE, 9); - memcpy(m_uiDvData, dvframe->DVDATA, 3); - memset(m_TCPack.dmr, 0, 9); - memset(m_uiDvSync, 0, 7); - memset(m_TCPack.m17, 0, 16); - memset(m_TCPack.p25, 0, 11); - memset(m_TCPack.usrp, 0, 320); - memset(m_Nonce, 0, 14); + memcpy(m_TCPack.dstar, dvframe->AMBE, sizeof(m_TCPack.dstar)); + memcpy(m_uiDvData, dvframe->DVDATA, sizeof(m_uiDvData)); + memset(m_TCPack.dmr, 0, sizeof(m_TCPack.dmr)); + memset(m_uiDvSync, 0, sizeof(m_uiDvSync)); + memset(m_TCPack.m17, 0, sizeof(m_TCPack.m17)); + memset(m_TCPack.p25, 0, sizeof(m_TCPack.p25)); + memset(m_TCPack.usrp, 0, sizeof(m_TCPack.usrp)); + memset(m_Nonce, 0, sizeof(m_Nonce)); m_TCPack.codec_in = ECodecType::dstar; } @@ -53,14 +53,14 @@ CDvFramePacket::CDvFramePacket(const SDStarFrame *dvframe, uint16_t sid, uint8_t CDvFramePacket::CDvFramePacket(const uint8_t *ambe, const uint8_t *sync, uint16_t sid, uint8_t pid, uint8_t spid, bool islast) : CPacket(sid, pid, spid, islast) { - memcpy(m_TCPack.dmr, ambe, 9); - memcpy(m_uiDvSync, sync, 7); - memset(m_TCPack.dstar, 0, 9); - memset(m_uiDvData, 0, 3); - memset(m_TCPack.m17, 0, 16); - memset(m_TCPack.p25, 0, 11); - memset(m_TCPack.usrp, 0, 320); - memset(m_Nonce, 0, 14); + memcpy(m_TCPack.dmr, ambe, sizeof(m_TCPack.dmr)); + memcpy(m_uiDvSync, sync, sizeof(m_uiDvSync)); + memset(m_TCPack.dstar, 0, sizeof(m_TCPack.dstar)); + memset(m_uiDvData, 0, sizeof(m_uiDvData)); + memset(m_TCPack.m17, 0, sizeof(m_TCPack.m17)); + memset(m_TCPack.p25, 0, sizeof(m_TCPack.p25)); + memset(m_TCPack.usrp, 0, sizeof(m_TCPack.usrp)); + memset(m_Nonce, 0, sizeof(m_Nonce)); m_TCPack.codec_in = ECodecType::dmr; } @@ -68,14 +68,14 @@ CDvFramePacket::CDvFramePacket(const uint8_t *ambe, const uint8_t *sync, uint16_ CDvFramePacket::CDvFramePacket(const uint8_t *ambe, uint16_t sid, uint8_t pid, uint8_t spid, uint8_t fid, CCallsign cs, bool islast) : CPacket(sid, pid, spid, fid, islast) { - memcpy(m_TCPack.dmr, ambe, 9); - memset(m_uiDvSync, 0, 7); - memset(m_TCPack.dstar, 0, 9); - memset(m_uiDvData, 0, 3); - memset(m_TCPack.m17, 0, 16); - memset(m_TCPack.p25, 0, 11); - memset(m_TCPack.usrp, 0, 320); - memset(m_Nonce, 0, 14); + memcpy(m_TCPack.dmr, ambe, sizeof(m_TCPack.dmr)); + memset(m_uiDvSync, 0, sizeof(m_uiDvSync)); + memset(m_TCPack.dstar, 0, sizeof(m_TCPack.dstar)); + memset(m_uiDvData, 0, sizeof(m_uiDvData)); + memset(m_TCPack.m17, 0, sizeof(m_TCPack.m17)); + memset(m_TCPack.p25, 0, sizeof(m_TCPack.p25)); + memset(m_TCPack.usrp, 0, sizeof(m_TCPack.usrp)); + memset(m_Nonce, 0, sizeof(m_Nonce)); m_TCPack.codec_in = ECodecType::dmr; uint8_t c[12]; cs.GetCallsign(c); @@ -87,10 +87,10 @@ CDvFramePacket::CDvFramePacket (uint16_t sid, uint8_t dstarpid, const uint8_t *dstarambe, const uint8_t *dstardvdata, uint8_t dmrpid, uint8_t dprspid, const uint8_t *dmrambe, const uint8_t *dmrsync, ECodecType codecInType, bool islast) : CPacket(sid, dstarpid, dmrpid, dprspid, 0xFF, 0xFF, 0xFF, codecInType, islast) { - ::memcpy(m_TCPack.dstar, dstarambe, 9); - ::memcpy(m_uiDvData, dstardvdata, 3); - ::memcpy(m_TCPack.dmr, dmrambe, 9); - ::memcpy(m_uiDvSync, dmrsync, 7); + memcpy(m_TCPack.dstar, dstarambe, sizeof(m_TCPack.dstar)); + memcpy(m_TCPack.dmr, dmrambe, sizeof(m_TCPack.dmr)); + memcpy(m_uiDvData, dstardvdata, sizeof(m_uiDvData)); + memcpy(m_uiDvSync, dmrsync, sizeof(m_uiDvSync)); m_TCPack.codec_in = codecInType; } @@ -98,14 +98,14 @@ CDvFramePacket::CDvFramePacket CDvFramePacket::CDvFramePacket(const CM17Packet &m17) : CPacket(m17) { - memset(m_TCPack.dstar, 0, 9); - memset(m_uiDvData, 0, 3); - memset(m_TCPack.dmr, 0, 9); - memset(m_uiDvSync, 0, 7); - memcpy(m_TCPack.m17, m17.GetPayload(), 16); - memcpy(m_Nonce, m17.GetNonce(), 14); - memset(m_TCPack.p25, 0, 11); - memset(m_TCPack.usrp, 0, 320); + memset(m_TCPack.dstar, 0, sizeof(m_TCPack.dstar)); + memset(m_TCPack.dmr, 0, sizeof(m_TCPack.dmr)); + memset(m_TCPack.p25, 0, sizeof(m_TCPack.p25)); + memset(m_TCPack.usrp, 0, sizeof(m_TCPack.usrp)); + memset(m_uiDvData, 0, sizeof(m_uiDvData)); + memset(m_uiDvSync, 0, sizeof(m_uiDvSync)); + memcpy(m_TCPack.m17, m17.GetPayload(), sizeof(m_TCPack.m17)); + memcpy(m_Nonce, m17.GetNonce(), sizeof(m_Nonce)); switch (0x6U & m17.GetFrameType()) { case 0x4U: @@ -124,14 +124,14 @@ CDvFramePacket::CDvFramePacket(const CM17Packet &m17) : CPacket(m17) CDvFramePacket::CDvFramePacket(const uint8_t *imbe, uint16_t streamid, bool islast) : CPacket(streamid, false, islast) { - memcpy(m_TCPack.p25, imbe, 11); - memset(m_TCPack.dmr, 0, 9); - memset(m_uiDvSync, 0, 7); - memset(m_TCPack.dstar, 0, 9); - memset(m_uiDvData, 0, 3); - memset(m_TCPack.m17, 0, 16); - memset(m_TCPack.usrp, 0, 320); - memset(m_Nonce, 0, 14); + memcpy(m_TCPack.p25, imbe, sizeof(m_TCPack.p25)); + memset(m_TCPack.dmr, 0, sizeof(m_TCPack.dmr)); + memset(m_TCPack.dstar, 0, sizeof(m_TCPack.dstar)); + memset(m_TCPack.m17, 0, sizeof(m_TCPack.m17)); + memset(m_TCPack.usrp, 0, sizeof(m_TCPack.usrp)); + memset(m_uiDvSync, 0, sizeof(m_uiDvSync)); + memset(m_uiDvData, 0, sizeof(m_uiDvData)); + memset(m_Nonce, 0, sizeof(m_Nonce)); m_TCPack.codec_in = ECodecType::p25; } @@ -139,14 +139,14 @@ CDvFramePacket::CDvFramePacket(const uint8_t *imbe, uint16_t streamid, bool isla CDvFramePacket::CDvFramePacket(const uint8_t *ambe, uint16_t sid, uint8_t pid, bool islast) : CPacket(sid, pid, islast) { - memcpy(m_TCPack.dmr, ambe, 9); - memset(m_uiDvSync, 0, 7); - memset(m_TCPack.dstar, 0, 9); - memset(m_uiDvData, 0, 3); - memset(m_TCPack.m17, 0, 16); - memset(m_TCPack.p25, 0, 11); - memset(m_TCPack.usrp, 0, 320); - memset(m_Nonce, 0, 14); + memcpy(m_TCPack.dmr, ambe, sizeof(m_TCPack.dmr)); + memset(m_TCPack.dstar, 0, sizeof(m_TCPack.dstar)); + memset(m_TCPack.m17, 0, sizeof(m_TCPack.m17)); + memset(m_TCPack.p25, 0, sizeof(m_TCPack.p25)); + memset(m_TCPack.usrp, 0, sizeof(m_TCPack.usrp)); + memset(m_uiDvSync, 0, sizeof(m_uiDvSync)); + memset(m_uiDvData, 0, sizeof(m_uiDvData)); + memset(m_Nonce, 0, sizeof(m_Nonce)); m_TCPack.codec_in = ECodecType::dmr; } @@ -157,13 +157,13 @@ CDvFramePacket::CDvFramePacket(const int16_t *usrp, uint16_t streamid, bool isla for(int i = 0; i < 160; ++i){ m_TCPack.usrp[i] = usrp[i]; } - memset(m_TCPack.p25, 0, 11); - memset(m_TCPack.dmr, 0, 9); - memset(m_uiDvSync, 0, 7); - memset(m_TCPack.dstar, 0, 9); - memset(m_uiDvData, 0, 3); - memset(m_TCPack.m17, 0, 16); - memset(m_Nonce, 0, 14); + memset(m_TCPack.dstar, 0, sizeof(m_TCPack.dstar)); + memset(m_TCPack.dmr, 0, sizeof(m_TCPack.dmr)); + memset(m_TCPack.m17, 0, sizeof(m_TCPack.m17)); + memset(m_TCPack.p25, 0, sizeof(m_TCPack.p25)); + memset(m_uiDvSync, 0, sizeof(m_uiDvSync)); + memset(m_uiDvData, 0, sizeof(m_uiDvData)); + memset(m_Nonce, 0, sizeof(m_Nonce)); m_TCPack.codec_in = ECodecType::usrp; } @@ -172,12 +172,6 @@ std::unique_ptr CDvFramePacket::Copy(void) return std::unique_ptr(new CDvFramePacket(*this)); } -// Network -unsigned int CDvFramePacket::GetNetworkSize() -{ - return CPacket::GetNetworkSize() + 4 + 3 + 7 + 14 + 9 + 9 + 16 + 11 + 320; -} - CDvFramePacket::CDvFramePacket(const CBuffer &buf) : CPacket(buf) { if (buf.size() >= GetNetworkSize()) @@ -188,14 +182,14 @@ CDvFramePacket::CDvFramePacket(const CBuffer &buf) : CPacket(buf) for (unsigned int i=0; i<4; i++) seq = 0x100u * seq + data[off+i]; off += 4; - memcpy(m_uiDvData, data+off, 3); off += 3; - memcpy(m_uiDvSync, data+off, 7); off += 7; - memcpy(m_Nonce, data+off, 14); off += 14; - memcpy(m_TCPack.dstar, data+off, 9); off += 9; - memcpy(m_TCPack.dmr, data+off, 9); off += 9; - memcpy(m_TCPack.m17, data+off, 16); off += 16; - memcpy(m_TCPack.p25, data+off, 11); off += 11; - memcpy(m_TCPack.usrp, data+off, 320); + memcpy(m_uiDvData, data+off, sizeof(m_uiDvData)); off += sizeof(m_uiDvData); + memcpy(m_uiDvSync, data+off, sizeof(m_uiDvSync)); off += sizeof(m_uiDvSync); + memcpy(m_Nonce, data+off, sizeof(m_Nonce)); off += sizeof(m_Nonce); + memcpy(m_TCPack.dstar, data+off, sizeof(m_TCPack.dstar)); off += sizeof(m_TCPack.dstar); + memcpy(m_TCPack.dmr, data+off, sizeof(m_TCPack.dmr)); off += sizeof (m_TCPack.dmr); + memcpy(m_TCPack.m17, data+off, sizeof(m_TCPack.m17)); off += sizeof(m_TCPack.m17); + memcpy(m_TCPack.p25, data+off, sizeof(m_TCPack.p25)); off += sizeof(m_TCPack.p25); + memcpy(m_TCPack.usrp, data+off, sizeof(m_TCPack.usrp)); SetTCParams(seq); } else @@ -212,14 +206,14 @@ void CDvFramePacket::EncodeInterlinkPacket(CBuffer &buf) const data[off++] = (m_TCPack.sequence >> 16) & 0xffu; data[off++] = (m_TCPack.sequence >> 8) & 0xffu; data[off++] = m_TCPack.sequence & 0xffu; - memcpy(data+off, m_uiDvData, 3); off += 3; - memcpy(data+off, m_uiDvSync, 7); off += 7; - memcpy(data+off, m_Nonce, 14); off += 14; - memcpy(data+off, m_TCPack.dstar, 9); off += 9; - memcpy(data+off, m_TCPack.dmr, 9); off += 9; - memcpy(data+off, m_TCPack.m17, 16); off += 16; - memcpy(data+off, m_TCPack.p25, 11); off += 11; - memcpy(data+off, m_TCPack.usrp, 320); + memcpy(data+off, m_uiDvData, sizeof(m_uiDvData)); off += sizeof(m_uiDvData); + memcpy(data+off, m_uiDvSync, sizeof(m_uiDvSync)); off += sizeof(m_uiDvSync); + memcpy(data+off, m_Nonce, sizeof(m_Nonce)); off += sizeof(m_Nonce); + memcpy(data+off, m_TCPack.dstar, sizeof(m_TCPack.dstar)); off += sizeof(m_TCPack.dstar); + memcpy(data+off, m_TCPack.dmr, sizeof(m_TCPack.dmr)); off += sizeof(m_TCPack.dmr); + memcpy(data+off, m_TCPack.m17, sizeof(m_TCPack.m17)); off += sizeof(m_TCPack.m17); + memcpy(data+off, m_TCPack.p25, sizeof(m_TCPack.p25)); off += sizeof(m_TCPack.p25); + memcpy(data+off, m_TCPack.usrp, sizeof(m_TCPack.usrp)); } //////////////////////////////////////////////////////////////////////////////////////// @@ -250,7 +244,7 @@ const uint8_t *CDvFramePacket::GetCodecData(ECodecType type) const void CDvFramePacket::SetDvData(const uint8_t *DvData) { - memcpy(m_uiDvData, DvData, 3); + memcpy(m_uiDvData, DvData, sizeof(m_uiDvData)); } void CDvFramePacket::SetCodecData(const STCPacket *pack) @@ -264,5 +258,4 @@ void CDvFramePacket::SetTCParams(uint32_t seq) m_TCPack.streamid = m_uiStreamId; m_TCPack.is_last = m_bLastPacket; m_TCPack.module = m_cModule; - m_TCPack.rt_timer.start(); } diff --git a/reflector/DVFramePacket.h b/reflector/DVFramePacket.h index d4c964a..33248cd 100644 --- a/reflector/DVFramePacket.h +++ b/reflector/DVFramePacket.h @@ -20,6 +20,7 @@ #include "Packet.h" #include "Callsign.h" +#include "Timer.h" //////////////////////////////////////////////////////////////////////////////////////// // defines @@ -59,7 +60,12 @@ public: CDvFramePacket(const int16_t *usrp, uint16_t streamid, bool islast); // URF Network CDvFramePacket(const CBuffer &buf); - static unsigned int GetNetworkSize(); + + static constexpr unsigned GetNetworkSize() noexcept + { + return CPacket::GetNetworkSize() + sizeof(m_uiDvData) + sizeof(m_uiDvSync) + sizeof(m_Nonce) + sizeof(m_TCPack.dstar) + sizeof (m_TCPack.dmr) + sizeof(m_TCPack.m17) + sizeof(m_TCPack.p25) + sizeof(m_TCPack.usrp) + sizeof(m_TCPack.sequence); + } + void EncodeInterlinkPacket(CBuffer &buf) const; // identity @@ -80,6 +86,9 @@ public: void SetCodecData(const STCPacket *pack); void SetTCParams(uint32_t seq); + // the round-trip timer + CTimer m_rtTimer; + protected: // data (dstar) uint8_t m_uiDvData[3]; diff --git a/reflector/Packet.cpp b/reflector/Packet.cpp index 2700369..50bba1f 100644 --- a/reflector/Packet.cpp +++ b/reflector/Packet.cpp @@ -38,11 +38,6 @@ CPacket::CPacket() }; // for the network -unsigned int CPacket::GetNetworkSize() -{ - return 20u; -} - CPacket::CPacket(const CBuffer &buf) { if (buf.size() > 19) @@ -53,7 +48,7 @@ CPacket::CPacket(const CBuffer &buf) m_bLastPacket = data[6] ? true : false; m_cModule = data[7]; m_uiStreamId = data[8]*0x100u + data[9]; - m_uiM17FrameNumber = data[10]*0x1000000u + data[11]*0x10000u + data[12]*0x100 + data[13]; + m_uiM17FrameNumber = data[10]*0x1000000u + data[11]*0x10000u + data[12]*0x100u + data[13]; m_uiDstarPacketId = data[14]; m_uiDmrPacketId = data[15]; m_uiDmrPacketSubid = data[16]; @@ -93,17 +88,17 @@ CPacket::CPacket(uint16_t sid, uint8_t dstarpid) { m_uiStreamId = sid; m_uiDstarPacketId = dstarpid; - m_uiDmrPacketId = 0xFF; - m_uiDmrPacketSubid = 0xFF; - m_uiYsfPacketId = 0xFF; - m_uiYsfPacketSubId = 0xFF; - m_uiYsfPacketFrameId = 0xFF; - m_uiNXDNPacketId = 0xFF; - m_uiM17FrameNumber = 0xFFFFFFFFU; + m_uiDmrPacketId = 0xffu; + m_uiDmrPacketSubid = 0xffu; + m_uiYsfPacketId = 0xffu; + m_uiYsfPacketSubId = 0xffu; + m_uiYsfPacketFrameId = 0xffu; + m_uiNXDNPacketId = 0xffu; + m_uiM17FrameNumber = 0xffffffffu; m_cModule = ' '; m_eOrigin = EOrigin::local; m_eCodecIn = ECodecType::dstar; - m_bLastPacket = (0x40U == (dstarpid & 0x40U)); + m_bLastPacket = (0x40u == (dstarpid & 0x40u)); }; // dmr constructor @@ -112,12 +107,12 @@ CPacket::CPacket(uint16_t sid, uint8_t dmrpid, uint8_t dmrspid, bool lastpacket) m_uiStreamId = sid; m_uiDmrPacketId = dmrpid; m_uiDmrPacketSubid = dmrspid; - m_uiDstarPacketId = 0xFF; - m_uiYsfPacketId = 0xFF; - m_uiYsfPacketSubId = 0xFF; - m_uiYsfPacketFrameId = 0xFF; - m_uiNXDNPacketId = 0xFF; - m_uiM17FrameNumber = 0xFFFFFFFFU; + m_uiDstarPacketId = 0xffu; + m_uiYsfPacketId = 0xffu; + m_uiYsfPacketSubId = 0xffu; + m_uiYsfPacketFrameId = 0xffu; + m_uiNXDNPacketId = 0xffu; + m_uiM17FrameNumber = 0xffffffffu; m_cModule = ' '; m_eOrigin = EOrigin::local; m_eCodecIn = ECodecType::dmr; @@ -131,11 +126,11 @@ CPacket::CPacket(uint16_t sid, uint8_t ysfpid, uint8_t ysfsubpid, uint8_t ysffri m_uiYsfPacketId = ysfpid; m_uiYsfPacketSubId = ysfsubpid; m_uiYsfPacketFrameId = ysffrid; - m_uiDstarPacketId = 0xFF; - m_uiDmrPacketId = 0xFF; - m_uiDmrPacketSubid = 0xFF; - m_uiNXDNPacketId = 0xFF; - m_uiM17FrameNumber = 0xFFFFFFFFU; + m_uiDstarPacketId = 0xffu; + m_uiDmrPacketId = 0xffu; + m_uiDmrPacketSubid = 0xffu; + m_uiNXDNPacketId = 0xffu; + m_uiM17FrameNumber = 0xffffffffu; m_cModule = ' '; m_eOrigin = EOrigin::local; m_eCodecIn = ECodecType::dmr; @@ -147,13 +142,13 @@ CPacket::CPacket(uint16_t sid, uint8_t pid, bool lastpacket) { m_uiStreamId = sid; m_uiNXDNPacketId = pid; - m_uiDmrPacketId = 0xFF; - m_uiDmrPacketSubid = 0xFF; - m_uiDstarPacketId = 0xFF; - m_uiYsfPacketId = 0xFF; - m_uiYsfPacketSubId = 0xFF; - m_uiYsfPacketFrameId = 0xFF; - m_uiM17FrameNumber = 0xFFFFFFFFU; + m_uiDmrPacketId = 0xffu; + m_uiDmrPacketSubid = 0xffu; + m_uiDstarPacketId = 0xffu; + m_uiYsfPacketId = 0xffu; + m_uiYsfPacketSubId = 0xffu; + m_uiYsfPacketFrameId = 0xffu; + m_uiM17FrameNumber = 0xffffffffu; m_cModule = ' '; m_eOrigin = EOrigin::local; m_eCodecIn = ECodecType::dmr; @@ -164,14 +159,14 @@ CPacket::CPacket(uint16_t sid, uint8_t pid, bool lastpacket) CPacket::CPacket(uint16_t sid, bool isusrp, bool lastpacket) { m_uiStreamId = sid; - m_uiDstarPacketId = 0xFF; - m_uiDmrPacketId = 0xFF; - m_uiDmrPacketSubid = 0xFF; - m_uiYsfPacketId = 0xFF; - m_uiYsfPacketSubId = 0xFF; - m_uiYsfPacketFrameId = 0xFF; - m_uiNXDNPacketId = 0xFF; - m_uiM17FrameNumber = 0xFFFFFFFFU; + m_uiDstarPacketId = 0xffu; + m_uiDmrPacketId = 0xffu; + m_uiDmrPacketSubid = 0xffu; + m_uiYsfPacketId = 0xffu; + m_uiYsfPacketSubId = 0xffu; + m_uiYsfPacketFrameId = 0xffu; + m_uiNXDNPacketId = 0xffu; + m_uiM17FrameNumber = 0xffffffffu; m_cModule = ' '; m_eOrigin = EOrigin::local; isusrp ? m_eCodecIn = ECodecType::usrp : ECodecType::p25; @@ -188,8 +183,8 @@ CPacket::CPacket(uint16_t sid, uint8_t dstarpid, uint8_t dmrpid, uint8_t dmrsubp m_uiYsfPacketId = ysfpid; m_uiYsfPacketSubId = ysfsubpid; m_uiYsfPacketFrameId = ysffrid; - m_uiM17FrameNumber = 0xFFFFFFFFU; - m_uiNXDNPacketId = 0xFF; + m_uiM17FrameNumber = 0xffffffffu; + m_uiNXDNPacketId = 0xffu; m_cModule = ' '; m_eOrigin = EOrigin::local; m_eCodecIn = codecIn; @@ -200,15 +195,15 @@ CPacket::CPacket(uint16_t sid, uint8_t dstarpid, uint8_t dmrpid, uint8_t dmrsubp CPacket::CPacket(const CM17Packet &m17) : CPacket() { m_uiStreamId = m17.GetStreamId(); - m_uiDstarPacketId = 0xFF; - m_uiDmrPacketId = 0xFF; - m_uiDmrPacketSubid = 0xFF; - m_uiYsfPacketId = 0xFF; - m_uiYsfPacketSubId = 0xFF; - m_uiYsfPacketFrameId = 0xFF; - m_uiNXDNPacketId = 0xFF; - m_eCodecIn = (0x6U == (0x6U & m17.GetFrameType())) ? ECodecType::c2_1600 : ECodecType::c2_3200; - m_uiM17FrameNumber = 0xFFFFU & m17.GetFrameNumber(); + m_uiDstarPacketId = 0xffu; + m_uiDmrPacketId = 0xffu; + m_uiDmrPacketSubid = 0xffu; + m_uiYsfPacketId = 0xffu; + m_uiYsfPacketSubId = 0xffu; + m_uiYsfPacketFrameId = 0xffu; + m_uiNXDNPacketId = 0xffu; + m_eCodecIn = (0x6u == (0x6u & m17.GetFrameType())) ? ECodecType::c2_1600 : ECodecType::c2_3200; + m_uiM17FrameNumber = 0xffffu & m17.GetFrameNumber(); m_bLastPacket = m17.IsLastPacket(); } @@ -223,31 +218,31 @@ void CPacket::UpdatePids(const uint32_t pid) // derived from each other // dstar pid needs update ? - if ( m_uiDstarPacketId == 0xFF ) + if ( m_uiDstarPacketId == 0xffu ) { - m_uiDstarPacketId = (pid % 21); + m_uiDstarPacketId = (pid % 21u); } // dmr pids need update ? - if ( m_uiDmrPacketId == 0xFF ) + if ( m_uiDmrPacketId == 0xffu ) { - m_uiDmrPacketId = ((pid / 3) % 6); - m_uiDmrPacketSubid = ((pid % 3) + 1); + m_uiDmrPacketId = ((pid / 3u) % 6u); + m_uiDmrPacketSubid = ((pid % 3u) + 1u); } // ysf pids need update ? - if ( m_uiYsfPacketId == 0xFF ) + if ( m_uiYsfPacketId == 0xffu ) { - m_uiYsfPacketId = ((pid / 5) % 8); - m_uiYsfPacketSubId = pid % 5; - m_uiYsfPacketFrameId = ((pid / 5) & 0x7FU) << 1; + m_uiYsfPacketId = ((pid / 5u) % 8u); + m_uiYsfPacketSubId = pid % 5u; + m_uiYsfPacketFrameId = ((pid / 5u) & 0x7fu) << 1; } - if ( m_uiNXDNPacketId == 0xFF ) + if ( m_uiNXDNPacketId == 0xffu ) { - m_uiNXDNPacketId = pid % 4; + m_uiNXDNPacketId = pid % 4u; } // m17 needs update? - if (m_uiM17FrameNumber == 0xFFFFFFFFU) + if (m_uiM17FrameNumber == 0xffffffffu) { // frames are every 20 milliseconds, so the m17 data will come every 40 milliseconds - m_uiM17FrameNumber = (pid / 2) % 0x8000U; + m_uiM17FrameNumber = (pid / 2) % 0x8000u; } } diff --git a/reflector/Packet.h b/reflector/Packet.h index 0ee7012..1082522 100644 --- a/reflector/Packet.h +++ b/reflector/Packet.h @@ -72,7 +72,10 @@ public: protected: // network void EncodeInterlinkPacket(const char *magic, CBuffer &Buffer) const; - static unsigned int GetNetworkSize(); + static constexpr unsigned GetNetworkSize() noexcept + { + return 4u + sizeof(ECodecType) + sizeof(EOrigin) + sizeof(bool) + sizeof(char) + sizeof(uint16_t) + sizeof(uint32_t) + 7u * sizeof(uint8_t); + } // data // if you change something here, you'll need to update the CBuffer ctor and EncodeInterlinkPacket()!!! diff --git a/reflector/TCPacketDef.h b/reflector/TCPacketDef.h index 203da46..a3681b7 100644 --- a/reflector/TCPacketDef.h +++ b/reflector/TCPacketDef.h @@ -17,12 +17,9 @@ #include -#include "Timer.h" - enum class ECodecType : std::uint8_t { none = 0, dstar = 1, dmr = 2, c2_1600 = 3, c2_3200 = 4, p25 = 5, usrp = 6 }; using STCPacket = struct tcpacket_tag { - CTimer rt_timer; uint32_t sequence; char module; bool is_last;