diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2014-02-12 17:18:24 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2014-02-12 17:18:24 +0100 |
commit | e60485a4aaede4d5a85b941574bd3e12143cb501 (patch) | |
tree | dc82bd3fa374eb432a6d5e55b5c302afc20bd33e | |
parent | 5d2f15041bb17b1c6108632b862a5cfba4d76826 (diff) |
wavecom: implement after-sim-unlock step
Just give some time to the SIM to get properly initialized, so that we avoid
errors when reloading e.g. facility lock status.
-rw-r--r-- | plugins/wavecom/mm-broadband-modem-wavecom.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/plugins/wavecom/mm-broadband-modem-wavecom.c b/plugins/wavecom/mm-broadband-modem-wavecom.c index 85c96a98..022dd34d 100644 --- a/plugins/wavecom/mm-broadband-modem-wavecom.c +++ b/plugins/wavecom/mm-broadband-modem-wavecom.c @@ -1046,6 +1046,43 @@ load_access_technologies (MMIfaceModem *self, } /*****************************************************************************/ +/* After SIM unlock (Modem interface) */ + +static gboolean +modem_after_sim_unlock_finish (MMIfaceModem *self, + GAsyncResult *res, + GError **error) +{ + return TRUE; +} + +static gboolean +after_sim_unlock_wait_cb (GSimpleAsyncResult *result) +{ + g_simple_async_result_complete (result); + g_object_unref (result); + return FALSE; +} + +static void +modem_after_sim_unlock (MMIfaceModem *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GSimpleAsyncResult *result; + + /* A short wait is necessary for SIM to become ready, otherwise reloading + * facility lock states may fail with a +CME ERROR: 515 error. + */ + result = g_simple_async_result_new (G_OBJECT (self), + callback, + user_data, + modem_after_sim_unlock); + + g_timeout_add_seconds (5, (GSourceFunc)after_sim_unlock_wait_cb, result); +} + +/*****************************************************************************/ /* Flow control (Modem interface) */ static gboolean @@ -1198,6 +1235,8 @@ iface_modem_init (MMIfaceModem *iface) iface->set_current_bands_finish = set_current_bands_finish; iface->load_access_technologies = load_access_technologies; iface->load_access_technologies_finish = load_access_technologies_finish; + iface->modem_after_sim_unlock = modem_after_sim_unlock; + iface->modem_after_sim_unlock_finish = modem_after_sim_unlock_finish; iface->setup_flow_control = setup_flow_control; iface->setup_flow_control_finish = setup_flow_control_finish; iface->modem_power_up = modem_power_up; |