FiRa Consortium - CR 423 - Interval based scheduling removal cleanup

Bug: 285984664
Test: atest ServiceUwbTests
Change-Id: I15dc702cd13b37be70212949390619e236467d35
diff --git a/docs/FiRa_CRs_Android.csv b/docs/FiRa_CRs_Android.csv
index ec58d3f..4cd8c4c 100644
--- a/docs/FiRa_CRs_Android.csv
+++ b/docs/FiRa_CRs_Android.csv
@@ -74,7 +74,7 @@
 CR414,NA,CR adds clarifying text; no Android stack changes required
 CR421,NA,Marked as N/A (MAC)
 CR422,NA,CR specifies interpretation of existing field; no Android stack change required
-CR423,NO,
+CR423,Yes,Ranging interval renaming not addressed
 CR424,YES,
 CR425,NA,Marked as N/A (MAC)
 CR426,NA,CR clarifies UWBS behavior; no Android stack changes required
diff --git a/flags/uwb_flags.aconfig b/flags/uwb_flags.aconfig
index d507e7c..7616b56 100644
--- a/flags/uwb_flags.aconfig
+++ b/flags/uwb_flags.aconfig
@@ -33,4 +33,11 @@
     namespace: "uwb"
     description: "Parse the UWBS Capability tag(s) based on it's Fira UCI version"
     bug: "301834443"
-}
\ No newline at end of file
+}
+
+flag {
+    name: "cr423_cleanup_interval_scheduling"
+    namespace: "uwb"
+    description: "Implement CR-423: Remove Interval-based scheduling for Fira 2.0+ devices"
+    bug: "285984664"
+}
diff --git a/service/java/com/android/server/uwb/UwbConfigurationManager.java b/service/java/com/android/server/uwb/UwbConfigurationManager.java
index 7ad5455..fe7076c 100644
--- a/service/java/com/android/server/uwb/UwbConfigurationManager.java
+++ b/service/java/com/android/server/uwb/UwbConfigurationManager.java
@@ -89,34 +89,35 @@
      * Retrieve app configurations from UWBS.
      */
     public <T extends Params> Pair<Integer, T> getAppConfigurations(int sessionId,
-            String protocolName, byte[] appConfigIds, Class<T> paramType, String chipId) {
+            String protocolName, byte[] appConfigIds, Class<T> paramType, String chipId,
+            ProtocolVersion protocolVersion) {
 
         Log.d(TAG, "getAppConfigurations for protocol: " + protocolName);
         UwbTlvData getAppConfig = mNativeUwbManager.getAppConfigurations(sessionId,
                     appConfigIds.length, appConfigIds.length, appConfigIds, chipId);
         Log.i(TAG, "getAppConfigurations respData: "
                 + (getAppConfig != null ? getAppConfig.toString() : "null"));
-        return decodeTLV(protocolName, getAppConfig, paramType);
+        return decodeTLV(protocolName, getAppConfig, paramType, protocolVersion);
     }
 
     /**
      * Retrieve capability information from UWBS.
      */
     public <T extends Params> Pair<Integer, T> getCapsInfo(String protocolName,
-            Class<T> paramType, String chipId) {
+            Class<T> paramType, String chipId, ProtocolVersion protocolVersion) {
 
         Log.d(TAG, "getCapsInfo for protocol: " + protocolName);
         UwbTlvData capsInfo = mNativeUwbManager.getCapsInfo(chipId);
         Log.i(TAG, "getCapsInfo respData: "
                 + (capsInfo != null ? capsInfo.toString() : "null"));
-        return decodeTLV(protocolName, capsInfo, paramType);
+        return decodeTLV(protocolName, capsInfo, paramType, protocolVersion);
     }
 
     /**
      * Common decode TLV function based on protocol
      */
     public <T extends Params> Pair<Integer, T> decodeTLV(String protocolName,
-            UwbTlvData tlvData, Class<T> paramType) {
+            UwbTlvData tlvData, Class<T> paramType, ProtocolVersion protocolVersion) {
         int status;
         if (tlvData != null) {
             status = tlvData.getStatus();
@@ -138,7 +139,7 @@
         }
         T params = null;
         try {
-            params = decoder.getParams(tlvs, paramType);
+            params = decoder.getParams(tlvs, paramType, protocolVersion);
         } catch (IllegalArgumentException e) {
             Log.e(TAG, "Failed to decode", e);
         }
diff --git a/service/java/com/android/server/uwb/UwbServiceCore.java b/service/java/com/android/server/uwb/UwbServiceCore.java
index 233a421..ff3d95a 100644
--- a/service/java/com/android/server/uwb/UwbServiceCore.java
+++ b/service/java/com/android/server/uwb/UwbServiceCore.java
@@ -453,7 +453,8 @@
         // TODO(b/211445008): Consolidate to a single uwb thread.
         Pair<Integer, GenericSpecificationParams> specificationParams =
                 mConfigurationManager.getCapsInfo(
-                        GenericParams.PROTOCOL_NAME, GenericSpecificationParams.class, chipId);
+                        GenericParams.PROTOCOL_NAME, GenericSpecificationParams.class, chipId,
+                        mSessionManager.getUwbsFiraProtocolVersion(chipId));
         Trace.endSection();
         if (specificationParams.first != UwbUciConstants.STATUS_CODE_OK
                 || specificationParams.second == null)  {
diff --git a/service/java/com/android/server/uwb/UwbSessionManager.java b/service/java/com/android/server/uwb/UwbSessionManager.java
index 6049e13..12f0f5c 100644
--- a/service/java/com/android/server/uwb/UwbSessionManager.java
+++ b/service/java/com/android/server/uwb/UwbSessionManager.java
@@ -1495,7 +1495,8 @@
                                                     CccParams.PROTOCOL_NAME,
                                                     new byte[0],
                                                     CccRangingStartedParams.class,
-                                                    uwbSession.getChipId());
+                                                    uwbSession.getChipId(),
+                                                    CccParams.PROTOCOL_VERSION_1_0);
                                     if (statusAndParams.first != UwbUciConstants.STATUS_CODE_OK) {
                                         Log.e(TAG, "Failed to get CCC ranging started params");
                                     }
@@ -1607,7 +1608,8 @@
                                 CccParams.PROTOCOL_NAME,
                                 new byte[0],
                                 CccRangingStoppedParams.class,
-                                uwbSession.getChipId());
+                                uwbSession.getChipId(),
+                                CccParams.PROTOCOL_VERSION_1_0);
                 if (statusAndParams.first != UwbUciConstants.STATUS_CODE_OK) {
                     Log.e(TAG, "Failed to get CCC ranging stopped params");
                 }
