From ec0a15e4bd5d5cb5f2ad6ac30628191bd5ccba17 Mon Sep 17 00:00:00 2001 From: Phil Taylor Date: Sun, 28 Apr 2024 10:28:29 +0100 Subject: [PATCH] Make controls work on sub/main rx --- wfmain.cpp | 108 +++++++++++++++++++++++++++++++---------------------- wfmain.h | 1 + 2 files changed, 65 insertions(+), 44 deletions(-) diff --git a/wfmain.cpp b/wfmain.cpp index c827c15..f9cd46e 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -1026,7 +1026,6 @@ void wfmain::configureVFOs() for(uchar i=0;inumReceiver;i++) { spectrumScope* receiver = new spectrumScope(rigCaps->hasSpectrum,i,rigCaps->numVFO,this); - receiver->setUnderlayMode(prefs.underlayMode); receiver->wfAntiAliased(prefs.wfAntiAlias); receiver->wfInterpolate(prefs.wfInterpolate); @@ -1045,6 +1044,9 @@ void wfmain::configureVFOs() // Hide any secondary receivers until we need them! if (i>0){ receiver->setVisible(false); + } else { + receiver->setVisible(true); + receiver->selected(true); } connect(receiver, SIGNAL(frequencyRange(uchar, double, double)), cluster, SLOT(freqRange(uchar, double, double))); @@ -3888,8 +3890,8 @@ void wfmain::changePrimaryMeter(bool transmitOn) { newCmd = meter_tToMeterCommand(meterS); ui->meterSPoWidget->setMeterType(meterS); } - queue->del(oldCmd); - queue->add(priorityHighest,queueItem(newCmd,true)); + queue->del(oldCmd,currentReceiver); + queue->add(priorityHighest,queueItem(newCmd,true,currentReceiver)); } void wfmain::changeFullScreenMode(bool checked) @@ -3990,24 +3992,18 @@ void wfmain::on_freqDial_valueChanged(int value) // With the number of steps and direction of steps established, // we can now adjust the frequency: - for (uchar i=0;inumReceiver;i++) + f.Hz = roundFrequencyWithStep(receivers[currentReceiver]->getFrequency().Hz, delta, tsKnobHz); + f.MHzDouble = f.Hz / (double)1E6; + if (f.Hz > 0) { - if (receivers[i]->isSelected()) - { - f.Hz = roundFrequencyWithStep(receivers[i]->getFrequency().Hz, delta, tsKnobHz); - f.MHzDouble = f.Hz / (double)1E6; - if (f.Hz > 0) - { - oldFreqDialVal = value; - receivers[i]->setFrequency(f); - queue->addUnique(priorityImmediate,queueItem((i==0)?funcMainFreq:funcSubFreq,QVariant::fromValue(f),false,i)); - } else { - ui->freqDial->blockSignals(true); - ui->freqDial->setValue(oldFreqDialVal); - ui->freqDial->blockSignals(false); - return; - } - } + oldFreqDialVal = value; + receivers[currentReceiver]->setFrequency(f); + queue->addUnique(priorityImmediate,queueItem((currentReceiver==0)?funcMainFreq:funcSubFreq,QVariant::fromValue(f),false,currentReceiver)); + } else { + ui->freqDial->blockSignals(true); + ui->freqDial->setValue(oldFreqDialVal); + ui->freqDial->blockSignals(false); + return; } } @@ -4473,10 +4469,10 @@ void wfmain::receiveTuningStep(unsigned char step) void wfmain::receiveMeter(meter_t inMeter, unsigned char level,unsigned char receiver) { - // Currently do nothing with meters from second VFO - if (receiver) + // Do nothing with s-meter from non-current receiver + if (receiver != currentReceiver && inMeter == meterS) { return; - + } switch(inMeter) { // These first two meters, S and Power, @@ -4610,13 +4606,13 @@ void wfmain::on_rptSetupBtn_clicked() void wfmain::on_attSelCombo_activated(int index) { - queue->add(priorityImmediate,queueItem(funcAttenuator,QVariant::fromValue(ui->attSelCombo->itemData(index).toInt()),false)); + queue->add(priorityImmediate,queueItem(funcAttenuator,QVariant::fromValue(ui->attSelCombo->itemData(index).toInt()),false,currentReceiver)); queue->add(priorityHigh,funcPreamp,false); } void wfmain::on_preampSelCombo_activated(int index) { - queue->add(priorityImmediate,queueItem(funcPreamp,QVariant::fromValue(ui->preampSelCombo->itemData(index).toInt()),false)); + queue->add(priorityImmediate,queueItem(funcPreamp,QVariant::fromValue(ui->preampSelCombo->itemData(index).toInt()),false,currentReceiver)); queue->add(priorityHigh,funcAttenuator,false); } @@ -4625,7 +4621,7 @@ void wfmain::on_antennaSelCombo_activated(int index) antennaInfo ant; ant.antenna = (unsigned char)ui->antennaSelCombo->itemData(index).toInt(); ant.rx = ui->rxAntennaCheck->isChecked(); - queue->add(priorityImmediate,queueItem(funcAntenna,QVariant::fromValue(ant),false)); + queue->add(priorityImmediate,queueItem(funcAntenna,QVariant::fromValue(ant),false,currentReceiver)); } void wfmain::on_rxAntennaCheck_clicked(bool value) @@ -4633,26 +4629,26 @@ void wfmain::on_rxAntennaCheck_clicked(bool value) antennaInfo ant; ant.antenna = (unsigned char)ui->antennaSelCombo->currentData().toInt(); ant.rx = value; - queue->add(priorityImmediate,queueItem(funcAntenna,QVariant::fromValue(ant),false)); + queue->add(priorityImmediate,queueItem(funcAntenna,QVariant::fromValue(ant),false,currentReceiver)); } void wfmain::receivePreamp(unsigned char pre, uchar receiver) { - if (!receiver) { + if (receiver == currentReceiver) { ui->preampSelCombo->setCurrentIndex(ui->preampSelCombo->findData(pre)); } } void wfmain::receiveAttenuator(unsigned char att, uchar receiver) { - if (!receiver) { + if (receiver == currentReceiver) { ui->attSelCombo->setCurrentIndex(ui->attSelCombo->findData(att)); } } void wfmain::receiveAntennaSel(unsigned char ant, bool rx, uchar receiver) { - if (!receiver) { + if (receiver == currentReceiver) { ui->antennaSelCombo->setCurrentIndex(ant); ui->rxAntennaCheck->setChecked(rx); } @@ -5221,12 +5217,7 @@ void wfmain::receiveValue(cacheItem val){ case funcFreqGet: case funcFreqTR: // If current receiver (0) isn't selected, then send this to other VFO - if (receivers.size()>1) { - if (!receivers[val.receiver]->isSelected()){ - val.receiver=!bool(val.receiver); - } - } - receivers[val.receiver]->setFrequency(val.value.value(),vfo); + receivers[currentReceiver]->setFrequency(val.value.value(),vfo); break; #if defined __GNUC__ @@ -5278,11 +5269,7 @@ void wfmain::receiveValue(cacheItem val){ case funcModeGet: case funcModeTR: // If current VFO (0) isn't selected, then send this to other VFO - if (receivers.size()>1) { - if (!receivers[val.receiver]->isSelected()){ - val.receiver=!bool(val.receiver); - } - } + val.receiver = currentReceiver; case funcSelectedMode: case funcMainMode: receivers[val.receiver]->receiveMode(val.value.value(),vfo); @@ -5614,7 +5601,24 @@ void wfmain::receiveValue(cacheItem val){ qCritical(logSystem()) << "Thread is NOT the main UI thread, cannot hide/unhide VFO"; } else { - subScope = val.value.value(); + currentReceiver = val.value.value(); + + for (uchar rx=0;rxisVisible() && (rx == currentReceiver || ui->scopeDualBtn->isChecked())) { + // receivers[rx]->setVisible(true); + //} else if (rx != currentReceiver && !ui->scopeDualBtn->isChecked() && receivers[rx]->isVisible()) { + // receivers[rx]->setVisible(false); + //} + + if (rx == currentReceiver && !receivers[rx]->isSelected()) { + receivers[rx]->selected(true); + } else if (rx != currentReceiver && receivers[rx]->isSelected()) { + receivers[rx]->selected(false); + } + + } + + /* // This tells us whether we are receiving main or sub data if (!subScope && !receivers[0]->isVisible()) { receivers[1]->setVisible(false); @@ -5627,10 +5631,13 @@ void wfmain::receiveValue(cacheItem val){ if (ui->scopeDualBtn->isChecked()) { receivers[0]->selected(!subScope); receivers[1]->selected(subScope); + } else { receivers[0]->selected(true); receivers[1]->selected(false); + currentReceiver = 0; } + */ } } break; @@ -5645,6 +5652,14 @@ void wfmain::receiveValue(cacheItem val){ } else { // This tells us whether we are receiving single or dual scopes ui->scopeDualBtn->setChecked(val.value.value()); + for (uchar rx=0;rxisVisible() && (rx == currentReceiver || val.value.value())) { + receivers[rx]->setVisible(true); + } else if (rx != currentReceiver && !val.value.value() && receivers[rx]->isVisible()) { + receivers[rx]->setVisible(false); + } + } + /* if (val.value.value()) { if (!receivers[1]->isVisible()) { @@ -5664,6 +5679,7 @@ void wfmain::receiveValue(cacheItem val){ receivers[0]->setVisible(false); } } + */ } } break; @@ -5750,8 +5766,12 @@ void wfmain::on_showSettingsBtn_clicked() void wfmain::on_scopeMainSubBtn_clicked() { - subScope = !subScope; - queue->add(priorityImmediate,queueItem(funcScopeMainSub,QVariant::fromValue(subScope),false)); + if (currentReceiveradd(priorityImmediate,queueItem(funcScopeMainSub,QVariant::fromValue(currentReceiver),false)); } void wfmain::on_scopeDualBtn_toggled(bool en) diff --git a/wfmain.h b/wfmain.h index 97deeb9..6b6a85d 100644 --- a/wfmain.h +++ b/wfmain.h @@ -821,6 +821,7 @@ private: audioDevices* audioDev = Q_NULLPTR; QImage lcdImage; connectionStatus_t connStatus = connDisconnected; + uchar currentReceiver = 0; };