From 47eede5866ca82820e0b7a24d14e6903e25391db Mon Sep 17 00:00:00 2001 From: PianetaRadio <78976006+PianetaRadio@users.noreply.github.com> Date: Mon, 14 Nov 2022 20:19:39 +0100 Subject: [PATCH] MIC controls #25 --- mainwindow.cpp | 108 ++++- mainwindow.h | 16 + mainwindow.ui | 1052 ++++++++++++++++++++++++++++++------------------ rigdaemon.cpp | 82 +++- rigdata.h | 4 +- 5 files changed, 859 insertions(+), 403 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index 120f1c1..96154ea 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -86,6 +86,9 @@ MainWindow::MainWindow(QWidget *parent) connect(ui->verticalSlider_RFgain, &QAbstractSlider::valueChanged, ui->label_RFgainValue, QOverload::of(&QLabel::setNum)); connect(ui->verticalSlider_AFGain, &QAbstractSlider::valueChanged, ui->label_AFGainValue, QOverload::of(&QLabel::setNum)); connect(ui->verticalSlider_Squelch, &QAbstractSlider::valueChanged, ui->label_SquelchValue, QOverload::of(&QLabel::setNum)); + connect(ui->verticalSlider_micGain, &QAbstractSlider::valueChanged, ui->label_micGainLevel, QOverload::of(&QLabel::setNum)); + connect(ui->verticalSlider_micMonitor, &QAbstractSlider::valueChanged, ui->label_micMonitorLevel, QOverload::of(&QLabel::setNum)); + connect(ui->verticalSlider_micCompressor, &QAbstractSlider::valueChanged, ui->label_micCompressorLevel, QOverload::of(&QLabel::setNum)); connect(ui->horizontalSlider_clar, &QAbstractSlider::valueChanged, ui->label_clar, QOverload::of(&QLabel::setNum)); connect(ui->horizontalSlider_IFshift, &QAbstractSlider::valueChanged, ui->label_IFshiftValue,QOverload::of(&QLabel::setNum)); @@ -246,6 +249,18 @@ void MainWindow::guiInit() ui->comboBox_Preamp->addItem(QString::number(my_rig->state.preamp[i])); } + //* Levels + if (!rig_has_set_level(my_rig, RIG_LEVEL_RFPOWER)) ui->verticalSlider_RFpower->setEnabled(false); + if (!rig_has_set_level(my_rig, RIG_LEVEL_RF)) ui->verticalSlider_RFgain->setEnabled(false); + if (!rig_has_set_level(my_rig, RIG_LEVEL_AF)) ui->verticalSlider_AFGain->setEnabled(false); + if (!rig_has_set_level(my_rig, RIG_LEVEL_SQL)) ui->verticalSlider_Squelch->setEnabled(false); + if (!rig_has_set_level(my_rig, RIG_LEVEL_MICGAIN)) ui->verticalSlider_micGain->setEnabled(false); + if (!rig_has_set_level(my_rig, RIG_LEVEL_MONITOR_GAIN)) ui->verticalSlider_micMonitor->setEnabled(false); + if (!rig_has_set_level(my_rig, RIG_LEVEL_COMP)) ui->verticalSlider_micCompressor->setEnabled(false); + + if (!rig_has_set_func(my_rig, RIG_FUNC_COMP)) ui->checkBox_micCompressor->setEnabled(false); + if (!rig_has_set_func(my_rig, RIG_FUNC_MON)) ui->checkBox_micMonitor->setEnabled(false); + //* Filter if (!rig_has_set_func(my_rig, RIG_FUNC_NB)) ui->checkBox_NB->setEnabled(false); if (!rig_has_set_func(my_rig, RIG_FUNC_NB2)) ui->checkBox_NB2->setEnabled(false); @@ -482,12 +497,19 @@ void MainWindow::guiUpdate() else ui->progressBar_subMeter->setValue(0.0); } - //* Sliders + //* Levels if (!ui->verticalSlider_RFpower->isSliderDown() && !rigCmd.rfPower) ui->verticalSlider_RFpower->setValue((int)(rigGet.rfPower*100)); if (!ui->verticalSlider_RFgain->isSliderDown() && !rigCmd.rfGain) ui->verticalSlider_RFgain->setValue((int)(rigGet.rfGain*100)); if (!ui->verticalSlider_AFGain->isSliderDown() && !rigCmd.afGain) ui->verticalSlider_AFGain->setValue((int)(rigGet.afGain*100)); if (!ui->verticalSlider_Squelch->isSliderDown() && !rigCmd.squelch) ui->verticalSlider_Squelch->setValue((int)(rigGet.squelch*100)); + //* MIC + if (!ui->verticalSlider_micGain->isSliderDown() && !rigCmd.micGain) ui->verticalSlider_micGain->setValue((int)(rigGet.micGain*100)); + if (!ui->verticalSlider_micMonitor->isSliderDown() && !rigCmd.micMonLevel) ui->verticalSlider_micMonitor->setValue((int)(rigGet.micMonLevel*100)); + if (!ui->verticalSlider_micCompressor->isSliderDown() && !rigCmd.micCompLevel) ui->verticalSlider_micCompressor->setValue((int)(rigGet.micCompLevel*100)); + ui->checkBox_micCompressor->setChecked(rigGet.micComp); + ui->checkBox_micMonitor->setChecked(rigGet.micMon); + //* Filter ui->checkBox_NB->setChecked(rigGet.noiseBlanker); ui->checkBox_NB2->setChecked(rigGet.noiseBlanker2); @@ -813,6 +835,33 @@ void MainWindow::on_pushButton_BandUp_clicked() } //***** CheckBox ***** +void MainWindow::on_checkBox_micCompressor_toggled(bool checked) +{ + if (checked && !rigGet.micComp) + { + rigSet.micComp = 1; + rigCmd.micComp = 1; + } + else if (!checked && rigGet.micComp) + { + rigSet.micComp = 0; + rigCmd.micComp = 1; + } +} + +void MainWindow::on_checkBox_micMonitor_toggled(bool checked) +{ + if (checked && !rigGet.micMon) + { + rigSet.micMon = 1; + rigCmd.micMon = 1; + } + else if (!checked && rigGet.micMon) + { + rigSet.micMon = 0; + rigCmd.micMon = 1; + } +} void MainWindow::on_checkBox_NAR_toggled(bool checked) { @@ -1205,6 +1254,63 @@ void MainWindow::on_verticalSlider_Squelch_sliderReleased() } +void MainWindow::on_verticalSlider_micGain_valueChanged(int value) +{ + if (!rigCmd.micGain && !ui->verticalSlider_micGain->isSliderDown()) + { + rigSet.micGain = (float)(value)/100; + if (rigSet.micGain != rigGet.micGain) rigCmd.micGain = 1; + } +} + +void MainWindow::on_verticalSlider_micGain_sliderReleased() +{ + if (!rigCmd.micGain) + { + rigSet.micGain = (float)(ui->verticalSlider_micGain->value())/100; + rigCmd.micGain = 1; + } +} + + +void MainWindow::on_verticalSlider_micCompressor_valueChanged(int value) +{ + if (!rigCmd.micCompLevel && !ui->verticalSlider_micCompressor->isSliderDown()) + { + rigSet.micCompLevel = (float)(value)/100; + if (rigSet.micCompLevel != rigGet.micCompLevel) rigCmd.micCompLevel = 1; + } +} + +void MainWindow::on_verticalSlider_micCompressor_sliderReleased() +{ + if (!rigCmd.micCompLevel) + { + rigSet.micCompLevel = (float)(ui->verticalSlider_micCompressor->value())/100; + rigCmd.micCompLevel = 1; + } +} + + +void MainWindow::on_verticalSlider_micMonitor_valueChanged(int value) +{ + if (!rigCmd.micMonLevel && !ui->verticalSlider_micMonitor->isSliderDown()) + { + rigSet.micMonLevel = (float)(value)/100; + if (rigSet.micMonLevel != rigGet.micMonLevel) rigCmd.micMonLevel = 1; + } +} + +void MainWindow::on_verticalSlider_micMonitor_sliderReleased() +{ + if (!rigCmd.micMonLevel) + { + rigSet.micMonLevel = (float)(ui->verticalSlider_micMonitor->value())/100; + rigCmd.micMonLevel = 1; + } +} + + void MainWindow::on_horizontalSlider_IFshift_valueChanged(int value) { if (!rigCmd.ifShift && !ui->horizontalSlider_IFshift->isSliderDown()) diff --git a/mainwindow.h b/mainwindow.h index b60b8e9..fc85e05 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -187,6 +187,22 @@ private slots: void on_checkBox_NB2_toggled(bool checked); + void on_verticalSlider_micGain_valueChanged(int value); + + void on_verticalSlider_micGain_sliderReleased(); + + void on_verticalSlider_micCompressor_valueChanged(int value); + + void on_verticalSlider_micCompressor_sliderReleased(); + + void on_verticalSlider_micMonitor_valueChanged(int value); + + void on_verticalSlider_micMonitor_sliderReleased(); + + void on_checkBox_micCompressor_toggled(bool checked); + + void on_checkBox_micMonitor_toggled(bool checked); + private: Ui::MainWindow *ui; QTimer *timer; diff --git a/mainwindow.ui b/mainwindow.ui index ba22782..68510f0 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -52,8 +52,11 @@ + + 5 + - 10 + 8 @@ -364,6 +367,21 @@ Band + + 8 + + + 8 + + + 8 + + + 8 + + + 5 + @@ -779,8 +797,28 @@ Filter + + 8 + + + 8 + + + 8 + + + 8 + + + 5 + + + + 8 + + Noise Reduction @@ -807,6 +845,11 @@ true + + + 8 + + NB2 @@ -814,6 +857,11 @@ + + + 8 + + Notch Filter @@ -834,6 +882,11 @@ + + + 8 + + BW Narrow @@ -844,6 +897,11 @@ + + + 8 + + IF-Shift @@ -854,6 +912,11 @@ + + + 8 + + Noise Blanking @@ -1078,7 +1141,7 @@ - + 0 @@ -1087,293 +1150,607 @@ 131 - - QFrame::NoFrame + + + 9 + - - QFrame::Raised + + QTabWidget::West - - - - 20 - 20 - 20 - 80 - - - - PointingHandCursor - - - 100 - - - 100 - - + + 0 + + + true - - Qt::Vertical - - - QSlider::TicksBothSides - - - 25 - + + + + + + 8 + + + 8 + + + 8 + + + 8 + + + 5 + + + + + + 0 + 0 + + + + + 30 + 0 + + + + PointingHandCursor + + + 100 + + + true + + + Qt::Vertical + + + QSlider::TicksBothSides + + + 25 + + + + + + + + 0 + 0 + + + + + 30 + 0 + + + + PointingHandCursor + + + 100 + + + true + + + Qt::Vertical + + + QSlider::TicksBothSides + + + 25 + + + + + + + + 7 + + + + RF Power + + + Qt::AlignCenter + + + + + + + true + + + + 0 + 0 + + + + + 30 + 0 + + + + 100 + + + Qt::AlignCenter + + + + + + + true + + + + 0 + 0 + + + + + 30 + 0 + + + + 0 + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 7 + + + + RF Gain + + + Qt::AlignCenter + + + false + + + + + + + + 7 + + + + AF Gain + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 30 + 0 + + + + PointingHandCursor + + + 100 + + + 100 + + + true + + + Qt::Vertical + + + QSlider::TicksBothSides + + + 25 + + + + + + + + 0 + 0 + + + + + 30 + 0 + + + + PointingHandCursor + + + 100 + + + 100 + + + true + + + Qt::Vertical + + + QSlider::TicksBothSides + + + 25 + + + + + + + true + + + + 0 + 0 + + + + + 30 + 0 + + + + 0 + + + Qt::AlignCenter + + + + + + + + 7 + + + + SQL + + + Qt::AlignCenter + + + + + + + true + + + + 0 + 0 + + + + + 30 + 0 + + + + 100 + + + Qt::AlignCenter + + + + - - - - 90 - 20 - 18 - 80 - - - - PointingHandCursor - - - 100 - - - 100 - - + + true - - Qt::Vertical - - - QSlider::TicksBothSides - - - 25 - - - - - - 160 - 20 - 18 - 80 - - - - PointingHandCursor - - - 100 - - - true - - - Qt::Vertical - - - QSlider::TicksBothSides - - - 25 - - - - - - 230 - 20 - 18 - 80 - - - - PointingHandCursor - - - 100 - - - true - - - Qt::Vertical - - - QSlider::TicksBothSides - - - 25 - - - - - - 0 - 100 - 61 - 16 - - - - RF Gain - - - Qt::AlignCenter - - - - - true - - - - 15 - 0 - 30 - 16 - - - - - 0 - 0 - - - - 100 - - - Qt::AlignCenter - - - - - - 65 - 100 - 71 - 16 - - - - RF Power - - - Qt::AlignCenter - - - - - true - - - - 85 - 0 - 30 - 16 - - - - - 0 - 0 - - - - 100 - - - Qt::AlignCenter - - - - - true - - - - 155 - 0 - 30 - 16 - - - - - 0 - 0 - - - - 0 - - - Qt::AlignCenter - - - - - - 140 - 100 - 61 - 16 - - - - AF Gain - - - Qt::AlignCenter - - - - - - 210 - 100 - 61 - 16 - - - - Squelch - - - Qt::AlignCenter - - - - - true - - - - 225 - 0 - 30 - 16 - - - - - 0 - 0 - - - - 0 - - - Qt::AlignCenter - + + + + + + 8 + + + 8 + + + 8 + + + 8 + + + 5 + + + + + + 0 + 0 + + + + + 30 + 0 + + + + 0 + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + Comp + + + + + + + + 7 + + + + MIC Gain + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 30 + 0 + + + + PointingHandCursor + + + 100 + + + Qt::Vertical + + + QSlider::TicksBothSides + + + 25 + + + + + + + + 0 + 0 + + + + + 30 + 0 + + + + PointingHandCursor + + + 100 + + + Qt::Vertical + + + QSlider::TicksBothSides + + + 25 + + + + + + + + 0 + 0 + + + + + 30 + 0 + + + + 0 + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + Mon + + + + + + + + 7 + + + + Monitor + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 30 + 0 + + + + PointingHandCursor + + + 100 + + + Qt::Vertical + + + QSlider::TicksBothSides + + + 25 + + + + + + + + 7 + + + + Comp + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 30 + 0 + + + + 0 + + + Qt::AlignCenter + + + + @@ -1639,115 +2016,6 @@ - - - false - - - - - - true - - - MIC - - - - - 13 - 10 - 301 - 81 - - - - - - - Gain - - - horizontalSlider_micGain - - - - - - - 100 - - - Qt::Horizontal - - - - - - - - 40 - 0 - - - - 0 - - - Qt::AlignCenter - - - - - - - Comp - - - - - - - Monitor - - - - - - - 100 - - - Qt::Horizontal - - - - - - - - 40 - 0 - - - - 0 - - - Qt::AlignCenter - - - - - - - Mon - - - - - - frame_2 frame @@ -1755,7 +2023,7 @@ groupBox_Band groupBox_filter frame_3 - frame_4 + tabWidget_level tabWidget diff --git a/rigdaemon.cpp b/rigdaemon.cpp index 7e464ad..5d249e0 100644 --- a/rigdaemon.cpp +++ b/rigdaemon.cpp @@ -385,6 +385,45 @@ void RigDaemon::rigUpdate() if (retcode == RIG_OK) rigGet.squelch = rigSet.squelch; rigCmd.squelch = 0; } + + //* MIC gain + if (rigCmd.micGain) + { + retvalue.f = rigSet.micGain; + retcode = rig_set_level(my_rig, RIG_VFO_CURR, RIG_LEVEL_MICGAIN, retvalue); + if (retcode == RIG_OK) rigGet.micGain = rigSet.micGain; + rigCmd.micGain = 0; + } + + //* MIC comp + if (rigCmd.micCompLevel) + { + retvalue.f = rigSet.micCompLevel; + retcode = rig_set_level(my_rig, RIG_VFO_CURR, RIG_LEVEL_COMP, retvalue); + if (retcode == RIG_OK) rigGet.micCompLevel = rigSet.micCompLevel; + rigCmd.micCompLevel = 0; + } + if (rigCmd.micComp) + { + retcode = rig_set_func(my_rig, RIG_VFO_CURR, RIG_FUNC_COMP, rigSet.micComp); + if (retcode == RIG_OK) rigGet.micComp = rigSet.micComp; + rigCmd.micComp = 0; + } + + //* Monitor + if (rigCmd.micMonLevel) + { + retvalue.f = rigSet.micMonLevel; + retcode = rig_set_level(my_rig, RIG_VFO_CURR, RIG_LEVEL_MONITOR_GAIN, retvalue); + if (retcode == RIG_OK) rigGet.micMonLevel = rigSet.micMonLevel; + rigCmd.micMonLevel = 0; + } + if (rigCmd.micMon) + { + retcode = rig_set_func(my_rig, RIG_VFO_CURR, RIG_FUNC_MON, rigSet.micMon); + if (retcode == RIG_OK) rigGet.micMon = rigSet.micMon; + rigCmd.micMon = 0; + } //* NB noise blanker if (rigCmd.noiseBlanker) @@ -650,15 +689,42 @@ void RigDaemon::rigUpdate() rigGet.squelch = retvalue.f; } - //* NB noise blanker + //* MIC if ((commandPriority == 12 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) + { + if (rig_has_get_level(my_rig, RIG_LEVEL_MICGAIN)) + { + rig_get_level(my_rig, RIG_VFO_CURR, RIG_LEVEL_MICGAIN, &retvalue); + rigGet.micGain = retvalue.f; + } + if (rig_has_get_func(my_rig, RIG_FUNC_COMP)) rig_get_func(my_rig, RIG_VFO_CURR, RIG_FUNC_COMP, &rigGet.micComp); + if (rig_has_get_level(my_rig, RIG_LEVEL_COMP)) + { + rig_get_level(my_rig, RIG_VFO_CURR, RIG_LEVEL_COMP, &retvalue); + rigGet.micCompLevel = retvalue.f; + } + } + + //* Monitor + if ((commandPriority == 13 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) + { + if (rig_has_get_func(my_rig, RIG_FUNC_MON)) rig_get_func(my_rig, RIG_VFO_CURR, RIG_FUNC_MON, &rigGet.micMon); + if (rig_has_get_level(my_rig, RIG_LEVEL_MONITOR_GAIN)) + { + rig_get_level(my_rig, RIG_VFO_CURR, RIG_LEVEL_MONITOR_GAIN, &retvalue); + rigGet.micMonLevel = retvalue.f; + } + } + + //* NB noise blanker + if ((commandPriority == 14 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) { if (rig_has_get_func(my_rig, RIG_FUNC_NB)) rig_get_func(my_rig, RIG_VFO_CURR, RIG_FUNC_NB, &rigGet.noiseBlanker); if (rig_has_get_func(my_rig, RIG_FUNC_NB2)) rig_get_func(my_rig, RIG_VFO_CURR, RIG_FUNC_NB2, &rigGet.noiseBlanker2); } //* NR noise reduction - if ((commandPriority == 13 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) + if ((commandPriority == 15 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) { if (rig_has_get_func(my_rig, RIG_FUNC_NR)) rig_get_func(my_rig, RIG_VFO_CURR, RIG_FUNC_NR, &rigGet.noiseReduction); if (rig_has_get_level(my_rig, RIG_LEVEL_NR)) @@ -669,13 +735,13 @@ void RigDaemon::rigUpdate() } //* NF notch filter - if ((commandPriority == 14 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) + if ((commandPriority == 16 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) { if (rig_has_get_func(my_rig, RIG_FUNC_ANF)) rig_get_func(my_rig, RIG_VFO_CURR, RIG_FUNC_ANF, &rigGet.notchFilter); } //* IF Shift - if ((commandPriority == 15 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) + if ((commandPriority == 17 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) { if (rig_has_get_level(my_rig, RIG_LEVEL_NR)) { @@ -685,7 +751,7 @@ void RigDaemon::rigUpdate() } //* Clarifier - if ((commandPriority == 16 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) + if ((commandPriority == 18 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) { if (rig_has_get_func(my_rig, RIG_FUNC_RIT)) rig_get_func(my_rig, RIG_VFO_CURR, RIG_FUNC_RIT, &rigGet.rit); //RIT if (rig_has_get_func(my_rig, RIG_FUNC_XIT)) rig_get_func(my_rig, RIG_VFO_CURR, RIG_FUNC_XIT, &rigGet.xit); //XIT @@ -697,7 +763,7 @@ void RigDaemon::rigUpdate() } //* CW - if ((commandPriority == 17 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) //&& mode=CW + if ((commandPriority == 19 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) //&& mode=CW { if (rig_has_get_func(my_rig, RIG_FUNC_FBKIN)) rig_get_func(my_rig, RIG_VFO_CURR, RIG_FUNC_FBKIN, &rigGet.bkin); //Break-in if (rig_has_get_func(my_rig, RIG_FUNC_APF)) rig_get_func(my_rig, RIG_VFO_CURR, RIG_FUNC_APF, &rigGet.apf); //Audio Peak Filter @@ -706,7 +772,7 @@ void RigDaemon::rigUpdate() } //* FM - if ((commandPriority == 18 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) //&& mode=FM + if ((commandPriority == 20 && !rigGet.ptt && rigCom.fullPoll) || commandPriority == 0) //&& mode=FM { rig_get_rptr_shift(my_rig, RIG_VFO_CURR, &rigGet.rptShift); //Repeater Shift rig_get_rptr_offs(my_rig, RIG_VFO_CURR, &rigGet.rptOffset); //Repeater Offset @@ -748,7 +814,7 @@ void RigDaemon::rigUpdate() } commandPriority ++; - if (commandPriority == 19) commandPriority = 1; + if (commandPriority == 21) commandPriority = 1; } emit resultReady(); diff --git a/rigdata.h b/rigdata.h index 4681dcc..9479646 100644 --- a/rigdata.h +++ b/rigdata.h @@ -76,7 +76,7 @@ typedef struct { int toneType; //0 none, 1 burst 1750, 2 CTCSS, 3 CTCSS SQL, 4 DCS tone_t tone; //CTCSS or DCS tone int micComp, micMon; //Flag MIC Compressor, MIC Monitor - float micGain, micMonLevel; //Level MIC Gain, MIC Monitor + float micGain, micMonLevel, micCompLevel; //Level MIC Gain, MIC Monitor, MIC Compressor } rigSettings; typedef struct { @@ -112,5 +112,5 @@ typedef struct { int rptShift, rptOffset; int tone; int micComp, micMon; - int micGain, micMonLevel; + int micGain, micMonLevel, micCompLevel; } rigCommand;