@@ -1965,7 +1967,7 @@
         return true;
     }
 
-    private FiraProtocolVersion getUwbsFiraProtocolVersion(String chipId) {
+    protected FiraProtocolVersion getUwbsFiraProtocolVersion(String chipId) {
         UwbDeviceInfoResponse deviceInfo =
                 mUwbInjector.getUwbServiceCore().getCachedDeviceInfoResponse(chipId);
         if (deviceInfo != null) {
diff --git a/service/java/com/android/server/uwb/params/CccDecoder.java b/service/java/com/android/server/uwb/params/CccDecoder.java
index 4d1be84..6f1eb56 100644
--- a/service/java/com/android/server/uwb/params/CccDecoder.java
+++ b/service/java/com/android/server/uwb/params/CccDecoder.java
@@ -63,6 +63,7 @@
 import com.android.server.uwb.config.ConfigParam;
 
 import com.google.uwb.support.base.Params;
+import com.google.uwb.support.base.ProtocolVersion;
 import com.google.uwb.support.ccc.CccProtocolVersion;
 import com.google.uwb.support.ccc.CccPulseShapeCombo;
 import com.google.uwb.support.ccc.CccRangingStartedParams;
@@ -84,7 +85,8 @@
     }
 
     @Override
-    public <T extends Params> T getParams(TlvDecoderBuffer tlvs, Class<T> paramsType)
+    public <T extends Params> T getParams(TlvDecoderBuffer tlvs, Class<T> paramsType,
+            ProtocolVersion protocolVersion)
             throws IllegalArgumentException {
         if (CccRangingStartedParams.class.equals(paramsType)) {
             return (T) getCccRangingStartedParamsFromTlvBuffer(tlvs);
diff --git a/service/java/com/android/server/uwb/params/FiraDecoder.java b/service/java/com/android/server/uwb/params/FiraDecoder.java
index 5f99c5b..724de48 100644
--- a/service/java/com/android/server/uwb/params/FiraDecoder.java
+++ b/service/java/com/android/server/uwb/params/FiraDecoder.java
@@ -138,8 +138,11 @@
 
 import android.util.Log;
 
+import com.android.server.uwb.UwbInjector;
+
 import com.google.uwb.support.base.FlagEnum;
 import com.google.uwb.support.base.Params;
+import com.google.uwb.support.base.ProtocolVersion;
 import com.google.uwb.support.fira.FiraParams;
 import com.google.uwb.support.fira.FiraParams.BprfParameterSetCapabilityFlag;
 import com.google.uwb.support.fira.FiraParams.CcConstraintLengthCapabilitiesFlag;
@@ -164,10 +167,22 @@
 public class FiraDecoder extends TlvDecoder {
     private static final String TAG = "FiraDecoder";
 
+    private final UwbInjector mUwbInjector;
+
+    public FiraDecoder(UwbInjector uwbInjector) {
+        mUwbInjector = uwbInjector;
+    }
+
     @Override
-    public <T extends Params> T getParams(TlvDecoderBuffer tlvs, Class<T> paramType) {
+    public <T extends Params> T getParams(TlvDecoderBuffer tlvs, Class<T> paramType,
+            ProtocolVersion protocolVersion) {
         if (FiraSpecificationParams.class.equals(paramType)) {
-            return (T) getFiraSpecificationParamsFromTlvBuffer(tlvs);
+            // The "protocolVersion" is always expected to be of type "FiraProtocolVersion" here,
+            // but in case it's not, we use a backup value of "PROTOCOL_VERSION_1_1".
+            FiraProtocolVersion uwbsFiraProtocolVersion =
+                    (protocolVersion instanceof FiraProtocolVersion)
+                        ? (FiraProtocolVersion) protocolVersion : FiraParams.PROTOCOL_VERSION_1_1;
+            return (T) getFiraSpecificationParamsFromTlvBuffer(tlvs, uwbsFiraProtocolVersion);
         }
         return null;
     }
@@ -176,7 +191,8 @@
         return (flags & mask) != 0;
     }
 
-    private FiraSpecificationParams getFiraSpecificationParamsFromTlvBuffer(TlvDecoderBuffer tlvs) {
+    private FiraSpecificationParams getFiraSpecificationParamsFromTlvBuffer(TlvDecoderBuffer tlvs,
+                    ProtocolVersion protocolVersion) {
         FiraSpecificationParams.Builder builder = new FiraSpecificationParams.Builder();
         byte[] versionCheck = tlvs.getByteArray(SUPPORTED_FIRA_PHY_VERSION_RANGE_VER_2_0);
         if (versionCheck.length == 1) {
@@ -258,7 +274,8 @@
             byte rangingTimeStructUci = tlvs.getByte(SUPPORTED_RANGING_TIME_STRUCT_VER_1_0);
             EnumSet<RangingTimeStructCapabilitiesFlag> rangingTimeStructFlag =
                     EnumSet.noneOf(RangingTimeStructCapabilitiesFlag.class);
-            if (isBitSet(rangingTimeStructUci, INTERVAL_BASED_SCHEDULING)) {
+            if (protocolVersion.getMajor() <= 2
+                    && isBitSet(rangingTimeStructUci, INTERVAL_BASED_SCHEDULING)) {
                 rangingTimeStructFlag.add(
                         RangingTimeStructCapabilitiesFlag.HAS_INTERVAL_BASED_SCHEDULING_SUPPORT);
             }
@@ -549,9 +566,12 @@
             byte rangingTimeStructUci = tlvs.getByte(SUPPORTED_RANGING_TIME_STRUCT_VER_2_0);
             EnumSet<RangingTimeStructCapabilitiesFlag> rangingTimeStructFlag =
                     EnumSet.noneOf(RangingTimeStructCapabilitiesFlag.class);
-            if (isBitSet(rangingTimeStructUci, INTERVAL_BASED_SCHEDULING)) {
-                rangingTimeStructFlag.add(
-                        RangingTimeStructCapabilitiesFlag.HAS_INTERVAL_BASED_SCHEDULING_SUPPORT);
+            // When CR-423 is implemented, do not parse for the "INTERVAL_BASED_SCHEDULING" bit.
+            if (!mUwbInjector.getFeatureFlags().cr423CleanupIntervalScheduling()) {
+                if (isBitSet(rangingTimeStructUci, INTERVAL_BASED_SCHEDULING)) {
+                    rangingTimeStructFlag.add(
+                            RangingTimeStructCapabilitiesFlag.HAS_INTERVAL_BASED_SCHEDULING_SUPPORT);
+                }
             }
             if (isBitSet(rangingTimeStructUci, BLOCK_BASED_SCHEDULING)) {
                 rangingTimeStructFlag.add(
diff --git a/service/java/com/android/server/uwb/params/FiraEncoder.java b/service/java/com/android/server/uwb/params/FiraEncoder.java
index 76eb64b..cdf7f82 100644
--- a/service/java/com/android/server/uwb/params/FiraEncoder.java
+++ b/service/java/com/android/server/uwb/params/FiraEncoder.java
@@ -103,7 +103,7 @@
                 .putByte(ConfigParam.PSDU_DATA_RATE, (byte) params.getPsduDataRate())
                 .putByte(ConfigParam.PREAMBLE_DURATION, (byte) params.getPreambleDuration())
                 // n.a. for OWR UL-TDoA and 0x01 for all other RangingRoundUsage values.
-                .putByte(ConfigParam.RANGING_TIME_STRUCT, (byte) 0x01)
+                .putByte(ConfigParam.RANGING_TIME_STRUCT, (byte) params.getRangingTimeStruct())
                 .putByte(ConfigParam.SLOTS_PER_RR, (byte) params.getSlotsPerRangingRound())
                 .putByte(ConfigParam.PRF_MODE, (byte) params.getPrfMode())
                 .putByte(ConfigParam.SCHEDULED_MODE, (byte) params.getScheduledMode())
diff --git a/service/java/com/android/server/uwb/params/GenericDecoder.java b/service/java/com/android/server/uwb/params/GenericDecoder.java
index 30649e2..052794c 100644
--- a/service/java/com/android/server/uwb/params/GenericDecoder.java
+++ b/service/java/com/android/server/uwb/params/GenericDecoder.java
@@ -23,6 +23,7 @@
 import com.android.server.uwb.UwbInjector;
 
 import com.google.uwb.support.base.Params;
+import com.google.uwb.support.base.ProtocolVersion;
 import com.google.uwb.support.ccc.CccParams;
 import com.google.uwb.support.ccc.CccSpecificationParams;
 import com.google.uwb.support.fira.FiraParams;
@@ -40,19 +41,21 @@
     private static final String TAG = "GenericDecoder";
 
     @Override
-    public <T extends Params> T getParams(TlvDecoderBuffer tlvs, Class<T> paramType) {
+    public <T extends Params> T getParams(TlvDecoderBuffer tlvs, Class<T> paramType,
+                    ProtocolVersion protocolVersion) {
         if (GenericSpecificationParams.class.equals(paramType)) {
-            return (T) getSpecificationParamsFromTlvBuffer(tlvs);
+            return (T) getSpecificationParamsFromTlvBuffer(tlvs, protocolVersion);
         }
         return null;
     }
 
-    private GenericSpecificationParams getSpecificationParamsFromTlvBuffer(TlvDecoderBuffer tlvs) {
+    private GenericSpecificationParams getSpecificationParamsFromTlvBuffer(TlvDecoderBuffer tlvs,
+                    ProtocolVersion protocolVersion) {
         GenericSpecificationParams.Builder builder = new GenericSpecificationParams.Builder();
         try {
             FiraSpecificationParams firaSpecificationParams =
                     TlvDecoder.getDecoder(FiraParams.PROTOCOL_NAME, mUwbInjector).getParams(
-                            tlvs, FiraSpecificationParams.class);
+                            tlvs, FiraSpecificationParams.class, protocolVersion);
             builder.setFiraSpecificationParams(firaSpecificationParams);
         } catch (IllegalArgumentException e) {
             Log.e(TAG, "Failed to decode FIRA capabilities", e);
@@ -60,7 +63,7 @@
         try {
             CccSpecificationParams cccSpecificationParams =
                     TlvDecoder.getDecoder(CccParams.PROTOCOL_NAME, mUwbInjector).getParams(
-                            tlvs, CccSpecificationParams.class);
+                            tlvs, CccSpecificationParams.class, protocolVersion);
             builder.setCccSpecificationParams(cccSpecificationParams);
         } catch (IllegalArgumentException e) {
             Log.e(TAG, "Failed to decode CCC capabilities", e);
@@ -68,7 +71,7 @@
         try {
             RadarSpecificationParams radarSpecificationParams =
                     TlvDecoder.getDecoder(RadarParams.PROTOCOL_NAME, mUwbInjector)
-                            .getParams(tlvs, RadarSpecificationParams.class);
+                            .getParams(tlvs, RadarSpecificationParams.class, protocolVersion);
             builder.setRadarSpecificationParams(radarSpecificationParams);
         } catch (IllegalArgumentException e) {
             Log.v(TAG, "Failed to decode Radar capabilities", e);
diff --git a/service/java/com/android/server/uwb/params/RadarDecoder.java b/service/java/com/android/server/uwb/params/RadarDecoder.java
index 3c41552..736a8a9 100644
--- a/service/java/com/android/server/uwb/params/RadarDecoder.java
+++ b/service/java/com/android/server/uwb/params/RadarDecoder.java
@@ -20,13 +20,15 @@
 import static com.android.server.uwb.config.CapabilityParam.RADAR_SWEEP_SAMPLES_SUPPORTED;
 
 import com.google.uwb.support.base.Params;
+import com.google.uwb.support.base.ProtocolVersion;
 import com.google.uwb.support.radar.RadarParams;
 import com.google.uwb.support.radar.RadarSpecificationParams;
 
 /** Radar decoder */
 public class RadarDecoder extends TlvDecoder {
     @Override
-    public <T extends Params> T getParams(TlvDecoderBuffer tlvs, Class<T> paramsType)
+    public <T extends Params> T getParams(TlvDecoderBuffer tlvs, Class<T> paramsType,
+            ProtocolVersion protocolVersion)
             throws IllegalArgumentException {
         if (RadarSpecificationParams.class.equals(paramsType)) {
             return (T) getRadarSpecificationParamsFromTlvBuffer(tlvs);
diff --git a/service/java/com/android/server/uwb/params/TlvDecoder.java b/service/java/com/android/server/uwb/params/TlvDecoder.java
index 508ab6a..3740732 100644
--- a/service/java/com/android/server/uwb/params/TlvDecoder.java
+++ b/service/java/com/android/server/uwb/params/TlvDecoder.java
@@ -19,6 +19,7 @@
 import com.android.server.uwb.UwbInjector;
 
 import com.google.uwb.support.base.Params;
+import com.google.uwb.support.base.ProtocolVersion;
 import com.google.uwb.support.ccc.CccParams;
 import com.google.uwb.support.fira.FiraParams;
 import com.google.uwb.support.generic.GenericParams;
@@ -27,7 +28,7 @@
 public abstract class TlvDecoder {
     public static TlvDecoder getDecoder(String protocolName, UwbInjector uwbInjector) {
         if (protocolName.equals(FiraParams.PROTOCOL_NAME)) {
-            return new FiraDecoder();
+            return new FiraDecoder(uwbInjector);
         }
         if (protocolName.equals(CccParams.PROTOCOL_NAME)) {
             return new CccDecoder(uwbInjector);
@@ -41,5 +42,6 @@
         return null;
     }
 
-    public abstract <T extends Params> T getParams(TlvDecoderBuffer tlvs, Class<T> paramType);
+    public abstract <T extends Params> T getParams(TlvDecoderBuffer tlvs, Class<T> paramType,
+            ProtocolVersion protocolVersion);
 }
diff --git a/service/support_lib/src/com/google/uwb/support/fira/FiraOpenSessionParams.java b/service/support_lib/src/com/google/uwb/support/fira/FiraOpenSessionParams.java
index 2e4829e..3b3ba77 100644
--- a/service/support_lib/src/com/google/uwb/support/fira/FiraOpenSessionParams.java
+++ b/service/support_lib/src/com/google/uwb/support/fira/FiraOpenSessionParams.java
@@ -135,6 +135,8 @@
     private final Long mRangingErrorStreakTimeoutMs;
     private final int mLinkLayerMode;
     private final int mDataRepetitionCount;
+    @RangingTimeStruct
+    private final int mRangingTimeStruct;
     private final int mMinFramesPerRr;
     private final int mMtuSize;
     private final int mInterFrameInterval;
@@ -240,6 +242,7 @@
     private static final String KEY_LINK_LAYER_MODE =
             "link_layer_mode";
     private static final String KEY_DATA_REPETITION_COUNT = "data_repetition_count";
+    private static final String KEY_RANGING_TIME_STRUCT = "ranging_time_struct";
     private static final String KEY_MIN_FRAMES_PER_RR =
             "min_frames_per_rr";
     private static final String KEY_MTU_SIZE =
@@ -332,6 +335,7 @@
             Long rangingErrorStreakTimeoutMs,
             int linkLayerMode,
             int dataRepetitionCount,
+            @RangingTimeStruct int rangingTimeStruct,
             int minFramePerRr,
             int mtuSize,
             int interFrameInterval,
@@ -417,6 +421,7 @@
         mRangingErrorStreakTimeoutMs = rangingErrorStreakTimeoutMs;
         mLinkLayerMode = linkLayerMode;
         mDataRepetitionCount = dataRepetitionCount;
+        mRangingTimeStruct = rangingTimeStruct;
         mMinFramesPerRr = minFramePerRr;
         mMtuSize = mtuSize;
         mInterFrameInterval = interFrameInterval;
@@ -741,6 +746,11 @@
         return mDataRepetitionCount;
     }
 
+    @RangingTimeStruct
+    public int getRangingTimeStruct() {
+        return mRangingTimeStruct;
+    }
+
     public int getMinFramesPerRr() {
         return mMinFramesPerRr;
     }
@@ -931,6 +941,7 @@
         bundle.putLong(RANGING_ERROR_STREAK_TIMEOUT_MS, mRangingErrorStreakTimeoutMs);
         bundle.putInt(KEY_LINK_LAYER_MODE, mLinkLayerMode);
         bundle.putInt(KEY_DATA_REPETITION_COUNT, mDataRepetitionCount);
+        bundle.putInt(KEY_RANGING_TIME_STRUCT, mRangingTimeStruct);
         bundle.putInt(KEY_MIN_FRAMES_PER_RR, mMinFramesPerRr);
         bundle.putInt(KEY_MTU_SIZE, mMtuSize);
         bundle.putInt(KEY_INTER_FRAME_INTERVAL, mInterFrameInterval);
@@ -1067,6 +1078,8 @@
                         .getLong(RANGING_ERROR_STREAK_TIMEOUT_MS, 10_000L))
                 .setLinkLayerMode(bundle.getInt(KEY_LINK_LAYER_MODE, 0))
                 .setDataRepetitionCount(bundle.getInt(KEY_DATA_REPETITION_COUNT, 0))
+                .setRangingTimeStruct(bundle.getInt(KEY_RANGING_TIME_STRUCT,
+                    BLOCK_BASED_SCHEDULING))
                 .setMinFramePerRr(bundle.getInt(KEY_MIN_FRAMES_PER_RR, 1))
                 .setMtuSize(bundle.getInt(KEY_MTU_SIZE, 1048))
                 .setInterFrameInterval(bundle.getInt(KEY_INTER_FRAME_INTERVAL, 1))
@@ -1309,6 +1322,9 @@
         /** UCI spec default: 0x00(No repetition) */
         private int mDataRepetitionCount = 0;
 
+        /** UCI spec default: 0x01 */
+        private int mRangingTimeStruct = BLOCK_BASED_SCHEDULING;
+
         /** UCI spec default: 1 */
         public int mMinFramesPerRr = 1;
 
@@ -1427,6 +1443,7 @@
             mRangingErrorStreakTimeoutMs = builder.mRangingErrorStreakTimeoutMs;
             mLinkLayerMode = builder.mLinkLayerMode;
             mDataRepetitionCount = builder.mDataRepetitionCount;
+            mRangingTimeStruct = builder.mRangingTimeStruct;
             mMinFramesPerRr = builder.mMinFramesPerRr;
             mMtuSize = builder.mMtuSize;
             mInterFrameInterval = builder.mInterFrameInterval;
@@ -1516,6 +1533,7 @@
             mRangingErrorStreakTimeoutMs = params.mRangingErrorStreakTimeoutMs;
             mLinkLayerMode = params.mLinkLayerMode;
             mDataRepetitionCount = params.mDataRepetitionCount;
+            mRangingTimeStruct = params.mRangingTimeStruct;
             mMinFramesPerRr = params.mMinFramesPerRr;
             mMtuSize = params.mMtuSize;
             mInterFrameInterval = params.mInterFrameInterval;
@@ -1930,6 +1948,12 @@
             return this;
         }
 
+        public FiraOpenSessionParams.Builder setRangingTimeStruct(
+                @RangingTimeStruct int rangingTimeStruct) {
+            mRangingTimeStruct = rangingTimeStruct;
+            return this;
+        }
+
         public FiraOpenSessionParams.Builder setMinFramePerRr(int minFramePerRr) {
             mMinFramesPerRr = minFramePerRr;
             return this;
@@ -2253,6 +2277,7 @@
                     mRangingErrorStreakTimeoutMs,
                     mLinkLayerMode,
                     mDataRepetitionCount,
+                    mRangingTimeStruct,
                     mMinFramesPerRr,
                     mMtuSize,
                     mInterFrameInterval,
diff --git a/service/tests/src/com/android/server/uwb/UwbConfigurationManagerTest.java b/service/tests/src/com/android/server/uwb/UwbConfigurationManagerTest.java
index 907e118..c9f6260 100644
--- a/service/tests/src/com/android/server/uwb/UwbConfigurationManagerTest.java
+++ b/service/tests/src/com/android/server/uwb/UwbConfigurationManagerTest.java
@@ -177,7 +177,7 @@
 
         mUwbConfigurationManager.getAppConfigurations(mUwbSession.getSessionId(),
                 mFiraParams.getProtocolName(), new byte[0], FiraOpenSessionParams.class,
-                TEST_CHIP_ID);
+                TEST_CHIP_ID, FiraParams.PROTOCOL_VERSION_1_1);
 
         verify(mNativeUwbManager).getAppConfigurations(anyInt(), anyInt(), anyInt(),
                 any(byte[].class), eq(TEST_CHIP_ID));
@@ -190,7 +190,7 @@
         when(mNativeUwbManager.getCapsInfo(anyString())).thenReturn(getAppConfig);
 
         mUwbConfigurationManager.getCapsInfo(mFiraParams.getProtocolName(),
-                FiraOpenSessionParams.class, TEST_CHIP_ID);
+                FiraOpenSessionParams.class, TEST_CHIP_ID, any());
 
         verify(mNativeUwbManager).getCapsInfo(TEST_CHIP_ID);
     }
diff --git a/service/tests/src/com/android/server/uwb/UwbServiceCoreTest.java b/service/tests/src/com/android/server/uwb/UwbServiceCoreTest.java
index c85d6b0..9105e61 100644
--- a/service/tests/src/com/android/server/uwb/UwbServiceCoreTest.java
+++ b/service/tests/src/com/android/server/uwb/UwbServiceCoreTest.java
@@ -311,7 +311,7 @@
         when(genericSpecificationParams.toBundle()).thenReturn(genericSpecificationBundle);
 
         when(mUwbConfigurationManager
-                .getCapsInfo(eq(GenericParams.PROTOCOL_NAME), any(), anyString()))
+                .getCapsInfo(eq(GenericParams.PROTOCOL_NAME), any(), anyString(), any()))
                 .thenReturn(Pair.create(
                         UwbUciConstants.STATUS_CODE_OK, genericSpecificationParams));
 
@@ -319,7 +319,8 @@
                 TEST_DEFAULT_CHIP_ID);
         assertThat(specifications).isEqualTo(genericSpecificationBundle);
         verify(mUwbConfigurationManager)
-                .getCapsInfo(eq(GenericParams.PROTOCOL_NAME), any(), eq(TEST_DEFAULT_CHIP_ID));
+                .getCapsInfo(eq(GenericParams.PROTOCOL_NAME), any(),
+                                eq(TEST_DEFAULT_CHIP_ID), any());
 
         assertThat(mUwbServiceCore.getCachedSpecificationParams(TEST_DEFAULT_CHIP_ID)).isEqualTo(
                 genericSpecificationParams);
@@ -332,7 +333,7 @@
         when(genericSpecificationParams.toBundle()).thenReturn(genericSpecificationBundle);
 
         when(mUwbConfigurationManager
-                .getCapsInfo(eq(GenericParams.PROTOCOL_NAME), any(), anyString()))
+                .getCapsInfo(eq(GenericParams.PROTOCOL_NAME), any(), anyString(), any()))
                 .thenReturn(Pair.create(
                         UwbUciConstants.STATUS_CODE_OK, genericSpecificationParams));
 
@@ -340,7 +341,8 @@
                 TEST_DEFAULT_CHIP_ID);
         assertThat(specifications.toBundle()).isEqualTo(genericSpecificationBundle);
         verify(mUwbConfigurationManager)
-                .getCapsInfo(eq(GenericParams.PROTOCOL_NAME), any(), eq(TEST_DEFAULT_CHIP_ID));
+                .getCapsInfo(eq(GenericParams.PROTOCOL_NAME), any(),
+                                eq(TEST_DEFAULT_CHIP_ID), any());
     }
 
     private void enableUwb(String countryCode) throws Exception {
@@ -1053,7 +1055,7 @@
         AttributionSource attributionSource = TEST_ATTRIBUTION_SOURCE;
         FiraOpenSessionParams params = TEST_FIRA_OPEN_SESSION_PARAMS.build();
         when(mUwbConfigurationManager
-                .getCapsInfo(eq(GenericParams.PROTOCOL_NAME), any(), anyString()))
+                .getCapsInfo(eq(GenericParams.PROTOCOL_NAME), any(), anyString(), any()))
                 .thenReturn(Pair.create(
                         UwbUciConstants.STATUS_CODE_OK, genericSpecificationParams));
         when(genericSpecificationParams.getFiraSpecificationParams())
@@ -1466,7 +1468,7 @@
                         .setFiraSpecificationParams(firaSpecificationParams)
                         .setCccSpecificationParams(cccSpecificationParams)
                         .build();
-        when(mUwbConfigurationManager.getCapsInfo(any(), any(), anyString()))
+        when(mUwbConfigurationManager.getCapsInfo(any(), any(), anyString(), any()))
                 .thenReturn(Pair.create(
                         UwbUciConstants.STATUS_CODE_OK, genericSpecificationParams));
 
@@ -1493,7 +1495,7 @@
                         .setFiraSpecificationParams(firaSpecificationParams)
                         .setCccSpecificationParams(cccSpecificationParams)
                         .build();
-        when(mUwbConfigurationManager.getCapsInfo(any(), any(), anyString()))
+        when(mUwbConfigurationManager.getCapsInfo(any(), any(), anyString(), any()))
                 .thenReturn(Pair.create(
                         UwbUciConstants.STATUS_CODE_OK, genericSpecificationParams));
         IUwbVendorUciCallback vendorCb = mock(IUwbVendorUciCallback.class);
diff --git a/service/tests/src/com/android/server/uwb/UwbSessionManagerTest.java b/service/tests/src/com/android/server/uwb/UwbSessionManagerTest.java
index 581ceaf..3b1dc23 100644
--- a/service/tests/src/com/android/server/uwb/UwbSessionManagerTest.java
+++ b/service/tests/src/com/android/server/uwb/UwbSessionManagerTest.java
@@ -2569,7 +2569,8 @@
         when(mUwbConfigurationManager.setAppConfigurations(anyInt(), any(), anyString(), any()))
                 .thenReturn(UwbUciConstants.STATUS_CODE_OK);
         when(mUwbConfigurationManager.getAppConfigurations(
-                eq(TEST_SESSION_ID), anyString(), any(), any(), eq(TEST_CHIP_ID)))
+                eq(TEST_SESSION_ID), anyString(), any(), any(), eq(TEST_CHIP_ID),
+                eq(CccParams.PROTOCOL_VERSION_1_0)))
                 .thenReturn(new Pair<>(UwbUciConstants.STATUS_CODE_OK, rangingStartedParams));
 
         mUwbSessionManager.startRanging(uwbSession.getSessionHandle(), params);
@@ -2621,7 +2622,8 @@
         when(mUwbConfigurationManager.setAppConfigurations(anyInt(), any(), anyString(), any()))
                 .thenReturn(UwbUciConstants.STATUS_CODE_OK);
         when(mUwbConfigurationManager.getAppConfigurations(
-                eq(TEST_SESSION_ID), anyString(), any(), any(), eq(TEST_CHIP_ID)))
+                eq(TEST_SESSION_ID), anyString(), any(), any(), eq(TEST_CHIP_ID),
+                eq(CccParams.PROTOCOL_VERSION_1_0)))
                 .thenReturn(new Pair<>(UwbUciConstants.STATUS_CODE_OK, rangingStartedParams));
 
         mUwbSessionManager.startRanging(uwbSession.getSessionHandle(), params);
@@ -2675,7 +2677,8 @@
         when(mUwbConfigurationManager.setAppConfigurations(anyInt(), any(), anyString(), any()))
                 .thenReturn(UwbUciConstants.STATUS_CODE_OK);
         when(mUwbConfigurationManager.getAppConfigurations(
-                eq(TEST_SESSION_ID), anyString(), any(), any(), eq(TEST_CHIP_ID)))
+                eq(TEST_SESSION_ID), anyString(), any(), any(), eq(TEST_CHIP_ID),
+                eq(CccParams.PROTOCOL_VERSION_1_0)))
                 .thenReturn(new Pair<>(UwbUciConstants.STATUS_CODE_OK, rangingStartedParams));
 
         mUwbSessionManager.startRanging(uwbSession.getSessionHandle(), params);
@@ -2728,7 +2731,8 @@
         when(mUwbConfigurationManager.setAppConfigurations(anyInt(), any(), anyString(), any()))
                 .thenReturn(UwbUciConstants.STATUS_CODE_OK);
         when(mUwbConfigurationManager.getAppConfigurations(
-                eq(TEST_SESSION_ID), anyString(), any(), any(), eq(TEST_CHIP_ID)))
+                eq(TEST_SESSION_ID), anyString(), any(), any(), eq(TEST_CHIP_ID),
+                eq(CccParams.PROTOCOL_VERSION_1_0)))
                 .thenReturn(new Pair<>(UwbUciConstants.STATUS_CODE_OK, rangingStartedParams));
 
         mUwbSessionManager.startRanging(uwbSession.getSessionHandle(), params);
@@ -3633,7 +3637,8 @@
                 .build();
 
         when(mUwbConfigurationManager.getAppConfigurations(
-                eq(TEST_SESSION_ID), anyString(), any(), any(), eq(TEST_CHIP_ID)))
+                eq(TEST_SESSION_ID), anyString(), any(), any(), eq(TEST_CHIP_ID),
+                eq(CccParams.PROTOCOL_VERSION_1_0)))
                 .thenReturn(new Pair<>(UwbUciConstants.STATUS_CODE_OK, rangingStartedParams));
         doReturn(UwbUciConstants.UWB_SESSION_STATE_ACTIVE, UwbUciConstants.UWB_SESSION_STATE_IDLE)
                 .when(uwbSession).getSessionState();
