Parse callsigns from BCN command

This commit is contained in:
Jordan Sherer 2018-07-31 23:26:01 -04:00
parent 5a5e37f119
commit 7942bf3a4d
2 changed files with 48 additions and 42 deletions

View File

@ -3354,11 +3354,6 @@ void MainWindow::readFromStdout() //readFromStdout
#if 1
bool shouldProcessCompound = true;
if(shouldProcessCompound && decodedtext.isCompoundMessage()){
#if ALIAS_COMPOUND_CALLS
QString compoundCall = decodedtext.compoundCall();
m_compoundCallCache[Radio::base_callsign(compoundCall)] = compoundCall;
#endif
CallDetail cd;
cd.call = decodedtext.compoundCall();
cd.grid = decodedtext.extra(); // compound calls via beacons may contain grid...
@ -3367,18 +3362,12 @@ void MainWindow::readFromStdout() //readFromStdout
cd.utcTimestamp = QDateTime::currentDateTimeUtc();
cd.bits = decodedtext.bits();
if(!decodedtext.isBeacon()){
if(decodedtext.isBeacon()){
logCallActivity(cd, true);
} else {
qDebug() << "buffering compound call" << cd.call << cd.bits;
m_messageBuffer[cd.freq/10*10].compound.append(cd);
}
/*
// DISABLED FOR NOW...
else {
logCallActivity(cd);
}
*/
//
}
#endif
@ -3390,9 +3379,6 @@ void MainWindow::readFromStdout() //readFromStdout
auto parts = decodedtext.directedMessage();
CommandDetail d;
#if ALIAS_COMPOUND_CALLS
d.from = lookupCallInCompoundCache(parts.at(0));
#endif
d.from = parts.at(0);
d.to = parts.at(1);
d.cmd = parts.at(2);
@ -3632,7 +3618,7 @@ void MainWindow::readFromStdout() //readFromStdout
}
void MainWindow::logCallActivity(CallDetail d){
void MainWindow::logCallActivity(CallDetail d, bool spot){
if(m_callActivity.contains(d.call)){
// update (keep grid)
CallDetail old = m_callActivity[d.call];
@ -3644,6 +3630,11 @@ void MainWindow::logCallActivity(CallDetail d){
// create
m_callActivity[d.call] = d;
}
// enqueue for spotting to psk reporter
if(spot){
m_rxCallQueue.append(d);
}
}
QString MainWindow::lookupCallInCompoundCache(QString const &call){
@ -5595,6 +5586,7 @@ void MainWindow::clearActivity(){
m_callSeenBeacon.clear();
m_compoundCallCache.clear();
m_rxCallCache.clear();
m_rxCallQueue.clear();
m_rxRecentCache.clear();
m_rxDirectedCache.clear();
m_rxFrameBlockNumbers.clear();
@ -8786,6 +8778,7 @@ void MainWindow::processCompoundActivity() {
if (buffer.cmd.from == "<....>") {
auto d = buffer.compound.dequeue();
buffer.cmd.from = d.call;
buffer.cmd.grid = d.grid;
if (d.bits == Varicode::FT8CallLast) {
buffer.cmd.bits = d.bits;
@ -8899,16 +8892,19 @@ void MainWindow::processCommandActivity() {
if (isAllCall && m_txAllcallCommandCache.contains(Radio::base_callsign(d.from)) && m_txAllcallCommandCache[Radio::base_callsign(d.from)]->secsTo(QDateTime::currentDateTimeUtc()) / 60 < m_config.beacon()) {
continue;
}
// TODO: jsherer - we need to queue these for later processing
// record the spot to PSKReporter
if (okToPost) {
pskSetLocal();
pskLogReport("FT8Call", d.freq, d.snr, d.from, "");
}
#endif
// construct a reply
// log call activity...
CallDetail cd;
cd.call = d.from;
cd.grid = d.grid;
cd.snr = d.snr;
cd.freq = d.freq;
cd.bits = d.bits;
cd.utcTimestamp = d.utcTimestamp;
logCallActivity(cd, true);
// construct a reply, if needed
QString reply;
// QUERIED SNR
@ -8991,10 +8987,7 @@ void MainWindow::processCommandActivity() {
return;
}
#if 0
addMessageText(QString("%1 ACK").arg(d.from));
toggleTx(true);
#endif
enqueueMessage(PriorityNormal, QString("%1 ACK").arg(d.from), d.freq, nullptr);
});
msgBox->show();
@ -9008,10 +9001,9 @@ void MainWindow::processCommandActivity() {
continue;
}
// queue the reply here to be sent when a free interval is available
enqueueMessage(PriorityNormal, reply, d.freq, nullptr);
#if 0
addMessageText(reply);
@ -9027,17 +9019,19 @@ void MainWindow::processCommandActivity() {
processed = true;
#endif
// TODO: jsherer - queue the reply here to be sent when a free interval is available
}
#if 0
if (processed && ui->autoReplyButton->isChecked()) {
toggleTx(true);
}
#endif
}
void MainWindow::processSpots() {
if(!ui->spotButton->isChecked()){
m_rxCallQueue.clear();
return;
}
if(m_rxCallQueue.isEmpty()){
return;
}
// Is it ok to post spots to PSKReporter?
int nsec = QDateTime::currentMSecsSinceEpoch() / 1000 - m_secBandChanged;
bool okToPost = (nsec > (4 * m_TRperiod) / 5);
@ -9046,6 +9040,16 @@ void MainWindow::processSpots() {
}
// Process spots to be sent...
pskSetLocal();
while(!m_rxCallQueue.isEmpty()){
CallDetail d = m_rxCallQueue.dequeue();
if(d.call.isEmpty()){
continue;
}
qDebug() << "spotting call to psk reporter" << d.call << d.snr << d.freq;
pskLogReport("FT8Call", d.freq, d.snr, d.call, d.grid);
}
}
void MainWindow::processTxQueue(){

View File

@ -128,7 +128,7 @@ public slots:
void msgAvgDecode2();
void fastPick(int x0, int x1, int y);
void logCallActivity(CallDetail d);
void logCallActivity(CallDetail d, bool spot=true);
QString lookupCallInCompoundCache(QString const &call);
void clearActivity();
int logRxTxMessageText(QDateTime date, QString text, int freq, bool tx, int block=-1);
@ -676,6 +676,7 @@ private:
QDateTime utcTimestamp;
int snr;
int bits;
QString grid;
QString text;
};
@ -727,8 +728,9 @@ private:
QPriorityQueue<PrioritizedMessage> m_txMessageQueue; // messages to be sent
QQueue<QString> m_txFrameQueue; // frames to be sent
QQueue<ActivityDetail> m_rxActivityQueue;
QQueue<CommandDetail> m_rxCommandQueue;
QQueue<ActivityDetail> m_rxActivityQueue; // all rx activity queue
QQueue<CommandDetail> m_rxCommandQueue; // command queue for processing commands
QQueue<CallDetail> m_rxCallQueue; // call detail queue for spots to pskreporter
QMap<QString, QString> m_compoundCallCache; // base callsign -> compound callsign
QCache<QString, QDateTime> m_txAllcallCommandCache; // callsign -> last tx
QCache<int, QDateTime> m_rxRecentCache; // freq -> last rx