From 08fa3fa0a069e02e38ea4ca56d775d01c5c72b33 Mon Sep 17 00:00:00 2001 From: Andre Dunford Date: Fri, 16 Dec 2022 23:41:59 -0800 Subject: [PATCH 01/12] implement sweep standby configuration --- Software/VNA_embedded/Application/App.cpp | 7 +++++- .../Application/Communication/Protocol.cpp | 1 + .../Application/Communication/Protocol.hpp | 3 ++- Software/VNA_embedded/Application/VNA.cpp | 25 ++++++++++++++++--- Software/VNA_embedded/Application/VNA.hpp | 2 ++ 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/Software/VNA_embedded/Application/App.cpp b/Software/VNA_embedded/Application/App.cpp index 34e78d9..9882420 100644 --- a/Software/VNA_embedded/Application/App.cpp +++ b/Software/VNA_embedded/Application/App.cpp @@ -183,6 +183,11 @@ inline void App_Process() { Communication::SendWithoutPayload(Protocol::PacketType::Ack); } break; + case Protocol::PacketType::InitiateSweep: { + VNA::InitiateSweep(); + Communication::SendWithoutPayload(Protocol::PacketType::Ack); + } + break; case Protocol::PacketType::SetIdle: HW::SetMode(HW::Mode::Idle); sweepActive = false; @@ -314,7 +319,7 @@ inline void App_Process() { } } } - if(HW::TimedOut()) { + if(!VNA::GetStandbyMode() && HW::TimedOut()) { HW::SetMode(HW::Mode::Idle); // insert the last received packet (restarts the timed out operation) Communication::BlockNextAck(); diff --git a/Software/VNA_embedded/Application/Communication/Protocol.cpp b/Software/VNA_embedded/Application/Communication/Protocol.cpp index e302a33..f16f621 100644 --- a/Software/VNA_embedded/Application/Communication/Protocol.cpp +++ b/Software/VNA_embedded/Application/Communication/Protocol.cpp @@ -125,6 +125,7 @@ uint16_t Protocol::EncodePacket(const PacketInfo &packet, uint8_t *dest, uint16_ case PacketType::ClearTrigger: case PacketType::StopStatusUpdates: case PacketType::StartStatusUpdates: + case PacketType::InitiateSweep: // no payload break; case PacketType::VNADatapoint: payload_size = packet.VNAdatapoint->requiredBufferSize(); break; diff --git a/Software/VNA_embedded/Application/Communication/Protocol.hpp b/Software/VNA_embedded/Application/Communication/Protocol.hpp index f50f7af..11f9f02 100644 --- a/Software/VNA_embedded/Application/Communication/Protocol.hpp +++ b/Software/VNA_embedded/Application/Communication/Protocol.hpp @@ -159,7 +159,7 @@ using SweepSettings = struct _sweepSettings { uint16_t points; uint32_t if_bandwidth; int16_t cdbm_excitation_start; // in 1/100 dbm - uint16_t unused:1; + uint16_t standby:1; uint16_t syncMaster:1; uint16_t suppressPeaks:1; uint16_t fixedPowerSetting:1; // if set the attenuator and source PLL power will not be changed across the sweep @@ -366,6 +366,7 @@ enum class PacketType : uint8_t { ClearTrigger = 29, StopStatusUpdates = 30, StartStatusUpdates = 31, + InitiateSweep = 32 }; using PacketInfo = struct _packetinfo { diff --git a/Software/VNA_embedded/Application/VNA.cpp b/Software/VNA_embedded/Application/VNA.cpp index 5dc7cd0..2f2c588 100644 --- a/Software/VNA_embedded/Application/VNA.cpp +++ b/Software/VNA_embedded/Application/VNA.cpp @@ -258,12 +258,26 @@ bool VNA::Setup(Protocol::SweepSettings s) { // Enable new data and sweep halt interrupt FPGA::EnableInterrupt(FPGA::Interrupt::NewData); FPGA::EnableInterrupt(FPGA::Interrupt::SweepHalted); - // Start the sweep + // Start the sweep if not configured for standby firstPoint = true; - FPGA::StartSweep(); + if(!settings.standby){ + FPGA::StartSweep(); + } return true; } +void VNA::InitiateSweep() { + // Invoked by a host via InitiateSweep packet + if(settings.standby){ + // make sure that SweepSettings have been configured for standby operation + FPGA::StartSweep(); + } +} + +bool VNA::GetStandbyMode() { + return settings.standby; +} + static void PassOnData() { Protocol::PacketInfo info; info.type = Protocol::PacketType::VNADatapoint; @@ -330,8 +344,11 @@ void VNA::Work() { Communication::Send(packet); } // do not reset unlevel flag here, as it is calculated only once at the setup of the sweep - // Start next sweep - FPGA::StartSweep(); + // Start next sweep if not configured for standby + if (!settings.standby){ + FPGA::StartSweep(); + } + } void VNA::SweepHalted() { diff --git a/Software/VNA_embedded/Application/VNA.hpp b/Software/VNA_embedded/Application/VNA.hpp index 2960c95..1c4b352 100644 --- a/Software/VNA_embedded/Application/VNA.hpp +++ b/Software/VNA_embedded/Application/VNA.hpp @@ -7,6 +7,8 @@ namespace VNA { bool Setup(Protocol::SweepSettings s); +void InitiateSweep(); +bool GetStandbyMode(); bool MeasurementDone(const FPGA::SamplingResult &result); void Work(); void SweepHalted(); From a294a92e2fde6576dc4fee1c7ca2d1ab80d35e00 Mon Sep 17 00:00:00 2001 From: Andre Dunford Date: Sat, 17 Dec 2022 00:37:46 -0800 Subject: [PATCH 02/12] update docs with standby configuration and InitiateSweep packet --- .../DeveloperInfo/USB_protocol_v12.pdf | Bin 197560 -> 199413 bytes .../DeveloperInfo/USB_protocol_v12.tex | 15 ++++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Documentation/DeveloperInfo/USB_protocol_v12.pdf b/Documentation/DeveloperInfo/USB_protocol_v12.pdf index a765f10ec81af20806b61f91f03edff0d0b8c94a..8d096b29e3ebea6399dc321e82781cadbaf87795 100644 GIT binary patch delta 49182 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 Date: Sat, 17 Dec 2022 01:19:46 -0800 Subject: [PATCH 03/12] respond to InitiateSweep with nack when misconfigured --- .../DeveloperInfo/USB_protocol_v12.pdf | Bin 199413 -> 199400 bytes .../DeveloperInfo/USB_protocol_v12.tex | 2 +- Software/VNA_embedded/Application/App.cpp | 9 +++++++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Documentation/DeveloperInfo/USB_protocol_v12.pdf b/Documentation/DeveloperInfo/USB_protocol_v12.pdf index 8d096b29e3ebea6399dc321e82781cadbaf87795..e7a419483586a4b298b5b4e89f49da2f53ac06c0 100644 GIT binary patch delta 1907 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 h$X=(nl Date: Sat, 17 Dec 2022 23:04:50 -0800 Subject: [PATCH 04/12] modify standby documentation --- .../DeveloperInfo/USB_protocol_v12.pdf | Bin 199400 -> 199253 bytes .../DeveloperInfo/USB_protocol_v12.tex | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/DeveloperInfo/USB_protocol_v12.pdf b/Documentation/DeveloperInfo/USB_protocol_v12.pdf index e7a419483586a4b298b5b4e89f49da2f53ac06c0..2b1323ed5511a5d5149e128e8c9071133d915887 100644 GIT binary patch delta 4505 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 delta 4649 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 diff --git a/Documentation/DeveloperInfo/USB_protocol_v12.tex b/Documentation/DeveloperInfo/USB_protocol_v12.tex index 2785a81..854db97 100644 --- a/Documentation/DeveloperInfo/USB_protocol_v12.tex +++ b/Documentation/DeveloperInfo/USB_protocol_v12.tex @@ -338,13 +338,13 @@ Setting & Behavior\\ \end{tabularx} \end{center} \item \textbf{SM:} Sync Master. Must be set to 1 at exactly one device when multiple devices are synchronized. Set to 0 when synchronization is disabled. -\item \textbf{SO:} Standby Operation. Indicates whether the VNA will timeout automatically, or wait in the configured state indefinitely for the next sweep to be triggered. Standy operation allows for lower latency of intermittent single sweeps. +\item \textbf{SO:} Standby Operation. Indicates whether the VNA will begin sweep immediately, or wait in the configured state to be triggered manually by InitiateSweep packets. Standy operation allows for lower latency of intermittent single sweeps. \begin{center} \begin{tabularx}{\textwidth}{ c|X } Setting & Behavior\\ \hline -0 & VNA will timeout to idle mode after 100ms in the halted state, or 1000ms after a sucessfully completed sweep. Requires a new SweepSettings packet to be sent for subsequent sweeps after timeout. \\ -1 & VNA will wait indefinitely in a configured state for an InitiateSweep packet. The host application is responsible for putting the VNA into idle mode with a SetIdle packet.\\ +0 & VNA will begin sweep immediately and timeout to idle mode 1000ms after sweep is completed or 100ms after entering the halted state. \\ +1 & VNA will wait in a configured state for InitiateSweep packets. The host application is responsible for putting the VNA into idle mode with a SetIdle packet.\\ \end{tabularx} \end{center} \end{itemize} From fc8eee58e7874fac19e6685f495bb754292e1447 Mon Sep 17 00:00:00 2001 From: Andre Dunford Date: Sun, 18 Dec 2022 16:54:47 -0800 Subject: [PATCH 05/12] relocate standby condition --- Software/VNA_embedded/Application/App.cpp | 2 +- Software/VNA_embedded/Application/Hardware.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Software/VNA_embedded/Application/App.cpp b/Software/VNA_embedded/Application/App.cpp index 86e2649..2ac489b 100644 --- a/Software/VNA_embedded/Application/App.cpp +++ b/Software/VNA_embedded/Application/App.cpp @@ -324,7 +324,7 @@ inline void App_Process() { } } } - if(!VNA::GetStandbyMode() && HW::TimedOut()) { + if(HW::TimedOut()) { HW::SetMode(HW::Mode::Idle); // insert the last received packet (restarts the timed out operation) Communication::BlockNextAck(); diff --git a/Software/VNA_embedded/Application/Hardware.cpp b/Software/VNA_embedded/Application/Hardware.cpp index f45fb78..dc675a5 100644 --- a/Software/VNA_embedded/Application/Hardware.cpp +++ b/Software/VNA_embedded/Application/Hardware.cpp @@ -303,7 +303,7 @@ bool HW::TimedOut() { auto bufISR = lastISR; uint64_t now = Delay::get_us(); uint64_t timeSinceLast = now - bufISR; - if(activeMode != Mode::Idle && activeMode != Mode::Generator && timeSinceLast > timeout) { + if(activeMode != Mode::Idle && activeMode != Mode::Generator && !VNA::GetStandbyMode() && timeSinceLast > timeout) { LOG_WARN("Timed out, last ISR was at %lu%06lu, now %lu%06lu" , (uint32_t) (bufISR / 1000000), (uint32_t)(bufISR%1000000) , (uint32_t) (now / 1000000), (uint32_t)(now%1000000)); From ec5e0e208cde31100c5c5b976332cd1d0499e69a Mon Sep 17 00:00:00 2001 From: Andre Dunford Date: Tue, 20 Dec 2022 01:16:22 -0800 Subject: [PATCH 06/12] evaluate AUX3 in standby state --- Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp | 4 ++++ Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp | 1 + Software/VNA_embedded/Application/Hardware.cpp | 2 +- Software/VNA_embedded/Application/VNA.cpp | 4 ++++ Software/VNA_embedded/Application/VNA.hpp | 1 + 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp index 7f81664..b27d581 100644 --- a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp +++ b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp @@ -284,6 +284,10 @@ bool FPGA::InitiateSampleRead(ReadCallback cb) { return true; } +bool FPGA::IsSweepActive() { + return isHigh(AUX3); +} + static int64_t assembleSampleResultValue(uint8_t *raw) { // LOG_DEBUG("Raw: 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x", raw[4], raw[5], raw[2], raw[3], raw[1], raw[0]); return sign_extend_64( diff --git a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp index db9809c..3aa43bb 100644 --- a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp +++ b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp @@ -135,6 +135,7 @@ ADCLimits GetADCLimits(); void ResetADCLimits(); bool ResumeHaltedSweep(); uint16_t GetStatus(); +bool IsSweepActive(); void OverwriteHardware(uint8_t attenuation, LowpassFilter filter, bool lowband, bool port1_enabled, bool port2_enabled); void DisableHardwareOverwrite(); diff --git a/Software/VNA_embedded/Application/Hardware.cpp b/Software/VNA_embedded/Application/Hardware.cpp index dc675a5..68cb4d4 100644 --- a/Software/VNA_embedded/Application/Hardware.cpp +++ b/Software/VNA_embedded/Application/Hardware.cpp @@ -303,7 +303,7 @@ bool HW::TimedOut() { auto bufISR = lastISR; uint64_t now = Delay::get_us(); uint64_t timeSinceLast = now - bufISR; - if(activeMode != Mode::Idle && activeMode != Mode::Generator && !VNA::GetStandbyMode() && timeSinceLast > timeout) { + if(activeMode != Mode::Idle && activeMode != Mode::Generator && !VNA::IsWaitingInStandby() && timeSinceLast > timeout) { LOG_WARN("Timed out, last ISR was at %lu%06lu, now %lu%06lu" , (uint32_t) (bufISR / 1000000), (uint32_t)(bufISR%1000000) , (uint32_t) (now / 1000000), (uint32_t)(now%1000000)); diff --git a/Software/VNA_embedded/Application/VNA.cpp b/Software/VNA_embedded/Application/VNA.cpp index 2f2c588..6342691 100644 --- a/Software/VNA_embedded/Application/VNA.cpp +++ b/Software/VNA_embedded/Application/VNA.cpp @@ -278,6 +278,10 @@ bool VNA::GetStandbyMode() { return settings.standby; } +bool VNA::IsWaitingInStandby() { + return settings.standby && !FPGA::IsSweepActive(); +} + static void PassOnData() { Protocol::PacketInfo info; info.type = Protocol::PacketType::VNADatapoint; diff --git a/Software/VNA_embedded/Application/VNA.hpp b/Software/VNA_embedded/Application/VNA.hpp index 1c4b352..da42314 100644 --- a/Software/VNA_embedded/Application/VNA.hpp +++ b/Software/VNA_embedded/Application/VNA.hpp @@ -9,6 +9,7 @@ namespace VNA { bool Setup(Protocol::SweepSettings s); void InitiateSweep(); bool GetStandbyMode(); +bool IsWaitingInStandby(); bool MeasurementDone(const FPGA::SamplingResult &result); void Work(); void SweepHalted(); From 5bb6fdf686ae2e5cad685db57ee8f1b321edd108 Mon Sep 17 00:00:00 2001 From: Andre Dunford Date: Tue, 20 Dec 2022 09:11:13 -0800 Subject: [PATCH 07/12] Revert "evaluate AUX3 in standby state" This reverts commit ec5e0e208cde31100c5c5b976332cd1d0499e69a. --- Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp | 4 ---- Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp | 1 - Software/VNA_embedded/Application/Hardware.cpp | 2 +- Software/VNA_embedded/Application/VNA.cpp | 4 ---- Software/VNA_embedded/Application/VNA.hpp | 1 - 5 files changed, 1 insertion(+), 11 deletions(-) diff --git a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp index b27d581..7f81664 100644 --- a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp +++ b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp @@ -284,10 +284,6 @@ bool FPGA::InitiateSampleRead(ReadCallback cb) { return true; } -bool FPGA::IsSweepActive() { - return isHigh(AUX3); -} - static int64_t assembleSampleResultValue(uint8_t *raw) { // LOG_DEBUG("Raw: 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x", raw[4], raw[5], raw[2], raw[3], raw[1], raw[0]); return sign_extend_64( diff --git a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp index 3aa43bb..db9809c 100644 --- a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp +++ b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp @@ -135,7 +135,6 @@ ADCLimits GetADCLimits(); void ResetADCLimits(); bool ResumeHaltedSweep(); uint16_t GetStatus(); -bool IsSweepActive(); void OverwriteHardware(uint8_t attenuation, LowpassFilter filter, bool lowband, bool port1_enabled, bool port2_enabled); void DisableHardwareOverwrite(); diff --git a/Software/VNA_embedded/Application/Hardware.cpp b/Software/VNA_embedded/Application/Hardware.cpp index 68cb4d4..dc675a5 100644 --- a/Software/VNA_embedded/Application/Hardware.cpp +++ b/Software/VNA_embedded/Application/Hardware.cpp @@ -303,7 +303,7 @@ bool HW::TimedOut() { auto bufISR = lastISR; uint64_t now = Delay::get_us(); uint64_t timeSinceLast = now - bufISR; - if(activeMode != Mode::Idle && activeMode != Mode::Generator && !VNA::IsWaitingInStandby() && timeSinceLast > timeout) { + if(activeMode != Mode::Idle && activeMode != Mode::Generator && !VNA::GetStandbyMode() && timeSinceLast > timeout) { LOG_WARN("Timed out, last ISR was at %lu%06lu, now %lu%06lu" , (uint32_t) (bufISR / 1000000), (uint32_t)(bufISR%1000000) , (uint32_t) (now / 1000000), (uint32_t)(now%1000000)); diff --git a/Software/VNA_embedded/Application/VNA.cpp b/Software/VNA_embedded/Application/VNA.cpp index 6342691..2f2c588 100644 --- a/Software/VNA_embedded/Application/VNA.cpp +++ b/Software/VNA_embedded/Application/VNA.cpp @@ -278,10 +278,6 @@ bool VNA::GetStandbyMode() { return settings.standby; } -bool VNA::IsWaitingInStandby() { - return settings.standby && !FPGA::IsSweepActive(); -} - static void PassOnData() { Protocol::PacketInfo info; info.type = Protocol::PacketType::VNADatapoint; diff --git a/Software/VNA_embedded/Application/VNA.hpp b/Software/VNA_embedded/Application/VNA.hpp index da42314..1c4b352 100644 --- a/Software/VNA_embedded/Application/VNA.hpp +++ b/Software/VNA_embedded/Application/VNA.hpp @@ -9,7 +9,6 @@ namespace VNA { bool Setup(Protocol::SweepSettings s); void InitiateSweep(); bool GetStandbyMode(); -bool IsWaitingInStandby(); bool MeasurementDone(const FPGA::SamplingResult &result); void Work(); void SweepHalted(); From 916d6e3e38f6a61e522827ca88e555942a3f09ec Mon Sep 17 00:00:00 2001 From: Andre Dunford Date: Tue, 20 Dec 2022 11:14:02 -0800 Subject: [PATCH 08/12] refactor evaluation of standby waiting state --- Software/VNA_embedded/Application/Hardware.cpp | 4 +++- Software/VNA_embedded/Application/VNA.hpp | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Software/VNA_embedded/Application/Hardware.cpp b/Software/VNA_embedded/Application/Hardware.cpp index dc675a5..3d0da00 100644 --- a/Software/VNA_embedded/Application/Hardware.cpp +++ b/Software/VNA_embedded/Application/Hardware.cpp @@ -250,6 +250,8 @@ void HW::SetIdle() { FPGA::Enable(FPGA::Periphery::RefMixer, false); FPGA::Enable(FPGA::Periphery::PortSwitch, false); activeMode = Mode::Idle; + VNA::SetWaitingInStandby(false); + } HW::AmplitudeSettings HW::GetAmplitudeSettings(int16_t cdbm, uint64_t freq, bool applyCorrections, bool port2) { @@ -303,7 +305,7 @@ bool HW::TimedOut() { auto bufISR = lastISR; uint64_t now = Delay::get_us(); uint64_t timeSinceLast = now - bufISR; - if(activeMode != Mode::Idle && activeMode != Mode::Generator && !VNA::GetStandbyMode() && timeSinceLast > timeout) { + if(activeMode != Mode::Idle && activeMode != Mode::Generator && !VNA::IsWaitingInStandby() && timeSinceLast > timeout) { LOG_WARN("Timed out, last ISR was at %lu%06lu, now %lu%06lu" , (uint32_t) (bufISR / 1000000), (uint32_t)(bufISR%1000000) , (uint32_t) (now / 1000000), (uint32_t)(now%1000000)); diff --git a/Software/VNA_embedded/Application/VNA.hpp b/Software/VNA_embedded/Application/VNA.hpp index 1c4b352..a411085 100644 --- a/Software/VNA_embedded/Application/VNA.hpp +++ b/Software/VNA_embedded/Application/VNA.hpp @@ -9,6 +9,8 @@ namespace VNA { bool Setup(Protocol::SweepSettings s); void InitiateSweep(); bool GetStandbyMode(); +bool IsWaitingInStandby(); +void SetWaitingInStandby(bool waiting); bool MeasurementDone(const FPGA::SamplingResult &result); void Work(); void SweepHalted(); From cc8256b4cc9f285a756ae9f5c868ee835f39af76 Mon Sep 17 00:00:00 2001 From: Andre Dunford Date: Tue, 20 Dec 2022 11:42:11 -0800 Subject: [PATCH 09/12] commit missed changes to VNA.cpp --- Software/VNA_embedded/Application/VNA.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/Software/VNA_embedded/Application/VNA.cpp b/Software/VNA_embedded/Application/VNA.cpp index 2f2c588..192a99f 100644 --- a/Software/VNA_embedded/Application/VNA.cpp +++ b/Software/VNA_embedded/Application/VNA.cpp @@ -27,6 +27,7 @@ static uint32_t last_LO2; static double logMultiplier, logFrequency; static Protocol::VNADatapoint<32> data; static bool active = false; +static bool waitingInStandby = false; static Si5351C::DriveStrength fixedPowerLowband; static bool adcShifted; static uint32_t actualBandwidth; @@ -260,7 +261,10 @@ bool VNA::Setup(Protocol::SweepSettings s) { FPGA::EnableInterrupt(FPGA::Interrupt::SweepHalted); // Start the sweep if not configured for standby firstPoint = true; - if(!settings.standby){ + if (settings.standby) { + waitingInStandby = true; + } + else { FPGA::StartSweep(); } return true; @@ -268,9 +272,10 @@ bool VNA::Setup(Protocol::SweepSettings s) { void VNA::InitiateSweep() { // Invoked by a host via InitiateSweep packet - if(settings.standby){ + if(waitingInStandby){ // make sure that SweepSettings have been configured for standby operation FPGA::StartSweep(); + waitingInStandby = false; } } @@ -278,6 +283,14 @@ bool VNA::GetStandbyMode() { return settings.standby; } +bool VNA::IsWaitingInStandby() { + return waitingInStandby; +} + +void VNA::SetWaitingInStandby(bool waiting) { + waitingInStandby = waiting; +} + static void PassOnData() { Protocol::PacketInfo info; info.type = Protocol::PacketType::VNADatapoint; @@ -345,7 +358,10 @@ void VNA::Work() { } // do not reset unlevel flag here, as it is calculated only once at the setup of the sweep // Start next sweep if not configured for standby - if (!settings.standby){ + if (settings.standby) { + waitingInStandby = true; + } + else { FPGA::StartSweep(); } From 77dfabc67feb3f42853e02a5eaa1c3d5ffdb6be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Wed, 21 Dec 2022 16:51:05 +0100 Subject: [PATCH 10/12] Fix import bug for through standard touchstone files --- .../LibreVNA-GUI/Calibration/calstandard.cpp | 4 +- .../PC_Application/LibreVNA-GUI/test.setup | 362 ------------------ .../usersjanappdatalocaltemptmpqaohp7 | 0 3 files changed, 2 insertions(+), 364 deletions(-) delete mode 100644 Software/PC_Application/LibreVNA-GUI/test.setup delete mode 100644 Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpqaohp7 diff --git a/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.cpp b/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.cpp index b96447e..0c84a11 100644 --- a/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.cpp @@ -619,7 +619,7 @@ void Through::edit(std::function finishedCallback) QObject::connect(ui->touchstoneImport, &TouchstoneImport::statusChanged, ui->updateFile, &QPushButton::setEnabled); - ui->touchstoneImport->setPorts(1); + ui->touchstoneImport->setPorts(2); if(touchstone) { ui->measurement->setChecked(true); ui->touchstoneImport->setFile(touchstone->getFilename()); @@ -628,7 +628,7 @@ void Through::edit(std::function finishedCallback) } QObject::connect(ui->updateFile, &QPushButton::clicked, [=](){ - setMeasurement(ui->touchstoneImport->getTouchstone(), ui->touchstoneImport->getPorts()[0]); + setMeasurement(ui->touchstoneImport->getTouchstone(), ui->touchstoneImport->getPorts()[0], ui->touchstoneImport->getPorts()[1]); updateMeasurementLabel(); }); diff --git a/Software/PC_Application/LibreVNA-GUI/test.setup b/Software/PC_Application/LibreVNA-GUI/test.setup deleted file mode 100644 index f49f626..0000000 --- a/Software/PC_Application/LibreVNA-GUI/test.setup +++ /dev/null @@ -1,362 +0,0 @@ -{ - "Modes": [ - { - "name": "Vector Network Analyzer", - "settings": { - "de-embedding": null, - "de-embedding_enabled": false, - "markers": null, - "sweep": { - "IFBW": 10000.0, - "frequency": { - "log": false, - "power": -10.0, - "start": 1000000.0, - "stop": 6000000000.0 - }, - "points": 1001, - "power": { - "frequency": 1000000000.0, - "start": -30.0, - "stop": -10.0 - }, - "single": false, - "type": "Frequency" - }, - "tiles": { - "orientation": "vertical", - "sizes": [ - 343, - 343 - ], - "split": true, - "tile1": { - "orientation": "horizontal", - "sizes": [ - 773, - 772 - ], - "split": true, - "tile1": { - "plot": "smithchart", - "plotsettings": { - "Z0": 50.0, - "constantLines": null, - "cursorFormat": "real + imag", - "edge_reflection": 1.0, - "frequency_override": false, - "limit_to_edge": true, - "limit_to_span": true, - "offset_axis_x": 0.0, - "offset_axis_y": 0.0, - "override_max": 6000000000.0, - "override_min": 0.0, - "traces": [ - 3896420666 - ] - }, - "split": false - }, - "tile2": { - "plot": "XY-plot", - "plotsettings": { - "XAxis": { - "div": 500000000.0, - "log": false, - "max": 6000000000.0, - "min": 1000000.0, - "mode": "Use Span", - "type": "Frequency" - }, - "YPrimary": { - "autorange": false, - "div": 10.0, - "log": false, - "max": 20.0, - "min": -120.0, - "traces": [ - 4241508620 - ], - "type": "Magnitude" - }, - "YSecondary": { - "autorange": false, - "div": 30.0, - "log": false, - "max": 180.0, - "min": -180.0, - "traces": [ - 4241508620 - ], - "type": "Phase" - }, - "limitLines": null - }, - "split": false - } - }, - "tile2": { - "orientation": "horizontal", - "sizes": [ - 773, - 772 - ], - "split": true, - "tile1": { - "plot": "XY-plot", - "plotsettings": { - "XAxis": { - "div": 1e-07, - "log": false, - "max": 9.999166736105324e-07, - "min": 0.0, - "mode": "Fit Traces", - "type": "Time" - }, - "YPrimary": { - "autorange": true, - "div": 20.0, - "log": false, - "max": 2.1792987877018692, - "min": -164.04811006538517, - "traces": [ - 4176942550 - ], - "type": "Impulse Response (Magnitude)" - }, - "YSecondary": { - "autorange": true, - "div": 0.0, - "log": false, - "max": 1.0, - "min": -1.0, - "traces": null, - "type": "Disabled" - }, - "limitLines": null - }, - "split": false - }, - "tile2": { - "plot": "smithchart", - "plotsettings": { - "Z0": 50.0, - "constantLines": null, - "cursorFormat": "real + imag", - "edge_reflection": 1.0, - "frequency_override": false, - "limit_to_edge": true, - "limit_to_span": true, - "offset_axis_x": 0.0, - "offset_axis_y": 0.0, - "override_max": 6000000000.0, - "override_min": 0.0, - "traces": [ - 1327145634 - ] - }, - "split": false - } - } - }, - "traces": [ - { - "color": "#ffff00", - "deembeddingActive": false, - "deembeddingData": null, - "hash": 3896420666, - "livetype": 0, - "math": null, - "math_enabled": false, - "name": "S11", - "parameter": "S11", - "paused": false, - "reflection": true, - "type": "Live", - "velocityFactor": 0.66, - "visible": true - }, - { - "color": "#0000ff", - "deembeddingActive": false, - "deembeddingData": null, - "hash": 4241508620, - "livetype": 0, - "math": null, - "math_enabled": false, - "name": "S12", - "parameter": "S12", - "paused": false, - "reflection": false, - "type": "Live", - "velocityFactor": 0.66, - "visible": true - }, - { - "color": "#00ff00", - "deembeddingActive": false, - "deembeddingData": null, - "hash": 4176942550, - "livetype": 0, - "math": [ - { - "enabled": true, - "operation": "TDR", - "settings": { - "automatic_DC": true, - "bandpass_mode": false, - "step_response": true, - "window": { - "type": "Hamming" - } - } - } - ], - "math_enabled": true, - "name": "S21", - "parameter": "S21", - "paused": false, - "reflection": false, - "type": "Live", - "velocityFactor": 0.66, - "visible": true - }, - { - "color": "#ff0000", - "deembeddingActive": false, - "deembeddingData": null, - "hash": 1327145634, - "livetype": 0, - "math": null, - "math_enabled": false, - "name": "S22", - "parameter": "S22", - "paused": false, - "reflection": true, - "type": "Live", - "velocityFactor": 0.66, - "visible": true - } - ] - }, - "type": "Vector Network Analyzer" - }, - { - "name": "Signal Generator", - "settings": { - "frequency": 1000000000.0, - "port": 0, - "power": 0.0, - "sweep": { - "dwell": 1.0, - "enabled": false, - "span": 0.0, - "steps": 100.0 - } - }, - "type": "Signal Generator" - }, - { - "name": "Spectrum Analyzer", - "settings": { - "markers": null, - "sweep": { - "acquisition": { - "RBW": 100000.0, - "detector": "+Peak", - "signal ID": false, - "window": "Kaiser" - }, - "frequency": { - "start": 37000000.0, - "stop": 4000000000.0 - }, - "single": false, - "trackingGenerator": { - "enabled": false, - "offset": 0.0, - "port": 1, - "power": -20.0 - } - }, - "tiles": { - "plot": "XY-plot", - "plotsettings": { - "XAxis": { - "div": 200000000.0, - "log": false, - "max": 4000000000.0, - "min": 37000000.0, - "mode": "Use Span", - "type": "Frequency" - }, - "YPrimary": { - "autorange": false, - "div": 10.0, - "log": false, - "max": 0.0, - "min": -120.0, - "traces": [ - 2411279292, - 2178442625 - ], - "type": "Magnitude" - }, - "YSecondary": { - "autorange": true, - "div": 0.0, - "log": false, - "max": 1.0, - "min": -1.0, - "traces": null, - "type": "Disabled" - }, - "limitLines": null - }, - "split": false - }, - "traces": [ - { - "color": "#ffff00", - "deembeddingActive": false, - "deembeddingData": null, - "hash": 2411279292, - "livetype": 0, - "math": null, - "math_enabled": false, - "name": "PORT1", - "parameter": "PORT1", - "paused": false, - "reflection": false, - "type": "Live", - "velocityFactor": 0.66, - "visible": true - }, - { - "color": "#0000ff", - "deembeddingActive": false, - "deembeddingData": null, - "hash": 2178442625, - "livetype": 0, - "math": null, - "math_enabled": false, - "name": "PORT2", - "parameter": "PORT2", - "paused": false, - "reflection": false, - "type": "Live", - "velocityFactor": 0.66, - "visible": true - } - ] - }, - "type": "Spectrum Analyzer" - } - ], - "Reference": { - "Mode": "Internal", - "Output": "Off" - }, - "activeMode": "Vector Network Analyzer", - "version": "1.5.0-alpha.2-4568be8ff" -} diff --git a/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpqaohp7 b/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpqaohp7 deleted file mode 100644 index e69de29..0000000 From b41b3e218e77548e4fd2dcf9dc1c2122fecff162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Thu, 22 Dec 2022 22:15:03 +0100 Subject: [PATCH 11/12] provide de-embedding data for rData() if available --- .../PC_Application/LibreVNA-GUI/Traces/Math/tracemath.h | 2 +- Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp | 9 +++++++++ Software/PC_Application/LibreVNA-GUI/Traces/trace.h | 1 + .../LibreVNA-GUI/usersjanappdatalocaltemptmpdkjetq | 0 .../LibreVNA-GUI/usersjanappdatalocaltemptmpguhrdw | 0 .../LibreVNA-GUI/usersjanappdatalocaltemptmpojxrxr | 0 .../LibreVNA-GUI/usersjanappdatalocaltemptmpsgzefn | 0 7 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpdkjetq create mode 100644 Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpguhrdw create mode 100644 Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpojxrxr create mode 100644 Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpsgzefn diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/Math/tracemath.h b/Software/PC_Application/LibreVNA-GUI/Traces/Math/tracemath.h index 3a043b9..08d06dc 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/Math/tracemath.h +++ b/Software/PC_Application/LibreVNA-GUI/Traces/Math/tracemath.h @@ -110,7 +110,7 @@ public: void assignInput(TraceMath *input); DataType getDataType() const; - std::vector& rData() { return data;} + virtual std::vector& rData() { return data;} Status getStatus() const; QString getStatusDescription() const; virtual Type getType() = 0; diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp index 02810a2..4157970 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp @@ -1484,6 +1484,15 @@ unsigned int Trace::numSamples() } } +std::vector &Trace::rData() +{ + if(deembeddingActive && deembeddingAvailable()) { + return deembeddingData; + } else { + return TraceMath::rData(); + } +} + double Trace::getUnwrappedPhase(unsigned int index) { if(index >= size()) { diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/trace.h b/Software/PC_Application/LibreVNA-GUI/Traces/trace.h index 1b50b22..45b21dc 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/trace.h +++ b/Software/PC_Application/LibreVNA-GUI/Traces/trace.h @@ -93,6 +93,7 @@ public: virtual Data getSample(unsigned int index) override; virtual Data getInterpolatedSample(double x) override; virtual unsigned int numSamples() override; + virtual std::vector& rData() override; double getUnwrappedPhase(unsigned int index); // returns a (possibly interpolated sample) at a specified frequency/time/power diff --git a/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpdkjetq b/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpdkjetq new file mode 100644 index 0000000..e69de29 diff --git a/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpguhrdw b/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpguhrdw new file mode 100644 index 0000000..e69de29 diff --git a/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpojxrxr b/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpojxrxr new file mode 100644 index 0000000..e69de29 diff --git a/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpsgzefn b/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpsgzefn new file mode 100644 index 0000000..e69de29 From 3d51f1f4975e9b5f8d2c2188692ee1cef74b9783 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Thu, 22 Dec 2022 22:16:50 +0100 Subject: [PATCH 12/12] .gitignore temp data --- Software/PC_Application/.gitignore | 2 ++ .../LibreVNA-GUI/usersjanappdatalocaltemptmpdkjetq | 0 .../LibreVNA-GUI/usersjanappdatalocaltemptmpguhrdw | 0 .../LibreVNA-GUI/usersjanappdatalocaltemptmpojxrxr | 0 .../LibreVNA-GUI/usersjanappdatalocaltemptmpsgzefn | 0 5 files changed, 2 insertions(+) delete mode 100644 Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpdkjetq delete mode 100644 Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpguhrdw delete mode 100644 Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpojxrxr delete mode 100644 Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpsgzefn diff --git a/Software/PC_Application/.gitignore b/Software/PC_Application/.gitignore index f5c9271..273a686 100644 --- a/Software/PC_Application/.gitignore +++ b/Software/PC_Application/.gitignore @@ -75,6 +75,8 @@ Application /build-* /LibreVNA-GUI/LibreVNA-GUI /LibreVNA-Test/LibreVNA-Test +/LibreVNA-GUI/users*appdatalocaltemp* + diff --git a/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpdkjetq b/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpdkjetq deleted file mode 100644 index e69de29..0000000 diff --git a/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpguhrdw b/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpguhrdw deleted file mode 100644 index e69de29..0000000 diff --git a/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpojxrxr b/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpojxrxr deleted file mode 100644 index e69de29..0000000 diff --git a/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpsgzefn b/Software/PC_Application/LibreVNA-GUI/usersjanappdatalocaltemptmpsgzefn deleted file mode 100644 index e69de29..0000000