Added grid packing to varicode
This commit is contained in:
parent
369b5fd73a
commit
2ae74d8cde
101
varicode.cpp
101
varicode.cpp
@ -1,6 +1,23 @@
|
|||||||
/**
|
/**
|
||||||
|
* This file is part of FT8Call.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
* (C) 2018 Jordan Sherer <kn4crd@gmail.com> - All Rights Reserved
|
* (C) 2018 Jordan Sherer <kn4crd@gmail.com> - All Rights Reserved
|
||||||
|
*
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
|
|
||||||
@ -362,6 +379,90 @@ QString Varicode::unpackCallsign(quint32 value){
|
|||||||
return callsign;
|
return callsign;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString deg2grid(float dlong, float dlat){
|
||||||
|
QChar grid[6];
|
||||||
|
|
||||||
|
if(dlong < -180){
|
||||||
|
dlong += 360;
|
||||||
|
}
|
||||||
|
if(dlong > 180){
|
||||||
|
dlong -= 360;
|
||||||
|
}
|
||||||
|
|
||||||
|
int nlong = int(60.0*(180.0-dlong)/5);
|
||||||
|
|
||||||
|
int n1 = nlong/240;
|
||||||
|
int n2 = (nlong-240*n1)/24;
|
||||||
|
int n3 = (nlong-240*n1-24*n2);
|
||||||
|
|
||||||
|
grid[0] = QChar('A' + n1);
|
||||||
|
grid[2] = QChar('0' + n2);
|
||||||
|
grid[4] = QChar('a' + n3);
|
||||||
|
|
||||||
|
int nlat=int(60.0*(dlat+90)/2.5);
|
||||||
|
|
||||||
|
n1 = nlat/240;
|
||||||
|
n2 = (nlat-240*n1)/24;
|
||||||
|
n3 = (nlat-240*n1-24*n2);
|
||||||
|
|
||||||
|
grid[1] = QChar('A' + n1);
|
||||||
|
grid[3] = QChar('0' + n2);
|
||||||
|
grid[5] = QChar('a' + n3);
|
||||||
|
|
||||||
|
return QString(grid, 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPair<float, float> grid2deg(QString const &grid){
|
||||||
|
QPair<float, float> longLat;
|
||||||
|
|
||||||
|
QString g = grid;
|
||||||
|
if(g.length() < 6){
|
||||||
|
g = grid.left(4) + "mm";
|
||||||
|
}
|
||||||
|
|
||||||
|
g = g.left(4).toUpper() + g.right(2).toLower();
|
||||||
|
|
||||||
|
int nlong = 180 - 20 * (g.at(0).toLatin1() - 'A');
|
||||||
|
int n20d = 2 * (g.at(2).toLatin1() - '0');
|
||||||
|
float xminlong = 5 * (g.at(4).toLatin1() - 'a' + 0.5);
|
||||||
|
float dlong = nlong - n20d - xminlong/60.0;
|
||||||
|
|
||||||
|
int nlat = -90 + 10*(g.at(1).toLatin1() - 'A') + g.at(3).toLatin1() - '0';
|
||||||
|
float xminlat = 2.5 * (g.at(5).toLatin1() - 'a' + 0.5);
|
||||||
|
float dlat = nlat + xminlat/60.0;
|
||||||
|
|
||||||
|
longLat.first = dlong;
|
||||||
|
longLat.second = dlat;
|
||||||
|
|
||||||
|
return longLat;
|
||||||
|
}
|
||||||
|
|
||||||
|
quint16 Varicode::packGrid(QString const& grid){
|
||||||
|
// TODO: validate grid...
|
||||||
|
|
||||||
|
// TODO: encode non-grid data...
|
||||||
|
|
||||||
|
auto pair = grid2deg(grid.left(4));
|
||||||
|
int ilong = pair.first;
|
||||||
|
int ilat = pair.second + 90;
|
||||||
|
|
||||||
|
return ((ilong + 180)/2) * 180 + ilat;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Varicode::unpackGrid(quint16 value){
|
||||||
|
if(value > 180*180){
|
||||||
|
// TODO: decode non-grid data...
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
float dlat = value % 180 - 90;
|
||||||
|
float dlong = value / 180 * 2 - 180 + 2;
|
||||||
|
|
||||||
|
return deg2grid(dlong, dlat).left(4);g
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
QString Varicode::packDirectedMessage(const QString &text, int *n){
|
QString Varicode::packDirectedMessage(const QString &text, int *n){
|
||||||
QString frame;
|
QString frame;
|
||||||
QString cmds("?$@&| ");
|
QString cmds("?$@&| ");
|
||||||
|
@ -45,6 +45,9 @@ public:
|
|||||||
static quint32 packCallsign(QString const& value);
|
static quint32 packCallsign(QString const& value);
|
||||||
static QString unpackCallsign(quint32 value);
|
static QString unpackCallsign(quint32 value);
|
||||||
|
|
||||||
|
static quint16 packGrid(QString const& value);
|
||||||
|
static QString unpackGrid(quint16 value);
|
||||||
|
|
||||||
static QString packDirectedMessage(QString const& text, int *n);
|
static QString packDirectedMessage(QString const& text, int *n);
|
||||||
static QStringList unpackDirectedMessage(QString const& text);
|
static QStringList unpackDirectedMessage(QString const& text);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user