From: sinikang Date: Thu, 9 Mar 2017 06:13:01 +0000 (+0900) Subject: Add methods for SIM functionality X-Git-Tag: submit/tizen/20170313.021013^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=257c81767a2c70f49dfb7f779235aabb2d8fd59e;p=platform%2Fcore%2Ftelephony%2Ftel-plugin-dbus_tapi.git Add methods for SIM functionality - GetCdmaImsi, AccessRsimIo Change-Id: I8e5856bdbd70a362a336b4436e9d2a32f1e4c6c8 --- diff --git a/introspection/sim.xml b/introspection/sim.xml index ebcc87b..86202f0 100644 --- a/introspection/sim.xml +++ b/introspection/sim.xml @@ -236,6 +236,13 @@ + + + + + + + @@ -280,6 +287,12 @@ + + + + + + diff --git a/packaging/tel-plugin-dbus_tapi.spec b/packaging/tel-plugin-dbus_tapi.spec index 28ecff7..625fd7b 100644 --- a/packaging/tel-plugin-dbus_tapi.spec +++ b/packaging/tel-plugin-dbus_tapi.spec @@ -1,6 +1,6 @@ %define major 0 %define minor 3 -%define patchlevel 79 +%define patchlevel 80 Name: tel-plugin-dbus_tapi Version: %{major}.%{minor}.%{patchlevel} diff --git a/src/dtapi_sim.c b/src/dtapi_sim.c index 40a12d0..acd8fda 100644 --- a/src/dtapi_sim.c +++ b/src/dtapi_sim.c @@ -148,6 +148,8 @@ enum dbus_tapi_sim_gdbus_method_name { GET_PCSCF, GET_APP_LIST, GET_ISIM_SERVICE_TABLE, + ACCESS_RSIM_IO, + GET_CDMAIMSI, /* Notification */ STATUS = 100, @@ -245,6 +247,7 @@ static gboolean __check_sim_state(enum dbus_tapi_sim_gdbus_method_name method, } break; case TRANSFER_APDU: + case ACCESS_RSIM_IO: if (sim_status == SIM_STATUS_CARD_NOT_PRESENT || sim_status == SIM_STATUS_CARD_REMOVED || sim_status == SIM_STATUS_UNKNOWN @@ -272,6 +275,7 @@ static gboolean __check_sim_state(enum dbus_tapi_sim_gdbus_method_name method, case GET_PCSCF: case GET_APP_LIST: case GET_ISIM_SERVICE_TABLE: + case GET_CDMAIMSI: if (sim_status != SIM_STATUS_INIT_COMPLETED) ret = FALSE; break; @@ -1583,6 +1587,50 @@ static gboolean on_sim_transfer_apdu(TelephonySim *sim, return TRUE; } +static gboolean on_sim_access_rsim_io(TelephonySim *sim, + GDBusMethodInvocation *invocation, gint field, + GVariant *rsimio, gint rec_index, gpointer user_data) +{ + struct custom_data *ctx = user_data; + struct treq_sim_access_rsim_io req; + GVariantIter *iter = NULL; + GVariant *inner_gv = NULL; + guchar rt_i; + CoreObject *co_sim = NULL; + int i = 0; + + + DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server); + DBUS_SIM_CHECK_SIM_STATUS(invocation, ACCESS_RSIM_IO, co_sim); + DBUS_SIM_CHECK_SIM_TYPE(co_sim, "Access Rsim IO"); + + memset(&req, 0x0, sizeof(struct treq_sim_access_rsim_io)); + req.field = field; + req.rec_index= rec_index; + + inner_gv = g_variant_get_variant(rsimio); + + g_variant_get(inner_gv, "ay", &iter); + while (g_variant_iter_loop(iter, "y", &rt_i)) { + req.data[i] = rt_i; + i++; + } + req.data_len = (unsigned int)i; + g_variant_iter_free(iter); + //g_variant_unref(inner_gv); + //g_variant_unref(rsimio); + + dbg("ef_id[%x], rec_index[%d]", req.field, req.rec_index); + tcore_util_hex_dump("[RSIM_IO] ", req.data_len, req.data); + + /* Dispatch request */ + dtapi_dispatch_request(ctx, sim, invocation, + TREQ_SIM_ACCESS_RSIM_IO, + &req, sizeof(struct treq_sim_access_rsim_io)); + + return TRUE; +} + static gboolean on_sim_get_atr(TelephonySim *sim, GDBusMethodInvocation *invocation, gpointer user_data) { @@ -1816,6 +1864,23 @@ static gboolean on_sim_get_isim_service_table(TelephonySim *sim, return TRUE; } +static gboolean on_sim_get_cdmaimsi(TelephonySim *sim, + GDBusMethodInvocation *invocation, gpointer user_data) +{ + struct custom_data *ctx = user_data; + CoreObject *co_sim = NULL; + + DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server); + DBUS_SIM_CHECK_SIM_STATUS(invocation, GET_CDMAIMSI, co_sim); + + /* Dispatch request */ + dtapi_dispatch_request(ctx, sim, invocation, + TREQ_SIM_GET_CDMAIMSI, + NULL, 0); + + return TRUE; +} + gboolean dbus_plugin_setup_sim_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx) { @@ -1946,6 +2011,10 @@ gboolean dbus_plugin_setup_sim_interface(TelephonyObjectSkeleton *object, "handle-transfer-apdu", G_CALLBACK(on_sim_transfer_apdu), ctx); + g_signal_connect(sim, + "handle-access-rsim-io", + G_CALLBACK(on_sim_access_rsim_io), ctx); + g_signal_connect(sim, "handle-get-atr", G_CALLBACK(on_sim_get_atr), ctx); @@ -1982,6 +2051,10 @@ gboolean dbus_plugin_setup_sim_interface(TelephonyObjectSkeleton *object, "handle-get-isim-service-table", G_CALLBACK(on_sim_get_isim_service_table), ctx); + g_signal_connect(sim, + "handle-get-cdmaimsi", + G_CALLBACK(on_sim_get_cdmaimsi), ctx); + /* * Initialize DBUS property */ @@ -2872,6 +2945,17 @@ gboolean dbus_plugin_sim_response(struct custom_data *ctx, } break; + case TRESP_SIM_ACCESS_RSIM_IO: { + const struct tresp_sim_set_data *resp_set_data = data; + + dbg("[%s] SIM_ACCESS_RSIM_IO - Result: [%s]", cpname, + (resp_set_data->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail")); + + telephony_sim_complete_access_rsim_io(dbus_info->interface_object, + dbus_info->invocation, resp_set_data->result); + } + break; + case TRESP_SIM_GET_ATR:{ const struct tresp_sim_get_atr *resp_get_atr = data; GVariantBuilder builder; @@ -3001,6 +3085,20 @@ gboolean dbus_plugin_sim_response(struct custom_data *ctx, } break; + case TRESP_SIM_GET_CDMAIMSI: { + const struct tresp_sim_read *resp_read = data; + + dbg("[%s] SIM_GET_CDMAIMSI - Result: [%s] IMSI provision[%d] min: [%s]", cpname, + (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"), + resp_read->data.imsim.provisioned, (const gchar *)resp_read->data.imsim.min); + + telephony_sim_complete_get_cdmaimsi(dbus_info->interface_object, + dbus_info->invocation, resp_read->result, + resp_read->data.imsim.provisioned, + (const gchar *)resp_read->data.imsim.min); + } + break; + default: err("Unhandled/Unknown Response: [0x%x]", command); break;