diff --git a/service/tests/src/com/android/server/uwb/params/CccDecoderTest.java b/service/tests/src/com/android/server/uwb/params/CccDecoderTest.java
index 48c59a9..1d6393e 100644
--- a/service/tests/src/com/android/server/uwb/params/CccDecoderTest.java
+++ b/service/tests/src/com/android/server/uwb/params/CccDecoderTest.java
@@ -149,7 +149,7 @@
         assertThat(tlvDecoderBuffer.parse()).isTrue();
 
         CccRangingStartedParams cccRangingStartedParams = mCccDecoder.getParams(
-                tlvDecoderBuffer, CccRangingStartedParams.class);
+                tlvDecoderBuffer, CccRangingStartedParams.class, CccParams.PROTOCOL_VERSION_1_0);
         verifyCccRangingOpend(cccRangingStartedParams);
     }
 
@@ -161,7 +161,7 @@
         assertThat(tlvDecoderBuffer.parse()).isTrue();
 
         CccSpecificationParams cccSpecificationParams = mCccDecoder.getParams(
-                tlvDecoderBuffer, CccSpecificationParams.class);
+                tlvDecoderBuffer, CccSpecificationParams.class, CccParams.PROTOCOL_VERSION_1_0);
         verifyCccSpecification(cccSpecificationParams);
     }
 
