• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.hardware.broadcastradio@1.0;
18
19enum Result : int32_t {
20    OK,
21    NOT_INITIALIZED,
22    INVALID_ARGUMENTS,
23    INVALID_STATE,
24    TIMEOUT,
25};
26
27/**
28 * Radio hardware module class. A given radio hardware module HAL is of one
29 * class only. The platform can not have more than one hardware module of
30 * each class. Current version of the framework only supports RADIO_CLASS_AM_FM.
31 */
32enum Class : uint32_t {
33    /** FM (including HD radio) and AM */
34    AM_FM = 0,
35    /** Satellite Radio */
36    SAT   = 1,
37    /** Digital Radio (DAB) */
38    DT    = 2,
39};
40
41/** value for field "type" of radio band described in struct radio_hal_band_config */
42enum Band : uint32_t {
43    /** Amplitude Modulation band: LW, MW, SW */
44    AM     = 0,
45    /** Frequency Modulation band: FM */
46    FM     = 1,
47    /** FM HD Radio / DRM (IBOC) */
48    FM_HD  = 2,
49    /** AM HD Radio / DRM (IBOC) */
50    AM_HD  = 3,
51};
52
53/** RDS variant implemented. A struct FmBandConfig can list none or several. */
54enum Rds : uint32_t {
55    NONE   = 0,
56    WORLD  = (1<<0),
57    US = (1<<1),
58};
59
60
61/* FM deemphasis variant implemented.
62 * A struct FmBandConfig can list one or more. */
63enum Deemphasis : uint32_t {
64    D50   = (1<<0),
65    D75   = (1<<1),
66};
67
68/** Scanning direction for scan() and step() tuner APIs */
69enum Direction : uint32_t {
70    UP,
71    DOWN
72};
73
74/** Unique handle allocated to a radio module */
75typedef uint32_t Handle;
76
77
78/** Additional attributes for an FM band configuration */
79struct FmBandConfig {
80    /** deemphasis variant */
81    Deemphasis deemphasis;
82    /** stereo supported */
83    bool       stereo;
84    /** RDS variants supported */
85    Rds        rds;
86    /** Traffic Announcement supported */
87    bool       ta;
88    /** Alternate Frequency supported */
89    bool       af;
90    /** Emergency announcements supported */
91    bool       ea;
92};
93
94/** Additional attributes for an AM band configuration */
95struct AmBandConfig {
96    /** Stereo supported */
97    bool       stereo;
98};
99
100/* Radio band configuration. Describes a given band supported by the radio
101 * module. The HAL can expose only one band per type with the the maximum range
102 * supported and all options. The framework will derive the actual regions were
103 * this module can operate and expose separate band configurations for
104 * applications to chose from. */
105struct BandConfig {
106    Band type;
107    bool antennaConnected;
108    uint32_t lowerLimit;
109    uint32_t upperLimit;
110    vec<uint32_t> spacings;
111    union Ext {
112        FmBandConfig fm;
113        AmBandConfig am;
114    } ext;
115};
116
117/* Exposes properties of a given hardware radio module.
118 * NOTE: current framework implementation supports only one audio source
119 * (num_audio_sources = 1). The source corresponds to AUDIO_DEVICE_IN_FM_TUNER.
120 * If more than one tuner is supported (num_tuners > 1), only one can be
121 * connected to the audio source. */
122struct Properties {
123    /** Class of this module. E.g AM_FM */
124    Class           classId;
125    /** implementor name */
126    string          implementor;
127    /** product name */
128    string          product;
129    /** product version */
130    string          version;
131    /** serial number (for subscription services) */
132    string          serial;
133    /** number of tuners controllable independently */
134    uint32_t        numTuners;
135    /** number of audio sources driven simultaneously */
136    uint32_t        numAudioSources;
137    /** the hardware supports capture of audio source from audio HAL */
138    bool            supportsCapture;
139    vec<BandConfig> bands; /** band descriptors */
140};
141
142enum MetadataType : int32_t {
143    INVALID    = -1,
144    /** Signed 32 bit integer  */
145    INT        = 0,
146    /** String */
147    TEXT       = 1,
148    /**
149     * Raw binary data (icon or art).
150     *
151     * The data should be a valid PNG, JPEG, GIF or BMP file.
152     * Invalid format must be handled gracefully as if the field was missing.
153     */
154    RAW        = 2,
155    /** clock data, see MetaDataClock */
156    CLOCK      = 3,
157};
158
159enum MetadataKey : int32_t {
160    INVALID      = -1,
161    /** RDS PI                 - int32_t  */
162    RDS_PI       = 0,
163    /** RDS PS                 - string */
164    RDS_PS       = 1,
165    /** RDS PTY                - int32_t  */
166    RDS_PTY      = 2,
167    /** RBDS PTY               - int32_t  */
168    RBDS_PTY     = 3,
169    /** RDS RT                 - string  */
170    RDS_RT       = 4,
171    /** Song title             - string  */
172    TITLE        = 5,
173    /** Artist name            - string  */
174    ARTIST       = 6,
175    /** Album name             - string  */
176    ALBUM        = 7,
177    /** Musical genre          - string  */
178    GENRE        = 8,
179    /** Station icon           - raw (int32_t for HAL 1.1) */
180    ICON         = 9,
181    /** Album art              - raw (int32_t for HAL 1.1) */
182    ART          = 10,
183    /** Clock                  - MetaDataClock */
184    CLOCK        = 11,
185};
186
187struct MetaDataClock {
188     /** Seconds since epoch at GMT + 0. */
189    uint64_t utcSecondsSinceEpoch;
190    /** Minutes offset from the GMT. */
191    int32_t timezoneOffsetInMinutes;
192};
193
194struct MetaData {
195    MetadataType type;
196    MetadataKey key;
197    /** Value used for type MetadataType.INT */
198    int32_t intValue;
199    /** Value used for type MetadataType.CLOCK */
200    MetaDataClock  clockValue;
201    /** Value used for type MetadataType.TEXT */
202    string  stringValue;
203    /** Value used for type MetadataType.RAW */
204    vec<uint8_t> rawValue;
205};
206
207
208/* Radio program information. Returned by the HAL with event RADIO_EVENT_TUNED.
209 * Contains information on currently tuned channel.
210 */
211struct ProgramInfo {
212    uint32_t     channel;   /** current channel. (e.g kHz for band type AM_FM) */
213    uint32_t     subChannel; /** current sub channel. (FM_HD) */
214
215    /**
216     * Tuned to a program (not a noise). It's the same condition that would
217     * stop scan operation.
218     */
219    bool         tuned;
220
221    bool         stereo;    /** program is stereo or not */
222    bool         digital;   /** digital program or not (e.g HD Radio program) */
223
224    /**
225     * Signal quality measured in 0% to 100% range.
226     *
227     * Despite the name, this is not a signal strength.
228     * The purpose of this field is primarily informative.
229     */
230    uint32_t signalStrength;
231
232    vec<MetaData> metadata; /** Metadata: PTY, song title etc. */
233};
234
235