1 /* 2 * Copyright 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.media.tv.tuner.frontend; 18 19 import android.annotation.IntDef; 20 import android.annotation.IntRange; 21 import android.annotation.NonNull; 22 import android.annotation.SystemApi; 23 import android.hardware.tv.tuner.V1_0.Constants; 24 import android.media.tv.tuner.Tuner; 25 26 import java.lang.annotation.Retention; 27 import java.lang.annotation.RetentionPolicy; 28 29 /** 30 * Frontend settings for ISDBS. 31 * 32 * @hide 33 */ 34 @SystemApi 35 public class IsdbsFrontendSettings extends FrontendSettings { 36 /** @hide */ 37 @Retention(RetentionPolicy.SOURCE) 38 @IntDef(prefix = "STREAM_ID_TYPE_", 39 value = {STREAM_ID_TYPE_ID, STREAM_ID_TYPE_RELATIVE_NUMBER}) 40 public @interface StreamIdType {} 41 42 /** 43 * Uses stream ID. 44 */ 45 public static final int STREAM_ID_TYPE_ID = Constants.FrontendIsdbsStreamIdType.STREAM_ID; 46 /** 47 * Uses relative number. 48 */ 49 public static final int STREAM_ID_TYPE_RELATIVE_NUMBER = 50 Constants.FrontendIsdbsStreamIdType.RELATIVE_STREAM_NUMBER; 51 52 53 /** @hide */ 54 @IntDef(flag = true, 55 prefix = "MODULATION_", 56 value = {MODULATION_UNDEFINED, MODULATION_AUTO, MODULATION_MOD_BPSK, 57 MODULATION_MOD_QPSK, MODULATION_MOD_TC8PSK}) 58 @Retention(RetentionPolicy.SOURCE) 59 public @interface Modulation {} 60 61 /** 62 * Modulation undefined. 63 */ 64 public static final int MODULATION_UNDEFINED = Constants.FrontendIsdbsModulation.UNDEFINED; 65 /** 66 * Hardware is able to detect and set modulation automatically 67 */ 68 public static final int MODULATION_AUTO = Constants.FrontendIsdbsModulation.AUTO; 69 /** 70 * BPSK Modulation. 71 */ 72 public static final int MODULATION_MOD_BPSK = Constants.FrontendIsdbsModulation.MOD_BPSK; 73 /** 74 * QPSK Modulation. 75 */ 76 public static final int MODULATION_MOD_QPSK = Constants.FrontendIsdbsModulation.MOD_QPSK; 77 /** 78 * TC8PSK Modulation. 79 */ 80 public static final int MODULATION_MOD_TC8PSK = Constants.FrontendIsdbsModulation.MOD_TC8PSK; 81 82 83 /** @hide */ 84 @IntDef(flag = true, 85 prefix = "CODERATE_", 86 value = {CODERATE_UNDEFINED, CODERATE_AUTO, CODERATE_1_2, CODERATE_2_3, CODERATE_3_4, 87 CODERATE_5_6, CODERATE_7_8}) 88 @Retention(RetentionPolicy.SOURCE) 89 public @interface CodeRate {} 90 91 /** 92 * Code rate undefined. 93 */ 94 public static final int CODERATE_UNDEFINED = Constants.FrontendIsdbsCoderate.UNDEFINED; 95 /** 96 * Hardware is able to detect and set code rate automatically. 97 */ 98 public static final int CODERATE_AUTO = Constants.FrontendIsdbsCoderate.AUTO; 99 /** 100 * 1/2 code rate. 101 */ 102 public static final int CODERATE_1_2 = Constants.FrontendIsdbsCoderate.CODERATE_1_2; 103 /** 104 * 2/3 code rate. 105 */ 106 public static final int CODERATE_2_3 = Constants.FrontendIsdbsCoderate.CODERATE_2_3; 107 /** 108 * 3/4 code rate. 109 */ 110 public static final int CODERATE_3_4 = Constants.FrontendIsdbsCoderate.CODERATE_3_4; 111 /** 112 * 5/6 code rate. 113 */ 114 public static final int CODERATE_5_6 = Constants.FrontendIsdbsCoderate.CODERATE_5_6; 115 /** 116 * 7/8 code rate. 117 */ 118 public static final int CODERATE_7_8 = Constants.FrontendIsdbsCoderate.CODERATE_7_8; 119 120 /** @hide */ 121 @Retention(RetentionPolicy.SOURCE) 122 @IntDef(prefix = "ROLLOFF_", 123 value = {ROLLOFF_UNDEFINED, ROLLOFF_0_35}) 124 public @interface Rolloff {} 125 126 /** 127 * Rolloff type undefined. 128 */ 129 public static final int ROLLOFF_UNDEFINED = Constants.FrontendIsdbsRolloff.UNDEFINED; 130 /** 131 * 0,35 rolloff. 132 */ 133 public static final int ROLLOFF_0_35 = Constants.FrontendIsdbsRolloff.ROLLOFF_0_35; 134 135 136 private final int mStreamId; 137 private final int mStreamIdType; 138 private final int mModulation; 139 private final int mCodeRate; 140 private final int mSymbolRate; 141 private final int mRolloff; 142 IsdbsFrontendSettings(int frequency, int streamId, int streamIdType, int modulation, int codeRate, int symbolRate, int rolloff)143 private IsdbsFrontendSettings(int frequency, int streamId, int streamIdType, int modulation, 144 int codeRate, int symbolRate, int rolloff) { 145 super(frequency); 146 mStreamId = streamId; 147 mStreamIdType = streamIdType; 148 mModulation = modulation; 149 mCodeRate = codeRate; 150 mSymbolRate = symbolRate; 151 mRolloff = rolloff; 152 } 153 154 /** 155 * Gets Stream ID. 156 */ getStreamId()157 public int getStreamId() { 158 return mStreamId; 159 } 160 /** 161 * Gets Stream ID Type. 162 */ 163 @StreamIdType getStreamIdType()164 public int getStreamIdType() { 165 return mStreamIdType; 166 } 167 /** 168 * Gets Modulation. 169 */ 170 @Modulation getModulation()171 public int getModulation() { 172 return mModulation; 173 } 174 /** 175 * Gets Code rate. 176 */ 177 @CodeRate getCodeRate()178 public int getCodeRate() { 179 return mCodeRate; 180 } 181 /** 182 * Gets Symbol Rate in symbols per second. 183 */ getSymbolRate()184 public int getSymbolRate() { 185 return mSymbolRate; 186 } 187 /** 188 * Gets Roll off type. 189 */ 190 @Rolloff getRolloff()191 public int getRolloff() { 192 return mRolloff; 193 } 194 195 /** 196 * Creates a builder for {@link IsdbsFrontendSettings}. 197 */ 198 @NonNull builder()199 public static Builder builder() { 200 return new Builder(); 201 } 202 203 /** 204 * Builder for {@link IsdbsFrontendSettings}. 205 */ 206 public static class Builder { 207 private int mFrequency = 0; 208 private int mStreamId = Tuner.INVALID_STREAM_ID; 209 private int mStreamIdType = STREAM_ID_TYPE_ID; 210 private int mModulation = MODULATION_UNDEFINED; 211 private int mCodeRate = CODERATE_UNDEFINED; 212 private int mSymbolRate = 0; 213 private int mRolloff = ROLLOFF_UNDEFINED; 214 Builder()215 private Builder() { 216 } 217 218 /** 219 * Sets frequency in Hz. 220 * 221 * <p>Default value is 0. 222 */ 223 @NonNull 224 @IntRange(from = 1) setFrequency(int frequency)225 public Builder setFrequency(int frequency) { 226 mFrequency = frequency; 227 return this; 228 } 229 230 /** 231 * Sets Stream ID. 232 * 233 * <p>Default value is {@link Tuner#INVALID_STREAM_ID}. 234 */ 235 @NonNull setStreamId(int streamId)236 public Builder setStreamId(int streamId) { 237 mStreamId = streamId; 238 return this; 239 } 240 /** 241 * Sets StreamIdType. 242 * 243 * <p>Default value is {@link #STREAM_ID_TYPE_ID}. 244 */ 245 @NonNull setStreamIdType(@treamIdType int streamIdType)246 public Builder setStreamIdType(@StreamIdType int streamIdType) { 247 mStreamIdType = streamIdType; 248 return this; 249 } 250 /** 251 * Sets Modulation. 252 * 253 * <p>Default value is {@link #MODULATION_UNDEFINED}. 254 */ 255 @NonNull setModulation(@odulation int modulation)256 public Builder setModulation(@Modulation int modulation) { 257 mModulation = modulation; 258 return this; 259 } 260 /** 261 * Sets Code rate. 262 * 263 * <p>Default value is {@link #CODERATE_UNDEFINED}. 264 */ 265 @NonNull setCodeRate(@odeRate int codeRate)266 public Builder setCodeRate(@CodeRate int codeRate) { 267 mCodeRate = codeRate; 268 return this; 269 } 270 /** 271 * Sets Symbol Rate in symbols per second. 272 * 273 * <p>Default value is 0. 274 */ 275 @NonNull setSymbolRate(int symbolRate)276 public Builder setSymbolRate(int symbolRate) { 277 mSymbolRate = symbolRate; 278 return this; 279 } 280 /** 281 * Sets Roll off type. 282 * 283 * <p>Default value is {@link #ROLLOFF_UNDEFINED}. 284 */ 285 @NonNull setRolloff(@olloff int rolloff)286 public Builder setRolloff(@Rolloff int rolloff) { 287 mRolloff = rolloff; 288 return this; 289 } 290 291 /** 292 * Builds a {@link IsdbsFrontendSettings} object. 293 */ 294 @NonNull build()295 public IsdbsFrontendSettings build() { 296 return new IsdbsFrontendSettings(mFrequency, mStreamId, mStreamIdType, mModulation, 297 mCodeRate, mSymbolRate, mRolloff); 298 } 299 } 300 301 @Override getType()302 public int getType() { 303 return FrontendSettings.TYPE_ISDBS; 304 } 305 } 306