Add AX25 SlotTime and P-Persist parameters.

This commit is contained in:
Jonathan Naylor 2020-07-01 10:59:46 +01:00
parent d0fa27bfd1
commit d2be920254
9 changed files with 60 additions and 26 deletions

View file

@ -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

8
Conf.h
View file

@ -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;

View file

@ -183,6 +183,8 @@ ExtAudioBoost=1
Enable=1
TXDelay=300
RXTwist=6
SlotTime=30
PPersist=128
Trace=1
[D-Star Network]

View file

@ -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();

View file

@ -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;

View file

@ -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) {};

View file

@ -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;

View file

@ -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;

View file

@ -19,6 +19,6 @@
#if !defined(VERSION_H)
#define VERSION_H
const char* VERSION = "20200630";
const char* VERSION = "20200701";
#endif