Add fine adjustments to DMR/YSF thresholds.

This commit is contained in:
Jonathan Naylor 2016-06-21 07:26:11 +01:00
parent 9240550de6
commit 768e3efcad
6 changed files with 62 additions and 19 deletions

View file

@ -82,6 +82,8 @@ m_modemDMRLevel1(0),
m_modemDMRLevel3(0), m_modemDMRLevel3(0),
m_modemYSFLevel1(0), m_modemYSFLevel1(0),
m_modemYSFLevel3(0), m_modemYSFLevel3(0),
m_modemDMRThreshold(0),
m_modemYSFThreshold(0),
m_modemOscOffset(0), m_modemOscOffset(0),
m_modemDebug(false), m_modemDebug(false),
m_dstarEnabled(true), m_dstarEnabled(true),
@ -280,6 +282,10 @@ bool CConf::read()
m_modemYSFLevel1 = ::atoi(value); m_modemYSFLevel1 = ::atoi(value);
else if (::strcmp(key, "YSFLevel3") == 0) else if (::strcmp(key, "YSFLevel3") == 0)
m_modemYSFLevel3 = ::atoi(value); 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) else if (::strcmp(key, "OscOffset") == 0)
m_modemOscOffset = ::atoi(value); m_modemOscOffset = ::atoi(value);
else if (::strcmp(key, "Debug") == 0) else if (::strcmp(key, "Debug") == 0)
@ -641,6 +647,16 @@ int CConf::getModemYSFLevel3() const
return m_modemYSFLevel3; return m_modemYSFLevel3;
} }
int CConf::getModemDMRThreshold() const
{
return m_modemDMRThreshold;
}
int CConf::getModemYSFThreshold() const
{
return m_modemYSFThreshold;
}
int CConf::getModemOscOffset() const int CConf::getModemOscOffset() const
{ {
return m_modemOscOffset; return m_modemOscOffset;

4
Conf.h
View file

@ -73,6 +73,8 @@ public:
int getModemDMRLevel3() const; int getModemDMRLevel3() const;
int getModemYSFLevel1() const; int getModemYSFLevel1() const;
int getModemYSFLevel3() const; int getModemYSFLevel3() const;
int getModemDMRThreshold() const;
int getModemYSFThreshold() const;
int getModemOscOffset() const; int getModemOscOffset() const;
bool getModemDebug() const; bool getModemDebug() const;
@ -192,6 +194,8 @@ private:
int m_modemDMRLevel3; int m_modemDMRLevel3;
int m_modemYSFLevel1; int m_modemYSFLevel1;
int m_modemYSFLevel3; int m_modemYSFLevel3;
int m_modemDMRThreshold;
int m_modemYSFThreshold;
int m_modemOscOffset; int m_modemOscOffset;
bool m_modemDebug; bool m_modemDebug;

View file

@ -43,6 +43,8 @@ DMRLevel1=0
DMRLevel3=0 DMRLevel3=0
YSFLevel1=0 YSFLevel1=0
YSFLevel3=0 YSFLevel3=0
DMRThreshold=0
YSFThreshold=0
OscOffset=0 OscOffset=0
Debug=0 Debug=0

View file

@ -640,6 +640,8 @@ bool CMMDVMHost::createModem()
int dmrLevel3 = m_conf.getModemDMRLevel3(); int dmrLevel3 = m_conf.getModemDMRLevel3();
int ysfLevel1 = m_conf.getModemYSFLevel1(); int ysfLevel1 = m_conf.getModemYSFLevel1();
int ysfLevel3 = m_conf.getModemYSFLevel3(); int ysfLevel3 = m_conf.getModemYSFLevel3();
int dmrThreshold = m_conf.getModemDMRThreshold();
int ysfThreshold = m_conf.getModemYSFThreshold();
int oscOffset = m_conf.getModemOscOffset(); int oscOffset = m_conf.getModemOscOffset();
LogInfo("Modem Parameters"); LogInfo("Modem Parameters");
@ -653,16 +655,27 @@ bool CMMDVMHost::createModem()
LogInfo(" TX Level: %u%%", txLevel); LogInfo(" TX Level: %u%%", txLevel);
LogInfo(" RX Frequency: %uHz", rxFrequency); LogInfo(" RX Frequency: %uHz", rxFrequency);
LogInfo(" TX Frequency: %uHz", txFrequency); LogInfo(" TX Frequency: %uHz", txFrequency);
if (dstarLevel != 0)
LogInfo(" D-Star Level: %.1f%%", float(dstarLevel) / 10.0F); LogInfo(" D-Star Level: %.1f%%", float(dstarLevel) / 10.0F);
if (dmrLevel1 != 0)
LogInfo(" DMR Level 1: %.1f%%", float(dmrLevel1) / 10.0F); LogInfo(" DMR Level 1: %.1f%%", float(dmrLevel1) / 10.0F);
if (dmrLevel3 != 0)
LogInfo(" DMR Level 3: %.1f%%", float(dmrLevel3) / 10.0F); LogInfo(" DMR Level 3: %.1f%%", float(dmrLevel3) / 10.0F);
if (ysfLevel1 != 0)
LogInfo(" YSF Level 1: %.1f%%", float(ysfLevel1) / 10.0F); LogInfo(" YSF Level 1: %.1f%%", float(ysfLevel1) / 10.0F);
if (ysfLevel3 != 0)
LogInfo(" YSF Level 3: %.1f%%", float(ysfLevel3) / 10.0F); 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); LogInfo(" Osc. Offset: %dppm", oscOffset);
m_modem = new CModem(port, rxInvert, txInvert, pttInvert, txDelay, rxLevel, txLevel, dmrDelay, oscOffset, debug); 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->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->setRFParams(rxFrequency, txFrequency);
m_modem->setDMRParams(colorCode); m_modem->setDMRParams(colorCode);

View file

@ -86,12 +86,14 @@ m_txDelay(txDelay),
m_dmrDelay(dmrDelay), m_dmrDelay(dmrDelay),
m_rxLevel(rxLevel), m_rxLevel(rxLevel),
m_txLevel(txLevel), m_txLevel(txLevel),
m_oscOffset(oscOffset),
m_dstarLevel(0), m_dstarLevel(0),
m_dmrLevel1(0), m_dmrLevel1(0),
m_dmrLevel3(0), m_dmrLevel3(0),
m_ysfLevel1(0), m_ysfLevel1(0),
m_ysfLevel3(0), m_ysfLevel3(0),
m_dmrThreshold(0),
m_ysfThreshold(0),
m_oscOffset(oscOffset),
m_debug(debug), m_debug(debug),
m_rxFrequency(0U), m_rxFrequency(0U),
m_txFrequency(0U), m_txFrequency(0U),
@ -137,13 +139,15 @@ void CModem::setRFParams(unsigned int rxFrequency, unsigned int txFrequency)
m_txFrequency = 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_dstarLevel = dstarLevel;
m_dmrLevel1 = dmrLevel1; m_dmrLevel1 = dmrLevel1;
m_dmrLevel3 = dmrLevel3; m_dmrLevel3 = dmrLevel3;
m_ysfLevel1 = ysfLevel1; m_ysfLevel1 = ysfLevel1;
m_ysfLevel3 = ysfLevel3; m_ysfLevel3 = ysfLevel3;
m_dmrThreshold = dmrThreshold;
m_ysfThreshold = ysfThreshold;
} }
void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled) void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled)
@ -760,7 +764,7 @@ bool CModem::setConfig()
buffer[0U] = MMDVM_FRAME_START; buffer[0U] = MMDVM_FRAME_START;
buffer[1U] = 17U; buffer[1U] = 19U;
buffer[2U] = MMDVM_SET_CONFIG; buffer[2U] = MMDVM_SET_CONFIG;
@ -798,11 +802,13 @@ bool CModem::setConfig()
buffer[14U] = (unsigned char)(m_dmrLevel3 + 128); buffer[14U] = (unsigned char)(m_dmrLevel3 + 128);
buffer[15U] = (unsigned char)(m_ysfLevel1 + 128); buffer[15U] = (unsigned char)(m_ysfLevel1 + 128);
buffer[16U] = (unsigned char)(m_ysfLevel3 + 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); int ret = m_serial.write(buffer, 19U);
if (ret != 17) if (ret != 19)
return false; return false;
unsigned int count = 0U; unsigned int count = 0U;

View file

@ -37,7 +37,7 @@ public:
~CModem(); ~CModem();
void setRFParams(unsigned int rxFrequency, unsigned int txFrequency); 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 setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled);
void setDMRParams(unsigned int colorCode); void setDMRParams(unsigned int colorCode);
@ -85,12 +85,14 @@ private:
unsigned int m_dmrDelay; unsigned int m_dmrDelay;
unsigned int m_rxLevel; unsigned int m_rxLevel;
unsigned int m_txLevel; unsigned int m_txLevel;
int m_oscOffset;
int m_dstarLevel; int m_dstarLevel;
int m_dmrLevel1; int m_dmrLevel1;
int m_dmrLevel3; int m_dmrLevel3;
int m_ysfLevel1; int m_ysfLevel1;
int m_ysfLevel3; int m_ysfLevel3;
int m_dmrThreshold;
int m_ysfThreshold;
int m_oscOffset;
bool m_debug; bool m_debug;
unsigned int m_rxFrequency; unsigned int m_rxFrequency;
unsigned int m_txFrequency; unsigned int m_txFrequency;