diff --git a/Software/PC_Application/Application.pro b/Software/PC_Application/Application.pro index 38badf3..4ad33b6 100644 --- a/Software/PC_Application/Application.pro +++ b/Software/PC_Application/Application.pro @@ -223,8 +223,6 @@ SOURCES += \ unit.cpp LIBS += -lusb-1.0 -unix:LIBS += -L/usr/lib/ -win32:LIBS += -L"$$_PRO_FILE_PWD_" # Github actions placed libusb here QT += widgets diff --git a/Software/PC_Application/Generator/generator.h b/Software/PC_Application/Generator/generator.h index 2c41fce..8e5f999 100644 --- a/Software/PC_Application/Generator/generator.h +++ b/Software/PC_Application/Generator/generator.h @@ -14,8 +14,10 @@ public: // Nothing to do for now virtual nlohmann::json toJSON() override {return nlohmann::json();}; virtual void fromJSON(nlohmann::json j) override {Q_UNUSED(j)}; + private slots: void updateDevice(); + private: SignalgeneratorWidget *central; }; diff --git a/Software/PC_Application/Generator/signalgenwidget.cpp b/Software/PC_Application/Generator/signalgenwidget.cpp index 008fa1d..6c6b8d7 100644 --- a/Software/PC_Application/Generator/signalgenwidget.cpp +++ b/Software/PC_Application/Generator/signalgenwidget.cpp @@ -10,6 +10,24 @@ SignalgeneratorWidget::SignalgeneratorWidget(QWidget *parent) : ui->frequency->setPrefixes(" kMG"); ui->frequency->setPrecision(6); // show enough digits + ui->span->setUnit("Hz"); + ui->span->setPrefixes(" kMG"); + ui->span->setPrecision(6); // show enough digits + + ui->current->setUnit("Hz"); + ui->current->setPrefixes(" kMG"); + ui->current->setPrecision(6); // show enough digits + + ui->dwell->setUnit("s"); + ui->dwell->setPrefixes(" m"); + ui->dwell->setPrecision(6); // show enough digits + ui->dwell->setValueQuiet(1); + m_timerId = startTimer(1000); + + ui->steps->setValueQuiet(100); + ui->steps->setPrefixes(" k"); + ui->steps->setPrecision(0); + connect(ui->frequency, &SIUnitEdit::valueChanged, [=](double newval) { if(newval < Device::Info().limits_minFreq) { newval = Device::Info().limits_minFreq; @@ -19,6 +37,44 @@ SignalgeneratorWidget::SignalgeneratorWidget(QWidget *parent) : ui->frequency->setValueQuiet(newval); emit SettingsChanged(); }); + + connect(ui->span, &SIUnitEdit::valueChanged, [=](double newval) { + if(newval < 0 ) { + newval = 0; + } else if (newval > Device::Info().limits_maxFreq - Device::Info().limits_minFreq) { + newval = Device::Info().limits_maxFreq - Device::Info().limits_minFreq; + } + ui->span->setValueQuiet(newval); + + double newF = ui->frequency->value() - ui->span->value()/2; + if (newF < 0) { + ui->frequency->setValueQuiet(ui->frequency->value() - newF); + } + + emit SettingsChanged(); + }); + + connect(ui->current, &SIUnitEdit::valueChanged, [=](double newval) { + if(newval < 0 ) { + newval = 0; + } else if (newval > Device::Info().limits_maxFreq - Device::Info().limits_minFreq) { + newval = Device::Info().limits_maxFreq - Device::Info().limits_minFreq; + } + ui->current->setValueQuiet(newval); + emit SettingsChanged(); + }); + + connect(ui->dwell, &SIUnitEdit::valueChanged, [=](double newval) { + if(newval < 0 ) { + newval = 0; + } else if (newval > 60) { + newval = 60; + } + ui->dwell->setValueQuiet(newval); + m_timerId = startTimer(newval*1000); + emit SettingsChanged(); + }); + connect(ui->levelSpin, qOverload(&QDoubleSpinBox::valueChanged), this, &SignalgeneratorWidget::setLevel); connect(ui->levelSlider, &QSlider::valueChanged, [=](int value) { setLevel((double) value / 100.0); @@ -35,17 +91,46 @@ SignalgeneratorWidget::SignalgeneratorWidget(QWidget *parent) : } emit SettingsChanged(); }); + connect(ui->EnabledSweep, &QCheckBox::clicked, [=](){ + if(ui->EnabledSweep->isChecked()) { + double newF = ui->frequency->value() - ui->span->value()/2; + if (newF < 0) { + ui->frequency->setValueQuiet(ui->frequency->value() - newF); + newF = 0; + } + ui->current->setValueQuiet(newF); + } else { + } + emit SettingsChanged(); + }); } + SignalgeneratorWidget::~SignalgeneratorWidget() { delete ui; } +void SignalgeneratorWidget::timerEvent(QTimerEvent *event) +{ + if (event->timerId() == m_timerId) { + if (ui->EnabledSweep->isChecked()) { + double newF = ui->current->value() + ui->span->value()/ui->steps->value(); + if (newF > ui->frequency->value() + ui->span->value()/2) + newF = ui->frequency->value() - ui->span->value()/2; + ui->current->setValueQuiet(newF); + SettingsChanged(); + } + } +} + Protocol::GeneratorSettings SignalgeneratorWidget::getDeviceStatus() { Protocol::GeneratorSettings s = {}; - s.frequency = ui->frequency->value(); + if (ui->EnabledSweep->isChecked()) + s.frequency = ui->current->value(); + else + s.frequency = ui->frequency->value(); s.cdbm_level = ui->levelSpin->value() * 100.0; if(ui->EnablePort1->isChecked()) { s.activePort = 1; diff --git a/Software/PC_Application/Generator/signalgenwidget.h b/Software/PC_Application/Generator/signalgenwidget.h index 909d474..a059c0d 100644 --- a/Software/PC_Application/Generator/signalgenwidget.h +++ b/Software/PC_Application/Generator/signalgenwidget.h @@ -24,8 +24,13 @@ signals: public slots: void setLevel(double level); void setFrequency(double frequency); + +protected: + void timerEvent(QTimerEvent *) override; + private: Ui::SignalgeneratorWidget *ui; + int m_timerId; }; #endif // SIGNALGENERATOR_H diff --git a/Software/PC_Application/Generator/signalgenwidget.ui b/Software/PC_Application/Generator/signalgenwidget.ui index e18a9f8..774803e 100644 --- a/Software/PC_Application/Generator/signalgenwidget.ui +++ b/Software/PC_Application/Generator/signalgenwidget.ui @@ -30,7 +30,7 @@ - 197 + 40 20 @@ -38,19 +38,6 @@ - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -157,17 +144,128 @@ - - - Qt::Vertical + + + Sweep - - - 20 - 40 - - - + + + + 60 + 40 + 133 + 20 + + + + 0MHz + + + + + + 10 + 40 + 47 + 13 + + + + Span: + + + + + + 60 + 70 + 133 + 20 + + + + 100 + + + + + + 10 + 70 + 47 + 13 + + + + Steps: + + + + + + 10 + 100 + 47 + 13 + + + + Dwell: + + + + + + 60 + 100 + 133 + 20 + + + + 100ms + + + + + + 60 + 10 + 101 + 17 + + + + Enabled + + + + + + 10 + 130 + 47 + 13 + + + + Current: + + + + + + 60 + 130 + 133 + 20 + + + + 0MHz + + + @@ -178,7 +276,7 @@ - 196 + 40 20