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

Commit 3dc7efaf authored by Amy Zhang's avatar Amy Zhang
Browse files

Add DTMB Frontend Type, Settings and Capabilities.

DTMB is only supported in Tuner HAL 1.1 or higher.
Tuner framework does version check to make sure enought support from HAL
implementation.

Tuner.tune and Tuner.scan with DTMB settings running on Tuner HAL 1.0
implementation would be no-op.

Test: atest android.media.tv.tuner.cts
Bug: 159064654
Change-Id: Ic2f759cc92fee75ae94b72e233fd6c4448359a67
parent ae00abf8
Loading
Loading
Loading
Loading
+64 −0
Original line number Diff line number Diff line
@@ -5659,6 +5659,69 @@ package android.media.tv.tuner.frontend {
    method @NonNull public android.media.tv.tuner.frontend.AtscFrontendSettings.Builder setModulation(int);
  }
  public class DtmbFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
    method public int getBandwidthCapability();
    method public int getCodeRateCapability();
    method public int getGuardIntervalCapability();
    method public int getModulationCapability();
    method public int getTimeInterleaveModeCapability();
    method public int getTransmissionModeCapability();
  }
  public class DtmbFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
    method @NonNull public static android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder builder();
    method public int getBandwidth();
    method public int getCodeRate();
    method public int getGuardInterval();
    method public int getModulation();
    method public int getTimeInterleaveMode();
    method public int getTransmissionMode();
    method public int getType();
    field public static final int BANDWIDTH_6MHZ = 4; // 0x4
    field public static final int BANDWIDTH_8MHZ = 2; // 0x2
    field public static final int BANDWIDTH_AUTO = 1; // 0x1
    field public static final int BANDWIDTH_UNDEFINED = 0; // 0x0
    field public static final int CODERATE_2_5 = 2; // 0x2
    field public static final int CODERATE_3_5 = 4; // 0x4
    field public static final int CODERATE_4_5 = 8; // 0x8
    field public static final int CODERATE_AUTO = 1; // 0x1
    field public static final int CODERATE_UNDEFINED = 0; // 0x0
    field public static final int GUARD_INTERVAL_AUTO = 1; // 0x1
    field public static final int GUARD_INTERVAL_PN_420_CONST = 16; // 0x10
    field public static final int GUARD_INTERVAL_PN_420_VARIOUS = 2; // 0x2
    field public static final int GUARD_INTERVAL_PN_595_CONST = 4; // 0x4
    field public static final int GUARD_INTERVAL_PN_945_CONST = 32; // 0x20
    field public static final int GUARD_INTERVAL_PN_945_VARIOUS = 8; // 0x8
    field public static final int GUARD_INTERVAL_PN_RESERVED = 64; // 0x40
    field public static final int GUARD_INTERVAL_UNDEFINED = 0; // 0x0
    field public static final int MODULATION_CONSTELLATION_16QAM = 8; // 0x8
    field public static final int MODULATION_CONSTELLATION_32QAM = 16; // 0x10
    field public static final int MODULATION_CONSTELLATION_4QAM = 2; // 0x2
    field public static final int MODULATION_CONSTELLATION_4QAM_NR = 4; // 0x4
    field public static final int MODULATION_CONSTELLATION_64QAM = 32; // 0x20
    field public static final int MODULATION_CONSTELLATION_AUTO = 1; // 0x1
    field public static final int MODULATION_CONSTELLATION_UNDEFINED = 0; // 0x0
    field public static final int TIME_INTERLEAVE_MODE_AUTO = 1; // 0x1
    field public static final int TIME_INTERLEAVE_MODE_TIMER_INT_240 = 2; // 0x2
    field public static final int TIME_INTERLEAVE_MODE_TIMER_INT_720 = 4; // 0x4
    field public static final int TIME_INTERLEAVE_MODE_UNDEFINED = 0; // 0x0
    field public static final int TRANSMISSION_MODE_AUTO = 1; // 0x1
    field public static final int TRANSMISSION_MODE_C1 = 2; // 0x2
    field public static final int TRANSMISSION_MODE_C3780 = 4; // 0x4
    field public static final int TRANSMISSION_MODE_UNDEFINED = 0; // 0x0
  }
  public static final class DtmbFrontendSettings.Builder {
    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings build();
    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setBandwidth(int);
    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setCodeRate(int);
    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setFrequency(int);
    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setGuardInterval(int);
    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setModulation(int);
    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setTimeInterleaveMode(int);
    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setTransmissionMode(int);
  }
  public class DvbcFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
    method public int getAnnexCapability();
    method public int getFecCapability();
