Merge changes from topics "caps_refactor", "multi-plmn", "nr_band", "v6mtu"

* changes:
  Update PhoneCapability to use 1.5 UTRAN bands
  Support IPv6 MTU in IRadio 1.5
  Added NR band support
  Add Multi-PLMN and CSG support
This commit is contained in:
Sarah Chin
2020-01-29 15:56:09 +00:00
committed by Gerrit Code Review
9 changed files with 390 additions and 59 deletions

View File

@@ -636,11 +636,11 @@ c9273429fcf98d797d3bb07fdba6f1be95bf960f9255cde169fd1ca4db85f856 android.hardwar
##
# BEGIN Radio HAL Merge Conflict Avoidance Buffer - STOPSHIP if present
##
bbed8ec4b3e9bb419b61d3fe53ec2d7def943378d1de8eaa02d79b17b0838136 android.hardware.radio@1.5::types
372abc5d0502fc40ca0b83b233addf9babc7fd459bafb908915b1371fc6f1bd0 android.hardware.radio@1.5::types
603851ca0f5360778049902fc7486d0ff60065b16e83b99f076487667aba1928 android.hardware.radio@1.5::IRadio
20d52e66fd548f89bcb98cda42749a591ce8f439a2a7148617adac0c967ad937 android.hardware.radio@1.5::IRadioIndication
afa9ba21fbf130e5cd6463b01ee34175a60220cdc8b657443e683494e6deca8d android.hardware.radio@1.5::IRadioResponse
5971a891d7d8843e9fb9f44583a9a0a265ec42fd5e4e1c95c9803454d21fabf7 android.hardware.radio.config@1.3::types
e96ae1c3a9c0689002ec2318e9c587f4f607c16a75a3cd38788b77eb91072021 android.hardware.radio@1.5::IRadioIndication
04cce8fdae2b03becda4ee6fe17cb032fd7d30152f8ab36f642d794e4f5f6999 android.hardware.radio@1.5::IRadioResponse
2fd107f3de1b7e36825e241a88dfae8edf3a77c166cb746f00ddf6440ab78db1 android.hardware.radio.config@1.3::types
a2977755bc5f1ef47f04b7f2400632efda6218e1515dba847da487145cfabc4f android.hardware.radio.config@1.3::IRadioConfig
742360c775313438b0f82256eac62fb5bbc76a6ae6f388573f3aa142fb2c1eea android.hardware.radio.config@1.3::IRadioConfigIndication
0006ab8e8b0910cbd3bbb08d5f17d5fac7d65a2bdad5f2334e4851db9d1e6fa8 android.hardware.radio.config@1.3::IRadioConfigResponse

View File

@@ -76,4 +76,23 @@ interface IRadioIndication extends @1.4::IRadioIndication {
*/
oneway barringInfoChanged(
RadioIndicationType type, CellIdentity cellIdentity, vec<BarringInfo> barringInfos);
/**
* Report all of the current cell information known to the radio.
*
* This indication is updated from IRadioIndication@1.4 to report the @1.5 version of
* CellInfo.
*
* @param type Type of radio indication
* @param records Current cell information
*/
oneway cellInfoList_1_5(RadioIndicationType type, vec<CellInfo> records);
/**
* Incremental network scan results.
*
* This indication is updated from IRadioIndication@1.4 to report the @1.5 version of
* CellInfo.
*/
oneway networkScanResult_1_5(RadioIndicationType type, NetworkScanResult result);
};

View File