@@ -174,7 +174,8 @@
 
         CccRangingStartedParams cccRangingStartedParams = TlvDecoder
                 .getDecoder(CccParams.PROTOCOL_NAME, mUwbInjector)
-                .getParams(tlvDecoderBuffer, CccRangingStartedParams.class);
+                .getParams(tlvDecoderBuffer, CccRangingStartedParams.class,
+                        CccParams.PROTOCOL_VERSION_1_0);
         verifyCccRangingOpend(cccRangingStartedParams);
     }
 
@@ -187,7 +188,8 @@
 
         CccSpecificationParams cccSpecificationParams = TlvDecoder
                 .getDecoder(CccParams.PROTOCOL_NAME, mUwbInjector)
-                .getParams(tlvDecoderBuffer, CccSpecificationParams.class);
+                .getParams(tlvDecoderBuffer, CccSpecificationParams.class,
+                        CccParams.PROTOCOL_VERSION_1_0);
         verifyCccSpecification(cccSpecificationParams);
     }
 
@@ -200,7 +202,7 @@
         assertThat(tlvDecoderBuffer.parse()).isTrue();
 
         CccSpecificationParams cccSpecificationParams = mCccDecoder.getParams(
-                tlvDecoderBuffer, CccSpecificationParams.class);
+                tlvDecoderBuffer, CccSpecificationParams.class, CccParams.PROTOCOL_VERSION_1_0);
         verifyCccSpecification(cccSpecificationParams);
     }
 }
