Merge pull request #363 from juribeparada/master

RF power level control for MMDVM_HS compatible devices
This commit is contained in:
Jonathan Naylor 2017-12-30 16:54:26 +00:00 committed by GitHub
commit 87edd8ec90
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 25 additions and 8 deletions

View file

@ -88,6 +88,7 @@ m_modemTXOffset(0),
m_modemRXOffset(0), m_modemRXOffset(0),
m_modemRXDCOffset(0), m_modemRXDCOffset(0),
m_modemTXDCOffset(0), m_modemTXDCOffset(0),
m_modemRFLevel(100.0F),
m_modemRXLevel(50.0F), m_modemRXLevel(50.0F),
m_modemCWIdTXLevel(50.0F), m_modemCWIdTXLevel(50.0F),
m_modemDStarTXLevel(50.0F), m_modemDStarTXLevel(50.0F),
@ -359,6 +360,8 @@ bool CConf::read()
m_modemRXDCOffset = ::atoi(value); m_modemRXDCOffset = ::atoi(value);
else if (::strcmp(key, "TXDCOffset") == 0) else if (::strcmp(key, "TXDCOffset") == 0)
m_modemTXDCOffset = ::atoi(value); m_modemTXDCOffset = ::atoi(value);
else if (::strcmp(key, "RFLevel") == 0)
m_modemRFLevel = float(::atof(value));
else if (::strcmp(key, "RXLevel") == 0) else if (::strcmp(key, "RXLevel") == 0)
m_modemRXLevel = float(::atof(value)); m_modemRXLevel = float(::atof(value));
else if (::strcmp(key, "TXLevel") == 0) else if (::strcmp(key, "TXLevel") == 0)
@ -815,6 +818,11 @@ int CConf::getModemTXDCOffset() const
return m_modemTXDCOffset; return m_modemTXDCOffset;
} }
float CConf::getModemRFLevel() const
{
return m_modemRFLevel;
}
float CConf::getModemRXLevel() const float CConf::getModemRXLevel() const
{ {
return m_modemRXLevel; return m_modemRXLevel;

2
Conf.h
View file

@ -75,6 +75,7 @@ public:
int getModemRXOffset() const; int getModemRXOffset() const;
int getModemRXDCOffset() const; int getModemRXDCOffset() const;
int getModemTXDCOffset() const; int getModemTXDCOffset() const;
float getModemRFLevel() const;
float getModemRXLevel() const; float getModemRXLevel() const;
float getModemCWIdTXLevel() const; float getModemCWIdTXLevel() const;
float getModemDStarTXLevel() const; float getModemDStarTXLevel() const;
@ -252,6 +253,7 @@ private:
int m_modemRXOffset; int m_modemRXOffset;
int m_modemRXDCOffset; int m_modemRXDCOffset;
int m_modemTXDCOffset; int m_modemTXDCOffset;
float m_modemRFLevel;
float m_modemRXLevel; float m_modemRXLevel;
float m_modemCWIdTXLevel; float m_modemCWIdTXLevel;
float m_modemDStarTXLevel; float m_modemDStarTXLevel;

View file

@ -50,6 +50,7 @@ RXLevel=50
TXLevel=50 TXLevel=50
RXDCOffset=0 RXDCOffset=0
TXDCOffset=0 TXDCOffset=0
RFLevel=100
# CWIdTXLevel=50 # CWIdTXLevel=50
# D-StarTXLevel=50 # D-StarTXLevel=50
# DMRTXLevel=50 # DMRTXLevel=50

View file

@ -854,6 +854,7 @@ bool CMMDVMHost::createModem()
int txOffset = m_conf.getModemTXOffset(); int txOffset = m_conf.getModemTXOffset();
int rxDCOffset = m_conf.getModemRXDCOffset(); int rxDCOffset = m_conf.getModemRXDCOffset();
int txDCOffset = m_conf.getModemTXDCOffset(); int txDCOffset = m_conf.getModemTXDCOffset();
float rfLevel = m_conf.getModemRFLevel();
LogInfo("Modem Parameters"); LogInfo("Modem Parameters");
LogInfo(" Port: %s", port.c_str()); LogInfo(" Port: %s", port.c_str());
@ -865,6 +866,7 @@ bool CMMDVMHost::createModem()
LogInfo(" TX Offset: %dHz", txOffset); LogInfo(" TX Offset: %dHz", txOffset);
LogInfo(" RX DC Offset: %d", rxDCOffset); LogInfo(" RX DC Offset: %d", rxDCOffset);
LogInfo(" TX DC Offset: %d", txDCOffset); LogInfo(" TX DC Offset: %d", txDCOffset);
LogInfo(" RF Level: %.1f%%", rfLevel);
LogInfo(" DMR Delay: %u (%.1fms)", dmrDelay, float(dmrDelay) * 0.0416666F); LogInfo(" DMR Delay: %u (%.1fms)", dmrDelay, float(dmrDelay) * 0.0416666F);
LogInfo(" RX Level: %.1f%%", rxLevel); LogInfo(" RX Level: %.1f%%", rxLevel);
LogInfo(" CW Id TX Level: %.1f%%", cwIdTXLevel); LogInfo(" CW Id TX Level: %.1f%%", cwIdTXLevel);
@ -878,7 +880,7 @@ bool CMMDVMHost::createModem()
m_modem = new CModem(port, m_duplex, rxInvert, txInvert, pttInvert, txDelay, dmrDelay, trace, debug); 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->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled, m_p25Enabled);
m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel); m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel);
m_modem->setRFParams(rxFrequency, rxOffset, txFrequency, txOffset, txDCOffset, rxDCOffset); m_modem->setRFParams(rxFrequency, rxOffset, txFrequency, txOffset, txDCOffset, rxDCOffset, rfLevel);
m_modem->setDMRParams(colorCode); m_modem->setDMRParams(colorCode);
m_modem->setYSFParams(lowDeviation); m_modem->setYSFParams(lowDeviation);

