diff options
-rw-r--r-- | plugins/icera/mm-iface-icera.c | 72 | ||||
-rw-r--r-- | plugins/icera/mm-iface-icera.h | 7 |
2 files changed, 79 insertions, 0 deletions
diff --git a/plugins/icera/mm-iface-icera.c b/plugins/icera/mm-iface-icera.c index fcd8c6a6..c99156ff 100644 --- a/plugins/icera/mm-iface-icera.c +++ b/plugins/icera/mm-iface-icera.c @@ -660,6 +660,78 @@ void mm_iface_icera_modem_reset (MMIfaceModem *self, } /*****************************************************************************/ +/* Load unlock retries (Modem interface) */ + +MMUnlockRetries * +mm_iface_icera_modem_load_unlock_retries_finish (MMIfaceModem *self, + GAsyncResult *res, + GError **error) +{ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) + return NULL; + return (MMUnlockRetries *) g_object_ref (g_simple_async_result_get_op_res_gpointer ( + G_SIMPLE_ASYNC_RESULT (res))); +} + +static void +load_unlock_retries_ready (MMBaseModem *self, + GAsyncResult *res, + GSimpleAsyncResult *operation_result) +{ + const gchar *response; + GError *error; + int pin1, puk1, pin2, puk2; + + + response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error); + if (!response) { + mm_dbg ("Couldn't query unlock retries: '%s'", error->message); + g_simple_async_result_take_error (operation_result, error); + g_simple_async_result_complete (operation_result); + g_object_unref (operation_result); + return; + } + + response = mm_strip_tag (response, "%PINNUM:"); + if (sscanf (response, " %d, %d, %d, %d", &pin1, &puk1, &pin2, &puk2) == 4) { + MMUnlockRetries *retries; + retries = mm_unlock_retries_new (); + mm_unlock_retries_set (retries, MM_MODEM_LOCK_SIM_PIN, pin1); + mm_unlock_retries_set (retries, MM_MODEM_LOCK_SIM_PUK, puk1); + mm_unlock_retries_set (retries, MM_MODEM_LOCK_SIM_PIN2, pin2); + mm_unlock_retries_set (retries, MM_MODEM_LOCK_SIM_PUK2, puk2); + g_simple_async_result_set_op_res_gpointer (operation_result, + retries, + (GDestroyNotify)g_object_unref); + } else { + g_simple_async_result_set_error (operation_result, + MM_CORE_ERROR, + MM_CORE_ERROR_FAILED, + "Invalid unlock retries response: '%s'", + response); + } + g_simple_async_result_complete (operation_result); + g_object_unref (operation_result); +} + +void +mm_iface_icera_modem_load_unlock_retries (MMIfaceModem *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + mm_base_modem_at_command ( + MM_BASE_MODEM (self), + "%PINNUM?", + 3, + FALSE, + (GAsyncReadyCallback)load_unlock_retries_ready, + g_simple_async_result_new (G_OBJECT (self), + callback, + user_data, + mm_iface_icera_modem_load_unlock_retries)); +} + +/*****************************************************************************/ /* Load network timezone (Time interface) */ static gboolean diff --git a/plugins/icera/mm-iface-icera.h b/plugins/icera/mm-iface-icera.h index fb13776a..2844fecf 100644 --- a/plugins/icera/mm-iface-icera.h +++ b/plugins/icera/mm-iface-icera.h @@ -91,6 +91,13 @@ gboolean mm_iface_icera_modem_reset_finish (MMIfaceModem *self, GAsyncResult *res, GError **error); +void mm_iface_icera_modem_load_unlock_retries (MMIfaceModem *self, + GAsyncReadyCallback callback, + gpointer user_data); + +MMUnlockRetries *mm_iface_icera_modem_load_unlock_retries_finish (MMIfaceModem *self, + GAsyncResult *res, + GError **error); /*****************************************************************************/ /* Modem 3GPP interface specific implementations */ |