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