Merge "Add p2 option in openLogicalChannel"
diff --git a/include/telephony/ril.h b/include/telephony/ril.h
index 33f8df0..5bf5e17 100644
--- a/include/telephony/ril.h
+++ b/include/telephony/ril.h
@@ -82,6 +82,7 @@
* RIL_VoiceRegistrationStateResponse same is
* used in RIL_REQUEST_DATA_REGISTRATION_STATE and
* RIL_REQUEST_VOICE_REGISTRATION_STATE respectively.
+ * New data structure RIL_OpenChannelParams.
*/
#define RIL_VERSION 12
#define LAST_IMPRECISE_RIL_VERSION 12 // Better self-documented name
@@ -2008,6 +2009,12 @@
// bit is set or not.
} RIL_UnsolicitedResponseFilter;
+typedef struct {
+ char * aidPtr; /* AID value, See ETSI 102.221 and 101.220*/
+ int p2; /* P2 parameter (described in ISO 7816-4)
+ P2Constants:NO_P2 if to be ignored */
+} RIL_OpenChannelParams;
+
/**
* RIL_REQUEST_GET_SIM_STATUS
*
@@ -4847,9 +4854,10 @@
* RIL_REQUEST_SIM_OPEN_CHANNEL
*
* Open a new logical channel and select the given application. This command
- * reflects TS 27.007 "open logical channel" operation (+CCHO).
+ * reflects TS 27.007 "open logical channel" operation (+CCHO). This request
+ * also specifies the P2 parameter (described in ISO 7816-4).
*
- * "data" is const char * and set to AID value, See ETSI 102.221 and 101.220.
+ * "data" is a const RIL_OpenChannelParam *
*
* "response" is int *
* ((int *)data)[0] contains the session id of the logical channel.
diff --git a/libril/ril_service.cpp b/libril/ril_service.cpp
index d188400..8e377ea 100644
--- a/libril/ril_service.cpp
+++ b/libril/ril_service.cpp
@@ -368,7 +368,7 @@
Return<void> iccTransmitApduBasicChannel(int32_t serial, const SimApdu& message);
Return<void> iccOpenLogicalChannel(int32_t serial,
- const ::android::hardware::hidl_string& aid);
+ const ::android::hardware::hidl_string& aid, int32_t p2);
Return<void> iccCloseLogicalChannel(int32_t serial, int32_t channelId);
@@ -2071,11 +2071,31 @@
return Void();
}
-Return<void> RadioImpl::iccOpenLogicalChannel(int32_t serial, const hidl_string& aid) {
+Return<void> RadioImpl::iccOpenLogicalChannel(int32_t serial, const hidl_string& aid, int32_t p2) {
#if VDBG
RLOGD("iccOpenLogicalChannel: serial %d", serial);
#endif
- dispatchString(serial, mSlotId, RIL_REQUEST_SIM_OPEN_CHANNEL, aid.c_str());
+ if (s_vendorFunctions->version < 15) {
+ dispatchString(serial, mSlotId, RIL_REQUEST_SIM_OPEN_CHANNEL, aid.c_str());
+ } else {
+ RequestInfo *pRI = android::addRequestToList(serial, mSlotId, RIL_REQUEST_SIM_OPEN_CHANNEL);
+ if (pRI == NULL) {
+ return Void();
+ }
+
+ RIL_OpenChannelParams params;
+ memset (¶ms, 0, sizeof(RIL_OpenChannelParams));
+
+ params.p2 = p2;
+
+ if (!copyHidlStringToRil(¶ms.aidPtr, aid, pRI)) {
+ return Void();
+ }
+
+ s_vendorFunctions->onRequest(pRI->pCI->requestNumber, ¶ms, sizeof(params), pRI);
+
+ memsetAndFreeStrings(1, params.aidPtr);
+ }
return Void();
}