RIL header update for O
RIL_REQUEST_DEVICE_STATE and
RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER were added to replace
RIL_REQUEST_SCREEN_STATE, which will not be invoked by Android O
or above.
Data call refactoring works including adding more APN parameters for
RIL_REQUEST_SETUP_DATA_CALL, RIL_REQUEST_SET_INITIAL_ATTACH_APN,
and RIL_REQUEST_SET_DATA_PROFILE
bug: 20125037, 32224135, 32223897, 32249926, 30282096, 30173958,
33653220
Test: Build
Change-Id: I2e9a8a3a6cdc7fbd12489e476d2043440e72260a
diff --git a/include/telephony/ril.h b/include/telephony/ril.h
index 342377d..5f3d05e 100644
--- a/include/telephony/ril.h
+++ b/include/telephony/ril.h
@@ -66,11 +66,16 @@
*
* RIL_VERSION = 13 : This version includes new wakelock semantics and as the first
* strongly versioned version it enforces structure use.
+ *
* RIL_VERSION = 14 : New data structures are added, namely RIL_CarrierMatchType,
* RIL_Carrier, RIL_CarrierRestrictions and RIL_PCO_Data.
* New commands added: RIL_REQUEST_SET_CARRIER_RESTRICTIONS,
* RIL_REQUEST_SET_CARRIER_RESTRICTIONS and RIL_UNSOL_PCO_DATA.
* RIL_VERSION = 15 : New commands added: RIL_UNSOL_MODEM_RESTART
+ * The new parameters for RIL_REQUEST_SETUP_DATA_CALL,
+ * Updated data structures: RIL_DataProfileInfo_v15, RIL_InitialAttachApn_v15
+ * New commands added: RIL_REQUEST_SEND_DEVICE_STATE,
+ * RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER
*/
#define RIL_VERSION 12
#define LAST_IMPRECISE_RIL_VERSION 12 // Better self-documented name
@@ -1709,6 +1714,56 @@
int enabled;
} RIL_DataProfileInfo;
+typedef struct {
+ /* id of the data profile */
+ int profileId;
+ /* the APN to connect to */
+ char* apn;
+ /** one of the PDP_type values in TS 27.007 section 10.1.1.
+ * For example, "IP", "IPV6", "IPV4V6", or "PPP".
+ */
+ char* protocol;
+ /** one of the PDP_type values in TS 27.007 section 10.1.1 used on roaming network.
+ * For example, "IP", "IPV6", "IPV4V6", or "PPP".
+ */
+ char *roamingProtocol;
+ /** authentication protocol used for this PDP context
+ * (None: 0, PAP: 1, CHAP: 2, PAP&CHAP: 3)
+ */
+ int authType;
+ /* the username for APN, or NULL */
+ char* user;
+ /* the password for APN, or NULL */
+ char* password;
+ /* the profile type, TYPE_COMMON-0, TYPE_3GPP-1, TYPE_3GPP2-2 */
+ int type;
+ /* the period in seconds to limit the maximum connections */
+ int maxConnsTime;
+ /* the maximum connections during maxConnsTime */
+ int 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
+ */
+ int waitTime;
+ /* true to enable the profile, 0 to disable, 1 to enable */
+ int enabled;
+ /* supported APN types bitmask. See RIL_ApnTypes for the value of each bit. */
+ int supportedTypesBitmask;
+ /** the bearer bitmask. See RIL_RadioAccessFamily for the value of each bit. */
+ int bearerBitmask;
+ /** maximum transmission unit (MTU) size in bytes */
+ int mtu;
+ /** the MVNO type: possible values are "imsi", "gid", "spn" */
+ char *mvnoType;
+ /** MVNO match data. Can be anything defined by the carrier. For example,
+ * SPN like: "A MOBILE", "BEN NL", etc...
+ * IMSI like: "302720x94", "2060188", etc...
+ * GID like: "4E", "33", etc...
+ */
+ char *mvnoMatchData;
+} RIL_DataProfileInfo_v15;
+
/* Tx Power Levels */
#define RIL_NUM_TX_POWER_LEVELS 5
@@ -1738,6 +1793,65 @@
uint32_t rx_mode_time_ms;
} RIL_ActivityStatsInfo;
+typedef enum {
+ RIL_APN_TYPE_UNKNOWN = 0x0, // Unknown
+ RIL_APN_TYPE_DEFAULT = 0x1, // APN type for default data traffic
+ RIL_APN_TYPE_MMS = 0x2, // APN type for MMS traffic
+ RIL_APN_TYPE_SUPL = 0x4, // APN type for SUPL assisted GPS
+ RIL_APN_TYPE_DUN = 0x8, // APN type for DUN traffic
+ RIL_APN_TYPE_HIPRI = 0x10, // APN type for HiPri traffic
+ RIL_APN_TYPE_FOTA = 0x20, // APN type for FOTA
+ RIL_APN_TYPE_IMS = 0x40, // APN type for IMS
+ RIL_APN_TYPE_CBS = 0x80, // APN type for CBS
+ RIL_APN_TYPE_IA = 0x100, // APN type for IA Initial Attach APN
+ RIL_APN_TYPE_EMERGENCY = 0x200, // APN type for Emergency PDN. This is not an IA apn,
+ // but is used for access to carrier services in an
+ // emergency call situation.
+ RIL_APN_TYPE_ALL = 0xFFFFFFFF // All APN types
+} RIL_ApnTypes;
+
+typedef enum {
+ RIL_DST_POWER_SAVE_MODE, // Device power save mode (provided by PowerManager)
+ // True indicates the device is in power save mode.
+ RIL_DST_CHARGING_STATE, // Device charging state (provided by BatteryManager)
+ // True indicates the device is charging.
+ RIL_DST_LOW_DATA_EXPECTED // Low data expected mode. True indicates low data traffic
+ // is expected, for example, when the device is idle
+ // (e.g. not doing tethering in the background). Note
+ // this doesn't mean no data is expected.
+} RIL_DeviceStateType;
+
+typedef enum {
+ RIL_UR_SIGNAL_STRENGTH = 0x01, // When this bit is set, modem should always send the
+ // signal strength update through
+ // RIL_UNSOL_SIGNAL_STRENGTH, otherwise suppress it.
+ RIL_UR_FULL_NETWORK_STATE = 0x02, // When this bit is set, modem should always send
+ // RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
+ // when any field in
+ // RIL_REQUEST_VOICE_REGISTRATION_STATE or
+ // RIL_REQUEST_DATA_REGISTRATION_STATE changes. When
+ // this bit is not set, modem should suppress
+ // RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
+ // only when insignificant fields change
+ // (e.g. cell info).
+ // Modem should continue sending
+ // RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
+ // when significant fields are updated even when this
+ // bit is not set. The following fields are
+ // considered significant, registration state and
+ // radio technology.
+ RIL_UR_DATA_CALL_DORMANCY_CHANGED = 0x04 // When this bit is set, modem should send the data
+ // call list changed unsolicited response
+ // RIL_UNSOL_DATA_CALL_LIST_CHANGED whenever any
+ // field in RIL_Data_Call_Response changes.
+ // Otherwise modem should suppress the unsolicited
+ // response when the only changed field is 'active'
+ // (for data dormancy). For all other fields change,
+ // modem should continue sending
+ // RIL_UNSOL_DATA_CALL_LIST_CHANGED regardless this
+ // bit is set or not.
+} RIL_UnsolicitedResponseFilter;
+
/**
* RIL_REQUEST_GET_SIM_STATUS
*
@@ -2579,10 +2693,30 @@
* 1 => PAP may be performed; CHAP is never performed.
* 2 => CHAP may be performed; PAP is never performed.
* 3 => PAP / CHAP may be performed - baseband dependent.
- * ((const char **)data)[6] is the connection type to request must be one of the
+ * ((const char **)data)[6] is the non-roaming/home connection type to request. Must be one of the
* PDP_type values in TS 27.007 section 10.1.1.
* For example, "IP", "IPV6", "IPV4V6", or "PPP".
- * ((const char **)data)[7] Optional connection property parameters, format to be defined.
+ * ((const char **)data)[7] is the roaming connection type to request. Must be one of the
+ * PDP_type values in TS 27.007 section 10.1.1.
+ * For example, "IP", "IPV6", "IPV4V6", or "PPP".
+ * ((const char **)data)[8] is the bitmask of APN type in decimal string format. The
+ * bitmask will encapsulate the following values:
+ * ia,mms,agps,supl,hipri,fota,dun,ims,default.
+ * ((const char **)data)[9] is the bearer bitmask in decimal string format. Each bit is a
+ * RIL_RadioAccessFamily. "0" or NULL indicates all RATs.
+ * ((const char **)data)[10] is the boolean in string format indicating the APN setting was
+ * sent to the modem through RIL_REQUEST_SET_DATA_PROFILE earlier.
+ * ((const char **)data)[11] is the mtu size in bytes of the mobile interface to which
+ * the apn is connected.
+ * ((const char **)data)[12] is the MVNO type:
+ * possible values are "imsi", "gid", "spn".
+ * ((const char **)data)[13] is MVNO match data in string. Can be anything defined by the carrier.
+ * For example,
+ * SPN like: "A MOBILE", "BEN NL", etc...
+ * IMSI like: "302720x94", "2060188", etc...
+ * GID like: "4E", "33", etc...
+ * ((const char **)data)[14] is the boolean string indicating data roaming is allowed or not. "1"
+ * indicates data roaming is enabled by the user, "0" indicates disabled.
*
* "response" is a RIL_Data_Call_Response_v11
*
@@ -3498,7 +3632,7 @@
#define RIL_REQUEST_OEM_HOOK_STRINGS 60
/**
- * RIL_REQUEST_SCREEN_STATE
+ * RIL_REQUEST_SCREEN_STATE - DEPRECATED
*
* Indicates the current state of the screen. When the screen is off, the
* RIL should notify the baseband to suppress certain notifications (eg,
@@ -3506,6 +3640,10 @@
* in an effort to conserve power. These notifications should resume when the
* screen is on.
*
+ * Note this request is deprecated. Use RIL_REQUEST_SEND_DEVICE_STATE to report the device state
+ * to the modem and use RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER to turn on/off unsolicited
+ * response from the modem in different scenarios.
+ *
* "data" is int *
* ((int *)data)[0] is == 1 for "Screen On"
* ((int *)data)[0] is == 0 for "Screen Off"
@@ -4258,7 +4396,7 @@
*
* Set CDMA Broadcast SMS config
*
- * "data" is an const RIL_CDMA_BroadcastSmsConfigInfo **
+ * "data" is a const RIL_CDMA_BroadcastSmsConfigInfo **
* "datalen" is count * sizeof(const RIL_CDMA_BroadcastSmsConfigInfo *)
*
* "response" is NULL
@@ -5015,7 +5153,7 @@
*
* Set data profile in modem
* Modem should erase existed profiles from framework, and apply new profiles
- * "data" is an const RIL_DataProfileInfo **
+ * "data" is a const RIL_DataProfileInfo **
* "datalen" is count * sizeof(const RIL_DataProfileInfo *)
* "response" is NULL
*
@@ -5197,6 +5335,46 @@
*/
#define RIL_REQUEST_GET_CARRIER_RESTRICTIONS 137
+/**
+ * RIL_REQUEST_SEND_DEVICE_STATE
+ *
+ * Send the updated device state.
+ * Modem can perform power saving based on the provided device state.
+ * "data" is const int *
+ * ((const int*)data)[0] A RIL_DeviceStateType that specifies the device state type.
+ * ((const int*)data)[1] Specifies the state. See RIL_DeviceStateType for the definition of each
+ * type.
+ *
+ * "datalen" is count * sizeof(const RIL_DeviceState *)
+ * "response" is NULL
+ *
+ * Valid errors:
+ * SUCCESS
+ * RADIO_NOT_AVAILABLE (radio resetting)
+ */
+#define RIL_REQUEST_SEND_DEVICE_STATE 138
+
+/**
+ * RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER
+ *
+ * Set the unsolicited response filter
+ * This is used to prevent unnecessary application processor
+ * wake up for power saving purposes by suppressing the
+ * unsolicited responses in certain scenarios.
+ *
+ * "data" is an int *
+ *
+ * ((int *)data)[0] is a 32-bit bitmask of RIL_UnsolicitedResponseFilter
+ *
+ * "response" is NULL
+ *
+ * Valid errors:
+ * SUCCESS
+ * INVALID_ARGUMENTS (e.g. the requested filter doesn't exist)
+ * RADIO_NOT_AVAILABLE (radio resetting)
+ */
+#define RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER 139
+
/***********************************************************************/
/**
@@ -5955,14 +6133,41 @@
} RIL_RadioFunctions;
typedef struct {
- char *apn;
- char *protocol;
- int authtype;
- char *username;
- char *password;
+ char *apn; /* the APN to connect to */
+ char *protocol; /* one of the PDP_type values in TS 27.007 section 10.1.1 used on
+ roaming network. For example, "IP", "IPV6", "IPV4V6", or "PPP".*/
+ int authtype; /* authentication protocol used for this PDP context
+ (None: 0, PAP: 1, CHAP: 2, PAP&CHAP: 3) */
+ char *username; /* the username for APN, or NULL */
+ char *password; /* the password for APN, or NULL */
} RIL_InitialAttachApn;
typedef struct {
+ char *apn; /* the APN to connect to */
+ char *protocol; /* one of the PDP_type values in TS 27.007 section 10.1.1 used on
+ home network. For example, "IP", "IPV6", "IPV4V6", or "PPP". */
+ char *roamingProtocol; /* one of the PDP_type values in TS 27.007 section 10.1.1 used on
+ roaming network. For example, "IP", "IPV6", "IPV4V6", or "PPP".*/
+ int authtype; /* authentication protocol used for this PDP context
+ (None: 0, PAP: 1, CHAP: 2, PAP&CHAP: 3) */
+ char *username; /* the username for APN, or NULL */
+ char *password; /* the password for APN, or NULL */
+ int supportedTypesBitmask; /* supported APN types bitmask. See RIL_ApnTypes for the value of
+ each bit. */
+ int bearerBitmask; /* the bearer bitmask. See RIL_RadioAccessFamily for the value of
+ each bit. */
+ int modemCognitive; /* indicating the APN setting was sent to the modem through
+ setDataProfile earlier. */
+ int mtu; /* maximum transmission unit (MTU) size in bytes */
+ char *mvnoType; /* the MVNO type: possible values are "imsi", "gid", "spn" */
+ char *mvnoMatchData; /* MVNO match data. Can be anything defined by the carrier.
+ For example,
+ SPN like: "A MOBILE", "BEN NL", etc...
+ IMSI like: "302720x94", "2060188", etc...
+ GID like: "4E", "33", etc... */
+} RIL_InitialAttachApn_v15;
+
+typedef struct {
int authContext; /* P2 value of authentication command, see P2 parameter in
3GPP TS 31.102 7.1.2 */
char *authData; /* the challenge string in Base64 format, see 3GPP
@@ -5972,16 +6177,16 @@
} RIL_SimAuthentication;
typedef struct {
- int cid; /* Context ID, uniquely identifies this call */
- char *bearer_proto; /* One of the PDP_type values in TS 27.007 section 10.1.1.
- For example, "IP", "IPV6", "IPV4V6" */
- int pco_id; /* The protocol ID for this box. Note that only IDs from
- FF00H - FFFFH are accepted. If more than one is included
- from the network, multiple calls should be made to send all
- of them. */
- int contents_length; /* The number of octets in the contents. */
- char *contents; /* Carrier-defined content. It is binary, opaque and
- loosely defined in LTE Layer 3 spec 24.008 */
+ int cid; /* Context ID, uniquely identifies this call */
+ char *bearer_proto; /* One of the PDP_type values in TS 27.007 section 10.1.1.
+ For example, "IP", "IPV6", "IPV4V6". */
+ int pco_id; /* The protocol ID for this box. Note that only IDs from
+ FF00H - FFFFH are accepted. If more than one is included
+ from the network, multiple calls should be made to send all
+ of them. */
+ int contents_length; /* The number of octets in the contents. */
+ char *contents; /* Carrier-defined content. It is binary, opaque and
+ loosely defined in LTE Layer 3 spec 24.008 */
} RIL_PCO_Data;
#ifdef RIL_SHLIB
diff --git a/libril/ril_service.cpp b/libril/ril_service.cpp
index d9e68aa..f1ff55a 100644
--- a/libril/ril_service.cpp
+++ b/libril/ril_service.cpp
@@ -135,13 +135,10 @@
Return<void> sendSMSExpectMore(int32_t serial, const GsmSmsMessage& message);
Return<void> setupDataCall(int32_t serial,
- int32_t radioTechnology,
- int32_t profile,
- const ::android::hardware::hidl_string& apn,
- const ::android::hardware::hidl_string& user,
- const ::android::hardware::hidl_string& password,
- ApnAuthType authType,
- const ::android::hardware::hidl_string& protocol);
+ RadioTechnology radioTechnology,
+ const DataProfileInfo& profileInfo,
+ bool modemCognitive,
+ bool roamingAllowed);
Return<void> iccIOForApp(int32_t serial,
const IccIo& iccIo);
@@ -333,12 +330,8 @@
Return<void> setCellInfoListRate(int32_t serial, int32_t rate);
- Return<void> setInitialAttachApn(int32_t serial,
- const ::android::hardware::hidl_string& apn,
- const ::android::hardware::hidl_string& protocol,
- ApnAuthType authType,
- const ::android::hardware::hidl_string& username,
- const ::android::hardware::hidl_string& password);
+ Return<void> setInitialAttachApn(int32_t serial, const DataProfileInfo& dataProfileInfo,
+ bool modemCognitive);
Return<void> getImsRegistrationState(int32_t serial);
@@ -396,6 +389,10 @@
Return<void> getAllowedCarriers(int32_t serial);
+ Return<void> sendDeviceState(int32_t serial, DeviceStateType deviceStateType, bool state);
+
+ Return<void> setIndicationFilter(int32_t serial, int32_t indicationFilter);
+
Return<void> responseAcknowledgement();
void checkReturnStatus(Return<void>& ret);
@@ -725,14 +722,9 @@
Return<void> RadioImpl::sendSMSExpectMore(int32_t serial, const GsmSmsMessage& message) {return Status::ok();}
-Return<void> RadioImpl::setupDataCall(int32_t serial,
- int32_t radioTechnology,
- int32_t profile,
- const ::android::hardware::hidl_string& apn,
- const ::android::hardware::hidl_string& user,
- const ::android::hardware::hidl_string& password,
- ApnAuthType authType,
- const ::android::hardware::hidl_string& protocol) {return Status::ok();}
+Return<void> RadioImpl::setupDataCall(int32_t serial, RadioTechnology radioTechnology,
+ const DataProfileInfo& dataProfileInfo, bool modemCognitive, bool roamingAllowed) {
+ return Status::ok();}
Return<void> RadioImpl::iccIOForApp(int32_t serial,
const IccIo& iccIo) {return Status::ok();}
@@ -922,12 +914,7 @@
Return<void> RadioImpl::setCellInfoListRate(int32_t serial, int32_t rate) {return Status::ok();}
-Return<void> RadioImpl::setInitialAttachApn(int32_t serial,
- const ::android::hardware::hidl_string& apn,
- const ::android::hardware::hidl_string& protocol,
- ApnAuthType authType,
- const ::android::hardware::hidl_string& username,
- const ::android::hardware::hidl_string& password) {return Status::ok();}
+Return<void> RadioImpl::setInitialAttachApn(int32_t serial, const DataProfileInfo& dataProfileInfo, bool modemCognitive) {return Status::ok();}
Return<void> RadioImpl::getImsRegistrationState(int32_t serial) {return Status::ok();}
@@ -985,6 +972,10 @@
Return<void> RadioImpl::getAllowedCarriers(int32_t serial) {return Status::ok();}
+Return<void> RadioImpl::sendDeviceState(int32_t serial, DeviceStateType deviceStateType, bool state) {return Status::ok();}
+
+Return<void> RadioImpl::setIndicationFilter(int32_t serial, int32_t indicationFilter) {return Status::ok();}
+
Return<void> RadioImpl::responseAcknowledgement() {
android::releaseWakeLock();
return Status::ok();
@@ -1313,16 +1304,16 @@
return 0;
}
-int radio::voiceNetworkStateChangedInd(android::Parcel &p, int slotId, int requestNumber,
+int radio::networkStateChangedInd(android::Parcel &p, int slotId, int requestNumber,
int indicationType, int token, RIL_Errno e, void *response,
size_t responseLen) {
if (radioService[slotId] != NULL && radioService[slotId]->mRadioIndication != NULL) {
- RLOGD("radio::voiceNetworkStateChangedInd");
- Return<void> retStatus = radioService[slotId]->mRadioIndication->voiceNetworkStateChanged(
+ RLOGD("radio::networkStateChangedInd");
+ Return<void> retStatus = radioService[slotId]->mRadioIndication->networkStateChanged(
convertIntToRadioIndicationType(indicationType));
radioService[slotId]->checkReturnStatus(retStatus);
} else {
- RLOGE("radio::voiceNetworkStateChangedInd: radioService[%d]->mRadioIndication == NULL",
+ RLOGE("radio::networkStateChangedInd: radioService[%d]->mRadioIndication == NULL",
slotId);
}
diff --git a/libril/ril_service.h b/libril/ril_service.h
index 71b72bf..84482e3 100644
--- a/libril/ril_service.h
+++ b/libril/ril_service.h
@@ -49,7 +49,7 @@
int callStateChangedInd(android::Parcel &p, int slotId, int requestNumber, int indType, int token,
RIL_Errno e, void *response, size_t responselen);
-int voiceNetworkStateChangedInd(android::Parcel &p, int slotId, int requestNumber, int indType,
+int networkStateChangedInd(android::Parcel &p, int slotId, int requestNumber, int indType,
int token, RIL_Errno e, void *response, size_t responselen);
int newSmsInd(android::Parcel &p, int slotId, int requestNumber, int indicationType,
diff --git a/libril/ril_unsol_commands.h b/libril/ril_unsol_commands.h
index f5f0474..04375d3 100644
--- a/libril/ril_unsol_commands.h
+++ b/libril/ril_unsol_commands.h
@@ -17,7 +17,7 @@
{RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED, responseVoid, WAKE_PARTIAL},
{RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED, radio::callStateChangedInd, WAKE_PARTIAL},
- {RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED, radio::voiceNetworkStateChangedInd, WAKE_PARTIAL},
+ {RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED, radio::networkStateChangedInd, WAKE_PARTIAL},
{RIL_UNSOL_RESPONSE_NEW_SMS, radio::newSmsInd, WAKE_PARTIAL},
{RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT, radio::newSmsStatusReportInd, WAKE_PARTIAL},
{RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM, radio::newSmsOnSimInd, WAKE_PARTIAL},