Fixing some APRS packet structures
This commit is contained in:
parent
25e7631c09
commit
0451f6aca9
@ -8,10 +8,10 @@
|
|||||||
const int PACKET_TIMEOUT_SECONDS = 300;
|
const int PACKET_TIMEOUT_SECONDS = 300;
|
||||||
|
|
||||||
APRSISClient::APRSISClient(QString host, quint16 port, QObject *parent):
|
APRSISClient::APRSISClient(QString host, quint16 port, QObject *parent):
|
||||||
QTcpSocket(parent),
|
QTcpSocket(parent)
|
||||||
m_host(host),
|
|
||||||
m_port(port)
|
|
||||||
{
|
{
|
||||||
|
setServer(host, port);
|
||||||
|
|
||||||
connect(&m_timer, &QTimer::timeout, this, &APRSISClient::sendReports);
|
connect(&m_timer, &QTimer::timeout, this, &APRSISClient::sendReports);
|
||||||
m_timer.setInterval(60*1000); // every 60 seconds
|
m_timer.setInterval(60*1000); // every 60 seconds
|
||||||
m_timer.start();
|
m_timer.start();
|
||||||
@ -184,13 +184,31 @@ QPair<QString, QString> APRSISClient::grid2aprs(QString grid){
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString APRSISClient::replaceCallsignSuffixWithSSID(QString call, QString base){
|
||||||
|
if(call != base){
|
||||||
|
QRegularExpression re("[/](?<ssid>(P|\\d+))");
|
||||||
|
auto matcher = re.globalMatch(call);
|
||||||
|
if(matcher.hasNext()){
|
||||||
|
auto match = matcher.next();
|
||||||
|
auto ssid = match.captured("ssid");
|
||||||
|
if(ssid == "P"){
|
||||||
|
ssid = "16";
|
||||||
|
}
|
||||||
|
call = base + "-" + ssid;
|
||||||
|
} else {
|
||||||
|
call = base;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return call;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void APRSISClient::enqueueSpot(QString theircall, QString grid, QString comment){
|
void APRSISClient::enqueueSpot(QString theircall, QString grid, QString comment){
|
||||||
if(m_localCall.isEmpty()) return;
|
if(m_localCall.isEmpty()) return;
|
||||||
|
|
||||||
auto geo = APRSISClient::grid2aprs(grid);
|
auto geo = APRSISClient::grid2aprs(grid);
|
||||||
auto spotFrame = QString("%1>%2,APRS,TCPIP*:=%3/%4nFT8CALL %5\n");
|
auto spotFrame = QString("%1>APRS,TCPIP*:=%2/%3nFT8CALL %4\n");
|
||||||
spotFrame = spotFrame.arg(theircall);
|
spotFrame = spotFrame.arg(theircall);
|
||||||
spotFrame = spotFrame.arg(m_localCall);
|
|
||||||
spotFrame = spotFrame.arg(geo.first);
|
spotFrame = spotFrame.arg(geo.first);
|
||||||
spotFrame = spotFrame.arg(geo.second);
|
spotFrame = spotFrame.arg(geo.second);
|
||||||
spotFrame = spotFrame.arg(comment.left(43));
|
spotFrame = spotFrame.arg(comment.left(43));
|
||||||
@ -202,9 +220,8 @@ void APRSISClient::enqueueThirdParty(QString theircall, QString payload){
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto frame = QString("%1>%2,APRS,TCPIP*:%3\n");
|
auto frame = QString("%1>APRS,TCPIP*:%2\n");
|
||||||
frame = frame.arg(theircall);
|
frame = frame.arg(theircall);
|
||||||
frame = frame.arg(m_localCall);
|
|
||||||
frame = frame.arg(payload);
|
frame = frame.arg(payload);
|
||||||
enqueueRaw(frame);
|
enqueueRaw(frame);
|
||||||
}
|
}
|
||||||
@ -226,6 +243,7 @@ void APRSISClient::processQueue(bool disconnect){
|
|||||||
// 4. disconnect
|
// 4. disconnect
|
||||||
|
|
||||||
if(state() != QTcpSocket::ConnectedState){
|
if(state() != QTcpSocket::ConnectedState){
|
||||||
|
qDebug() << "APRSISClient Connecting:" << m_host << m_port;
|
||||||
connectToHost(m_host, m_port);
|
connectToHost(m_host, m_port);
|
||||||
if(!waitForConnected(5000)){
|
if(!waitForConnected(5000)){
|
||||||
qDebug() << "APRSISClient Connection Error:" << errorString();
|
qDebug() << "APRSISClient Connection Error:" << errorString();
|
||||||
|
@ -17,6 +17,7 @@ public:
|
|||||||
static QString loginFrame(QString callsign);
|
static QString loginFrame(QString callsign);
|
||||||
static QPair<float, float> grid2deg(QString grid);
|
static QPair<float, float> grid2deg(QString grid);
|
||||||
static QPair<QString, QString> grid2aprs(QString grid);
|
static QPair<QString, QString> grid2aprs(QString grid);
|
||||||
|
static QString replaceCallsignSuffixWithSSID(QString call, QString base);
|
||||||
|
|
||||||
void setServer(QString host, quint16 port){
|
void setServer(QString host, quint16 port){
|
||||||
if(state() == QTcpSocket::ConnectedState){
|
if(state() == QTcpSocket::ConnectedState){
|
||||||
@ -25,6 +26,8 @@ public:
|
|||||||
|
|
||||||
m_host = host;
|
m_host = host;
|
||||||
m_port = port;
|
m_port = port;
|
||||||
|
|
||||||
|
qDebug() << "APRSISClient Server Change:" << m_host << m_port;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setPaused(bool paused){
|
void setPaused(bool paused){
|
||||||
|
@ -30,7 +30,8 @@ print "Connected..."
|
|||||||
data = s.recv(1024)
|
data = s.recv(1024)
|
||||||
print data
|
print data
|
||||||
|
|
||||||
call = 'KN4CRD'
|
print "Callsign: "
|
||||||
|
call = raw_input().strip()
|
||||||
pw = do_hash(call)
|
pw = do_hash(call)
|
||||||
ver = "FT8Call"
|
ver = "FT8Call"
|
||||||
|
|
||||||
@ -43,7 +44,7 @@ data = s.recv(1024)
|
|||||||
print data
|
print data
|
||||||
|
|
||||||
if 0:
|
if 0:
|
||||||
message = "KN4CRD>OH8STN,APRS,TCPIP*::EMAIL-2 :KN4CRD@GMAIL.COM TESTING!{04}\n"
|
message = "KN4CRD>APRS,TCPIP*::EMAIL-2 :KN4CRD@GMAIL.COM TESTING!{04}\n"
|
||||||
s.send(message)
|
s.send(message)
|
||||||
|
|
||||||
if 0:
|
if 0:
|
||||||
@ -59,7 +60,7 @@ if 1:
|
|||||||
position = "=3352.45N/08422.71Wn"
|
position = "=3352.45N/08422.71Wn"
|
||||||
status = "FT8CALL VIA XX9XXX/XXXX 14.082500MHz -20dB"
|
status = "FT8CALL VIA XX9XXX/XXXX 14.082500MHz -20dB"
|
||||||
payload = "".join((position, status))
|
payload = "".join((position, status))
|
||||||
message = "{}>OH8STN,APRS,TCPIP*:{}\n".format(call, payload)
|
message = "{}-16>APRS,TCPIP*:{}\n".format(call, payload)
|
||||||
s.send(message)
|
s.send(message)
|
||||||
|
|
||||||
print "Spot sent...", message
|
print "Spot sent...", message
|
@ -4130,7 +4130,11 @@ void MainWindow::aprsLogReport(int offset, int snr, QString callsign, QString gr
|
|||||||
if(callsign.contains("/")){
|
if(callsign.contains("/")){
|
||||||
comment = QString("%1 %2").arg(callsign).arg(comment);
|
comment = QString("%1 %2").arg(callsign).arg(comment);
|
||||||
}
|
}
|
||||||
m_aprsClient->enqueueSpot(Radio::base_callsign(callsign), grid, comment);
|
|
||||||
|
auto base = Radio::base_callsign(callsign);
|
||||||
|
callsign = APRSISClient::replaceCallsignSuffixWithSSID(callsign, base);
|
||||||
|
|
||||||
|
m_aprsClient->enqueueSpot(callsign, grid, comment);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::killFile ()
|
void MainWindow::killFile ()
|
||||||
@ -8819,21 +8823,10 @@ void MainWindow::aprsSetLocal ()
|
|||||||
auto grid = m_config.my_grid();
|
auto grid = m_config.my_grid();
|
||||||
auto passcode = m_config.aprs_passcode();
|
auto passcode = m_config.aprs_passcode();
|
||||||
|
|
||||||
#if SPOT_SSID_SUFFIX
|
call = APRSISClient::replaceCallsignSuffixWithSSID(call, base);
|
||||||
if(call != base){
|
|
||||||
QRegularExpression re("[/](?<ssid>\\d+)");
|
|
||||||
auto matcher = re.globalMatch(call);
|
|
||||||
if(matcher.hasNext()){
|
|
||||||
auto match = matcher.next();
|
|
||||||
call = base + "-" + match.captured("ssid");
|
|
||||||
} else {
|
|
||||||
call = base;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
qDebug() << "APRSISClient Set Local Station:" << base << grid << passcode;
|
qDebug() << "APRSISClient Set Local Station:" << call << grid << passcode;
|
||||||
m_aprsClient->setLocalStation(base, grid, passcode);
|
m_aprsClient->setLocalStation(call, grid, passcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::transmitDisplay (bool transmitting)
|
void MainWindow::transmitDisplay (bool transmitting)
|
||||||
|
Loading…
Reference in New Issue
Block a user