From 289a3909fdcd2f65e55bcd4bbaed27b264bb6365 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Fri, 17 Feb 2023 15:12:59 +0100 Subject: [PATCH] Change device connections to catch initial device status --- .../Device/LibreVNA/librevnadriver.cpp | 10 ++++--- .../Device/LibreVNA/librevnatcpdriver.cpp | 20 +++++++------ .../PC_Application/LibreVNA-GUI/appwindow.cpp | 28 +++++++++---------- 3 files changed, 31 insertions(+), 27 deletions(-) diff --git a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnadriver.cpp b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnadriver.cpp index 4be5b60..1d82210 100644 --- a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnadriver.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnadriver.cpp @@ -541,7 +541,7 @@ void LibreVNADriver::handleReceivedPacket(const Protocol::PacketInfo &packet) } switch(packet.type) { - case Protocol::PacketType::DeviceInfo: + case Protocol::PacketType::DeviceInfo: { // Check protocol version if(packet.info.ProtocolVersion != Protocol::Version) { auto ret = InformationBox::AskQuestion("Warning", @@ -562,7 +562,8 @@ void LibreVNADriver::handleReceivedPacket(const Protocol::PacketInfo &packet) Feature::SA, Feature::SATrackingGenerator, Feature::SATrackingOffset, Feature::ExtRefIn, Feature::ExtRefOut, }; - info.Limits.VNA.ports = 2; + auto ports = packet.info.hardware_version == 0xFF ? 1 : 2; + info.Limits.VNA.ports = ports; info.Limits.VNA.minFreq = packet.info.limits_minFreq; info.Limits.VNA.maxFreq = harmonicMixing ? packet.info.limits_maxFreqHarmonic : packet.info.limits_maxFreq; info.Limits.VNA.maxPoints = packet.info.limits_maxPoints; @@ -571,13 +572,13 @@ void LibreVNADriver::handleReceivedPacket(const Protocol::PacketInfo &packet) info.Limits.VNA.mindBm = (double) packet.info.limits_cdbm_min / 100; info.Limits.VNA.maxdBm = (double) packet.info.limits_cdbm_max / 100; - info.Limits.Generator.ports = 2; + info.Limits.Generator.ports = ports; info.Limits.Generator.minFreq = packet.info.limits_minFreq; info.Limits.Generator.maxFreq = packet.info.limits_maxFreq; info.Limits.Generator.mindBm = (double) packet.info.limits_cdbm_min / 100; info.Limits.Generator.maxdBm = (double) packet.info.limits_cdbm_max / 100; - info.Limits.SA.ports = 2; + info.Limits.SA.ports = ports; info.Limits.SA.minFreq = packet.info.limits_minFreq; info.Limits.SA.maxFreq = packet.info.limits_maxFreq; info.Limits.SA.minRBW = packet.info.limits_minRBW; @@ -587,6 +588,7 @@ void LibreVNADriver::handleReceivedPacket(const Protocol::PacketInfo &packet) limits_maxAmplitudePoints = packet.info.limits_maxAmplitudePoints; emit InfoUpdated(); + } break; case Protocol::PacketType::DeviceStatusV1: lastStatus = packet.statusV1; diff --git a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnatcpdriver.cpp b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnatcpdriver.cpp index b1a63b3..c9b7156 100644 --- a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnatcpdriver.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnatcpdriver.cpp @@ -18,14 +18,23 @@ static constexpr int SSDPport = 1900; LibreVNATCPDriver::LibreVNATCPDriver() : LibreVNADriver() { -// dataSocket = nullptr; -// logSocket = nullptr; connected = false; m_receiveThread = nullptr; auto interfaces = QNetworkInterface::allInterfaces(); for(auto i : interfaces) { + qDebug() << this << i.type(); + switch(i.type()) { + case QNetworkInterface::Ethernet: + case QNetworkInterface::Wifi: + case QNetworkInterface::Virtual: + case QNetworkInterface::Unknown: + break; + default: + // skip all other interface types + continue; + } auto socket = new QUdpSocket(); socket->bind(QHostAddress::AnyIPv4, 0, QUdpSocket::ShareAddress); socket->setMulticastInterface(i); @@ -103,9 +112,6 @@ bool LibreVNATCPDriver::connectTo(QString serial) } // attempt to connect to the device -// dataSocket = new QTcpSocket(); -// logSocket = new QTcpSocket(); - dataSocket.connectToHost(devInfo.address, DataPort); logSocket.connectToHost(devInfo.address, LogPort); @@ -114,10 +120,6 @@ bool LibreVNATCPDriver::connectTo(QString serial) // at least one socket failed dataSocket.close(); logSocket.close(); -// delete dataSocket; -// delete logSocket; -// dataSocket = nullptr; -// logSocket = nullptr; InformationBox::ShowError("Error", "TCP connection timed out"); return false; } diff --git a/Software/PC_Application/LibreVNA-GUI/appwindow.cpp b/Software/PC_Application/LibreVNA-GUI/appwindow.cpp index ac93b52..8688164 100644 --- a/Software/PC_Application/LibreVNA-GUI/appwindow.cpp +++ b/Software/PC_Application/LibreVNA-GUI/appwindow.cpp @@ -17,7 +17,6 @@ #include "VNA/vna.h" #include "Generator/generator.h" #include "SpectrumAnalyzer/spectrumanalyzer.h" -#include "CustomWidgets/jsonpickerdialog.h" #include "CustomWidgets/informationbox.h" #include "Util/app_common.h" #include "about.h" @@ -337,6 +336,20 @@ bool AppWindow::ConnectToDevice(QString serial, DeviceDriver *driver) if(d->GetAvailableDevices().count(serial)) { // this driver can connect to the device connect(d, &DeviceDriver::InfoUpdated, this, &AppWindow::DeviceInfoUpdated, Qt::QueuedConnection); + connect(d, &DeviceDriver::LogLineReceived, &deviceLog, &DeviceLog::addLine); + connect(d, &DeviceDriver::ConnectionLost, this, &AppWindow::DeviceConnectionLost); + connect(d, &DeviceDriver::StatusUpdated, this, &AppWindow::DeviceStatusUpdated); + connect(d, &DeviceDriver::FlagsUpdated, this, &AppWindow::DeviceFlagsUpdated); + connect(d, &DeviceDriver::releaseControl, this, [=](){ + if(lastActiveMode) { + modeHandler->activate(lastActiveMode); + } + }); + connect(d, &DeviceDriver::acquireControl, this, [=](){ + lastActiveMode = modeHandler->getActiveMode(); + modeHandler->deactivate(lastActiveMode); + }); + if(d->connectDevice(serial)) { device = d; } else { @@ -351,19 +364,6 @@ bool AppWindow::ConnectToDevice(QString serial, DeviceDriver *driver) return false; } UpdateStatusBar(AppWindow::DeviceStatusBar::Connected); - connect(device, &DeviceDriver::LogLineReceived, &deviceLog, &DeviceLog::addLine); - connect(device, &DeviceDriver::ConnectionLost, this, &AppWindow::DeviceConnectionLost); - connect(device, &DeviceDriver::StatusUpdated, this, &AppWindow::DeviceStatusUpdated); - connect(device, &DeviceDriver::FlagsUpdated, this, &AppWindow::DeviceFlagsUpdated); - connect(device, &DeviceDriver::releaseControl, this, [=](){ - if(lastActiveMode) { - modeHandler->activate(lastActiveMode); - } - }); - connect(device, &DeviceDriver::acquireControl, this, [=](){ - lastActiveMode = modeHandler->getActiveMode(); - modeHandler->deactivate(lastActiveMode); - }); // connect(vdevice, &VirtualDevice::NeedsFirmwareUpdate, this, &AppWindow::DeviceNeedsUpdate); ui->actionDisconnect->setEnabled(true); // find correct position to add device specific actions at