Add 1.1 Tuner frontend setting into Tuner java Framework

This CL adds the Tuner 1.1 extended frontend setting options into
Tuner Java system APIs.

Including the following settings:
General Frontend Settings: Spectral Inversion, End Frequency
Dvbt Settings: plp rotation, extended transmission mode
Dvbs Settings: scan type.

Test: make
Bug: 158818695
Change-Id: I0d80f244ad29a73458e66ee012c48b9dbde356be
diff --git a/api/system-current.txt b/api/system-current.txt
index 648be0d..d2b6af8 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -5055,6 +5055,7 @@
     field public static final int INVALID_AV_SYNC_ID = -1; // 0xffffffff
     field public static final int INVALID_FILTER_ID = -1; // 0xffffffff
     field public static final long INVALID_FILTER_ID_64BIT = -1L; // 0xffffffffffffffffL
+    field public static final int INVALID_FRONTEND_SETTING_FREQUENCY = -1; // 0xffffffff
     field public static final int INVALID_LTS_ID = -1; // 0xffffffff
     field public static final int INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM = -1; // 0xffffffff
     field public static final int INVALID_STREAM_ID = 65535; // 0xffff
@@ -5497,9 +5498,13 @@
 
   public class AnalogFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
     method @NonNull public static android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder builder();
+    method public int getAftFlag();
     method public int getSifStandard();
     method public int getSignalType();
     method public int getType();
+    field public static final int AFT_FLAG_FALSE = 2; // 0x2
+    field public static final int AFT_FLAG_TRUE = 1; // 0x1
+    field public static final int AFT_FLAG_UNDEFINED = 0; // 0x0
     field public static final int SIF_AUTO = 1; // 0x1
     field public static final int SIF_BG = 2; // 0x2
     field public static final int SIF_BG_A2 = 4; // 0x4
