Add new Frontend Status Types and a new scan msg in Tuner HAL 1.1

Test: atest VtsHalTvTunerV1_1TargetTest
Bug: 169868608
Change-Id: I04b108bab20e6a1969998bb954e48c2f1c5e0772
diff --git a/tv/tuner/1.1/default/Frontend.cpp b/tv/tuner/1.1/default/Frontend.cpp
index 069456d..6956f30 100644
--- a/tv/tuner/1.1/default/Frontend.cpp
+++ b/tv/tuner/1.1/default/Frontend.cpp
@@ -302,6 +302,12 @@
                 status.codeRates(codeRates);
                 break;
             }
+            case V1_1::FrontendStatusTypeExt1_1::BANDWIDTH: {
+                V1_1::FrontendBandwidth bandwidth;
+                bandwidth.dvbt(FrontendDvbtBandwidth::BANDWIDTH_8MHZ);
+                status.bandwidth(bandwidth);
+                break;
+            }
             case V1_1::FrontendStatusTypeExt1_1::GUARD_INTERVAL: {
                 V1_1::FrontendGuardInterval interval;
                 interval.dvbt(FrontendDvbtGuardInterval::INTERVAL_1_32);  // value = 1 << 1
@@ -339,6 +345,24 @@
                 status.tsDataRate(dataRates);
                 break;
             }
+            case V1_1::FrontendStatusTypeExt1_1::ROLL_OFF: {
+                V1_1::FrontendRollOff rollOff;
+                rollOff.dvbs(FrontendDvbsRolloff::ROLLOFF_0_35);
+                status.rollOff(rollOff);
+                break;
+            }
+            case V1_1::FrontendStatusTypeExt1_1::IS_MISO: {
+                status.isMiso(true);
+                break;
+            }
+            case V1_1::FrontendStatusTypeExt1_1::IS_LINEAR: {
+                status.isLinear(true);
+                break;
+            }
+            case V1_1::FrontendStatusTypeExt1_1::IS_SHORT_FRAMES: {
+                status.isShortFrames(true);
+                break;
+            }
             default: {
                 continue;
             }
diff --git a/tv/tuner/1.1/types.hal b/tv/tuner/1.1/types.hal
index 6e3ddfa..4e677b5 100644
--- a/tv/tuner/1.1/types.hal
+++ b/tv/tuner/1.1/types.hal
@@ -20,14 +20,18 @@
 import @1.0::DemuxFilterMmtpRecordEvent;
 import @1.0::DemuxFilterTsRecordEvent;
 import @1.0::DemuxScIndex;
+import @1.0::FrontendIsdbs3Rolloff;
 import @1.0::FrontendAtsc3Bandwidth;
 import @1.0::FrontendAtsc3Modulation;
 import @1.0::FrontendAtsc3TimeInterleaveMode;
+import @1.0::FrontendIsdbsRolloff;
 import @1.0::FrontendAtscModulation;
+import @1.0::FrontendDvbcAnnex;
 import @1.0::FrontendDvbcModulation;
-import @1.0::FrontendDvbtBandwidth;
 import @1.0::FrontendDvbcSpectralInversion;
 import @1.0::FrontendDvbsModulation;
+import @1.0::FrontendDvbsRolloff;
+import @1.0::FrontendDvbtBandwidth;
 import @1.0::FrontendDvbtConstellation;
 import @1.0::FrontendDvbtTransmissionMode;
 import @1.0::FrontendDvbtGuardInterval;
@@ -477,6 +481,14 @@
     FrontendDtmbTransmissionMode dtmb;
 };
 
