1/*
2 * Copyright (C) 2018 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.radio@1.3;
18
19import @1.2::IRadio;
20import @1.1::RadioAccessSpecifier;
21
22/**
23 * Note: IRadio 1.3 is an intermediate layer between Android P and Android Q. It's specifically
24 * designed for CBRS related interfaces. All other interfaces for Q are added in IRadio 1.4.
25 *
26 * This interface is used by telephony and telecom to talk to cellular radio.
27 * All the functions have minimum one parameter:
28 * serial: which corresponds to serial no. of request. Serial numbers must only be memorized for the
29 * duration of a method call. If clients provide colliding serials (including passing the same
30 * serial to different methods), multiple responses (one for each method call) must still be served.
31 * setResponseFunctions must work with @1.1::IRadioResponse and @1.1::IRadioIndication.
32 */
33interface IRadio extends @1.2::IRadio {
34    /**
35     * Specify which bands modem's background scan must act on.
36     * If specifyChannels is true, it only scans bands specified in specifiers.
37     * If specifyChannels is false, it scans all bands.
38     *
39     * For example, CBRS is only on LTE band 48. By specifying this band,
40     * modem saves more power.
41     *
42     * @param serial Serial number of request.
43     * @param specifyChannels whether to scan bands defined in specifiers.
44     * @param specifiers which bands to scan. Only used if specifyChannels is true.
45     *
46     * Response callback is IRadioResponse.setSystemSelectionChannelsResponse()
47     */
48    oneway setSystemSelectionChannels(int32_t serial, bool specifyChannels,
49            vec<RadioAccessSpecifier> specifiers);
50
51   /**
52    * Toggle logical modem on/off. This is similar to @1.0::IRadio.setRadioPower(), however that
53    * does not enforce that radio power is toggled only for the corresponding radio and certain
54    * vendor implementations do it for all radios. This new API should affect only the modem for
55    * which it is called. A modem stack must be on/active only when both setRadioPower() and
56    * enableModem() are set to on for it.
57    *
58    * SIM must be read if available even if modem is off/inactive.
59    *
60    * @param serial Serial number of request.
61    * @param on True to turn on the logical modem, otherwise turn it off.
62    *
63    * Response function is IRadioResponse.enableModemResponse()
64    */
65    oneway enableModem(int32_t serial, bool on);
66
67   /**
68    * Request status of logical modem. It returns isEnabled=true if the logical modem is on.
69    * This method is the getter method for enableModem.
70    *
71    * @param serial Serial number of request.
72    *
73    * Response function is IRadioResponse.getModemStackStatusResponse()
74    */
75    oneway getModemStackStatus(int32_t serial);
76};