mirror of
https://github.com/g4klx/MMDVM_HS.git
synced 2026-01-23 08:50:18 +01:00
Adding original MMDVM duplex support in SerialPort.cpp
This commit is contained in:
parent
6ff367081a
commit
92108f664b
3
Config.h
3
Config.h
|
|
@ -33,6 +33,9 @@
|
|||
// Support for ADF7021-N version
|
||||
// #define ADF7021_N_VER
|
||||
|
||||
// Enable duplex mode with dual ADF7021
|
||||
// #define DUPLEX
|
||||
|
||||
// Bidirectional Data pin (Enable Standard TX/RX Data Interface of ADF7021):
|
||||
#define BIDIR_DATA_PIN
|
||||
|
||||
|
|
|
|||
|
|
@ -148,8 +148,18 @@ void CSerialPort::getStatus()
|
|||
reply[6U] = 0U;
|
||||
|
||||
if (m_dmrEnable) {
|
||||
#if defined(DUPLEX)
|
||||
if (m_duplex) {
|
||||
reply[7U] = dmrTX.getSpace1();
|
||||
reply[8U] = dmrTX.getSpace2();
|
||||
} else {
|
||||
reply[7U] = 10U;
|
||||
reply[8U] = dmrDMOTX.getSpace();
|
||||
}
|
||||
#else
|
||||
reply[7U] = 10U;
|
||||
reply[8U] = dmrDMOTX.getSpace();
|
||||
#endif
|
||||
} else {
|
||||
reply[7U] = 0U;
|
||||
reply[8U] = 0U;
|
||||
|
|
@ -235,6 +245,13 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint8_t length)
|
|||
p25TX.setTXDelay(txDelay);
|
||||
dmrDMOTX.setTXDelay(txDelay);
|
||||
|
||||
#if defined(DUPLEX)
|
||||
dmrTX.setColorCode(colorCode);
|
||||
dmrRX.setColorCode(colorCode);
|
||||
dmrRX.setDelay(dmrDelay);
|
||||
dmrIdleRX.setColorCode(colorCode);
|
||||
#endif
|
||||
|
||||
dmrDMORX.setColorCode(colorCode);
|
||||
|
||||
io.setLoDevYSF(ysfLoDev);
|
||||
|
|
@ -310,18 +327,30 @@ void CSerialPort::setMode(MMDVM_STATE modemState)
|
|||
break;
|
||||
case STATE_DSTAR:
|
||||
DEBUG1("Mode set to D-Star");
|
||||
#if defined(DUPLEX)
|
||||
dmrIdleRX.reset();
|
||||
dmrRX.reset();
|
||||
#endif
|
||||
dmrDMORX.reset();
|
||||
ysfRX.reset();
|
||||
p25RX.reset();
|
||||
break;
|
||||
case STATE_YSF:
|
||||
DEBUG1("Mode set to System Fusion");
|
||||
#if defined(DUPLEX)
|
||||
dmrIdleRX.reset();
|
||||
dmrRX.reset();
|
||||
#endif
|
||||
dmrDMORX.reset();
|
||||
dstarRX.reset();
|
||||
p25RX.reset();
|
||||
break;
|
||||
case STATE_P25:
|
||||
DEBUG1("Mode set to P25");
|
||||
#if defined(DUPLEX)
|
||||
dmrIdleRX.reset();
|
||||
dmrRX.reset();
|
||||
#endif
|
||||
dmrDMORX.reset();
|
||||
dstarRX.reset();
|
||||
ysfRX.reset();
|
||||
|
|
@ -458,12 +487,34 @@ void CSerialPort::process()
|
|||
break;
|
||||
|
||||
case MMDVM_DMR_DATA1:
|
||||
#if defined(DUPLEX)
|
||||
if (m_dmrEnable) {
|
||||
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)
|
||||
setMode(STATE_DMR);
|
||||
} else {
|
||||
DEBUG2("Received invalid DMR data", err);
|
||||
sendNAK(err);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case MMDVM_DMR_DATA2:
|
||||
if (m_dmrEnable) {
|
||||
if (m_modemState == STATE_IDLE || m_modemState == STATE_DMR) {
|
||||
#if defined(DUPLEX)
|
||||
if (m_duplex)
|
||||
err = dmrTX.writeData2(m_buffer + 3U, m_len - 3U);
|
||||
else
|
||||
err = dmrDMOTX.writeData(m_buffer + 3U, m_len - 3U);
|
||||
#else
|
||||
err = dmrDMOTX.writeData(m_buffer + 3U, m_len - 3U);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
if (err == 0U) {
|
||||
|
|
@ -476,12 +527,48 @@ void CSerialPort::process()
|
|||
break;
|
||||
|
||||
case MMDVM_DMR_START:
|
||||
#if defined(DUPLEX)
|
||||
if (m_dmrEnable) {
|
||||
err = 4U;
|
||||
if (m_len == 4U) {
|
||||
if (m_buffer[3U] == 0x01U && m_modemState == STATE_DMR) {
|
||||
if (!m_tx)
|
||||
dmrTX.setStart(true);
|
||||
err = 0U;
|
||||
} else if (m_buffer[3U] == 0x00U && m_modemState == STATE_DMR) {
|
||||
if (m_tx)
|
||||
dmrTX.setStart(false);
|
||||
err = 0U;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (err != 0U) {
|
||||
DEBUG2("Received invalid DMR start", err);
|
||||
sendNAK(err);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case MMDVM_DMR_SHORTLC:
|
||||
#if defined(DUPLEX)
|
||||
if (m_dmrEnable)
|
||||
err = dmrTX.writeShortLC(m_buffer + 3U, m_len - 3U);
|
||||
if (err != 0U) {
|
||||
DEBUG2("Received invalid DMR Short LC", err);
|
||||
sendNAK(err);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case MMDVM_DMR_ABORT:
|
||||
#if defined(DUPLEX)
|
||||
if (m_dmrEnable)
|
||||
err = dmrTX.writeAbort(m_buffer + 3U, m_len - 3U);
|
||||
if (err != 0U) {
|
||||
DEBUG2("Received invalid DMR Abort", err);
|
||||
sendNAK(err);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case MMDVM_YSF_DATA:
|
||||
|
|
|
|||
Loading…
Reference in a new issue