diff --git a/radio/1.3/IRadio.hal b/radio/1.3/IRadio.hal index d582c71ec8..2d643812bb 100644 --- a/radio/1.3/IRadio.hal +++ b/radio/1.3/IRadio.hal @@ -17,8 +17,12 @@ package android.hardware.radio@1.3; import @1.2::IRadio; +import @1.1::RadioAccessSpecifier; /** + * Note: IRadio 1.3 is an intermediate layer between Android P and Android Q. It's specifically + * designed for CBRS related interfaces. All other interfaces for Q are added in IRadio 1.4. + * * This interface is used by telephony and telecom to talk to cellular radio. * All the functions have minimum one parameter: * serial: which corresponds to serial no. of request. Serial numbers must only be memorized for the @@ -27,4 +31,33 @@ import @1.2::IRadio; * setResponseFunctions must work with @1.1::IRadioResponse and @1.1::IRadioIndication. */ interface IRadio extends @1.2::IRadio { + /** + * Specify which bands modem's background scan must act on. + * If specifyChannels is true, it only scans bands specified in specifiers. + * If specifyChannels is false, it scans all bands. + * + * For example, CBRS is only on LTE band 48. By specifying this band, + * modem saves more power. + * + * @param serial Serial number of request. + * @param specifyChannels whether to scan bands defined in specifiers. + * @param specifiers which bands to scan. Only used if specifyChannels is true. + * + * Response callback is IRadioResponse.setSystemSelectionChannelsResponse() + */ + oneway setSystemSelectionChannels(int32_t serial, bool specifyChannels, + vec specifiers); + + /** + * Toggle logical modem on and off. It should put the logical modem in low power + * mode without any activity, while the SIM card remains visible. The difference + * with setRadioPower is, setRadioPower affects all logical modem while this controls + * just one. + * + * @param serial Serial number of request. + * @param on True to turn on the logical modem, otherwise turn it off. + * + * Response function is IRadioResponse.enableModemResponse() + */ + oneway enableModem(int32_t serial, bool on); }; diff --git a/radio/1.3/IRadioResponse.hal b/radio/1.3/IRadioResponse.hal index 2bcdd029b9..abdf2ee52c 100644 --- a/radio/1.3/IRadioResponse.hal +++ b/radio/1.3/IRadioResponse.hal @@ -17,9 +17,33 @@ package android.hardware.radio@1.3; import @1.2::IRadioResponse; +import @1.0::RadioResponseInfo; /** + * Note: IRadio 1.3 is an intermediate layer between Android P and Android Q. It's specifically + * designed for CBRS related interfaces. All other interfaces for Q are added in IRadio 1.4. + * * Interface declaring response functions to solicited radio requests. */ interface IRadioResponse extends @1.2::IRadioResponse { + /** + * @param info Response info struct containing response type, serial no. and error + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + * RadioError:INVALID_ARGUMENTS + */ + oneway setSystemSelectionChannelsResponse(RadioResponseInfo info); + + /** + * @param info Response info struct containing response type, serial no. and error + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + */ + oneway enableModemResponse(RadioResponseInfo info); }; diff --git a/radio/1.4/IRadio.hal b/radio/1.4/IRadio.hal index 1b6d9a63e9..8854453ecc 100644 --- a/radio/1.4/IRadio.hal +++ b/radio/1.4/IRadio.hal @@ -16,11 +16,11 @@ package android.hardware.radio@1.4; -import @1.4::DataProfileInfo; import @1.0::Dial; import @1.2::DataRequestReason; import @1.3::IRadio; import @1.4::AccessNetwork; +import @1.4::DataProfileInfo; import @1.4::EmergencyServiceCategory; /** diff --git a/radio/config/1.1/Android.bp b/radio/config/1.1/Android.bp index 10c4c98119..056510c647 100644 --- a/radio/config/1.1/Android.bp +++ b/radio/config/1.1/Android.bp @@ -7,14 +7,20 @@ hidl_interface { enabled: true, }, srcs: [ + "IRadioConfig.hal", "IRadioConfigIndication.hal", "IRadioConfigResponse.hal", + "types.hal", ], interfaces: [ "android.hardware.radio.config@1.0", "android.hardware.radio@1.0", "android.hidl.base@1.0", ], + types: [ + "ModemInfo", + "PhoneCapability", + ], gen_java: true, } diff --git a/radio/config/1.1/IRadioConfig.hal b/radio/config/1.1/IRadioConfig.hal new file mode 100644 index 0000000000..bc63339e26 --- /dev/null +++ b/radio/config/1.1/IRadioConfig.hal @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2018 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.radio.config@1.1; + +import @1.0::IRadioConfig; +import @1.1::IRadioConfigResponse; +import @1.1::PhoneCapability; + +/** + * Note: IRadioConfig 1.1 is an intermediate layer between Android P and Android Q. + * It's specifically designed for CBRS related interfaces. All other interfaces + * for Q are added in IRadioConfig 1.2. + * + * This interface is used by telephony and telecom to talk to cellular radio for the purpose of + * radio configuration, and it is not associated with any specific modem or slot. + * All the functions have minimum one parameter: + * serial: which corresponds to serial no. of request. Serial numbers must only be memorized for the + * duration of a method call. If clients provide colliding serials (including passing the same + * serial to different methods), multiple responses (one for each method call) must still be served. + */ +interface IRadioConfig extends @1.0::IRadioConfig { + /** + * Request current phone capability. + * + * @param serial Serial number of request. + * + * Response callback is IRadioResponse.getPhoneCapabilityResponse() which + * will return <@1.1::PhoneCapability>. + */ + oneway getPhoneCapability(int32_t serial); + + /** + * Set preferred data modem Id. + * In a multi-SIM device, notify modem layer which logical modem will be used primarily + * for data. It helps modem with resource optimization and decisions of what data connections + * should be satisfied. + * + * @param serial Serial number of request. + * @param modem Id the logical modem ID, which should match one of modem IDs returned + * from getPhoneCapability(). + * + * Response callback is IRadioConfigResponse.setPreferredDataModemResponse() + */ + oneway setPreferredDataModem(int32_t serial, uint8_t modemId); +}; diff --git a/radio/config/1.1/IRadioConfigResponse.hal b/radio/config/1.1/IRadioConfigResponse.hal index 5d7560062a..42a31b1a84 100644 --- a/radio/config/1.1/IRadioConfigResponse.hal +++ b/radio/config/1.1/IRadioConfigResponse.hal @@ -17,9 +17,37 @@ package android.hardware.radio.config@1.1; import @1.0::IRadioConfigResponse; +import @1.1::PhoneCapability; +import android.hardware.radio@1.0::RadioResponseInfo; /** + * Note: IRadioConfig 1.1 is an intermediate layer between Android P and Android Q. + * It's specifically designed for CBRS related interfaces. All other interfaces + * for Q are be added in IRadioConfig 1.2. + * * Interface declaring response functions to solicited radio config requests. */ interface IRadioConfigResponse extends @1.0::IRadioConfigResponse { + /** + * @param info Response info struct containing response type, serial no. and error + * @param phoneCapability <@1.1::PhoneCapability> it defines modem's capability for example + * how many logical modems it has, how many data connections it supports. + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + */ + oneway getPhoneCapabilityResponse(RadioResponseInfo info, PhoneCapability phoneCapability); + + /** + * @param info Response info struct containing response type, serial no. and error + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + * RadioError:INVALID_ARGUMENTS + */ + oneway setPreferredDataModemResponse(RadioResponseInfo info); }; diff --git a/radio/config/1.1/types.hal b/radio/config/1.1/types.hal new file mode 100644 index 0000000000..a7b9f867e7 --- /dev/null +++ b/radio/config/1.1/types.hal @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2018 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.radio.config@1.1; + +/** + * Note: IRadioConfig 1.1 is an intermediate layer between Android P and Android Q. + * It's specifically designed for CBRS related interfaces. All other interfaces + * for Q are be added in IRadioConfig 1.2. + */ + +/** + * A field in PhoneCapability that has information of each logical modem. + */ +struct ModemInfo { + /** + * Logical modem ID. + */ + uint8_t modemId; +}; + +/** + * Phone capability which describes the data connection capability of modem. + * It's used to evaluate possible phone config change, for example from single + * SIM device to multi-SIM device. + */ +struct PhoneCapability { + /** + * maxActiveData defines how many logical modems can have + * PS attached simultaneously. For example, for L+L modem it + * should be 2. + */ + uint8_t maxActiveData; + /** + * maxActiveData defines how many logical modems can have + * internet PDN connections simultaneously. For example, for L+L + * DSDS modem it’s 1, and for DSDA modem it’s 2. + */ + uint8_t maxActiveInternetData; + /** + * Whether modem supports both internet PDN up so + * that we can do ping test before tearing down the + * other one. + */ + bool isInternetLingeringSupported; + /** + * List of logical modem information. + */ + vec logicalModemList; +};