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