Merge "Tuner HAL for ATV Initialize Tuner HAL review from Tuner and Frontend Interface."

This commit is contained in:
Amy Zhang
2019-08-23 21:36:34 +00:00
committed by Gerrit Code Review
5 changed files with 330 additions and 0 deletions

20
tv/tuner/1.0/Android.bp Normal file
View File

@@ -0,0 +1,20 @@
// This file is autogenerated by hidl-gen -Landroidbp.
hidl_interface {
name: "android.hardware.tv.tuner@1.0",
root: "android.hardware",
vndk: {
enabled: true,
},
srcs: [
"types.hal",
"IFrontend.hal",
"IFrontendCallback.hal",
"ITuner.hal",
],
interfaces: [
"android.hidl.base@1.0",
],
gen_java: false,
gen_java_constants: true,
}

View File

@@ -0,0 +1,82 @@
/*
* Copyright (C) 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.hardware.tv.tuner@1.0;
import IFrontendCallback;
/**
* A Tuner Frontend is used to tune to a frequency and lock signal. It provide
* live data feed to Tuner Demux interface.
*/
interface IFrontend {
/**
* Set the callback
*
* It is used by the client to receive events from the Frontend.
* Only one callback for one Frontend instance is supported. The callback
* will be replaced if it's set again.
*
* @param callback Callback object to pass Frontend events to the system.
* The previously registered callback must be replaced with this one.
* It can be null.
* @return result Result status of the operation.
* SUCCESS if successful,
* INVALID_STATE if callback can't be set at current stage,
* UNKNOWN_ERROR if callback setting failed for other reasons.
*/
setCallback(IFrontendCallback callback) generates (Result result);
/**
* Tuning Frontend
*
* It is used by the client to lock a frequency by providing signal
* delivery information. If previous tuning isn't completed, this call must
* stop previous tuning, and start a new tuning. Tune is a async call.
* LOCKED or NO_SIGNAL eventi is sent back to caller through callback.
*
* @param settings Signal delivery information which frontend can use to
* search and lock the signal.
*
* @return result Result status of the operation.
* SUCCESS if successful,
* INVALID_STATE if tuning can't be applied at current stage,
* UNKNOWN_ERROR if tuning failed for other reasons.
*/
tune(FrontendSettings settings) generates (Result result);
/**
* Stop the tuning
*
* It is used by the client to stop a previous tuning.
*
* @return result Result status of the operation.
* SUCCESS if successfully stop tuning.
* UNKNOWN_ERROR if failed for other reasons.
*/
stopTune() generates (Result result);
/**
* Release the Frontend instance
*
* It is used by the client to release the frontend instance. HAL clear
* underneath resource. client mustn't access the instance any more.
*
* @return result Result status of the operation.
* SUCCESS if successful,
* UNKNOWN_ERROR if failed for other reasons.
*/
close() generates (Result result);
};

View File

@@ -0,0 +1,37 @@
/*
* Copyright (C) 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.hardware.tv.tuner@1.0;
interface IFrontendCallback {
/**
* Notify the client that a new event happened on the frontend.
*
* @param frontendEventType the event type.
*/
oneway onEvent(FrontendEventType frontendEventType);
/**
* The callback function that must be called by HAL implementation to notify
* the client of new DiSEqC message.
*
* @param diseqcMessage a byte array of data for DiSEqC (Digital Satellite
* Equipment Control) message which is specified by EUTELSAT Bus Functional
* Specification Version 4.2.
*/
oneway onDiseqcMessage(vec<uint8_t> diseqcMessage);
};

52
tv/tuner/1.0/ITuner.hal Normal file
View File

