diff options
author | Dan Williams <dcbw@redhat.com> | 2011-11-16 23:39:34 -0600 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2011-11-16 23:41:49 -0600 |
commit | 02aa10c72ab6f3bad24b0977268b0d9d56674311 (patch) | |
tree | d60707ff9034464613024fd68c0849e90ad245c3 | |
parent | eede5bb621152eb1774495d9cd403b1e653c076c (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.
-rw-r--r-- | src/mm-generic-gsm.c | 26 |
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 |