| /* |
| * 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; |
| |
| import android.annotation.IntDef; |
| import android.annotation.NonNull; |
| import android.annotation.Nullable; |
| import android.annotation.RequiresPermission; |
| import android.annotation.SystemApi; |
| import android.content.Context; |
| import android.hardware.tv.tuner.V1_0.Constants; |
| import android.media.tv.tuner.TunerConstants.Result; |
| |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.RetentionPolicy; |
| |
| /** |
| * LNB (low-noise block downconverter) for satellite tuner. |
| * |
| * A Tuner LNB (low-noise block downconverter) is used by satellite frontend to receive the |
| * microwave signal from the satellite, amplify it, and downconvert the frequency to a lower |
| * frequency. |
| * |
| * @hide |
| */ |
| @SystemApi |
| public class Lnb implements AutoCloseable { |
| /** @hide */ |
| @IntDef(prefix = "VOLTAGE_", |
| value = {VOLTAGE_NONE, VOLTAGE_5V, VOLTAGE_11V, VOLTAGE_12V, VOLTAGE_13V, VOLTAGE_14V, |
| VOLTAGE_15V, VOLTAGE_18V, VOLTAGE_19V}) |
| @Retention(RetentionPolicy.SOURCE) |
| public @interface Voltage {} |
| |
| /** |
| * LNB power voltage not set. |
| */ |
| public static final int VOLTAGE_NONE = Constants.LnbVoltage.NONE; |
| /** |
| * LNB power voltage 5V. |
| */ |
| public static final int VOLTAGE_5V = Constants.LnbVoltage.VOLTAGE_5V; |
| /** |
| * LNB power voltage 11V. |
| */ |
| public static final int VOLTAGE_11V = Constants.LnbVoltage.VOLTAGE_11V; |
| /** |
| * LNB power voltage 12V. |
| */ |
| public static final int VOLTAGE_12V = Constants.LnbVoltage.VOLTAGE_12V; |
| /** |
| * LNB power voltage 13V. |
| */ |
| public static final int VOLTAGE_13V = Constants.LnbVoltage.VOLTAGE_13V; |
| /** |
| * LNB power voltage 14V. |
| */ |
| public static final int VOLTAGE_14V = Constants.LnbVoltage.VOLTAGE_14V; |
| /** |
| * LNB power voltage 15V. |
| */ |
| public static final int VOLTAGE_15V = Constants.LnbVoltage.VOLTAGE_15V; |
| /** |
| * LNB power voltage 18V. |
| */ |
| public static final int VOLTAGE_18V = Constants.LnbVoltage.VOLTAGE_18V; |
| /** |
| * LNB power voltage 19V. |
| */ |
| public static final int VOLTAGE_19V = Constants.LnbVoltage.VOLTAGE_19V; |
| |
| /** @hide */ |
| @IntDef(prefix = "TONE_", |
| value = {TONE_NONE, TONE_CONTINUOUS}) |
| @Retention(RetentionPolicy.SOURCE) |
| public @interface Tone {} |
| |
| /** |
| * LNB tone mode not set. |
| */ |
| public static final int TONE_NONE = Constants.LnbTone.NONE; |
| /** |
| * LNB continuous tone mode. |
| */ |
| public static final int TONE_CONTINUOUS = Constants.LnbTone.CONTINUOUS; |
| |
| /** @hide */ |
| @IntDef(prefix = "POSITION_", |
| value = {POSITION_UNDEFINED, POSITION_A, POSITION_B}) |
| @Retention(RetentionPolicy.SOURCE) |
| public @interface Position {} |
| |
| /** |
| * LNB position is not defined. |
| */ |
| public static final int POSITION_UNDEFINED = Constants.LnbPosition.UNDEFINED; |
| /** |
| * Position A of two-band LNBs |
| */ |
| public static final int POSITION_A = Constants.LnbPosition.POSITION_A; |
| /** |
| * Position B of two-band LNBs |
| */ |
| public static final int POSITION_B = Constants.LnbPosition.POSITION_B; |
| |
| /** @hide */ |
| @Retention(RetentionPolicy.SOURCE) |
| @IntDef(prefix = "EVENT_TYPE_", |
| value = {EVENT_TYPE_DISEQC_RX_OVERFLOW, EVENT_TYPE_DISEQC_RX_TIMEOUT, |
| EVENT_TYPE_DISEQC_RX_PARITY_ERROR, EVENT_TYPE_LNB_OVERLOAD}) |
| public @interface EventType {} |
| |
| /** |
| * Outgoing Diseqc message overflow. |
| */ |
| public static final int EVENT_TYPE_DISEQC_RX_OVERFLOW = |
| Constants.LnbEventType.DISEQC_RX_OVERFLOW; |
| /** |
| * Outgoing Diseqc message isn't delivered on time. |
| */ |
| public static final int EVENT_TYPE_DISEQC_RX_TIMEOUT = |
| Constants.LnbEventType.DISEQC_RX_TIMEOUT; |
| /** |
| * Incoming Diseqc message has parity error. |
| */ |
| public static final int EVENT_TYPE_DISEQC_RX_PARITY_ERROR = |
| Constants.LnbEventType.DISEQC_RX_PARITY_ERROR; |
| /** |
| * LNB is overload. |
| */ |
| public static final int EVENT_TYPE_LNB_OVERLOAD = Constants.LnbEventType.LNB_OVERLOAD; |
| |
| int mId; |
| LnbCallback mCallback; |
| Context mContext; |
| |
| private native int nativeSetVoltage(int voltage); |
| private native int nativeSetTone(int tone); |
| private native int nativeSetSatellitePosition(int position); |
| private native int nativeSendDiseqcMessage(byte[] message); |
| private native int nativeClose(); |
| |
| private long mNativeContext; |
| |
| Lnb(int id) { |
| mId = id; |
| } |
| |
| void setCallback(@Nullable LnbCallback callback) { |
| mCallback = callback; |
| if (mCallback == null) { |
| return; |
| } |
| } |
| |
| /** |
| * Sets the LNB's power voltage. |
| * |
| * @param voltage the power voltage constant the Lnb to use. |
| * @return result status of the operation. |
| */ |
| @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) |
| @Result |
| public int setVoltage(@Voltage int voltage) { |
| TunerUtils.checkTunerPermission(mContext); |
| return nativeSetVoltage(voltage); |
| } |
| |
| /** |
| * Sets the LNB's tone mode. |
| * |
| * @param tone the tone mode the Lnb to use. |
| * @return result status of the operation. |
| */ |
| @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) |
| @Result |
| public int setTone(@Tone int tone) { |
| TunerUtils.checkTunerPermission(mContext); |
| return nativeSetTone(tone); |
| } |
| |
| /** |
| * Selects the LNB's position. |
| * |
| * @param position the position the Lnb to use. |
| * @return result status of the operation. |
| */ |
| @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) |
| @Result |
| public int setSatellitePosition(@Position int position) { |
| TunerUtils.checkTunerPermission(mContext); |
| return nativeSetSatellitePosition(position); |
| } |
| |
| /** |
| * Sends DiSEqC (Digital Satellite Equipment Control) message. |
| * |
| * The response message from the device comes back through callback onDiseqcMessage. |
| * |
| * @param message a byte array of data for DiSEqC message which is specified by EUTELSAT Bus |
| * Functional Specification Version 4.2. |
| * |
| * @return result status of the operation. |
| */ |
| @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) |
| @Result |
| public int sendDiseqcMessage(@NonNull byte[] message) { |
| TunerUtils.checkTunerPermission(mContext); |
| return nativeSendDiseqcMessage(message); |
| } |
| |
| /** |
| * Releases the LNB instance. |
| */ |
| @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) |
| public void close() { |
| TunerUtils.checkTunerPermission(mContext); |
| nativeClose(); |
| } |
| } |