From 279aca7287d572af4cb1bfe0447e5cef92c86581 Mon Sep 17 00:00:00 2001 From: Dennis Sheirer Date: Fri, 10 Nov 2023 03:45:10 -0500 Subject: [PATCH] #1715 Resolves issue of using both legacy and new V4 RTL2832 dongles at same time causes errant tuning behavior on the first tuner that gets initialized. Removed static qualifier from VCO reference value so that each tuner is allowed to initialize correctly. --- .../source/tuner/rtl/r8x/R8xEmbeddedTuner.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/github/dsheirer/source/tuner/rtl/r8x/R8xEmbeddedTuner.java b/src/main/java/io/github/dsheirer/source/tuner/rtl/r8x/R8xEmbeddedTuner.java index 2f4da33af..b13a4e824 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/rtl/r8x/R8xEmbeddedTuner.java +++ b/src/main/java/io/github/dsheirer/source/tuner/rtl/r8x/R8xEmbeddedTuner.java @@ -45,7 +45,7 @@ public abstract class R8xEmbeddedTuner extends EmbeddedTuner private static final byte VERSION = (byte) 49; protected static final int IF_FREQUENCY = 3570000; private static final Logger mLog = LoggerFactory.getLogger(R8xEmbeddedTuner.class); - private static int mVcoPowerRef = 1; + private int mVcoPowerRef = 1; /** * Shadow register is used to keep a cached (in-memory) copy of all registers, so that we don't have to read a @@ -232,10 +232,11 @@ protected void setPLL(long frequency, boolean controlI2C) throws UsbException FrequencyDivider divider = FrequencyDivider.fromFrequency(frequency); int statusRegister4 = getStatusRegister(4, controlI2C); int vco_fine_tune = (statusRegister4 & 0x30) >> 4; - int div_num = divider.getDividerNumber(vco_fine_tune); + int div_num = divider.getDividerNumber(vco_fine_tune, mVcoPowerRef); writeRegister(Register.DIVIDER, (byte) (div_num << 5), controlI2C); /* Get the integral number for this divider and frequency */ Integral integral = divider.getIntegral(frequency); + System.out.println("Using divider [" + divider + "] integral [" + integral + "] for [" + frequency + "]"); writeRegister(Register.PLL, integral.getRegisterValue(), controlI2C); /* Calculate the sigma-delta modulator fractional setting. If it's non-zero, power up the sdm and apply the fractional setting, otherwise turn it off */ @@ -984,17 +985,17 @@ public enum FrequencyDivider mIntegralValue = integralValue; } - public int getDividerNumber(int vcoFineTune) + public int getDividerNumber(int vcoFineTune, int vcoPowerRef) { - if(vcoFineTune == mVcoPowerRef) + if(vcoFineTune == vcoPowerRef) { return mDividerNumber; } - else if(vcoFineTune < mVcoPowerRef) + else if(vcoFineTune < vcoPowerRef) { return mDividerNumber - 1; } - else if(vcoFineTune > mVcoPowerRef) + else if(vcoFineTune > vcoPowerRef) { return mDividerNumber + 1; }