mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-20 22:45:44 +08:00
Add independent mode output levels.
This commit is contained in:
28
Conf.cpp
28
Conf.cpp
@@ -76,8 +76,10 @@ m_modemTXInvert(false),
|
||||
m_modemPTTInvert(false),
|
||||
m_modemTXDelay(100U),
|
||||
m_modemDMRDelay(0U),
|
||||
m_modemRXLevel(100U),
|
||||
m_modemTXLevel(100U),
|
||||
m_modemRXLevel(50U),
|
||||
m_modemDStarTXLevel(50U),
|
||||
m_modemDMRTXLevel(50U),
|
||||
m_modemYSFTXLevel(50U),
|
||||
m_modemOscOffset(0),
|
||||
m_modemRSSIMultiplier(0),
|
||||
m_modemRSSIOffset(0),
|
||||
@@ -278,7 +280,13 @@ bool CConf::read()
|
||||
else if (::strcmp(key, "RXLevel") == 0)
|
||||
m_modemRXLevel = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "TXLevel") == 0)
|
||||
m_modemTXLevel = (unsigned int)::atoi(value);
|
||||
m_modemDStarTXLevel = m_modemDMRTXLevel = m_modemYSFTXLevel = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "D-StarTXLevel") == 0)
|
||||
m_modemDStarTXLevel = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "DMRTXLevel") == 0)
|
||||
m_modemDMRTXLevel = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "YSFTXLevel") == 0)
|
||||
m_modemYSFTXLevel = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "OscOffset") == 0)
|
||||
m_modemOscOffset = ::atoi(value);
|
||||
else if (::strcmp(key, "RSSIMultiplier") == 0)
|
||||
@@ -657,9 +665,19 @@ unsigned int CConf::getModemRXLevel() const
|
||||
return m_modemRXLevel;
|
||||
}
|
||||
|
||||
unsigned int CConf::getModemTXLevel() const
|
||||
unsigned int CConf::getModemDStarTXLevel() const
|
||||
{
|
||||
return m_modemTXLevel;
|
||||
return m_modemDStarTXLevel;
|
||||
}
|
||||
|
||||
unsigned int CConf::getModemDMRTXLevel() const
|
||||
{
|
||||
return m_modemDMRTXLevel;
|
||||
}
|
||||
|
||||
unsigned int CConf::getModemYSFTXLevel() const
|
||||
{
|
||||
return m_modemYSFTXLevel;
|
||||
}
|
||||
|
||||
int CConf::getModemOscOffset() const
|
||||
|
||||
8
Conf.h
8
Conf.h
@@ -68,7 +68,9 @@ public:
|
||||
unsigned int getModemTXDelay() const;
|
||||
unsigned int getModemDMRDelay() const;
|
||||
unsigned int getModemRXLevel() const;
|
||||
unsigned int getModemTXLevel() const;
|
||||
unsigned int getModemDStarTXLevel() const;
|
||||
unsigned int getModemDMRTXLevel() const;
|
||||
unsigned int getModemYSFTXLevel() const;
|
||||
int getModemOscOffset() const;
|
||||
int getModemRSSIMultiplier() const;
|
||||
int getModemRSSIOffset() const;
|
||||
@@ -192,7 +194,9 @@ private:
|
||||
unsigned int m_modemTXDelay;
|
||||
unsigned int m_modemDMRDelay;
|
||||
unsigned int m_modemRXLevel;
|
||||
unsigned int m_modemTXLevel;
|
||||
unsigned int m_modemDStarTXLevel;
|
||||
unsigned int m_modemDMRTXLevel;
|
||||
unsigned int m_modemYSFTXLevel;
|
||||
int m_modemOscOffset;
|
||||
int m_modemRSSIMultiplier;
|
||||
int m_modemRSSIOffset;
|
||||
|
||||
@@ -40,6 +40,9 @@ TXDelay=100
|
||||
DMRDelay=0
|
||||
RXLevel=50
|
||||
TXLevel=50
|
||||
# D-StarTXLevel=50
|
||||
# DMRTXLevel=50
|
||||
# YSFTXLevel=50
|
||||
OscOffset=0
|
||||
RSSIMultiplier=1
|
||||
RSSIOffset=10
|
||||
|
||||
@@ -655,19 +655,21 @@ int CMMDVMHost::run()
|
||||
|
||||
bool CMMDVMHost::createModem()
|
||||
{
|
||||
std::string port = m_conf.getModemPort();
|
||||
bool rxInvert = m_conf.getModemRXInvert();
|
||||
bool txInvert = m_conf.getModemTXInvert();
|
||||
bool pttInvert = m_conf.getModemPTTInvert();
|
||||
unsigned int txDelay = m_conf.getModemTXDelay();
|
||||
unsigned int dmrDelay = m_conf.getModemDMRDelay();
|
||||
unsigned int rxLevel = m_conf.getModemRXLevel();
|
||||
unsigned int txLevel = m_conf.getModemTXLevel();
|
||||
bool debug = m_conf.getModemDebug();
|
||||
unsigned int colorCode = m_conf.getDMRColorCode();
|
||||
unsigned int rxFrequency = m_conf.getRxFrequency();
|
||||
unsigned int txFrequency = m_conf.getTxFrequency();
|
||||
int oscOffset = m_conf.getModemOscOffset();
|
||||
std::string port = m_conf.getModemPort();
|
||||
bool rxInvert = m_conf.getModemRXInvert();
|
||||
bool txInvert = m_conf.getModemTXInvert();
|
||||
bool pttInvert = m_conf.getModemPTTInvert();
|
||||
unsigned int txDelay = m_conf.getModemTXDelay();
|
||||
unsigned int dmrDelay = m_conf.getModemDMRDelay();
|
||||
unsigned int rxLevel = m_conf.getModemRXLevel();
|
||||
unsigned int dstarTXLevel = m_conf.getModemDStarTXLevel();
|
||||
unsigned int dmrTXLevel = m_conf.getModemDMRTXLevel();
|
||||
unsigned int ysfTXLevel = m_conf.getModemYSFTXLevel();
|
||||
bool debug = m_conf.getModemDebug();
|
||||
unsigned int colorCode = m_conf.getDMRColorCode();
|
||||
unsigned int rxFrequency = m_conf.getRxFrequency();
|
||||
unsigned int txFrequency = m_conf.getTxFrequency();
|
||||
int oscOffset = m_conf.getModemOscOffset();
|
||||
|
||||
LogInfo("Modem Parameters");
|
||||
LogInfo(" Port: %s", port.c_str());
|
||||
@@ -677,14 +679,17 @@ bool CMMDVMHost::createModem()
|
||||
LogInfo(" TX Delay: %ums", txDelay);
|
||||
LogInfo(" DMR Delay: %u (%.1fms)", dmrDelay, float(dmrDelay) * 0.0416666F);
|
||||
LogInfo(" RX Level: %u%%", rxLevel);
|
||||
LogInfo(" TX Level: %u%%", txLevel);
|
||||
LogInfo(" D-Star TX Level: %u%%", dstarTXLevel);
|
||||
LogInfo(" DMR TX Level: %u%%", dmrTXLevel);
|
||||
LogInfo(" YSF TX Level: %u%%", ysfTXLevel);
|
||||
LogInfo(" RX Frequency: %uHz", rxFrequency);
|
||||
LogInfo(" TX Frequency: %uHz", txFrequency);
|
||||
|
||||
LogInfo(" Osc. Offset: %dppm", oscOffset);
|
||||
|
||||
m_modem = new CModem(port, m_duplex, rxInvert, txInvert, pttInvert, txDelay, rxLevel, txLevel, dmrDelay, oscOffset, debug);
|
||||
m_modem = new CModem(port, m_duplex, rxInvert, txInvert, pttInvert, txDelay, dmrDelay, oscOffset, debug);
|
||||
m_modem->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled);
|
||||
m_modem->setLevels(rxLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel);
|
||||
m_modem->setRFParams(rxFrequency, txFrequency);
|
||||
m_modem->setDMRParams(colorCode);
|
||||
|
||||
|
||||
30
Modem.cpp
30
Modem.cpp
@@ -76,7 +76,7 @@ const unsigned int MAX_RESPONSES = 30U;
|
||||
const unsigned int BUFFER_LENGTH = 500U;
|
||||
|
||||
|
||||
CModem::CModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int rxLevel, unsigned int txLevel, unsigned int dmrDelay, int oscOffset, bool debug) :
|
||||
CModem::CModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, int oscOffset, bool debug) :
|
||||
m_port(port),
|
||||
m_colorCode(0U),
|
||||
m_duplex(duplex),
|
||||
@@ -85,8 +85,10 @@ m_txInvert(txInvert),
|
||||
m_pttInvert(pttInvert),
|
||||
m_txDelay(txDelay),
|
||||
m_dmrDelay(dmrDelay),
|
||||
m_rxLevel(rxLevel),
|
||||
m_txLevel(txLevel),
|
||||
m_rxLevel(0U),
|
||||
m_dstarTXLevel(0U),
|
||||
m_dmrTXLevel(0U),
|
||||
m_ysfTXLevel(0U),
|
||||
m_oscOffset(oscOffset),
|
||||
m_debug(debug),
|
||||
m_rxFrequency(0U),
|
||||
@@ -140,6 +142,14 @@ void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled)
|
||||
m_ysfEnabled = ysfEnabled;
|
||||
}
|
||||
|
||||
void CModem::setLevels(unsigned int rxLevel, unsigned int dstarTXLevel, unsigned int dmrTXLevel, unsigned int ysfTXLevel)
|
||||
{
|
||||
m_rxLevel = rxLevel;
|
||||
m_dstarTXLevel = dstarTXLevel;
|
||||
m_dmrTXLevel = dmrTXLevel;
|
||||
m_ysfTXLevel = ysfTXLevel;
|
||||
}
|
||||
|
||||
void CModem::setDMRParams(unsigned int colorCode)
|
||||
{
|
||||
assert(colorCode < 16U);
|
||||
@@ -763,7 +773,7 @@ bool CModem::setConfig()
|
||||
|
||||
buffer[0U] = MMDVM_FRAME_START;
|
||||
|
||||
buffer[1U] = 12U;
|
||||
buffer[1U] = 15U;
|
||||
|
||||
buffer[2U] = MMDVM_SET_CONFIG;
|
||||
|
||||
@@ -788,7 +798,7 @@ bool CModem::setConfig()
|
||||
buffer[6U] = MODE_IDLE;
|
||||
|
||||
buffer[7U] = (m_rxLevel * 255U) / 100U;
|
||||
buffer[8U] = (m_txLevel * 255U) / 100U;
|
||||
buffer[8U] = (m_dstarTXLevel * 255U) / 100U; // For backwards compatibility
|
||||
|
||||
buffer[9U] = m_colorCode;
|
||||
|
||||
@@ -796,10 +806,14 @@ bool CModem::setConfig()
|
||||
|
||||
buffer[11U] = (unsigned char)(m_oscOffset + 128);
|
||||
|
||||
// CUtils::dump(1U, "Written", buffer, 12U);
|
||||
buffer[12U] = (m_dstarTXLevel * 255U) / 100U;
|
||||
buffer[13U] = (m_dmrTXLevel * 255U) / 100U;
|
||||
buffer[14U] = (m_ysfTXLevel * 255U) / 100U;
|
||||
|
||||
int ret = m_serial.write(buffer, 12U);
|
||||
if (ret != 12)
|
||||
// CUtils::dump(1U, "Written", buffer, 15U);
|
||||
|
||||
int ret = m_serial.write(buffer, 15U);
|
||||
if (ret != 15)
|
||||
return false;
|
||||
|
||||
unsigned int count = 0U;
|
||||
|
||||
7
Modem.h
7
Modem.h
@@ -33,11 +33,12 @@ enum RESP_TYPE_MMDVM {
|
||||
|
||||
class CModem {
|
||||
public:
|
||||
CModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int rxLevel, unsigned int txLevel, unsigned int dmrDelay, int oscOffset, bool debug = false);
|
||||
CModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, int oscOffset, bool debug = false);
|
||||
~CModem();
|
||||
|
||||
void setRFParams(unsigned int rxFrequency, unsigned int txFrequency);
|
||||
void setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled);
|
||||
void setLevels(unsigned int rxLevel, unsigned int dstarTXLevel, unsigned int dmrTXLevel, unsigned int ysfTXLevel);
|
||||
void setDMRParams(unsigned int colorCode);
|
||||
|
||||
bool open();
|
||||
@@ -84,7 +85,9 @@ private:
|
||||
unsigned int m_txDelay;
|
||||
unsigned int m_dmrDelay;
|
||||
unsigned int m_rxLevel;
|
||||
unsigned int m_txLevel;
|
||||
unsigned int m_dstarTXLevel;
|
||||
unsigned int m_dmrTXLevel;
|
||||
unsigned int m_ysfTXLevel;
|
||||
int m_oscOffset;
|
||||
bool m_debug;
|
||||
unsigned int m_rxFrequency;
|
||||
|
||||
Reference in New Issue
Block a user