Add the AX.25 modem parameters and start reworking the AX,25 RX
processing.
This commit is contained in:
parent
fe77cbd68c
commit
692d6519db
|
@ -51,12 +51,10 @@ bool CAX25Control::writeModem(unsigned char *data, unsigned int len)
|
|||
|
||||
CUtils::dump(1U, "AX.25 raw packet", data, len);
|
||||
|
||||
if (m_network != NULL) {
|
||||
if (isUI(data, len))
|
||||
m_network->writeAX25(data, len);
|
||||
}
|
||||
if (m_network == NULL)
|
||||
return true;
|
||||
|
||||
return true;
|
||||
return m_network->write(data, len);
|
||||
}
|
||||
|
||||
bool CAX25Control::openFile()
|
||||
|
@ -233,15 +231,3 @@ bool CAX25Control::decodeAddress(const unsigned char* data, std::string& text, b
|
|||
|
||||
return (data[6U] & 0x01U) == 0x00U;
|
||||
}
|
||||
|
||||
bool CAX25Control::isUI(const unsigned char* data, unsigned int length) const
|
||||
{
|
||||
assert(data != NULL);
|
||||
assert(length >= 15U);
|
||||
|
||||
unsigned int n = 13U;
|
||||
while ((data[n] & 0x01U) == 0x00U && n < length)
|
||||
n += 7U;
|
||||
|
||||
return (data[n + 1U] & 0xEFU) == 0x03U;
|
||||
}
|
||||
|
|
|
@ -38,7 +38,6 @@ private:
|
|||
bool m_enabled;
|
||||
FILE* m_fp;
|
||||
|
||||
bool isUI(const unsigned char* data, unsigned int length) const;
|
||||
void decode(const unsigned char* data, unsigned int length);
|
||||
bool decodeAddress(const unsigned char* data, std::string& text, bool isDigi = false) const;
|
||||
bool openFile();
|
||||
|
|
|
@ -27,34 +27,38 @@
|
|||
|
||||
const unsigned int BUFFER_LENGTH = 200U;
|
||||
|
||||
CAX25Network::CAX25Network(const std::string& localAddress, unsigned int localPort, const std::string& gatewayAddress, unsigned int gatewayPort, bool debug) :
|
||||
m_socket(localAddress, localPort),
|
||||
m_address(),
|
||||
m_port(gatewayPort),
|
||||
CAX25Network::CAX25Network(const std::string& port, unsigned int speed, bool debug) :
|
||||
m_serial(port, SERIAL_SPEED(speed), false), // XXX
|
||||
m_txData(NULL),
|
||||
m_txLength(0U),
|
||||
m_txOffset(0U),
|
||||
m_rxData(NULL),
|
||||
m_rxLength(0U),
|
||||
m_rxComplete(false),
|
||||
m_debug(debug),
|
||||
m_enabled(false)
|
||||
{
|
||||
assert(gatewayPort > 0U);
|
||||
assert(!gatewayAddress.empty());
|
||||
assert(!port.empty());
|
||||
assert(speed > 0U);
|
||||
|
||||
m_address = CUDPSocket::lookup(gatewayAddress);
|
||||
m_txData = new unsigned char[BUFFER_LENGTH];
|
||||
m_rxData = new unsigned char[BUFFER_LENGTH];
|
||||
}
|
||||
|
||||
CAX25Network::~CAX25Network()
|
||||
{
|
||||
delete[] m_txData;
|
||||
delete[] m_rxData;
|
||||
}
|
||||
|
||||
bool CAX25Network::open()
|
||||
{
|
||||
LogMessage("Opening AX25 network connection");
|
||||
|
||||
if (m_address.s_addr == INADDR_NONE)
|
||||
return false;
|
||||
|
||||
return m_socket.open();
|
||||
return m_serial.open();
|
||||
}
|
||||
|
||||
bool CAX25Network::writeAX25(const unsigned char* data, unsigned int length)
|
||||
bool CAX25Network::write(const unsigned char* data, unsigned int length)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
||||
|
@ -80,7 +84,7 @@ void CAX25Network::reset()
|
|||
|
||||
void CAX25Network::close()
|
||||
{
|
||||
m_socket.close();
|
||||
m_serial.close();
|
||||
|
||||
LogMessage("Closing AX25 network connection");
|
||||
}
|
||||
|
|
|
@ -19,32 +19,38 @@
|
|||
#ifndef AX25Network_H
|
||||
#define AX25Network_H
|
||||
|
||||
#include "UDPSocket.h"
|
||||
#include "SerialController.h"
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
class CAX25Network {
|
||||
public:
|
||||
CAX25Network(const std::string& localAddress, unsigned int localPort, const std::string& gatewayAddress, unsigned int gatewayPort, bool debug);
|
||||
CAX25Network(const std::string& port, unsigned int speed, bool debug);
|
||||
~CAX25Network();
|
||||
|
||||
bool open();
|
||||
|
||||
void enable(bool enabled);
|
||||
|
||||
bool writeAX25(const unsigned char* data, unsigned int length);
|
||||
bool write(const unsigned char* data, unsigned int length);
|
||||
|
||||
unsigned int read(unsigned char* data, unsigned int length);
|
||||
|
||||
void reset();
|
||||
|
||||
void close();
|
||||
|
||||
private:
|
||||
CUDPSocket m_socket;
|
||||
in_addr m_address;
|
||||
unsigned int m_port;
|
||||
bool m_debug;
|
||||
bool m_enabled;
|
||||
CSerialController m_serial;
|
||||
unsigned char* m_txData;
|
||||
unsigned int m_txLength;
|
||||
unsigned int m_txOffset;
|
||||
unsigned char* m_rxData;
|
||||
unsigned int m_rxLength;
|
||||
bool m_rxComplete;
|
||||
bool m_debug;
|
||||
bool m_enabled;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
52
Conf.cpp
52
Conf.cpp
|
@ -211,7 +211,6 @@ m_fmExtAudioBoost(1U),
|
|||
m_ax25Enabled(false),
|
||||
m_ax25RXTwist(6),
|
||||
m_ax25TXTwist(6),
|
||||
m_ax25Digipeat(true),
|
||||
m_ax25Trace(false),
|
||||
m_dstarNetworkEnabled(false),
|
||||
m_dstarGatewayAddress(),
|
||||
|
@ -259,10 +258,8 @@ m_pocsagLocalPort(0U),
|
|||
m_pocsagNetworkModeHang(3U),
|
||||
m_pocsagNetworkDebug(false),
|
||||
m_ax25NetworkEnabled(false),
|
||||
m_ax25GatewayAddress(),
|
||||
m_ax25GatewayPort(0U),
|
||||
m_ax25LocalAddress(),
|
||||
m_ax25LocalPort(0U),
|
||||
m_ax25NetworkPort(),
|
||||
m_ax25NetworkSpeed(9600U),
|
||||
m_ax25NetworkDebug(false),
|
||||
m_tftSerialPort("/dev/ttyAMA0"),
|
||||
m_tftSerialBrightness(50U),
|
||||
|
@ -802,8 +799,6 @@ bool CConf::read()
|
|||
m_ax25RXTwist = ::atoi(value);
|
||||
else if (::strcmp(key, "TXTwist") == 0)
|
||||
m_ax25TXTwist = ::atoi(value);
|
||||
else if (::strcmp(key, "Digipeat") == 0)
|
||||
m_ax25Digipeat = ::atoi(value) == 1;
|
||||
else if (::strcmp(key, "Trace") == 0)
|
||||
m_ax25Trace = ::atoi(value) == 1;
|
||||
} else if (section == SECTION_DSTAR_NETWORK) {
|
||||
|
@ -903,18 +898,14 @@ bool CConf::read()
|
|||
else if (::strcmp(key, "Debug") == 0)
|
||||
m_pocsagNetworkDebug = ::atoi(value) == 1;
|
||||
} else if (section == SECTION_AX25_NETWORK) {
|
||||
if (::strcmp(key, "Enable") == 0)
|
||||
m_ax25NetworkEnabled = ::atoi(value) == 1;
|
||||
else if (::strcmp(key, "LocalAddress") == 0)
|
||||
m_ax25LocalAddress = value;
|
||||
else if (::strcmp(key, "LocalPort") == 0)
|
||||
m_ax25LocalPort = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "GatewayAddress") == 0)
|
||||
m_ax25GatewayAddress = value;
|
||||
else if (::strcmp(key, "GatewayPort") == 0)
|
||||
m_ax25GatewayPort = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "Debug") == 0)
|
||||
m_ax25NetworkDebug = ::atoi(value) == 1;
|
||||
if (::strcmp(key, "Enable") == 0)
|
||||
m_ax25NetworkEnabled = ::atoi(value) == 1;
|
||||
else if (::strcmp(key, "Port") == 0)
|
||||
m_ax25NetworkPort = value;
|
||||
else if (::strcmp(key, "Speed") == 0)
|
||||
m_ax25NetworkSpeed = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "Debug") == 0)
|
||||
m_ax25NetworkDebug = ::atoi(value) == 1;
|
||||
} else if (section == SECTION_TFTSERIAL) {
|
||||
if (::strcmp(key, "Port") == 0)
|
||||
m_tftSerialPort = value;
|
||||
|
@ -1743,11 +1734,6 @@ int CConf::getAX25TXTwist() const
|
|||
return m_ax25TXTwist;
|
||||
}
|
||||
|
||||
bool CConf::getAX25Digipeat() const
|
||||
{
|
||||
return m_ax25Digipeat;
|
||||
}
|
||||
|
||||
bool CConf::getAX25Trace() const
|
||||
{
|
||||
return m_ax25Trace;
|
||||
|
@ -1983,24 +1969,14 @@ bool CConf::getAX25NetworkEnabled() const
|
|||
return m_ax25NetworkEnabled;
|
||||
}
|
||||
|
||||
std::string CConf::getAX25GatewayAddress() const
|
||||
std::string CConf::getAX25NetworkPort() const
|
||||
{
|
||||
return m_ax25GatewayAddress;
|
||||
return m_ax25NetworkPort;
|
||||
}
|
||||
|
||||
unsigned int CConf::getAX25GatewayPort() const
|
||||
unsigned int CConf::getAX25NetworkSpeed() const
|
||||
{
|
||||
return m_ax25GatewayPort;
|
||||
}
|
||||
|
||||
std::string CConf::getAX25LocalAddress() const
|
||||
{
|
||||
return m_ax25LocalAddress;
|
||||
}
|
||||
|
||||
unsigned int CConf::getAX25LocalPort() const
|
||||
{
|
||||
return m_ax25LocalPort;
|
||||
return m_ax25NetworkSpeed;
|
||||
}
|
||||
|
||||
bool CConf::getAX25NetworkDebug() const
|
||||
|
|
14
Conf.h
14
Conf.h
|
@ -176,7 +176,6 @@ public:
|
|||
bool getAX25Enabled() const;
|
||||
int getAX25RXTwist() const;
|
||||
int getAX25TXTwist() const;
|
||||
bool getAX25Digipeat() const;
|
||||
bool getAX25Trace() const;
|
||||
|
||||
// The FM Section
|
||||
|
@ -271,10 +270,8 @@ public:
|
|||
|
||||
// The AX.25 Network section
|
||||
bool getAX25NetworkEnabled() const;
|
||||
std::string getAX25GatewayAddress() const;
|
||||
unsigned int getAX25GatewayPort() const;
|
||||
std::string getAX25LocalAddress() const;
|
||||
unsigned int getAX25LocalPort() const;
|
||||
std::string getAX25NetworkPort() const;
|
||||
unsigned int getAX25NetworkSpeed() const;
|
||||
bool getAX25NetworkDebug() const;
|
||||
|
||||
// The TFTSERIAL section
|
||||
|
@ -463,7 +460,6 @@ private:
|
|||
bool m_ax25Enabled;
|
||||
int m_ax25RXTwist;
|
||||
int m_ax25TXTwist;
|
||||
bool m_ax25Digipeat;
|
||||
bool m_ax25Trace;
|
||||
|
||||
bool m_fmEnabled;
|
||||
|
@ -550,10 +546,8 @@ private:
|
|||
bool m_pocsagNetworkDebug;
|
||||
|
||||
bool m_ax25NetworkEnabled;
|
||||
std::string m_ax25GatewayAddress;
|
||||
unsigned int m_ax25GatewayPort;
|
||||
std::string m_ax25LocalAddress;
|
||||
unsigned int m_ax25LocalPort;
|
||||
std::string m_ax25NetworkPort;
|
||||
unsigned int m_ax25NetworkSpeed;
|
||||
bool m_ax25NetworkDebug;
|
||||
|
||||
std::string m_tftSerialPort;
|
||||
|
|
|
@ -180,7 +180,6 @@ ExtAudioBoost=1
|
|||
Enable=1
|
||||
TXTwist=6
|
||||
RXTwist=6
|
||||
Digipeat=1
|
||||
Trace=1
|
||||
|
||||
[D-Star Network]
|
||||
|
@ -242,10 +241,8 @@ Debug=0
|
|||
|
||||
[AX.25 Network]
|
||||
Enable=1
|
||||
LocalAddress=127.0.0.1
|
||||
LocalPort=47325
|
||||
GatewayAddress=127.0.0.1
|
||||
GatewayPort=47326
|
||||
Port=/dev/ttyp7
|
||||
Speed=9600
|
||||
Debug=0
|
||||
|
||||
[TFT Serial]
|
||||
|
|
|
@ -626,18 +626,16 @@ int CMMDVMHost::run()
|
|||
}
|
||||
|
||||
if (m_ax25Enabled) {
|
||||
int rxTwist = m_conf.getAX25RXTwist();
|
||||
int txTwist = m_conf.getAX25TXTwist();
|
||||
bool digipeat = m_conf.getAX25Digipeat();
|
||||
bool trace = m_conf.getAX25Trace();
|
||||
int rxTwist = m_conf.getAX25RXTwist();
|
||||
int txTwist = m_conf.getAX25TXTwist();
|
||||
bool trace = m_conf.getAX25Trace();
|
||||
|
||||
LogInfo("AX.25 RF Parameters");
|
||||
LogInfo(" RXTwist: %d", rxTwist);
|
||||
LogInfo(" TXTwist: %d", txTwist);
|
||||
LogInfo(" Digipeat: %s", digipeat ? "yes" : "no");
|
||||
LogInfo(" Trace: %s", trace ? "yes" : "no");
|
||||
|
||||
m_ax25 = new CAX25Control(m_ax25Network, digipeat, trace);
|
||||
m_ax25 = new CAX25Control(m_ax25Network, trace);
|
||||
}
|
||||
|
||||
bool remoteControlEnabled = m_conf.getRemoteControlEnabled();
|
||||
|
@ -1584,19 +1582,15 @@ bool CMMDVMHost::createPOCSAGNetwork()
|
|||
|
||||
bool CMMDVMHost::createAX25Network()
|
||||
{
|
||||
std::string gatewayAddress = m_conf.getAX25GatewayAddress();
|
||||
unsigned int gatewayPort = m_conf.getAX25GatewayPort();
|
||||
std::string localAddress = m_conf.getAX25LocalAddress();
|
||||
unsigned int localPort = m_conf.getAX25LocalPort();
|
||||
bool debug = m_conf.getAX25NetworkDebug();
|
||||
std::string port = m_conf.getAX25NetworkPort();
|
||||
unsigned int speed = m_conf.getAX25NetworkSpeed();
|
||||
bool debug = m_conf.getAX25NetworkDebug();
|
||||
|
||||
LogInfo("AX.25 Network Parameters");
|
||||
LogInfo(" Gateway Address: %s", gatewayAddress.c_str());
|
||||
LogInfo(" Gateway Port: %u", gatewayPort);
|
||||
LogInfo(" Local Address: %s", localAddress.c_str());
|
||||
LogInfo(" Local Port: %u", localPort);
|
||||
LogInfo(" Port: %s", port.c_str());
|
||||
LogInfo(" Speed: %u", speed);
|
||||
|
||||
m_ax25Network = new CAX25Network(localAddress, localPort, gatewayAddress, gatewayPort, debug);
|
||||
m_ax25Network = new CAX25Network(port, speed, debug);
|
||||
|
||||
bool ret = m_ax25Network->open();
|
||||
if (!ret) {
|
||||
|
|
45
Modem.cpp
45
Modem.cpp
|
@ -114,15 +114,17 @@ m_txInvert(txInvert),
|
|||
m_pttInvert(pttInvert),
|
||||
m_txDelay(txDelay),
|
||||
m_dmrDelay(dmrDelay),
|
||||
m_rxLevel(0U),
|
||||
m_cwIdTXLevel(0U),
|
||||
m_dstarTXLevel(0U),
|
||||
m_dmrTXLevel(0U),
|
||||
m_ysfTXLevel(0U),
|
||||
m_p25TXLevel(0U),
|
||||
m_nxdnTXLevel(0U),
|
||||
m_pocsagTXLevel(0U),
|
||||
m_fmTXLevel(0U),
|
||||
m_rxLevel(0.0F),
|
||||
m_cwIdTXLevel(0.0F),
|
||||
m_dstarTXLevel(0.0F),
|
||||
m_dmrTXLevel(0.0F),
|
||||
m_ysfTXLevel(0.0F),
|
||||
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_trace(trace),
|
||||
m_debug(debug),
|
||||
m_rxFrequency(0U),
|
||||
|
@ -177,6 +179,8 @@ m_lockout(false),
|
|||
m_error(false),
|
||||
m_mode(MODE_IDLE),
|
||||
m_hwType(HWT_UNKNOWN),
|
||||
m_ax25RXTwist(0),
|
||||
m_ax25TXTwist(0),
|
||||
m_fmCallsign(),
|
||||
m_fmCallsignSpeed(20U),
|
||||
m_fmCallsignFrequency(1000U),
|
||||
|
@ -248,7 +252,7 @@ void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled,
|
|||
m_ax25Enabled = ax25Enabled;
|
||||
}
|
||||
|
||||
void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagTXLevel, float fmTXLevel)
|
||||
void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagTXLevel, float fmTXLevel, float ax25TXLevel)
|
||||
{
|
||||
m_rxLevel = rxLevel;
|
||||
m_cwIdTXLevel = cwIdTXLevel;
|
||||
|
@ -259,6 +263,7 @@ 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)
|
||||
|
@ -284,6 +289,12 @@ void CModem::setNXDNParams(unsigned int txHang)
|
|||
m_nxdnTXHang = txHang;
|
||||
}
|
||||
|
||||
void CModem::setAX25Params(int rxTwist, int txTwist)
|
||||
{
|
||||
m_ax25RXTwist = rxTwist;
|
||||
m_ax25TXTwist = txTwist;
|
||||
}
|
||||
|
||||
void CModem::setTransparentDataParams(unsigned int sendFrameType)
|
||||
{
|
||||
m_sendTransparentDataFrameType = sendFrameType;
|
||||
|
@ -1551,7 +1562,7 @@ bool CModem::setConfig()
|
|||
|
||||
buffer[0U] = MMDVM_FRAME_START;
|
||||
|
||||
buffer[1U] = 24U;
|
||||
buffer[1U] = 27U;
|
||||
|
||||
buffer[2U] = MMDVM_SET_CONFIG;
|
||||
|
||||
|
@ -1621,10 +1632,16 @@ bool CModem::setConfig()
|
|||
|
||||
buffer[23U] = (unsigned char)m_nxdnTXHang;
|
||||
|
||||
// CUtils::dump(1U, "Written", buffer, 24U);
|
||||
buffer[24U] = (unsigned char)(m_ax25TXLevel * 2.55F + 0.5F);
|
||||
|
||||
int ret = m_serial->write(buffer, 24U);
|
||||
if (ret != 24)
|
||||
buffer[25U] = (unsigned char)(m_ax25RXTwist + 128);
|
||||
|
||||
buffer[26U] = (unsigned char)(m_ax25TXTwist + 128);
|
||||
|
||||
// CUtils::dump(1U, "Written", buffer, 27U);
|
||||
|
||||
int ret = m_serial->write(buffer, 27U);
|
||||
if (ret != 27)
|
||||
return false;
|
||||
|
||||
unsigned int count = 0U;
|
||||
|
|
6
Modem.h
6
Modem.h
|
@ -48,11 +48,12 @@ 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, bool fmEnabled, bool ax25Enabled);
|
||||
virtual void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagLevel, float fmTXLevel);
|
||||
virtual void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagLevel, float fmTXLevel, float ax25TXLevel);
|
||||
virtual void setDMRParams(unsigned int colorCode);
|
||||
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, int txTwist);
|
||||
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);
|
||||
|
@ -146,6 +147,7 @@ private:
|
|||
float m_nxdnTXLevel;
|
||||
float m_pocsagTXLevel;
|
||||
float m_fmTXLevel;
|
||||
float m_ax25TXLevel;
|
||||
float m_rfLevel;
|
||||
bool m_trace;
|
||||
bool m_debug;
|
||||
|
@ -201,6 +203,8 @@ private:
|
|||
bool m_error;
|
||||
unsigned char m_mode;
|
||||
HW_TYPE m_hwType;
|
||||
int m_ax25RXTwist;
|
||||
int m_ax25TXTwist;
|
||||
|
||||
std::string m_fmCallsign;
|
||||
unsigned int m_fmCallsignSpeed;
|
||||
|
|
Loading…
Reference in a new issue