Move the levels to the overall MMDVM control message.

This commit is contained in:
Jonathan Naylor 2020-04-12 15:10:51 +01:00
parent dcdfca39d7
commit 927f31cdfa
6 changed files with 61 additions and 50 deletions

View file

@ -110,6 +110,8 @@ m_modemYSFTXLevel(50.0F),
m_modemP25TXLevel(50.0F),
m_modemNXDNTXLevel(50.0F),
m_modemPOCSAGTXLevel(50.0F),
m_modemFMTXLevel(50.0F),
m_modemFMRXLevel(50.0F),
m_modemRSSIMappingFile(),
m_modemTrace(false),
m_modemDebug(false),
@ -190,8 +192,6 @@ m_fmTimeoutLevel(80U),
m_fmCTCSSFrequency(88.6F),
m_fmCTCSSThreshold(100U),
m_fmCTCSSLevel(5U),
m_fmInputLevel(50U),
m_fmOutputLevel(50U),
m_fmKerchunkTime(0U),
m_fmHangTime(7U),
m_dstarNetworkEnabled(false),
@ -480,9 +480,9 @@ bool CConf::read()
else if (::strcmp(key, "RFLevel") == 0)
m_modemRFLevel = float(::atof(value));
else if (::strcmp(key, "RXLevel") == 0)
m_modemRXLevel = float(::atof(value));
m_modemFMRXLevel = m_modemRXLevel = float(::atof(value));
else if (::strcmp(key, "TXLevel") == 0)
m_modemCWIdTXLevel = m_modemDStarTXLevel = m_modemDMRTXLevel = m_modemYSFTXLevel = m_modemP25TXLevel = m_modemNXDNTXLevel = float(::atof(value));
m_modemFMTXLevel = m_modemCWIdTXLevel = m_modemDStarTXLevel = m_modemDMRTXLevel = m_modemYSFTXLevel = m_modemP25TXLevel = m_modemNXDNTXLevel = float(::atof(value));
else if (::strcmp(key, "CWIdTXLevel") == 0)
m_modemCWIdTXLevel = float(::atof(value));
else if (::strcmp(key, "D-StarTXLevel") == 0)
@ -497,6 +497,10 @@ bool CConf::read()
m_modemNXDNTXLevel = float(::atof(value));
else if (::strcmp(key, "POCSAGTXLevel") == 0)
m_modemPOCSAGTXLevel = float(::atof(value));
else if (::strcmp(key, "FMTXLevel") == 0)
m_modemFMTXLevel = float(::atof(value));
else if (::strcmp(key, "FMRXLevel") == 0)
m_modemFMRXLevel = float(::atof(value));
else if (::strcmp(key, "RSSIMappingFile") == 0)
m_modemRSSIMappingFile = value;
else if (::strcmp(key, "Trace") == 0)
@ -729,10 +733,6 @@ bool CConf::read()
m_fmCTCSSThreshold = (unsigned int)::atoi(value);
else if (::strcmp(key, "CTCSSLevel") == 0)
m_fmCTCSSLevel = (unsigned int)::atoi(value);
else if (::strcmp(key, "InputLevel") == 0)
m_fmInputLevel = (unsigned int)::atoi(value);
else if (::strcmp(key, "OutputLevel") == 0)
m_fmOutputLevel = (unsigned int)::atoi(value);
else if (::strcmp(key, "KerchunkTime") == 0)
m_fmKerchunkTime = (unsigned int)::atoi(value);
else if (::strcmp(key, "HangTime") == 0)
@ -1164,6 +1164,16 @@ float CConf::getModemPOCSAGTXLevel() const
return m_modemPOCSAGTXLevel;
}
float CConf::getModemFMTXLevel() const
{
return m_modemFMTXLevel;
}
float CConf::getModemFMRXLevel() const
{
return m_modemFMRXLevel;
}
std::string CConf::getModemRSSIMappingFile () const
{
return m_modemRSSIMappingFile;
@ -1564,16 +1574,6 @@ unsigned int CConf::getFMCTCSSLevel() const
return m_fmCTCSSLevel;
}
unsigned int CConf::getFMInputLevel() const
{
return m_fmInputLevel;
}
unsigned int CConf::getFMOutputLevel() const
{
return m_fmOutputLevel;
}
unsigned int CConf::getFMKerchunkTime() const
{
return m_fmKerchunkTime;

8
Conf.h
View file

@ -90,6 +90,8 @@ public:
float getModemP25TXLevel() const;
float getModemNXDNTXLevel() const;
float getModemPOCSAGTXLevel() const;
float getModemFMTXLevel() const;
float getModemFMRXLevel() const;
std::string getModemRSSIMappingFile() const;
bool getModemTrace() const;
bool getModemDebug() const;
@ -188,8 +190,6 @@ public:
float getFMCTCSSFrequency() const;
unsigned int getFMCTCSSThreshold() const;
unsigned int getFMCTCSSLevel() const;
unsigned int getFMInputLevel() const;
unsigned int getFMOutputLevel() const;
unsigned int getFMKerchunkTime() const;
unsigned int getFMHangTime() const;
@ -358,6 +358,8 @@ private:
float m_modemP25TXLevel;
float m_modemNXDNTXLevel;
float m_modemPOCSAGTXLevel;
float m_modemFMTXLevel;
float m_modemFMRXLevel;
std::string m_modemRSSIMappingFile;
bool m_modemTrace;
bool m_modemDebug;
@ -447,8 +449,6 @@ private:
float m_fmCTCSSFrequency;
unsigned int m_fmCTCSSThreshold;
unsigned int m_fmCTCSSLevel;
unsigned int m_fmInputLevel;
unsigned int m_fmOutputLevel;
unsigned int m_fmKerchunkTime;
unsigned int m_fmHangTime;

View file

@ -65,6 +65,8 @@ RFLevel=100
# P25TXLevel=50
# NXDNTXLevel=50
# POCSAGTXLevel=50
# FMTXLevel=50
# FMRXLevel=50
RSSIMappingFile=RSSI.dat
Trace=0
Debug=0
@ -158,8 +160,6 @@ TimeoutLevel=80
CTCSSFrequency=88.4
CTCSSThreshold=100
CTCSSLevel=5
InputLevel=50
OutputLevel=50
KerchunkTime=0
HangTime=7

View file

@ -626,8 +626,6 @@ int CMMDVMHost::run()
float ctcssFrequency = m_conf.getFMCTCSSFrequency();
unsigned int ctcssThreshold = m_conf.getFMCTCSSThreshold();
unsigned int ctcssLevel = m_conf.getFMCTCSSLevel();
unsigned int inputLevel = m_conf.getFMInputLevel();
unsigned int outputLevel = m_conf.getFMOutputLevel();
unsigned int kerchunkTime = m_conf.getFMKerchunkTime();
unsigned int hangTime = m_conf.getFMHangTime();
@ -651,14 +649,12 @@ int CMMDVMHost::run()
LogInfo(" CTCSS Frequency: %.1fHz", ctcssFrequency);
LogInfo(" CTCSS Threshold: %u%%", ctcssThreshold);
LogInfo(" CTCSS Level: %u%%", ctcssLevel);
LogInfo(" Input Level: %u%%", inputLevel);
LogInfo(" Output Level: %u%%", outputLevel);
LogInfo(" Kerchunk Time: %us", kerchunkTime);
LogInfo(" Hang Time: %us", hangTime);
m_modem->setFMCallsignParams(callsign, callsignSpeed, callsignFrequency, callsignTime, callsignHoldoff, callsignHighLevel, callsignLowLevel, callsignAtStart, callsignAtEnd);
m_modem->setFMAckParams(ack, ackSpeed, ackFrequency, ackDelay, ackLevel);
m_modem->setFMMiscParams(timeout, timeoutLevel, ctcssFrequency, ctcssThreshold, ctcssLevel, inputLevel, outputLevel, kerchunkTime, hangTime);
m_modem->setFMMiscParams(timeout, timeoutLevel, ctcssFrequency, ctcssThreshold, ctcssLevel, kerchunkTime, hangTime);
}
bool remoteControlEnabled = m_conf.getRemoteControlEnabled();
@ -1211,6 +1207,8 @@ bool CMMDVMHost::createModem()
float p25TXLevel = m_conf.getModemP25TXLevel();
float nxdnTXLevel = m_conf.getModemNXDNTXLevel();
float pocsagTXLevel = m_conf.getModemPOCSAGTXLevel();
float fmTXLevel = m_conf.getModemFMTXLevel();
float fmRXLevel = m_conf.getModemFMRXLevel();
bool trace = m_conf.getModemTrace();
bool debug = m_conf.getModemDebug();
unsigned int colorCode = m_conf.getDMRColorCode();
@ -1248,13 +1246,14 @@ bool CMMDVMHost::createModem()
LogInfo(" P25 TX Level: %.1f%%", p25TXLevel);
LogInfo(" NXDN TX Level: %.1f%%", nxdnTXLevel);
LogInfo(" POCSAG TX Level: %.1f%%", pocsagTXLevel);
LogInfo(" RX Frequency: %uHz (%uHz)", rxFrequency, rxFrequency + rxOffset);
LogInfo(" FM TX Level: %.1f%%", fmTXLevel);
LogInfo(" FM RX Level: %.1f%%", fmRXLevel);
LogInfo(" TX Frequency: %uHz (%uHz)", txFrequency, txFrequency + txOffset);
m_modem = CModem::createModem(port, m_duplex, rxInvert, txInvert, pttInvert, txDelay, dmrDelay, trace, debug);
m_modem->setSerialParams(protocol,address);
m_modem->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled, m_p25Enabled, m_nxdnEnabled, m_pocsagEnabled);
m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel, nxdnTXLevel, pocsagTXLevel);
m_modem->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled, m_p25Enabled, m_nxdnEnabled, m_pocsagEnabled, m_fmEnabled);
m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel, nxdnTXLevel, pocsagTXLevel, fmTXLevel, fmRXLevel);
m_modem->setRFParams(rxFrequency, rxOffset, txFrequency, txOffset, txDCOffset, rxDCOffset, rfLevel, pocsagFrequency);
m_modem->setDMRParams(colorCode);
m_modem->setYSFParams(lowDeviation, txHang);

