From 927f31cdfa5a6c81986070ea26a1f769eb78da41 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Sun, 12 Apr 2020 15:10:51 +0100 Subject: [PATCH] Move the levels to the overall MMDVM control message. --- Conf.cpp | 36 ++++++++++++++++++------------------ Conf.h | 8 ++++---- MMDVM.ini | 4 ++-- MMDVMHost.cpp | 15 +++++++-------- Modem.cpp | 39 ++++++++++++++++++++++++--------------- Modem.h | 9 ++++++--- 6 files changed, 61 insertions(+), 50 deletions(-) diff --git a/Conf.cpp b/Conf.cpp index 07a5eea..ba4964c 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -110,6 +110,8 @@ m_modemYSFTXLevel(50.0F), m_modemP25TXLevel(50.0F), m_modemNXDNTXLevel(50.0F), m_modemPOCSAGTXLevel(50.0F), +m_modemFMTXLevel(50.0F), +m_modemFMRXLevel(50.0F), m_modemRSSIMappingFile(), m_modemTrace(false), m_modemDebug(false), @@ -190,8 +192,6 @@ m_fmTimeoutLevel(80U), m_fmCTCSSFrequency(88.6F), m_fmCTCSSThreshold(100U), m_fmCTCSSLevel(5U), -m_fmInputLevel(50U), -m_fmOutputLevel(50U), m_fmKerchunkTime(0U), m_fmHangTime(7U), m_dstarNetworkEnabled(false), @@ -480,9 +480,9 @@ bool CConf::read() else if (::strcmp(key, "RFLevel") == 0) m_modemRFLevel = float(::atof(value)); else if (::strcmp(key, "RXLevel") == 0) - m_modemRXLevel = float(::atof(value)); + m_modemFMRXLevel = m_modemRXLevel = float(::atof(value)); else if (::strcmp(key, "TXLevel") == 0) - m_modemCWIdTXLevel = m_modemDStarTXLevel = m_modemDMRTXLevel = m_modemYSFTXLevel = m_modemP25TXLevel = m_modemNXDNTXLevel = float(::atof(value)); + m_modemFMTXLevel = m_modemCWIdTXLevel = m_modemDStarTXLevel = m_modemDMRTXLevel = m_modemYSFTXLevel = m_modemP25TXLevel = m_modemNXDNTXLevel = float(::atof(value)); else if (::strcmp(key, "CWIdTXLevel") == 0) m_modemCWIdTXLevel = float(::atof(value)); else if (::strcmp(key, "D-StarTXLevel") == 0) @@ -497,6 +497,10 @@ bool CConf::read() m_modemNXDNTXLevel = float(::atof(value)); else if (::strcmp(key, "POCSAGTXLevel") == 0) m_modemPOCSAGTXLevel = float(::atof(value)); + else if (::strcmp(key, "FMTXLevel") == 0) + m_modemFMTXLevel = float(::atof(value)); + else if (::strcmp(key, "FMRXLevel") == 0) + m_modemFMRXLevel = float(::atof(value)); else if (::strcmp(key, "RSSIMappingFile") == 0) m_modemRSSIMappingFile = value; else if (::strcmp(key, "Trace") == 0) @@ -729,10 +733,6 @@ bool CConf::read() m_fmCTCSSThreshold = (unsigned int)::atoi(value); else if (::strcmp(key, "CTCSSLevel") == 0) m_fmCTCSSLevel = (unsigned int)::atoi(value); - else if (::strcmp(key, "InputLevel") == 0) - m_fmInputLevel = (unsigned int)::atoi(value); - else if (::strcmp(key, "OutputLevel") == 0) - m_fmOutputLevel = (unsigned int)::atoi(value); else if (::strcmp(key, "KerchunkTime") == 0) m_fmKerchunkTime = (unsigned int)::atoi(value); else if (::strcmp(key, "HangTime") == 0) @@ -1164,6 +1164,16 @@ float CConf::getModemPOCSAGTXLevel() const return m_modemPOCSAGTXLevel; } +float CConf::getModemFMTXLevel() const +{ + return m_modemFMTXLevel; +} + +float CConf::getModemFMRXLevel() const +{ + return m_modemFMRXLevel; +} + std::string CConf::getModemRSSIMappingFile () const { return m_modemRSSIMappingFile; @@ -1564,16 +1574,6 @@ unsigned int CConf::getFMCTCSSLevel() const return m_fmCTCSSLevel; } -unsigned int CConf::getFMInputLevel() const -{ - return m_fmInputLevel; -} - -unsigned int CConf::getFMOutputLevel() const -{ - return m_fmOutputLevel; -} - unsigned int CConf::getFMKerchunkTime() const { return m_fmKerchunkTime; diff --git a/Conf.h b/Conf.h index d3189f9..3cdfccc 100644 --- a/Conf.h +++ b/Conf.h @@ -90,6 +90,8 @@ public: float getModemP25TXLevel() const; float getModemNXDNTXLevel() const; float getModemPOCSAGTXLevel() const; + float getModemFMTXLevel() const; + float getModemFMRXLevel() const; std::string getModemRSSIMappingFile() const; bool getModemTrace() const; bool getModemDebug() const; @@ -188,8 +190,6 @@ public: float getFMCTCSSFrequency() const; unsigned int getFMCTCSSThreshold() const; unsigned int getFMCTCSSLevel() const; - unsigned int getFMInputLevel() const; - unsigned int getFMOutputLevel() const; unsigned int getFMKerchunkTime() const; unsigned int getFMHangTime() const; @@ -358,6 +358,8 @@ private: float m_modemP25TXLevel; float m_modemNXDNTXLevel; float m_modemPOCSAGTXLevel; + float m_modemFMTXLevel; + float m_modemFMRXLevel; std::string m_modemRSSIMappingFile; bool m_modemTrace; bool m_modemDebug; @@ -447,8 +449,6 @@ private: float m_fmCTCSSFrequency; unsigned int m_fmCTCSSThreshold; unsigned int m_fmCTCSSLevel; - unsigned int m_fmInputLevel; - unsigned int m_fmOutputLevel; unsigned int m_fmKerchunkTime; unsigned int m_fmHangTime; diff --git a/MMDVM.ini b/MMDVM.ini index 6bdeed2..d44374d 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -65,6 +65,8 @@ RFLevel=100 # P25TXLevel=50 # NXDNTXLevel=50 # POCSAGTXLevel=50 +# FMTXLevel=50 +# FMRXLevel=50 RSSIMappingFile=RSSI.dat Trace=0 Debug=0 @@ -158,8 +160,6 @@ TimeoutLevel=80 CTCSSFrequency=88.4 CTCSSThreshold=100 CTCSSLevel=5 -InputLevel=50 -OutputLevel=50 KerchunkTime=0 HangTime=7 diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 157c5bb..72442fe 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -626,8 +626,6 @@ int CMMDVMHost::run() float ctcssFrequency = m_conf.getFMCTCSSFrequency(); unsigned int ctcssThreshold = m_conf.getFMCTCSSThreshold(); unsigned int ctcssLevel = m_conf.getFMCTCSSLevel(); - unsigned int inputLevel = m_conf.getFMInputLevel(); - unsigned int outputLevel = m_conf.getFMOutputLevel(); unsigned int kerchunkTime = m_conf.getFMKerchunkTime(); unsigned int hangTime = m_conf.getFMHangTime(); @@ -651,14 +649,12 @@ int CMMDVMHost::run() LogInfo(" CTCSS Frequency: %.1fHz", ctcssFrequency); LogInfo(" CTCSS Threshold: %u%%", ctcssThreshold); LogInfo(" CTCSS Level: %u%%", ctcssLevel); - LogInfo(" Input Level: %u%%", inputLevel); - LogInfo(" Output Level: %u%%", outputLevel); LogInfo(" Kerchunk Time: %us", kerchunkTime); LogInfo(" Hang Time: %us", hangTime); m_modem->setFMCallsignParams(callsign, callsignSpeed, callsignFrequency, callsignTime, callsignHoldoff, callsignHighLevel, callsignLowLevel, callsignAtStart, callsignAtEnd); m_modem->setFMAckParams(ack, ackSpeed, ackFrequency, ackDelay, ackLevel); - m_modem->setFMMiscParams(timeout, timeoutLevel, ctcssFrequency, ctcssThreshold, ctcssLevel, inputLevel, outputLevel, kerchunkTime, hangTime); + m_modem->setFMMiscParams(timeout, timeoutLevel, ctcssFrequency, ctcssThreshold, ctcssLevel, kerchunkTime, hangTime); } bool remoteControlEnabled = m_conf.getRemoteControlEnabled(); @@ -1211,6 +1207,8 @@ bool CMMDVMHost::createModem() float p25TXLevel = m_conf.getModemP25TXLevel(); float nxdnTXLevel = m_conf.getModemNXDNTXLevel(); float pocsagTXLevel = m_conf.getModemPOCSAGTXLevel(); + float fmTXLevel = m_conf.getModemFMTXLevel(); + float fmRXLevel = m_conf.getModemFMRXLevel(); bool trace = m_conf.getModemTrace(); bool debug = m_conf.getModemDebug(); unsigned int colorCode = m_conf.getDMRColorCode(); @@ -1248,13 +1246,14 @@ bool CMMDVMHost::createModem() LogInfo(" P25 TX Level: %.1f%%", p25TXLevel); LogInfo(" NXDN TX Level: %.1f%%", nxdnTXLevel); LogInfo(" POCSAG TX Level: %.1f%%", pocsagTXLevel); - LogInfo(" RX Frequency: %uHz (%uHz)", rxFrequency, rxFrequency + rxOffset); + LogInfo(" FM TX Level: %.1f%%", fmTXLevel); + LogInfo(" FM RX Level: %.1f%%", fmRXLevel); LogInfo(" TX Frequency: %uHz (%uHz)", txFrequency, txFrequency + txOffset); m_modem = CModem::createModem(port, m_duplex, rxInvert, txInvert, pttInvert, txDelay, dmrDelay, trace, debug); m_modem->setSerialParams(protocol,address); - m_modem->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled, m_p25Enabled, m_nxdnEnabled, m_pocsagEnabled); - m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel, nxdnTXLevel, pocsagTXLevel); + m_modem->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled, m_p25Enabled, m_nxdnEnabled, m_pocsagEnabled, m_fmEnabled); + m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel, nxdnTXLevel, pocsagTXLevel, fmTXLevel, fmRXLevel); m_modem->setRFParams(rxFrequency, rxOffset, txFrequency, txOffset, txDCOffset, rxDCOffset, rfLevel, pocsagFrequency); m_modem->setDMRParams(colorCode); m_modem->setYSFParams(lowDeviation, txHang); diff --git a/Modem.cpp b/Modem.cpp index 798d4fe..6f37c4d 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -118,6 +118,8 @@ m_ysfTXLevel(0U), m_p25TXLevel(0U), m_nxdnTXLevel(0U), m_pocsagTXLevel(0U), +m_fmTXLevel(0U), +m_fmRXLevel(0U), m_trace(trace), m_debug(debug), m_rxFrequency(0U), @@ -129,6 +131,7 @@ m_ysfEnabled(false), m_p25Enabled(false), m_nxdnEnabled(false), m_pocsagEnabled(false), +m_fmEnabled(false), m_rxDCOffset(0), m_txDCOffset(0), m_serial(NULL), @@ -198,7 +201,7 @@ void CModem::setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int tx m_pocsagFrequency = pocsagFrequency + txOffset; } -void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool pocsagEnabled) +void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool pocsagEnabled, bool fmEnabled) { m_dstarEnabled = dstarEnabled; m_dmrEnabled = dmrEnabled; @@ -206,9 +209,10 @@ void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, m_p25Enabled = p25Enabled; m_nxdnEnabled = nxdnEnabled; m_pocsagEnabled = pocsagEnabled; + m_fmEnabled = fmEnabled; } -void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagTXLevel) +void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagTXLevel, float fmTXLevel, float fmRXLevel) { m_rxLevel = rxLevel; m_cwIdTXLevel = cwIdTXLevel; @@ -218,6 +222,8 @@ void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, flo m_p25TXLevel = p25TXLevel; m_nxdnTXLevel = nxdnTXLevel; m_pocsagTXLevel = pocsagTXLevel; + m_fmTXLevel = fmTXLevel; + m_fmRXLevel = fmRXLevel; } void CModem::setDMRParams(unsigned int colorCode) @@ -1444,7 +1450,7 @@ bool CModem::setConfig() buffer[0U] = MMDVM_FRAME_START; - buffer[1U] = 21U; + buffer[1U] = 23U; buffer[2U] = MMDVM_SET_CONFIG; @@ -1475,6 +1481,8 @@ bool CModem::setConfig() buffer[4U] |= 0x10U; if (m_pocsagEnabled) buffer[4U] |= 0x20U; + if (m_fmEnabled) + buffer[4U] |= 0x40U; buffer[5U] = m_txDelay / 10U; // In 10ms units @@ -1504,10 +1512,13 @@ bool CModem::setConfig() buffer[20U] = (unsigned char)(m_pocsagTXLevel * 2.55F + 0.5F); - // CUtils::dump(1U, "Written", buffer, 21U); + buffer[21U] = (unsigned char)(m_fmTXLevel * 2.55F + 0.5F); + buffer[22U] = (unsigned char)(m_fmRXLevel * 2.55F + 0.5F); - int ret = m_serial->write(buffer, 21U); - if (ret != 21) + // CUtils::dump(1U, "Written", buffer, 23U); + + int ret = m_serial->write(buffer, 23U); + if (ret != 23) return false; unsigned int count = 0U; @@ -1931,14 +1942,14 @@ bool CModem::setFMAckParams(const std::string& ack, unsigned int ackSpeed, unsig return true; } -bool CModem::setFMMiscParams(unsigned int timeout, unsigned int timeoutLevel, float ctcssFrequency, unsigned int ctcssThreshold, unsigned int ctcssLevel, unsigned int inputLevel, unsigned int outputLevel, unsigned int kerchunkTime, unsigned int hangTime) +bool CModem::setFMMiscParams(unsigned int timeout, unsigned int timeoutLevel, float ctcssFrequency, unsigned int ctcssThreshold, unsigned int ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime) { assert(m_serial != NULL); unsigned char buffer[20U]; buffer[0U] = MMDVM_FRAME_START; - buffer[1U] = 12U; + buffer[1U] = 10U; buffer[2U] = MMDVM_FM_PARAMS3; buffer[3U] = timeout / 5U; @@ -1948,15 +1959,13 @@ bool CModem::setFMMiscParams(unsigned int timeout, unsigned int timeoutLevel, fl buffer[6U] = ctcssThreshold; buffer[7U] = ctcssLevel; - buffer[8U] = inputLevel; - buffer[9U] = outputLevel; - buffer[10U] = kerchunkTime; - buffer[11U] = hangTime; + buffer[8U] = kerchunkTime; + buffer[9U] = hangTime; - // CUtils::dump(1U, "Written", buffer, 12U); + // CUtils::dump(1U, "Written", buffer, 10U); - int ret = m_serial->write(buffer, 12U); - if (ret != 12) + int ret = m_serial->write(buffer, 10U); + if (ret != 10) return false; unsigned int count = 0U; diff --git a/Modem.h b/Modem.h index 068c4d6..5cf6579 100644 --- a/Modem.h +++ b/Modem.h @@ -39,15 +39,15 @@ public: virtual void setSerialParams(const std::string& protocol, unsigned int address); virtual void setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset, float rfLevel, unsigned int pocsagFrequency); - virtual void setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool pocsagEnabled); - virtual void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagLevel); + virtual void setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool pocsagEnabled, bool fmEnabled); + virtual void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagLevel, float fmTXLevel, float fmRXLevel); virtual void setDMRParams(unsigned int colorCode); virtual void setYSFParams(bool loDev, unsigned int txHang); virtual void setTransparentDataParams(unsigned int sendFrameType); virtual bool setFMCallsignParams(const std::string& callsign, unsigned int callsignSpeed, unsigned int callsignFrequency, unsigned int callsignTime, unsigned int callsignHoldoff, unsigned int callsignHighLevel, unsigned int callsignLowLevel, bool callsignAtStart, bool callsignAtEnd); virtual bool setFMAckParams(const std::string& ack, unsigned int ackSpeed, unsigned int ackFrequency, unsigned int ackDelay, unsigned int ackLevel); - virtual bool setFMMiscParams(unsigned int timeout, unsigned int timeoutLevel, float ctcssFrequency, unsigned int ctcssThreshold, unsigned int ctcssLevel, unsigned int inputLevel, unsigned int outputLevel, unsigned int kerchunkTime, unsigned int hangTime); + virtual bool setFMMiscParams(unsigned int timeout, unsigned int timeoutLevel, float ctcssFrequency, unsigned int ctcssThreshold, unsigned int ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime); virtual bool open(); @@ -131,6 +131,8 @@ private: float m_p25TXLevel; float m_nxdnTXLevel; float m_pocsagTXLevel; + float m_fmTXLevel; + float m_fmRXLevel; float m_rfLevel; bool m_trace; bool m_debug; @@ -143,6 +145,7 @@ private: bool m_p25Enabled; bool m_nxdnEnabled; bool m_pocsagEnabled; + bool m_fmEnabled; int m_rxDCOffset; int m_txDCOffset; CSerialController* m_serial;