From 9240550de68fc87f7b9b7ca10dc607197d2eeede Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Mon, 20 Jun 2016 22:04:44 +0100 Subject: [PATCH] Allow for the fine adjustment of levels. --- Conf.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ Conf.h | 10 ++++++++++ MMDVM.ini | 5 +++++ MMDVMHost.cpp | 11 +++++++++++ Modem.cpp | 30 +++++++++++++++++++++++++----- Modem.h | 6 ++++++ 6 files changed, 97 insertions(+), 5 deletions(-) diff --git a/Conf.cpp b/Conf.cpp index 62dd0db..02668b3 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -77,6 +77,11 @@ m_modemTXDelay(100U), m_modemDMRDelay(0U), m_modemRXLevel(100U), m_modemTXLevel(100U), +m_modemDStarLevel(0), +m_modemDMRLevel1(0), +m_modemDMRLevel3(0), +m_modemYSFLevel1(0), +m_modemYSFLevel3(0), m_modemOscOffset(0), m_modemDebug(false), m_dstarEnabled(true), @@ -265,6 +270,16 @@ bool CConf::read() m_modemRXLevel = (unsigned int)::atoi(value); else if (::strcmp(key, "TXLevel") == 0) m_modemTXLevel = (unsigned int)::atoi(value); + else if (::strcmp(key, "DStarLevel") == 0) + m_modemDStarLevel = ::atoi(value); + else if (::strcmp(key, "DMRLevel1") == 0) + m_modemDMRLevel1 = ::atoi(value); + else if (::strcmp(key, "DMRLevel3") == 0) + m_modemDMRLevel3 = ::atoi(value); + else if (::strcmp(key, "YSFLevel1") == 0) + m_modemYSFLevel1 = ::atoi(value); + else if (::strcmp(key, "YSFLevel3") == 0) + m_modemYSFLevel3 = ::atoi(value); else if (::strcmp(key, "OscOffset") == 0) m_modemOscOffset = ::atoi(value); else if (::strcmp(key, "Debug") == 0) @@ -601,6 +616,31 @@ unsigned int CConf::getModemTXLevel() const return m_modemTXLevel; } +int CConf::getModemDStarLevel() const +{ + return m_modemDStarLevel; +} + +int CConf::getModemDMRLevel1() const +{ + return m_modemDMRLevel1; +} + +int CConf::getModemDMRLevel3() const +{ + return m_modemDMRLevel3; +} + +int CConf::getModemYSFLevel1() const +{ + return m_modemYSFLevel1; +} + +int CConf::getModemYSFLevel3() const +{ + return m_modemYSFLevel3; +} + int CConf::getModemOscOffset() const { return m_modemOscOffset; diff --git a/Conf.h b/Conf.h index 53805d0..accbdc4 100644 --- a/Conf.h +++ b/Conf.h @@ -68,6 +68,11 @@ public: unsigned int getModemDMRDelay() const; unsigned int getModemRXLevel() const; unsigned int getModemTXLevel() const; + int getModemDStarLevel() const; + int getModemDMRLevel1() const; + int getModemDMRLevel3() const; + int getModemYSFLevel1() const; + int getModemYSFLevel3() const; int getModemOscOffset() const; bool getModemDebug() const; @@ -182,6 +187,11 @@ private: unsigned int m_modemDMRDelay; unsigned int m_modemRXLevel; unsigned int m_modemTXLevel; + int m_modemDStarLevel; + int m_modemDMRLevel1; + int m_modemDMRLevel3; + int m_modemYSFLevel1; + int m_modemYSFLevel3; int m_modemOscOffset; bool m_modemDebug; diff --git a/MMDVM.ini b/MMDVM.ini index e3cead6..21c63df 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -38,6 +38,11 @@ TXDelay=100 DMRDelay=0 RXLevel=50 TXLevel=50 +DStarLevel=0 +DMRLevel1=0 +DMRLevel3=0 +YSFLevel1=0 +YSFLevel3=0 OscOffset=0 Debug=0 diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 40169a2..56abe27 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -635,6 +635,11 @@ bool CMMDVMHost::createModem() unsigned int colorCode = m_conf.getDMRColorCode(); unsigned int rxFrequency = m_conf.getRxFrequency(); unsigned int txFrequency = m_conf.getTxFrequency(); + int dstarLevel = m_conf.getModemDStarLevel(); + int dmrLevel1 = m_conf.getModemDMRLevel1(); + int dmrLevel3 = m_conf.getModemDMRLevel3(); + int ysfLevel1 = m_conf.getModemYSFLevel1(); + int ysfLevel3 = m_conf.getModemYSFLevel3(); int oscOffset = m_conf.getModemOscOffset(); LogInfo("Modem Parameters"); @@ -648,10 +653,16 @@ 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); 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->setRFParams(rxFrequency, txFrequency); m_modem->setDMRParams(colorCode); diff --git a/Modem.cpp b/Modem.cpp index 84b73c6..f672122 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -87,6 +87,11 @@ 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_debug(debug), m_rxFrequency(0U), m_txFrequency(0U), @@ -132,6 +137,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) +{ + m_dstarLevel = dstarLevel; + m_dmrLevel1 = dmrLevel1; + m_dmrLevel3 = dmrLevel3; + m_ysfLevel1 = ysfLevel1; + m_ysfLevel3 = ysfLevel3; +} + void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled) { m_dstarEnabled = dstarEnabled; @@ -742,11 +756,11 @@ bool CModem::readStatus() bool CModem::setConfig() { - unsigned char buffer[12U]; + unsigned char buffer[20U]; buffer[0U] = MMDVM_FRAME_START; - buffer[1U] = 12U; + buffer[1U] = 17U; buffer[2U] = MMDVM_SET_CONFIG; @@ -779,10 +793,16 @@ bool CModem::setConfig() buffer[11U] = (unsigned char)(m_oscOffset + 128); - // CUtils::dump(1U, "Written", buffer, 12U); + buffer[12U] = (unsigned char)(m_dstarLevel + 128); + buffer[13U] = (unsigned char)(m_dmrLevel1 + 128); + buffer[14U] = (unsigned char)(m_dmrLevel3 + 128); + buffer[15U] = (unsigned char)(m_ysfLevel1 + 128); + buffer[16U] = (unsigned char)(m_ysfLevel3 + 128); - int ret = m_serial.write(buffer, 12U); - if (ret != 12) + // CUtils::dump(1U, "Written", buffer, 17U); + + int ret = m_serial.write(buffer, 17U); + if (ret != 17) return false; unsigned int count = 0U; diff --git a/Modem.h b/Modem.h index 6dce045..914f715 100644 --- a/Modem.h +++ b/Modem.h @@ -37,6 +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 setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled); void setDMRParams(unsigned int colorCode); @@ -85,6 +86,11 @@ private: 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; bool m_debug; unsigned int m_rxFrequency; unsigned int m_txFrequency;