From 02aa10c72ab6f3bad24b0977268b0d9d56674311 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 16 Nov 2011 23:39:34 -0600 Subject: 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. --- src/mm-generic-gsm.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'src') 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 -- cgit v1.2.3-70-g09d2