@@ -5982,6 +6045,7 @@ package android.media.tv.tuner.frontend {
    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
    field public static final int TYPE_DTMB = 10; // 0xa
    field public static final int TYPE_DVBC = 4; // 0x4
    field public static final int TYPE_DVBS = 5; // 0x5
    field public static final int TYPE_DVBT = 6; // 0x6
+20 −0
Original line number Diff line number Diff line
@@ -623,6 +623,10 @@ public class Tuner implements AutoCloseable {
     * OnTuneEventListener#SIGNAL_NO_SIGNAL} events sent to the {@link OnTuneEventListener}
     * specified in {@link #setOnTuneEventListener(Executor, OnTuneEventListener)}.
     *
     * <p>Tuning with {@link android.media.tv.tuner.frontend.DtmbFrontendSettings} is only
     * supported in Tuner 1.1 or higher version. Unsupported version will cause no-op. Use {@link
     * TunerVersionChecker.getTunerVersion()} to get the version information.
     *
     * @param settings Signal delivery information the frontend uses to
     *                 search and lock the signal.
     * @return result status of tune operation.
@@ -633,6 +637,12 @@ public class Tuner implements AutoCloseable {
    public int tune(@NonNull FrontendSettings settings) {
        Log.d(TAG, "Tune to " + settings.getFrequency());
        mFrontendType = settings.getType();
        if (mFrontendType == FrontendSettings.TYPE_DTMB) {
            if (!TunerVersionChecker.checkHigherOrEqualVersionTo(
                    TunerVersionChecker.TUNER_VERSION_1_1, "Tuner with DTMB Frontend")) {
                return RESULT_UNAVAILABLE;
            }
        }
        if (checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND)) {
            mFrontendInfo = null;
            Log.d(TAG, "Write Stats Log for tuning.");
@@ -662,6 +672,10 @@ public class Tuner implements AutoCloseable {
     *
     * <p>Details for channels found are returned via {@link ScanCallback}.
     *
     * <p>Scanning with {@link android.media.tv.tuner.frontend.DtmbFrontendSettings} is only
     * supported in Tuner 1.1 or higher version. Unsupported version will cause no-op. Use {@link
     * TunerVersionChecker.getTunerVersion()} to get the version information.
     *
     * @param settings A {@link FrontendSettings} to configure the frontend.
     * @param scanType The scan type.
     * @throws SecurityException     if the caller does not have appropriate permissions.
@@ -677,6 +691,12 @@ public class Tuner implements AutoCloseable {
                            + "started.");
        }
        mFrontendType = settings.getType();
        if (mFrontendType == FrontendSettings.TYPE_DTMB) {
            if (!TunerVersionChecker.checkHigherOrEqualVersionTo(
                    TunerVersionChecker.TUNER_VERSION_1_1, "Scan with DTMB Frontend")) {
                return RESULT_UNAVAILABLE;
            }
        }
        if (checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND)) {
            mScanCallback = scanCallback;
            mScanCallbackExecutor = executor;
+114 −0
Original line number Diff line number Diff line
/*
 * Copyright 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.media.tv.tuner.frontend;

import android.annotation.SystemApi;

/**
 * DTMB Capabilities.
 *
 * <p>DTMB Frontend is only supported in Tuner HAL 1.1 or higher.
 * @hide
 */
@SystemApi
public class DtmbFrontendCapabilities extends FrontendCapabilities {
    private final int mModulationCap;
    private final int mTransmissionModeCap;
    private final int mGuardIntervalCap;
    private final int mTimeInterleaveModeCap;
    private final int mCodeRateCap;
    private final int mBandwidthCap;

    private DtmbFrontendCapabilities(int modulationCap, int transmissionModeCap,
            int guardIntervalCap, int timeInterleaveModeCap, int codeRateCap, int bandwidthCap) {
        mModulationCap = modulationCap;
        mTransmissionModeCap = transmissionModeCap;
        mGuardIntervalCap = guardIntervalCap;
        mTimeInterleaveModeCap = timeInterleaveModeCap;
        mCodeRateCap = codeRateCap;
        mBandwidthCap = bandwidthCap;
    }

    /**
     * Gets modulation capability.
     *
     * @return full modulation capabilies. If the caps bitwise AND with any value from
     * bit masks {@link DtmbFrontendSettings.Modulation} is true, then that modulation is supported.
     */
    @DtmbFrontendSettings.Modulation
    public int getModulationCapability() {
        return mModulationCap;
    }

    /**
     * Gets Transmission Mode capability.
     *
     * @return full Transmission Mode capabilies. If the caps bitwise AND with any value from
     * bit masks {@link DtmbFrontendSettings.TransmissionMode} is true, then that transmission mode
     * is supported.
     */
    @DtmbFrontendSettings.TransmissionMode
    public int getTransmissionModeCapability() {
        return mTransmissionModeCap;
    }

    /**
     * Gets Guard Interval capability.
     *
     * @return full Guard Interval capabilies. If the caps bitwise AND with any value from
     * bit masks {@link DtmbFrontendSettings.GuardInterval} is true, then that Guard Interval is
     * supported.
     */
    @DtmbFrontendSettings.GuardInterval
    public int getGuardIntervalCapability() {
        return mGuardIntervalCap;
    }

    /**
     * Gets Time Interleave Mode capability.
     *
     * @return full Time Interleave Mode capabilies. If the caps bitwise AND with any value from
     * bit masks {@link DtmbFrontendSettings.TimeInterleaveMode} is true, then that Time Interleave
     * Mode is supported.
     */
    @DtmbFrontendSettings.TimeInterleaveMode
    public int getTimeInterleaveModeCapability() {
        return mTimeInterleaveModeCap;
    }

    /**
     * Gets Code Rate capability.
     *
     * @return full Code Rate capabilies. If the caps bitwise AND with any value from
     * bit masks {@link DtmbFrontendSettings.CodeRate} is true, then that Code Rate is supported.
     */
    @DtmbFrontendSettings.CodeRate
    public int getCodeRateCapability() {
        return mCodeRateCap;
    }

    /**
     * Gets Bandwidth capability.
     *
     * @return full Bandwidth capabilies. If the caps bitwise AND with any value from
     * bit masks {@link DtmbFrontendSettings.Bandwidth} is true, then that Bandwidth is supported.
     */
    @DtmbFrontendSettings.Bandwidth
    public int getBandwidthCapability() {
        return mBandwidthCap;
    }
}
+441 −0

File added.

Preview size limit exceeded, changes collapsed.

+5 −2
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ public abstract class FrontendSettings {
    /** @hide */
    @IntDef(prefix = "TYPE_",
            value = {TYPE_UNDEFINED, TYPE_ANALOG, TYPE_ATSC, TYPE_ATSC3, TYPE_DVBC, TYPE_DVBS,
                    TYPE_DVBT, TYPE_ISDBS, TYPE_ISDBS3, TYPE_ISDBT})
                    TYPE_DVBT, TYPE_ISDBS, TYPE_ISDBS3, TYPE_ISDBT, TYPE_DTMB})
    @Retention(RetentionPolicy.SOURCE)
    public @interface Type {}

@@ -81,7 +81,10 @@ public abstract class FrontendSettings {
     * Integrated Services Digital Broadcasting-Terrestrial (ISDB-T) frontend type.
     */
    public static final int TYPE_ISDBT = Constants.FrontendType.ISDBT;

    /**
     * Digital Terrestrial Multimedia Broadcast standard (DTMB) frontend type.
     */
    public static final int TYPE_DTMB = android.hardware.tv.tuner.V1_1.Constants.FrontendType.DTMB;


    /** @hide */
Loading