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