View file

@ -118,6 +118,8 @@ m_ysfTXLevel(0U),
m_p25TXLevel(0U),
m_nxdnTXLevel(0U),
m_pocsagTXLevel(0U),
m_fmTXLevel(0U),
m_fmRXLevel(0U),
m_trace(trace),
m_debug(debug),
m_rxFrequency(0U),
@ -129,6 +131,7 @@ m_ysfEnabled(false),
m_p25Enabled(false),
m_nxdnEnabled(false),
m_pocsagEnabled(false),
m_fmEnabled(false),
m_rxDCOffset(0),
m_txDCOffset(0),
m_serial(NULL),
@ -198,7 +201,7 @@ void CModem::setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int tx
m_pocsagFrequency = pocsagFrequency + txOffset;
}
void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool pocsagEnabled)
void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool pocsagEnabled, bool fmEnabled)
{
m_dstarEnabled = dstarEnabled;
m_dmrEnabled = dmrEnabled;
@ -206,9 +209,10 @@ void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled,
m_p25Enabled = p25Enabled;
m_nxdnEnabled = nxdnEnabled;
m_pocsagEnabled = pocsagEnabled;
m_fmEnabled = fmEnabled;
}
void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagTXLevel)
void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagTXLevel, float fmTXLevel, float fmRXLevel)
{
m_rxLevel = rxLevel;
m_cwIdTXLevel = cwIdTXLevel;
@ -218,6 +222,8 @@ void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, flo
m_p25TXLevel = p25TXLevel;
m_nxdnTXLevel = nxdnTXLevel;
m_pocsagTXLevel = pocsagTXLevel;
m_fmTXLevel = fmTXLevel;
m_fmRXLevel = fmRXLevel;
}
void CModem::setDMRParams(unsigned int colorCode)
@ -1444,7 +1450,7 @@ bool CModem::setConfig()
buffer[0U] = MMDVM_FRAME_START;
buffer[1U] = 21U;
buffer[1U] = 23U;
buffer[2U] = MMDVM_SET_CONFIG;
@ -1475,6 +1481,8 @@ bool CModem::setConfig()
buffer[4U] |= 0x10U;
if (m_pocsagEnabled)
buffer[4U] |= 0x20U;
if (m_fmEnabled)
buffer[4U] |= 0x40U;
buffer[5U] = m_txDelay / 10U; // In 10ms units
@ -1504,10 +1512,13 @@ bool CModem::setConfig()
buffer[20U] = (unsigned char)(m_pocsagTXLevel * 2.55F + 0.5F);
// CUtils::dump(1U, "Written", buffer, 21U);
buffer[21U] = (unsigned char)(m_fmTXLevel * 2.55F + 0.5F);
buffer[22U] = (unsigned char)(m_fmRXLevel * 2.55F + 0.5F);
int ret = m_serial->write(buffer, 21U);
if (ret != 21)
// CUtils::dump(1U, "Written", buffer, 23U);
int ret = m_serial->write(buffer, 23U);
if (ret != 23)
return false;
unsigned int count = 0U;
@ -1931,14 +1942,14 @@ bool CModem::setFMAckParams(const std::string& ack, unsigned int ackSpeed, unsig
return true;
}
bool CModem::setFMMiscParams(unsigned int timeout, unsigned int timeoutLevel, float ctcssFrequency, unsigned int ctcssThreshold, unsigned int ctcssLevel, unsigned int inputLevel, unsigned int outputLevel, unsigned int kerchunkTime, unsigned int hangTime)
bool CModem::setFMMiscParams(unsigned int timeout, unsigned int timeoutLevel, float ctcssFrequency, unsigned int ctcssThreshold, unsigned int ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime)
{
assert(m_serial != NULL);
unsigned char buffer[20U];
buffer[0U] = MMDVM_FRAME_START;
buffer[1U] = 12U;
buffer[1U] = 10U;
buffer[2U] = MMDVM_FM_PARAMS3;
buffer[3U] = timeout / 5U;
@ -1948,15 +1959,13 @@ bool CModem::setFMMiscParams(unsigned int timeout, unsigned int timeoutLevel, fl
buffer[6U] = ctcssThreshold;
buffer[7U] = ctcssLevel;
buffer[8U] = inputLevel;
buffer[9U] = outputLevel;
buffer[10U] = kerchunkTime;
buffer[11U] = hangTime;
buffer[8U] = kerchunkTime;
buffer[9U] = hangTime;
// CUtils::dump(1U, "Written", buffer, 12U);
// CUtils::dump(1U, "Written", buffer, 10U);
int ret = m_serial->write(buffer, 12U);
if (ret != 12)
int ret = m_serial->write(buffer, 10U);
if (ret != 10)
return false;
unsigned int count = 0U;

View file

@ -39,15 +39,15 @@ public:
virtual void setSerialParams(const std::string& protocol, unsigned int address);
virtual void setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset, float rfLevel, unsigned int pocsagFrequency);
virtual void setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool pocsagEnabled);
virtual void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagLevel);
virtual void setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool pocsagEnabled, bool fmEnabled);
virtual void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagLevel, float fmTXLevel, float fmRXLevel);
virtual void setDMRParams(unsigned int colorCode);
virtual void setYSFParams(bool loDev, unsigned int txHang);
virtual void setTransparentDataParams(unsigned int sendFrameType);
virtual bool setFMCallsignParams(const std::string& callsign, unsigned int callsignSpeed, unsigned int callsignFrequency, unsigned int callsignTime, unsigned int callsignHoldoff, unsigned int callsignHighLevel, unsigned int callsignLowLevel, bool callsignAtStart, bool callsignAtEnd);
virtual bool setFMAckParams(const std::string& ack, unsigned int ackSpeed, unsigned int ackFrequency, unsigned int ackDelay, unsigned int ackLevel);
virtual bool setFMMiscParams(unsigned int timeout, unsigned int timeoutLevel, float ctcssFrequency, unsigned int ctcssThreshold, unsigned int ctcssLevel, unsigned int inputLevel, unsigned int outputLevel, unsigned int kerchunkTime, unsigned int hangTime);
virtual bool setFMMiscParams(unsigned int timeout, unsigned int timeoutLevel, float ctcssFrequency, unsigned int ctcssThreshold, unsigned int ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime);
virtual bool open();
@ -131,6 +131,8 @@ private:
float m_p25TXLevel;
float m_nxdnTXLevel;
float m_pocsagTXLevel;
float m_fmTXLevel;
float m_fmRXLevel;
float m_rfLevel;
bool m_trace;
bool m_debug;
@ -143,6 +145,7 @@ private:
bool m_p25Enabled;
bool m_nxdnEnabled;
bool m_pocsagEnabled;
bool m_fmEnabled;
int m_rxDCOffset;
int m_txDCOffset;
CSerialController* m_serial;