2020-09-13 20:44:45 +08:00
|
|
|
#include "generator.h"
|
2021-10-21 19:00:34 +08:00
|
|
|
|
2020-10-22 23:13:36 +08:00
|
|
|
#include <QSettings>
|
2020-09-13 20:44:45 +08:00
|
|
|
|
2022-04-04 05:34:18 +08:00
|
|
|
Generator::Generator(AppWindow *window, QString name)
|
|
|
|
: Mode(window, name, "GENerator")
|
2020-09-13 20:44:45 +08:00
|
|
|
{
|
2022-08-23 06:37:25 +08:00
|
|
|
central = new SignalgeneratorWidget(window, window);
|
2020-10-22 23:13:36 +08:00
|
|
|
|
2020-10-23 03:12:33 +08:00
|
|
|
auto pref = Preferences::getInstance();
|
|
|
|
|
2020-10-22 23:13:36 +08:00
|
|
|
// set initial values
|
|
|
|
if(pref.Startup.RememberSweepSettings) {
|
|
|
|
QSettings s;
|
|
|
|
central->setFrequency(s.value("GeneratorFrequency", pref.Startup.Generator.frequency).toDouble());
|
|
|
|
central->setLevel(s.value("GeneratorLevel", pref.Startup.Generator.level).toDouble());
|
|
|
|
} else {
|
|
|
|
central->setFrequency(pref.Startup.Generator.frequency);
|
|
|
|
central->setLevel(pref.Startup.Generator.level);
|
|
|
|
}
|
|
|
|
|
2021-04-11 06:10:22 +08:00
|
|
|
setupSCPI();
|
|
|
|
|
2020-09-13 20:44:45 +08:00
|
|
|
finalize(central);
|
|
|
|
connect(central, &SignalgeneratorWidget::SettingsChanged, this, &Generator::updateDevice);
|
|
|
|
}
|
|
|
|
|
2020-10-22 23:13:36 +08:00
|
|
|
void Generator::deactivate()
|
|
|
|
{
|
|
|
|
// store current settings
|
|
|
|
QSettings s;
|
|
|
|
auto settings = central->getDeviceStatus();
|
2022-08-04 23:31:24 +08:00
|
|
|
s.setValue("GeneratorFrequency", static_cast<unsigned long long>(settings.freq));
|
|
|
|
s.setValue("GeneratorLevel", static_cast<unsigned long long>((double) settings.dBm));
|
2020-10-22 23:13:36 +08:00
|
|
|
Mode::deactivate();
|
|
|
|
}
|
|
|
|
|
2020-09-13 20:44:45 +08:00
|
|
|
void Generator::initializeDevice()
|
|
|
|
{
|
|
|
|
updateDevice();
|
|
|
|
}
|
|
|
|
|
2021-09-04 01:01:22 +08:00
|
|
|
nlohmann::json Generator::toJSON()
|
|
|
|
{
|
|
|
|
return central->toJSON();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Generator::fromJSON(nlohmann::json j)
|
|
|
|
{
|
|
|
|
if(j.is_null()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
central->fromJSON(j);
|
|
|
|
}
|
|
|
|
|
2022-08-09 00:08:40 +08:00
|
|
|
void Generator::preset()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2022-08-23 06:37:25 +08:00
|
|
|
void Generator::deviceInfoUpdated()
|
|
|
|
{
|
|
|
|
central->deviceInfoUpdated();
|
|
|
|
}
|
|
|
|
|
2020-09-13 20:44:45 +08:00
|
|
|
void Generator::updateDevice()
|
|
|
|
{
|
2022-07-14 21:25:33 +08:00
|
|
|
if(!window->getDevice() || isActive != true) {
|
2020-10-22 23:13:36 +08:00
|
|
|
// can't update if not connected
|
2020-09-13 20:44:45 +08:00
|
|
|
return;
|
|
|
|
}
|
2022-08-04 23:31:24 +08:00
|
|
|
window->getDevice()->setSG(central->getDeviceStatus());
|
2020-09-13 20:44:45 +08:00
|
|
|
}
|
2021-04-11 06:10:22 +08:00
|
|
|
|
|
|
|
void Generator::setupSCPI()
|
|
|
|
{
|
|
|
|
add(new SCPICommand("FREQuency", [=](QStringList params) -> QString {
|
2021-12-13 23:05:45 +08:00
|
|
|
unsigned long long newval;
|
|
|
|
if(!SCPI::paramToULongLong(params, 0, newval)) {
|
2022-07-02 07:51:04 +08:00
|
|
|
return SCPI::getResultName(SCPI::Result::Error);
|
2021-04-11 06:10:22 +08:00
|
|
|
} else {
|
|
|
|
central->setFrequency(newval);
|
2022-07-02 07:51:04 +08:00
|
|
|
return SCPI::getResultName(SCPI::Result::Empty);
|
2021-04-11 06:10:22 +08:00
|
|
|
}
|
2021-04-13 01:48:19 +08:00
|
|
|
}, [=](QStringList) -> QString {
|
2022-08-04 23:31:24 +08:00
|
|
|
return QString::number(central->getDeviceStatus().freq);
|
2021-04-11 06:10:22 +08:00
|
|
|
}));
|
|
|
|
add(new SCPICommand("LVL", [=](QStringList params) -> QString {
|
2021-04-14 03:33:51 +08:00
|
|
|
double newval;
|
|
|
|
if(!SCPI::paramToDouble(params, 0, newval)) {
|
2022-07-02 07:51:04 +08:00
|
|
|
return SCPI::getResultName(SCPI::Result::Error);
|
2021-04-11 06:10:22 +08:00
|
|
|
} else {
|
|
|
|
central->setLevel(newval);
|
2022-07-02 07:51:04 +08:00
|
|
|
return SCPI::getResultName(SCPI::Result::Empty);
|
2021-04-11 06:10:22 +08:00
|
|
|
}
|
2021-04-13 01:48:19 +08:00
|
|
|
}, [=](QStringList) -> QString {
|
2022-08-04 23:31:24 +08:00
|
|
|
return QString::number(central->getDeviceStatus().dBm);
|
2021-04-11 06:10:22 +08:00
|
|
|
}));
|
|
|
|
add(new SCPICommand("PORT", [=](QStringList params) -> QString {
|
2021-12-13 23:05:45 +08:00
|
|
|
unsigned long long newval;
|
2022-08-23 06:37:25 +08:00
|
|
|
if(!SCPI::paramToULongLong(params, 0, newval) || newval > VirtualDevice::getInfo(window->getDevice()).ports) {
|
2022-07-02 07:51:04 +08:00
|
|
|
return SCPI::getResultName(SCPI::Result::Error);
|
2021-04-11 06:10:22 +08:00
|
|
|
} else {
|
|
|
|
central->setPort(newval);
|
2022-07-02 07:51:04 +08:00
|
|
|
return SCPI::getResultName(SCPI::Result::Empty);
|
2021-04-11 06:10:22 +08:00
|
|
|
}
|
2021-04-13 01:48:19 +08:00
|
|
|
}, [=](QStringList) -> QString {
|
2022-08-04 23:31:24 +08:00
|
|
|
return QString::number(central->getDeviceStatus().port);
|
2021-04-11 06:10:22 +08:00
|
|
|
}));
|
|
|
|
}
|