aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-broadband-modem-qmi.c68
-rw-r--r--src/mm-modem-helpers-qmi.c26
-rw-r--r--src/mm-modem-helpers-qmi.h1
3 files changed, 90 insertions, 5 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index 4021b561..849bf923 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -3347,6 +3347,68 @@ modem_3gpp_load_enabled_facility_locks_finish (MMIfaceModem3gpp *self,
}
static void
+get_sim_lock_status_via_pin_status_ready (QmiClientDms *client,
+ GAsyncResult *res,
+ LoadEnabledFacilityLocksContext *ctx)
+{
+ QmiMessageDmsUimGetPinStatusOutput *output;
+ gboolean enabled;
+
+ output = qmi_client_dms_uim_get_pin_status_finish (client, res, NULL);
+ if (!output ||
+ !qmi_message_dms_uim_get_pin_status_output_get_result (output, NULL)) {
+ mm_dbg ("Couldn't query PIN status, assuming SIM PIN is disabled");
+ enabled = FALSE;
+ } else {
+ QmiDmsUimPinStatus current_status;
+
+ if (qmi_message_dms_uim_get_pin_status_output_get_pin1_status (
+ output,
+ &current_status,
+ NULL, /* verify_retries_left */
+ NULL, /* unblock_retries_left */
+ NULL)) {
+ enabled = mm_pin_enabled_from_qmi_uim_pin_status (current_status);
+ mm_dbg ("PIN is reported %s", (enabled ? "enabled" : "disabled"));
+ } else {
+ mm_dbg ("Couldn't find PIN1 status in the result, assuming SIM PIN is disabled");
+ enabled = FALSE;
+ }
+ }
+
+ if (output)
+ qmi_message_dms_uim_get_pin_status_output_unref (output);
+
+ if (enabled) {
+ ctx->locks |= (MM_MODEM_3GPP_FACILITY_SIM);
+ } else {
+ ctx->locks &= ~(MM_MODEM_3GPP_FACILITY_SIM);
+ }
+
+ /* No more facilities to query, all done */
+ g_simple_async_result_set_op_res_gpointer (ctx->result,
+ GUINT_TO_POINTER (ctx->locks),
+ NULL);
+ load_enabled_facility_locks_context_complete_and_free (ctx);
+}
+
+/* the SIM lock cannot be queried with the qmi_get_ck_status function,
+ * therefore using the PIN status */
+static void
+get_sim_lock_status_via_pin_status (LoadEnabledFacilityLocksContext *ctx)
+{
+ mm_dbg ("Retrieving PIN status to check for enabled PIN");
+ /* if the SIM is locked or not can only be queried by locking at
+ * the PIN status */
+ qmi_client_dms_uim_get_pin_status (QMI_CLIENT_DMS (ctx->client),
+ NULL,
+ 5,
+ NULL,
+ (GAsyncReadyCallback)get_sim_lock_status_via_pin_status_ready,
+ ctx);
+}
+
+static void
dms_uim_get_ck_status_ready (QmiClientDms *client,
GAsyncResult *res,
LoadEnabledFacilityLocksContext *ctx)
@@ -3424,11 +3486,7 @@ get_next_facility_lock_status (LoadEnabledFacilityLocksContext *ctx)
}
}
- /* No more facilities to query, all done */
- g_simple_async_result_set_op_res_gpointer (ctx->result,
- GUINT_TO_POINTER (ctx->locks),
- NULL);
- load_enabled_facility_locks_context_complete_and_free (ctx);
+ get_sim_lock_status_via_pin_status (ctx);
}
static void
diff --git a/src/mm-modem-helpers-qmi.c b/src/mm-modem-helpers-qmi.c
index c673697f..7e385320 100644
--- a/src/mm-modem-helpers-qmi.c
+++ b/src/mm-modem-helpers-qmi.c
@@ -98,6 +98,32 @@ mm_modem_lock_from_qmi_uim_pin_status (QmiDmsUimPinStatus status,
/*****************************************************************************/
+gboolean
+mm_pin_enabled_from_qmi_uim_pin_status (QmiDmsUimPinStatus status)
+{
+ switch (status) {
+ case QMI_DMS_UIM_PIN_STATUS_ENABLED_NOT_VERIFIED:
+ case QMI_DMS_UIM_PIN_STATUS_ENABLED_VERIFIED:
+ case QMI_DMS_UIM_PIN_STATUS_BLOCKED:
+ case QMI_DMS_UIM_PIN_STATUS_PERMANENTLY_BLOCKED:
+ case QMI_DMS_UIM_PIN_STATUS_UNBLOCKED:
+ case QMI_DMS_UIM_PIN_STATUS_CHANGED:
+ /* assume the PIN to be enabled then */
+ return TRUE;
+
+ case QMI_DMS_UIM_PIN_STATUS_DISABLED:
+ case QMI_DMS_UIM_PIN_STATUS_NOT_INITIALIZED:
+ /* assume the PIN to be disabled then */
+ return FALSE;
+
+ default:
+ /* by default assume disabled */
+ return FALSE;
+ }
+}
+
+/*****************************************************************************/
+
QmiDmsUimFacility
mm_3gpp_facility_to_qmi_uim_facility (MMModem3gppFacility mm)
{
diff --git a/src/mm-modem-helpers-qmi.h b/src/mm-modem-helpers-qmi.h
index fb3ef8d2..a19851fd 100644
--- a/src/mm-modem-helpers-qmi.h
+++ b/src/mm-modem-helpers-qmi.h
@@ -31,6 +31,7 @@ MMModemMode mm_modem_mode_from_qmi_radio_interface (QmiDmsRadioInterface network
MMModemLock mm_modem_lock_from_qmi_uim_pin_status (QmiDmsUimPinStatus status,
gboolean pin1);
+gboolean mm_pin_enabled_from_qmi_uim_pin_status (QmiDmsUimPinStatus status);
QmiDmsUimFacility mm_3gpp_facility_to_qmi_uim_facility (MMModem3gppFacility mm);
GArray *mm_modem_bands_from_qmi_band_capabilities (QmiDmsBandCapability qmi_bands,