@@ -0,0 +1,52 @@
/*
* Copyright (C) 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.hardware.tv.tuner@1.0;
import IFrontend;
/**
* Top level interface to manage Frontend, Demux and Decrambler hardware
* resouces which are needed for Android TV.
*/
interface ITuner {
/**
* Get Frontend IDs
*
* It is used by the client to get all available frontends' IDs.
*
* @return result Result status of the operation.
* SUCCESS if successful,
* UNKNOWN_ERROR if tuning failed for other reasons.
* @return frontendIds an array of FrontendId for the available frontends.
*/
getFrontendIds() generates (Result result, vec<FrontendId> frontendIds);
/**
* Create a new instance of Frontend given a frontendId.
*
* It is used by the client to create a frontend instance.
*
* @return result Result status of the operation.
* SUCCESS if successful,
* UNKNOWN_ERROR if creation failed for other reasons.
* @return frontend the newly created frontend interface.
*/
openFrontendById(FrontendId frontendId)
generates (Result result, IFrontend frontend);
};

139
tv/tuner/1.0/types.hal Normal file
View File

@@ -0,0 +1,139 @@
/*
* Copyright (C) 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.hardware.tv.tuner@1.0;
import android.hidl.safe_union@1.0;
@export
enum Result : int32_t {
SUCCESS,
UNAVAILABLE,
NOT_INITIALIZED,
INVALID_STATE,
INVALID_ARGUMENT,
OUT_OF_MEMORY,
UNKNOWN_ERROR,
};
/**
* Frontend ID.
*/
typedef uint32_t FrontendId;
/**
* Frontend Types.
*/
@export
enum FrontendType : uint32_t {
UNDEFINED = 0,
ANALOG,
ATSC,
DVBC,
DVBS,
DVBT,
ISDBT,
};
/**
* Inner Forward Error Correction type as specified in ETSI EN 300 468 V1.15.1
* It's a 4-bit field specifying the inner FEC scheme used according to the
* table 35 in the spec.
*/
@export
enum FrontendInnerFec : uint32_t {
/* Not defined */
FEC_UNDEFINED = 0,
/* 1/2 conv. code rate */
FEC_1_2 = 1 << 0,
/* 2/3 conv. code rate */
FEC_2_3 = 1 << 1,
/* 3/4 conv. code rate */
FEC_3_4 = 1 << 2,
/* 5/6 conv. code rate */
FEC_5_6 = 1 << 3,
/* 7/8 conv. code rate */
FEC_7_8 = 1 << 4,
/* 8/9 conv. code rate */
FEC_8_9 = 1 << 5,
/* 3/5 conv. code rate */
FEC_3_5 = 1 << 6,
/* 4/5 conv. code rate */
FEC_4_5 = 1 << 7,
/* 9/10 conv. code rate */
FEC_9_10 = 1 << 8,
/* hardware is able to detect and set FEC automatically */
FEC_AUTO = 1 << 9,
};
/**
* Modulation Type for ATSC.
*/
@export
enum FrontendAtscModulation : uint32_t {
UNDEFINED = 0,
MOD_8VSB = 1 << 0,
MOD_16VSB = 1 << 1,
};
/**
* Signal Setting for ATSC Frontend.
*/
struct FrontendAtscSettings {
/** Signal frequencey in Herhz */
uint32_t frequency;
FrontendAtscModulation modulation;
};
/**
* Signal Setting for DVBT Frontend.
*/
struct FrontendDvbtSettings {
/** Signal frequencey in Herhz */
uint32_t frequency;
FrontendAtscModulation modulation;
FrontendInnerFec fec;
};
/**
* Modulation Type for ATSC.
*/
safe_union FrontendSettings {
FrontendAtscSettings atsc;
FrontendDvbtSettings dvbt;
};
/**
* Frontend Event Type.
*/
@export
enum FrontendEventType : uint32_t {
/**
* If frontend locked the signal which is specified by tune method, HAL sent
* Locked event.
*/
LOCKED,
/**
* If frontend can't locked the signal which is specified by tune method,
* HAL sent NO_SIGNAL event.
*/
NO_SIGNAL,
/**
* If frontend detect that the locked signal get lost, HAL sent LOST_LOCK
* event.
*/
LOST_LOCK,
};