33 enum TransmissionType {
52 FrameCompoundDirected = 2,
56 FrameDataCompressed = 6,
60 static const quint8 FrameTypeMax = 6;
62 static QString frameTypeString(quint8 type) {
63 const char *FrameTypeStrings[] = {
64 "FrameHeartbeat",
"FrameCompound",
"FrameCompoundDirected",
65 "FrameDirected",
"FrameData",
67 "FrameDataCompressed",
70 if (type > FrameTypeMax) {
71 return "FrameUnknown";
73 return FrameTypeStrings[type];
78 static SubmodeType intToSubmode(
int sm);
80 static QString extendedChars();
82 static QString escape(
const QString &text);
83 static QString unescape(
const QString &text);
85 static QString rstrip(
const QString &str);
86 static QString lstrip(
const QString &str);
88 static QMap<QString, QString> defaultHuffTable();
89 static QString cqString(
int number);
90 static QString hbString(
int number);
91 static bool startsWithCQ(QString text);
92 static bool startsWithHB(QString text);
93 static QString formatSNR(
int snr);
94 static QString formatPWR(
int dbm);
96 static QString checksum16(QString
const &input);
97 static bool checksum16Valid(QString
const &checksum, QString
const &input);
99 static QString checksum32(QString
const &input);
100 static bool checksum32Valid(QString
const &checksum, QString
const &input);
102 static QStringList parseCallsigns(QString
const &input);
103 static QStringList parseGrids(QString
const &input);
105 static QList<QPair<int, QVector<bool>>>
106 huffEncode(
const QMap<QString, QString> &huff, QString
const &text);
107 static QString huffDecode(
const QMap<QString, QString> &huff,
108 QVector<bool>
const &bitvec);
109 static QSet<QString> huffValidChars(
const QMap<QString, QString> &huff);
111 static QVector<bool> bytesToBits(
char *bitvec,
int n);
112 static QVector<bool> strToBits(QString
const &bitvec);
113 static QString bitsToStr(QVector<bool>
const &bitvec);
115 static QVector<bool> intToBits(quint64 value,
int expected = 0);
116 static quint64 bitsToInt(QVector<bool>
const value);
117 static quint64 bitsToInt(QVector<bool>::ConstIterator start,
int n);
118 static QVector<bool> bitsListToBits(QList<QVector<bool>> &list);
120 static quint8 unpack5bits(QString
const &value);
121 static QString pack5bits(quint8 packed);
123 static quint8 unpack6bits(QString
const &value);
124 static QString pack6bits(quint8 packed);
126 static quint16 unpack16bits(QString
const &value);
127 static QString pack16bits(quint16 packed);
129 static quint32 unpack32bits(QString
const &value);
130 static QString pack32bits(quint32 packed);
132 static quint64 unpack64bits(QString
const &value);
133 static QString pack64bits(quint64 packed);
135 static quint64 unpack72bits(QString
const &value, quint8 *pRem);
136 static QString pack72bits(quint64 value, quint8 rem);
138 static quint32 packAlphaNumeric22(QString
const &value,
bool isFlag);
139 static QString unpackAlphaNumeric22(quint32 packed,
bool *isFlag);
141 static quint64 packAlphaNumeric50(QString
const &value);
142 static QString unpackAlphaNumeric50(quint64 packed);
144 static quint32 packCallsign(QString
const &value,
bool *pPortable);
145 static QString unpackCallsign(quint32 value,
bool portable);
147 static QString deg2grid(
float dlong,
float dlat);
148 static QPair<float, float> grid2deg(QString
const &grid);
149 static quint16 packGrid(QString
const &value);
150 static QString unpackGrid(quint16 value);
152 static quint8 packNum(QString
const &num,
bool *ok);
153 static quint8 packPwr(QString
const &pwr,
bool *ok);
154 static quint8 packCmd(quint8 cmd, quint8 num,
bool *pPackedNum);
155 static quint8 unpackCmd(quint8 value, quint8 *pNum);
157 static bool isSNRCommand(
const QString &cmd);
158 static bool isCommandAllowed(
const QString &cmd);
159 static bool isCommandBuffered(
const QString &cmd);
160 static int isCommandChecksumed(
const QString &cmd);
161 static bool isCommandAutoreply(
const QString &cmd);
162 static bool isValidCallsign(
const QString &callsign,
bool *pIsCompound);
163 static bool isCompoundCallsign(
const QString &callsign);
164 static bool isGroupAllowed(
const QString &group);
166 static QString packHeartbeatMessage(QString
const &text,
167 QString
const &callsign,
int *n);
168 static QStringList unpackHeartbeatMessage(
const QString &text,
169 quint8 *pType,
bool *isAlt,
172 static QString packCompoundMessage(QString
const &text,
int *n);
173 static QStringList unpackCompoundMessage(
const QString &text, quint8 *pType,
176 static QString packCompoundFrame(
const QString &callsign, quint8 type,
177 quint16 num, quint8 bits3);
178 static QStringList unpackCompoundFrame(
const QString &text, quint8 *pType,
179 quint16 *pNum, quint8 *pBits3);
181 static QString packDirectedMessage(QString
const &text,
182 QString
const &mycall, QString *pTo,
183 bool *pToCompound, QString *pCmd,
184 QString *pNum,
int *n);
185 static QStringList unpackDirectedMessage(QString
const &text,
188 static QString packDataMessage(QString
const &text,
int *n);
189 static QString unpackDataMessage(QString
const &text);
191 static QString packFastDataMessage(QString
const &text,
int *n);
192 static QString unpackFastDataMessage(QString
const &text);
194 static QList<QPair<QString, int>>
196 QString
const &selectedCall, QString
const &text,
197 bool forceIdentify,
bool forceData,
int submode,