@@ -5532,6 +5537,7 @@
 
   public static class AnalogFrontendSettings.Builder {
     method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setAftFlag(int);
     method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setFrequency(int);
     method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setSifStandard(int);
     method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setSignalType(int);
@@ -5661,6 +5667,7 @@
     method public int getOuterFec();
     method public int getSpectralInversion();
     method public int getSymbolRate();
+    method public int getTimeInterleaveMode();
     method public int getType();
     field public static final int ANNEX_A = 1; // 0x1
     field public static final int ANNEX_B = 2; // 0x2
@@ -5679,6 +5686,17 @@
     field public static final int SPECTRAL_INVERSION_INVERTED = 2; // 0x2
     field public static final int SPECTRAL_INVERSION_NORMAL = 1; // 0x1
     field public static final int SPECTRAL_INVERSION_UNDEFINED = 0; // 0x0
+    field public static final int TIME_INTERLEAVE_MODE_128_1_0 = 2; // 0x2
+    field public static final int TIME_INTERLEAVE_MODE_128_1_1 = 4; // 0x4
+    field public static final int TIME_INTERLEAVE_MODE_128_2 = 128; // 0x80
+    field public static final int TIME_INTERLEAVE_MODE_128_3 = 256; // 0x100
+    field public static final int TIME_INTERLEAVE_MODE_128_4 = 512; // 0x200
+    field public static final int TIME_INTERLEAVE_MODE_16_8 = 32; // 0x20
+    field public static final int TIME_INTERLEAVE_MODE_32_4 = 16; // 0x10
+    field public static final int TIME_INTERLEAVE_MODE_64_2 = 8; // 0x8
+    field public static final int TIME_INTERLEAVE_MODE_8_16 = 64; // 0x40
+    field public static final int TIME_INTERLEAVE_MODE_AUTO = 1; // 0x1
+    field public static final int TIME_INTERLEAVE_MODE_UNDEFINED = 0; // 0x0
   }
 
   public static class DvbcFrontendSettings.Builder {
@@ -5690,6 +5708,7 @@
     method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setOuterFec(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setSpectralInversion(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setSymbolRate(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setTimeInterleaveMode(int);
   }
 
   public class DvbsCodeRate {
@@ -5721,6 +5740,7 @@
     method public int getModulation();
     method public int getPilot();
     method public int getRolloff();
+    method public int getScanType();
     method public int getStandard();
     method public int getSymbolRate();
     method public int getType();
@@ -5751,6 +5771,11 @@
     field public static final int ROLLOFF_0_35 = 1; // 0x1
     field public static final int ROLLOFF_0_5 = 6; // 0x6
     field public static final int ROLLOFF_UNDEFINED = 0; // 0x0
+    field public static final int SCAN_TYPE_DIRECT = 1; // 0x1
+    field public static final int SCAN_TYPE_DISEQC = 2; // 0x2
+    field public static final int SCAN_TYPE_JESS = 4; // 0x4
+    field public static final int SCAN_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int SCAN_TYPE_UNICABLE = 3; // 0x3
     field public static final int STANDARD_AUTO = 1; // 0x1
     field public static final int STANDARD_S = 2; // 0x2
     field public static final int STANDARD_S2 = 4; // 0x4
@@ -5768,6 +5793,7 @@
     method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setModulation(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setPilot(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setRolloff(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setScanType(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setStandard(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setSymbolRate(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setVcmMode(int);
@@ -5820,10 +5846,14 @@
     field public static final int CODERATE_AUTO = 1; // 0x1
     field public static final int CODERATE_UNDEFINED = 0; // 0x0
     field public static final int CONSTELLATION_16QAM = 4; // 0x4
+    field public static final int CONSTELLATION_16QAM_R = 64; // 0x40
     field public static final int CONSTELLATION_256QAM = 16; // 0x10
+    field public static final int CONSTELLATION_256QAM_R = 256; // 0x100
     field public static final int CONSTELLATION_64QAM = 8; // 0x8
+    field public static final int CONSTELLATION_64QAM_R = 128; // 0x80
     field public static final int CONSTELLATION_AUTO = 1; // 0x1
     field public static final int CONSTELLATION_QPSK = 2; // 0x2
+    field public static final int CONSTELLATION_QPSK_R = 32; // 0x20
     field public static final int CONSTELLATION_UNDEFINED = 0; // 0x0
     field public static final int GUARD_INTERVAL_19_128 = 64; // 0x40
     field public static final int GUARD_INTERVAL_19_256 = 128; // 0x80
@@ -5857,6 +5887,9 @@
     field public static final int TRANSMISSION_MODE_4K = 8; // 0x8
     field public static final int TRANSMISSION_MODE_8K = 4; // 0x4
     field public static final int TRANSMISSION_MODE_AUTO = 1; // 0x1
+    field public static final int TRANSMISSION_MODE_EXTENDED_16K = 256; // 0x100
+    field public static final int TRANSMISSION_MODE_EXTENDED_32K = 512; // 0x200
+    field public static final int TRANSMISSION_MODE_EXTENDED_8K = 128; // 0x80
     field public static final int TRANSMISSION_MODE_UNDEFINED = 0; // 0x0
   }
 
@@ -5894,8 +5927,12 @@
   }
 
   public abstract class FrontendSettings {
+    method public int getEndFrequency();
     method public int getFrequency();
+    method public int getFrontendSpectralInversion();
     method public abstract int getType();
+    method @IntRange(from=1) public void setEndFrequency(int);
+    method public void setSpectralInversion(int);
     field public static final long FEC_11_15 = 4194304L; // 0x400000L
     field public static final long FEC_11_20 = 8388608L; // 0x800000L
     field public static final long FEC_11_45 = 16777216L; // 0x1000000L
@@ -5933,6 +5970,9 @@
     field public static final long FEC_9_20 = 2097152L; // 0x200000L
     field public static final long FEC_AUTO = 1L; // 0x1L
     field public static final long FEC_UNDEFINED = 0L; // 0x0L
+    field public static final int FRONTEND_SPECTRAL_INVERSION_INVERTED = 2; // 0x2
+    field public static final int FRONTEND_SPECTRAL_INVERSION_NORMAL = 1; // 0x1
+    field public static final int FRONTEND_SPECTRAL_INVERSION_UNDEFINED = 0; // 0x0
     field public static final int TYPE_ANALOG = 1; // 0x1
     field public static final int TYPE_ATSC = 2; // 0x2
     field public static final int TYPE_ATSC3 = 3; // 0x3
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java
index 867eab0..3252c90 100644
--- a/media/java/android/media/tv/tuner/Tuner.java
+++ b/media/java/android/media/tv/tuner/Tuner.java
@@ -136,6 +136,11 @@
      */
     public static final long INVALID_FILTER_ID_64BIT =
             android.hardware.tv.tuner.V1_1.Constants.Constant64Bit.INVALID_FILTER_ID_64BIT;
+    /**
+     * Invalid frequency that is used as the default frontend frequency setting.
+     */
+    public static final int INVALID_FRONTEND_SETTING_FREQUENCY =
+            android.hardware.tv.tuner.V1_1.Constants.Constant.INVALID_FRONTEND_SETTING_FREQUENCY;
 
     /** @hide */
     @IntDef(prefix = "SCAN_TYPE_", value = {SCAN_TYPE_UNDEFINED, SCAN_TYPE_AUTO, SCAN_TYPE_BLIND})
diff --git a/media/java/android/media/tv/tuner/frontend/AnalogFrontendSettings.java b/media/java/android/media/tv/tuner/frontend/AnalogFrontendSettings.java
index 1d36da3..c6a5bb0 100644
--- a/media/java/android/media/tv/tuner/frontend/AnalogFrontendSettings.java
+++ b/media/java/android/media/tv/tuner/frontend/AnalogFrontendSettings.java
@@ -21,6 +21,7 @@
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
 import android.hardware.tv.tuner.V1_0.Constants;
+import android.media.tv.tuner.TunerVersionChecker;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -164,9 +165,32 @@
      */
     public static final int SIF_L_PRIME = Constants.FrontendAnalogSifStandard.L_PRIME;
 
+    /** @hide */
+    @IntDef(prefix = "AFT_FLAG_",
+            value = {AFT_FLAG_UNDEFINED, AFT_FLAG_TRUE, AFT_FLAG_FALSE})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface AftFlag {}
+
+    /**
+     * Aft flag is not defined.
+     */
+    public static final int AFT_FLAG_UNDEFINED =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendAnalogAftFlag.UNDEFINED;
+    /**
+     * Aft flag is set true.
+     */
+    public static final int AFT_FLAG_TRUE =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendAnalogAftFlag.AFT_TRUE;
+    /**
+     * Aft flag is not set.
+     */
+    public static final int AFT_FLAG_FALSE =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendAnalogAftFlag.AFT_FALSE;
+
 
     private final int mSignalType;
     private final int mSifStandard;
+    private final int mAftFlag;
 
     @Override
     public int getType() {
@@ -191,6 +215,14 @@
     }
 
     /**
+     * Gets AFT flag.
+     */
+    @AftFlag
+    public int getAftFlag() {
+        return mAftFlag;
+    }
+
+    /**
      * Creates a builder for {@link AnalogFrontendSettings}.
      */
     @NonNull
@@ -198,10 +230,11 @@
         return new Builder();
     }
 
-    private AnalogFrontendSettings(int frequency, int signalType, int sifStandard) {
+    private AnalogFrontendSettings(int frequency, int signalType, int sifStandard, int aftFlag) {
         super(frequency);
         mSignalType = signalType;
         mSifStandard = sifStandard;
+        mAftFlag = aftFlag;
     }
 
     /**
@@ -211,6 +244,7 @@
         private int mFrequency = 0;
         private int mSignalType = SIGNAL_TYPE_UNDEFINED;
         private int mSifStandard = SIF_UNDEFINED;
+        private int mAftFlag = AFT_FLAG_UNDEFINED;
 
         private Builder() {}
 
@@ -227,6 +261,24 @@
         }
 
         /**
+         * Set Aft flag.
+         *
+         * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would cause
+         * no-op. Use {@link TunerVersionChecker.getTunerVersion()} to check the version.
+         *
+         * @param aftFlag the value to set the aft flag. The default value is
+         * {@link #AFT_FLAG_UNDEFINED}.
+         */
+        @NonNull
+        public Builder setAftFlag(@AftFlag int aftFlag) {
+            if (TunerVersionChecker.checkHigherOrEqualVersionTo(
+                    TunerVersionChecker.TUNER_VERSION_1_1, "setAftFlag")) {
+                mAftFlag = aftFlag;
+            }
+            return this;
+        }
+
+        /**
          * Sets analog signal type.
          *
          * <p>Default value is {@link #SIGNAL_TYPE_UNDEFINED}.
@@ -253,7 +305,7 @@
          */
         @NonNull
         public AnalogFrontendSettings build() {
-            return new AnalogFrontendSettings(mFrequency, mSignalType, mSifStandard);
+            return new AnalogFrontendSettings(mFrequency, mSignalType, mSifStandard, mAftFlag);
         }
     }
 }
diff --git a/media/java/android/media/tv/tuner/frontend/Atsc3FrontendSettings.java b/media/java/android/media/tv/tuner/frontend/Atsc3FrontendSettings.java
index f9eabc5..ed1ce2d 100644
--- a/media/java/android/media/tv/tuner/frontend/Atsc3FrontendSettings.java
+++ b/media/java/android/media/tv/tuner/frontend/Atsc3FrontendSettings.java
@@ -377,8 +377,8 @@
          */
         @NonNull
         public Atsc3FrontendSettings build() {
-            return new Atsc3FrontendSettings(
-                mFrequency, mBandwidth, mDemodOutputFormat, mPlpSettings);
+            return new Atsc3FrontendSettings(mFrequency, mBandwidth, mDemodOutputFormat,
+                    mPlpSettings);
         }
     }
 
diff --git a/media/java/android/media/tv/tuner/frontend/DvbcFrontendSettings.java b/media/java/android/media/tv/tuner/frontend/DvbcFrontendSettings.java
index 271e91e..6732686 100644
--- a/media/java/android/media/tv/tuner/frontend/DvbcFrontendSettings.java
+++ b/media/java/android/media/tv/tuner/frontend/DvbcFrontendSettings.java
@@ -21,6 +21,8 @@
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
 import android.hardware.tv.tuner.V1_0.Constants;
+import android.media.tv.tuner.TunerVersionChecker;
+import android.media.tv.tuner.frontend.FrontendSettings.FrontendSpectralInversion;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -140,6 +142,74 @@
     public static final int SPECTRAL_INVERSION_INVERTED =
             Constants.FrontendDvbcSpectralInversion.INVERTED;
 
+    /** @hide */
+    @IntDef(flag = true,
+            prefix = "TIME_INTERLEAVE_MODE_",
+            value = {TIME_INTERLEAVE_MODE_UNDEFINED, TIME_INTERLEAVE_MODE_AUTO,
+                    TIME_INTERLEAVE_MODE_128_1_0, TIME_INTERLEAVE_MODE_128_1_1,
+                    TIME_INTERLEAVE_MODE_64_2, TIME_INTERLEAVE_MODE_32_4,
+                    TIME_INTERLEAVE_MODE_16_8, TIME_INTERLEAVE_MODE_8_16,
+                    TIME_INTERLEAVE_MODE_128_2, TIME_INTERLEAVE_MODE_128_3,
+                    TIME_INTERLEAVE_MODE_128_4})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface TimeInterleaveMode {}
+
+    /**
+     * Time interleave mode undefined.
+     */
+    public static final int TIME_INTERLEAVE_MODE_UNDEFINED =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendCableTimeInterleaveMode.UNDEFINED;
+    /**
+     * Hardware is able to detect and set Time Interleave Mode automatically.
+     */
+    public static final int TIME_INTERLEAVE_MODE_AUTO =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendCableTimeInterleaveMode.AUTO;
+    /**
+     * 128/1/0 Time Interleave Mode.
+     */
+    public static final int TIME_INTERLEAVE_MODE_128_1_0 = android.hardware.tv.tuner.V1_1.Constants
+            .FrontendCableTimeInterleaveMode.INTERLEAVING_128_1_0;
+    /**
+     * 128/1/1 Time Interleave Mode.
+     */
+    public static final int TIME_INTERLEAVE_MODE_128_1_1 = android.hardware.tv.tuner.V1_1.Constants
+            .FrontendCableTimeInterleaveMode.INTERLEAVING_128_1_1;
+    /**
+     * 64/2 Time Interleave Mode.
+     */
+    public static final int TIME_INTERLEAVE_MODE_64_2 = android.hardware.tv.tuner.V1_1.Constants
+            .FrontendCableTimeInterleaveMode.INTERLEAVING_64_2;
+    /**
+     * 32/4 Time Interleave Mode.
+     */
+    public static final int TIME_INTERLEAVE_MODE_32_4 = android.hardware.tv.tuner.V1_1.Constants
+            .FrontendCableTimeInterleaveMode.INTERLEAVING_32_4;
+    /**
+     * 16/8 Time Interleave Mode.
+     */
+    public static final int TIME_INTERLEAVE_MODE_16_8 = android.hardware.tv.tuner.V1_1.Constants
+            .FrontendCableTimeInterleaveMode.INTERLEAVING_16_8;
+    /**
+     * 8/16 Time Interleave Mode.
+     */
+    public static final int TIME_INTERLEAVE_MODE_8_16 = android.hardware.tv.tuner.V1_1.Constants
+            .FrontendCableTimeInterleaveMode.INTERLEAVING_8_16;
+    /**
+     * 128/2 Time Interleave Mode.
+     */
+    public static final int TIME_INTERLEAVE_MODE_128_2 = android.hardware.tv.tuner.V1_1.Constants
+            .FrontendCableTimeInterleaveMode.INTERLEAVING_128_2;
+    /**
+     * 128/3 Time Interleave Mode.
+     */
+    public static final int TIME_INTERLEAVE_MODE_128_3 = android.hardware.tv.tuner.V1_1.Constants
+            .FrontendCableTimeInterleaveMode.INTERLEAVING_128_3;
+    /**
+     * 128/4 Time Interleave Mode.
+     */
+    public static final int TIME_INTERLEAVE_MODE_128_4 = android.hardware.tv.tuner.V1_1.Constants
+            .FrontendCableTimeInterleaveMode.INTERLEAVING_128_4;
+
 
     private final int mModulation;
     private final long mInnerFec;
@@ -147,9 +217,11 @@
     private final int mOuterFec;
     private final int mAnnex;
     private final int mSpectralInversion;
+    // Dvbc time interleave mode is only supported in Tuner 1.1 or higher.
+    private final int mInterleaveMode;
 
     private DvbcFrontendSettings(int frequency, int modulation, long innerFec, int symbolRate,
-            int outerFec, int annex, int spectralInversion) {
+            int outerFec, int annex, int spectralInversion, int interleaveMode) {
         super(frequency);
         mModulation = modulation;
         mInnerFec = innerFec;
@@ -157,6 +229,7 @@
         mOuterFec = outerFec;
         mAnnex = annex;
         mSpectralInversion = spectralInversion;
+        mInterleaveMode = interleaveMode;
     }
 
     /**
@@ -196,10 +269,17 @@
     /**
      * Gets Spectral Inversion.
      */
-    @SpectralInversion
+    @FrontendSpectralInversion
     public int getSpectralInversion() {
         return mSpectralInversion;
     }
+    /**
+     * Gets Time Interleave Mode.
+     */
+    @TimeInterleaveMode
+    public int getTimeInterleaveMode() {
+        return mInterleaveMode;
+    }
 
     /**
      * Creates a builder for {@link DvbcFrontendSettings}.
@@ -219,7 +299,8 @@
         private int mSymbolRate = 0;
         private int mOuterFec = OUTER_FEC_UNDEFINED;
         private int mAnnex = ANNEX_UNDEFINED;
-        private int mSpectralInversion = SPECTRAL_INVERSION_UNDEFINED;
+        private int mSpectralInversion = FrontendSettings.FRONTEND_SPECTRAL_INVERSION_UNDEFINED;
+        private int mInterleaveMode = TIME_INTERLEAVE_MODE_UNDEFINED;
 
         private Builder() {
         }
@@ -289,13 +370,30 @@
         /**
          * Sets Spectral Inversion.
          *
-         * <p>Default value is {@link #SPECTRAL_INVERSION_UNDEFINED}.
+         * <p>Default value is {@link FrontendSettings#FRONTEND_SPECTRAL_INVERSION_UNDEFINED}.
          */
         @NonNull
-        public Builder setSpectralInversion(@SpectralInversion int spectralInversion) {
+        public Builder setSpectralInversion(@FrontendSpectralInversion int spectralInversion) {
             mSpectralInversion = spectralInversion;
             return this;
         }
+        /**
+         * Set the time interleave mode.
+         *
+         * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would cause
+         * no-op. Use {@link TunerVersionChecker.getTunerVersion()} to check the version.
+         *
+         * @param interleaveMode the value to set as the time interleave mode. Default value is
+         * {@link #TIME_INTERLEAVE_MODE_UNDEFINED}.
+         */
+        @NonNull
+        public Builder setTimeInterleaveMode(@TimeInterleaveMode int interleaveMode) {
+            if (TunerVersionChecker.checkHigherOrEqualVersionTo(
+                        TunerVersionChecker.TUNER_VERSION_1_1, "setTimeInterleaveMode")) {
+                mInterleaveMode = interleaveMode;
+            }
+            return this;
+        }
 
         /**
          * Builds a {@link DvbcFrontendSettings} object.
@@ -303,7 +401,7 @@
         @NonNull
         public DvbcFrontendSettings build() {
             return new DvbcFrontendSettings(mFrequency, mModulation, mInnerFec, mSymbolRate,
-                mOuterFec, mAnnex, mSpectralInversion);
+                mOuterFec, mAnnex, mSpectralInversion, mInterleaveMode);
         }
     }
 
diff --git a/media/java/android/media/tv/tuner/frontend/DvbsFrontendSettings.java b/media/java/android/media/tv/tuner/frontend/DvbsFrontendSettings.java
index 60b070f..343dbb1 100644
--- a/media/java/android/media/tv/tuner/frontend/DvbsFrontendSettings.java
+++ b/media/java/android/media/tv/tuner/frontend/DvbsFrontendSettings.java
@@ -23,6 +23,8 @@
 import android.annotation.SystemApi;
 import android.hardware.tv.tuner.V1_0.Constants;
 import android.media.tv.tuner.Tuner;
+import android.media.tv.tuner.TunerVersionChecker;
+
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -36,6 +38,44 @@
 public class DvbsFrontendSettings extends FrontendSettings {
     /** @hide */
     @IntDef(flag = true,
+            prefix = "SCAN_TYPE_",
+            value = {SCAN_TYPE_UNDEFINED, SCAN_TYPE_DIRECT, SCAN_TYPE_DISEQC,
+                    SCAN_TYPE_UNICABLE, SCAN_TYPE_JESS})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface ScanType {}
+
+    /**
+     * Dvbs scan type undefined.
+     */
+    public static final int SCAN_TYPE_UNDEFINED =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendDvbsScanType.UNDEFINED;
+
+    /**
+     * Dvbs scan type DIRECT.
+     */
+    public static final int SCAN_TYPE_DIRECT =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendDvbsScanType.DIRECT;
+
+    /**
+     * Dvbs scan type DISEQC.
+     */
+    public static final int SCAN_TYPE_DISEQC =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendDvbsScanType.DISEQC;
+
+    /**
+     * Dvbs scan type UNICABLE.
+     */
+    public static final int SCAN_TYPE_UNICABLE =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendDvbsScanType.UNICABLE;
+
+    /**
+     * Dvbs scan type JESS.
+     */
+    public static final int SCAN_TYPE_JESS =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendDvbsScanType.JESS;
+
+    /** @hide */
+    @IntDef(flag = true,
             prefix = "MODULATION_",
             value = {MODULATION_UNDEFINED, MODULATION_AUTO, MODULATION_MOD_QPSK,
                     MODULATION_MOD_8PSK, MODULATION_MOD_16QAM, MODULATION_MOD_16PSK,
@@ -218,9 +258,12 @@
     private final int mInputStreamId;
     private final int mStandard;
     private final int mVcmMode;
+    // Dvbs scan type is only supported in Tuner 1.1 or higher.
+    private final int mScanType;
 
     private DvbsFrontendSettings(int frequency, int modulation, DvbsCodeRate codeRate,
-            int symbolRate, int rolloff, int pilot, int inputStreamId, int standard, int vcm) {
+            int symbolRate, int rolloff, int pilot, int inputStreamId, int standard, int vcm,
+            int scanType) {
         super(frequency);
         mModulation = modulation;
         mCodeRate = codeRate;
@@ -230,6 +273,7 @@
         mInputStreamId = inputStreamId;
         mStandard = standard;
         mVcmMode = vcm;
+        mScanType = scanType;
     }
 
     /**
@@ -286,6 +330,13 @@
     public int getVcmMode() {
         return mVcmMode;
     }
+    /**
+     * Get scan type.
+     */
+    @ScanType
+    public int getScanType() {
+        return mScanType;
+    }
 
     /**
      * Creates a builder for {@link DvbsFrontendSettings}.
@@ -308,6 +359,7 @@
         private int mInputStreamId = Tuner.INVALID_STREAM_ID;
         private int mStandard = STANDARD_AUTO;
         private int mVcmMode = VCM_MODE_UNDEFINED;
+        private int mScanType = SCAN_TYPE_UNDEFINED;
 
         private Builder() {
         }
@@ -325,6 +377,24 @@
         }
 
         /**
+         * Set the scan type.
+         *
+         * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would cause
+         * no-op. Use {@link TunerVersionChecker.getTunerVersion()} to check the version.
+         *
+         * @param scanType the value to set as the scan type. Default value is
+         * {@link android.media.tv.tuner.frontend.DvbsFrontendSettings#DVBS_SCAN_TYPE_UNDEFINED}.
+         */
+        @NonNull
+        public Builder setScanType(@ScanType int scanType) {
+            if (TunerVersionChecker.checkHigherOrEqualVersionTo(
+                        TunerVersionChecker.TUNER_VERSION_1_1, "setScanType")) {
+                mScanType = scanType;
+            }
+            return this;
+        }
+
+        /**
          * Sets Modulation.
          *
          * <p>Default value is {@link #MODULATION_UNDEFINED}.
@@ -411,7 +481,7 @@
         @NonNull
         public DvbsFrontendSettings build() {
             return new DvbsFrontendSettings(mFrequency, mModulation, mCodeRate, mSymbolRate,
-                    mRolloff, mPilot, mInputStreamId, mStandard, mVcmMode);
+                    mRolloff, mPilot, mInputStreamId, mStandard, mVcmMode, mScanType);
         }
     }
 
diff --git a/media/java/android/media/tv/tuner/frontend/DvbtFrontendSettings.java b/media/java/android/media/tv/tuner/frontend/DvbtFrontendSettings.java
index 5c057de..07d1797 100644
--- a/media/java/android/media/tv/tuner/frontend/DvbtFrontendSettings.java
+++ b/media/java/android/media/tv/tuner/frontend/DvbtFrontendSettings.java
@@ -21,6 +21,7 @@
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
 import android.hardware.tv.tuner.V1_0.Constants;
+import android.media.tv.tuner.TunerVersionChecker;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -75,8 +76,21 @@
      * 32K Transmission Mode.
      */
     public static final int TRANSMISSION_MODE_32K = Constants.FrontendDvbtTransmissionMode.MODE_32K;
-
-
+    /**
+     * 8K Transmission Extended Mode.
+     */
+    public static final int TRANSMISSION_MODE_EXTENDED_8K =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendDvbtTransmissionMode.MODE_8K_E;
+    /**
+     * 16K Transmission Extended Mode.
+     */
+    public static final int TRANSMISSION_MODE_EXTENDED_16K =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendDvbtTransmissionMode.MODE_16K_E;
+    /**
+     * 32K Transmission Extended Mode.
+     */
+    public static final int TRANSMISSION_MODE_EXTENDED_32K =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendDvbtTransmissionMode.MODE_32K_E;
 
     /** @hide */
     @IntDef(flag = true,
@@ -124,8 +138,9 @@
     @IntDef(flag = true,
             prefix = "CONSTELLATION_",
             value = {CONSTELLATION_UNDEFINED, CONSTELLATION_AUTO, CONSTELLATION_QPSK,
-                    CONSTELLATION_16QAM, CONSTELLATION_64QAM,
-                    CONSTELLATION_256QAM})
+                    CONSTELLATION_16QAM, CONSTELLATION_64QAM, CONSTELLATION_256QAM,
+                    CONSTELLATION_QPSK_R, CONSTELLATION_16QAM_R, CONSTELLATION_64QAM_R,
+                    CONSTELLATION_256QAM_R})
     @Retention(RetentionPolicy.SOURCE)
     public @interface Constellation {}
 
@@ -157,7 +172,30 @@
      */
     public static final int CONSTELLATION_256QAM =
             Constants.FrontendDvbtConstellation.CONSTELLATION_256QAM;
-
+    /**
+     * QPSK Rotated Constellation.
+     */
+    public static final int CONSTELLATION_QPSK_R =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendDvbtConstellation
+                    .CONSTELLATION_QPSK_R;
+    /**
+     * 16QAM Rotated Constellation.
+     */
+    public static final int CONSTELLATION_16QAM_R =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendDvbtConstellation
+                    .CONSTELLATION_16QAM_R;
+    /**
+     * 64QAM Rotated Constellation.
+     */
+    public static final int CONSTELLATION_64QAM_R =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendDvbtConstellation
+                    .CONSTELLATION_64QAM_R;
+    /**
+     * 256QAM Rotated Constellation.
+     */
+    public static final int CONSTELLATION_256QAM_R =
+            android.hardware.tv.tuner.V1_1.Constants.FrontendDvbtConstellation
+                    .CONSTELLATION_256QAM_R;
 
     /** @hide */
     @IntDef(flag = true,
@@ -366,8 +404,7 @@
      */
     public static final int PLP_MODE_MANUAL = Constants.FrontendDvbtPlpMode.MANUAL;
 
-
-    private final int mTransmissionMode;
+    private int mTransmissionMode;
     private final int mBandwidth;
     private final int mConstellation;
     private final int mHierarchy;
@@ -489,6 +526,19 @@
         return mPlpGroupId;
     }
 
+    private static boolean isExtendedTransmissionMode(@TransmissionMode int transmissionMode) {
+        return transmissionMode == TRANSMISSION_MODE_EXTENDED_8K
+                || transmissionMode == TRANSMISSION_MODE_EXTENDED_16K
+                || transmissionMode == TRANSMISSION_MODE_EXTENDED_32K;
+    }
+
+    private static boolean isExtendedConstellation(@Constellation int constellation) {
+        return constellation == CONSTELLATION_QPSK_R
+                || constellation == CONSTELLATION_16QAM_R
+                || constellation == CONSTELLATION_64QAM_R
+                || constellation == CONSTELLATION_256QAM_R;
+    }
+
     /**
      * Creates a builder for {@link DvbtFrontendSettings}.
      */
@@ -534,13 +584,23 @@
         /**
          * Sets Transmission Mode.
          *
+         * <p>{@link #TRANSMISSION_MODE_EXTENDED_8K}, {@link #TRANSMISSION_MODE_EXTENDED_16K} and
+         * {@link #TRANSMISSION_MODE_EXTENDED_32K} are only supported by Tuner HAL 1.1 or higher.
+         * Unsupported version would cause no-op. Use {@link TunerVersionChecker.getTunerVersion()}
+         * to check the version.
+         *
          * <p>Default value is {@link #TRANSMISSION_MODE_UNDEFINED}.
          */
         @NonNull
         public Builder setTransmissionMode(@TransmissionMode int transmissionMode) {
-            mTransmissionMode = transmissionMode;
+            if (!isExtendedTransmissionMode(transmissionMode)
+                    || TunerVersionChecker.checkHigherOrEqualVersionTo(
+                            TunerVersionChecker.TUNER_VERSION_1_1, "set TransmissionMode Ext")) {
+                mTransmissionMode = transmissionMode;
+            }
             return this;
         }
+
         /**
          * Sets Bandwidth.
          *
@@ -554,11 +614,20 @@
         /**
          * Sets Constellation.
          *
+         * <p>{@link #CONSTELLATION_QPSK_R}, {@link #CONSTELLATION_16QAM_R},
+         * {@link #CONSTELLATION_64QAM_R} and {@link #CONSTELLATION_256QAM_Rare} are only supported
+         * by Tuner HAL 1.1 or higher. Unsupported version would cause no-op. Use
+         * {@link TunerVersionChecker.getTunerVersion()} to check the version.
+         *
          * <p>Default value is {@link #CONSTELLATION_UNDEFINED}.
          */
         @NonNull
         public Builder setConstellation(@Constellation int constellation) {
-            mConstellation = constellation;
+            if (!isExtendedConstellation(constellation)
+                    || TunerVersionChecker.checkHigherOrEqualVersionTo(
+                            TunerVersionChecker.TUNER_VERSION_1_1, "set Constellation Ext")) {
+                mConstellation = constellation;
+            }
             return this;
         }
         /**
diff --git a/media/java/android/media/tv/tuner/frontend/FrontendSettings.java b/media/java/android/media/tv/tuner/frontend/FrontendSettings.java
index 2f2fa97..82f7afa 100644
--- a/media/java/android/media/tv/tuner/frontend/FrontendSettings.java
+++ b/media/java/android/media/tv/tuner/frontend/FrontendSettings.java
@@ -17,9 +17,12 @@
 package android.media.tv.tuner.frontend;
 
 import android.annotation.IntDef;
+import android.annotation.IntRange;
 import android.annotation.LongDef;
 import android.annotation.SystemApi;
 import android.hardware.tv.tuner.V1_0.Constants;
+import android.media.tv.tuner.Tuner;
+import android.media.tv.tuner.TunerVersionChecker;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -241,9 +244,36 @@
      */
     public static final long FEC_77_90 = Constants.FrontendInnerFec.FEC_77_90;
 
+    /** @hide */
+    @IntDef(prefix = "FRONTEND_SPECTRAL_INVERSION_",
+            value = {FRONTEND_SPECTRAL_INVERSION_UNDEFINED, FRONTEND_SPECTRAL_INVERSION_NORMAL,
+                    FRONTEND_SPECTRAL_INVERSION_INVERTED})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface FrontendSpectralInversion {}
+
+    /**
+     * Spectral Inversion Type undefined.
+     */
+    public static final int FRONTEND_SPECTRAL_INVERSION_UNDEFINED =
+            Constants.FrontendDvbcSpectralInversion.UNDEFINED;
+    /**
+     * Normal Spectral Inversion.
+     */
+    public static final int FRONTEND_SPECTRAL_INVERSION_NORMAL =
+            Constants.FrontendDvbcSpectralInversion.NORMAL;
+    /**
+     * Inverted Spectral Inversion.
+     */
+    public static final int FRONTEND_SPECTRAL_INVERSION_INVERTED =
+            Constants.FrontendDvbcSpectralInversion.INVERTED;
+
 
 
     private final int mFrequency;
+    // End frequency is only supported in Tuner 1.1 or higher.
+    private int mEndFrequency = Tuner.INVALID_FRONTEND_SETTING_FREQUENCY;
+    // General spectral inversion is only supported in Tuner 1.1 or higher.
+    private int mSpectralInversion = FRONTEND_SPECTRAL_INVERSION_UNDEFINED;
 
     FrontendSettings(int frequency) {
         mFrequency = frequency;
@@ -263,4 +293,57 @@
     public int getFrequency() {
         return mFrequency;
     }
+
+    /**
+     * Get the end frequency.
+     *
+     * @return the end frequency in Hz.
+     */
+    public int getEndFrequency() {
+        return mEndFrequency;
+    }
+
+    /**
+     * Get the spectral inversion.
+     *
+     * @return the value of the spectral inversion.
+     */
+    @FrontendSpectralInversion
+    public int getFrontendSpectralInversion() {
+        return mSpectralInversion;
+    }
+
+    /**
+     * Set Spectral Inversion.
+     *
+     * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would cause
+     * no-op. Use {@link TunerVersionChecker.getTunerVersion()} to check the version.
+     *
+     * @param inversion the value to set as the spectral inversion. Default value is {@link
+     * #FRONTEND_SPECTRAL_INVERSION_UNDEFINED}.
+     */
+    public void setSpectralInversion(@FrontendSpectralInversion int inversion) {
+        if (TunerVersionChecker.checkHigherOrEqualVersionTo(
+                TunerVersionChecker.TUNER_VERSION_1_1, "setSpectralInversion")) {
+            mSpectralInversion = inversion;
+        }
+    }
+
+    /**
+     * Set End Frequency. This API is only supported with Tuner HAL 1.1 or higher. Otherwise it
+     * would be no-op.
+     *
+     * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would cause
+     * no-op. Use {@link TunerVersionChecker.getTunerVersion()} to check the version.
+     *
+     * @param endFrequency the end frequency used during blind scan. The default value is
+     * {@link android.media.tv.tuner.Tuner#INVALID_FRONTEND_SETTING_FREQUENCY}.
+     */
+    @IntRange(from = 1)
+    public void setEndFrequency(int endFrequency) {
+        if (TunerVersionChecker.checkHigherOrEqualVersionTo(
+                TunerVersionChecker.TUNER_VERSION_1_1, "setEndFrequency")) {
+            mEndFrequency = endFrequency;
+        }
+    }
 }
diff --git a/non-updatable-api/system-current.txt b/non-updatable-api/system-current.txt
index 900f68b..fc6ff74 100644
--- a/non-updatable-api/system-current.txt
+++ b/non-updatable-api/system-current.txt
@@ -4995,6 +4995,7 @@
     field public static final int INVALID_AV_SYNC_ID = -1; // 0xffffffff
     field public static final int INVALID_FILTER_ID = -1; // 0xffffffff
     field public static final long INVALID_FILTER_ID_64BIT = -1L; // 0xffffffffffffffffL
+    field public static final int INVALID_FRONTEND_SETTING_FREQUENCY = -1; // 0xffffffff
     field public static final int INVALID_LTS_ID = -1; // 0xffffffff
     field public static final int INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM = -1; // 0xffffffff
     field public static final int INVALID_STREAM_ID = 65535; // 0xffff
@@ -5437,9 +5438,13 @@
 
   public class AnalogFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
     method @NonNull public static android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder builder();
+    method public int getAftFlag();
     method public int getSifStandard();
     method public int getSignalType();
     method public int getType();
+    field public static final int AFT_FLAG_FALSE = 2; // 0x2
+    field public static final int AFT_FLAG_TRUE = 1; // 0x1
+    field public static final int AFT_FLAG_UNDEFINED = 0; // 0x0
     field public static final int SIF_AUTO = 1; // 0x1
     field public static final int SIF_BG = 2; // 0x2
     field public static final int SIF_BG_A2 = 4; // 0x4
@@ -5472,6 +5477,7 @@
 
   public static class AnalogFrontendSettings.Builder {
     method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setAftFlag(int);
     method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setFrequency(int);
     method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setSifStandard(int);
     method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setSignalType(int);
@@ -5601,6 +5607,7 @@
     method public int getOuterFec();
     method public int getSpectralInversion();
     method public int getSymbolRate();
+    method public int getTimeInterleaveMode();
     method public int getType();
     field public static final int ANNEX_A = 1; // 0x1
     field public static final int ANNEX_B = 2; // 0x2
@@ -5619,6 +5626,17 @@
     field public static final int SPECTRAL_INVERSION_INVERTED = 2; // 0x2
     field public static final int SPECTRAL_INVERSION_NORMAL = 1; // 0x1
     field public static final int SPECTRAL_INVERSION_UNDEFINED = 0; // 0x0
+    field public static final int TIME_INTERLEAVE_MODE_128_1_0 = 2; // 0x2
+    field public static final int TIME_INTERLEAVE_MODE_128_1_1 = 4; // 0x4
+    field public static final int TIME_INTERLEAVE_MODE_128_2 = 128; // 0x80
+    field public static final int TIME_INTERLEAVE_MODE_128_3 = 256; // 0x100
+    field public static final int TIME_INTERLEAVE_MODE_128_4 = 512; // 0x200
+    field public static final int TIME_INTERLEAVE_MODE_16_8 = 32; // 0x20
+    field public static final int TIME_INTERLEAVE_MODE_32_4 = 16; // 0x10
+    field public static final int TIME_INTERLEAVE_MODE_64_2 = 8; // 0x8
+    field public static final int TIME_INTERLEAVE_MODE_8_16 = 64; // 0x40
+    field public static final int TIME_INTERLEAVE_MODE_AUTO = 1; // 0x1
+    field public static final int TIME_INTERLEAVE_MODE_UNDEFINED = 0; // 0x0
   }
 
   public static class DvbcFrontendSettings.Builder {
@@ -5630,6 +5648,7 @@
     method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setOuterFec(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setSpectralInversion(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setSymbolRate(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setTimeInterleaveMode(int);
   }
 
   public class DvbsCodeRate {
@@ -5661,6 +5680,7 @@
     method public int getModulation();
     method public int getPilot();
     method public int getRolloff();
+    method public int getScanType();
     method public int getStandard();
     method public int getSymbolRate();
     method public int getType();
@@ -5691,6 +5711,11 @@
     field public static final int ROLLOFF_0_35 = 1; // 0x1
     field public static final int ROLLOFF_0_5 = 6; // 0x6
     field public static final int ROLLOFF_UNDEFINED = 0; // 0x0
+    field public static final int SCAN_TYPE_DIRECT = 1; // 0x1
+    field public static final int SCAN_TYPE_DISEQC = 2; // 0x2
+    field public static final int SCAN_TYPE_JESS = 4; // 0x4
+    field public static final int SCAN_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int SCAN_TYPE_UNICABLE = 3; // 0x3
     field public static final int STANDARD_AUTO = 1; // 0x1
     field public static final int STANDARD_S = 2; // 0x2
     field public static final int STANDARD_S2 = 4; // 0x4
@@ -5708,6 +5733,7 @@
     method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setModulation(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setPilot(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setRolloff(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setScanType(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setStandard(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setSymbolRate(int);
     method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setVcmMode(int);
@@ -5760,10 +5786,14 @@
     field public static final int CODERATE_AUTO = 1; // 0x1
     field public static final int CODERATE_UNDEFINED = 0; // 0x0
     field public static final int CONSTELLATION_16QAM = 4; // 0x4
+    field public static final int CONSTELLATION_16QAM_R = 64; // 0x40
     field public static final int CONSTELLATION_256QAM = 16; // 0x10
+    field public static final int CONSTELLATION_256QAM_R = 256; // 0x100
     field public static final int CONSTELLATION_64QAM = 8; // 0x8
+    field public static final int CONSTELLATION_64QAM_R = 128; // 0x80
     field public static final int CONSTELLATION_AUTO = 1; // 0x1
     field public static final int CONSTELLATION_QPSK = 2; // 0x2
+    field public static final int CONSTELLATION_QPSK_R = 32; // 0x20
     field public static final int CONSTELLATION_UNDEFINED = 0; // 0x0
     field public static final int GUARD_INTERVAL_19_128 = 64; // 0x40
     field public static final int GUARD_INTERVAL_19_256 = 128; // 0x80
@@ -5797,6 +5827,9 @@
     field public static final int TRANSMISSION_MODE_4K = 8; // 0x8
     field public static final int TRANSMISSION_MODE_8K = 4; // 0x4
     field public static final int TRANSMISSION_MODE_AUTO = 1; // 0x1
+    field public static final int TRANSMISSION_MODE_EXTENDED_16K = 256; // 0x100
+    field public static final int TRANSMISSION_MODE_EXTENDED_32K = 512; // 0x200
+    field public static final int TRANSMISSION_MODE_EXTENDED_8K = 128; // 0x80
     field public static final int TRANSMISSION_MODE_UNDEFINED = 0; // 0x0
   }
 
@@ -5834,8 +5867,12 @@
   }
 
   public abstract class FrontendSettings {
+    method public int getEndFrequency();
     method public int getFrequency();
+    method public int getFrontendSpectralInversion();
     method public abstract int getType();
+    method @IntRange(from=1) public void setEndFrequency(int);
+    method public void setSpectralInversion(int);
     field public static final long FEC_11_15 = 4194304L; // 0x400000L
     field public static final long FEC_11_20 = 8388608L; // 0x800000L
     field public static final long FEC_11_45 = 16777216L; // 0x1000000L
@@ -5873,6 +5910,9 @@
     field public static final long FEC_9_20 = 2097152L; // 0x200000L
     field public static final long FEC_AUTO = 1L; // 0x1L
     field public static final long FEC_UNDEFINED = 0L; // 0x0L
+    field public static final int FRONTEND_SPECTRAL_INVERSION_INVERTED = 2; // 0x2
+    field public static final int FRONTEND_SPECTRAL_INVERSION_NORMAL = 1; // 0x1
+    field public static final int FRONTEND_SPECTRAL_INVERSION_UNDEFINED = 0; // 0x0
     field public static final int TYPE_ANALOG = 1; // 0x1
     field public static final int TYPE_ATSC = 2; // 0x2
     field public static final int TYPE_ATSC3 = 3; // 0x3