diff --git a/service/tests/src/com/android/server/uwb/params/FiraDecoderTest.java b/service/tests/src/com/android/server/uwb/params/FiraDecoderTest.java
index b67d5b4..74087a3 100644
--- a/service/tests/src/com/android/server/uwb/params/FiraDecoderTest.java
+++ b/service/tests/src/com/android/server/uwb/params/FiraDecoderTest.java
@@ -30,6 +30,8 @@
 import static com.google.uwb.support.fira.FiraParams.KEY_LENGTH_256_BITS_SUPPORTED;
 import static com.google.uwb.support.fira.FiraParams.MultiNodeCapabilityFlag.HAS_ONE_TO_MANY_SUPPORT;
 import static com.google.uwb.support.fira.FiraParams.MultiNodeCapabilityFlag.HAS_UNICAST_SUPPORT;
+import static com.google.uwb.support.fira.FiraParams.PROTOCOL_VERSION_1_1;
+import static com.google.uwb.support.fira.FiraParams.PROTOCOL_VERSION_2_0;
 import static com.google.uwb.support.fira.FiraParams.PrfCapabilityFlag.HAS_BPRF_SUPPORT;
 import static com.google.uwb.support.fira.FiraParams.PrfCapabilityFlag.HAS_HPRF_SUPPORT;
 import static com.google.uwb.support.fira.FiraParams.PsduDataRateCapabilityFlag.HAS_27M2_SUPPORT;
