diff --git a/api/system-current.txt b/api/system-current.txt index 3c21676a874bf..d2a8763ee0e0d 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6144,6 +6144,7 @@ package android.media.tv.tuner.frontend { method public int getPer(); method public int getPerBer(); method public int getPlpId(); + method public int getRollOff(); method public int getSignalQuality(); method public int getSignalStrength(); method public int getSnr(); @@ -6155,8 +6156,11 @@ package android.media.tv.tuner.frontend { method public int getUec(); method public boolean isDemodLocked(); method public boolean isEwbs(); + method public boolean isLinear(); method public boolean isLnaOn(); + method public boolean isMisoEnabled(); method public boolean isRfLocked(); + method public boolean isShortFramesEnabled(); field public static final int FRONTEND_STATUS_TYPE_AGC = 14; // 0xe field public static final int FRONTEND_STATUS_TYPE_ATSC3_PLP_INFO = 21; // 0x15 field public static final int FRONTEND_STATUS_TYPE_BANDWIDTH = 25; // 0x19 @@ -6171,6 +6175,9 @@ package android.media.tv.tuner.frontend { field public static final int FRONTEND_STATUS_TYPE_HIERARCHY = 19; // 0x13 field public static final int FRONTEND_STATUS_TYPE_INTERLEAVINGS = 30; // 0x1e field public static final int FRONTEND_STATUS_TYPE_ISDBT_SEGMENTS = 31; // 0x1f + field public static final int FRONTEND_STATUS_TYPE_IS_LINEAR = 35; // 0x23 + field public static final int FRONTEND_STATUS_TYPE_IS_MISO = 34; // 0x22 + field public static final int FRONTEND_STATUS_TYPE_IS_SHORT_FRAMES = 36; // 0x24 field public static final int FRONTEND_STATUS_TYPE_LAYER_ERROR = 16; // 0x10 field public static final int FRONTEND_STATUS_TYPE_LNA = 15; // 0xf field public static final int FRONTEND_STATUS_TYPE_LNB_VOLTAGE = 11; // 0xb @@ -6181,6 +6188,7 @@ package android.media.tv.tuner.frontend { field public static final int FRONTEND_STATUS_TYPE_PLP_ID = 12; // 0xc field public static final int FRONTEND_STATUS_TYPE_PRE_BER = 4; // 0x4 field public static final int FRONTEND_STATUS_TYPE_RF_LOCK = 20; // 0x14 + field public static final int FRONTEND_STATUS_TYPE_ROLL_OFF = 33; // 0x21 field public static final int FRONTEND_STATUS_TYPE_SIGNAL_QUALITY = 5; // 0x5 field public static final int FRONTEND_STATUS_TYPE_SIGNAL_STRENGTH = 6; // 0x6 field public static final int FRONTEND_STATUS_TYPE_SNR = 1; // 0x1 diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 65308da527768..e4449ea593a46 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -6084,6 +6084,7 @@ package android.media.tv.tuner.frontend { method public int getPer(); method public int getPerBer(); method public int getPlpId(); + method public int getRollOff(); method public int getSignalQuality(); method public int getSignalStrength(); method public int getSnr(); @@ -6095,8 +6096,11 @@ package android.media.tv.tuner.frontend { method public int getUec(); method public boolean isDemodLocked(); method public boolean isEwbs(); + method public boolean isLinear(); method public boolean isLnaOn(); + method public boolean isMisoEnabled(); method public boolean isRfLocked(); + method public boolean isShortFramesEnabled(); field public static final int FRONTEND_STATUS_TYPE_AGC = 14; // 0xe field public static final int FRONTEND_STATUS_TYPE_ATSC3_PLP_INFO = 21; // 0x15 field public static final int FRONTEND_STATUS_TYPE_BANDWIDTH = 25; // 0x19 @@ -6111,6 +6115,9 @@ package android.media.tv.tuner.frontend { field public static final int FRONTEND_STATUS_TYPE_HIERARCHY = 19; // 0x13 field public static final int FRONTEND_STATUS_TYPE_INTERLEAVINGS = 30; // 0x1e field public static final int FRONTEND_STATUS_TYPE_ISDBT_SEGMENTS = 31; // 0x1f + field public static final int FRONTEND_STATUS_TYPE_IS_LINEAR = 35; // 0x23 + field public static final int FRONTEND_STATUS_TYPE_IS_MISO = 34; // 0x22 + field public static final int FRONTEND_STATUS_TYPE_IS_SHORT_FRAMES = 36; // 0x24 field public static final int FRONTEND_STATUS_TYPE_LAYER_ERROR = 16; // 0x10 field public static final int FRONTEND_STATUS_TYPE_LNA = 15; // 0xf field public static final int FRONTEND_STATUS_TYPE_LNB_VOLTAGE = 11; // 0xb @@ -6121,6 +6128,7 @@ package android.media.tv.tuner.frontend { field public static final int FRONTEND_STATUS_TYPE_PLP_ID = 12; // 0xc field public static final int FRONTEND_STATUS_TYPE_PRE_BER = 4; // 0x4 field public static final int FRONTEND_STATUS_TYPE_RF_LOCK = 20; // 0x14 + field public static final int FRONTEND_STATUS_TYPE_ROLL_OFF = 33; // 0x21 field public static final int FRONTEND_STATUS_TYPE_SIGNAL_QUALITY = 5; // 0x5 field public static final int FRONTEND_STATUS_TYPE_SIGNAL_STRENGTH = 6; // 0x6 field public static final int FRONTEND_STATUS_TYPE_SNR = 1; // 0x1 diff --git a/media/java/android/media/tv/tuner/frontend/FrontendStatus.java b/media/java/android/media/tv/tuner/frontend/FrontendStatus.java index dd9347cd6e5de..44bb2b1909ce6 100644 --- a/media/java/android/media/tv/tuner/frontend/FrontendStatus.java +++ b/media/java/android/media/tv/tuner/frontend/FrontendStatus.java @@ -50,7 +50,9 @@ public class FrontendStatus { FRONTEND_STATUS_TYPE_TRANSMISSION_MODE, FRONTEND_STATUS_TYPE_UEC, FRONTEND_STATUS_TYPE_T2_SYSTEM_ID, FRONTEND_STATUS_TYPE_INTERLEAVINGS, FRONTEND_STATUS_TYPE_ISDBT_SEGMENTS, FRONTEND_STATUS_TYPE_TS_DATA_RATES, - FRONTEND_STATUS_TYPE_MODULATIONS_EXT}) + FRONTEND_STATUS_TYPE_MODULATIONS_EXT, FRONTEND_STATUS_TYPE_ROLL_OFF, + FRONTEND_STATUS_TYPE_IS_MISO, FRONTEND_STATUS_TYPE_IS_LINEAR, + FRONTEND_STATUS_TYPE_IS_SHORT_FRAMES}) @Retention(RetentionPolicy.SOURCE) public @interface FrontendStatusType {} @@ -207,6 +209,26 @@ public class FrontendStatus { */ public static final int FRONTEND_STATUS_TYPE_MODULATIONS_EXT = android.hardware.tv.tuner.V1_1.Constants.FrontendStatusTypeExt1_1.MODULATIONS; + /** + * Roll Off Type status of the frontend. Only supported in Tuner HAL 1.1 or higher. + */ + public static final int FRONTEND_STATUS_TYPE_ROLL_OFF = + android.hardware.tv.tuner.V1_1.Constants.FrontendStatusTypeExt1_1.ROLL_OFF; + /** + * If the frontend currently supports MISO or not. Only supported in Tuner HAL 1.1 or higher. + */ + public static final int FRONTEND_STATUS_TYPE_IS_MISO = + android.hardware.tv.tuner.V1_1.Constants.FrontendStatusTypeExt1_1.IS_MISO; + /** + * If the frontend code rate is linear or not. Only supported in Tuner HAL 1.1 or higher. + */ + public static final int FRONTEND_STATUS_TYPE_IS_LINEAR = + android.hardware.tv.tuner.V1_1.Constants.FrontendStatusTypeExt1_1.IS_LINEAR; + /** + * If short frames is enabled or not. Only supported in Tuner HAL 1.1 or higher. + */ + public static final int FRONTEND_STATUS_TYPE_IS_SHORT_FRAMES = + android.hardware.tv.tuner.V1_1.Constants.FrontendStatusTypeExt1_1.IS_SHORT_FRAMES; /** @hide */ @IntDef(value = { @@ -378,6 +400,22 @@ public class FrontendStatus { @Retention(RetentionPolicy.SOURCE) public @interface FrontendGuardInterval {} + /** @hide */ + @IntDef(value = { + DvbsFrontendSettings.ROLLOFF_UNDEFINED, + DvbsFrontendSettings.ROLLOFF_0_35, + DvbsFrontendSettings.ROLLOFF_0_25, + DvbsFrontendSettings.ROLLOFF_0_20, + DvbsFrontendSettings.ROLLOFF_0_15, + DvbsFrontendSettings.ROLLOFF_0_10, + DvbsFrontendSettings.ROLLOFF_0_5, + Isdbs3FrontendSettings.ROLLOFF_UNDEFINED, + Isdbs3FrontendSettings.ROLLOFF_0_03, + IsdbsFrontendSettings.ROLLOFF_UNDEFINED, + IsdbsFrontendSettings.ROLLOFF_0_35}) + @Retention(RetentionPolicy.SOURCE) + public @interface FrontendRollOff {} + private Boolean mIsDemodLocked; private Integer mSnr; private Integer mBer; @@ -411,6 +449,10 @@ public class FrontendStatus { private int[] mTsDataRate; private int[] mIsdbtSegment; private int[] mModulationsExt; + private Integer mRollOff; + private Boolean mIsMisoEnabled; + private Boolean mIsLinear; + private Boolean mIsShortFrames; // Constructed and fields set by JNI code. @@ -809,6 +851,67 @@ public class FrontendStatus { return mModulationsExt; } + /** + * Gets roll off status. + * + *

This status query is only supported by Tuner HAL 1.1 or higher. Use + * {@link TunerVersionChecker.getTunerVersion()} to check the version. + */ + @FrontendRollOff + public int getRollOff() { + TunerVersionChecker.checkHigherOrEqualVersionTo( + TunerVersionChecker.TUNER_VERSION_1_1, "getRollOff status"); + if (mRollOff == null) { + throw new IllegalStateException(); + } + return mRollOff; + } + + /** + * Gets is MISO enabled status. + * + *

This status query is only supported by Tuner HAL 1.1 or higher. Use + * {@link TunerVersionChecker.getTunerVersion()} to check the version. + */ + public boolean isMisoEnabled() { + TunerVersionChecker.checkHigherOrEqualVersionTo( + TunerVersionChecker.TUNER_VERSION_1_1, "isMisoEnabled status"); + if (mIsMisoEnabled == null) { + throw new IllegalStateException(); + } + return mIsMisoEnabled; + } + + /** + * Gets is the Code Rate of the frontend is linear or not status. + * + *

This status query is only supported by Tuner HAL 1.1 or higher. Use + * {@link TunerVersionChecker.getTunerVersion()} to check the version. + */ + public boolean isLinear() { + TunerVersionChecker.checkHigherOrEqualVersionTo( + TunerVersionChecker.TUNER_VERSION_1_1, "isLinear status"); + if (mIsLinear == null) { + throw new IllegalStateException(); + } + return mIsLinear; + } + + /** + * Gets is the Short Frames enabled or not status. + * + *

This status query is only supported by Tuner HAL 1.1 or higher. Use + * {@link TunerVersionChecker.getTunerVersion()} to check the version. + */ + public boolean isShortFramesEnabled() { + TunerVersionChecker.checkHigherOrEqualVersionTo( + TunerVersionChecker.TUNER_VERSION_1_1, "isShortFramesEnabled status"); + if (mIsShortFrames == null) { + throw new IllegalStateException(); + } + return mIsShortFrames; + } + /** * Status for each tuning Physical Layer Pipes. */ diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index e5bce337d89d2..96cfc8956909d 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -155,6 +155,7 @@ using ::android::hardware::tv::tuner::V1_1::FrontendDtmbTransmissionMode; using ::android::hardware::tv::tuner::V1_1::FrontendGuardInterval; using ::android::hardware::tv::tuner::V1_1::FrontendInterleaveMode; using ::android::hardware::tv::tuner::V1_1::FrontendModulation; +using ::android::hardware::tv::tuner::V1_1::FrontendRollOff; using ::android::hardware::tv::tuner::V1_1::FrontendSpectralInversion; using ::android::hardware::tv::tuner::V1_1::FrontendStatusExt1_1; using ::android::hardware::tv::tuner::V1_1::FrontendStatusTypeExt1_1; @@ -2476,6 +2477,55 @@ jobject JTuner::getFrontendStatus(jintArray types) { env->SetObjectField(statusObj, field, valObj); break; } + case FrontendStatusExt1_1::hidl_discriminator::rollOff: { + jfieldID field = env->GetFieldID(clazz, "mRollOff", "Ljava/lang/Integer;"); + auto rollOff = s.rollOff(); + jint intRollOff; + bool valid = true; + switch(rollOff.getDiscriminator()) { + case FrontendRollOff::hidl_discriminator::dvbs: { + intRollOff = static_cast(rollOff.dvbs()); + break; + } + case FrontendRollOff::hidl_discriminator::isdbs: { + intRollOff = static_cast(rollOff.isdbs()); + break; + } + case FrontendRollOff::hidl_discriminator::isdbs3: { + intRollOff = static_cast(rollOff.isdbs3()); + break; + } + default: + valid = false; + break; + } + if (valid) { + jobject newIntegerObj = env->NewObject(intClazz, initInt, intRollOff); + env->SetObjectField(statusObj, field, newIntegerObj); + } + break; + } + case FrontendStatusExt1_1::hidl_discriminator::isMiso: { + jfieldID field = env->GetFieldID(clazz, "mIsMisoEnabled", "Ljava/lang/Boolean;"); + jobject newBooleanObj = env->NewObject( + booleanClazz, initBoolean, static_cast(s.isMiso())); + env->SetObjectField(statusObj, field, newBooleanObj); + break; + } + case FrontendStatusExt1_1::hidl_discriminator::isLinear: { + jfieldID field = env->GetFieldID(clazz, "mIsLinear", "Ljava/lang/Boolean;"); + jobject newBooleanObj = env->NewObject( + booleanClazz, initBoolean, static_cast(s.isLinear())); + env->SetObjectField(statusObj, field, newBooleanObj); + break; + } + case FrontendStatusExt1_1::hidl_discriminator::isShortFrames: { + jfieldID field = env->GetFieldID(clazz, "mIsShortFrames", "Ljava/lang/Boolean;"); + jobject newBooleanObj = env->NewObject( + booleanClazz, initBoolean, static_cast(s.isShortFrames())); + env->SetObjectField(statusObj, field, newBooleanObj); + break; + } default: { break; } @@ -2486,7 +2536,7 @@ jobject JTuner::getFrontendStatus(jintArray types) { bool JTuner::isV1_1ExtendedStatusType(int type) { return (type > static_cast(FrontendStatusType::ATSC3_PLP_INFO) - && type <= static_cast(FrontendStatusTypeExt1_1::TS_DATA_RATES)); + && type <= static_cast(FrontendStatusTypeExt1_1::IS_SHORT_FRAMES)); } jint JTuner::closeFrontend() {