removed CTimer from STCPacket

pull/3/head
Tom Early 2 years ago
parent d4ad8a2e9c
commit 38e3882441

@ -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()));
}
}

@ -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];

@ -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;
}
}

@ -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;

Loading…
Cancel
Save

Powered by TurnKey Linux.