@@ -51,6 +53,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.mockito.Mockito.when;
 
 import android.platform.test.annotations.Presubmit;
 import android.test.suitebuilder.annotation.SmallTest;
@@ -59,6 +62,7 @@
 
 import com.android.server.uwb.UwbInjector;
 import com.android.server.uwb.util.UwbUtil;
+import com.android.uwb.flags.FeatureFlags;
 
 import com.google.uwb.support.fira.FiraParams;
 import com.google.uwb.support.fira.FiraParams.BprfParameterSetCapabilityFlag;
@@ -151,14 +155,20 @@
             UwbUtil.getByteArray(TEST_FIRA_SPECIFICATION_TLV_STRING_VER_2);
     public static final int TEST_FIRA_SPECIFICATION_TLV_NUM_PARAMS_VER_2 = 33;
 
-    private final FiraDecoder mFiraDecoder = new FiraDecoder();
+    private FiraDecoder mFiraDecoder;
 
     @Mock
     private UwbInjector mUwbInjector;
+    @Mock private FeatureFlags mFeatureFlags;
 
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
+
+        when(mUwbInjector.getFeatureFlags()).thenReturn(mFeatureFlags);
+        when(mFeatureFlags.cr423CleanupIntervalScheduling()).thenReturn(true);
+
+        mFiraDecoder = new FiraDecoder(mUwbInjector);
     }
 
     public static void verifyFiraSpecificationVersion2(
@@ -240,7 +250,7 @@
         assertThat(tlvDecoderBuffer.parse()).isTrue();
 
         FiraSpecificationParams firaSpecificationParams = mFiraDecoder.getParams(
-                tlvDecoderBuffer, FiraSpecificationParams.class);
+                tlvDecoderBuffer, FiraSpecificationParams.class, PROTOCOL_VERSION_2_0);
         verifyFiraSpecificationVersion2(firaSpecificationParams);
     }
 
