Put the scaffolding in for DMR DMO mode.

This commit is contained in:
Jonathan Naylor 2016-08-23 08:16:49 +01:00
parent a866d04078
commit 69f02f6649
5 changed files with 56 additions and 17 deletions

View File

@ -45,6 +45,8 @@ enum MMDVM_STATE {
#include "SerialPort.h" #include "SerialPort.h"
#include "DMRIdleRX.h" #include "DMRIdleRX.h"
#include "DMRDMORX.h"
#include "DMRDMOTX.h"
#include "DStarRX.h" #include "DStarRX.h"
#include "DStarTX.h" #include "DStarTX.h"
#include "DMRRX.h" #include "DMRRX.h"
@ -90,6 +92,9 @@ extern CDMRIdleRX dmrIdleRX;
extern CDMRRX dmrRX; extern CDMRRX dmrRX;
extern CDMRTX dmrTX; extern CDMRTX dmrTX;
extern CDMRDMORX dmrDMORX;
extern CDMRDMOTX dmrDMOTX;
extern CYSFRX ysfRX; extern CYSFRX ysfRX;
extern CYSFTX ysfTX; extern CYSFTX ysfTX;

22
IO.cpp
View File

@ -358,8 +358,12 @@ void CIO::process()
q15_t C4FSKVals[RX_BLOCK_SIZE + 1U]; q15_t C4FSKVals[RX_BLOCK_SIZE + 1U];
::arm_fir_fast_q15(&m_C4FSKFilter, samples, C4FSKVals, blockSize); ::arm_fir_fast_q15(&m_C4FSKFilter, samples, C4FSKVals, blockSize);
if (m_dmrEnable) if (m_dmrEnable) {
dmrIdleRX.samples(C4FSKVals, blockSize); if (m_duplex)
dmrIdleRX.samples(C4FSKVals, blockSize);
else
dmrDMORX.samples(C4FSKVals, blockSize);
}
if (m_ysfEnable) if (m_ysfEnable)
ysfRX.samples(C4FSKVals, blockSize); ysfRX.samples(C4FSKVals, blockSize);
@ -376,11 +380,15 @@ void CIO::process()
q15_t C4FSKVals[RX_BLOCK_SIZE + 1U]; q15_t C4FSKVals[RX_BLOCK_SIZE + 1U];
::arm_fir_fast_q15(&m_C4FSKFilter, samples, C4FSKVals, blockSize); ::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_duplex) {
if (m_tx) // If the transmitter isn't on, use the DMR idle RX to detect the wakeup CSBKs
dmrRX.samples(C4FSKVals, control, blockSize); if (m_tx)
else dmrRX.samples(C4FSKVals, control, blockSize);
dmrIdleRX.samples(C4FSKVals, blockSize); else
dmrIdleRX.samples(C4FSKVals, blockSize);
} else {
dmrDMORX.samples(c4FSKVals, blockSize);
}
} }
} else if (m_modemState == STATE_YSF) { } else if (m_modemState == STATE_YSF) {
if (m_ysfEnable) { if (m_ysfEnable) {

View File

@ -44,6 +44,9 @@ CDMRIdleRX dmrIdleRX;
CDMRRX dmrRX; CDMRRX dmrRX;
CDMRTX dmrTX; CDMRTX dmrTX;
CDMRDMORX dmrDMORX;
CDMRDMOTX dmrDMOTX;
CYSFRX ysfRX; CYSFRX ysfRX;
CYSFTX ysfTX; CYSFTX ysfTX;
@ -71,8 +74,12 @@ void loop()
if (m_dstarEnable && m_modemState == STATE_DSTAR) if (m_dstarEnable && m_modemState == STATE_DSTAR)
dstarTX.process(); dstarTX.process();
if (m_dmrEnable && m_modemState == STATE_DMR) if (m_dmrEnable && m_modemState == STATE_DMR) {
dmrTX.process(); if (m_duplex)
dmrTX.process();
else
dmrDMOTX.process();
}
if (m_ysfEnable && m_modemState == STATE_YSF) if (m_ysfEnable && m_modemState == STATE_YSF)
ysfTX.process(); ysfTX.process();

View File

@ -41,6 +41,9 @@ CDMRIdleRX dmrIdleRX;
CDMRRX dmrRX; CDMRRX dmrRX;
CDMRTX dmrTX; CDMRTX dmrTX;
CDMRDMORX dmrDMORX;
CDMRDMOTX dmrDMOTX;
CYSFRX ysfRX; CYSFRX ysfRX;
CYSFTX ysfTX; CYSFTX ysfTX;
@ -68,8 +71,12 @@ void loop()
if (m_dstarEnable && m_modemState == STATE_DSTAR) if (m_dstarEnable && m_modemState == STATE_DSTAR)
dstarTX.process(); dstarTX.process();
if (m_dmrEnable && m_modemState == STATE_DMR) if (m_dmrEnable && m_modemState == STATE_DMR) {
dmrTX.process(); if (m_duplex)
dmrTX.process();
else
dmrDMOTX.process();
}
if (m_ysfEnable && m_modemState == STATE_YSF) if (m_ysfEnable && m_modemState == STATE_YSF)
ysfTX.process(); ysfTX.process();

View File

@ -149,8 +149,13 @@ void CSerialPort::getStatus()
reply[6U] = 0U; reply[6U] = 0U;
if (m_dmrEnable) { if (m_dmrEnable) {
reply[7U] = dmrTX.getSpace1(); if (m_duplex) {
reply[8U] = dmrTX.getSpace2(); reply[7U] = dmrTX.getSpace1();
reply[8U] = dmrTX.getSpace2();
} else {
reply[7U] = 0U;
reply[8U] = dmrDMOTX.getSpace();
}
} else { } else {
reply[7U] = 0U; reply[7U] = 0U;
reply[8U] = 0U; reply[8U] = 0U;
@ -249,6 +254,7 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint8_t length)
dmrTX.setColorCode(colorCode); dmrTX.setColorCode(colorCode);
dmrRX.setColorCode(colorCode); dmrRX.setColorCode(colorCode);
dmrRX.setDelay(dmrDelay); dmrRX.setDelay(dmrDelay);
dmrDMORX.setColorCode(colorCode);
dmrIdleRX.setColorCode(colorCode); dmrIdleRX.setColorCode(colorCode);
io.setParameters(rxInvert, txInvert, pttInvert, rxLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel); io.setParameters(rxInvert, txInvert, pttInvert, rxLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel);
@ -471,8 +477,10 @@ void CSerialPort::process()
case MMDVM_DMR_DATA1: case MMDVM_DMR_DATA1:
if (m_dmrEnable) { if (m_dmrEnable) {
if (m_modemState == STATE_IDLE || m_modemState == STATE_DMR) if (m_modemState == STATE_IDLE || m_modemState == STATE_DMR) {
err = dmrTX.writeData1(m_buffer + 3U, m_len - 3U); if (m_duplex)
err = dmrTX.writeData1(m_buffer + 3U, m_len - 3U);
}
} }
if (err == 0U) { if (err == 0U) {
if (m_modemState == STATE_IDLE) if (m_modemState == STATE_IDLE)
@ -485,8 +493,12 @@ void CSerialPort::process()
case MMDVM_DMR_DATA2: case MMDVM_DMR_DATA2:
if (m_dmrEnable) { if (m_dmrEnable) {
if (m_modemState == STATE_IDLE || m_modemState == STATE_DMR) if (m_modemState == STATE_IDLE || m_modemState == STATE_DMR) {
err = dmrTX.writeData2(m_buffer + 3U, m_len - 3U); 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 (err == 0U) {
if (m_modemState == STATE_IDLE) if (m_modemState == STATE_IDLE)