From 3d0f2ecf126734e96ad1f18d7e069ded3711b9f8 Mon Sep 17 00:00:00 2001 From: Norbert Frese Date: Sun, 31 Jan 2010 11:06:55 -0800 Subject: core: add an UnlockRequired property that provides lock status (bgo #604551) Clients can check the property to determine lock/unlock status and thus unlock the modem before trying to connect if required. Bits of the patch by dcbw (see the bug). --- src/mm-modem-base.c | 30 ++++++++++++++++++++++++++++++ src/mm-modem-base.h | 3 +++ src/mm-modem.c | 9 +++++++++ src/mm-modem.h | 4 +++- 4 files changed, 45 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/mm-modem-base.c b/src/mm-modem-base.c index 3d82f8e8..af4f832f 100644 --- a/src/mm-modem-base.c +++ b/src/mm-modem-base.c @@ -39,6 +39,7 @@ typedef struct { char *driver; char *plugin; char *device; + char *unlock_required; guint32 ip_method; gboolean valid; MMModemState state; @@ -169,6 +170,26 @@ mm_modem_base_get_valid (MMModemBase *self) return MM_MODEM_BASE_GET_PRIVATE (self)->valid; } +void mm_modem_base_set_unlock_required (MMModemBase *self, const char *unlock_required) +{ + MMModemBasePrivate *priv; + + g_return_if_fail (self != NULL); + g_return_if_fail (MM_IS_MODEM_BASE (self)); + + priv = MM_MODEM_BASE_GET_PRIVATE (self); + + /* Only do something if the value changes */ + if (priv->unlock_required == unlock_required + || (priv->unlock_required && unlock_required + && !strcmp(priv->unlock_required, unlock_required))) + return; + + g_free (priv->unlock_required); + priv->unlock_required = g_strdup (unlock_required); + g_object_notify (G_OBJECT (self), MM_MODEM_UNLOCK_REQUIRED); +} + /*****************************************************************************/ static void @@ -227,6 +248,7 @@ set_property (GObject *object, guint prop_id, case MM_MODEM_PROP_VALID: case MM_MODEM_PROP_TYPE: case MM_MODEM_PROP_ENABLED: + case MM_MODEM_PROP_UNLOCK_REQUIRED: break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -268,6 +290,9 @@ get_property (GObject *object, guint prop_id, case MM_MODEM_PROP_ENABLED: g_value_set_boolean (value, is_enabled (priv->state)); break; + case MM_MODEM_PROP_UNLOCK_REQUIRED: + g_value_set_string (value, priv->unlock_required); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -284,6 +309,7 @@ finalize (GObject *object) g_free (priv->driver); g_free (priv->plugin); g_free (priv->device); + g_free (priv->unlock_required); G_OBJECT_CLASS (mm_modem_base_parent_class)->finalize (object); } @@ -336,6 +362,10 @@ mm_modem_base_class_init (MMModemBaseClass *klass) MM_MODEM_PROP_ENABLED, MM_MODEM_ENABLED); + g_object_class_override_property (object_class, + MM_MODEM_PROP_UNLOCK_REQUIRED, + MM_MODEM_UNLOCK_REQUIRED); + mm_properties_changed_signal_new (object_class); } diff --git a/src/mm-modem-base.h b/src/mm-modem-base.h index 9eb64ce0..9078f3f2 100644 --- a/src/mm-modem-base.h +++ b/src/mm-modem-base.h @@ -60,5 +60,8 @@ void mm_modem_base_set_valid (MMModemBase *self, gboolean mm_modem_base_get_valid (MMModemBase *self); +void mm_modem_base_set_unlock_required (MMModemBase *self, + const char *unlock_required); + #endif /* MM_MODEM_BASE_H */ diff --git a/src/mm-modem.c b/src/mm-modem.c index a65d8831..5bb2ef6b 100644 --- a/src/mm-modem.c +++ b/src/mm-modem.c @@ -694,6 +694,15 @@ mm_modem_init (gpointer g_iface) FALSE, G_PARAM_READABLE)); + g_object_interface_install_property + (g_iface, + g_param_spec_string (MM_MODEM_UNLOCK_REQUIRED, + "UnlockRequired", + "Whether or not the modem requires an unlock " + "code to become usable, and if so, which unlock code is required", + NULL, + G_PARAM_READABLE)); + /* Signals */ g_signal_new ("state-changed", iface_type, diff --git a/src/mm-modem.h b/src/mm-modem.h index e8dd7ea2..ead2cca5 100644 --- a/src/mm-modem.h +++ b/src/mm-modem.h @@ -55,6 +55,7 @@ typedef enum { #define MM_MODEM_TYPE "type" #define MM_MODEM_IP_METHOD "ip-method" #define MM_MODEM_ENABLED "enabled" +#define MM_MODEM_UNLOCK_REQUIRED "unlock-required" #define MM_MODEM_VALID "valid" /* not exported */ #define MM_MODEM_PLUGIN "plugin" /* not exported */ #define MM_MODEM_STATE "state" /* not exported */ @@ -78,7 +79,8 @@ typedef enum { MM_MODEM_PROP_VALID, /* Not exported */ MM_MODEM_PROP_PLUGIN, /* Not exported */ MM_MODEM_PROP_STATE, /* Not exported */ - MM_MODEM_PROP_ENABLED + MM_MODEM_PROP_ENABLED, + MM_MODEM_PROP_UNLOCK_REQUIRED } MMModemProp; typedef struct _MMModem MMModem; -- cgit v1.2.3-70-g09d2