aboutsummaryrefslogtreecommitdiff
path: root/src/mm-generic-gsm.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2011-11-16 23:39:34 -0600
committerDan Williams <dcbw@redhat.com>2011-11-16 23:41:49 -0600
commit02aa10c72ab6f3bad24b0977268b0d9d56674311 (patch)
treed60707ff9034464613024fd68c0849e90ad245c3 /src/mm-generic-gsm.c
parenteede5bb621152eb1774495d9cd403b1e653c076c (diff)
gsm: check facility locks after unlocking PIN
Some modems don't allow most commands when they are PIN locked, so the initial facility lock check errors out. Check the locks again after the SIM is unlocked.
Diffstat (limited to 'src/mm-generic-gsm.c')
-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