View file

@ -147,12 +147,13 @@ CModem::~CModem()
delete[] m_buffer; delete[] m_buffer;
} }
void CModem::setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset) void CModem::setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset, float rfLevel)
{ {
m_rxFrequency = rxFrequency + rxOffset; m_rxFrequency = rxFrequency + rxOffset;
m_txFrequency = txFrequency + txOffset; m_txFrequency = txFrequency + txOffset;
m_txDCOffset = txDCOffset; m_txDCOffset = txDCOffset;
m_rxDCOffset = rxDCOffset; m_rxDCOffset = rxDCOffset;
m_rfLevel = rfLevel;
} }
void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled) void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled)
@ -1042,11 +1043,11 @@ bool CModem::setConfig()
bool CModem::setFrequency() bool CModem::setFrequency()
{ {
unsigned char buffer[15U]; unsigned char buffer[16U];
buffer[0U] = MMDVM_FRAME_START; buffer[0U] = MMDVM_FRAME_START;
buffer[1U] = 12U; buffer[1U] = 13U;
buffer[2U] = MMDVM_SET_FREQ; buffer[2U] = MMDVM_SET_FREQ;
@ -1061,11 +1062,13 @@ bool CModem::setFrequency()
buffer[9U] = (m_txFrequency >> 8) & 0xFFU; buffer[9U] = (m_txFrequency >> 8) & 0xFFU;
buffer[10U] = (m_txFrequency >> 16) & 0xFFU; buffer[10U] = (m_txFrequency >> 16) & 0xFFU;
buffer[11U] = (m_txFrequency >> 24) & 0xFFU; buffer[11U] = (m_txFrequency >> 24) & 0xFFU;
buffer[12U] = (unsigned char)(m_rfLevel * 2.55F + 0.5F);
// CUtils::dump(1U, "Written", buffer, 12U); // CUtils::dump(1U, "Written", buffer, 13U);
int ret = m_serial.write(buffer, 12U); int ret = m_serial.write(buffer, 13U);
if (ret != 12) if (ret != 13)
return false; return false;
unsigned int count = 0U; unsigned int count = 0U;

View file

@ -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(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool trace, bool debug);
~CModem(); ~CModem();
void setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset); void setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset, float rfLevel);
void setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled); 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 setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25Enabled);
void setDMRParams(unsigned int colorCode); void setDMRParams(unsigned int colorCode);
@ -103,6 +103,7 @@ private:
float m_dmrTXLevel; float m_dmrTXLevel;
float m_ysfTXLevel; float m_ysfTXLevel;
float m_p25TXLevel; float m_p25TXLevel;
float m_rfLevel;
bool m_trace; bool m_trace;
bool m_debug; bool m_debug;
unsigned int m_rxFrequency; unsigned int m_rxFrequency;