From d2be9202546e28fa316dcba7f8ca7f0c414ff487 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Wed, 1 Jul 2020 10:59:46 +0100 Subject: [PATCH] Add AX25 SlotTime and P-Persist parameters. --- Conf.cpp | 26 +++++++++++++++++++++----- Conf.h | 8 ++++++-- MMDVM.ini | 2 ++ MMDVMHost.cpp | 16 +++++++++++----- Modem.h | 2 +- NullModem.h | 2 +- SerialModem.cpp | 24 ++++++++++++++---------- SerialModem.h | 4 +++- Version.h | 2 +- 9 files changed, 60 insertions(+), 26 deletions(-) diff --git a/Conf.cpp b/Conf.cpp index 36c8ce3..ae7037a 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -213,8 +213,10 @@ m_fmMaxDevLevel(90.0F), m_fmExtAudioBoost(1U), m_fmModeHang(10U), m_ax25Enabled(false), -m_ax25RXTwist(6), m_ax25TXDelay(300U), +m_ax25RXTwist(6), +m_ax25SlotTime(30U), +m_ax25PPersist(128U), m_ax25Trace(false), m_dstarNetworkEnabled(false), m_dstarGatewayAddress(), @@ -815,10 +817,14 @@ bool CConf::read() } else if (section == SECTION_AX25) { if (::strcmp(key, "Enable") == 0) m_ax25Enabled = ::atoi(value) == 1; - else if (::strcmp(key, "RXTwist") == 0) - m_ax25RXTwist = ::atoi(value); else if (::strcmp(key, "TXDelay") == 0) m_ax25TXDelay = (unsigned int)::atoi(value); + else if (::strcmp(key, "RXTwist") == 0) + m_ax25RXTwist = ::atoi(value); + else if (::strcmp(key, "SlotTime") == 0) + m_ax25SlotTime = (unsigned int)::atoi(value); + else if (::strcmp(key, "PPersist") == 0) + m_ax25PPersist = (unsigned int)::atoi(value); else if (::strcmp(key, "Trace") == 0) m_ax25Trace = ::atoi(value) == 1; } else if (section == SECTION_DSTAR_NETWORK) { @@ -1772,14 +1778,24 @@ bool CConf::getAX25Enabled() const return m_ax25Enabled; } +unsigned int CConf::getAX25TXDelay() const +{ + return m_ax25TXDelay; +} + int CConf::getAX25RXTwist() const { return m_ax25RXTwist; } -unsigned int CConf::getAX25TXDelay() const +unsigned int CConf::getAX25SlotTime() const { - return m_ax25TXDelay; + return m_ax25SlotTime; +} + +unsigned int CConf::getAX25PPersist() const +{ + return m_ax25PPersist; } bool CConf::getAX25Trace() const diff --git a/Conf.h b/Conf.h index cbae96c..dd830c3 100644 --- a/Conf.h +++ b/Conf.h @@ -175,8 +175,10 @@ public: // The AX.25 section bool getAX25Enabled() const; - int getAX25RXTwist() const; unsigned int getAX25TXDelay() const; + int getAX25RXTwist() const; + unsigned int getAX25SlotTime() const; + unsigned int getAX25PPersist() const; bool getAX25Trace() const; // The FM Section @@ -505,8 +507,10 @@ private: unsigned int m_fmModeHang; bool m_ax25Enabled; - int m_ax25RXTwist; unsigned int m_ax25TXDelay; + int m_ax25RXTwist; + unsigned int m_ax25SlotTime; + unsigned int m_ax25PPersist; bool m_ax25Trace; bool m_dstarNetworkEnabled; diff --git a/MMDVM.ini b/MMDVM.ini index 474bcbb..1435956 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -183,6 +183,8 @@ ExtAudioBoost=1 Enable=1 TXDelay=300 RXTwist=6 +SlotTime=30 +PPersist=128 Trace=1 [D-Star Network] diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 93ee9f7..6703f90 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -639,13 +639,17 @@ int CMMDVMHost::run() } if (m_ax25Enabled) { - int rxTwist = m_conf.getAX25RXTwist(); - unsigned int txDelay = m_conf.getAX25TXDelay(); - bool trace = m_conf.getAX25Trace(); + unsigned int txDelay = m_conf.getAX25TXDelay(); + int rxTwist = m_conf.getAX25RXTwist(); + unsigned int slotTime = m_conf.getAX25SlotTime(); + unsigned int pPersist = m_conf.getAX25PPersist(); + bool trace = m_conf.getAX25Trace(); LogInfo("AX.25 RF Parameters"); - LogInfo(" RX Twist: %d", rxTwist); LogInfo(" TX Delay: %ums", txDelay); + LogInfo(" RX Twist: %d", rxTwist); + LogInfo(" Slot Time: %ums", slotTime); + LogInfo(" P-Persist: %u", pPersist); LogInfo(" Trace: %s", trace ? "yes" : "no"); m_ax25 = new CAX25Control(m_ax25Network, trace); @@ -1301,6 +1305,8 @@ bool CMMDVMHost::createModem() float rfLevel = m_conf.getModemRFLevel(); int rxTwist = m_conf.getAX25RXTwist(); unsigned int ax25TXDelay = m_conf.getAX25TXDelay(); + unsigned int ax25SlotTime = m_conf.getAX25SlotTime(); + unsigned int ax25PPersist = m_conf.getAX25PPersist(); LogInfo("Modem Parameters"); LogInfo(" Port: %s", port.c_str()); @@ -1345,7 +1351,7 @@ bool CMMDVMHost::createModem() m_modem->setYSFParams(lowDeviation, ysfTXHang); m_modem->setP25Params(p25TXHang); m_modem->setNXDNParams(nxdnTXHang); - m_modem->setAX25Params(rxTwist, ax25TXDelay); + m_modem->setAX25Params(rxTwist, ax25TXDelay, ax25SlotTime, ax25PPersist); if (m_fmEnabled) { std::string callsign = m_conf.getFMCallsign(); diff --git a/Modem.h b/Modem.h index c408f01..d5fc4b3 100644 --- a/Modem.h +++ b/Modem.h @@ -35,7 +35,7 @@ public: virtual void setYSFParams(bool loDev, unsigned int txHang) = 0; virtual void setP25Params(unsigned int txHang) = 0; virtual void setNXDNParams(unsigned int txHang) = 0; - virtual void setAX25Params(int rxTwist, unsigned int txDelay) = 0; + virtual void setAX25Params(int rxTwist, unsigned int txDelay, unsigned int slotTime, unsigned int pPersist) = 0; virtual void setTransparentDataParams(unsigned int sendFrameType) = 0; virtual void setFMCallsignParams(const std::string& callsign, unsigned int callsignSpeed, unsigned int callsignFrequency, unsigned int callsignTime, unsigned int callsignHoldoff, float callsignHighLevel, float callsignLowLevel, bool callsignAtStart, bool callsignAtEnd, bool callsignAtLatch) = 0; diff --git a/NullModem.h b/NullModem.h index 12ae460..5ab0dd0 100644 --- a/NullModem.h +++ b/NullModem.h @@ -37,7 +37,7 @@ public: virtual void setYSFParams(bool loDev, unsigned int txHang) {}; virtual void setP25Params(unsigned int txHang) {}; virtual void setNXDNParams(unsigned int txHang) {}; - virtual void setAX25Params(int rxTwist, unsigned int txDelay) {}; + virtual void setAX25Params(int rxTwist, unsigned int txDelay, unsigned int slotTime, unsigned int pPersist) {}; virtual void setTransparentDataParams(unsigned int sendFrameType) {}; virtual void setFMCallsignParams(const std::string& callsign, unsigned int callsignSpeed, unsigned int callsignFrequency, unsigned int callsignTime, unsigned int callsignHoldoff, float callsignHighLevel, float callsignLowLevel, bool callsignAtStart, bool callsignAtEnd, bool callsignAtLatch) {}; diff --git a/SerialModem.cpp b/SerialModem.cpp index 10ddefa..95f5765 100644 --- a/SerialModem.cpp +++ b/SerialModem.cpp @@ -194,6 +194,8 @@ m_mode(MODE_IDLE), m_hwType(HWT_UNKNOWN), m_ax25RXTwist(0), m_ax25TXDelay(300U), +m_ax25SlotTime(30U), +m_ax25PPersist(128U), m_fmCallsign(), m_fmCallsignSpeed(20U), m_fmCallsignFrequency(1000U), @@ -308,10 +310,12 @@ void CSerialModem::setNXDNParams(unsigned int txHang) m_nxdnTXHang = txHang; } -void CSerialModem::setAX25Params(int rxTwist, unsigned int txDelay) +void CSerialModem::setAX25Params(int rxTwist, unsigned int txDelay, unsigned int slotTime, unsigned int pPersist) { - m_ax25RXTwist = rxTwist; - m_ax25TXDelay = txDelay; + m_ax25RXTwist = rxTwist; + m_ax25TXDelay = txDelay; + m_ax25SlotTime = slotTime; + m_ax25PPersist = pPersist; } void CSerialModem::setTransparentDataParams(unsigned int sendFrameType) @@ -1757,7 +1761,7 @@ bool CSerialModem::setConfig() buffer[0U] = MMDVM_FRAME_START; - buffer[1U] = 27U; + buffer[1U] = 29U; buffer[2U] = MMDVM_SET_CONFIG; @@ -1788,7 +1792,7 @@ bool CSerialModem::setConfig() buffer[4U] |= 0x10U; if (m_pocsagEnabled) buffer[4U] |= 0x20U; - if (m_fmEnabled && m_duplex) + if (m_fmEnabled) buffer[4U] |= 0x40U; if (m_ax25Enabled) buffer[4U] |= 0x80U; @@ -1828,15 +1832,15 @@ bool CSerialModem::setConfig() buffer[23U] = (unsigned char)m_nxdnTXHang; buffer[24U] = (unsigned char)(m_ax25TXLevel * 2.55F + 0.5F); - buffer[25U] = (unsigned char)(m_ax25RXTwist + 128); - buffer[26U] = m_ax25TXDelay / 10U; // In 10ms units + buffer[27U] = m_ax25SlotTime / 10U; // In 10ms units + buffer[28U] = m_ax25PPersist; - // CUtils::dump(1U, "Written", buffer, 27U); + // CUtils::dump(1U, "Written", buffer, 29U); - int ret = m_serial->write(buffer, 27U); - if (ret != 27) + int ret = m_serial->write(buffer, 29U); + if (ret != 29) return false; unsigned int count = 0U; diff --git a/SerialModem.h b/SerialModem.h index e1ef578..9ec4d85 100644 --- a/SerialModem.h +++ b/SerialModem.h @@ -55,7 +55,7 @@ public: virtual void setYSFParams(bool loDev, unsigned int txHang); virtual void setP25Params(unsigned int txHang); virtual void setNXDNParams(unsigned int txHang); - virtual void setAX25Params(int rxTwist, unsigned int txDelay); + virtual void setAX25Params(int rxTwist, unsigned int txDelay, unsigned int slotTime, unsigned int pPersist); virtual void setTransparentDataParams(unsigned int sendFrameType); virtual void setFMCallsignParams(const std::string& callsign, unsigned int callsignSpeed, unsigned int callsignFrequency, unsigned int callsignTime, unsigned int callsignHoldoff, float callsignHighLevel, float callsignLowLevel, bool callsignAtStart, bool callsignAtEnd, bool callsignAtLatch); @@ -216,6 +216,8 @@ private: HW_TYPE m_hwType; int m_ax25RXTwist; unsigned int m_ax25TXDelay; + unsigned int m_ax25SlotTime; + unsigned int m_ax25PPersist; std::string m_fmCallsign; unsigned int m_fmCallsignSpeed; diff --git a/Version.h b/Version.h index bb444d2..9a9d6e3 100644 --- a/Version.h +++ b/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20200630"; +const char* VERSION = "20200701"; #endif