diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-generic-cdma.c | 118 | ||||
-rw-r--r-- | src/mm-generic-gsm.c | 124 | ||||
-rw-r--r-- | src/mm-modem-base.c | 142 | ||||
-rw-r--r-- | src/mm-modem-base.h | 5 |
4 files changed, 168 insertions, 221 deletions
diff --git a/src/mm-generic-cdma.c b/src/mm-generic-cdma.c index 735f2f31..74878265 100644 --- a/src/mm-generic-cdma.c +++ b/src/mm-generic-cdma.c @@ -36,17 +36,19 @@ static void simple_reg_callback (MMModemCdma *modem, static void simple_state_machine (MMModem *modem, GError *error, gpointer user_data); -static gpointer mm_generic_cdma_parent_class = NULL; +static void modem_init (MMModem *modem_class); +static void modem_cdma_init (MMModemCdma *cdma_class); +static void modem_simple_init (MMModemSimple *class); + +G_DEFINE_TYPE_EXTENDED (MMGenericCdma, mm_generic_cdma, MM_TYPE_MODEM_BASE, 0, + G_IMPLEMENT_INTERFACE (MM_TYPE_MODEM, modem_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_MODEM_CDMA, modem_cdma_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_MODEM_SIMPLE, modem_simple_init)) #define MM_GENERIC_CDMA_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MM_TYPE_GENERIC_CDMA, MMGenericCdmaPrivate)) typedef struct { - char *driver; - char *plugin; - char *device; - guint32 signal_quality; - guint32 ip_method; gboolean valid; gboolean evdo_rev0; gboolean evdo_revA; @@ -102,10 +104,7 @@ check_valid (MMGenericCdma *self) if (priv->primary && priv->data) new_valid = TRUE; - if (priv->valid != new_valid) { - priv->valid = new_valid; - g_object_notify (G_OBJECT (self), MM_MODEM_VALID); - } + mm_modem_base_set_valid (MM_MODEM_BASE (self), new_valid); } static gboolean @@ -1477,23 +1476,7 @@ set_property (GObject *object, guint prop_id, MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_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_TYPE: - case MM_MODEM_PROP_VALID: break; case PROP_EVDO_REV0: priv->evdo_rev0 = g_value_get_boolean (value); @@ -1520,24 +1503,9 @@ get_property (GObject *object, guint prop_id, else g_value_set_string (value, NULL); break; - case MM_MODEM_PROP_MASTER_DEVICE: - g_value_set_string (value, priv->device); - 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_CDMA); 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; case PROP_EVDO_REV0: g_value_set_boolean (value, priv->evdo_rev0); break; @@ -1561,12 +1529,6 @@ dispose (GObject *object) static void finalize (GObject *object) { - MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (object); - - g_free (priv->driver); - g_free (priv->plugin); - g_free (priv->device); - G_OBJECT_CLASS (mm_generic_cdma_parent_class)->finalize (object); } @@ -1591,29 +1553,9 @@ mm_generic_cdma_class_init (MMGenericCdmaClass *klass) MM_MODEM_DATA_DEVICE); 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_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); - g_object_class_install_property (object_class, PROP_EVDO_REV0, g_param_spec_boolean (MM_GENERIC_CDMA_EVDO_REV0, "EVDO rev0", @@ -1629,45 +1571,3 @@ mm_generic_cdma_class_init (MMGenericCdmaClass *klass) G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); } -GType -mm_generic_cdma_get_type (void) -{ - static GType generic_cdma_type = 0; - - if (G_UNLIKELY (generic_cdma_type == 0)) { - static const GTypeInfo generic_cdma_type_info = { - sizeof (MMGenericCdmaClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) mm_generic_cdma_class_init, - (GClassFinalizeFunc) NULL, - NULL, /* class_data */ - sizeof (MMGenericCdma), - 0, /* n_preallocs */ - (GInstanceInitFunc) mm_generic_cdma_init, - }; - - static const GInterfaceInfo modem_iface_info = { - (GInterfaceInitFunc) modem_init - }; - - static const GInterfaceInfo modem_cdma_iface_info = { - (GInterfaceInitFunc) modem_cdma_init - }; - - static const GInterfaceInfo modem_simple_info = { - (GInterfaceInitFunc) modem_simple_init - }; - - generic_cdma_type = g_type_register_static (MM_TYPE_MODEM_BASE, - "MMGenericCdma", - &generic_cdma_type_info, - 0); - - g_type_add_interface_static (generic_cdma_type, MM_TYPE_MODEM, &modem_iface_info); - g_type_add_interface_static (generic_cdma_type, MM_TYPE_MODEM_CDMA, &modem_cdma_iface_info); - g_type_add_interface_static (generic_cdma_type, MM_TYPE_MODEM_SIMPLE, &modem_simple_info); - } - - return generic_cdma_type; -} diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c index 7df27a2e..169fca8a 100644 --- a/src/mm-generic-gsm.c +++ b/src/mm-generic-gsm.c @@ -28,7 +28,18 @@ #include "mm-callback-info.h" #include "mm-serial-parsers.h" -static gpointer mm_generic_gsm_parent_class = NULL; +static void modem_init (MMModem *modem_class); +static void modem_gsm_card_init (MMModemGsmCard *gsm_card_class); +static void modem_gsm_network_init (MMModemGsmNetwork *gsm_network_class); +static void modem_gsm_sms_init (MMModemGsmSms *gsm_sms_class); +static void modem_simple_init (MMModemSimple *class); + +G_DEFINE_TYPE_EXTENDED (MMGenericGsm, mm_generic_gsm, MM_TYPE_MODEM_BASE, 0, + G_IMPLEMENT_INTERFACE (MM_TYPE_MODEM, modem_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_MODEM_GSM_CARD, modem_gsm_card_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_MODEM_GSM_NETWORK, modem_gsm_network_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_MODEM_GSM_SMS, modem_gsm_sms_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_MODEM_SIMPLE, modem_simple_init)) #define MM_GENERIC_GSM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MM_TYPE_GENERIC_GSM, MMGenericGsmPrivate)) @@ -207,10 +218,7 @@ check_valid (MMGenericGsm *self) if (priv->primary && priv->data) new_valid = TRUE; - if (priv->valid != new_valid) { - priv->valid = new_valid; - g_object_notify (G_OBJECT (self), MM_MODEM_VALID); - } + mm_modem_base_set_valid (MM_MODEM_BASE (self), new_valid); } static gboolean @@ -1873,26 +1881,8 @@ static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { - MMGenericGsmPrivate *priv = MM_GENERIC_GSM_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: - /* Constrcut 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_TYPE: - case MM_MODEM_PROP_VALID: case MM_GENERIC_GSM_PROP_POWER_UP_CMD: case MM_GENERIC_GSM_PROP_POWER_DOWN_CMD: case MM_GENERIC_GSM_PROP_INIT_CMD: @@ -1918,24 +1908,9 @@ get_property (GObject *object, guint prop_id, else g_value_set_string (value, NULL); break; - case MM_MODEM_PROP_MASTER_DEVICE: - g_value_set_string (value, priv->device); - 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_GSM); 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; case MM_GENERIC_GSM_PROP_POWER_UP_CMD: g_value_set_string (value, "+CFUN=1"); break; @@ -1971,7 +1946,6 @@ finalize (GObject *object) mm_generic_gsm_pending_registration_stop (MM_GENERIC_GSM (object)); - g_free (priv->driver); g_free (priv->oper_code); g_free (priv->oper_name); @@ -1997,30 +1971,10 @@ mm_generic_gsm_class_init (MMGenericGsmClass *klass) MM_MODEM_DATA_DEVICE); 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_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); - - g_object_class_override_property (object_class, MM_GENERIC_GSM_PROP_SUPPORTED_BANDS, MM_MODEM_GSM_CARD_SUPPORTED_BANDS); @@ -2053,55 +2007,3 @@ mm_generic_gsm_class_init (MMGenericGsmClass *klass) G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); } -GType -mm_generic_gsm_get_type (void) -{ - static GType generic_gsm_type = 0; - - if (G_UNLIKELY (generic_gsm_type == 0)) { - static const GTypeInfo generic_gsm_type_info = { - sizeof (MMGenericGsmClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) mm_generic_gsm_class_init, - (GClassFinalizeFunc) NULL, - NULL, /* class_data */ - sizeof (MMGenericGsm), - 0, /* n_preallocs */ - (GInstanceInitFunc) mm_generic_gsm_init, - }; - - static const GInterfaceInfo modem_iface_info = { - (GInterfaceInitFunc) modem_init - }; - - static const GInterfaceInfo modem_gsm_card_info = { - (GInterfaceInitFunc) modem_gsm_card_init - }; - - static const GInterfaceInfo modem_gsm_network_info = { - (GInterfaceInitFunc) modem_gsm_network_init - }; - - static const GInterfaceInfo modem_gsm_sms_info = { - (GInterfaceInitFunc) modem_gsm_sms_init - }; - - static const GInterfaceInfo modem_simple_info = { - (GInterfaceInitFunc) modem_simple_init - }; - - generic_gsm_type = g_type_register_static (MM_TYPE_MODEM_BASE, - "MMGenericGsm", - &generic_gsm_type_info, - 0); - - g_type_add_interface_static (generic_gsm_type, MM_TYPE_MODEM, &modem_iface_info); - g_type_add_interface_static (generic_gsm_type, MM_TYPE_MODEM_GSM_CARD, &modem_gsm_card_info); - g_type_add_interface_static (generic_gsm_type, MM_TYPE_MODEM_GSM_NETWORK, &modem_gsm_network_info); - g_type_add_interface_static (generic_gsm_type, MM_TYPE_MODEM_GSM_SMS, &modem_gsm_sms_info); - g_type_add_interface_static (generic_gsm_type, MM_TYPE_MODEM_SIMPLE, &modem_simple_info); - } - - return generic_gsm_type; -} 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); } + diff --git a/src/mm-modem-base.h b/src/mm-modem-base.h index 9cb0df38..9eb64ce0 100644 --- a/src/mm-modem-base.h +++ b/src/mm-modem-base.h @@ -55,5 +55,10 @@ MMPort *mm_modem_base_add_port (MMModemBase *self, gboolean mm_modem_base_remove_port (MMModemBase *self, MMPort *port); +void mm_modem_base_set_valid (MMModemBase *self, + gboolean valid); + +gboolean mm_modem_base_get_valid (MMModemBase *self); + #endif /* MM_MODEM_BASE_H */ |