1402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent/*
2402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent * Copyright (C) 2015 The Android Open Source Project
3402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent *
4402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License");
5402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent * you may not use this file except in compliance with the License.
6402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent * You may obtain a copy of the License at
7402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent *
8402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent *      http://www.apache.org/licenses/LICENSE-2.0
9402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent *
10402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent * Unless required by applicable law or agreed to in writing, software
11402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS,
12402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent * See the License for the specific language governing permissions and
14402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent * limitations under the License.
15402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent */
16402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent
17402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurentpackage android.hardware.broadcastradio@1.0;
18402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent
19402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurentimport ITunerCallback;
20402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent
21402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurentinterface ITuner {
22402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent
2340d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
24402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Apply current radio band configuration (band, range, channel spacing...).
25402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Automatically cancels pending scan, step or tune.
26402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * ITunerCallback.configChange() method MUST be called once the
27402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * configuration is applied or a failure occurs or after a time out.
28402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @param config The band configuration to apply.
29402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @return result OK if configuration could be applied
30402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                NOT_INITIALIZED in case of initialization error.
31402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                INVALID_ARGUMENTS if configuration requested is invalid
32402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *
33402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     */
34402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent    setConfiguration(BandConfig config) generates(Result result);
35402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent
3640d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
37402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Retrieve current radio band configuration.
38402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @return result OK if valid configuration is returned,
39402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                NOT_INITIALIZED in case of initialization error.
40402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @param config Current band configuration
41402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     */
42402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent    getConfiguration() generates(Result result, BandConfig config);
43402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent
4440d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
45402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Start scanning up to next valid station.
46402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Shall be called only when a valid configuration has been applied.
47402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Automatically cancels pending scan, step or tune.
48402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * ITunerCallback.tuneComplete() MUST be called once locked on a station
49402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * or after a time out or full band scan if no station found.
50402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * The status should indicate if a valid station is tuned or not.
51402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @param direction UP or DOWN.
52402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @param skipSubChannel valid for HD radio or digital radios only:
53402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                       ignore sub channels (e.g SPS for HD radio).
54402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @return result OK if scan successfully started
55402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                INVALID_STATE if called out of sequence
56402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                NOT_INITIALIZED if another error occurs
57402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     */
58402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent    scan(Direction direction, bool skipSubChannel) generates(Result result);
59402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent
6040d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
61402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Move one channel spacing up or down.
62402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Must be called when a valid configuration has been applied.
63402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Automatically cancels pending scan, step or tune.
64402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * ITunerCallback.tuneComplete() MUST be called once locked on a station
65402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * or after a time out or full band scan if no station found.
66402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * The status should indicate if a valid station is tuned or not.
67402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @param direction UP or DOWN.
68402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @param skipSubChannel valid for HD radio or digital radios only:
69402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                       ignore sub channels (e.g SPS for HD radio).
70402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @return result OK if scan successfully started
71402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                INVALID_STATE if called out of sequence
72402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                NOT_INITIALIZED if another error occurs
73402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     */
74402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent    step(Direction direction, bool skipSubChannel) generates(Result result);
75402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent
7640d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
77402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Tune to specified channel.
78402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Must be called when a valid configuration has been applied.
79402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Automatically cancels pending scan, step or tune.
80402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * ITunerCallback.tuneComplete() MUST be called once locked on a station
81402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * or after a time out or full band scan if no station found.
82402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * The status should indicate if a valid station is tuned or not.
83402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @param channel Channel to tune to. A frequency in kHz for AM/FM/HD Radio
84402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                bands.
85402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @param subChannel Valid for HD radio or digital radios only
86402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                   (e.g SPS number for HD radio)..
87402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @return result OK if scan successfully started
88402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                INVALID_ARGUMENTS if invalid arguments are passed
89402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                INVALID_STATE if called out of sequence
90402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                NOT_INITIALIZED if another error occurs
91402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     */
92402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent    tune(uint32_t channel, uint32_t subChannel) generates(Result result);
93402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent
9440d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
95402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Cancel a scan, step or tune operation.
96402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Shall be called only while a scan, step or tune operation is pending.
97402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * ITunerCallback.tuneComplete() MUST NOT be sent by the HAL.
98402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @return result OK if scan successfully started
99402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                INVALID_STATE if called out of sequence
100402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                NOT_INITIALIZED if another error occurs
101402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     */
102402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent    cancel() generates(Result result);
103402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent
10440d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
105402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * Retrieve current station information.
106402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @return result OK if scan successfully started
107402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     *                NOT_INITIALIZED if another error occurs
108402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     * @return info Current program information.
109402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent     */
1105cc9d866d2d7aeb05f05dcaa1296e28a7caeed19Tomasz Wasilczyk    getProgramInformation() generates(Result result, ProgramInfo info);
111402a829db2ee64b74f9d515bbdf95a41bda73962Eric Laurent};
112