| /* Copyright (C) 2017 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.broadcastradio@2.0; |
| |
| import IAnnouncementListener; |
| import ICloseHandle; |
| import ITunerCallback; |
| import ITunerSession; |
| |
| /** |
| * Represents a hardware broadcast radio module. A single module may contain |
| * multiple hardware tuners (i.e. with an additional background tuner), but the |
| * layers above the HAL see them as a single logical unit. |
| */ |
| interface IBroadcastRadio { |
| /** |
| * Returns module properties: a description of a module and its |
| * capabilities. This method must not fail. |
| * |
| * @return properties Module description. |
| */ |
| getProperties() generates (Properties properties); |
| |
| /** |
| * Fetches current or possible AM/FM region configuration. |
| * |
| * @param full If true, returns full hardware capabilities. |
| * If false, returns current regional configuration. |
| * @return result OK in case of success. |
| * NOT_SUPPORTED if the tuner doesn't support AM/FM. |
| * @return config Hardware capabilities (full=true) or |
| * current configuration (full=false). |
| */ |
| getAmFmRegionConfig(bool full) |
| generates (Result result, AmFmRegionConfig config); |
| |
| /** |
| * Fetches current DAB region configuration. |
| * |
| * @return result OK in case of success. |
| * NOT_SUPPORTED if the tuner doesn't support DAB. |
| * @return config Current configuration. |
| */ |
| getDabRegionConfig() generates (Result result, vec<DabTableEntry> config); |
| |
| /** |
| * Opens a new tuner session. |
| * |
| * There may be only one session active at a time. If the new session was |
| * requested when the old one was active, the old must be terminated |
| * (aggressive open). |
| * |
| * @param callback The callback interface. |
| * @return result OK in case of success. |
| * @return session The session interface. |
| */ |
| openSession(ITunerCallback callback) |
| generates (Result result, ITunerSession session); |
| |
| /** |
| * Fetch image from radio module cache. |
| * |
| * This is out-of-band transport mechanism for images carried with metadata. |
| * The metadata vector only passes the identifier, so the client may cache |
| * images or even not fetch them. |
| * |
| * The identifier may be any arbitrary number (i.e. sha256 prefix) selected |
| * by the vendor. It must be stable across sessions so the application may |
| * cache it. |
| * |
| * The data must be a valid PNG, JPEG, GIF or BMP file. |
| * Image data with an invalid format must be handled gracefully in the same |
| * way as a missing image. |
| * |
| * The image identifier may become invalid after some time from passing it |
| * with metadata struct (due to resource cleanup at the HAL implementation). |
| * However, it must remain valid for a currently tuned program at least |
| * until onCurrentProgramInfoChanged is called. |
| * |
| * There is still a race condition possible between |
| * onCurrentProgramInfoChanged callback and the HAL implementation eagerly |
| * clearing the cache (because the next onCurrentProgramInfoChanged came). |
| * In such case, client application may expect the new |
| * onCurrentProgramInfoChanged callback with updated image identifier. |
| * |
| * @param id Identifier of an image (value of Constants::INVALID_IMAGE is |
| * reserved and must be treated as invalid image). |
| * @return image A binary blob with image data |
| * or a zero-length vector if identifier doesn't exist. |
| */ |
| getImage(uint32_t id) generates (vec<uint8_t> image); |
| |
| /** |
| * Registers announcement listener. |
| * |
| * If there is at least one observer registered, HAL implementation must |
| * notify about announcements even if no sessions are active. |
| * |
| * If the observer dies, the HAL implementation must unregister observer |
| * automatically. |
| * |
| * @param enabled The list of announcement types to watch for. |
| * @param listener The listener interface. |
| * @return result OK in case of success. |
| * NOT_SUPPORTED if the tuner doesn't support announcements. |
| * @return closeHandle A handle to unregister observer, |
| * nullptr if result was not OK. |
| */ |
| registerAnnouncementListener( |
| vec<AnnouncementType> enabled, |
| IAnnouncementListener listener |
| ) generates ( |
| Result result, |
| ICloseHandle closeHandle |
| ); |
| }; |