From 86fbd2edd5ef56e460c06210dac29896630105e1 Mon Sep 17 00:00:00 2001 From: IonutMuthi Date: Tue, 13 Aug 2024 13:53:03 -0400 Subject: [PATCH] emu: add configurations for emulator Signed-off-by: IonutMuthi --- core/CMakeLists.txt | 6 ++ core/include/core/emuwidget.h | 8 ++- core/src/emuwidget.cpp | 87 +++++++++++++++++++++++-- plugins/pqm/CMakeLists.txt | 3 + resources/scopy_emu_options_config.json | 23 +++++++ 5 files changed, 121 insertions(+), 6 deletions(-) create mode 100644 resources/scopy_emu_options_config.json diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index eadb1639de..dfe8bbab1c 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -120,3 +120,9 @@ target_link_libraries( install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${SCOPY_DLL_INSTALL_PATH} RUNTIME DESTINATION ${SCOPY_DLL_INSTALL_PATH} ) + +file(COPY ${CMAKE_SOURCE_DIR}/resources/scopy_emu_options_config.json DESTINATION ${CMAKE_BINARY_DIR}/resources/) +file(GLOB EMU_FILES ${CMAKE_SOURCE_DIR}/resources/emuXml/*.xml) +foreach(_emu_file ${EMU_FILES}) + file(COPY ${_emu_file} DESTINATION ${CMAKE_BINARY_DIR}/resources/emuXml/) +endforeach() diff --git a/core/include/core/emuwidget.h b/core/include/core/emuwidget.h index 8a225fdcf7..ff2e92d644 100644 --- a/core/include/core/emuwidget.h +++ b/core/include/core/emuwidget.h @@ -46,6 +46,10 @@ private Q_SLOTS: bool startIioEmuProcess(QString processPath, QStringList arg = {}); void killEmuProcess(); + void getEmuOptions(); + void configureOption(QString option); + void getJsonConfiguration(); + QWidget *m_emuWidget; QComboBox *m_demoOptCb; MenuLineEdit *m_xmlPathEdit; @@ -57,7 +61,9 @@ private Q_SLOTS: QString m_emuPath; bool m_enableDemo; QProcess *m_emuProcess; - const QStringList m_availableOptions{"adalm2000", "generic"}; + QStringList m_availableOptions; + + QString m_jsonConfigVal; }; } // namespace scopy diff --git a/core/src/emuwidget.cpp b/core/src/emuwidget.cpp index b2ca224611..76d64c35d9 100644 --- a/core/src/emuwidget.cpp +++ b/core/src/emuwidget.cpp @@ -8,6 +8,9 @@ #include #include +#include +#include +#include Q_LOGGING_CATEGORY(CAT_EMU_ADD_PAGE, "EmuAddPage") using namespace scopy; @@ -26,6 +29,8 @@ EmuWidget::EmuWidget(QWidget *parent) vLay->setMargin(0); vWidget->setLayout(vLay); + getEmuOptions(); + m_emuWidget = new QWidget(vWidget); QGridLayout *emuWidgetLay = new QGridLayout(m_emuWidget); emuWidgetLay->setSpacing(10); @@ -103,10 +108,20 @@ void EmuWidget::init() void EmuWidget::enGenericOptWidget(QWidget *xmlPathWidget, QWidget *rxTxDevWidget, QString crtOpt) { - bool isGeneric = crtOpt.contains("generic"); - xmlPathWidget->setEnabled(isGeneric); - rxTxDevWidget->setEnabled(isGeneric); + // when a new option is selected clear all fields + m_xmlPathEdit->edit()->setText(""); + m_rxTxDevEdit->edit()->setText(""); + m_uriEdit->edit()->setText(""); + + bool isNotAdalm2000 = !crtOpt.contains("adalm2000"); + + xmlPathWidget->setEnabled(isNotAdalm2000); + rxTxDevWidget->setEnabled(isNotAdalm2000); m_enDemoBtn->setFocus(); + + if(isNotAdalm2000) { + configureOption(crtOpt); + } } void EmuWidget::setStatusMessage(QString msg) @@ -141,10 +156,13 @@ QStringList EmuWidget::createArgList() { QString option = m_demoOptCb->currentText(); QStringList arguments; - arguments.append(option); - if(option.compare("generic") == 0) { + + if(option.compare("adalm2000") != 0) { + arguments.append("generic"); arguments.append(m_xmlPathEdit->edit()->text()); arguments.append(m_rxTxDevEdit->edit()->text()); + } else { + arguments.append("adalm2000"); } return arguments; } @@ -194,6 +212,65 @@ void EmuWidget::killEmuProcess() m_enableDemo = !m_enableDemo; } +void EmuWidget::getEmuOptions() +{ + getJsonConfiguration(); + + // Populate emu devices from json + QJsonDocument d = QJsonDocument::fromJson(m_jsonConfigVal.toUtf8()); + QJsonArray valuesList = d.array(); + + for(auto object : valuesList) { + QString device = object.toObject().value(QString("device")).toString(); + m_availableOptions.append(device); + } +} + +void EmuWidget::configureOption(QString option) +{ + QJsonDocument d = QJsonDocument::fromJson(m_jsonConfigVal.toUtf8()); + QJsonArray valuesList = d.array(); + + for(auto object : valuesList) { + QString device = object.toObject().value(QString("device")).toString(); + if(device == option) { + QString currentPath = QDir::currentPath(); + + if(object.toObject().contains("xml_path")) { + QString xmlPath = object.toObject().value(QString("xml_path")).toString(); + m_xmlPathEdit->edit()->setText(currentPath + xmlPath); + } + + if(object.toObject().contains("rx_tx_device")) { + QString rxTxDevice = object.toObject().value(QString("rx_tx_device")).toString(); + rxTxDevice += "@"; + rxTxDevice += currentPath; + rxTxDevice += object.toObject().value(QString("rx_tx_bin_path")).toString(); + m_rxTxDevEdit->edit()->setText(rxTxDevice); + } + + if(object.toObject().contains("uri")) { + QString uri = object.toObject().value(QString("uri")).toString(); + m_uriEdit->edit()->setText(uri); + } + + break; + } + } +} + +void EmuWidget::getJsonConfiguration() +{ + QString currentPath = QDir::currentPath(); + QString filePath = currentPath + "/resources/scopy_emu_options_config.json"; + QFile file; + + file.setFileName(filePath); + file.open(QIODevice::ReadOnly | QIODevice::Text); + m_jsonConfigVal = file.readAll(); + file.close(); +} + void EmuWidget::browseFile(QLineEdit *lineEditPath) { QString filePath = diff --git a/plugins/pqm/CMakeLists.txt b/plugins/pqm/CMakeLists.txt index 665b05e815..28d9ad9e2a 100644 --- a/plugins/pqm/CMakeLists.txt +++ b/plugins/pqm/CMakeLists.txt @@ -71,4 +71,7 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") configureinstallersettings(${SCOPY_MODULE} ${INSTALLER_DESCRIPTION} TRUE) endif() +file(COPY ${CMAKE_SOURCE_DIR}/plugins/pqm/res/pqm1.xml DESTINATION ${CMAKE_BINARY_DIR}/plugins/pqm/res/) +file(COPY ${CMAKE_SOURCE_DIR}/plugins/pqm/res/data.bin DESTINATION ${CMAKE_BINARY_DIR}/plugins/pqm/res/) + set(PQM_TARGET_NAME ${PROJECT_NAME} PARENT_SCOPE) diff --git a/resources/scopy_emu_options_config.json b/resources/scopy_emu_options_config.json new file mode 100644 index 0000000000..6160f8c84e --- /dev/null +++ b/resources/scopy_emu_options_config.json @@ -0,0 +1,23 @@ +[ + { + "device": "adalm2000", + "uri": "ip:127.0.0.1" + }, + { + "device": "pluto", + "xml_path": "/resources/emuXml/pluto.xml", + "uri": "ip:127.0.0.1" + }, + { + "device": "pqm", + "xml_path": "/plugins/pqm/res/pqm1.xml", + "uri": "ip:127.0.0.1", + "rx_tx_device":"iio:device0", + "rx_tx_bin_path": "/plugins/pqm/res/data.bin" + }, + { + "device": "generic", + "uri": "ip:127.0.0.1" + } + +]