+safe_union FrontendRollOff {
+    @1.0::FrontendDvbsRolloff dvbs;
+
+    @1.0::FrontendIsdbsRolloff isdbs;
+
+    @1.0::FrontendIsdbs3Rolloff isdbs3;
+};
+
 @export
 enum FrontendStatusTypeExt1_1 : uint32_t {
     /**
@@ -524,6 +536,22 @@
      * Transport Stream Data Rate in BPS of the current channel.
      */
     TS_DATA_RATES,
+    /**
+     * Roll Off Type status of the frontend.
+     */
+    ROLL_OFF,
+    /**
+     * If the frontend currently supports MISO or not.
+     */
+    IS_MISO,
+    /**
+     * If the frontend code rate is linear or not.
+     */
+    IS_LINEAR,
+    /**
+     * If short frames is enabled or not.
+     */
+    IS_SHORT_FRAMES,
 };
 
 safe_union FrontendStatusExt1_1 {
@@ -582,16 +610,35 @@
      * Transport Stream Data Rate in BPS of the current channel.
      */
     vec<uint32_t> tsDataRate;
+    /**
+     * Roll Off Type status of the frontend.
+     */
+    FrontendRollOff rollOff;
+    /**
+     * If the frontend currently supports MISO or not.
+     */
+    bool isMiso;
+    /**
+     * If the frontend code rate is linear or not.
+     */
+    bool isLinear;
+    /**
+     * If short frames is enabled or not.
+     */
+    bool isShortFrames;
 };
 
 enum FrontendScanMessageTypeExt1_1 : uint32_t {
     MODULATION = @1.0::FrontendScanMessageType:ATSC3_PLP_INFO + 1,
+    DVBC_ANNEX,
     HIGH_PRIORITY,
 };
 
 safe_union FrontendScanMessageExt1_1 {
     FrontendModulation modulation;
 
+    @1.0::FrontendDvbcAnnex annex;
+
     bool isHighPriority;
 };
 
diff --git a/tv/tuner/1.1/vts/functional/FrontendTests.cpp b/tv/tuner/1.1/vts/functional/FrontendTests.cpp
index e5793c1..0948f74 100644
--- a/tv/tuner/1.1/vts/functional/FrontendTests.cpp
+++ b/tv/tuner/1.1/vts/functional/FrontendTests.cpp
@@ -58,6 +58,9 @@
         case FrontendScanMessageExt1_1::hidl_discriminator::isHighPriority:
             ALOGD("[vts] frontend ext1_1 scan message high priority: %d", message.isHighPriority());
             break;
+        case FrontendScanMessageExt1_1::hidl_discriminator::annex:
+            ALOGD("[vts] frontend ext1_1 scan message dvbc annex: %hhu", message.annex());
+            break;
         default:
             break;
     }
@@ -374,6 +377,22 @@
                                        expectStatuses[i].tsDataRate().begin()));
                 break;
             }
+            case FrontendStatusTypeExt1_1::ROLL_OFF: {
+                // TODO: verify roll off
+                break;
+            }
+            case FrontendStatusTypeExt1_1::IS_MISO: {
+                ASSERT_TRUE(realStatuses[i].isMiso() == expectStatuses[i].isMiso());
+                break;
+            }
+            case FrontendStatusTypeExt1_1::IS_LINEAR: {
+                ASSERT_TRUE(realStatuses[i].isLinear() == expectStatuses[i].isLinear());
+                break;
+            }
+            case FrontendStatusTypeExt1_1::IS_SHORT_FRAMES: {
+                ASSERT_TRUE(realStatuses[i].isShortFrames() == expectStatuses[i].isShortFrames());
+                break;
+            }
             default: {
                 continue;
             }
diff --git a/tv/tuner/1.1/vts/functional/VtsHalTvTunerV1_1TestConfigurations.h b/tv/tuner/1.1/vts/functional/VtsHalTvTunerV1_1TestConfigurations.h
index cb86ce8..911d984 100644
--- a/tv/tuner/1.1/vts/functional/VtsHalTvTunerV1_1TestConfigurations.h
+++ b/tv/tuner/1.1/vts/functional/VtsHalTvTunerV1_1TestConfigurations.h
@@ -138,10 +138,14 @@
     frontendArray[DVBT].type = FrontendType::DVBT, frontendArray[DVBT].settings.dvbt(dvbtSettings);
     vector<FrontendStatusTypeExt1_1> types;
     types.push_back(FrontendStatusTypeExt1_1::UEC);
+    types.push_back(FrontendStatusTypeExt1_1::IS_MISO);
+    vector<FrontendStatusExt1_1> statuses;
     FrontendStatusExt1_1 status;
     status.uec(4);
-    vector<FrontendStatusExt1_1> statuses;
     statuses.push_back(status);
+    status.isMiso(true);
+    statuses.push_back(status);
+
     frontendArray[DVBT].tuneStatusTypes = types;
     frontendArray[DVBT].expectTuneStatuses = statuses;
     frontendArray[DVBT].isSoftwareFe = true;