From 0e048e0115a540c6a6db2390e46b5e79756ff1c0 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Fri, 22 Mar 2019 11:21:11 +0000 Subject: [PATCH] Increase the sophistication of the stream interruption. --- DMRGateway.cpp | 23 ++++++++++++----------- DMRNetwork.cpp | 6 +++--- DMRNetwork.h | 2 +- MMDVMNetwork.cpp | 7 +++---- MMDVMNetwork.h | 2 +- RepeaterProtocol.h | 2 +- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/DMRGateway.cpp b/DMRGateway.cpp index 1d83be9..1028da1 100644 --- a/DMRGateway.cpp +++ b/DMRGateway.cpp @@ -992,18 +992,19 @@ int CDMRGateway::run() if (m_dmrNetwork4 != NULL) m_dmrNetwork4->writeHomePosition(buffer, length); } - ret = m_repeater->readInterrupt(buffer, length); + unsigned int slotNo = 0U; + ret = m_repeater->readInterrupt(slotNo); if (ret) { - if (m_xlxNetwork != NULL) - m_xlxNetwork->writeInterrupt(buffer, length); - if (m_dmrNetwork1 != NULL) - m_dmrNetwork1->writeInterrupt(buffer, length); - if (m_dmrNetwork2 != NULL) - m_dmrNetwork2->writeInterrupt(buffer, length); - if (m_dmrNetwork3 != NULL) - m_dmrNetwork3->writeInterrupt(buffer, length); - if (m_dmrNetwork4 != NULL) - m_dmrNetwork4->writeInterrupt(buffer, length); + if (m_xlxNetwork != NULL && status[slotNo] == DMRGWS_XLXREFLECTOR) + m_xlxNetwork->writeInterrupt(slotNo); + if (m_dmrNetwork1 != NULL && status[slotNo] == DMRGWS_DMRNETWORK1) + m_dmrNetwork1->writeInterrupt(slotNo); + if (m_dmrNetwork2 != NULL && status[slotNo] == DMRGWS_DMRNETWORK2) + m_dmrNetwork2->writeInterrupt(slotNo); + if (m_dmrNetwork3 != NULL && status[slotNo] == DMRGWS_DMRNETWORK3) + m_dmrNetwork3->writeInterrupt(slotNo); + if (m_dmrNetwork4 != NULL && status[slotNo] == DMRGWS_DMRNETWORK4) + m_dmrNetwork4->writeInterrupt(slotNo); } if (voice != NULL) { diff --git a/DMRNetwork.cpp b/DMRNetwork.cpp index eba8d35..559218b 100644 --- a/DMRNetwork.cpp +++ b/DMRNetwork.cpp @@ -276,7 +276,7 @@ bool CDMRNetwork::writeHomePosition(const unsigned char* data, unsigned int leng return write(buffer, length); } -bool CDMRNetwork::writeInterrupt(const unsigned char* data, unsigned int length) +bool CDMRNetwork::writeInterrupt(unsigned int slotNo) { if (m_status != RUNNING) return false; @@ -287,9 +287,9 @@ bool CDMRNetwork::writeInterrupt(const unsigned char* data, unsigned int length) ::memcpy(buffer + 7U, m_id, 4U); - ::memcpy(buffer + 11U, data + 11U, length - 11U); + ::sprintf((char*)buffer + 11U, ":%u", slotNo); - return write(buffer, length); + return write(buffer, ::strlen((char*)buffer)); } bool CDMRNetwork::isConnected() const diff --git a/DMRNetwork.h b/DMRNetwork.h index 0059237..b404f78 100644 --- a/DMRNetwork.h +++ b/DMRNetwork.h @@ -49,7 +49,7 @@ public: bool writeHomePosition(const unsigned char* data, unsigned int length); - bool writeInterrupt(const unsigned char* data, unsigned int length); + bool writeInterrupt(unsigned int slotNo); bool wantsBeacon(); diff --git a/MMDVMNetwork.cpp b/MMDVMNetwork.cpp index 07c821f..d79b70b 100644 --- a/MMDVMNetwork.cpp +++ b/MMDVMNetwork.cpp @@ -265,17 +265,16 @@ bool CMMDVMNetwork::readHomePosition(unsigned char* data, unsigned int& length) return true; } -bool CMMDVMNetwork::readInterrupt(unsigned char* data, unsigned int& length) +bool CMMDVMNetwork::readInterrupt(unsigned int& slotNo) { if (m_interruptLen == 0U) return false; - ::memcpy(data, m_interruptData, m_interruptLen); - length = m_interruptLen; + slotNo = m_interruptData[12U] - '0'; m_interruptLen = 0U; - return true; + return slotNo == 0U || slotNo == 1U || slotNo == 2U; } bool CMMDVMNetwork::writeBeacon() diff --git a/MMDVMNetwork.h b/MMDVMNetwork.h index 6eaa019..02c70ac 100644 --- a/MMDVMNetwork.h +++ b/MMDVMNetwork.h @@ -52,7 +52,7 @@ public: virtual bool readHomePosition(unsigned char* data, unsigned int& length); - virtual bool readInterrupt(unsigned char* data, unsigned int& length); + virtual bool readInterrupt(unsigned int& slotNo); virtual bool writeBeacon(); diff --git a/RepeaterProtocol.h b/RepeaterProtocol.h index 3c8a1a1..f722330 100644 --- a/RepeaterProtocol.h +++ b/RepeaterProtocol.h @@ -45,7 +45,7 @@ public: virtual bool readHomePosition(unsigned char* data, unsigned int& length) = 0; - virtual bool readInterrupt(unsigned char* data, unsigned int& length) = 0; + virtual bool readInterrupt(unsigned int& slotNo) = 0; virtual void clock(unsigned int ms) = 0;