1213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk/*
2213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk * Copyright (C) 2017 The Android Open Source Project
3213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk *
4213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk * Licensed under the Apache License, Version 2.0 (the "License");
5213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk * you may not use this file except in compliance with the License.
6213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk * You may obtain a copy of the License at
7213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk *
8213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk *      http://www.apache.org/licenses/LICENSE-2.0
9213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk *
10213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk * Unless required by applicable law or agreed to in writing, software
11213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk * distributed under the License is distributed on an "AS IS" BASIS,
12213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk * See the License for the specific language governing permissions and
14213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk * limitations under the License.
15213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk */
16213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk
17213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczykpackage android.hardware.broadcastradio@1.1;
18213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk
19213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczykimport @1.0::ITuner;
20213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk
21213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczykinterface ITuner extends @1.0::ITuner {
222dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk
232dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk    /**
24a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     * Tune to a specified program.
25a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     *
26a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     * For AM/FM, it must be called when a valid configuration has been applied.
27a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     * Automatically cancels pending scan, step or tune.
28a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     *
29a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     * If method returns OK, ITunerCallback.tuneComplete_1_1() MUST be called:
30a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     * - once successfully tuned;
31a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     * - after a time out;
32a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     * - after a full band scan, if no station found.
33a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     *
34a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     * The tuned field of ProgramInfo should indicate if tuned to a valid
35a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     * station or not.
36a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     *
37a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     * @param program Program to tune to.
38a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     * @return result OK if successfully started tunning.
39a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     *                INVALID_ARGUMENTS if invalid arguments are passed.
40a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     *                NOT_INITIALIZED if another error occurs.
41a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk     */
42b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk    tuneByProgramSelector(ProgramSelector program) generates (Result result);
43a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk
44a02b6ef23c6dd0405ceb1337ba05bf4e0087890cTomasz Wasilczyk    /**
4524180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     * Cancels announcement.
4624180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     *
4724180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     * If it was traffic announcement, trafficAnnouncement(false) callback
4824180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     * should be called (just like it was ended in a normal way). Similarly for
4924180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     * emergency announcement. If there was no announcement, then no action
5024180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     * should be taken.
5124180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     *
5224180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     * There is a race condition between calling cancelAnnouncement and the
5324180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     * actual announcement being finished, so trafficAnnouncement /
5424180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     * emergencyAnnouncement callback should be tracked with proper locking.
5524180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     *
5624180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     * @return result OK if successfully cancelled announcement or there was
5724180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     *                no announcement.
5824180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     *                NOT_INITIALIZED if another error occurs.
5924180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk     */
6024180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk    cancelAnnouncement() generates (Result result);
6124180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk
6224180098d71d29cd838f6f3cb0e474c06ba04842Tomasz Wasilczyk    /**
63213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk     * Retrieve current station information.
64213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk     * @return result OK if scan successfully started
65213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk     *                NOT_INITIALIZED if another error occurs
66213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk     * @return info Current program information.
67213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk     */
68803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk    getProgramInformation_1_1() generates (Result result, ProgramInfo info);
69803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk
70803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk    /**
71803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     * Initiates a background scan to update internally cached program list.
72803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     *
73803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     * HAL client may not need to initiate the scan explicitly with this call,
74803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     * ie. HAL implementation MAY perform the scan on boot. It's a common
75803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     * practice in devices with two physical tuners with background scanning.
76803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     *
77803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     * Device must call backgroundScanComplete if the result is OK, even if the
78803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     * scan fails later (it must pass proper result through the callback).
79803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     * Otherwise, backgroundScanComplete must not be called as a result of this
80803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     * certain attempt. It may still be called as a response to another call to
81803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     * startBackgroundScan, former or latter.
82803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     *
83803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     * Device may utilize an already running (but not finished) scan for
84803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     * subsequent calls to startBackgroundScan, issuing a single
85803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     * backgroundScanComplete callback.
86803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     *
87614ffc163a8dfbd9f0ef37a7a27b7c8d52265004Tomasz Wasilczyk     * If a device supports continuous background scanning, it may succeed
88614ffc163a8dfbd9f0ef37a7a27b7c8d52265004Tomasz Wasilczyk     * (return OK and call backgroundScanComplete) without any additional
89614ffc163a8dfbd9f0ef37a7a27b7c8d52265004Tomasz Wasilczyk     * operation performed.
90614ffc163a8dfbd9f0ef37a7a27b7c8d52265004Tomasz Wasilczyk     *
91614ffc163a8dfbd9f0ef37a7a27b7c8d52265004Tomasz Wasilczyk     * Foreground scanning may be implemented in the front end app with
92614ffc163a8dfbd9f0ef37a7a27b7c8d52265004Tomasz Wasilczyk     * @1.0::ITuner scan operation.
93614ffc163a8dfbd9f0ef37a7a27b7c8d52265004Tomasz Wasilczyk     *
94803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     * @return result OK if the scan was properly scheduled (this does not mean
95803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     *                it successfully finished).
9622e5f17eec0874677eec65b9d514e540c1fc70bdTomasz Wasilczyk     *                UNAVAILABLE if the background scan is unavailable,
9722e5f17eec0874677eec65b9d514e540c1fc70bdTomasz Wasilczyk     *                ie. temporarily due to ongoing foreground
98803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     *                playback in single-tuner device.
99803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     *                NOT_INITIALIZED other error, ie. HW failure.
100803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     */
101803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk    startBackgroundScan() generates (ProgramListResult result);
1022dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk
1032dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk    /**
1042dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk     * Retrieve station list.
1052dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk     *
1062dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk     * This call does not trigger actual scan, but operates on the list cached
1072dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk     * internally at the driver level.
1082dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk     *
109fa3a559d86644a0a374450bb1dcfbb24f40fce37Tomasz Wasilczyk     * @param vendorFilter vendor-specific filter for the stations to be retrieved.
110fa3a559d86644a0a374450bb1dcfbb24f40fce37Tomasz Wasilczyk     *               An empty vector MUST result in full list for a given tuner.
1112dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk     * @return result OK if the list was successfully retrieved.
1126ca90ed3cf35de6cb21b6d1ce886e2c7c4c91a2cTomasz Wasilczyk     *                INVALID_ARGUMENTS if invalid arguments are passed
1132dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk     *                NOT_READY if the scan is in progress.
114803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     *                NOT_STARTED if the scan has not been started, client may
115803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk     *                call startBackgroundScan to fix this.
1162dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk     *                NOT_INITIALIZED if any other error occurs.
1172dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk     * @return programList List of stations available for user.
1182dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk     */
119fa3a559d86644a0a374450bb1dcfbb24f40fce37Tomasz Wasilczyk    getProgramList(vec<VendorKeyValue> vendorFilter)
120803301a2ed397ee39c9e703c611703053aad594fTomasz Wasilczyk        generates (ProgramListResult result, vec<ProgramInfo> programList);
1212dd1d8dcfe1242c8f388b9677797766e54c986bfTomasz Wasilczyk
122c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk    /**
123c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     * Forces the analog playback for the supporting radio technology.
124c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     *
125c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     * User may disable digital playback for FM HD Radio or hybrid FM/DAB with
126c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     * this option. This is purely user choice, ie. does not reflect digital-
127c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     * analog handover managed from the HAL implementation side.
128c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     *
129c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     * Some radio technologies may not support this, ie. DAB.
130c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     *
131c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     * @param isForced true to force analog, false for a default behaviour.
132c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     * @return result OK if the setting was successfully done.
133c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     *                INVALID_STATE if the switch is not supported at current
134c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     *                configuration.
135c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     *                NOT_INITIALIZED if any other error occurs.
136c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk     */
137c7002820c34b7f3469448a66d7d4da78608b57e3Tomasz Wasilczyk    setAnalogForced(bool isForced) generates (Result result);
138b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk
139b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk    /**
140b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk     * Checks, if the analog playback is forced, see setAnalogForced.
141b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk     *
142b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk     * The isForced value is only valid if result was OK.
143b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk     *
144b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk     * @return result OK if the call succeeded and isForced is valid.
145b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk     *                INVALID_STATE if the switch is not supported at current
146b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk     *                configuration.
147b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk     *                NOT_INITIALIZED if any other error occurs.
148b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk     * @return isForced true if analog is forced, false otherwise.
149b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk     */
150b8a2afe4469586e9ed68d3c886a94eea130cd99fTomasz Wasilczyk    isAnalogForced() generates (Result result, bool isForced);
151213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk};
152