Decoder queue processing bugs
This commit is contained in:
parent
865cfa31f9
commit
eada85c04d
@ -9,6 +9,7 @@
|
|||||||
#define JS8_USE_REFSPEC 0 // compute the signal refspec
|
#define JS8_USE_REFSPEC 0 // compute the signal refspec
|
||||||
#define JS8_USE_IHSYM 0 // compute ihsym manually instead of from symspec
|
#define JS8_USE_IHSYM 0 // compute ihsym manually instead of from symspec
|
||||||
#define JS8_RING_BUFFER 1 // use a ring buffer instead of clearing the decode frames
|
#define JS8_RING_BUFFER 1 // use a ring buffer instead of clearing the decode frames
|
||||||
|
#define JS8_SINGLE_DECODE 0 // single submode decode per instantiation of the decoder
|
||||||
|
|
||||||
#define JS8_NUM_SYMBOLS 79
|
#define JS8_NUM_SYMBOLS 79
|
||||||
#define JS8_ENABLE_JS8A 1
|
#define JS8_ENABLE_JS8A 1
|
||||||
|
@ -1555,7 +1555,8 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Don't block heartbeat's first run...
|
// Don't block heartbeat's first run...
|
||||||
m_lastTxTime = DriftingDateTime::currentDateTimeUtc().addSecs(-300);
|
m_lastTxStartTime = DriftingDateTime::currentDateTimeUtc().addSecs(-300);
|
||||||
|
m_lastTxStopTime = DriftingDateTime::currentDateTimeUtc().addSecs(-300);
|
||||||
|
|
||||||
int width = 75;
|
int width = 75;
|
||||||
/*
|
/*
|
||||||
@ -3987,7 +3988,7 @@ bool MainWindow::isDecodeReady(int submode, qint32 k, qint32 k0, qint32 *pCurren
|
|||||||
|
|
||||||
if(pCycle) *pCycle = currentCycle;
|
if(pCycle) *pCycle = currentCycle;
|
||||||
if(pStart) *pStart = *pCurrentDecodeStart;
|
if(pStart) *pStart = *pCurrentDecodeStart;
|
||||||
if(pSz) *pSz = qMax(framesNeeded, k-(*pCurrentDecodeStart));
|
if(pSz) *pSz = cycleFrames; // qMax(framesNeeded, k-(*pCurrentDecodeStart));
|
||||||
|
|
||||||
*pCurrentDecodeStart = *pNextDecodeStart;
|
*pCurrentDecodeStart = *pNextDecodeStart;
|
||||||
*pNextDecodeStart = *pCurrentDecodeStart + cycleFrames;
|
*pNextDecodeStart = *pCurrentDecodeStart + cycleFrames;
|
||||||
@ -4007,6 +4008,12 @@ void MainWindow::decode(){
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int threshold = 1000; // one second
|
||||||
|
if(isInTransmitDecodeThreshold(threshold)){
|
||||||
|
qDebug() << "--> decoder paused for" << threshold << "ms after transmit stop";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
bool ready = decodeEnqueueReady(k, k0);
|
bool ready = decodeEnqueueReady(k, k0);
|
||||||
if(ready || !m_decoderQueue.isEmpty()){
|
if(ready || !m_decoderQueue.isEmpty()){
|
||||||
qDebug() << "--> decoder is ready to be run with" << m_decoderQueue.count() << "decode periods";
|
qDebug() << "--> decoder is ready to be run with" << m_decoderQueue.count() << "decode periods";
|
||||||
@ -4091,7 +4098,7 @@ bool MainWindow::decodeEnqueueReady(qint32 k, qint32 k0){
|
|||||||
|
|
||||||
if(couldDecodeB){
|
if(couldDecodeB){
|
||||||
DecodeParams d;
|
DecodeParams d;
|
||||||
d.submode = Varicode::JS8CallNormal;
|
d.submode = Varicode::JS8CallFast;
|
||||||
d.cycle = cycleB;
|
d.cycle = cycleB;
|
||||||
d.start = startB;
|
d.start = startB;
|
||||||
d.sz = szB;
|
d.sz = szB;
|
||||||
@ -4101,7 +4108,7 @@ bool MainWindow::decodeEnqueueReady(qint32 k, qint32 k0){
|
|||||||
|
|
||||||
if(couldDecodeC){
|
if(couldDecodeC){
|
||||||
DecodeParams d;
|
DecodeParams d;
|
||||||
d.submode = Varicode::JS8CallNormal;
|
d.submode = Varicode::JS8CallTurbo;
|
||||||
d.cycle = cycleC;
|
d.cycle = cycleC;
|
||||||
d.start = startC;
|
d.start = startC;
|
||||||
d.sz = szC;
|
d.sz = szC;
|
||||||
@ -4112,7 +4119,7 @@ bool MainWindow::decodeEnqueueReady(qint32 k, qint32 k0){
|
|||||||
#if JS8_ENABLE_JS8E
|
#if JS8_ENABLE_JS8E
|
||||||
if(couldDecodeE){
|
if(couldDecodeE){
|
||||||
DecodeParams d;
|
DecodeParams d;
|
||||||
d.submode = Varicode::JS8CallNormal;
|
d.submode = Varicode::JS8CallUltraSlow;
|
||||||
d.cycle = cycleE;
|
d.cycle = cycleE;
|
||||||
d.start = startE;
|
d.start = startE;
|
||||||
d.sz = szE;
|
d.sz = szE;
|
||||||
@ -4148,6 +4155,8 @@ bool MainWindow::decodeProcessQueue(qint32 *pSubmode){
|
|||||||
qDebug() << "--> decoder skipping at least 1 decode cycle" << "count" << count << "max" << maxDecodes;
|
qDebug() << "--> decoder skipping at least 1 decode cycle" << "count" << count << "max" << maxDecodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dec_data.params.nsubmodes = 0;
|
||||||
|
|
||||||
while(!m_decoderQueue.isEmpty()){
|
while(!m_decoderQueue.isEmpty()){
|
||||||
auto params = m_decoderQueue.front();
|
auto params = m_decoderQueue.front();
|
||||||
m_decoderQueue.removeFirst();
|
m_decoderQueue.removeFirst();
|
||||||
@ -4161,7 +4170,6 @@ bool MainWindow::decodeProcessQueue(qint32 *pSubmode){
|
|||||||
submode = params.submode;
|
submode = params.submode;
|
||||||
}
|
}
|
||||||
|
|
||||||
dec_data.params.nsubmodes = 0;
|
|
||||||
switch(params.submode){
|
switch(params.submode){
|
||||||
case Varicode::JS8CallNormal:
|
case Varicode::JS8CallNormal:
|
||||||
dec_data.params.kposA = params.start;
|
dec_data.params.kposA = params.start;
|
||||||
@ -4178,12 +4186,17 @@ bool MainWindow::decodeProcessQueue(qint32 *pSubmode){
|
|||||||
dec_data.params.kszC = params.sz;
|
dec_data.params.kszC = params.sz;
|
||||||
dec_data.params.nsubmodes |= (params.submode << 1);
|
dec_data.params.nsubmodes |= (params.submode << 1);
|
||||||
break;
|
break;
|
||||||
|
#if JS8_ENABLE_JS8E
|
||||||
case Varicode::JS8CallUltraSlow:
|
case Varicode::JS8CallUltraSlow:
|
||||||
dec_data.params.kposE = params.start;
|
dec_data.params.kposE = params.start;
|
||||||
dec_data.params.kszE = params.sz;
|
dec_data.params.kszE = params.sz;
|
||||||
dec_data.params.nsubmodes |= (params.submode << 1);
|
dec_data.params.nsubmodes |= (params.submode << 1);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
#if JS8_SINGLE_DECODE
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if(submode == -1){
|
if(submode == -1){
|
||||||
@ -4320,6 +4333,11 @@ bool MainWindow::decodeProcessQueue(qint32 *pSubmode){
|
|||||||
|
|
||||||
void MainWindow::decodeStart(){
|
void MainWindow::decodeStart(){
|
||||||
qDebug() << "--> decoder starting";
|
qDebug() << "--> decoder starting";
|
||||||
|
qDebug() << " --> nsubmodes:" << dec_data.params.nsubmodes;
|
||||||
|
qDebug() << " --> A:" << dec_data.params.kposA << dec_data.params.kszA;
|
||||||
|
qDebug() << " --> B:" << dec_data.params.kposB << dec_data.params.kszB;
|
||||||
|
qDebug() << " --> C:" << dec_data.params.kposC << dec_data.params.kszC;
|
||||||
|
qDebug() << " --> E:" << dec_data.params.kposE << dec_data.params.kszE;
|
||||||
|
|
||||||
//newdat=1 ==> this is new data, must do the big FFT
|
//newdat=1 ==> this is new data, must do the big FFT
|
||||||
//nagain=1 ==> decode only at fQSO +/- Tol
|
//nagain=1 ==> decode only at fQSO +/- Tol
|
||||||
@ -5443,7 +5461,7 @@ void MainWindow::guiUpdate()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: jsherer - perhaps an on_transmitting signal?
|
// TODO: jsherer - perhaps an on_transmitting signal?
|
||||||
m_lastTxTime = DriftingDateTime::currentDateTimeUtc();
|
m_lastTxStartTime = DriftingDateTime::currentDateTimeUtc();
|
||||||
|
|
||||||
m_transmitting = true;
|
m_transmitting = true;
|
||||||
transmitDisplay (true);
|
transmitDisplay (true);
|
||||||
@ -5685,6 +5703,7 @@ void MainWindow::stopTx()
|
|||||||
m_btxok = false;
|
m_btxok = false;
|
||||||
m_transmitting = false;
|
m_transmitting = false;
|
||||||
g_iptt=0;
|
g_iptt=0;
|
||||||
|
m_lastTxStopTime = DriftingDateTime::currentDateTimeUtc();
|
||||||
if (!m_tx_watchdog) {
|
if (!m_tx_watchdog) {
|
||||||
tx_status_label.setStyleSheet("");
|
tx_status_label.setStyleSheet("");
|
||||||
tx_status_label.setText("");
|
tx_status_label.setText("");
|
||||||
@ -6345,6 +6364,14 @@ bool MainWindow::isMessageQueuedForTransmit(){
|
|||||||
return m_transmitting || m_txFrameCount > 0;
|
return m_transmitting || m_txFrameCount > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MainWindow::isInTransmitDecodeThreshold(int ms){
|
||||||
|
if(m_lastTxStopTime.isNull()){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_lastTxStopTime.msecsTo(DriftingDateTime::currentDateTimeUtc()) < ms;
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::prependMessageText(QString text){
|
void MainWindow::prependMessageText(QString text){
|
||||||
// don't add message text if we already have a transmission queued...
|
// don't add message text if we already have a transmission queued...
|
||||||
if(isMessageQueuedForTransmit()){
|
if(isMessageQueuedForTransmit()){
|
||||||
@ -11519,7 +11546,7 @@ void MainWindow::processTxQueue(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
// and if we are a low priority message, we need to have not transmitted in the past 30 seconds...
|
// and if we are a low priority message, we need to have not transmitted in the past 30 seconds...
|
||||||
if(head.priority <= PriorityLow && m_lastTxTime.secsTo(DriftingDateTime::currentDateTimeUtc()) <= 30){
|
if(head.priority <= PriorityLow && m_lastTxStartTime.secsTo(DriftingDateTime::currentDateTimeUtc()) <= 30){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,6 +143,7 @@ public slots:
|
|||||||
void writeNoticeTextToUI(QDateTime date, QString text);
|
void writeNoticeTextToUI(QDateTime date, QString text);
|
||||||
int writeMessageTextToUI(QDateTime date, QString text, int freq, bool isTx, int block=-1);
|
int writeMessageTextToUI(QDateTime date, QString text, int freq, bool isTx, int block=-1);
|
||||||
bool isMessageQueuedForTransmit();
|
bool isMessageQueuedForTransmit();
|
||||||
|
bool isInTransmitDecodeThreshold(int seconds);
|
||||||
void prependMessageText(QString text);
|
void prependMessageText(QString text);
|
||||||
void addMessageText(QString text, bool clear=false, bool selectFirstPlaceholder=false);
|
void addMessageText(QString text, bool clear=false, bool selectFirstPlaceholder=false);
|
||||||
void enqueueMessage(int priority, QString message, int freq, Callback c);
|
void enqueueMessage(int priority, QString message, int freq, Callback c);
|
||||||
@ -782,7 +783,8 @@ private:
|
|||||||
QString m_txTextDirtyLastSelectedCall;
|
QString m_txTextDirtyLastSelectedCall;
|
||||||
QString m_lastTxMessage;
|
QString m_lastTxMessage;
|
||||||
QString m_totalTxMessage;
|
QString m_totalTxMessage;
|
||||||
QDateTime m_lastTxTime;
|
QDateTime m_lastTxStartTime;
|
||||||
|
QDateTime m_lastTxStopTime;
|
||||||
int m_timeDeltaMsMMA;
|
int m_timeDeltaMsMMA;
|
||||||
int m_timeDeltaMsMMA_N;
|
int m_timeDeltaMsMMA_N;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user