diff options
author | Sandeep Gutta <sangutta@codeaurora.org> | 2015-03-13 21:37:11 +0530 |
---|---|---|
committer | Akhila Musunuri <makhila@codeaurora.org> | 2015-03-17 19:46:40 +0530 |
commit | eb9517a1f3ff13c5e87047f15d7f8f9ef9563075 (patch) | |
tree | 1ccf8e2886e49cc50849fb80c60c23ed9411c881 | |
parent | 36c6d70ec09da6d54979cb2ea232c2b5a8e9abeb (diff) | |
parent | 2210a0276fa000ef7224f26b24f00cb34a372e8d (diff) | |
download | android_hardware_ril-eb9517a1f3ff13c5e87047f15d7f8f9ef9563075.tar.gz android_hardware_ril-eb9517a1f3ff13c5e87047f15d7f8f9ef9563075.tar.bz2 android_hardware_ril-eb9517a1f3ff13c5e87047f15d7f8f9ef9563075.zip |
Merge tag 'android-5.1.0_r1' into HEAD.
Android 5.1.0 release 1
Conflicts:
include/telephony/ril.h
libril/ril.cpp
libril/ril_commands.h
libril/ril_unsol_commands.h
reference-ril/reference-ril.c
Change-Id: Ie08131e365a002c461c2339c8e31c76001b3cc3d
-rw-r--r-- | include/telephony/ril.h | 169 | ||||
-rwxr-xr-x | libril/ril.cpp | 181 | ||||
-rw-r--r-- | libril/ril_commands.h | 2 | ||||
-rwxr-xr-x | libril/ril_unsol_commands.h | 1 | ||||
-rw-r--r-- | reference-ril/reference-ril.c | 10 |
5 files changed, 294 insertions, 69 deletions
diff --git a/include/telephony/ril.h b/include/telephony/ril.h index 4d6bfb6..959b7e6 100644 --- a/include/telephony/ril.h +++ b/include/telephony/ril.h @@ -46,7 +46,7 @@ extern "C" { #define SIM_COUNT 1 #endif -#define RIL_VERSION 10 /* Current version */ +#define RIL_VERSION 11 /* Current version */ #define RIL_VERSION_MIN 6 /* Minimum RIL_VERSION supported */ #define CDMA_ALPHA_INFO_BUFFER_LENGTH 64 @@ -57,8 +57,8 @@ extern "C" { #define MAX_CLIENT_ID_LENGTH 2 #define MAX_DEBUG_SOCKET_NAME_LENGTH 12 #define MAX_QEMU_PIPE_NAME_LENGTH 11 +#define MAX_UUID_LENGTH 64 -#define FEATURE_MTU_CAF 1 typedef void * RIL_Token; @@ -100,21 +100,22 @@ typedef enum { RIL_E_FDN_CHECK_FAILURE = 14, /* command failed because recipient is not on FDN list */ RIL_E_ILLEGAL_SIM_OR_ME = 15, /* network selection failed due to illegal SIM or ME */ - RIL_E_UNUSED = 16, - RIL_E_DIAL_MODIFIED_TO_USSD = 17, /* DIAL request modified to USSD */ - RIL_E_DIAL_MODIFIED_TO_SS = 18, /* DIAL request modified to SS */ - RIL_E_DIAL_MODIFIED_TO_DIAL = 19, /* DIAL request modified to DIAL with different + RIL_E_MISSING_RESOURCE = 16, /* no logical channel available */ + RIL_E_NO_SUCH_ELEMENT = 17, /* application not found on SIM */ + RIL_E_DIAL_MODIFIED_TO_USSD = 18, /* DIAL request modified to USSD */ + RIL_E_DIAL_MODIFIED_TO_SS = 19, /* DIAL request modified to SS */ + RIL_E_DIAL_MODIFIED_TO_DIAL = 20, /* DIAL request modified to DIAL with different data */ - RIL_E_USSD_MODIFIED_TO_DIAL = 20, /* USSD request modified to DIAL */ - RIL_E_USSD_MODIFIED_TO_SS = 21, /* USSD request modified to SS */ - RIL_E_USSD_MODIFIED_TO_USSD = 22, /* USSD request modified to different USSD + RIL_E_USSD_MODIFIED_TO_DIAL = 21, /* USSD request modified to DIAL */ + RIL_E_USSD_MODIFIED_TO_SS = 22, /* USSD request modified to SS */ + RIL_E_USSD_MODIFIED_TO_USSD = 23, /* USSD request modified to different USSD request */ - RIL_E_SS_MODIFIED_TO_DIAL = 23, /* SS request modified to DIAL */ - RIL_E_SS_MODIFIED_TO_USSD = 24, /* SS request modified to USSD */ - RIL_E_SS_MODIFIED_TO_SS = 25, /* SS request modified to different SS request */ + RIL_E_SS_MODIFIED_TO_DIAL = 24, /* SS request modified to DIAL */ + RIL_E_SS_MODIFIED_TO_USSD = 25, /* SS request modified to USSD */ RIL_E_SUBSCRIPTION_NOT_SUPPORTED = 26, /* Subscription not supported by RIL */ - RIL_E_MISSING_RESOURCE = 27, /* no logical channel available */ - RIL_E_NO_SUCH_ELEMENT = 28 /* application not found on SIM */ + RIL_E_SS_MODIFIED_TO_SS = 27 /* SS request modified to different SS request */ + + } RIL_Errno; typedef enum { @@ -165,6 +166,62 @@ typedef enum { RADIO_TECH_IWLAN = 18 } RIL_RadioTechnology; +typedef enum { + RAF_UNKNOWN = (1 << RADIO_TECH_UNKNOWN), + RAF_GPRS = (1 << RADIO_TECH_GPRS), + RAF_EDGE = (1 << RADIO_TECH_EDGE), + RAF_UMTS = (1 << RADIO_TECH_UMTS), + RAF_IS95A = (1 << RADIO_TECH_IS95A), + RAF_IS95B = (1 << RADIO_TECH_IS95B), + RAF_1xRTT = (1 << RADIO_TECH_1xRTT), + RAF_EVDO_0 = (1 << RADIO_TECH_EVDO_0), + RAF_EVDO_A = (1 << RADIO_TECH_EVDO_A), + RAF_HSDPA = (1 << RADIO_TECH_HSDPA), + RAF_HSUPA = (1 << RADIO_TECH_HSUPA), + RAF_HSPA = (1 << RADIO_TECH_HSPA), + RAF_EVDO_B = (1 << RADIO_TECH_EVDO_B), + RAF_EHRPD = (1 << RADIO_TECH_EHRPD), + RAF_LTE = (1 << RADIO_TECH_LTE), + RAF_HSPAP = (1 << RADIO_TECH_HSPAP), + RAF_GSM = (1 << RADIO_TECH_GSM), + RAF_TD_SCDMA = (1 << RADIO_TECH_TD_SCDMA), +} RIL_RadioAccessFamily; + +typedef enum { + RC_PHASE_CONFIGURED = 0, // LM is configured is initial value and value after FINISH completes + RC_PHASE_START = 1, // START is sent before Apply and indicates that an APPLY will be + // forthcoming with these same parameters + RC_PHASE_APPLY = 2, // APPLY is sent after all LM's receive START and returned + // RIL_RadioCapability.status = 0, if any START's fail no + // APPLY will be sent + RC_PHASE_UNSOL_RSP = 3, // UNSOL_RSP is sent with RIL_UNSOL_RADIO_CAPABILITY + RC_PHASE_FINISH = 4 // FINISH is sent after all commands have completed. If an error + // occurs in any previous command the RIL_RadioAccessesFamily and + // logicalModemUuid fields will be the prior configuration thus + // restoring the configuration to the previous value. An error + // returned by this command will generally be ignored or may + // cause that logical modem to be removed from service. +} RadioCapabilityPhase; + +typedef enum { + RC_STATUS_NONE = 0, // This parameter has no meaning with RC_PHASE_START, + // RC_PHASE_APPLY + RC_STATUS_SUCCESS = 1, // Tell modem the action transaction of set radio + // capability was success with RC_PHASE_FINISH + RC_STATUS_FAIL = 2, // Tell modem the action transaction of set radio + // capability is fail with RC_PHASE_FINISH. +} RadioCapabilityStatus; + +#define RIL_RADIO_CAPABILITY_VERSION 1 +typedef struct { + int version; // Version of structure, RIL_RADIO_CAPABILITY_VERSION + int session; // Unique session value defined by framework returned in all "responses/unsol" + int phase; // CONFIGURED, START, APPLY, FINISH + int rat; // RIL_RadioAccessFamily for the radio + char logicalModemUuid[MAX_UUID_LENGTH]; // A UUID typically "com.xxxx.lmX where X is the logical modem. + int status; // Return status and an input parameter for RC_PHASE_FINISH +} RIL_RadioCapability; + // Do we want to split Data from Voice and the use // RIL_RadioTechnology for get/setPreferredVoice/Data ? typedef enum { @@ -323,9 +380,9 @@ typedef struct { to point connections. */ char * pcscf; /* the Proxy Call State Control Function address via PCO(Protocol Configuration Option) for IMS client. */ -} RIL_Data_Call_Response_v9; // FIXME: Change to v10 +} RIL_Data_Call_Response_v9; -typedef struct __attribute__ ((__packed__)) { +typedef struct { int status; /* A RIL_DataCallFailCause, 0 which is PDP_FAIL_NONE if no error */ int suggestedRetryTime; /* If status != 0, this fields indicates the suggested retry back-off timer value RIL wants to override the one @@ -354,15 +411,12 @@ typedef struct __attribute__ ((__packed__)) { e.g., "192.0.1.3" or "192.0.1.11 2001:db8::1". May be empty in which case the addresses represent point to point connections. */ - char * pcscf; /* the Proxy Call State Control Function address - via PCO(Protocol Configuration Option) for IMS client. */ + char * pcscf; /* the Proxy Call State Control Function address + via PCO(Protocol Configuration Option) for IMS client. */ int mtu; /* MTU received from network Value <= 0 means network has either not sent a value or sent an invalid value */ - char extraByte; /* Add an extra byte to increase the size of structure to - a prime number so that we never get an array of data call - responses which can be a multiple of both v9 and v9_CAF types */ -} RIL_Data_Call_Response_v9_CAF; +} RIL_Data_Call_Response_v11; typedef enum { RADIO_TECH_3GPP = 1, /* 3GPP Technologies - GSM, WCDMA */ @@ -632,7 +686,11 @@ typedef enum { typedef enum { RIL_DATA_PROFILE_DEFAULT = 0, RIL_DATA_PROFILE_TETHERED = 1, - RIL_DATA_PROFILE_OEM_BASE = 1000 /* Start of OEM-specific profiles */ + RIL_DATA_PROFILE_IMS = 2, + RIL_DATA_PROFILE_FOTA = 3, + RIL_DATA_PROFILE_CBS = 4, + RIL_DATA_PROFILE_OEM_BASE = 1000, /* Start of OEM-specific profiles */ + RIL_DATA_PROFILE_INVALID = 0xFFFFFFFF } RIL_DataProfile; /* Used by RIL_UNSOL_SUPP_SVC_NOTIFICATION */ @@ -1190,8 +1248,6 @@ typedef struct { #define RIL_CDMA_MAX_NUMBER_OF_INFO_RECS 10 -#define RIL_HARDWARE_CONFIG_UUID_LENGTH 64 - typedef struct { char numberOfInfoRecs; RIL_CDMA_InformationRecord infoRec[RIL_CDMA_MAX_NUMBER_OF_INFO_RECS]; @@ -1236,12 +1292,12 @@ typedef struct { } RIL_HardwareConfig_Modem; typedef struct { - char modemUuid[RIL_HARDWARE_CONFIG_UUID_LENGTH]; + char modemUuid[MAX_UUID_LENGTH]; } RIL_HardwareConfig_Sim; typedef struct { RIL_HardwareConfig_Type type; - char uuid[RIL_HARDWARE_CONFIG_UUID_LENGTH]; + char uuid[MAX_UUID_LENGTH]; RIL_HardwareConfig_State state; union { RIL_HardwareConfig_Modem modem; @@ -2134,7 +2190,7 @@ typedef struct { * For example, "IP", "IPV6", "IPV4V6", or "PPP". * ((const char **)data)[7] Optional connection property parameters, format to be defined. * - * "response" is a RIL_Data_Call_Response_v6 + * "response" is a RIL_Data_Call_Response_v11 * * FIXME may need way to configure QoS settings * @@ -4278,6 +4334,7 @@ typedef struct { * RIL_REQUEST_SET_DATA_PROFILE * * Set data profile in modem + * Modem should erase existed profiles from framework, and apply new profiles * "data" is an const RIL_DataProfileInfo ** * "datalen" is count * sizeof(const RIL_DataProfileInfo *) * "response" is NULL @@ -4306,6 +4363,42 @@ typedef struct { */ #define RIL_REQUEST_SHUTDOWN 129 + +/** + * RIL_REQUEST_GET_RADIO_CAPABILITY + * + * Used to get phone radio capablility. + * + * "data" is int * + * ((int *)data)[0] is the phone radio access family defined in + * RadioAccessFamily. It's a bit mask value to represent the support type. + * + * Valid errors: + * SUCCESS + * RADIO_NOT_AVAILABLE + * GENERIC_FAILURE + */ +#define RIL_REQUEST_GET_RADIO_CAPABILITY 130 + +/** + * RIL_REQUEST_SET_RADIO_CAPABILITY + * + * Used to set the phones radio capability. Be VERY careful + * using this request as it may cause some vendor modems to reset. Because + * of the possible modem reset any RIL commands after this one may not be + * processed. + * + * "data" is the RIL_RadioCapability structure + * + * "response" is the RIL_RadioCapability structure, used to feedback return status + * + * Valid errors: + * SUCCESS means a RIL_UNSOL_RADIO_CAPABILITY will be sent within 30 seconds. + * RADIO_NOT_AVAILABLE + * GENERIC_FAILURE + */ +#define RIL_REQUEST_SET_RADIO_CAPABILITY 131 + /** * RIL_REQUEST_GET_DATA_CALL_PROFILE * @@ -4327,7 +4420,7 @@ typedef struct { * RIL_E_DATA_CALL_PROFILE_NOT_AVAILABLE * */ -#define RIL_REQUEST_GET_DATA_CALL_PROFILE 130 +#define RIL_REQUEST_GET_DATA_CALL_PROFILE 132 /** * RIL_REQUEST_SIM_GET_ATR @@ -4347,7 +4440,7 @@ typedef struct { * RADIO_NOT_AVAILABLE (radio resetting) * GENERIC_FAILURE */ -#define RIL_REQUEST_SIM_GET_ATR 131 +#define RIL_REQUEST_SIM_GET_ATR 133 /***********************************************************************/ @@ -4904,6 +4997,18 @@ typedef struct { */ #define RIL_UNSOL_DC_RT_INFO_CHANGED 1041 +/** + * RIL_UNSOL_RADIO_CAPABILITY + * + * Sent when RIL_REQUEST_SET_RADIO_CAPABILITY completes. + * Returns the phone radio capability exactly as + * RIL_REQUEST_GET_RADIO_CAPABILITY and should be the + * same set as sent by RIL_REQUEST_SET_RADIO_CAPABILITY. + * + * "data" is the RIL_RadioCapability structure + */ +#define RIL_UNSOL_RADIO_CAPABILITY 1042 + /* * RIL_UNSOL_ON_SS * @@ -4913,7 +5018,7 @@ typedef struct { * "data" is const RIL_StkCcUnsolSsResponse * * */ -#define RIL_UNSOL_ON_SS 1042 +#define RIL_UNSOL_ON_SS 1043 /** * RIL_UNSOL_STK_CC_ALPHA_NOTIFY @@ -4923,7 +5028,7 @@ typedef struct { * "data" is const char * containing ALPHA string from UICC in UTF-8 format. * */ -#define RIL_UNSOL_STK_CC_ALPHA_NOTIFY 1043 +#define RIL_UNSOL_STK_CC_ALPHA_NOTIFY 1044 /***********************************************************************/ diff --git a/libril/ril.cpp b/libril/ril.cpp index f263194..cc39525 100755 --- a/libril/ril.cpp +++ b/libril/ril.cpp @@ -277,6 +277,7 @@ static void dispatchNVWriteItem(Parcel &p, RequestInfo *pRI); static void dispatchUiccSubscripton(Parcel &p, RequestInfo *pRI); static void dispatchSimAuthentication(Parcel &p, RequestInfo *pRI); static void dispatchDataProfile(Parcel &p, RequestInfo *pRI); +static void dispatchRadioCapability(Parcel &p, RequestInfo *pRI); static int responseInts(Parcel &p, void *response, size_t responselen); static int responseStrings(Parcel &p, void *response, size_t responselen); static int responseString(Parcel &p, void *response, size_t responselen); @@ -305,6 +306,8 @@ static int responseHardwareConfig(Parcel &p, void *response, size_t responselen) static int responseSSData(Parcel &p, void *response, size_t responselen); static int responseDcRtInfo(Parcel &p, void *response, size_t responselen); static int responseGetDataCallProfile(Parcel &p, void *response, size_t responselen); +static int responseRadioCapability(Parcel &p, void *response, size_t responselen); +static int responseSSData(Parcel &p, void *response, size_t responselen); static int decodeVoiceRadioTechnology (RIL_RadioState radioState); static int decodeCdmaSubscriptionSource (RIL_RadioState radioState); @@ -384,6 +387,26 @@ strdupReadString(Parcel &p) { return strndup16to8(s16, stringlen); } +static status_t +readStringFromParcelInplace(Parcel &p, char *str, size_t maxLen) { + size_t s16Len; + const char16_t *s16; + + s16 = p.readString16Inplace(&s16Len); + if (s16 == NULL) { + return NO_MEMORY; + } + size_t strLen = strnlen16to8(s16, s16Len); + if ((strLen + 1) > maxLen) { + return NO_MEMORY; + } + if (strncpy16to8(str, s16, strLen) == NULL) { + return NO_MEMORY; + } else { + return NO_ERROR; + } +} + static void writeStringToParcel(Parcel &p, const char *s) { char16_t *s16; size_t s16_len; @@ -471,8 +494,6 @@ processCommandBuffer(void *buffer, size_t buflen, RIL_SOCKET_ID socket_id) { status = p.readInt32(&request); status = p.readInt32 (&token); - RLOGD("SOCKET %s REQUEST: %s length:%d", rilSocketIdToString(socket_id), requestToString(request), buflen); - #if (SIM_COUNT >= 2) if (socket_id == RIL_SOCKET_2) { pendingRequestsMutexHook = &s_pendingRequestsMutex_socket2; @@ -1963,6 +1984,67 @@ invalid: return; } +static void dispatchRadioCapability(Parcel &p, RequestInfo *pRI){ + RIL_RadioCapability rc; + int32_t t; + status_t status; + + memset (&rc, 0, sizeof(RIL_RadioCapability)); + + status = p.readInt32(&t); + rc.version = (int)t; + if (status != NO_ERROR) { + goto invalid; + } + + status = p.readInt32(&t); + rc.session= (int)t; + if (status != NO_ERROR) { + goto invalid; + } + + status = p.readInt32(&t); + rc.phase= (int)t; + if (status != NO_ERROR) { + goto invalid; + } + + status = p.readInt32(&t); + rc.rat = (int)t; + if (status != NO_ERROR) { + goto invalid; + } + + status = readStringFromParcelInplace(p, rc.logicalModemUuid, sizeof(rc.logicalModemUuid)); + if (status != NO_ERROR) { + goto invalid; + } + + status = p.readInt32(&t); + rc.status = (int)t; + + if (status != NO_ERROR) { + goto invalid; + } + + startRequest; + appendPrintBuf("%s [version:%d, session:%d, phase:%d, rat:%d, \ + logicalModemUuid:%s, status:%d", printBuf, rc.version, rc.session + rc.phase, rc.rat, rc.logicalModemUuid, rc.session); + + closeRequest; + printRequest(pRI->token, pRI->pCI->requestNumber); + + CALL_ONREQUEST(pRI->pCI->requestNumber, + &rc, + sizeof(RIL_RadioCapability), + pRI, pRI->socket_id); + return; +invalid: + invalidCommandBlock(pRI); + return; +} + static int blockingWrite(int fd, const void *buffer, size_t len) { size_t writeOffset = 0; @@ -2337,20 +2419,26 @@ static int responseDataCallListV6(Parcel &p, void *response, size_t responselen) return 0; } -static int responseDataCallListV9CAF(Parcel &p, void *response, size_t responselen) +static int responseDataCallListV9(Parcel &p, void *response, size_t responselen) { if (response == NULL && responselen != 0) { RLOGE("invalid response: NULL"); return RIL_ERRNO_INVALID_RESPONSE; } + if (responselen % sizeof(RIL_Data_Call_Response_v9) != 0) { + RLOGE("responseDataCallListV9: invalid response length %d expected multiple of %d", + (int)responselen, (int)sizeof(RIL_Data_Call_Response_v9)); + return RIL_ERRNO_INVALID_RESPONSE; + } + // Write version p.writeInt32(10); - int num = responselen / sizeof(RIL_Data_Call_Response_v9_CAF); + int num = responselen / sizeof(RIL_Data_Call_Response_v9); p.writeInt32(num); - RIL_Data_Call_Response_v9_CAF *p_cur = (RIL_Data_Call_Response_v9_CAF *) response; + RIL_Data_Call_Response_v9 *p_cur = (RIL_Data_Call_Response_v9 *) response; startResponse; int i; for (i = 0; i < num; i++) { @@ -2364,8 +2452,7 @@ static int responseDataCallListV9CAF(Parcel &p, void *response, size_t responsel writeStringToParcel(p, p_cur[i].dnses); writeStringToParcel(p, p_cur[i].gateways); writeStringToParcel(p, p_cur[i].pcscf); - p.writeInt32(p_cur[i].mtu); - appendPrintBuf("%s[status=%d,retry=%d,cid=%d,%s,%s,%s,%s,%s,%s,%s,mtu=%d],", printBuf, + appendPrintBuf("%s[status=%d,retry=%d,cid=%d,%s,%s,%s,%s,%s,%s,%s],", printBuf, p_cur[i].status, p_cur[i].suggestedRetryTime, p_cur[i].cid, @@ -2375,51 +2462,43 @@ static int responseDataCallListV9CAF(Parcel &p, void *response, size_t responsel (char*)p_cur[i].addresses, (char*)p_cur[i].dnses, (char*)p_cur[i].gateways, - (char*)p_cur[i].pcscf, - p_cur[i].mtu); + (char*)p_cur[i].pcscf); } - removeLastChar; closeResponse; return 0; } + static int responseDataCallList(Parcel &p, void *response, size_t responselen) { if (s_callbacks.version < 5) { RLOGD("responseDataCallList: v4"); return responseDataCallListV4(p, response, responselen); + } else if (s_callbacks.version < 10) { + return responseDataCallListV6(p, response, responselen); + } else if (responselen % sizeof(RIL_Data_Call_Response_v9) == 0) { + return responseDataCallListV9(p, response, responselen); } else { if (response == NULL && responselen != 0) { RLOGE("invalid response: NULL"); return RIL_ERRNO_INVALID_RESPONSE; } - // Support v6 only in ril version < 10 - if (s_callbacks.version < 10) { - RLOGD("responseDataCallList: v6"); - return responseDataCallListV6(p, response, responselen); - } - - if (responselen % sizeof(RIL_Data_Call_Response_v9_CAF) == 0) { - RLOGD("responseDataCallList: v9CAF"); - return responseDataCallListV9CAF(p, response, responselen); - } - - if (responselen % sizeof(RIL_Data_Call_Response_v9) != 0) { - RLOGE("responseDataCallList: invalid response length %d expected multiple of %d", - (int)responselen, (int)sizeof(RIL_Data_Call_Response_v9)); + if (responselen % sizeof(RIL_Data_Call_Response_v11) != 0) { + RLOGE("invalid response length %d expected multiple of %d", + (int)responselen, (int)sizeof(RIL_Data_Call_Response_v11)); return RIL_ERRNO_INVALID_RESPONSE; } // Write version - p.writeInt32(10); + p.writeInt32(11); - int num = responselen / sizeof(RIL_Data_Call_Response_v9); + int num = responselen / sizeof(RIL_Data_Call_Response_v11); p.writeInt32(num); - RIL_Data_Call_Response_v9 *p_cur = (RIL_Data_Call_Response_v9 *) response; + RIL_Data_Call_Response_v11 *p_cur = (RIL_Data_Call_Response_v11 *) response; startResponse; int i; for (i = 0; i < num; i++) { @@ -2433,9 +2512,8 @@ static int responseDataCallList(Parcel &p, void *response, size_t responselen) writeStringToParcel(p, p_cur[i].dnses); writeStringToParcel(p, p_cur[i].gateways); writeStringToParcel(p, p_cur[i].pcscf); - //Did not get MTU value in data call response. Send value=0 to framework - p.writeInt32(0); - appendPrintBuf("%s[status=%d,retry=%d,cid=%d,%s,%s,%s,%s,%s,%s,%s],", printBuf, + p.writeInt32(p_cur[i].mtu); + appendPrintBuf("%s[status=%d,retry=%d,cid=%d,%s,%s,%s,%s,%s,%s,%s,mtu=%d],", printBuf, p_cur[i].status, p_cur[i].suggestedRetryTime, p_cur[i].cid, @@ -2445,7 +2523,8 @@ static int responseDataCallList(Parcel &p, void *response, size_t responselen) (char*)p_cur[i].addresses, (char*)p_cur[i].dnses, (char*)p_cur[i].gateways, - (char*)p_cur[i].pcscf); + (char*)p_cur[i].pcscf, + p_cur[i].mtu); } removeLastChar; closeResponse; @@ -3201,12 +3280,47 @@ static int responseHardwareConfig(Parcel &p, void *response, size_t responselen) return 0; } +static int responseRadioCapability(Parcel &p, void *response, size_t responselen) { + if (response == NULL) { + RLOGE("invalid response: NULL"); + return RIL_ERRNO_INVALID_RESPONSE; + } + + if (responselen != sizeof (RIL_RadioCapability) ) { + RLOGE("invalid response length was %d expected %d", + (int)responselen, (int)sizeof (RIL_SIM_IO_Response)); + return RIL_ERRNO_INVALID_RESPONSE; + } + + RIL_RadioCapability *p_cur = (RIL_RadioCapability *) response; + p.writeInt32(p_cur->version); + p.writeInt32(p_cur->session); + p.writeInt32(p_cur->phase); + p.writeInt32(p_cur->rat); + writeStringToParcel(p, p_cur->logicalModemUuid); + p.writeInt32(p_cur->status); + + startResponse; + appendPrintBuf("%s[version=%d,session=%d,phase=%d,\ + rat=%s,logicalModemUuid=%s,status=%d]", + printBuf, + p_cur->version, + p_cur->session, + p_cur->phase, + p_cur->rat, + p_cur->logicalModemUuid, + p_cur->status); + closeResponse; + return 0; +} + static int responseSSData(Parcel &p, void *response, size_t responselen) { RLOGD("In responseSSData"); int num; if (response == NULL && responselen != 0) { - RLOGE("invalid response: NULL"); + RLOGE("invalid response length was %d expected %d", + (int)responselen, (int)sizeof (RIL_SIM_IO_Response)); return RIL_ERRNO_INVALID_RESPONSE; } @@ -4856,6 +4970,8 @@ requestToString(int request) { case RIL_REQUEST_SIM_CLOSE_CHANNEL: return "SIM_CLOSE_CHANNEL"; case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL: return "SIM_TRANSMIT_APDU_CHANNEL"; case RIL_REQUEST_SIM_GET_ATR: return "SIM_GET_ATR"; + case RIL_REQUEST_GET_RADIO_CAPABILITY: return "RIL_REQUEST_GET_RADIO_CAPABILITY"; + case RIL_REQUEST_SET_RADIO_CAPABILITY: return "RIL_REQUEST_SET_RADIO_CAPABILITY"; case RIL_REQUEST_SET_UICC_SUBSCRIPTION: return "SET_UICC_SUBSCRIPTION"; case RIL_REQUEST_ALLOW_DATA: return "ALLOW_DATA"; case RIL_REQUEST_GET_HARDWARE_CONFIG: return "GET_HARDWARE_CONFIG"; @@ -4907,6 +5023,7 @@ requestToString(int request) { case RIL_UNSOL_HARDWARE_CONFIG_CHANGED: return "HARDWARE_CONFIG_CHANGED"; case RIL_UNSOL_DC_RT_INFO_CHANGED: return "UNSOL_DC_RT_INFO_CHANGED"; case RIL_REQUEST_SHUTDOWN: return "SHUTDOWN"; + case RIL_UNSOL_RADIO_CAPABILITY: return "RIL_UNSOL_RADIO_CAPABILITY"; default: return "<unknown request>"; } } diff --git a/libril/ril_commands.h b/libril/ril_commands.h index e0d3cb0..a86cbff 100644 --- a/libril/ril_commands.h +++ b/libril/ril_commands.h @@ -144,5 +144,7 @@ {RIL_REQUEST_SET_DC_RT_INFO_RATE, dispatchInts, responseVoid}, {RIL_REQUEST_SET_DATA_PROFILE, dispatchDataProfile, responseVoid}, {RIL_REQUEST_SHUTDOWN, dispatchVoid, responseVoid}, + {RIL_REQUEST_GET_RADIO_CAPABILITY, dispatchVoid, responseRadioCapability}, + {RIL_REQUEST_SET_RADIO_CAPABILITY, dispatchRadioCapability, responseRadioCapability}, {RIL_REQUEST_GET_DATA_CALL_PROFILE, dispatchInts, responseGetDataCallProfile}, {RIL_REQUEST_SIM_GET_ATR, dispatchInts, responseString}, diff --git a/libril/ril_unsol_commands.h b/libril/ril_unsol_commands.h index d1f6a8f..6ea7157 100755 --- a/libril/ril_unsol_commands.h +++ b/libril/ril_unsol_commands.h @@ -56,5 +56,6 @@ {RIL_UNSOL_SRVCC_STATE_NOTIFY, responseInts, WAKE_PARTIAL}, {RIL_UNSOL_HARDWARE_CONFIG_CHANGED, responseHardwareConfig, WAKE_PARTIAL}, {RIL_UNSOL_DC_RT_INFO_CHANGED, responseDcRtInfo, WAKE_PARTIAL}, + {RIL_UNSOL_RADIO_CAPABILITY, responseRadioCapability, WAKE_PARTIAL}, {RIL_UNSOL_ON_SS, responseSSData, WAKE_PARTIAL}, {RIL_UNSOL_STK_CC_ALPHA_NOTIFY, responseString, WAKE_PARTIAL}, diff --git a/reference-ril/reference-ril.c b/reference-ril/reference-ril.c index 9feda95..24aeac4 100644 --- a/reference-ril/reference-ril.c +++ b/reference-ril/reference-ril.c @@ -452,8 +452,8 @@ static void requestOrSendDataCallList(RIL_Token *t) p_cur = p_cur->p_next) n++; - RIL_Data_Call_Response_v9_CAF *responses = - alloca(n * sizeof(RIL_Data_Call_Response_v9_CAF)); + RIL_Data_Call_Response_v11 *responses = + alloca(n * sizeof(RIL_Data_Call_Response_v11)); int i; for (i = 0; i < n; i++) { @@ -470,7 +470,7 @@ static void requestOrSendDataCallList(RIL_Token *t) responses[i].mtu = 0; } - RIL_Data_Call_Response_v9_CAF *response = responses; + RIL_Data_Call_Response_v11 *response = responses; for (p_cur = p_response->p_intermediates; p_cur != NULL; p_cur = p_cur->p_next) { char *line = p_cur->line; @@ -603,11 +603,11 @@ static void requestOrSendDataCallList(RIL_Token *t) if (t != NULL) RIL_onRequestComplete(*t, RIL_E_SUCCESS, responses, - n * sizeof(RIL_Data_Call_Response_v9_CAF)); + n * sizeof(RIL_Data_Call_Response_v11)); else RIL_onUnsolicitedResponse(RIL_UNSOL_DATA_CALL_LIST_CHANGED, responses, - n * sizeof(RIL_Data_Call_Response_v9_CAF)); + n * sizeof(RIL_Data_Call_Response_v11)); return; |