@@ -254,7 +264,7 @@
 
         FiraSpecificationParams firaSpecificationParams = TlvDecoder
                 .getDecoder(FiraParams.PROTOCOL_NAME, mUwbInjector)
-                .getParams(tlvDecoderBuffer, FiraSpecificationParams.class);
+                .getParams(tlvDecoderBuffer, FiraSpecificationParams.class, PROTOCOL_VERSION_2_0);
         verifyFiraSpecificationVersion2(firaSpecificationParams);
     }
 
@@ -330,7 +340,7 @@
         assertThat(tlvDecoderBuffer.parse()).isTrue();
 
         FiraSpecificationParams firaSpecificationParams = mFiraDecoder.getParams(
-                tlvDecoderBuffer, FiraSpecificationParams.class);
+                tlvDecoderBuffer, FiraSpecificationParams.class, PROTOCOL_VERSION_1_1);
         verifyFiraSpecificationVersion1(firaSpecificationParams);
     }
 
@@ -344,7 +354,7 @@
 
         FiraSpecificationParams firaSpecificationParams = TlvDecoder
                 .getDecoder(FiraParams.PROTOCOL_NAME, mUwbInjector)
-                .getParams(tlvDecoderBuffer, FiraSpecificationParams.class);
+                .getParams(tlvDecoderBuffer, FiraSpecificationParams.class, PROTOCOL_VERSION_1_1);
         verifyFiraSpecificationVersion1(firaSpecificationParams);
     }
 }
diff --git a/service/tests/src/com/android/server/uwb/params/GenericDecoderTest.java b/service/tests/src/com/android/server/uwb/params/GenericDecoderTest.java
index bde0113..d0052de 100644
--- a/service/tests/src/com/android/server/uwb/params/GenericDecoderTest.java
+++ b/service/tests/src/com/android/server/uwb/params/GenericDecoderTest.java
@@ -25,6 +25,8 @@
 import static com.android.server.uwb.params.RadarDecoderTest.TEST_RADAR_SPECIFICATION_TLV_NUM_PARAMS;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.uwb.support.fira.FiraParams.PROTOCOL_VERSION_1_1;
+import static com.google.uwb.support.fira.FiraParams.PROTOCOL_VERSION_2_0;
 
 import static org.mockito.Mockito.when;
 
@@ -36,6 +38,7 @@
 import com.android.server.uwb.DeviceConfigFacade;
 import com.android.server.uwb.UwbInjector;
 import com.android.server.uwb.util.UwbUtil;
+import com.android.uwb.flags.FeatureFlags;
 
 import com.google.uwb.support.generic.GenericSpecificationParams;
 
@@ -74,17 +77,22 @@
                     + TEST_CCC_SPECIFICATION_TLV_NUM_PARAMS
                     + TEST_RADAR_SPECIFICATION_TLV_NUM_PARAMS;
 
-    @Mock
-    private UwbInjector mUwbInjector;
-    @Mock
-    private DeviceConfigFacade mDeviceConfigFacade;
+    @Mock private UwbInjector mUwbInjector;
+    @Mock private DeviceConfigFacade mDeviceConfigFacade;
+    @Mock private FeatureFlags mFeatureFlags;
+
     private GenericDecoder mGenericDecoder;
 
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
+
         when(mUwbInjector.getDeviceConfigFacade()).thenReturn(mDeviceConfigFacade);
         when(mDeviceConfigFacade.isCccSupportedSyncCodesLittleEndian()).thenReturn(true);
