diff --git a/DStarControl.cpp b/DStarControl.cpp index e245c36..b2565ff 100644 --- a/DStarControl.cpp +++ b/DStarControl.cpp @@ -191,10 +191,8 @@ bool CDStarControl::writeModem(unsigned char *data) writeNetworkData(DSTAR_END_PATTERN_BYTES, 0U, true, false); } - if (m_duplex) { - for (unsigned int i = 0U; i < 3U; i++) - writeQueueData(DSTAR_END_PATTERN_BYTES); - } + if (m_duplex) + writeQueueEOT(); m_ackTimer.start(); @@ -458,9 +456,9 @@ void CDStarControl::writeNetwork() m_timeoutTimer.stop(); + writeQueueEOT(); + data[1U] = TAG_EOT; - for (unsigned int i = 0U; i < 3U; i++) - writeQueueData(data + 1U); #if defined(DUMP_DSTAR) writeFile(data + 1U, length - 1U); @@ -583,6 +581,18 @@ void CDStarControl::writeQueueData(const unsigned char *data) m_queue.addData(data, len); } +void CDStarControl::writeQueueEOT() +{ + if (m_timeoutTimer.isRunning() && m_timeoutTimer.hasExpired()) + return; + + unsigned char len = 1U; + m_queue.addData(&len, 1U); + + unsigned char data = TAG_EOT; + m_queue.addData(&data, len); +} + void CDStarControl::writeNetworkHeader(const unsigned char* data, bool busy) { assert(data != NULL); @@ -758,5 +768,5 @@ void CDStarControl::sendAck() writeQueueData(data); } - writeQueueData(DSTAR_END_PATTERN_BYTES); + writeQueueEOT(); } diff --git a/DStarControl.h b/DStarControl.h index 5b0a97b..b10eedb 100644 --- a/DStarControl.h +++ b/DStarControl.h @@ -74,6 +74,7 @@ private: void writeQueueHeader(const unsigned char* data); void writeQueueData(const unsigned char* data); + void writeQueueEOT(); void writeNetworkHeader(const unsigned char* data, bool busy); void writeNetworkData(const unsigned char* data, unsigned int errors, bool end, bool busy);