Add Tx and Rx frequency offsets
Enables specification of independant Tx and Rx offsets in Hz for Tx and Rx frequencies on DVMega and MMDVM_HS hardware. Tx and Rx frequencies no longer have to be offset for frequency errors in ADF7021 devices and dashboards (BM/DMR+) will now display intended frequencies.
This commit is contained in:
parent
348e682610
commit
5e91c1159f
16
Conf.cpp
16
Conf.cpp
|
@ -85,6 +85,8 @@ m_modemTXInvert(false),
|
|||
m_modemPTTInvert(false),
|
||||
m_modemTXDelay(100U),
|
||||
m_modemDMRDelay(0U),
|
||||
m_modemTxOffset(0),
|
||||
m_modemRxOffset(0),
|
||||
m_modemRXLevel(50.0F),
|
||||
m_modemCWIdTXLevel(50.0F),
|
||||
m_modemDStarTXLevel(50.0F),
|
||||
|
@ -327,6 +329,10 @@ bool CConf::read()
|
|||
m_modemTXDelay = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "DMRDelay") == 0)
|
||||
m_modemDMRDelay = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "RXOffset") == 0)
|
||||
m_modemRxOffset = ::atoi(value);
|
||||
else if (::strcmp(key, "TXOffset") == 0)
|
||||
m_modemTxOffset = ::atoi(value);
|
||||
else if (::strcmp(key, "RXLevel") == 0)
|
||||
m_modemRXLevel = float(::atof(value));
|
||||
else if (::strcmp(key, "TXLevel") == 0)
|
||||
|
@ -733,6 +739,16 @@ unsigned int CConf::getModemDMRDelay() const
|
|||
return m_modemDMRDelay;
|
||||
}
|
||||
|
||||
int CConf::getModemRxOffset() const
|
||||
{
|
||||
return m_modemRxOffset;
|
||||
}
|
||||
|
||||
int CConf::getModemTxOffset() const
|
||||
{
|
||||
return m_modemTxOffset;
|
||||
}
|
||||
|
||||
float CConf::getModemRXLevel() const
|
||||
{
|
||||
return m_modemRXLevel;
|
||||
|
|
4
Conf.h
4
Conf.h
|
@ -72,6 +72,8 @@ public:
|
|||
bool getModemPTTInvert() const;
|
||||
unsigned int getModemTXDelay() const;
|
||||
unsigned int getModemDMRDelay() const;
|
||||
int getModemTxOffset() const;
|
||||
int getModemRxOffset() const;
|
||||
float getModemRXLevel() const;
|
||||
float getModemCWIdTXLevel() const;
|
||||
float getModemDStarTXLevel() const;
|
||||
|
@ -228,6 +230,8 @@ private:
|
|||
bool m_modemPTTInvert;
|
||||
unsigned int m_modemTXDelay;
|
||||
unsigned int m_modemDMRDelay;
|
||||
int m_modemTxOffset;
|
||||
int m_modemRxOffset;
|
||||
float m_modemRXLevel;
|
||||
float m_modemCWIdTXLevel;
|
||||
float m_modemDStarTXLevel;
|
||||
|
|
|
@ -42,6 +42,8 @@ TXInvert=1
|
|||
RXInvert=0
|
||||
PTTInvert=0
|
||||
TXDelay=100
|
||||
RXOffset=0
|
||||
TXOffset=0
|
||||
DMRDelay=0
|
||||
RXLevel=50
|
||||
TXLevel=50
|
||||
|
|
|
@ -815,6 +815,8 @@ bool CMMDVMHost::createModem()
|
|||
bool lowDeviation = m_conf.getFusionLowDeviation();
|
||||
unsigned int rxFrequency = m_conf.getRxFrequency();
|
||||
unsigned int txFrequency = m_conf.getTxFrequency();
|
||||
int rxOffset = m_conf.getModemRxOffset();
|
||||
int txOffset = m_conf.getModemTxOffset();
|
||||
|
||||
LogInfo("Modem Parameters");
|
||||
LogInfo(" Port: %s", port.c_str());
|
||||
|
@ -822,6 +824,8 @@ bool CMMDVMHost::createModem()
|
|||
LogInfo(" TX Invert: %s", txInvert ? "yes" : "no");
|
||||
LogInfo(" PTT Invert: %s", pttInvert ? "yes" : "no");
|
||||
LogInfo(" TX Delay: %ums", txDelay);
|
||||
LogInfo(" RX Offset: %dHz", rxOffset);
|
||||
LogInfo(" TX Offset: %dHz", txOffset);
|
||||
LogInfo(" DMR Delay: %u (%.1fms)", dmrDelay, float(dmrDelay) * 0.0416666F);
|
||||
LogInfo(" RX Level: %.1f%%", rxLevel);
|
||||
LogInfo(" CW Id TX Level: %.1f%%", cwIdTXLevel);
|
||||
|
@ -829,13 +833,13 @@ bool CMMDVMHost::createModem()
|
|||
LogInfo(" DMR TX Level: %.1f%%", dmrTXLevel);
|
||||
LogInfo(" YSF TX Level: %.1f%%", ysfTXLevel);
|
||||
LogInfo(" P25 TX Level: %.1f%%", p25TXLevel);
|
||||
LogInfo(" RX Frequency: %uHz", rxFrequency);
|
||||
LogInfo(" TX Frequency: %uHz", txFrequency);
|
||||
LogInfo(" RX Frequency: %uHz (%uHz)", rxFrequency, rxFrequency + rxOffset);
|
||||
LogInfo(" TX Frequency: %uHz (%uHz)", txFrequency, txFrequency + txOffset);
|
||||
|
||||
m_modem = new CModem(port, m_duplex, rxInvert, txInvert, pttInvert, txDelay, dmrDelay, trace, debug);
|
||||
m_modem->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled, m_p25Enabled);
|
||||
m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel);
|
||||
m_modem->setRFParams(rxFrequency, txFrequency);
|
||||
m_modem->setRFParams(rxFrequency, rxOffset, txFrequency, txOffset);
|
||||
m_modem->setDMRParams(colorCode);
|
||||
m_modem->setYSFParams(lowDeviation);
|
||||
|
||||
|
|
|
@ -145,10 +145,10 @@ CModem::~CModem()
|
|||
delete[] m_buffer;
|
||||
}
|
||||
|
||||
void CModem::setRFParams(unsigned int rxFrequency, unsigned int txFrequency)
|
||||
void CModem::setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset)
|
||||
{
|
||||
m_rxFrequency = rxFrequency;
|
||||
m_txFrequency = txFrequency;
|
||||
m_rxFrequency = rxFrequency + rxOffset;
|
||||
m_txFrequency = txFrequency + txOffset;
|
||||
}
|
||||
|
||||
void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled)
|
||||
|
|
2
Modem.h
2
Modem.h
|
@ -37,7 +37,7 @@ public:
|
|||
CModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool trace, bool debug);
|
||||
~CModem();
|
||||
|
||||
void setRFParams(unsigned int rxFrequency, unsigned int txFrequency);
|
||||
void setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset);
|
||||
void setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled);
|
||||
void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25Enabled);
|
||||
void setDMRParams(unsigned int colorCode);
|
||||
|
|
Loading…
Reference in a new issue