+
+        when(mUwbInjector.getFeatureFlags()).thenReturn(mFeatureFlags);
+        when(mFeatureFlags.cr423CleanupIntervalScheduling()).thenReturn(true);
+
         mGenericDecoder = new GenericDecoder(mUwbInjector);
     }
 
@@ -97,7 +105,8 @@
         assertThat(tlvDecoderBuffer.parse()).isTrue();
 
         GenericSpecificationParams genericSpecificationParams =
-                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class);
+                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class,
+                           PROTOCOL_VERSION_1_1);
         assertThat(genericSpecificationParams.hasPowerStatsSupport()).isTrue();
         FiraDecoderTest.verifyFiraSpecificationVersion1(
                 genericSpecificationParams.getFiraSpecificationParams());
@@ -116,7 +125,8 @@
         assertThat(tlvDecoderBuffer.parse()).isTrue();
 
         GenericSpecificationParams genericSpecificationParams =
-                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class);
+                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class,
+                            PROTOCOL_VERSION_1_1);
         assertThat(genericSpecificationParams.hasPowerStatsSupport()).isTrue();
         FiraDecoderTest.verifyFiraSpecificationVersion1(
                 genericSpecificationParams.getFiraSpecificationParams());
@@ -135,7 +145,8 @@
         assertThat(tlvDecoderBuffer.parse()).isTrue();
 
         GenericSpecificationParams genericSpecificationParams =
-                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class);
+                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class,
+                            PROTOCOL_VERSION_2_0);
         assertThat(genericSpecificationParams.hasPowerStatsSupport()).isTrue();
         FiraDecoderTest.verifyFiraSpecificationVersion2(
                 genericSpecificationParams.getFiraSpecificationParams());
@@ -154,7 +165,8 @@
         assertThat(tlvDecoderBuffer.parse()).isTrue();
 
         GenericSpecificationParams genericSpecificationParams =
-                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class);
+                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class,
+                            PROTOCOL_VERSION_2_0);
         assertThat(genericSpecificationParams.hasPowerStatsSupport()).isTrue();
         FiraDecoderTest.verifyFiraSpecificationVersion2(
                 genericSpecificationParams.getFiraSpecificationParams());
@@ -176,7 +188,8 @@
         assertThat(tlvDecoderBuffer.parse()).isTrue();
 
         GenericSpecificationParams genericSpecificationParams =
-                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class);
+                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class,
+                            PROTOCOL_VERSION_1_1);
         assertThat(genericSpecificationParams.hasPowerStatsSupport()).isFalse();
         FiraDecoderTest.verifyFiraSpecificationVersion1(
                 genericSpecificationParams.getFiraSpecificationParams());
@@ -197,7 +210,8 @@
         assertThat(tlvDecoderBuffer.parse()).isTrue();
 
         GenericSpecificationParams genericSpecificationParams =
-                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class);
+                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class,
+                            PROTOCOL_VERSION_1_1);
         assertThat(genericSpecificationParams.hasPowerStatsSupport()).isFalse();
         CccDecoderTest.verifyCccSpecification(
                 genericSpecificationParams.getCccSpecificationParams());
@@ -218,7 +232,8 @@
         assertThat(tlvDecoderBuffer.parse()).isTrue();
 
         GenericSpecificationParams genericSpecificationParams =
-                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class);
+                mGenericDecoder.getParams(tlvDecoderBuffer, GenericSpecificationParams.class,
+                            PROTOCOL_VERSION_1_1);
         assertThat(genericSpecificationParams.hasPowerStatsSupport()).isFalse();
         FiraDecoderTest.verifyFiraSpecificationVersion1(
                 genericSpecificationParams.getFiraSpecificationParams());
diff --git a/service/tests/src/com/android/server/uwb/params/RadarDecoderTest.java b/service/tests/src/com/android/server/uwb/params/RadarDecoderTest.java
index 6385226..51ace04 100644
--- a/service/tests/src/com/android/server/uwb/params/RadarDecoderTest.java
+++ b/service/tests/src/com/android/server/uwb/params/RadarDecoderTest.java
@@ -26,6 +26,7 @@
 import com.android.server.uwb.UwbInjector;
 import com.android.server.uwb.util.UwbUtil;
 
+import com.google.uwb.support.fira.FiraProtocolVersion;
 import com.google.uwb.support.radar.RadarData;
 import com.google.uwb.support.radar.RadarParams;
 import com.google.uwb.support.radar.RadarParams.RadarCapabilityFlag;
@@ -44,6 +45,7 @@
 @SmallTest
 @Presubmit
 public class RadarDecoderTest {
+    private static final FiraProtocolVersion PROTOCOL_VERSION_DUMMY = new FiraProtocolVersion(0, 0);
     public static final String TEST_RADAR_SPECIFICATION_TLV_DATA_STRING = "b00101";
     private static final byte[] TEST_RADAR_SPECIFICATION_TLV_DATA =
             UwbUtil.getByteArray(TEST_RADAR_SPECIFICATION_TLV_DATA_STRING);
@@ -70,7 +72,8 @@
                 new TlvDecoderBuffer(
                         TEST_RADAR_SPECIFICATION_TLV_DATA, TEST_RADAR_SPECIFICATION_TLV_NUM_PARAMS);
 
-        assertThat(mRadarDecoder.getParams(tlvDecoderBuffer, RadarData.class)).isNull();
+        assertThat(mRadarDecoder.getParams(tlvDecoderBuffer, RadarData.class,
+                                 PROTOCOL_VERSION_DUMMY)).isNull();
     }
 
     @Test
@@ -81,7 +84,8 @@
         assertThat(tlvDecoderBuffer.parse()).isTrue();
 
         RadarSpecificationParams radarSpecificationParams =
-                mRadarDecoder.getParams(tlvDecoderBuffer, RadarSpecificationParams.class);
+                mRadarDecoder.getParams(tlvDecoderBuffer, RadarSpecificationParams.class,
+                                 PROTOCOL_VERSION_DUMMY);
         verifyRadarSpecification(radarSpecificationParams);
     }
 
@@ -94,7 +98,8 @@
 
         RadarSpecificationParams radarSpecificationParams =
                 TlvDecoder.getDecoder(RadarParams.PROTOCOL_NAME, mUwbInjector)
-                        .getParams(tlvDecoderBuffer, RadarSpecificationParams.class);
+                        .getParams(tlvDecoderBuffer, RadarSpecificationParams.class,
+                                 PROTOCOL_VERSION_DUMMY);
         verifyRadarSpecification(radarSpecificationParams);
     }
 }