Fix bugs in responseSimStatus and update comments.
Change-Id: I4b4e6ab712d2a5da6f9102bf818628e9c3d05f3b
diff --git a/include/telephony/ril.h b/include/telephony/ril.h
index f06089b..074817f 100644
--- a/include/telephony/ril.h
+++ b/include/telephony/ril.h
@@ -780,7 +780,7 @@
*
* "data" is NULL
*
- * "response" is const RIL_CardStatus_v5 *
+ * "response" is const RIL_CardStatus_v6 *
*
* Valid errors:
* Must never fail
@@ -1529,7 +1529,7 @@
* where it assumes all of the EF selection will be done by the
* callee.
*
- * "data" is a const RIL_SIM_IO_v5 *
+ * "data" is a const RIL_SIM_IO_v6 *
* Please note that RIL_SIM_IO has a "PIN2" field which may be NULL,
* or may specify a PIN2 for operations that require a PIN2 (eg
* updating FDN records)
@@ -1829,6 +1829,8 @@
* ((const char **)data)[2] is the TS 27.007 service class bit vector of
* services to query
* ((const char **)data)[3] is AID value, See ETSI 102.221 8.1 and 101.220 4, NULL if no value.
+ * This is only applicable in the case of Fixed Dialing Numbers
+ * (FDN) requests.
*
* "response" is an int *
* ((const int *)response) 0 is the TS 27.007 service class bit vector of
@@ -1859,6 +1861,8 @@
* service class bit vector. Eg, the string
* "1" means "set this facility for voice services"
* ((const char **)data)[4] = AID value, See ETSI 102.221 8.1 and 101.220 4, NULL if no value.
+ * This is only applicable in the case of Fixed Dialing Numbers
+ * (FDN) requests.
*
* "response" is int *
* ((int *)response)[0] is the number of retries remaining, or -1 if unknown
diff --git a/libril/ril.cpp b/libril/ril.cpp
index 25f09ca..b78bda0 100644
--- a/libril/ril.cpp
+++ b/libril/ril.cpp
@@ -2049,6 +2049,34 @@
triggerEvLoop();
}
+static void sendSimStatusAppInfo(Parcel &p, int num_apps, RIL_AppStatus appStatus[]) {
+ p.writeInt32(num_apps);
+ startResponse;
+ for (int i = 0; i < num_apps; i++) {
+ p.writeInt32(appStatus[i].app_type);
+ p.writeInt32(appStatus[i].app_state);
+ p.writeInt32(appStatus[i].perso_substate);
+ writeStringToParcel(p, (const char*)(appStatus[i].aid_ptr));
+ writeStringToParcel(p, (const char*)
+ (appStatus[i].app_label_ptr));
+ p.writeInt32(appStatus[i].pin1_replaced);
+ p.writeInt32(appStatus[i].pin1);
+ p.writeInt32(appStatus[i].pin2);
+ appendPrintBuf("%s[app_type=%d,app_state=%d,perso_substate=%d,\
+ aid_ptr=%s,app_label_ptr=%s,pin1_replaced=%d,pin1=%d,pin2=%d],",
+ printBuf,
+ appStatus[i].app_type,
+ appStatus[i].app_state,
+ appStatus[i].perso_substate,
+ appStatus[i].aid_ptr,
+ appStatus[i].app_label_ptr,
+ appStatus[i].pin1_replaced,
+ appStatus[i].pin1,
+ appStatus[i].pin2);
+ }
+ closeResponse;
+}
+
static int responseSimStatus(Parcel &p, void *response, size_t responselen) {
int i;
@@ -2062,46 +2090,27 @@
return RIL_ERRNO_INVALID_RESPONSE;
}
- RIL_CardStatus_v6 *p_cur = ((RIL_CardStatus_v6 *) response);
-
- p.writeInt32(p_cur->card_state);
- p.writeInt32(p_cur->universal_pin_state);
- p.writeInt32(p_cur->gsm_umts_subscription_app_index);
- p.writeInt32(p_cur->cdma_subscription_app_index);
-
if (s_callbacks.version == 6) {
- p.writeInt32(p_cur->ims_subscription_app_index);
- } else {
- p.writeInt32(-1);
- }
-
- p.writeInt32(p_cur->cdma_subscription_app_index);
- p.writeInt32(p_cur->num_applications);
+ RIL_CardStatus_v6 *p_cur = ((RIL_CardStatus_v6 *) response);
- startResponse;
- for (i = 0; i < p_cur->num_applications; i++) {
- p.writeInt32(p_cur->applications[i].app_type);
- p.writeInt32(p_cur->applications[i].app_state);
- p.writeInt32(p_cur->applications[i].perso_substate);
- writeStringToParcel(p, (const char*)(p_cur->applications[i].aid_ptr));
- writeStringToParcel(p, (const char*)
- (p_cur->applications[i].app_label_ptr));
- p.writeInt32(p_cur->applications[i].pin1_replaced);
- p.writeInt32(p_cur->applications[i].pin1);
- p.writeInt32(p_cur->applications[i].pin2);
- appendPrintBuf("%s[app_type=%d,app_state=%d,perso_substate=%d,\
- aid_ptr=%s,app_label_ptr=%s,pin1_replaced=%d,pin1=%d,pin2=%d],",
- printBuf,
- p_cur->applications[i].app_type,
- p_cur->applications[i].app_state,
- p_cur->applications[i].perso_substate,
- p_cur->applications[i].aid_ptr,
- p_cur->applications[i].app_label_ptr,
- p_cur->applications[i].pin1_replaced,
- p_cur->applications[i].pin1,
- p_cur->applications[i].pin2);
+ p.writeInt32(p_cur->card_state);
+ p.writeInt32(p_cur->universal_pin_state);
+ p.writeInt32(p_cur->gsm_umts_subscription_app_index);
+ p.writeInt32(p_cur->cdma_subscription_app_index);
+ p.writeInt32(p_cur->ims_subscription_app_index);
+
+ sendSimStatusAppInfo(p, p_cur->num_applications, p_cur->applications);
+ } else {
+ RIL_CardStatus_v5 *p_cur = ((RIL_CardStatus_v5 *) response);
+
+ p.writeInt32(p_cur->card_state);
+ p.writeInt32(p_cur->universal_pin_state);
+ p.writeInt32(p_cur->gsm_umts_subscription_app_index);
+ p.writeInt32(p_cur->cdma_subscription_app_index);
+ p.writeInt32(-1);
+
+ sendSimStatusAppInfo(p, p_cur->num_applications, p_cur->applications);
}
- closeResponse;
return 0;
}