From 181d314ed587101475441383884cb6f53e9d8b80 Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Wed, 28 Jun 2023 07:32:04 +0200 Subject: [PATCH] Tmep fix for #37, corrupts slow data, needs improvment --- DGWVoiceTransmit/VoiceTransmit.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/DGWVoiceTransmit/VoiceTransmit.cpp b/DGWVoiceTransmit/VoiceTransmit.cpp index 68ff288..38b93ff 100644 --- a/DGWVoiceTransmit/VoiceTransmit.cpp +++ b/DGWVoiceTransmit/VoiceTransmit.cpp @@ -132,7 +132,9 @@ bool CVoiceTransmit::run() header->setRptCall2(m_callsign); header->setDestination(address, G2_DV_PORT); - if(!m_text.empty()) { + bool overrideSlowData = !m_text.empty(); + + if(overrideSlowData) { slowData = new CSlowDataEncoder(); slowData->setHeaderData(*header); if(!m_text.empty()) slowData->setTextData(m_text); @@ -152,6 +154,8 @@ bool CVoiceTransmit::run() while (loop) { unsigned int needed = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start).count(); needed /= DSTAR_FRAME_TIME_MS; + unsigned char buffer[DV_FRAME_LENGTH_BYTES]; + unsigned char slowDataBuffer[DATA_FRAME_LENGTH_BYTES]; while (out < needed) { CAMBEData* ambe = m_store->getAMBE(); @@ -172,19 +176,23 @@ bool CVoiceTransmit::run() break; } - if(slowData != nullptr) { // Override slowdata if specified so - unsigned char buffer[DV_FRAME_LENGTH_BYTES]; - ambe->getData(buffer, DV_FRAME_LENGTH_BYTES); - + ambe->getData(buffer, DV_FRAME_LENGTH_BYTES); + if(overrideSlowData) { // Override slowdata if specified so // Insert sync bytes when the sequence number is zero, slow data otherwise if (seqNo == 0U) { ::memcpy(buffer + VOICE_FRAME_LENGTH_BYTES, DATA_SYNC_BYTES, DATA_FRAME_LENGTH_BYTES); } else { slowData->getInterleavedData(buffer + VOICE_FRAME_LENGTH_BYTES); } - ambe->setData(buffer, DV_FRAME_LENGTH_BYTES); } + else { + if(seqNo == 0U) { + ::memcpy(slowDataBuffer, buffer + VOICE_FRAME_LENGTH_BYTES, DATA_FRAME_LENGTH_BYTES); + ::memcpy(buffer + VOICE_FRAME_LENGTH_BYTES, DATA_SYNC_BYTES, DATA_FRAME_LENGTH_BYTES); + ambe->setData(buffer, DV_FRAME_LENGTH_BYTES); + } + } ambe->setSeq(seqNo); ambe->setDestination(address, G2_DV_PORT);