diff options
Diffstat (limited to 'src/mm-modem-base.c')
-rw-r--r-- | src/mm-modem-base.c | 142 |
1 files changed, 141 insertions, 1 deletions
diff --git a/src/mm-modem-base.c b/src/mm-modem-base.c index 30de1123..1df965f8 100644 --- a/src/mm-modem-base.c +++ b/src/mm-modem-base.c @@ -20,18 +20,31 @@ #include <string.h> #include "mm-modem-base.h" +#include "mm-modem.h" #include "mm-serial-port.h" #include "mm-errors.h" #include "mm-options.h" -G_DEFINE_TYPE (MMModemBase, mm_modem_base, G_TYPE_OBJECT) +static void modem_init (MMModem *modem_class); + +G_DEFINE_TYPE_EXTENDED (MMModemBase, mm_modem_base, + G_TYPE_OBJECT, + G_TYPE_FLAG_VALUE_ABSTRACT, + G_IMPLEMENT_INTERFACE (MM_TYPE_MODEM, modem_init)) #define MM_MODEM_BASE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MM_TYPE_MODEM_BASE, MMModemBasePrivate)) typedef struct { + char *driver; + char *plugin; + char *device; + guint32 ip_method; + gboolean valid; + GHashTable *ports; } MMModemBasePrivate; + static char * get_hash_key (const char *subsys, const char *name) { @@ -123,6 +136,29 @@ mm_modem_base_remove_port (MMModemBase *self, MMPort *port) return g_hash_table_remove (MM_MODEM_BASE_GET_PRIVATE (self)->ports, port); } +void +mm_modem_base_set_valid (MMModemBase *self, gboolean new_valid) +{ + MMModemBasePrivate *priv; + + g_return_if_fail (MM_IS_MODEM_BASE (self)); + + priv = MM_MODEM_BASE_GET_PRIVATE (self); + + if (priv->valid != new_valid) { + priv->valid = new_valid; + g_object_notify (G_OBJECT (self), MM_MODEM_VALID); + } +} + +gboolean +mm_modem_base_get_valid (MMModemBase *self) +{ + g_return_val_if_fail (MM_IS_MODEM_BASE (self), FALSE); + + return MM_MODEM_BASE_GET_PRIVATE (self)->valid; +} + /*****************************************************************************/ static void @@ -134,12 +170,85 @@ mm_modem_base_init (MMModemBase *self) } static void +modem_init (MMModem *modem_class) +{ +} + +static void +set_property (GObject *object, guint prop_id, + const GValue *value, GParamSpec *pspec) +{ + MMModemBasePrivate *priv = MM_MODEM_BASE_GET_PRIVATE (object); + + switch (prop_id) { + case MM_MODEM_PROP_DRIVER: + /* Construct only */ + priv->driver = g_value_dup_string (value); + break; + case MM_MODEM_PROP_PLUGIN: + /* Construct only */ + priv->plugin = g_value_dup_string (value); + break; + case MM_MODEM_PROP_MASTER_DEVICE: + /* Construct only */ + priv->device = g_value_dup_string (value); + break; + case MM_MODEM_PROP_IP_METHOD: + priv->ip_method = g_value_get_uint (value); + break; + case MM_MODEM_PROP_VALID: + case MM_MODEM_PROP_TYPE: + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +get_property (GObject *object, guint prop_id, + GValue *value, GParamSpec *pspec) +{ + MMModemBasePrivate *priv = MM_MODEM_BASE_GET_PRIVATE (object); + + switch (prop_id) { + case MM_MODEM_PROP_MASTER_DEVICE: + g_value_set_string (value, priv->device); + break; + case MM_MODEM_PROP_DATA_DEVICE: + g_value_set_string (value, NULL); + break; + case MM_MODEM_PROP_DRIVER: + g_value_set_string (value, priv->driver); + break; + case MM_MODEM_PROP_PLUGIN: + g_value_set_string (value, priv->plugin); + break; + case MM_MODEM_PROP_TYPE: + g_value_set_uint (value, MM_MODEM_TYPE_UNKNOWN); + break; + case MM_MODEM_PROP_IP_METHOD: + g_value_set_uint (value, priv->ip_method); + break; + case MM_MODEM_PROP_VALID: + g_value_set_boolean (value, priv->valid); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void finalize (GObject *object) { MMModemBase *self = MM_MODEM_BASE (object); MMModemBasePrivate *priv = MM_MODEM_BASE_GET_PRIVATE (self); g_hash_table_destroy (priv->ports); + g_free (priv->driver); + g_free (priv->plugin); + g_free (priv->device); G_OBJECT_CLASS (mm_modem_base_parent_class)->finalize (object); } @@ -152,5 +261,36 @@ mm_modem_base_class_init (MMModemBaseClass *klass) g_type_class_add_private (object_class, sizeof (MMModemBasePrivate)); /* Virtual methods */ + object_class->get_property = get_property; + object_class->set_property = set_property; object_class->finalize = finalize; + + g_object_class_override_property (object_class, + MM_MODEM_PROP_MASTER_DEVICE, + MM_MODEM_MASTER_DEVICE); + + g_object_class_override_property (object_class, + MM_MODEM_PROP_DATA_DEVICE, + MM_MODEM_DATA_DEVICE); + + g_object_class_override_property (object_class, + MM_MODEM_PROP_DRIVER, + MM_MODEM_DRIVER); + + g_object_class_override_property (object_class, + MM_MODEM_PROP_PLUGIN, + MM_MODEM_PLUGIN); + + g_object_class_override_property (object_class, + MM_MODEM_PROP_TYPE, + MM_MODEM_TYPE); + + g_object_class_override_property (object_class, + MM_MODEM_PROP_IP_METHOD, + MM_MODEM_IP_METHOD); + + g_object_class_override_property (object_class, + MM_MODEM_PROP_VALID, + MM_MODEM_VALID); } + |