diff options
author | Ben Chan <benchan@chromium.org> | 2013-11-30 13:19:34 -0800 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2013-12-03 10:11:16 -0600 |
commit | 1e8baaf7a2927a95945333eda97744bf7f04aa95 (patch) | |
tree | f7444421982e9909fd0595d3c25256ef81838f28 /src/mm-sim-mbim.c | |
parent | 1b34fe6c514e319bfac66e1edb89798c7c411979 (diff) |
sim-mbim: implement operator identifier and name loading
Diffstat (limited to 'src/mm-sim-mbim.c')
-rw-r--r-- | src/mm-sim-mbim.c | 138 |
1 files changed, 132 insertions, 6 deletions
diff --git a/src/mm-sim-mbim.c b/src/mm-sim-mbim.c index 66d908a6..77e83ea0 100644 --- a/src/mm-sim-mbim.c +++ b/src/mm-sim-mbim.c @@ -200,6 +200,134 @@ load_imsi (MMSim *self, } /*****************************************************************************/ +/* Load operator identifier */ + +static gchar * +load_operator_identifier_finish (MMSim *self, + GAsyncResult *res, + GError **error) +{ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) + return NULL; + return (gchar *)g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); +} + +static void +load_operator_identifier_ready (MbimDevice *device, + GAsyncResult *res, + GSimpleAsyncResult *simple) +{ + MbimMessage *response; + GError *error = NULL; + MbimProvider *provider; + + response = mbim_device_command_finish (device, res, &error); + if (response && + mbim_message_command_done_get_result (response, &error) && + mbim_message_home_provider_response_parse ( + response, + &provider, + &error)) { + g_simple_async_result_set_op_res_gpointer (simple, g_strdup (provider->provider_id), NULL); + mbim_provider_free (provider); + } else + g_simple_async_result_take_error (simple, error); + + if (response) + mbim_message_unref (response); + g_simple_async_result_complete (simple); + g_object_unref (simple); +} + +static void +load_operator_identifier (MMSim *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + MbimDevice *device; + MbimMessage *message; + GSimpleAsyncResult *result; + + if (!peek_device (self, &device, callback, user_data)) + return; + + result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, load_operator_identifier); + + message = mbim_message_home_provider_query_new (NULL); + mbim_device_command (device, + message, + 10, + NULL, + (GAsyncReadyCallback)load_operator_identifier_ready, + result); + mbim_message_unref (message); +} + +/*****************************************************************************/ +/* Load operator name */ + +static gchar * +load_operator_name_finish (MMSim *self, + GAsyncResult *res, + GError **error) +{ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) + return NULL; + return (gchar *)g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); +} + +static void +load_operator_name_ready (MbimDevice *device, + GAsyncResult *res, + GSimpleAsyncResult *simple) +{ + MbimMessage *response; + GError *error = NULL; + MbimProvider *provider; + + response = mbim_device_command_finish (device, res, &error); + if (response && + mbim_message_command_done_get_result (response, &error) && + mbim_message_home_provider_response_parse ( + response, + &provider, + &error)) { + g_simple_async_result_set_op_res_gpointer (simple, g_strdup (provider->provider_name), NULL); + mbim_provider_free (provider); + } else + g_simple_async_result_take_error (simple, error); + + if (response) + mbim_message_unref (response); + g_simple_async_result_complete (simple); + g_object_unref (simple); +} + +static void +load_operator_name (MMSim *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + MbimDevice *device; + MbimMessage *message; + GSimpleAsyncResult *result; + + if (!peek_device (self, &device, callback, user_data)) + return; + + result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, load_operator_name); + + message = mbim_message_home_provider_query_new (NULL); + mbim_device_command (device, + message, + 10, + NULL, + (GAsyncReadyCallback)load_operator_name_ready, + result); + mbim_message_unref (message); +} + +/*****************************************************************************/ /* Send PIN */ static gboolean @@ -594,6 +722,10 @@ mm_sim_mbim_class_init (MMSimMbimClass *klass) sim_class->load_sim_identifier_finish = load_sim_identifier_finish; sim_class->load_imsi = load_imsi; sim_class->load_imsi_finish = load_imsi_finish; + sim_class->load_operator_identifier = load_operator_identifier; + sim_class->load_operator_identifier_finish = load_operator_identifier_finish; + sim_class->load_operator_name = load_operator_name; + sim_class->load_operator_name_finish = load_operator_name_finish; sim_class->send_pin = send_pin; sim_class->send_pin_finish = send_pin_finish; sim_class->send_puk = send_puk; @@ -602,10 +734,4 @@ mm_sim_mbim_class_init (MMSimMbimClass *klass) sim_class->enable_pin_finish = enable_pin_finish; sim_class->change_pin = change_pin; sim_class->change_pin_finish = change_pin_finish; - - /* TODO: use MBIM_CID_HOME_PROVIDER */ - sim_class->load_operator_identifier = NULL; - sim_class->load_operator_identifier_finish = NULL; - sim_class->load_operator_name = NULL; - sim_class->load_operator_name_finish = NULL; } |