Remove AX.25

This commit is contained in:
Jonathan Naylor
2025-08-26 15:14:00 +01:00
parent 9720c7a40d
commit cf97dc3096
23 changed files with 27 additions and 1052 deletions

127
Modem.cpp
View File

@@ -21,7 +21,6 @@
#include "YSFDefines.h"
#include "P25Defines.h"
#include "NXDNDefines.h"
#include "AX25Defines.h"
#include "POCSAGDefines.h"
#include "Thread.h"
#include "Modem.h"
@@ -75,8 +74,6 @@ const unsigned char MMDVM_NXDN_LOST = 0x41U;
const unsigned char MMDVM_POCSAG_DATA = 0x50U;
const unsigned char MMDVM_AX25_DATA = 0x55U;
const unsigned char MMDVM_FM_PARAMS1 = 0x60U;
const unsigned char MMDVM_FM_PARAMS2 = 0x61U;
const unsigned char MMDVM_FM_PARAMS3 = 0x62U;
@@ -111,7 +108,6 @@ const unsigned char CAP1_P25 = 0x08U;
const unsigned char CAP1_NXDN = 0x10U;
const unsigned char CAP1_FM = 0x40U;
const unsigned char CAP2_POCSAG = 0x01U;
const unsigned char CAP2_AX25 = 0x02U;
CModem::CModem(bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool useCOSAsLockout, bool trace, bool debug) :
@@ -136,7 +132,6 @@ m_p25TXLevel(0.0F),
m_nxdnTXLevel(0.0F),
m_pocsagTXLevel(0.0F),
m_fmTXLevel(0.0F),
m_ax25TXLevel(0.0F),
m_rfLevel(0.0F),
m_useCOSAsLockout(useCOSAsLockout),
m_trace(trace),
@@ -151,7 +146,6 @@ m_p25Enabled(false),
m_nxdnEnabled(false),
m_pocsagEnabled(false),
m_fmEnabled(false),
m_ax25Enabled(false),
m_rxDCOffset(0),
m_txDCOffset(0),
m_port(nullptr),
@@ -175,8 +169,6 @@ m_txNXDNData(1000U, "Modem TX NXDN"),
m_txPOCSAGData(1000U, "Modem TX POCSAG"),
m_rxFMData(5000U, "Modem RX FM"),
m_txFMData(5000U, "Modem TX FM"),
m_rxAX25Data(1000U, "Modem RX AX.25"),
m_txAX25Data(1000U, "Modem TX AX.25"),
m_rxSerialData(1000U, "Modem RX Serial"),
m_txSerialData(1000U, "Modem TX Serial"),
m_rxTransparentData(1000U, "Modem RX Transparent"),
@@ -193,17 +185,12 @@ m_p25Space(0U),
m_nxdnSpace(0U),
m_pocsagSpace(0U),
m_fmSpace(0U),
m_ax25Space(0U),
m_tx(false),
m_cd(false),
m_lockout(false),
m_error(false),
m_mode(MODE_IDLE),
m_hwType(HW_TYPE::UNKNOWN),
m_ax25RXTwist(0),
m_ax25TXDelay(300U),
m_ax25SlotTime(30U),
m_ax25PPersist(128U),
m_fmCallsign(),
m_fmCallsignSpeed(20U),
m_fmCallsignFrequency(1000U),
@@ -268,7 +255,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, bool fmEnabled, bool ax25Enabled)
void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool pocsagEnabled, bool fmEnabled)
{
m_dstarEnabled = dstarEnabled;
m_dmrEnabled = dmrEnabled;
@@ -277,10 +264,9 @@ void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled,
m_nxdnEnabled = nxdnEnabled;
m_pocsagEnabled = pocsagEnabled;
m_fmEnabled = fmEnabled;
m_ax25Enabled = ax25Enabled;
}
void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagTXLevel, float fmTXLevel, float ax25TXLevel)
void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagTXLevel, float fmTXLevel)
{
m_rxLevel = rxLevel;
m_cwIdTXLevel = cwIdTXLevel;
@@ -291,7 +277,6 @@ void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, flo
m_nxdnTXLevel = nxdnTXLevel;
m_pocsagTXLevel = pocsagTXLevel;
m_fmTXLevel = fmTXLevel;
m_ax25TXLevel = ax25TXLevel;
}
void CModem::setDMRParams(unsigned int colorCode)
@@ -317,14 +302,6 @@ void CModem::setNXDNParams(unsigned int txHang)
m_nxdnTXHang = txHang;
}
void CModem::setAX25Params(int rxTwist, unsigned int txDelay, unsigned int slotTime, unsigned int pPersist)
{
m_ax25RXTwist = rxTwist;
m_ax25TXDelay = txDelay;
m_ax25SlotTime = slotTime;
m_ax25PPersist = pPersist;
}
void CModem::setTransparentDataParams(unsigned int sendFrameType)
{
m_sendTransparentDataFrameType = sendFrameType;
@@ -685,17 +662,6 @@ void CModem::clock(unsigned int ms)
}
break;
case MMDVM_AX25_DATA: {
if (m_trace)
CUtils::dump(1U, "RX AX.25 Data", m_buffer, m_length);
unsigned int data = m_length - m_offset;
m_rxAX25Data.addData((unsigned char*)&data, sizeof(unsigned int));
m_rxAX25Data.addData(m_buffer + m_offset, m_length - m_offset);
}
break;
case MMDVM_GET_STATUS:
// if (m_trace)
// CUtils::dump(1U, "GET_STATUS", m_buffer, m_length);
@@ -724,7 +690,6 @@ void CModem::clock(unsigned int ms)
m_nxdnSpace = 0U;
m_pocsagSpace = 0U;
m_fmSpace = 0U;
m_ax25Space = 0U;
m_dstarSpace = m_buffer[m_offset + 3U];
m_dmrSpace1 = m_buffer[m_offset + 4U];
@@ -768,7 +733,6 @@ void CModem::clock(unsigned int ms)
m_nxdnSpace = m_buffer[m_offset + 8U];
m_fmSpace = m_buffer[m_offset + 10U];
m_pocsagSpace = m_buffer[m_offset + 11U];
m_ax25Space = m_buffer[m_offset + 12U];
}
break;
@@ -781,7 +745,6 @@ void CModem::clock(unsigned int ms)
m_nxdnSpace = 0U;
m_pocsagSpace = 0U;
m_fmSpace = 0U;
m_ax25Space = 0U;
break;
}
@@ -1002,23 +965,6 @@ void CModem::clock(unsigned int ms)
m_fmSpace--;
}
if (m_ax25Space > 0U && !m_txAX25Data.isEmpty()) {
unsigned int len = 0U;
m_txAX25Data.getData((unsigned char*)&len, sizeof(unsigned int));
m_txAX25Data.getData(m_buffer, len);
if (m_trace)
CUtils::dump(1U, "TX AX.25 Data", m_buffer, len);
int ret = m_port->write(m_buffer, len);
if (ret != int(len))
LogWarning("Error when writing AX.25 data to the MMDVM");
m_playoutTimer.start();
m_ax25Space = 0U;
}
if (!m_txTransparentData.isEmpty()) {
unsigned char len = 0U;
m_txTransparentData.getData(&len, 1U);
@@ -1153,20 +1099,6 @@ unsigned int CModem::readFMData(unsigned char* data)
return len;
}
unsigned int CModem::readAX25Data(unsigned char* data)
{
assert(data != nullptr);
if (m_rxAX25Data.isEmpty())
return 0U;
unsigned int len = 0U;
m_rxAX25Data.getData((unsigned char*)&len, sizeof(unsigned int));
m_rxAX25Data.getData(data, len);
return len;
}
unsigned int CModem::readTransparentData(unsigned char* data)
{
assert(data != nullptr);
@@ -1447,42 +1379,6 @@ bool CModem::writeFMData(const unsigned char* data, unsigned int length)
return true;
}
bool CModem::hasAX25Space() const
{
unsigned int space = m_txAX25Data.freeSpace() / (AX25_MAX_FRAME_LENGTH_BYTES + 5U);
return space > 1U;
}
bool CModem::writeAX25Data(const unsigned char* data, unsigned int length)
{
assert(data != nullptr);
assert(length > 0U);
unsigned char buffer[500U];
unsigned int len;
if (length > 252U) {
buffer[0U] = MMDVM_FRAME_START;
buffer[1U] = 0U;
buffer[2U] = (length + 4U) - 255U;
buffer[3U] = MMDVM_AX25_DATA;
::memcpy(buffer + 4U, data, length);
len = length + 4U;
} else {
buffer[0U] = MMDVM_FRAME_START;
buffer[1U] = length + 3U;
buffer[2U] = MMDVM_AX25_DATA;
::memcpy(buffer + 3U, data, length);
len = length + 3U;
}
m_txAX25Data.addData((unsigned char*)&len, sizeof(unsigned int));
m_txAX25Data.addData(buffer, len);
return true;
}
bool CModem::writeTransparentData(const unsigned char* data, unsigned int length)
{
assert(data != nullptr);
@@ -1770,11 +1666,6 @@ bool CModem::hasPOCSAG() const
return (m_capabilities2 & CAP2_POCSAG) == CAP2_POCSAG;
}
bool CModem::hasAX25() const
{
return (m_capabilities2 & CAP2_AX25) == CAP2_AX25;
}
unsigned int CModem::getVersion() const
{
return m_protocolVersion;
@@ -1875,8 +1766,6 @@ bool CModem::readVersion()
::strcat(modeText, " FM");
if (hasPOCSAG())
::strcat(modeText, " POCSAG");
if (hasAX25())
::strcat(modeText, " AX.25");
LogInfo(modeText);
return true;
@@ -2082,8 +1971,6 @@ bool CModem::setConfig2()
buffer[5U] = 0x00U;
if (m_pocsagEnabled)
buffer[5U] |= 0x01U;
if (m_ax25Enabled)
buffer[5U] |= 0x02U;
buffer[6U] = m_txDelay / 10U; // In 10ms units
@@ -2103,7 +1990,7 @@ bool CModem::setConfig2()
buffer[17U] = 0x00U;
buffer[18U] = (unsigned char)(m_pocsagTXLevel * 2.55F + 0.5F);
buffer[19U] = (unsigned char)(m_fmTXLevel * 2.55F + 0.5F);
buffer[20U] = (unsigned char)(m_ax25TXLevel * 2.55F + 0.5F);
buffer[20U] = 0x00U;
buffer[21U] = 0x00U;
buffer[22U] = 0x00U;
@@ -2117,10 +2004,10 @@ bool CModem::setConfig2()
buffer[29U] = m_dmrColorCode;
buffer[30U] = m_dmrDelay;
buffer[31U] = (unsigned char)(m_ax25RXTwist + 128);
buffer[32U] = m_ax25TXDelay / 10U; // In 10ms units
buffer[33U] = m_ax25SlotTime / 10U; // In 10ms units
buffer[34U] = m_ax25PPersist;
buffer[31U] = 0x00U;
buffer[32U] = 0x00U;
buffer[33U] = 0x00U;
buffer[34U] = 0x00U;
buffer[35U] = 0x00U;
buffer[36U] = 0x00U;