aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-generic-gsm.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c
index 1a0a7fa9..2604b09f 100644
--- a/src/mm-generic-gsm.c
+++ b/src/mm-generic-gsm.c
@@ -190,6 +190,11 @@ static void cusd_received (MMAtSerialPort *port,
GMatchInfo *info,
gpointer user_data);
+static void clck_cb (MMAtSerialPort *port,
+ GString *response,
+ GError *error,
+ gpointer user_data);
+
#define GS_HASH_TAG "get-sms"
static GValue *simple_string_value (const char *str);
static GValue *simple_uint_value (guint32 i);
@@ -812,8 +817,6 @@ initial_info_check (MMGenericGsm *self)
}
}
-static void clck_cb (MMAtSerialPort *port, GString *response, GError *error, gpointer user_data);
-
static void
initial_facility_lock_check (MMGenericGsm *self)
{
@@ -1859,6 +1862,10 @@ mm_generic_gsm_enable_complete (MMGenericGsm *self,
if (MM_GENERIC_GSM_GET_CLASS (self)->get_allowed_mode)
MM_GENERIC_GSM_GET_CLASS (self)->get_allowed_mode (self, get_allowed_mode_done, NULL);
+ /* Try again to get facility locks */
+ if (priv->enabled_facilities == 0)
+ initial_facility_lock_check (self);
+
/* And supported character sets */
mm_modem_get_supported_charsets (MM_MODEM (self), supported_charsets_done, info);
}
@@ -6014,6 +6021,18 @@ modem_state_changed (MMGenericGsm *self, GParamSpec *pspec, gpointer user_data)
}
}
+static void
+unlock_required_changed (MMGenericGsm *self, GParamSpec *pspec, gpointer user_data)
+{
+ MMGenericGsmPrivate *priv = MM_GENERIC_GSM_GET_PRIVATE (self);
+
+ /* Some modems don't allow most commands when they're PIN locked so
+ * when they get unlocked we have to recheck various stuff.
+ */
+ if (priv->enabled_facilities == 0)
+ initial_facility_lock_check (self);
+}
+
/*****************************************************************************/
static void
@@ -6153,6 +6172,9 @@ mm_generic_gsm_init (MMGenericGsm *self)
g_signal_connect (self, "notify::" MM_MODEM_STATE,
G_CALLBACK (modem_state_changed), NULL);
+
+ g_signal_connect (self, "notify::" MM_MODEM_UNLOCK_REQUIRED,
+ G_CALLBACK (unlock_required_changed), NULL);
}
static void