mirror of
https://github.com/nostar/urfd.git
synced 2026-11-08 04:19:39 +00:00
removed CTimer from STCPacket
This commit is contained in:
1 parent
d4ad8a2e9c
commit
38e3882441
6 files changed
+176
-177
No files matched your search
+19
-17
@@ -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()));
|
||||
}
|
||||
}
|
||||
|
||||
+84
-91
@@ -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<CPacket> CDvFramePacket::Copy(void)
|
||||
return std::unique_ptr<CPacket>(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();
|
||||
}
|
||||
@@ -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];
|
||||
|
||||
+59
-64
@@ -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;
|
||||
}
|
||||
}
|
||||
+4
-1
@@ -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()!!!
|
||||
|
||||
@@ -17,12 +17,9 @@
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
#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;
|
||||
|
||||
Reference in new issue
Block a user