core: use G_DEFINE_TYPE_* instead of rolling our own

Use the macro; save some trees.
This commit is contained in:
Dan Williams
2009-10-26 17:56:48 -07:00
parent 2887a50b23
commit 49b5ffd076
16 changed files with 234 additions and 617 deletions
+9 -109
View File
@@ -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);
}
@@ -1590,30 +1552,10 @@ mm_generic_cdma_class_init (MMGenericCdmaClass *klass)
MM_MODEM_PROP_DATA_DEVICE,
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;
}
+13 -111
View File
@@ -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);
@@ -1996,30 +1970,10 @@ mm_generic_gsm_class_init (MMGenericGsmClass *klass)
MM_MODEM_PROP_DATA_DEVICE,
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;
}
+141 -1
View File
@@ -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
@@ -133,6 +169,76 @@ mm_modem_base_init (MMModemBase *self)
priv->ports = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
}
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)
{
@@ -140,6 +246,9 @@ finalize (GObject *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);
}
+5
View File
@@ -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 */