From 2407b207984a4d9ce4696b3ef0b84a319bb002ab Mon Sep 17 00:00:00 2001 From: Tom Early Date: Wed, 17 Nov 2021 05:44:32 -0700 Subject: [PATCH] minor fixes and some better .h files --- reflector/CodecStream.cpp | 7 +++++++ reflector/DVFramePacket.cpp | 2 +- reflector/DVFramePacket.h | 14 +++++++++----- reflector/DVLastFramePacket.cpp | 17 ++++------------- reflector/DVLastFramePacket.h | 20 +++++++++++++------- reflector/Packet.cpp | 5 +++-- reflector/Packet.h | 2 +- 7 files changed, 38 insertions(+), 29 deletions(-) diff --git a/reflector/CodecStream.cpp b/reflector/CodecStream.cpp index ce47687..301ad12 100644 --- a/reflector/CodecStream.cpp +++ b/reflector/CodecStream.cpp @@ -136,6 +136,13 @@ void CCodecStream::Task(void) // todo: check the PID // update content with transcoded data Frame->SetCodecData(&pack); + // mark the DStar sync frames if the source isn't dstar + if (ECodecType::dstar!=Frame->GetCodecIn() && 0==Frame->GetPacketId()%21) + { + const uint8_t DStarSync[] = { 0x55,0x2D,0x16 }; + Frame->SetDvData(DStarSync); + } + // and push it back to client m_PacketStream->Lock(); m_PacketStream->push(Packet); diff --git a/reflector/DVFramePacket.cpp b/reflector/DVFramePacket.cpp index 53a985d..a1a90d6 100644 --- a/reflector/DVFramePacket.cpp +++ b/reflector/DVFramePacket.cpp @@ -145,7 +145,7 @@ const uint8_t *CDvFramePacket::GetCodecData(ECodecType type) const //////////////////////////////////////////////////////////////////////////////////////// // set -void CDvFramePacket::SetDvData(uint8_t *DvData) +void CDvFramePacket::SetDvData(const uint8_t *DvData) { memcpy(m_uiDvData, DvData, 3); } diff --git a/reflector/DVFramePacket.h b/reflector/DVFramePacket.h index 2d13045..8efcc84 100644 --- a/reflector/DVFramePacket.h +++ b/reflector/DVFramePacket.h @@ -40,10 +40,14 @@ class CDvFramePacket : public CPacket public: // constructor CDvFramePacket(); - CDvFramePacket(const SDStarFrame *, uint16_t, uint8_t); - CDvFramePacket(const uint8_t *, const uint8_t *, uint16_t, uint8_t, uint8_t); - CDvFramePacket(const uint8_t *, uint16_t, uint8_t, uint8_t, uint8_t); - CDvFramePacket(uint16_t, uint8_t, const uint8_t *, const uint8_t *, uint8_t, uint8_t, const uint8_t *, const uint8_t *, ECodecType, const uint8_t *, const uint8_t *); + // DStar frame + CDvFramePacket(const SDStarFrame *dstarframe, uint16_t streamid, uint8_t counter); + // DMR Frame + CDvFramePacket(const uint8_t *ambe, const uint8_t *sync, uint16_t streamid, uint8_t counter1, uint8_t counter2); + // YSF Frame + CDvFramePacket(const uint8_t *ambe, uint16_t streamid, uint8_t counter1, uint8_t counter2, uint8_t counter3); + // URF Frame + CDvFramePacket(uint16_t streamid, uint8_t dstarcounter, const uint8_t *dstarambe, const uint8_t *dvdata, uint8_t dmrcounter1, uint8_t dmrcounter2, const uint8_t *dmrambe, const uint8_t *dmrsync, ECodecType type, const uint8_t *m17codec, const uint8_t *nonce); CDvFramePacket(const CM17Packet &m17); // virtual duplication @@ -61,7 +65,7 @@ public: const uint8_t *GetNonce(void) const { return m_Nonce; } // set - void SetDvData(uint8_t *); + void SetDvData(const uint8_t *); void SetCodecData(ECodecType, const uint8_t *); void SetCodecData(const STCPacket *pack); diff --git a/reflector/DVLastFramePacket.cpp b/reflector/DVLastFramePacket.cpp index c9f5edf..2bbfbd6 100644 --- a/reflector/DVLastFramePacket.cpp +++ b/reflector/DVLastFramePacket.cpp @@ -19,59 +19,50 @@ #include "Main.h" #include "DVLastFramePacket.h" - -//////////////////////////////////////////////////////////////////////////////////////// // constructor - CDvLastFramePacket::CDvLastFramePacket() { } // dstar constructor - -CDvLastFramePacket::CDvLastFramePacket(const SDstarFrame *DvFrame, uint16_t sid, uint8_t pid) +CDvLastFramePacket::CDvLastFramePacket(const SDStarFrame *DvFrame, uint16_t sid, uint8_t pid) : CDvFramePacket(DvFrame, sid, pid) { } // dmr constructor - CDvLastFramePacket::CDvLastFramePacket(const uint8_t *ambe, const uint8_t *sync, uint16_t sid, uint8_t pid, uint8_t spid) : CDvFramePacket(ambe, sync, sid, pid, spid) { } // ysf constructor - CDvLastFramePacket::CDvLastFramePacket(const uint8_t *ambe, uint16_t sid, uint8_t pid, uint8_t spid, uint8_t fid) : CDvFramePacket(ambe, sid, pid, spid, fid) { } // urf constructor - CDvLastFramePacket::CDvLastFramePacket (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 type, const uint8_t *codec2) - : CDvFramePacket(sid, dstarpid, dstarambe, dstardvdata, dmrpid, dprspid, dmrambe, dmrsync, type, codec2) + uint8_t dmrpid, uint8_t dprspid, const uint8_t *dmrambe, const uint8_t *dmrsync, ECodecType type, const uint8_t *codec2, const uint8_t *nonce) + : CDvFramePacket(sid, dstarpid, dstarambe, dstardvdata, dmrpid, dprspid, dmrambe, dmrsync, type, codec2, nonce) { } +// m17 constructor CDvLastFramePacket::CDvLastFramePacket(const CM17Packet &m17) : CDvFramePacket(m17) { } // copy constructor - CDvLastFramePacket::CDvLastFramePacket(const CDvLastFramePacket &DvFrame) : CDvFramePacket(DvFrame) { } -//////////////////////////////////////////////////////////////////////////////////////// // virtual duplication - std::unique_ptr CDvLastFramePacket::Duplicate(void) const { return std::unique_ptr(new CDvLastFramePacket(*this)); diff --git a/reflector/DVLastFramePacket.h b/reflector/DVLastFramePacket.h index 6073178..c466b0e 100644 --- a/reflector/DVLastFramePacket.h +++ b/reflector/DVLastFramePacket.h @@ -30,19 +30,25 @@ class CDvLastFramePacket : public CDvFramePacket { public: - // constructor + // empty constructor CDvLastFramePacket(); - CDvLastFramePacket(const SDstarFrame *, uint16_t, uint8_t); - CDvLastFramePacket(const uint8_t *, const uint8_t *, uint16_t, uint8_t, uint8_t); - CDvLastFramePacket(const uint8_t *, uint16_t, uint8_t, uint8_t, uint8_t); - CDvLastFramePacket(uint16_t, uint8_t, const uint8_t *, const uint8_t *, uint8_t, uint8_t, const uint8_t *, const uint8_t *, ECodecType, const uint8_t *); + // DStar constructor + CDvLastFramePacket(const SDStarFrame *dvframe, uint16_t streamid, uint8_t counter); + // DRM constructor + CDvLastFramePacket(const uint8_t *ambe, const uint8_t *sync, uint16_t streamid, uint8_t counter1, uint8_t counter2); + // YSF constructor + CDvLastFramePacket(const uint8_t *ambe, uint16_t streamid, uint8_t counter1, uint8_t counter2, uint8_t counter3); + // URF constructor + CDvLastFramePacket(uint16_t streamid, uint8_t dstarcounter, const uint8_t *dstarambe, const uint8_t *dvdata, uint8_t dmrcounter1, uint8_t dmrcounter2, const uint8_t *dmrambe, const uint8_t *dmrsync, ECodecType type, const uint8_t *codec2, const uint8_t *nonce); + // M17 constructor CDvLastFramePacket(const CM17Packet &); + // copy constructor CDvLastFramePacket(const CDvLastFramePacket &); // virtual duplication std::unique_ptr Duplicate(void) const; // identity - bool IsLastPacket(void) const { return true; } - bool HasTranscodableAmbe(void) const { return false; } + bool IsLastPacket(void) const { return true; } + bool HasTranscodableAmbe(void) const { return false; } }; diff --git a/reflector/Packet.cpp b/reflector/Packet.cpp index f9fc95d..1e192ef 100644 --- a/reflector/Packet.cpp +++ b/reflector/Packet.cpp @@ -125,7 +125,7 @@ CPacket::CPacket(const CM17Packet &m17) : CPacket() //////////////////////////////////////////////////////////////////////////////////////// // pid conversion -void CPacket::UpdatePids(uint32_t pid) +void CPacket::UpdatePids(const uint32_t pid) { // called while pushing this packet in a stream queue // so now packet sequence number is known and undefined pids can be updated @@ -153,6 +153,7 @@ void CPacket::UpdatePids(uint32_t pid) // m17 needs update? if (m_uiM17FrameNumber == 0x8000U) { - m_uiM17FrameNumber = pid % 0x7FFFU; + // frames are every 20 milliseconds, so the m17 data will come every 40 milliseconds + m_uiM17FrameNumber = (pid % 2) % 0x7FFFU; } } diff --git a/reflector/Packet.h b/reflector/Packet.h index a232024..46a7e8d 100644 --- a/reflector/Packet.h +++ b/reflector/Packet.h @@ -65,7 +65,7 @@ public: ECodecType GetCodecIn(void) const { return m_eCodecIn; } // set - void UpdatePids(uint32_t); + void UpdatePids(const uint32_t); void SetModule(char cMod) { m_cModule = cMod; } void SetLocalOrigin(void) { m_uiOriginId = ORIGIN_LOCAL; } void SetRemotePeerOrigin(void) { m_uiOriginId = ORIGIN_PEER; }