From 8708164ac80763c473c11f95dbf79c16f8d5adf1 Mon Sep 17 00:00:00 2001
From: Martin Braun <martin.braun@ettus.com>
Date: Wed, 23 Jun 2021 10:30:12 +0200
Subject: cal: Add tune-settling time

This is a device-specific parameter to allow for the tune to settle
before proceeding with the calibration. On X410, we set this time to 500
ms. On other devices, we leave it at 0.
---
 host/python/uhd/usrp/cal/usrp_calibrator.py | 5 +++++
 host/utils/uhd_power_cal.py                 | 2 ++
 2 files changed, 7 insertions(+)

diff --git a/host/python/uhd/usrp/cal/usrp_calibrator.py b/host/python/uhd/usrp/cal/usrp_calibrator.py
index bb98e045a..c129fb17d 100644
--- a/host/python/uhd/usrp/cal/usrp_calibrator.py
+++ b/host/python/uhd/usrp/cal/usrp_calibrator.py
@@ -91,6 +91,7 @@ class USRPCalibratorBase:
     lo_offset = 0.0
     min_freq = None
     max_freq = None
+    tune_settling_time = 0
 
     def __init__(self, usrp, meas_dev, direction, **kwargs):
         self._usrp = usrp
@@ -200,6 +201,7 @@ class USRPCalibratorBase:
                 self._noise[freq] = {}
                 tune_req = uhd.types.TuneRequest(freq)
                 self._usrp.set_rx_freq(tune_req, self._chan)
+                time.sleep(self.tune_settling_time)
                 for gain in self._gains:
                     self._usrp.set_rx_gain(gain, self._chan)
                     self._noise[freq][gain] = get_usrp_power(self._streamer)
@@ -401,6 +403,9 @@ class X410Calibrator(USRPCalibratorBase):
     default_rate = 3.84e6
     min_freq = 1e6
     max_freq = 8e9
+    # X410 non-timed tunes are currently very poke-intensive, so we give it some
+    # time to clear the command queue
+    tune_settling_time = .5
 
 ###############################################################################
 # The dispatch function
diff --git a/host/utils/uhd_power_cal.py b/host/utils/uhd_power_cal.py
index b9029cc60..70fcbbde6 100644
--- a/host/utils/uhd_power_cal.py
+++ b/host/utils/uhd_power_cal.py
@@ -9,6 +9,7 @@ Utility to run power calibrations with USRPs
 """
 
 import sys
+import time
 import math
 import pickle
 import argparse
@@ -180,6 +181,7 @@ class CalRunner:
         print("=== Running calibration at frequency {:.3f} MHz...".format(freq / 1e6))
         tune_req = uhd.types.TuneRequest(freq, self.lo_offset)
         getattr(self.usrp, 'set_{}_freq'.format(self.dir))(tune_req, chan)
+        time.sleep(self.usrp_cal.tune_settling_time)
         actual_freq = getattr(self.usrp, 'get_{}_freq'.format(self.dir))(chan)
         if abs(actual_freq - freq) > 1.0:
             print("WARNING: Frequency was coerced from {:.2f} MHz to {:.2f} MHz!"
-- 
cgit v1.2.3