blob: c1d08339c69067742306d0b0a9cc5bb0bfdb77f7 [file] [log] [blame]
/*
* 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.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Frontend settings for DTMB.
*
* <p>DTMB Frontend is only supported in Tuner HAL 1.1 or higher. Use {@link
* android.media.tv.tuner.TunerVersionChecker#getTunerVersion()} to get the version information.
*
* @hide
*/
@SystemApi
public final class DtmbFrontendSettings extends FrontendSettings {
/** @hide */
@IntDef(flag = true,
prefix = "BANDWIDTH_",
value = {BANDWIDTH_UNDEFINED, BANDWIDTH_AUTO, BANDWIDTH_6MHZ, BANDWIDTH_8MHZ})
@Retention(RetentionPolicy.SOURCE)
public @interface Bandwidth {}
/**
* Bandwidth not defined.
*/
public static final int BANDWIDTH_UNDEFINED =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbBandwidth.UNDEFINED;
/**
* Hardware is able to detect and set bandwidth automatically
*/
public static final int BANDWIDTH_AUTO =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbBandwidth.AUTO;
/**
* 6 MHz bandwidth.
*/
public static final int BANDWIDTH_6MHZ =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbBandwidth.BANDWIDTH_6MHZ;
/**
* 8 MHz bandwidth.
*/
public static final int BANDWIDTH_8MHZ =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbBandwidth.BANDWIDTH_8MHZ;
/** @hide */
@IntDef(flag = true,
prefix = "TIME_INTERLEAVE_MODE_",
value = {TIME_INTERLEAVE_MODE_UNDEFINED, TIME_INTERLEAVE_MODE_AUTO,
TIME_INTERLEAVE_MODE_TIMER_INT_240, TIME_INTERLEAVE_MODE_TIMER_INT_720})
@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.FrontendDtmbTimeInterleaveMode.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.FrontendDtmbTimeInterleaveMode.AUTO;
/**
* Time Interleave Mode timer int 240.
*/
public static final int TIME_INTERLEAVE_MODE_TIMER_INT_240 =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTimeInterleaveMode.TIMER_INT_240;
/**
* Time Interleave Mode timer int 720.
*/
public static final int TIME_INTERLEAVE_MODE_TIMER_INT_720 =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTimeInterleaveMode.TIMER_INT_720;
/** @hide */
@IntDef(flag = true,
prefix = "GUARD_INTERVAL_",
value = {GUARD_INTERVAL_UNDEFINED, GUARD_INTERVAL_AUTO,
GUARD_INTERVAL_PN_420_VARIOUS, GUARD_INTERVAL_PN_595_CONST,
GUARD_INTERVAL_PN_945_VARIOUS, GUARD_INTERVAL_PN_420_CONST,
GUARD_INTERVAL_PN_945_CONST, GUARD_INTERVAL_PN_RESERVED})
@Retention(RetentionPolicy.SOURCE)
public @interface GuardInterval {}
/**
* Guard Interval undefined.
*/
public static final int GUARD_INTERVAL_UNDEFINED =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.UNDEFINED;
/**
* Hardware is able to detect and set Guard Interval automatically.
*/
public static final int GUARD_INTERVAL_AUTO =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.AUTO;
/**
* PN_420_VARIOUS Guard Interval.
*/
public static final int GUARD_INTERVAL_PN_420_VARIOUS =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.PN_420_VARIOUS;
/**
* PN_595_CONST Guard Interval.
*/
public static final int GUARD_INTERVAL_PN_595_CONST =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.PN_595_CONST;
/**
* PN_945_VARIOUS Guard Interval.
*/
public static final int GUARD_INTERVAL_PN_945_VARIOUS =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.PN_945_VARIOUS;
/**
* PN_420_CONST Guard Interval.
*/
public static final int GUARD_INTERVAL_PN_420_CONST =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.PN_420_CONST;
/**
* PN_945_CONST Guard Interval.
*/
public static final int GUARD_INTERVAL_PN_945_CONST =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.PN_945_CONST;
/**
* PN_RESERVED Guard Interval.
*/
public static final int GUARD_INTERVAL_PN_RESERVED =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.PN_RESERVED;
/** @hide */
@IntDef(flag = true,
prefix = "MODULATION_",
value = {MODULATION_CONSTELLATION_UNDEFINED, MODULATION_CONSTELLATION_AUTO,
MODULATION_CONSTELLATION_4QAM, MODULATION_CONSTELLATION_4QAM_NR,
MODULATION_CONSTELLATION_16QAM, MODULATION_CONSTELLATION_32QAM,
MODULATION_CONSTELLATION_64QAM})
@Retention(RetentionPolicy.SOURCE)
public @interface Modulation {}
/**
* Constellation not defined.
*/
public static final int MODULATION_CONSTELLATION_UNDEFINED =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.UNDEFINED;
/**
* Hardware is able to detect and set Constellation automatically.
*/
public static final int MODULATION_CONSTELLATION_AUTO =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.AUTO;
/**
* 4QAM Constellation.
*/
public static final int MODULATION_CONSTELLATION_4QAM =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.CONSTELLATION_4QAM;
/**
* 4QAM_NR Constellation.
*/
public static final int MODULATION_CONSTELLATION_4QAM_NR =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.CONSTELLATION_4QAM_NR;
/**
* 16QAM Constellation.
*/
public static final int MODULATION_CONSTELLATION_16QAM =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.CONSTELLATION_16QAM;
/**
* 32QAM Constellation.
*/
public static final int MODULATION_CONSTELLATION_32QAM =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.CONSTELLATION_32QAM;
/**
* 64QAM Constellation.
*/
public static final int MODULATION_CONSTELLATION_64QAM =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.CONSTELLATION_64QAM;
/** @hide */
@IntDef(flag = true,
prefix = "CODERATE_",
value = {CODERATE_UNDEFINED, CODERATE_AUTO, CODERATE_2_5, CODERATE_3_5, CODERATE_4_5})
@Retention(RetentionPolicy.SOURCE)
public @interface CodeRate {}
/**
* Code rate undefined.
*/
public static final int CODERATE_UNDEFINED =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbCodeRate.UNDEFINED;
/**
* Hardware is able to detect and set code rate automatically.
*/
public static final int CODERATE_AUTO =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbCodeRate.AUTO;
/**
* 2/5 code rate.
*/
public static final int CODERATE_2_5 =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbCodeRate.CODERATE_2_5;
/**
* 3/5 code rate.
*/
public static final int CODERATE_3_5 =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbCodeRate.CODERATE_3_5;
/**
* 4/5 code rate.
*/
public static final int CODERATE_4_5 =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbCodeRate.CODERATE_4_5;
/** @hide */
@IntDef(flag = true,
prefix = "TRANSMISSION_MODE_",
value = {TRANSMISSION_MODE_UNDEFINED, TRANSMISSION_MODE_AUTO,
TRANSMISSION_MODE_C1, TRANSMISSION_MODE_C3780})
@Retention(RetentionPolicy.SOURCE)
public @interface TransmissionMode {}
/**
* Transmission Mode undefined.
*/
public static final int TRANSMISSION_MODE_UNDEFINED =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTransmissionMode.UNDEFINED;
/**
* Hardware is able to detect and set Transmission Mode automatically
*/
public static final int TRANSMISSION_MODE_AUTO =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTransmissionMode.AUTO;
/**
* C1 Transmission Mode.
*/
public static final int TRANSMISSION_MODE_C1 =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTransmissionMode.C1;
/**
* C3780 Transmission Mode.
*/
public static final int TRANSMISSION_MODE_C3780 =
android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTransmissionMode.C3780;
private final int mModulation;
private final int mCodeRate;
private final int mTransmissionMode;
private final int mBandwidth;
private final int mGuardInterval;
private final int mTimeInterleaveMode;
private DtmbFrontendSettings(int frequency, int modulation, int codeRate, int transmissionMode,
int guardInterval, int timeInterleaveMode, int bandwidth) {
super(frequency);
mModulation = modulation;
mCodeRate = codeRate;
mTransmissionMode = transmissionMode;
mGuardInterval = guardInterval;
mTimeInterleaveMode = timeInterleaveMode;
mBandwidth = bandwidth;
}
/**
* Gets Modulation.
*/
@Modulation
public int getModulation() {
return mModulation;
}
/**
* Gets Code Rate.
*/
@Modulation
public int getCodeRate() {
return mCodeRate;
}
/**
* Gets Transmission Mode.
*/
@Modulation
public int getTransmissionMode() {
return mTransmissionMode;
}
/**
* Gets Bandwidth.
*/
@Modulation
public int getBandwidth() {
return mBandwidth;
}
/**
* Gets Time Interleave Mode.
*/
@Modulation
public int getTimeInterleaveMode() {
return mTimeInterleaveMode;
}
/**
* Gets Guard Interval.
*/
@Modulation
public int getGuardInterval() {
return mGuardInterval;
}
/**
* Creates a builder for {@link AtscFrontendSettings}.
*/
@NonNull
public static Builder builder() {
return new Builder();
}
/**
* Builder for {@link AtscFrontendSettings}.
*/
public static final class Builder {
private int mFrequency = 0;
private int mModulation = MODULATION_CONSTELLATION_UNDEFINED;
private int mCodeRate = CODERATE_UNDEFINED;
private int mTransmissionMode = TRANSMISSION_MODE_UNDEFINED;
private int mBandwidth = BANDWIDTH_UNDEFINED;
private int mTimeInterleaveMode = TIME_INTERLEAVE_MODE_UNDEFINED;
private int mGuardInterval = GUARD_INTERVAL_UNDEFINED;
private Builder() {
}
/**
* Sets frequency in Hz.
*
* <p>Default value is 0.
*/
@NonNull
@IntRange(from = 1)
@SuppressLint("MissingGetterMatchingBuilder")
public Builder setFrequency(int frequency) {
mFrequency = frequency;
return this;
}
/**
* Sets Modulation.
*
* <p>Default value is {@link #MODULATION_CONSTELLATION_UNDEFINED}.
*/
@NonNull
public Builder setModulation(@Modulation int modulation) {
mModulation = modulation;
return this;
}
/**
* Sets Code Rate.
*
* <p>Default value is {@link #CODERATE_UNDEFINED}.
*/
@NonNull
public Builder setCodeRate(@CodeRate int codeRate) {
mCodeRate = codeRate;
return this;
}
/**
* Sets Bandwidth.
*
* <p>Default value is {@link #BANDWIDTH_UNDEFINED}.
*/
@NonNull
public Builder setBandwidth(@Bandwidth int bandwidth) {
mBandwidth = bandwidth;
return this;
}
/**
* Sets Time Interleave Mode.
*
* <p>Default value is {@link #TIME_INTERLEAVE_MODE_UNDEFINED}.
*/
@NonNull
public Builder setTimeInterleaveMode(@TimeInterleaveMode int timeInterleaveMode) {
mTimeInterleaveMode = timeInterleaveMode;
return this;
}
/**
* Sets Guard Interval.
*
* <p>Default value is {@link #GUARD_INTERVAL_UNDEFINED}.
*/
@NonNull
public Builder setGuardInterval(@GuardInterval int guardInterval) {
mGuardInterval = guardInterval;
return this;
}
/**
* Sets Transmission Mode.
*
* <p>Default value is {@link #TRANSMISSION_MODE_UNDEFINED}.
*/
@NonNull
public Builder setTransmissionMode(@TransmissionMode int transmissionMode) {
mTransmissionMode = transmissionMode;
return this;
}
/**
* Builds a {@link DtmbFrontendSettings} object.
*/
@NonNull
public DtmbFrontendSettings build() {
return new DtmbFrontendSettings(mFrequency, mModulation, mCodeRate,
mTransmissionMode, mGuardInterval, mTimeInterleaveMode, mBandwidth);
}
}
@Override
public int getType() {
return FrontendSettings.TYPE_DTMB;
}
}