blob: 5c057de7cfbe9b6dce97092591ba2234b1f29de4 [file] [log] [blame]
/*
* Copyright 2019 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.SystemApi;
import android.hardware.tv.tuner.V1_0.Constants;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Frontend settings for DVBT.
*
* @hide
*/
@SystemApi
public class DvbtFrontendSettings extends FrontendSettings {
/** @hide */
@IntDef(flag = true,
prefix = "TRANSMISSION_MODE_",
value = {TRANSMISSION_MODE_UNDEFINED, TRANSMISSION_MODE_AUTO,
TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K, TRANSMISSION_MODE_4K,
TRANSMISSION_MODE_1K, TRANSMISSION_MODE_16K, TRANSMISSION_MODE_32K})
@Retention(RetentionPolicy.SOURCE)
public @interface TransmissionMode {}
/**
* Transmission Mode undefined.
*/
public static final int TRANSMISSION_MODE_UNDEFINED =
Constants.FrontendDvbtTransmissionMode.UNDEFINED;
/**
* Hardware is able to detect and set Transmission Mode automatically
*/
public static final int TRANSMISSION_MODE_AUTO = Constants.FrontendDvbtTransmissionMode.AUTO;
/**
* 2K Transmission Mode.
*/
public static final int TRANSMISSION_MODE_2K = Constants.FrontendDvbtTransmissionMode.MODE_2K;
/**
* 8K Transmission Mode.
*/
public static final int TRANSMISSION_MODE_8K = Constants.FrontendDvbtTransmissionMode.MODE_8K;
/**
* 4K Transmission Mode.
*/
public static final int TRANSMISSION_MODE_4K = Constants.FrontendDvbtTransmissionMode.MODE_4K;
/**
* 1K Transmission Mode.
*/
public static final int TRANSMISSION_MODE_1K = Constants.FrontendDvbtTransmissionMode.MODE_1K;
/**
* 16K Transmission Mode.
*/
public static final int TRANSMISSION_MODE_16K = Constants.FrontendDvbtTransmissionMode.MODE_16K;
/**
* 32K Transmission Mode.
*/
public static final int TRANSMISSION_MODE_32K = Constants.FrontendDvbtTransmissionMode.MODE_32K;
/** @hide */
@IntDef(flag = true,
prefix = "BANDWIDTH_",
value = {BANDWIDTH_UNDEFINED, BANDWIDTH_AUTO, BANDWIDTH_8MHZ, BANDWIDTH_7MHZ,
BANDWIDTH_6MHZ, BANDWIDTH_5MHZ, BANDWIDTH_1_7MHZ, BANDWIDTH_10MHZ})
@Retention(RetentionPolicy.SOURCE)
public @interface Bandwidth {}
/**
* Bandwidth undefined.
*/
public static final int BANDWIDTH_UNDEFINED = Constants.FrontendDvbtBandwidth.UNDEFINED;
/**
* Hardware is able to detect and set Bandwidth automatically.
*/
public static final int BANDWIDTH_AUTO = Constants.FrontendDvbtBandwidth.AUTO;
/**
* 8 MHz bandwidth.
*/
public static final int BANDWIDTH_8MHZ = Constants.FrontendDvbtBandwidth.BANDWIDTH_8MHZ;
/**
* 7 MHz bandwidth.
*/
public static final int BANDWIDTH_7MHZ = Constants.FrontendDvbtBandwidth.BANDWIDTH_7MHZ;
/**
* 6 MHz bandwidth.
*/
public static final int BANDWIDTH_6MHZ = Constants.FrontendDvbtBandwidth.BANDWIDTH_6MHZ;
/**
* 5 MHz bandwidth.
*/
public static final int BANDWIDTH_5MHZ = Constants.FrontendDvbtBandwidth.BANDWIDTH_5MHZ;
/**
* 1,7 MHz bandwidth.
*/
public static final int BANDWIDTH_1_7MHZ = Constants.FrontendDvbtBandwidth.BANDWIDTH_1_7MHZ;
/**
* 10 MHz bandwidth.
*/
public static final int BANDWIDTH_10MHZ = Constants.FrontendDvbtBandwidth.BANDWIDTH_10MHZ;
/** @hide */
@IntDef(flag = true,
prefix = "CONSTELLATION_",
value = {CONSTELLATION_UNDEFINED, CONSTELLATION_AUTO, CONSTELLATION_QPSK,
CONSTELLATION_16QAM, CONSTELLATION_64QAM,
CONSTELLATION_256QAM})
@Retention(RetentionPolicy.SOURCE)
public @interface Constellation {}
/**
* Constellation not defined.
*/
public static final int CONSTELLATION_UNDEFINED = Constants.FrontendDvbtConstellation.UNDEFINED;
/**
* Hardware is able to detect and set Constellation automatically.
*/
public static final int CONSTELLATION_AUTO = Constants.FrontendDvbtConstellation.AUTO;
/**
* QPSK Constellation.
*/
public static final int CONSTELLATION_QPSK =
Constants.FrontendDvbtConstellation.CONSTELLATION_QPSK;
/**
* 16QAM Constellation.
*/
public static final int CONSTELLATION_16QAM =
Constants.FrontendDvbtConstellation.CONSTELLATION_16QAM;
/**
* 64QAM Constellation.
*/
public static final int CONSTELLATION_64QAM =
Constants.FrontendDvbtConstellation.CONSTELLATION_64QAM;
/**
* 256QAM Constellation.
*/
public static final int CONSTELLATION_256QAM =
Constants.FrontendDvbtConstellation.CONSTELLATION_256QAM;
/** @hide */
@IntDef(flag = true,
prefix = "HIERARCHY_",
value = {HIERARCHY_UNDEFINED, HIERARCHY_AUTO, HIERARCHY_NON_NATIVE, HIERARCHY_1_NATIVE,
HIERARCHY_2_NATIVE, HIERARCHY_4_NATIVE, HIERARCHY_NON_INDEPTH, HIERARCHY_1_INDEPTH,
HIERARCHY_2_INDEPTH, HIERARCHY_4_INDEPTH})
@Retention(RetentionPolicy.SOURCE)
public @interface Hierarchy {}
/**
* Hierarchy undefined.
*/
public static final int HIERARCHY_UNDEFINED = Constants.FrontendDvbtHierarchy.UNDEFINED;
/**
* Hardware is able to detect and set Hierarchy automatically.
*/
public static final int HIERARCHY_AUTO = Constants.FrontendDvbtHierarchy.AUTO;
/**
* Non-native Hierarchy
*/
public static final int HIERARCHY_NON_NATIVE =
Constants.FrontendDvbtHierarchy.HIERARCHY_NON_NATIVE;
/**
* 1-native Hierarchy
*/
public static final int HIERARCHY_1_NATIVE = Constants.FrontendDvbtHierarchy.HIERARCHY_1_NATIVE;
/**
* 2-native Hierarchy
*/
public static final int HIERARCHY_2_NATIVE = Constants.FrontendDvbtHierarchy.HIERARCHY_2_NATIVE;
/**
* 4-native Hierarchy
*/
public static final int HIERARCHY_4_NATIVE = Constants.FrontendDvbtHierarchy.HIERARCHY_4_NATIVE;
/**
* Non-indepth Hierarchy
*/
public static final int HIERARCHY_NON_INDEPTH =
Constants.FrontendDvbtHierarchy.HIERARCHY_NON_INDEPTH;
/**
* 1-indepth Hierarchy
*/
public static final int HIERARCHY_1_INDEPTH =
Constants.FrontendDvbtHierarchy.HIERARCHY_1_INDEPTH;
/**
* 2-indepth Hierarchy
*/
public static final int HIERARCHY_2_INDEPTH =
Constants.FrontendDvbtHierarchy.HIERARCHY_2_INDEPTH;
/**
* 4-indepth Hierarchy
*/
public static final int HIERARCHY_4_INDEPTH =
Constants.FrontendDvbtHierarchy.HIERARCHY_4_INDEPTH;
/** @hide */
@IntDef(flag = true,
prefix = "CODERATE_",
value = {CODERATE_UNDEFINED, CODERATE_AUTO, CODERATE_1_2, CODERATE_2_3, CODERATE_3_4,
CODERATE_5_6, CODERATE_7_8, CODERATE_3_5, CODERATE_4_5, CODERATE_6_7, CODERATE_8_9})
@Retention(RetentionPolicy.SOURCE)
public @interface CodeRate {}
/**
* Code rate undefined.
*/
public static final int CODERATE_UNDEFINED =
Constants.FrontendDvbtCoderate.UNDEFINED;
/**
* Hardware is able to detect and set code rate automatically.
*/
public static final int CODERATE_AUTO = Constants.FrontendDvbtCoderate.AUTO;
/**
* 1/2 code rate.
*/
public static final int CODERATE_1_2 = Constants.FrontendDvbtCoderate.CODERATE_1_2;
/**
* 2/3 code rate.
*/
public static final int CODERATE_2_3 = Constants.FrontendDvbtCoderate.CODERATE_2_3;
/**
* 3/4 code rate.
*/
public static final int CODERATE_3_4 = Constants.FrontendDvbtCoderate.CODERATE_3_4;
/**
* 5/6 code rate.
*/
public static final int CODERATE_5_6 = Constants.FrontendDvbtCoderate.CODERATE_5_6;
/**
* 7/8 code rate.
*/
public static final int CODERATE_7_8 = Constants.FrontendDvbtCoderate.CODERATE_7_8;
/**
* 4/5 code rate.
*/
public static final int CODERATE_3_5 = Constants.FrontendDvbtCoderate.CODERATE_3_5;
/**
* 4/5 code rate.
*/
public static final int CODERATE_4_5 = Constants.FrontendDvbtCoderate.CODERATE_4_5;
/**
* 6/7 code rate.
*/
public static final int CODERATE_6_7 = Constants.FrontendDvbtCoderate.CODERATE_6_7;
/**
* 8/9 code rate.
*/
public static final int CODERATE_8_9 = Constants.FrontendDvbtCoderate.CODERATE_8_9;
/** @hide */
@IntDef(flag = true,
prefix = "GUARD_INTERVAL_",
value = {GUARD_INTERVAL_UNDEFINED, GUARD_INTERVAL_AUTO,
GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16,
GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_4,
GUARD_INTERVAL_1_128,
GUARD_INTERVAL_19_128,
GUARD_INTERVAL_19_256})
@Retention(RetentionPolicy.SOURCE)
public @interface GuardInterval {}
/**
* Guard Interval undefined.
*/
public static final int GUARD_INTERVAL_UNDEFINED =
Constants.FrontendDvbtGuardInterval.UNDEFINED;
/**
* Hardware is able to detect and set Guard Interval automatically.
*/
public static final int GUARD_INTERVAL_AUTO = Constants.FrontendDvbtGuardInterval.AUTO;
/**
* 1/32 Guard Interval.
*/
public static final int GUARD_INTERVAL_1_32 =
Constants.FrontendDvbtGuardInterval.INTERVAL_1_32;
/**
* 1/16 Guard Interval.
*/
public static final int GUARD_INTERVAL_1_16 =
Constants.FrontendDvbtGuardInterval.INTERVAL_1_16;
/**
* 1/8 Guard Interval.
*/
public static final int GUARD_INTERVAL_1_8 =
Constants.FrontendDvbtGuardInterval.INTERVAL_1_8;
/**
* 1/4 Guard Interval.
*/
public static final int GUARD_INTERVAL_1_4 =
Constants.FrontendDvbtGuardInterval.INTERVAL_1_4;
/**
* 1/128 Guard Interval.
*/
public static final int GUARD_INTERVAL_1_128 =
Constants.FrontendDvbtGuardInterval.INTERVAL_1_128;
/**
* 19/128 Guard Interval.
*/
public static final int GUARD_INTERVAL_19_128 =
Constants.FrontendDvbtGuardInterval.INTERVAL_19_128;
/**
* 19/256 Guard Interval.
*/
public static final int GUARD_INTERVAL_19_256 =
Constants.FrontendDvbtGuardInterval.INTERVAL_19_256;
/** @hide */
@IntDef(flag = true,
prefix = "STANDARD",
value = {STANDARD_AUTO, STANDARD_T, STANDARD_T2}
)
@Retention(RetentionPolicy.SOURCE)
public @interface Standard {}
/**
* Hardware is able to detect and set Standard automatically.
*/
public static final int STANDARD_AUTO = Constants.FrontendDvbtStandard.AUTO;
/**
* T standard.
*/
public static final int STANDARD_T = Constants.FrontendDvbtStandard.T;
/**
* T2 standard.
*/
public static final int STANDARD_T2 = Constants.FrontendDvbtStandard.T2;
/** @hide */
@IntDef(prefix = "PLP_MODE_",
value = {PLP_MODE_UNDEFINED, PLP_MODE_AUTO, PLP_MODE_MANUAL})
@Retention(RetentionPolicy.SOURCE)
public @interface PlpMode {}
/**
* Physical Layer Pipe (PLP) Mode undefined.
*/
public static final int PLP_MODE_UNDEFINED = Constants.FrontendDvbtPlpMode.UNDEFINED;
/**
* Hardware is able to detect and set Physical Layer Pipe (PLP) Mode automatically.
*/
public static final int PLP_MODE_AUTO = Constants.FrontendDvbtPlpMode.AUTO;
/**
* Physical Layer Pipe (PLP) manual Mode.
*/
public static final int PLP_MODE_MANUAL = Constants.FrontendDvbtPlpMode.MANUAL;
private final int mTransmissionMode;
private final int mBandwidth;
private final int mConstellation;
private final int mHierarchy;
private final int mHpCodeRate;
private final int mLpCodeRate;
private final int mGuardInterval;
private final boolean mIsHighPriority;
private final int mStandard;
private final boolean mIsMiso;
private final int mPlpMode;
private final int mPlpId;
private final int mPlpGroupId;
private DvbtFrontendSettings(int frequency, int transmissionMode, int bandwidth,
int constellation, int hierarchy, int hpCodeRate, int lpCodeRate, int guardInterval,
boolean isHighPriority, int standard, boolean isMiso, int plpMode, int plpId,
int plpGroupId) {
super(frequency);
mTransmissionMode = transmissionMode;
mBandwidth = bandwidth;
mConstellation = constellation;
mHierarchy = hierarchy;
mHpCodeRate = hpCodeRate;
mLpCodeRate = lpCodeRate;
mGuardInterval = guardInterval;
mIsHighPriority = isHighPriority;
mStandard = standard;
mIsMiso = isMiso;
mPlpMode = plpMode;
mPlpId = plpId;
mPlpGroupId = plpGroupId;
}
/**
* Gets Transmission Mode.
*/
@TransmissionMode
public int getTransmissionMode() {
return mTransmissionMode;
}
/**
* Gets Bandwidth.
*/
@Bandwidth
public int getBandwidth() {
return mBandwidth;
}
/**
* Gets Constellation.
*/
@Constellation
public int getConstellation() {
return mConstellation;
}
/**
* Gets Hierarchy.
*/
@Hierarchy
public int getHierarchy() {
return mHierarchy;
}
/**
* Gets Code Rate for High Priority level.
*/
@CodeRate
public int getHighPriorityCodeRate() {
return mHpCodeRate;
}
/**
* Gets Code Rate for Low Priority level.
*/
@CodeRate
public int getLowPriorityCodeRate() {
return mLpCodeRate;
}
/**
* Gets Guard Interval.
*/
@GuardInterval
public int getGuardInterval() {
return mGuardInterval;
}
/**
* Checks whether it's high priority.
*/
public boolean isHighPriority() {
return mIsHighPriority;
}
/**
* Gets Standard.
*/
@Standard
public int getStandard() {
return mStandard;
}
/**
* Gets whether it's MISO.
*/
public boolean isMiso() {
return mIsMiso;
}
/**
* Gets Physical Layer Pipe (PLP) Mode.
*/
@PlpMode
public int getPlpMode() {
return mPlpMode;
}
/**
* Gets Physical Layer Pipe (PLP) ID.
*/
public int getPlpId() {
return mPlpId;
}
/**
* Gets Physical Layer Pipe (PLP) group ID.
*/
public int getPlpGroupId() {
return mPlpGroupId;
}
/**
* Creates a builder for {@link DvbtFrontendSettings}.
*/
@NonNull
public static Builder builder() {
return new Builder();
}
/**
* Builder for {@link DvbtFrontendSettings}.
*/
public static class Builder {
private int mFrequency = 0;
private int mTransmissionMode = TRANSMISSION_MODE_UNDEFINED;
private int mBandwidth = BANDWIDTH_UNDEFINED;
private int mConstellation = CONSTELLATION_UNDEFINED;
private int mHierarchy = HIERARCHY_UNDEFINED;
private int mHpCodeRate = CODERATE_UNDEFINED;
private int mLpCodeRate = CODERATE_UNDEFINED;
private int mGuardInterval = GUARD_INTERVAL_UNDEFINED;
private boolean mIsHighPriority = false;
private int mStandard = STANDARD_AUTO;
private boolean mIsMiso = false;
private int mPlpMode = PLP_MODE_UNDEFINED;
private int mPlpId = 0;
private int mPlpGroupId = 0;
private Builder() {
}
/**
* Sets frequency in Hz.
*
* <p>Default value is 0.
*/
@NonNull
@IntRange(from = 1)
public Builder setFrequency(int frequency) {
mFrequency = frequency;
return this;
}
/**
* Sets Transmission Mode.
*
* <p>Default value is {@link #TRANSMISSION_MODE_UNDEFINED}.
*/
@NonNull
public Builder setTransmissionMode(@TransmissionMode int transmissionMode) {
mTransmissionMode = transmissionMode;
return this;
}
/**
* Sets Bandwidth.
*
* <p>Default value is {@link #BANDWIDTH_UNDEFINED}.
*/
@NonNull
public Builder setBandwidth(@Bandwidth int bandwidth) {
mBandwidth = bandwidth;
return this;
}
/**
* Sets Constellation.
*
* <p>Default value is {@link #CONSTELLATION_UNDEFINED}.
*/
@NonNull
public Builder setConstellation(@Constellation int constellation) {
mConstellation = constellation;
return this;
}
/**
* Sets Hierarchy.
*
* <p>Default value is {@link #HIERARCHY_UNDEFINED}.
*/
@NonNull
public Builder setHierarchy(@Hierarchy int hierarchy) {
mHierarchy = hierarchy;
return this;
}
/**
* Sets Code Rate for High Priority level.
*
* <p>Default value is {@link #CODERATE_UNDEFINED}.
*/
@NonNull
public Builder setHighPriorityCodeRate(@CodeRate int hpCodeRate) {
mHpCodeRate = hpCodeRate;
return this;
}
/**
* Sets Code Rate for Low Priority level.
*
* <p>Default value is {@link #CODERATE_UNDEFINED}.
*/
@NonNull
public Builder setLowPriorityCodeRate(@CodeRate int lpCodeRate) {
mLpCodeRate = lpCodeRate;
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 whether it's high priority.
*
* <p>Default value is {@code false}.
*/
@NonNull
public Builder setHighPriority(boolean isHighPriority) {
mIsHighPriority = isHighPriority;
return this;
}
/**
* Sets Standard.
*
* <p>Default value is {@link #STANDARD_AUTO}.
*/
@NonNull
public Builder setStandard(@Standard int standard) {
mStandard = standard;
return this;
}
/**
* Sets whether it's MISO.
*
* <p>Default value is {@code false}.
*/
@NonNull
public Builder setMiso(boolean isMiso) {
mIsMiso = isMiso;
return this;
}
/**
* Sets Physical Layer Pipe (PLP) Mode.
*
* <p>Default value is {@link #PLP_MODE_UNDEFINED}.
*/
@NonNull
public Builder setPlpMode(@PlpMode int plpMode) {
mPlpMode = plpMode;
return this;
}
/**
* Sets Physical Layer Pipe (PLP) ID.
*
* <p>Default value is 0.
*/
@NonNull
public Builder setPlpId(int plpId) {
mPlpId = plpId;
return this;
}
/**
* Sets Physical Layer Pipe (PLP) group ID.
*
* <p>Default value is 0.
*/
@NonNull
public Builder setPlpGroupId(int plpGroupId) {
mPlpGroupId = plpGroupId;
return this;
}
/**
* Builds a {@link DvbtFrontendSettings} object.
*/
@NonNull
public DvbtFrontendSettings build() {
return new DvbtFrontendSettings(mFrequency, mTransmissionMode, mBandwidth,
mConstellation, mHierarchy, mHpCodeRate, mLpCodeRate, mGuardInterval,
mIsHighPriority, mStandard, mIsMiso, mPlpMode, mPlpId, mPlpGroupId);
}
}
@Override
public int getType() {
return FrontendSettings.TYPE_DVBT;
}
}