mirror of
https://github.com/jankae/LibreVNA.git
synced 2026-04-05 14:35:23 +00:00
SCPI commands for manual control dialog
This commit is contained in:
parent
12b2a0d5ca
commit
0c3714d80c
7 changed files with 670 additions and 5 deletions
|
|
@ -64,6 +64,7 @@ static const QString APP_GIT_HASH = QString(GITHASH);
|
|||
AppWindow::AppWindow(QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
, deviceActionGroup(new QActionGroup(this))
|
||||
, manual(nullptr)
|
||||
, ui(new Ui::MainWindow)
|
||||
, server(nullptr)
|
||||
, appVersion(APP_VERSION)
|
||||
|
|
@ -544,6 +545,159 @@ void AppWindow::SetupSCPI()
|
|||
scpi.add(vna);
|
||||
scpi.add(generator);
|
||||
scpi.add(spectrumAnalyzer);
|
||||
|
||||
auto scpi_manual = new SCPINode("MANual");
|
||||
scpi_manual->add(new SCPICommand("STArt",[=](QStringList) -> QString {
|
||||
StartManualControl();
|
||||
return "";
|
||||
}, nullptr));
|
||||
scpi_manual->add(new SCPICommand("STOp",[=](QStringList) -> QString {
|
||||
manual->close();
|
||||
delete manual;
|
||||
return "";
|
||||
}, nullptr));
|
||||
|
||||
auto addBooleanManualSetting = [=](QString cmd, void(ManualControlDialog::*set)(bool), bool(ManualControlDialog::*get)(void)) {
|
||||
scpi_manual->add(new SCPICommand(cmd, [=](QStringList params) -> QString {
|
||||
bool enable;
|
||||
if(!manual || !SCPI::paramToBool(params, 0, enable)) {
|
||||
return "ERROR";
|
||||
}
|
||||
auto set_fn = std::bind(set, manual, std::placeholders::_1);
|
||||
set_fn(enable);
|
||||
return "";
|
||||
}, [=](QStringList) -> QString {
|
||||
if(!manual) {
|
||||
return "ERROR";
|
||||
}
|
||||
auto get_fn = std::bind(get, manual);
|
||||
return get_fn() ? "TRUE" : "FALSE";
|
||||
}));
|
||||
};
|
||||
|
||||
auto addDoubleManualSetting = [=](QString cmd, void(ManualControlDialog::*set)(double), double(ManualControlDialog::*get)(void)) {
|
||||
scpi_manual->add(new SCPICommand(cmd, [=](QStringList params) -> QString {
|
||||
double value;
|
||||
if(!manual || !SCPI::paramToDouble(params, 0, value)) {
|
||||
return "ERROR";
|
||||
}
|
||||
auto set_fn = std::bind(set, manual, std::placeholders::_1);
|
||||
set_fn(value);
|
||||
return "";
|
||||
}, [=](QStringList) -> QString {
|
||||
if(!manual) {
|
||||
return "ERROR";
|
||||
}
|
||||
auto get_fn = std::bind(get, manual);
|
||||
return QString::number(get_fn());
|
||||
}));
|
||||
};
|
||||
auto addIntegerManualSetting = [=](QString cmd, void(ManualControlDialog::*set)(int), int(ManualControlDialog::*get)(void)) {
|
||||
scpi_manual->add(new SCPICommand(cmd, [=](QStringList params) -> QString {
|
||||
double value;
|
||||
if(!manual || !SCPI::paramToDouble(params, 0, value)) {
|
||||
return "ERROR";
|
||||
}
|
||||
auto set_fn = std::bind(set, manual, std::placeholders::_1);
|
||||
set_fn(value);
|
||||
return "";
|
||||
}, [=](QStringList) -> QString {
|
||||
if(!manual) {
|
||||
return "ERROR";
|
||||
}
|
||||
auto get_fn = std::bind(get, manual);
|
||||
return QString::number(get_fn());
|
||||
}));
|
||||
};
|
||||
auto addIntegerManualSettingWithReturnValue = [=](QString cmd, bool(ManualControlDialog::*set)(int), int(ManualControlDialog::*get)(void)) {
|
||||
scpi_manual->add(new SCPICommand(cmd, [=](QStringList params) -> QString {
|
||||
double value;
|
||||
if(!manual || !SCPI::paramToDouble(params, 0, value)) {
|
||||
return "ERROR";
|
||||
}
|
||||
auto set_fn = std::bind(set, manual, std::placeholders::_1);
|
||||
if(set_fn(value)) {
|
||||
return "";
|
||||
} else {
|
||||
return "ERROR";
|
||||
}
|
||||
}, [=](QStringList) -> QString {
|
||||
if(!manual) {
|
||||
return "ERROR";
|
||||
}
|
||||
auto get_fn = std::bind(get, manual);
|
||||
return QString::number(get_fn());
|
||||
}));
|
||||
};
|
||||
auto addIntegerManualQuery = [=](QString cmd, int(ManualControlDialog::*get)(void)) {
|
||||
scpi_manual->add(new SCPICommand(cmd, nullptr, [=](QStringList) -> QString {
|
||||
if(!manual) {
|
||||
return "ERROR";
|
||||
}
|
||||
auto get_fn = std::bind(get, manual);
|
||||
return QString::number(get_fn());
|
||||
}));
|
||||
};
|
||||
auto addDoubleManualQuery = [=](QString cmd, double(ManualControlDialog::*get)(void)) {
|
||||
scpi_manual->add(new SCPICommand(cmd, nullptr, [=](QStringList) -> QString {
|
||||
if(!manual) {
|
||||
return "ERROR";
|
||||
}
|
||||
auto get_fn = std::bind(get, manual);
|
||||
return QString::number(get_fn());
|
||||
}));
|
||||
};
|
||||
auto addComplexManualQuery = [=](QString cmd, std::complex<double>(ManualControlDialog::*get)(void)) {
|
||||
scpi_manual->add(new SCPICommand(cmd, nullptr, [=](QStringList) -> QString {
|
||||
if(!manual) {
|
||||
return "ERROR";
|
||||
}
|
||||
auto get_fn = std::bind(get, manual);
|
||||
auto res = get_fn();
|
||||
return QString::number(res.real())+","+QString::number(res.imag());
|
||||
}));
|
||||
};
|
||||
|
||||
addBooleanManualSetting("HSRC_CE", &ManualControlDialog::setHighSourceChipEnable, &ManualControlDialog::getHighSourceChipEnable);
|
||||
addBooleanManualSetting("HSRC_RFEN", &ManualControlDialog::setHighSourceRFEnable, &ManualControlDialog::getHighSourceRFEnable);
|
||||
addIntegerManualSettingWithReturnValue("HSRC_PWR", &ManualControlDialog::setHighSourcePower, &ManualControlDialog::getHighSourcePower);
|
||||
addDoubleManualSetting("HSRC_FREQ", &ManualControlDialog::setHighSourceFrequency, &ManualControlDialog::getHighSourceFrequency);
|
||||
addBooleanManualSetting("LSRC_EN", &ManualControlDialog::setLowSourceEnable, &ManualControlDialog::getLowSourceEnable);
|
||||
addIntegerManualSettingWithReturnValue("LSRC_PWR", &ManualControlDialog::setLowSourcePower, &ManualControlDialog::getLowSourcePower);
|
||||
addDoubleManualSetting("LSRC_FREQ", &ManualControlDialog::setLowSourceFrequency, &ManualControlDialog::getLowSourceFrequency);
|
||||
addBooleanManualSetting("BAND_SW", &ManualControlDialog::setHighband, &ManualControlDialog::getHighband);
|
||||
addDoubleManualSetting("ATTenuator", &ManualControlDialog::setAttenuator, &ManualControlDialog::getAttenuator);
|
||||
addBooleanManualSetting("AMP_EN", &ManualControlDialog::setAmplifierEnable, &ManualControlDialog::getAmplifierEnable);
|
||||
addIntegerManualSettingWithReturnValue("PORT_SW", &ManualControlDialog::setPortSwitch, &ManualControlDialog::getPortSwitch);
|
||||
addBooleanManualSetting("LO1_CE", &ManualControlDialog::setLO1ChipEnable, &ManualControlDialog::getLO1ChipEnable);
|
||||
addBooleanManualSetting("LO1_RFEN", &ManualControlDialog::setLO1RFEnable, &ManualControlDialog::getLO1RFEnable);
|
||||
addDoubleManualSetting("LO1_FREQ", &ManualControlDialog::setLO1Frequency, &ManualControlDialog::getLO1Frequency);
|
||||
addDoubleManualSetting("IF1_FREQ", &ManualControlDialog::setIF1Frequency, &ManualControlDialog::getIF1Frequency);
|
||||
addBooleanManualSetting("LO2_EN", &ManualControlDialog::setLO2Enable, &ManualControlDialog::getLO2Enable);
|
||||
addDoubleManualSetting("LO2_FREQ", &ManualControlDialog::setLO2Frequency, &ManualControlDialog::getLO2Frequency);
|
||||
addDoubleManualSetting("IF2_FREQ", &ManualControlDialog::setIF2Frequency, &ManualControlDialog::getIF2Frequency);
|
||||
addBooleanManualSetting("PORT1_EN", &ManualControlDialog::setPort1Enable, &ManualControlDialog::getPort1Enable);
|
||||
addBooleanManualSetting("PORT2_EN", &ManualControlDialog::setPort2Enable, &ManualControlDialog::getPort2Enable);
|
||||
addBooleanManualSetting("REF_EN", &ManualControlDialog::setRefEnable, &ManualControlDialog::getRefEnable);
|
||||
addIntegerManualSetting("LSRC_FREQ", &ManualControlDialog::setNumSamples, &ManualControlDialog::getNumSamples);
|
||||
addIntegerManualQuery("PORT1_MIN", &ManualControlDialog::getPort1MinADC);
|
||||
addIntegerManualQuery("PORT1_MAX", &ManualControlDialog::getPort1MaxADC);
|
||||
addDoubleManualQuery("PORT1_MAG", &ManualControlDialog::getPort1Magnitude);
|
||||
addDoubleManualQuery("PORT1_PHAse", &ManualControlDialog::getPort1Phase);
|
||||
addComplexManualQuery("PORT1_REFerenced", &ManualControlDialog::getPort1Referenced);
|
||||
|
||||
addIntegerManualQuery("PORT2_MIN", &ManualControlDialog::getPort2MinADC);
|
||||
addIntegerManualQuery("PORT2_MAX", &ManualControlDialog::getPort2MaxADC);
|
||||
addDoubleManualQuery("PORT2_MAG", &ManualControlDialog::getPort2Magnitude);
|
||||
addDoubleManualQuery("PORT2_PHAse", &ManualControlDialog::getPort2Phase);
|
||||
addComplexManualQuery("PORT2_REFerenced", &ManualControlDialog::getPort2Referenced);
|
||||
|
||||
addIntegerManualQuery("REF_MIN", &ManualControlDialog::getRefMinADC);
|
||||
addIntegerManualQuery("REF_MAX", &ManualControlDialog::getRefMaxADC);
|
||||
addDoubleManualQuery("REF_MAG", &ManualControlDialog::getRefMagnitude);
|
||||
addDoubleManualQuery("REF_PHAse", &ManualControlDialog::getRefPhase);
|
||||
|
||||
scpi.add(scpi_manual);
|
||||
}
|
||||
|
||||
void AppWindow::StartTCPServer(int port)
|
||||
|
|
@ -596,13 +750,18 @@ int AppWindow::UpdateDeviceList()
|
|||
|
||||
void AppWindow::StartManualControl()
|
||||
{
|
||||
auto control = new ManualControlDialog(*device, this);
|
||||
connect(control, &QDialog::finished, [=](){
|
||||
if(manual) {
|
||||
// dialog already active, nothing to do
|
||||
return;
|
||||
}
|
||||
manual = new ManualControlDialog(*device, this);
|
||||
connect(manual, &QDialog::finished, [=](){
|
||||
manual = nullptr;
|
||||
if(device) {
|
||||
Mode::getActiveMode()->initializeDevice();
|
||||
}
|
||||
});
|
||||
control->show();
|
||||
manual->show();
|
||||
}
|
||||
|
||||
void AppWindow::UpdateReference()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue