From 69f02f6649d397cc37c894a8cb8d407aceea5031 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Tue, 23 Aug 2016 08:16:49 +0100 Subject: [PATCH] Put the scaffolding in for DMR DMO mode. --- Globals.h | 5 +++++ IO.cpp | 22 +++++++++++++++------- MMDVM.cpp | 11 +++++++++-- MMDVM.ino | 11 +++++++++-- SerialPort.cpp | 24 ++++++++++++++++++------ 5 files changed, 56 insertions(+), 17 deletions(-) diff --git a/Globals.h b/Globals.h index 6ea1d22..161641a 100644 --- a/Globals.h +++ b/Globals.h @@ -45,6 +45,8 @@ enum MMDVM_STATE { #include "SerialPort.h" #include "DMRIdleRX.h" +#include "DMRDMORX.h" +#include "DMRDMOTX.h" #include "DStarRX.h" #include "DStarTX.h" #include "DMRRX.h" @@ -90,6 +92,9 @@ extern CDMRIdleRX dmrIdleRX; extern CDMRRX dmrRX; extern CDMRTX dmrTX; +extern CDMRDMORX dmrDMORX; +extern CDMRDMOTX dmrDMOTX; + extern CYSFRX ysfRX; extern CYSFTX ysfTX; diff --git a/IO.cpp b/IO.cpp index f64178c..46a4dd0 100644 --- a/IO.cpp +++ b/IO.cpp @@ -358,8 +358,12 @@ void CIO::process() q15_t C4FSKVals[RX_BLOCK_SIZE + 1U]; ::arm_fir_fast_q15(&m_C4FSKFilter, samples, C4FSKVals, blockSize); - if (m_dmrEnable) - dmrIdleRX.samples(C4FSKVals, blockSize); + if (m_dmrEnable) { + if (m_duplex) + dmrIdleRX.samples(C4FSKVals, blockSize); + else + dmrDMORX.samples(C4FSKVals, blockSize); + } if (m_ysfEnable) ysfRX.samples(C4FSKVals, blockSize); @@ -376,11 +380,15 @@ void CIO::process() q15_t C4FSKVals[RX_BLOCK_SIZE + 1U]; ::arm_fir_fast_q15(&m_C4FSKFilter, samples, C4FSKVals, blockSize); - // If the transmitter isn't on, use the DMR idle RX to detect the wakeup CSBKs - if (m_tx) - dmrRX.samples(C4FSKVals, control, blockSize); - else - dmrIdleRX.samples(C4FSKVals, blockSize); + if (m_duplex) { + // If the transmitter isn't on, use the DMR idle RX to detect the wakeup CSBKs + if (m_tx) + dmrRX.samples(C4FSKVals, control, blockSize); + else + dmrIdleRX.samples(C4FSKVals, blockSize); + } else { + dmrDMORX.samples(c4FSKVals, blockSize); + } } } else if (m_modemState == STATE_YSF) { if (m_ysfEnable) { diff --git a/MMDVM.cpp b/MMDVM.cpp index 669506c..49ab79a 100644 --- a/MMDVM.cpp +++ b/MMDVM.cpp @@ -44,6 +44,9 @@ CDMRIdleRX dmrIdleRX; CDMRRX dmrRX; CDMRTX dmrTX; +CDMRDMORX dmrDMORX; +CDMRDMOTX dmrDMOTX; + CYSFRX ysfRX; CYSFTX ysfTX; @@ -71,8 +74,12 @@ void loop() if (m_dstarEnable && m_modemState == STATE_DSTAR) dstarTX.process(); - if (m_dmrEnable && m_modemState == STATE_DMR) - dmrTX.process(); + if (m_dmrEnable && m_modemState == STATE_DMR) { + if (m_duplex) + dmrTX.process(); + else + dmrDMOTX.process(); + } if (m_ysfEnable && m_modemState == STATE_YSF) ysfTX.process(); diff --git a/MMDVM.ino b/MMDVM.ino index 8fa1608..2bfac98 100644 --- a/MMDVM.ino +++ b/MMDVM.ino @@ -41,6 +41,9 @@ CDMRIdleRX dmrIdleRX; CDMRRX dmrRX; CDMRTX dmrTX; +CDMRDMORX dmrDMORX; +CDMRDMOTX dmrDMOTX; + CYSFRX ysfRX; CYSFTX ysfTX; @@ -68,8 +71,12 @@ void loop() if (m_dstarEnable && m_modemState == STATE_DSTAR) dstarTX.process(); - if (m_dmrEnable && m_modemState == STATE_DMR) - dmrTX.process(); + if (m_dmrEnable && m_modemState == STATE_DMR) { + if (m_duplex) + dmrTX.process(); + else + dmrDMOTX.process(); + } if (m_ysfEnable && m_modemState == STATE_YSF) ysfTX.process(); diff --git a/SerialPort.cpp b/SerialPort.cpp index 3ed94d2..4983c5b 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -149,8 +149,13 @@ void CSerialPort::getStatus() reply[6U] = 0U; if (m_dmrEnable) { - reply[7U] = dmrTX.getSpace1(); - reply[8U] = dmrTX.getSpace2(); + if (m_duplex) { + reply[7U] = dmrTX.getSpace1(); + reply[8U] = dmrTX.getSpace2(); + } else { + reply[7U] = 0U; + reply[8U] = dmrDMOTX.getSpace(); + } } else { reply[7U] = 0U; reply[8U] = 0U; @@ -249,6 +254,7 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint8_t length) dmrTX.setColorCode(colorCode); dmrRX.setColorCode(colorCode); dmrRX.setDelay(dmrDelay); + dmrDMORX.setColorCode(colorCode); dmrIdleRX.setColorCode(colorCode); io.setParameters(rxInvert, txInvert, pttInvert, rxLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel); @@ -471,8 +477,10 @@ void CSerialPort::process() case MMDVM_DMR_DATA1: if (m_dmrEnable) { - if (m_modemState == STATE_IDLE || m_modemState == STATE_DMR) - err = dmrTX.writeData1(m_buffer + 3U, m_len - 3U); + if (m_modemState == STATE_IDLE || m_modemState == STATE_DMR) { + if (m_duplex) + err = dmrTX.writeData1(m_buffer + 3U, m_len - 3U); + } } if (err == 0U) { if (m_modemState == STATE_IDLE) @@ -485,8 +493,12 @@ void CSerialPort::process() case MMDVM_DMR_DATA2: if (m_dmrEnable) { - if (m_modemState == STATE_IDLE || m_modemState == STATE_DMR) - err = dmrTX.writeData2(m_buffer + 3U, m_len - 3U); + if (m_modemState == STATE_IDLE || m_modemState == STATE_DMR) { + if (m_duplex) + err = dmrTX.writeData2(m_buffer + 3U, m_len - 3U); + else + err = dmrDMOTX.writeData(m_buffer + 3U, m_len - 3U); + } } if (err == 0U) { if (m_modemState == STATE_IDLE)