1*4d7e907cSAndroid Build Coastguard Worker/* Copyright (C) 2017 The Android Open Source Project 2*4d7e907cSAndroid Build Coastguard Worker * 3*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 4*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 5*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 6*4d7e907cSAndroid Build Coastguard Worker * 7*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 8*4d7e907cSAndroid Build Coastguard Worker * 9*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 10*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 11*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 13*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 14*4d7e907cSAndroid Build Coastguard Worker */ 15*4d7e907cSAndroid Build Coastguard Worker 16*4d7e907cSAndroid Build Coastguard Workerpackage [email protected]; 17*4d7e907cSAndroid Build Coastguard Worker 18*4d7e907cSAndroid Build Coastguard Workerimport IAnnouncementListener; 19*4d7e907cSAndroid Build Coastguard Workerimport ICloseHandle; 20*4d7e907cSAndroid Build Coastguard Workerimport ITunerCallback; 21*4d7e907cSAndroid Build Coastguard Workerimport ITunerSession; 22*4d7e907cSAndroid Build Coastguard Worker 23*4d7e907cSAndroid Build Coastguard Worker/** 24*4d7e907cSAndroid Build Coastguard Worker * Represents a hardware broadcast radio module. A single module may contain 25*4d7e907cSAndroid Build Coastguard Worker * multiple hardware tuners (i.e. with an additional background tuner), but the 26*4d7e907cSAndroid Build Coastguard Worker * layers above the HAL see them as a single logical unit. 27*4d7e907cSAndroid Build Coastguard Worker */ 28*4d7e907cSAndroid Build Coastguard Workerinterface IBroadcastRadio { 29*4d7e907cSAndroid Build Coastguard Worker /** 30*4d7e907cSAndroid Build Coastguard Worker * Returns module properties: a description of a module and its 31*4d7e907cSAndroid Build Coastguard Worker * capabilities. This method must not fail. 32*4d7e907cSAndroid Build Coastguard Worker * 33*4d7e907cSAndroid Build Coastguard Worker * @return properties Module description. 34*4d7e907cSAndroid Build Coastguard Worker */ 35*4d7e907cSAndroid Build Coastguard Worker getProperties() generates (Properties properties); 36*4d7e907cSAndroid Build Coastguard Worker 37*4d7e907cSAndroid Build Coastguard Worker /** 38*4d7e907cSAndroid Build Coastguard Worker * Fetches current or possible AM/FM region configuration. 39*4d7e907cSAndroid Build Coastguard Worker * 40*4d7e907cSAndroid Build Coastguard Worker * @param full If true, returns full hardware capabilities. 41*4d7e907cSAndroid Build Coastguard Worker * If false, returns current regional configuration. 42*4d7e907cSAndroid Build Coastguard Worker * @return result OK in case of success. 43*4d7e907cSAndroid Build Coastguard Worker * NOT_SUPPORTED if the tuner doesn't support AM/FM. 44*4d7e907cSAndroid Build Coastguard Worker * @return config Hardware capabilities (full=true) or 45*4d7e907cSAndroid Build Coastguard Worker * current configuration (full=false). 46*4d7e907cSAndroid Build Coastguard Worker */ 47*4d7e907cSAndroid Build Coastguard Worker getAmFmRegionConfig(bool full) 48*4d7e907cSAndroid Build Coastguard Worker generates (Result result, AmFmRegionConfig config); 49*4d7e907cSAndroid Build Coastguard Worker 50*4d7e907cSAndroid Build Coastguard Worker /** 51*4d7e907cSAndroid Build Coastguard Worker * Fetches current DAB region configuration. 52*4d7e907cSAndroid Build Coastguard Worker * 53*4d7e907cSAndroid Build Coastguard Worker * @return result OK in case of success. 54*4d7e907cSAndroid Build Coastguard Worker * NOT_SUPPORTED if the tuner doesn't support DAB. 55*4d7e907cSAndroid Build Coastguard Worker * @return config Current configuration. 56*4d7e907cSAndroid Build Coastguard Worker */ 57*4d7e907cSAndroid Build Coastguard Worker getDabRegionConfig() generates (Result result, vec<DabTableEntry> config); 58*4d7e907cSAndroid Build Coastguard Worker 59*4d7e907cSAndroid Build Coastguard Worker /** 60*4d7e907cSAndroid Build Coastguard Worker * Opens a new tuner session. 61*4d7e907cSAndroid Build Coastguard Worker * 62*4d7e907cSAndroid Build Coastguard Worker * There may be only one session active at a time. If the new session was 63*4d7e907cSAndroid Build Coastguard Worker * requested when the old one was active, the old must be terminated 64*4d7e907cSAndroid Build Coastguard Worker * (aggressive open). 65*4d7e907cSAndroid Build Coastguard Worker * 66*4d7e907cSAndroid Build Coastguard Worker * @param callback The callback interface. 67*4d7e907cSAndroid Build Coastguard Worker * @return result OK in case of success. 68*4d7e907cSAndroid Build Coastguard Worker * @return session The session interface. 69*4d7e907cSAndroid Build Coastguard Worker */ 70*4d7e907cSAndroid Build Coastguard Worker openSession(ITunerCallback callback) 71*4d7e907cSAndroid Build Coastguard Worker generates (Result result, ITunerSession session); 72*4d7e907cSAndroid Build Coastguard Worker 73*4d7e907cSAndroid Build Coastguard Worker /** 74*4d7e907cSAndroid Build Coastguard Worker * Fetch image from radio module cache. 75*4d7e907cSAndroid Build Coastguard Worker * 76*4d7e907cSAndroid Build Coastguard Worker * This is out-of-band transport mechanism for images carried with metadata. 77*4d7e907cSAndroid Build Coastguard Worker * The metadata vector only passes the identifier, so the client may cache 78*4d7e907cSAndroid Build Coastguard Worker * images or even not fetch them. 79*4d7e907cSAndroid Build Coastguard Worker * 80*4d7e907cSAndroid Build Coastguard Worker * The identifier may be any arbitrary number (i.e. sha256 prefix) selected 81*4d7e907cSAndroid Build Coastguard Worker * by the vendor. It must be stable across sessions so the application may 82*4d7e907cSAndroid Build Coastguard Worker * cache it. 83*4d7e907cSAndroid Build Coastguard Worker * 84*4d7e907cSAndroid Build Coastguard Worker * The data must be a valid PNG, JPEG, GIF or BMP file. 85*4d7e907cSAndroid Build Coastguard Worker * Image data with an invalid format must be handled gracefully in the same 86*4d7e907cSAndroid Build Coastguard Worker * way as a missing image. 87*4d7e907cSAndroid Build Coastguard Worker * 88*4d7e907cSAndroid Build Coastguard Worker * The image identifier may become invalid after some time from passing it 89*4d7e907cSAndroid Build Coastguard Worker * with metadata struct (due to resource cleanup at the HAL implementation). 90*4d7e907cSAndroid Build Coastguard Worker * However, it must remain valid for a currently tuned program at least 91*4d7e907cSAndroid Build Coastguard Worker * until onCurrentProgramInfoChanged is called. 92*4d7e907cSAndroid Build Coastguard Worker * 93*4d7e907cSAndroid Build Coastguard Worker * There is still a race condition possible between 94*4d7e907cSAndroid Build Coastguard Worker * onCurrentProgramInfoChanged callback and the HAL implementation eagerly 95*4d7e907cSAndroid Build Coastguard Worker * clearing the cache (because the next onCurrentProgramInfoChanged came). 96*4d7e907cSAndroid Build Coastguard Worker * In such case, client application may expect the new 97*4d7e907cSAndroid Build Coastguard Worker * onCurrentProgramInfoChanged callback with updated image identifier. 98*4d7e907cSAndroid Build Coastguard Worker * 99*4d7e907cSAndroid Build Coastguard Worker * @param id Identifier of an image (value of Constants::INVALID_IMAGE is 100*4d7e907cSAndroid Build Coastguard Worker * reserved and must be treated as invalid image). 101*4d7e907cSAndroid Build Coastguard Worker * @return image A binary blob with image data 102*4d7e907cSAndroid Build Coastguard Worker * or a zero-length vector if identifier doesn't exist. 103*4d7e907cSAndroid Build Coastguard Worker */ 104*4d7e907cSAndroid Build Coastguard Worker getImage(uint32_t id) generates (vec<uint8_t> image); 105*4d7e907cSAndroid Build Coastguard Worker 106*4d7e907cSAndroid Build Coastguard Worker /** 107*4d7e907cSAndroid Build Coastguard Worker * Registers announcement listener. 108*4d7e907cSAndroid Build Coastguard Worker * 109*4d7e907cSAndroid Build Coastguard Worker * If there is at least one observer registered, HAL implementation must 110*4d7e907cSAndroid Build Coastguard Worker * notify about announcements even if no sessions are active. 111*4d7e907cSAndroid Build Coastguard Worker * 112*4d7e907cSAndroid Build Coastguard Worker * If the observer dies, the HAL implementation must unregister observer 113*4d7e907cSAndroid Build Coastguard Worker * automatically. 114*4d7e907cSAndroid Build Coastguard Worker * 115*4d7e907cSAndroid Build Coastguard Worker * @param enabled The list of announcement types to watch for. 116*4d7e907cSAndroid Build Coastguard Worker * @param listener The listener interface. 117*4d7e907cSAndroid Build Coastguard Worker * @return result OK in case of success. 118*4d7e907cSAndroid Build Coastguard Worker * NOT_SUPPORTED if the tuner doesn't support announcements. 119*4d7e907cSAndroid Build Coastguard Worker * @return closeHandle A handle to unregister observer, 120*4d7e907cSAndroid Build Coastguard Worker * nullptr if result was not OK. 121*4d7e907cSAndroid Build Coastguard Worker */ 122*4d7e907cSAndroid Build Coastguard Worker registerAnnouncementListener( 123*4d7e907cSAndroid Build Coastguard Worker vec<AnnouncementType> enabled, 124*4d7e907cSAndroid Build Coastguard Worker IAnnouncementListener listener 125*4d7e907cSAndroid Build Coastguard Worker ) generates ( 126*4d7e907cSAndroid Build Coastguard Worker Result result, 127*4d7e907cSAndroid Build Coastguard Worker ICloseHandle closeHandle 128*4d7e907cSAndroid Build Coastguard Worker ); 129*4d7e907cSAndroid Build Coastguard Worker}; 130