@@ -20,6 +20,7 @@ import @1.0::RadioResponseInfo;
import @1.0::SendSmsResult;
import @1.4::IRadioResponse;
import @1.5::BarringInfo;
import @1.5::CellInfo;
import @1.5::PersoSubstate;
import @1.5::RegStateResult;
import @1.5::SetupDataCallResult;
@@ -201,6 +202,19 @@ interface IRadioResponse extends @1.4::IRadioResponse {
oneway getDataRegistrationStateResponse_1_5(RadioResponseInfo info,
RegStateResult dataRegResponse);
/**
* This is identitcal to getCellInfoListResponse_1_4 but uses an updated version of CellInfo.
*
* @param info Response info struct containing response type, serial no. and error
* @param cellInfo List of current cell information known to radio
*
* Valid errors returned:
* RadioError:NONE
* RadioError:RADIO_NOT_AVAILABLE
* RadioError:INTERNAL_ERR
*/
oneway getCellInfoListResponse_1_5(RadioResponseInfo info, vec<CellInfo> cellInfo);
/**
* @param info Response info struct containing response type, serial no. and error
* @param persoType SIM Personalisation type

View File

@@ -17,24 +17,35 @@
package android.hardware.radio@1.5;
import @1.0::ApnAuthType;
import @1.0::CdmaSignalStrength;
import @1.0::DataProfileId;
import @1.0::DataProfileInfoType;
import @1.0::EvdoSignalStrength;
import @1.0::GsmSignalStrength;
import @1.0::LteSignalStrength;
import @1.0::PersoSubstate;
import @1.0::RadioAccessFamily;
import @1.0::RadioError;
import @1.0::RegState;
import @1.0::TimeStampType;
import @1.1::EutranBands;
import @1.1::GeranBands;
import @1.1::RadioAccessNetworks;
import @1.1::RadioAccessSpecifier;
import @1.1::ScanStatus;
import @1.1::ScanType;
import @1.1::UtranBands;
import @1.2::CellConnectionStatus;
import @1.2::CellIdentityCdma;
import @1.2::CellIdentityGsm;
import @1.2::CellIdentityWcdma;
import @1.2::CellIdentityTdscdma;
import @1.2::CellIdentityLte;
import @1.2::CellInfoCdma;
import @1.2::IndicationFilter;
import @1.2::NetworkScanRequest;
import @1.2::TdscdmaSignalStrength;
import @1.2::WcdmaSignalStrength;
import @1.4::AccessNetwork;
import @1.4::ApnTypes;
import @1.4::CellIdentityNr;
@@ -43,6 +54,7 @@ import @1.4::DataConnActiveStatus;
import @1.4::DataProfileInfo;
import @1.4::LteVopsInfo;
import @1.4::NrIndicators;
import @1.4::NrSignalStrength;
import @1.4::PdpProtocolType;
import @1.4::RadioTechnology;
@@ -312,13 +324,74 @@ enum ApnTypes : @1.4::ApnTypes {
};
/**
* Extended from @1.4::DataProfileInfo to update ApnTypes to 1.5 version
* Extended from @1.4::DataProfileInfo to update ApnTypes to 1.5 version and replace mtu with
* mtuV4 and mtuV6. In the future, this must be extended instead of overwritten.
*/
struct DataProfileInfo {
@1.4::DataProfileInfo base;
/** ID of the data profile. */
DataProfileId profileId;
/** The APN name. */
string apn;
/** PDP_type values. */
PdpProtocolType protocol;
/** PDP_type values used on roaming network. */
PdpProtocolType roamingProtocol;
/** APN authentication type. */
ApnAuthType authType;
/** The username for APN, or empty string. */
string user;
/** The password for APN, or empty string. */
string password;
/** Data profile technology type. */
DataProfileInfoType type;
/** The period in seconds to limit the maximum connections. */
int32_t maxConnsTime;
/** The maximum connections during maxConnsTime. */
int32_t maxConns;
/**
* The required wait time in seconds after a successful UE initiated disconnect of a given PDN
* connection before the device can send a new PDN connection request for that given PDN.
*/
int32_t waitTime;
/** True to enable the profile, false to disable. */
bool enabled;
/** Supported APN types bitmap. See ApnTypes for the value of each bit. */
bitfield<ApnTypes> supportedApnTypesBitmap;
/** The bearer bitmap. See RadioAccessFamily for the value of each bit. */
bitfield<RadioAccessFamily> bearerBitmap;
/** Maximum transmission unit (MTU) size in bytes for IPv4. */
int32_t mtuV4;
/** Maximum transmission unit (MTU) size in bytes for IPv6. */
int32_t mtuV6;
/**
* True if this data profile was used to bring up the last default (i.e internet) data
* connection successfully.
*/
bool preferred;
/**
* If true, modem must persist this data profile and profileId must not be
* set to DataProfileId.INVALID. If the same data profile exists, this data profile must
* overwrite it.
*/
bool persistent;
};
/**
@@ -365,7 +438,8 @@ struct LinkAddress {
/**
* Overwritten from @1.4::SetupDataCallResult in order to update the addresses to 1.5
* version. In 1.5 the type of addresses changes to vector of LinkAddress.
* version. In 1.5 the type of addresses changes to vector of LinkAddress, and mtu is replaced by
* mtuV4 and mtuV6.
*/
struct SetupDataCallResult {
/** Data call fail cause. DataCallFailCause.NONE if no error. */
@@ -419,10 +493,16 @@ struct SetupDataCallResult {
vec<string> pcscf;
/**
* MTU received from network. Value <= 0 means network has either not sent a value or sent an
* invalid value.
* MTU received from network for IPv4.
* Value <= 0 means network has either not sent a value or sent an invalid value.
*/
int32_t mtu;
int32_t mtuV4;
/**
* MTU received from network for IPv6.
* Value <= 0 means network has either not sent a value or sent an invalid value.
*/
int32_t mtuV6;
};
enum Domain : int32_t {
@@ -433,6 +513,169 @@ enum Domain : int32_t {
PS = 1 << 1,
};
struct ClosedSubscriberGroupInfo {
/**
* Indicates whether the cell is restricted to only CSG members. A cell not broadcasting the
* CSG Indication but reporting CSG information is considered a Hybrid Cell.
* Refer to the "csg-Indication" field in 3GPP TS 36.331 section 6.2.2
* SystemInformationBlockType1.
* Also refer to "CSG Indicator" in 3GPP TS 25.331 section 10.2.48.8.1 and TS 25.304.
*/
bool csgIndication;
/**
* The human-readable name of the closed subscriber group operating this cell.
* Refer to "hnb-Name" in TS 36.331 section 6.2.2 SystemInformationBlockType9.
* Also refer to "HNB Name" in 3GPP TS25.331 section 10.2.48.8.23 and TS 23.003 section 4.8.
*/
string homeNodebName;
/**
* The identity of the closed subscriber group that the cell belongs to.
* Refer to "CSG-Identity" in TS 36.336 section 6.3.4.
* Also refer to "CSG Identity" in 3GPP TS 25.331 section 10.3.2.8 and TS 23.003 section 4.7.
*/
int32_t csgIdentity;
};
safe_union OptionalCsgInfo {
/**
* If no CSG info is provided by the cell, then this structure shall be present.
*/
Monostate noinit;
/**
* If CSG info is provided by the cell, this structure shall be present.
*/
ClosedSubscriberGroupInfo csgInfo;
};
struct CellIdentityGsm {
/**
* The fields "mcc" and "mnc" must contain the PLMN-ID of the primary PLMN of this cell.
*/
@1.2::CellIdentityGsm base;
/** Additional PLMN-IDs beyond the primary PLMN broadcast for this cell */
vec<string> additionalPlmns;
};
struct CellIdentityWcdma {
/**
* The fields "mcc" and "mnc" must contain the PLMN-ID of the primary PLMN of this cell.
*/
@1.2::CellIdentityWcdma base;
/** Additional PLMN-IDs beyond the primary PLMN broadcast for this cell */
vec<string> additionalPlmns;
/** Information about any closed subscriber group ID for this cell */
OptionalCsgInfo optionalCsgInfo;
};
struct CellIdentityTdscdma {
/**
* The fields "mcc" and "mnc" must contain the PLMN-ID of the primary PLMN of this cell.
*/
@1.2::CellIdentityTdscdma base;
/** Additional PLMN-IDs beyond the primary PLMN broadcast for this cell */
vec<string> additionalPlmns;
/** Information about any closed subscriber group ID for this cell */
OptionalCsgInfo optionalCsgInfo;
};
struct CellIdentityLte {
/**
* The fields "mcc" and "mnc" must contain the PLMN-ID of the primary PLMN of this cell.
*/
@1.2::CellIdentityLte base;
/** Additional PLMN-IDs beyond the primary PLMN broadcast for this cell */
vec<string> additionalPlmns;
/** Information about any closed subscriber group ID for this cell */
OptionalCsgInfo optionalCsgInfo;
};
/**
* The CellIdentity structure should be reported once for each element of the PLMN-IdentityInfoList
* broadcast in SIB1 CellAccessRelatedInfo as per 3GPP TS 38.331 Section 6.3.2.
*/
struct CellIdentityNr {
/**
* The fields "mcc" and "mnc" must contain the PLMN-ID of the primary PLMN of this cell.
*/
@1.4::CellIdentityNr base;
/** Additional PLMN-IDs beyond the primary PLMN broadcast for this cell */
vec<string> additionalPlmns;
/** Band used by the cell */
NgranBands band;
};
struct CellInfoGsm {
CellIdentityGsm cellIdentityGsm;
GsmSignalStrength signalStrengthGsm;
};
struct CellInfoWcdma {
CellIdentityWcdma cellIdentityWcdma;
WcdmaSignalStrength signalStrengthWcdma;
};
struct CellInfoTdscdma {
CellIdentityTdscdma cellIdentityTdscdma;
TdscdmaSignalStrength signalStrengthTdscdma;
};
struct CellInfoLte {
CellIdentityLte cellIdentityLte;
LteSignalStrength signalStrengthLte;
};
struct CellInfoNr {
CellIdentityNr cellIdentityNr;
NrSignalStrength signalStrengthNr;
};
struct CellInfo {
/**
* True if this cell is registered false if not registered.
*/
bool registered;
/**
* Type of time stamp represented by timeStamp.
*/
TimeStampType timeStampType;
/**
* Time in nanos as returned by ril_nano_time.
*/
uint64_t timeStamp;
/**
* Connection status for the cell.
*/
CellConnectionStatus connectionStatus;
safe_union CellInfoRatSpecificInfo {
/**
* 3gpp CellInfo types.
*/
CellInfoGsm gsm;
CellInfoWcdma wcdma;
CellInfoTdscdma tdscdma;
CellInfoLte lte;
CellInfoNr nr;
/**
* 3gpp2 CellInfo types;
*/
CellInfoCdma cdma;
} ratSpecificInfo;
};
/** A union representing the CellIdentity of a single cell */
safe_union CellIdentity {
Monostate noinit;
@@ -759,6 +1002,24 @@ struct RegStateResult {
} accessTechnologySpecificInfo;
};
/** Overwritten from @1.4::NetworkScanResult in order to update the CellInfo to 1.5 version. */
struct NetworkScanResult {
/**
* The status of the scan.
*/
ScanStatus status;
/**
* The error code of the incremental result.
*/
RadioError error;
/**
* List of network information as CellInfo.
*/
vec<CellInfo> networkInfos;
};
/**
* Additional personalization categories in addition to those specified in 3GPP TS 22.022 and 3GPP2 C.S0068-0.
*/

View File

@@ -833,23 +833,24 @@ TEST_F(RadioHidlTest_v1_5, setupDataCall_1_5) {
android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo;
memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
dataProfileInfo.base.profileId = DataProfileId::DEFAULT;
dataProfileInfo.base.apn = hidl_string("internet");
dataProfileInfo.base.protocol = PdpProtocolType::IP;
dataProfileInfo.base.roamingProtocol = PdpProtocolType::IP;
dataProfileInfo.base.authType = ApnAuthType::NO_PAP_NO_CHAP;
dataProfileInfo.base.user = hidl_string("username");
dataProfileInfo.base.password = hidl_string("password");
dataProfileInfo.base.type = DataProfileInfoType::THREE_GPP;
dataProfileInfo.base.maxConnsTime = 300;
dataProfileInfo.base.maxConns = 20;
dataProfileInfo.base.waitTime = 0;
dataProfileInfo.base.enabled = true;
dataProfileInfo.profileId = DataProfileId::DEFAULT;
dataProfileInfo.apn = hidl_string("internet");
dataProfileInfo.protocol = PdpProtocolType::IP;
dataProfileInfo.roamingProtocol = PdpProtocolType::IP;
dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
dataProfileInfo.user = hidl_string("username");
dataProfileInfo.password = hidl_string("password");
dataProfileInfo.type = DataProfileInfoType::THREE_GPP;
dataProfileInfo.maxConnsTime = 300;
dataProfileInfo.maxConns = 20;
dataProfileInfo.waitTime = 0;
dataProfileInfo.enabled = true;
dataProfileInfo.supportedApnTypesBitmap = 320;
dataProfileInfo.base.bearerBitmap = 161543;
dataProfileInfo.base.mtu = 0;
dataProfileInfo.base.preferred = true;
dataProfileInfo.base.persistent = false;
dataProfileInfo.bearerBitmap = 161543;
dataProfileInfo.mtuV4 = 0;
dataProfileInfo.mtuV6 = 0;
dataProfileInfo.preferred = true;
dataProfileInfo.persistent = false;
bool roamingAllowed = false;
@@ -884,23 +885,24 @@ TEST_F(RadioHidlTest_v1_5, setInitialAttachApn_1_5) {
// Create a dataProfileInfo
android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo;
memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
dataProfileInfo.base.profileId = DataProfileId::DEFAULT;
dataProfileInfo.base.apn = hidl_string("internet");
dataProfileInfo.base.protocol = PdpProtocolType::IPV4V6;
dataProfileInfo.base.roamingProtocol = PdpProtocolType::IPV4V6;
dataProfileInfo.base.authType = ApnAuthType::NO_PAP_NO_CHAP;
dataProfileInfo.base.user = hidl_string("username");
dataProfileInfo.base.password = hidl_string("password");
dataProfileInfo.base.type = DataProfileInfoType::THREE_GPP;
dataProfileInfo.base.maxConnsTime = 300;
dataProfileInfo.base.maxConns = 20;
dataProfileInfo.base.waitTime = 0;
dataProfileInfo.base.enabled = true;
dataProfileInfo.profileId = DataProfileId::DEFAULT;
dataProfileInfo.apn = hidl_string("internet");
dataProfileInfo.protocol = PdpProtocolType::IPV4V6;
dataProfileInfo.roamingProtocol = PdpProtocolType::IPV4V6;
dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
dataProfileInfo.user = hidl_string("username");
dataProfileInfo.password = hidl_string("password");
dataProfileInfo.type = DataProfileInfoType::THREE_GPP;
dataProfileInfo.maxConnsTime = 300;
dataProfileInfo.maxConns = 20;
dataProfileInfo.waitTime = 0;
dataProfileInfo.enabled = true;
dataProfileInfo.supportedApnTypesBitmap = 320;
dataProfileInfo.base.bearerBitmap = 161543;
dataProfileInfo.base.mtu = 0;
dataProfileInfo.base.preferred = true;
dataProfileInfo.base.persistent = false;
dataProfileInfo.bearerBitmap = 161543;
dataProfileInfo.mtuV4 = 0;
dataProfileInfo.mtuV6 = 0;
dataProfileInfo.preferred = true;
dataProfileInfo.persistent = false;
radio_v1_5->setInitialAttachApn_1_5(serial, dataProfileInfo);
@@ -923,23 +925,24 @@ TEST_F(RadioHidlTest_v1_5, setDataProfile_1_5) {
// Create a dataProfileInfo
android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo;
memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
dataProfileInfo.base.profileId = DataProfileId::DEFAULT;
dataProfileInfo.base.apn = hidl_string("internet");
dataProfileInfo.base.protocol = PdpProtocolType::IPV4V6;
dataProfileInfo.base.roamingProtocol = PdpProtocolType::IPV4V6;
dataProfileInfo.base.authType = ApnAuthType::NO_PAP_NO_CHAP;
dataProfileInfo.base.user = hidl_string("username");
dataProfileInfo.base.password = hidl_string("password");
dataProfileInfo.base.type = DataProfileInfoType::THREE_GPP;
dataProfileInfo.base.maxConnsTime = 300;
dataProfileInfo.base.maxConns = 20;
dataProfileInfo.base.waitTime = 0;
dataProfileInfo.base.enabled = true;
dataProfileInfo.profileId = DataProfileId::DEFAULT;
dataProfileInfo.apn = hidl_string("internet");
dataProfileInfo.protocol = PdpProtocolType::IPV4V6;
dataProfileInfo.roamingProtocol = PdpProtocolType::IPV4V6;
dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
dataProfileInfo.user = hidl_string("username");
dataProfileInfo.password = hidl_string("password");
dataProfileInfo.type = DataProfileInfoType::THREE_GPP;
dataProfileInfo.maxConnsTime = 300;
dataProfileInfo.maxConns = 20;
dataProfileInfo.waitTime = 0;
dataProfileInfo.enabled = true;
dataProfileInfo.supportedApnTypesBitmap = 320;
dataProfileInfo.base.bearerBitmap = 161543;
dataProfileInfo.base.mtu = 0;
dataProfileInfo.base.preferred = true;
dataProfileInfo.base.persistent = true;
dataProfileInfo.bearerBitmap = 161543;
dataProfileInfo.mtuV4 = 0;
dataProfileInfo.mtuV6 = 0;
dataProfileInfo.preferred = true;
dataProfileInfo.persistent = true;
// Create a dataProfileInfoList
android::hardware::hidl_vec<android::hardware::radio::V1_5::DataProfileInfo>

View File

@@ -571,6 +571,11 @@ class RadioResponse_v1_5 : public ::android::hardware::radio::V1_5::IRadioRespon
Return<void> getDataRegistrationStateResponse_1_5(
const RadioResponseInfo& info,
const ::android::hardware::radio::V1_5::RegStateResult& regResponse);
Return<void> getCellInfoListResponse_1_5(
const RadioResponseInfo& info,
const ::android::hardware::hidl_vec<::android::hardware::radio::V1_5::CellInfo>&
cellInfo);
};
/* Callback class for radio indication */
@@ -585,6 +590,15 @@ class RadioIndication_v1_5 : public ::android::hardware::radio::V1_5::IRadioIndi
/* 1.5 Api */
Return<void> uiccApplicationsEnablementChanged(RadioIndicationType type, bool enabled);
Return<void> networkScanResult_1_5(
RadioIndicationType type,
const ::android::hardware::radio::V1_5::NetworkScanResult& result);
Return<void> cellInfoList_1_5(
RadioIndicationType type,
const ::android::hardware::hidl_vec<::android::hardware::radio::V1_5::CellInfo>&
records);
/* 1.4 Api */
Return<void> currentEmergencyNumberList(
RadioIndicationType type,

View File

@@ -350,3 +350,16 @@ Return<void> RadioIndication_v1_5::barringInfoChanged(
/*barringInfos*/) {
return Void();
}
Return<void> RadioIndication_v1_5::networkScanResult_1_5(
RadioIndicationType /*type*/,
const ::android::hardware::radio::V1_5::NetworkScanResult& /*result*/) {
return Void();
}
Return<void> RadioIndication_v1_5::cellInfoList_1_5(
RadioIndicationType /*type*/,
const ::android::hardware::hidl_vec<
::android::hardware::radio::V1_5::CellInfo>& /*records*/) {
return Void();
}

View File

@@ -997,3 +997,10 @@ Return<void> RadioResponse_v1_5::getDataRegistrationStateResponse_1_5(
parent_v1_5.notify(info.serial);
return Void();
}
Return<void> RadioResponse_v1_5::getCellInfoListResponse_1_5(
const RadioResponseInfo& /*info*/,
const ::android::hardware::hidl_vec<
::android::hardware::radio::V1_5::CellInfo>& /*cellInfo*/) {
return Void();
}

View File

@@ -17,10 +17,10 @@
package android.hardware.radio.config@1.3;
import android.hardware.radio@1.1::GeranBands;
import android.hardware.radio@1.1::UtranBands;
import android.hardware.radio@1.1::EutranBands;
import android.hardware.radio@1.4::RadioAccessFamily;
import android.hardware.radio@1.5::NgranBands;
import android.hardware.radio@1.5::UtranBands;
/** Type for the SIM slot. */
enum SlotType : int32_t {