diff --git a/Conf.cpp b/Conf.cpp index 02668b3..0dbea94 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -82,6 +82,8 @@ m_modemDMRLevel1(0), m_modemDMRLevel3(0), m_modemYSFLevel1(0), m_modemYSFLevel3(0), +m_modemDMRThreshold(0), +m_modemYSFThreshold(0), m_modemOscOffset(0), m_modemDebug(false), m_dstarEnabled(true), @@ -280,6 +282,10 @@ bool CConf::read() m_modemYSFLevel1 = ::atoi(value); else if (::strcmp(key, "YSFLevel3") == 0) m_modemYSFLevel3 = ::atoi(value); + else if (::strcmp(key, "DMRThreshold") == 0) + m_modemDMRThreshold = ::atoi(value); + else if (::strcmp(key, "YSFThreshold") == 0) + m_modemYSFThreshold = ::atoi(value); else if (::strcmp(key, "OscOffset") == 0) m_modemOscOffset = ::atoi(value); else if (::strcmp(key, "Debug") == 0) @@ -641,6 +647,16 @@ int CConf::getModemYSFLevel3() const return m_modemYSFLevel3; } +int CConf::getModemDMRThreshold() const +{ + return m_modemDMRThreshold; +} + +int CConf::getModemYSFThreshold() const +{ + return m_modemYSFThreshold; +} + int CConf::getModemOscOffset() const { return m_modemOscOffset; diff --git a/Conf.h b/Conf.h index accbdc4..4a4a973 100644 --- a/Conf.h +++ b/Conf.h @@ -73,6 +73,8 @@ public: int getModemDMRLevel3() const; int getModemYSFLevel1() const; int getModemYSFLevel3() const; + int getModemDMRThreshold() const; + int getModemYSFThreshold() const; int getModemOscOffset() const; bool getModemDebug() const; @@ -192,6 +194,8 @@ private: int m_modemDMRLevel3; int m_modemYSFLevel1; int m_modemYSFLevel3; + int m_modemDMRThreshold; + int m_modemYSFThreshold; int m_modemOscOffset; bool m_modemDebug; diff --git a/MMDVM.ini b/MMDVM.ini index 21c63df..7762c52 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -43,6 +43,8 @@ DMRLevel1=0 DMRLevel3=0 YSFLevel1=0 YSFLevel3=0 +DMRThreshold=0 +YSFThreshold=0 OscOffset=0 Debug=0 diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 56abe27..2b7d537 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -640,6 +640,8 @@ bool CMMDVMHost::createModem() int dmrLevel3 = m_conf.getModemDMRLevel3(); int ysfLevel1 = m_conf.getModemYSFLevel1(); int ysfLevel3 = m_conf.getModemYSFLevel3(); + int dmrThreshold = m_conf.getModemDMRThreshold(); + int ysfThreshold = m_conf.getModemYSFThreshold(); int oscOffset = m_conf.getModemOscOffset(); LogInfo("Modem Parameters"); @@ -653,16 +655,27 @@ bool CMMDVMHost::createModem() LogInfo(" TX Level: %u%%", txLevel); LogInfo(" RX Frequency: %uHz", rxFrequency); LogInfo(" TX Frequency: %uHz", txFrequency); - LogInfo(" D-Star Level: %.1f%%", float(dstarLevel) / 10.0F); - LogInfo(" DMR Level 1: %.1f%%", float(dmrLevel1) / 10.0F); - LogInfo(" DMR Level 3: %.1f%%", float(dmrLevel3) / 10.0F); - LogInfo(" YSF Level 1: %.1f%%", float(ysfLevel1) / 10.0F); - LogInfo(" YSF Level 3: %.1f%%", float(ysfLevel3) / 10.0F); + + if (dstarLevel != 0) + LogInfo(" D-Star Level: %.1f%%", float(dstarLevel) / 10.0F); + if (dmrLevel1 != 0) + LogInfo(" DMR Level 1: %.1f%%", float(dmrLevel1) / 10.0F); + if (dmrLevel3 != 0) + LogInfo(" DMR Level 3: %.1f%%", float(dmrLevel3) / 10.0F); + if (ysfLevel1 != 0) + LogInfo(" YSF Level 1: %.1f%%", float(ysfLevel1) / 10.0F); + if (ysfLevel3 != 0) + LogInfo(" YSF Level 3: %.1f%%", float(ysfLevel3) / 10.0F); + if (dmrThreshold != 0) + LogInfo(" DMR Threshold: %.1f%%", float(dmrThreshold) / 10.0F); + if (ysfThreshold != 0) + LogInfo(" YSF Threshold: %.1f%%", float(ysfThreshold) / 10.0F); + LogInfo(" Osc. Offset: %dppm", oscOffset); m_modem = new CModem(port, rxInvert, txInvert, pttInvert, txDelay, rxLevel, txLevel, dmrDelay, oscOffset, debug); m_modem->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled); - m_modem->setModeLevels(dstarLevel, dmrLevel1, dmrLevel3, ysfLevel1, ysfLevel3); + m_modem->setModeLevels(dstarLevel, dmrLevel1, dmrLevel3, ysfLevel1, ysfLevel3, dmrThreshold, ysfThreshold); m_modem->setRFParams(rxFrequency, txFrequency); m_modem->setDMRParams(colorCode); diff --git a/Modem.cpp b/Modem.cpp index f672122..a317987 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -86,12 +86,14 @@ m_txDelay(txDelay), m_dmrDelay(dmrDelay), m_rxLevel(rxLevel), m_txLevel(txLevel), -m_oscOffset(oscOffset), m_dstarLevel(0), m_dmrLevel1(0), m_dmrLevel3(0), m_ysfLevel1(0), m_ysfLevel3(0), +m_dmrThreshold(0), +m_ysfThreshold(0), +m_oscOffset(oscOffset), m_debug(debug), m_rxFrequency(0U), m_txFrequency(0U), @@ -137,13 +139,15 @@ void CModem::setRFParams(unsigned int rxFrequency, unsigned int txFrequency) m_txFrequency = txFrequency; } -void CModem::setModeLevels(int dstarLevel, int dmrLevel1, int dmrLevel3, int ysfLevel1, int ysfLevel3) +void CModem::setModeLevels(int dstarLevel, int dmrLevel1, int dmrLevel3, int ysfLevel1, int ysfLevel3, int dmrThreshold, int ysfThreshold) { - m_dstarLevel = dstarLevel; - m_dmrLevel1 = dmrLevel1; - m_dmrLevel3 = dmrLevel3; - m_ysfLevel1 = ysfLevel1; - m_ysfLevel3 = ysfLevel3; + m_dstarLevel = dstarLevel; + m_dmrLevel1 = dmrLevel1; + m_dmrLevel3 = dmrLevel3; + m_ysfLevel1 = ysfLevel1; + m_ysfLevel3 = ysfLevel3; + m_dmrThreshold = dmrThreshold; + m_ysfThreshold = ysfThreshold; } void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled) @@ -760,7 +764,7 @@ bool CModem::setConfig() buffer[0U] = MMDVM_FRAME_START; - buffer[1U] = 17U; + buffer[1U] = 19U; buffer[2U] = MMDVM_SET_CONFIG; @@ -798,11 +802,13 @@ bool CModem::setConfig() buffer[14U] = (unsigned char)(m_dmrLevel3 + 128); buffer[15U] = (unsigned char)(m_ysfLevel1 + 128); buffer[16U] = (unsigned char)(m_ysfLevel3 + 128); + buffer[17U] = (unsigned char)(m_dmrThreshold + 128); + buffer[18U] = (unsigned char)(m_ysfThreshold + 128); - // CUtils::dump(1U, "Written", buffer, 17U); + // CUtils::dump(1U, "Written", buffer, 19U); - int ret = m_serial.write(buffer, 17U); - if (ret != 17) + int ret = m_serial.write(buffer, 19U); + if (ret != 19) return false; unsigned int count = 0U; diff --git a/Modem.h b/Modem.h index 914f715..6664832 100644 --- a/Modem.h +++ b/Modem.h @@ -37,7 +37,7 @@ public: ~CModem(); void setRFParams(unsigned int rxFrequency, unsigned int txFrequency); - void setModeLevels(int dstarLevel, int dmrLevel1, int dmrLevel3, int ysfLevel1, int ysfLevel3); + void setModeLevels(int dstarLevel, int dmrLevel1, int dmrLevel3, int ysfLevel1, int ysfLevel3, int dmrThreshold, int ysfThreshold); void setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled); void setDMRParams(unsigned int colorCode); @@ -85,12 +85,14 @@ private: unsigned int m_dmrDelay; unsigned int m_rxLevel; unsigned int m_txLevel; - int m_oscOffset; int m_dstarLevel; int m_dmrLevel1; int m_dmrLevel3; int m_ysfLevel1; int m_ysfLevel3; + int m_dmrThreshold; + int m_ysfThreshold; + int m_oscOffset; bool m_debug; unsigned int m_rxFrequency; unsigned int m_txFrequency;