aboutsummaryrefslogtreecommitdiff
path: root/src/mm-modem-base.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-modem-base.c')
-rw-r--r--src/mm-modem-base.c142
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);
}
+