Add methods for SIM functionality 82/118182/1 accepted/tizen/common/20170313.162513 accepted/tizen/ivi/20170313.043020 accepted/tizen/mobile/20170313.042933 accepted/tizen/tv/20170313.042949 accepted/tizen/unified/20170313.043038 accepted/tizen/wearable/20170313.043006 submit/tizen/20170313.021013
authorsinikang <sinikang@samsung.com>
Thu, 9 Mar 2017 06:13:01 +0000 (15:13 +0900)
committersinikang <sinikang@samsung.com>
Thu, 9 Mar 2017 06:13:01 +0000 (15:13 +0900)
 - GetCdmaImsi, AccessRsimIo

Change-Id: I8e5856bdbd70a362a336b4436e9d2a32f1e4c6c8

introspection/sim.xml
packaging/tel-plugin-dbus_tapi.spec
src/dtapi_sim.c

index ebcc87b..86202f0 100644 (file)
                        <arg direction="out" type="v" name="resp_apdu"/>
                </method>
 
+               <method name="AccessRsimIo">
+                       <arg direction="in" type="i" name="field"/>
+                       <arg direction="in" type="v" name="rsimio"/>
+                       <arg direction="in" type="i" name="rec_index"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
                <method name="GetATR">
                        <arg direction="out" type="i" name="result"/>
                        <arg direction="out" type="v" name="atr"/>
                        <arg direction="out" type="v" name="ist"/>
                </method>
 
+               <method name="GetCdmaimsi">
+                       <arg direction="out" type="i" name="result"/>
+                       <arg direction="out" type="i" name="provisioned"/>
+                       <arg direction="out" type="s" name="min"/>
+               </method>
+
                <signal name="Status">
                        <arg type="i" name="status"/>
                </signal>
index 28ecff7..625fd7b 100644 (file)
@@ -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}
index 40a12d0..acd8fda 100644 (file)
@@ -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)
 {
@@ -1947,6 +2012,10 @@ gboolean dbus_plugin_setup_sim_interface(TelephonyObjectSkeleton *object,
                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;