mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-22 08:05:49 +08:00
Initial code for AX.25 support.
This commit is contained in:
37
Modem.cpp
37
Modem.cpp
@@ -76,6 +76,8 @@ 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;
|
||||
@@ -133,6 +135,7 @@ m_p25Enabled(false),
|
||||
m_nxdnEnabled(false),
|
||||
m_pocsagEnabled(false),
|
||||
m_fmEnabled(false),
|
||||
m_ax25Enabled(false),
|
||||
m_rxDCOffset(0),
|
||||
m_txDCOffset(0),
|
||||
m_serial(NULL),
|
||||
@@ -152,6 +155,7 @@ m_txP25Data(1000U, "Modem TX P25"),
|
||||
m_rxNXDNData(1000U, "Modem RX NXDN"),
|
||||
m_txNXDNData(1000U, "Modem TX NXDN"),
|
||||
m_txPOCSAGData(1000U, "Modem TX POCSAG"),
|
||||
m_rxAX25Data(1000U, "Modem RX AX.25"),
|
||||
m_rxTransparentData(1000U, "Modem RX Transparent"),
|
||||
m_txTransparentData(1000U, "Modem TX Transparent"),
|
||||
m_sendTransparentDataFrameType(0U),
|
||||
@@ -230,7 +234,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)
|
||||
void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool pocsagEnabled, bool fmEnabled, bool ax25Enabled)
|
||||
{
|
||||
m_dstarEnabled = dstarEnabled;
|
||||
m_dmrEnabled = dmrEnabled;
|
||||
@@ -239,6 +243,7 @@ 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)
|
||||
@@ -585,6 +590,20 @@ 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 char data = m_length - 2U;
|
||||
m_rxAX25Data.addData(&data, 1U);
|
||||
|
||||
data = TAG_DATA;
|
||||
m_rxAX25Data.addData(&data, 1U);
|
||||
|
||||
m_rxAX25Data.addData(m_buffer + 3U, m_length - 3U);
|
||||
}
|
||||
break;
|
||||
|
||||
case MMDVM_GET_STATUS: {
|
||||
// if (m_trace)
|
||||
// CUtils::dump(1U, "GET_STATUS", m_buffer, m_length);
|
||||
@@ -941,6 +960,20 @@ unsigned int CModem::readNXDNData(unsigned char* data)
|
||||
return len;
|
||||
}
|
||||
|
||||
unsigned int CModem::readAX25Data(unsigned char* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
||||
if (m_rxAX25Data.isEmpty())
|
||||
return 0U;
|
||||
|
||||
unsigned char len = 0U;
|
||||
m_rxAX25Data.getData(&len, 1U);
|
||||
m_rxAX25Data.getData(data, len);
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
unsigned int CModem::readTransparentData(unsigned char* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
@@ -1552,6 +1585,8 @@ bool CModem::setConfig()
|
||||
buffer[4U] |= 0x20U;
|
||||
if (m_fmEnabled && m_duplex)
|
||||
buffer[4U] |= 0x40U;
|
||||
if (m_ax25Enabled)
|
||||
buffer[4U] |= 0x80U;
|
||||
|
||||
buffer[5U] = m_txDelay / 10U; // In 10ms units
|
||||
|
||||
|
||||
Reference in New Issue
Block a user