Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 196b8c3e authored by Amy Zhang's avatar Amy Zhang
Browse files

Add new Frontend Status Types into Tuner Framework

Test: atest android.media.tv.tuner.cts
Bug: 169868608
Change-Id: I34c1ba30e66ea29aedd57631dbdf1573026f8e90
parent b17f8498
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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
+8 −0
Original line number Diff line number Diff line
@@ -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
+104 −1
Original line number Diff line number Diff line
@@ -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.
     *
     * <p>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.
     *
     * <p>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.
     *
     * <p>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.
     *
     * <p>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.
     */
+51 −1
Original line number Diff line number Diff line
@@ -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<jint>(rollOff.dvbs());
                        break;
                    }
                    case FrontendRollOff::hidl_discriminator::isdbs: {
                        intRollOff = static_cast<jint>(rollOff.isdbs());
                        break;
                    }
                    case FrontendRollOff::hidl_discriminator::isdbs3: {
                        intRollOff = static_cast<jint>(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<jboolean>(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<jboolean>(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<jboolean>(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<int>(FrontendStatusType::ATSC3_PLP_INFO)
                && type <= static_cast<int>(FrontendStatusTypeExt1_1::TS_DATA_RATES));
                && type <= static_cast<int>(FrontendStatusTypeExt1_1::IS_SHORT_FRAMES));
}

jint JTuner::closeFrontend() {