diff --git a/Conf.cpp b/Conf.cpp index 6369ed3a..c467d6b5 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -217,6 +217,7 @@ m_fmCTCSSLevel(2.0F), m_fmKerchunkTime(0U), m_fmHangTime(7U), m_fmAccessMode(1U), +m_fmSimpleMode(false), m_fmCOSInvert(false), m_fmNoiseSquelch(false), m_fmSquelchHighThreshold(30U), @@ -868,6 +869,8 @@ bool CConf::read() m_fmHangTime = (unsigned int)::atoi(value); else if (::strcmp(key, "AccessMode") == 0) m_fmAccessMode = ::atoi(value); + else if (::strcmp(key, "SimpleMode") == 0) + m_fmSimpleMode = ::atoi(value) == 1; else if (::strcmp(key, "COSInvert") == 0) m_fmCOSInvert = ::atoi(value) == 1; else if (::strcmp(key, "NoiseSquelch") == 0) @@ -1896,6 +1899,11 @@ unsigned int CConf::getFMAccessMode() const return m_fmAccessMode; } +bool CConf::getFMSimpleMode() const +{ + return m_fmSimpleMode; +} + bool CConf::getFMCOSInvert() const { return m_fmCOSInvert; diff --git a/Conf.h b/Conf.h index bb984578..d134588a 100644 --- a/Conf.h +++ b/Conf.h @@ -220,6 +220,7 @@ class CConf unsigned int getFMKerchunkTime() const; unsigned int getFMHangTime() const; unsigned int getFMAccessMode() const; + bool getFMSimpleMode() const; bool getFMCOSInvert() const; bool getFMNoiseSquelch() const; unsigned int getFMSquelchHighThreshold() const; @@ -537,6 +538,7 @@ class CConf unsigned int m_fmKerchunkTime; unsigned int m_fmHangTime; unsigned int m_fmAccessMode; + bool m_fmSimpleMode; bool m_fmCOSInvert; bool m_fmNoiseSquelch; unsigned int m_fmSquelchHighThreshold; diff --git a/MMDVM.ini b/MMDVM.ini index f6878142..9b88c193 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -193,6 +193,8 @@ HangTime=7 # 2 - CTCSS only access with COS # 3 - CTCSS only access with COS to start, then carrier access with COS AccessMode=1 +# SimpleMode=1 to remove almost all of the logic control +SimpleMode=0 COSInvert=0 NoiseSquelch=0 SquelchThreshold=30 diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 704c6185..2ea0845e 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -1518,6 +1518,7 @@ bool CMMDVMHost::createModem() unsigned int kerchunkTime = m_conf.getFMKerchunkTime(); unsigned int hangTime = m_conf.getFMHangTime(); unsigned int accessMode = m_conf.getFMAccessMode(); + bool simpleMode = m_conf.getFMSimpleMode(); bool cosInvert = m_conf.getFMCOSInvert(); bool noiseSquelch = m_conf.getFMNoiseSquelch(); unsigned int squelchHighThreshold = m_conf.getFMSquelchHighThreshold(); @@ -1552,6 +1553,7 @@ bool CMMDVMHost::createModem() LogInfo(" Kerchunk Time: %us", kerchunkTime); LogInfo(" Hang Time: %us", hangTime); LogInfo(" Access Mode: %u", accessMode); + LogInfo(" Simple Mode: %s", simpleMode ? "yes" : "no"); LogInfo(" COS Invert: %s", cosInvert ? "yes" : "no"); LogInfo(" Noise Squelch: %s", noiseSquelch ? "yes" : "no"); @@ -1566,7 +1568,7 @@ bool CMMDVMHost::createModem() m_modem->setFMCallsignParams(callsign, callsignSpeed, callsignFrequency, callsignTime, callsignHoldoff, callsignHighLevel, callsignLowLevel, callsignAtStart, callsignAtEnd, callsignAtLatch); m_modem->setFMAckParams(rfAck, ackSpeed, ackFrequency, ackMinTime, ackDelay, ackLevel); - m_modem->setFMMiscParams(timeout, timeoutLevel, ctcssFrequency, ctcssHighThreshold, ctcssLowThreshold, ctcssLevel, kerchunkTime, hangTime, accessMode, cosInvert, noiseSquelch, squelchHighThreshold, squelchLowThreshold, rfAudioBoost, maxDevLevel); + m_modem->setFMMiscParams(timeout, timeoutLevel, ctcssFrequency, ctcssHighThreshold, ctcssLowThreshold, ctcssLevel, kerchunkTime, hangTime, accessMode, simpleMode, cosInvert, noiseSquelch, squelchHighThreshold, squelchLowThreshold, rfAudioBoost, maxDevLevel); if (m_conf.getFMNetworkEnabled()) { std::string extAck = m_conf.getFMExtAck(); diff --git a/Modem.cpp b/Modem.cpp index 6287aa87..5ef803b2 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -244,6 +244,7 @@ m_fmCtcssLevel(10.0F), m_fmKerchunkTime(0U), m_fmHangTime(5U), m_fmAccessMode(1U), +m_fmSimpleMode(false), m_fmCOSInvert(false), m_fmNoiseSquelch(false), m_fmSquelchHighThreshold(30U), @@ -2667,7 +2668,7 @@ void CModem::setFMAckParams(const std::string& rfAck, unsigned int ackSpeed, uns m_fmAckLevel = ackLevel; } -void CModem::setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, unsigned int accessMode, bool cosInvert, bool noiseSquelch, unsigned int squelchHighThreshold, unsigned int squelchLowThreshold, unsigned int rfAudioBoost, float maxDevLevel) +void CModem::setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, unsigned int accessMode, bool simpleMode, bool cosInvert, bool noiseSquelch, unsigned int squelchHighThreshold, unsigned int squelchLowThreshold, unsigned int rfAudioBoost, float maxDevLevel) { m_fmTimeout = timeout; m_fmTimeoutLevel = timeoutLevel; @@ -2682,6 +2683,7 @@ void CModem::setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctc m_fmHangTime = hangTime; m_fmAccessMode = accessMode; + m_fmSimpleMode = simpleMode; m_fmCOSInvert = cosInvert; m_fmNoiseSquelch = noiseSquelch; @@ -2834,6 +2836,8 @@ bool CModem::setFMMiscParams() buffer[10U] = m_fmHangTime; buffer[11U] = m_fmAccessMode & 0x0FU; + if (m_fmSimpleMode) + buffer[11U] |= 0x20U; if (m_fmNoiseSquelch) buffer[11U] |= 0x40U; if (m_fmCOSInvert) diff --git a/Modem.h b/Modem.h index 7b112db8..2dffa2ea 100644 --- a/Modem.h +++ b/Modem.h @@ -59,7 +59,7 @@ class CModem { void setFMCallsignParams(const std::string& callsign, unsigned int callsignSpeed, unsigned int callsignFrequency, unsigned int callsignTime, unsigned int callsignHoldoff, float callsignHighLevel, float callsignLowLevel, bool callsignAtStart, bool callsignAtEnd, bool callsignAtLatch); void setFMAckParams(const std::string& rfAck, unsigned int ackSpeed, unsigned int ackFrequency, unsigned int ackMinTime, unsigned int ackDelay, float ackLevel); - void setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, unsigned int accessMode, bool cosInvert, bool noiseSquelch, unsigned int squelchHighThreshold, unsigned int squelchLowThreshold, unsigned int rfAudioBoost, float maxDevLevel); + void setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, unsigned int accessMode, bool simpleMode, bool cosInvert, bool noiseSquelch, unsigned int squelchHighThreshold, unsigned int squelchLowThreshold, unsigned int rfAudioBoost, float maxDevLevel); void setFMExtParams(const std::string& ack, unsigned int audioBoost); bool open(); @@ -268,6 +268,7 @@ class CModem { unsigned int m_fmKerchunkTime; unsigned int m_fmHangTime; unsigned int m_fmAccessMode; + bool m_fmSimpleMode; bool m_fmCOSInvert; bool m_fmNoiseSquelch; unsigned int m_fmSquelchHighThreshold;