Extend org.freedesktop.ModemManager.Modem interface.

* Add IpMethod property with known values ppp (default), static, DHCP.
* Rename DataDevice property to Device.
* Add GetIP4Config method. It should be implemented only when IpMethod==static.
* Update org.freedesktop.ModemManager.Modem.Gsm.Sms interface based on
  Pablo Martí Gamboa's suggestions.
* Adjust MBM and HSO interfaces to take advantage of the generic Modem
  interface.
This commit is contained in:
Tambet Ingo
2009-02-06 13:34:02 +02:00
parent 19bd7d7e7f
commit fd5f4222d7
18 changed files with 370 additions and 322 deletions
+13 -4
View File
@@ -27,6 +27,7 @@ mm_generic_cdma_new (const char *serial_device, const char *driver)
return MM_MODEM (g_object_new (MM_TYPE_GENERIC_CDMA,
MM_SERIAL_DEVICE, serial_device,
MM_MODEM_DRIVER, driver,
MM_MODEM_TYPE, MM_MODEM_TYPE_CDMA,
NULL));
}
@@ -375,8 +376,9 @@ set_property (GObject *object, guint prop_id,
/* Construct only */
MM_GENERIC_CDMA_GET_PRIVATE (object)->driver = g_value_dup_string (value);
break;
case MM_MODEM_PROP_DATA_DEVICE:
case MM_MODEM_PROP_DEVICE:
case MM_MODEM_PROP_TYPE:
case MM_MODEM_PROP_IP_METHOD:
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -389,7 +391,7 @@ get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
switch (prop_id) {
case MM_MODEM_PROP_DATA_DEVICE:
case MM_MODEM_PROP_DEVICE:
g_value_set_string (value, mm_serial_get_device (MM_SERIAL (object)));
break;
case MM_MODEM_PROP_DRIVER:
@@ -398,6 +400,9 @@ get_property (GObject *object, guint prop_id,
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, MM_MODEM_IP_METHOD_PPP);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -429,8 +434,8 @@ mm_generic_cdma_class_init (MMGenericCdmaClass *klass)
/* Properties */
g_object_class_override_property (object_class,
MM_MODEM_PROP_DATA_DEVICE,
MM_MODEM_DATA_DEVICE);
MM_MODEM_PROP_DEVICE,
MM_MODEM_DEVICE);
g_object_class_override_property (object_class,
MM_MODEM_PROP_DRIVER,
@@ -439,6 +444,10 @@ mm_generic_cdma_class_init (MMGenericCdmaClass *klass)
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);
}
GType
+23 -7
View File
@@ -20,6 +20,8 @@ typedef struct {
char *data_device;
char *oper_code;
char *oper_name;
guint32 modem_type;
guint32 ip_method;
MMModemGsmNetworkRegStatus reg_status;
guint32 signal_quality;
guint32 cid;
@@ -40,6 +42,7 @@ mm_generic_gsm_new (const char *serial_device, const char *driver)
return MM_MODEM (g_object_new (MM_TYPE_GENERIC_GSM,
MM_SERIAL_DEVICE, serial_device,
MM_MODEM_DRIVER, driver,
MM_MODEM_TYPE, MM_MODEM_TYPE_GSM,
NULL));
}
@@ -1121,9 +1124,10 @@ simple_state_machine (MMModem *modem, GError *error, gpointer user_data)
gboolean need_pin = FALSE;
if (error) {
if (state == SIMPLE_STATE_CHECK_PIN && g_error_matches (error, MM_MOBILE_ERROR, MM_MOBILE_ERROR_SIM_PIN))
if (state == g_error_matches (error, MM_MOBILE_ERROR, MM_MOBILE_ERROR_SIM_PIN)) {
need_pin = TRUE;
else {
state = SIMPLE_STATE_CHECK_PIN;
} else {
info->error = g_error_copy (error);
goto out;
}
@@ -1379,11 +1383,15 @@ set_property (GObject *object, guint prop_id,
/* Construct only */
priv->driver = g_value_dup_string (value);
break;
case MM_MODEM_PROP_DATA_DEVICE:
case MM_MODEM_PROP_DEVICE:
g_free (priv->data_device);
priv->data_device = g_value_dup_string (value);
break;
case MM_MODEM_PROP_TYPE:
priv->modem_type = g_value_get_uint (value);
break;
case MM_MODEM_PROP_IP_METHOD:
priv->ip_method = g_value_get_uint (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1398,7 +1406,7 @@ get_property (GObject *object, guint prop_id,
MMGenericGsmPrivate *priv = MM_GENERIC_GSM_GET_PRIVATE (object);
switch (prop_id) {
case MM_MODEM_PROP_DATA_DEVICE:
case MM_MODEM_PROP_DEVICE:
if (priv->data_device)
g_value_set_string (value, priv->data_device);
else
@@ -1408,7 +1416,10 @@ get_property (GObject *object, guint prop_id,
g_value_set_string (value, MM_GENERIC_GSM_GET_PRIVATE (object)->driver);
break;
case MM_MODEM_PROP_TYPE:
g_value_set_uint (value, MM_MODEM_TYPE_GSM);
g_value_set_uint (value, priv->modem_type);
break;
case MM_MODEM_PROP_IP_METHOD:
g_value_set_uint (value, priv->ip_method);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1444,8 +1455,8 @@ mm_generic_gsm_class_init (MMGenericGsmClass *klass)
/* Properties */
g_object_class_override_property (object_class,
MM_MODEM_PROP_DATA_DEVICE,
MM_MODEM_DATA_DEVICE);
MM_MODEM_PROP_DEVICE,
MM_MODEM_DEVICE);
g_object_class_override_property (object_class,
MM_MODEM_PROP_DRIVER,
@@ -1454,6 +1465,11 @@ mm_generic_gsm_class_init (MMGenericGsmClass *klass)
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);
}
GType
+105 -3
View File
@@ -9,6 +9,7 @@
static void impl_modem_enable (MMModem *modem, gboolean enable, DBusGMethodInvocation *context);
static void impl_modem_connect (MMModem *modem, const char *number, DBusGMethodInvocation *context);
static void impl_modem_disconnect (MMModem *modem, DBusGMethodInvocation *context);
static void impl_modem_get_ip4_config (MMModem *modem, DBusGMethodInvocation *context);
#include "mm-modem-glue.h"
@@ -83,6 +84,97 @@ impl_modem_connect (MMModem *modem,
mm_modem_connect (modem, number, async_call_done, context);
}
static void
get_ip4_invoke (MMCallbackInfo *info)
{
MMModemIp4Fn callback = (MMModemIp4Fn) info->callback;
callback (info->modem,
GPOINTER_TO_UINT (mm_callback_info_get_data (info, "ip4-address")),
(GArray *) mm_callback_info_get_data (info, "ip4-dns"),
info->error, info->user_data);
}
void
mm_modem_get_ip4_config (MMModem *self,
MMModemIp4Fn callback,
gpointer user_data)
{
g_return_if_fail (MM_IS_MODEM (self));
g_return_if_fail (callback != NULL);
if (MM_MODEM_GET_INTERFACE (self)->get_ip4_config)
MM_MODEM_GET_INTERFACE (self)->get_ip4_config (self, callback, user_data);
else {
MMCallbackInfo *info;
info = mm_callback_info_new_full (self,
get_ip4_invoke,
G_CALLBACK (callback),
user_data);
info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED,
"Operation not supported");
mm_callback_info_schedule (info);
}
}
static void
value_array_add_uint (GValueArray *array, guint32 i)
{
GValue value = { 0, };
g_value_init (&value, G_TYPE_UINT);
g_value_set_uint (&value, i);
g_value_array_append (array, &value);
g_value_unset (&value);
}
static void
get_ip4_done (MMModem *modem,
guint32 address,
GArray *dns,
GError *error,
gpointer user_data)
{
DBusGMethodInvocation *context = (DBusGMethodInvocation *) user_data;
if (error)
dbus_g_method_return_error (context, error);
else {
GValueArray *array;
guint32 dns1 = 0;
guint32 dns2 = 0;
guint32 dns3 = 0;
array = g_value_array_new (4);
if (dns) {
if (dns->len > 0)
dns1 = g_array_index (dns, guint32, 0);
if (dns->len > 1)
dns2 = g_array_index (dns, guint32, 1);
if (dns->len > 2)
dns3 = g_array_index (dns, guint32, 2);
}
value_array_add_uint (array, address);
value_array_add_uint (array, dns1);
value_array_add_uint (array, dns2);
value_array_add_uint (array, dns3);
dbus_g_method_return (context, array);
}
}
static void
impl_modem_get_ip4_config (MMModem *modem,
DBusGMethodInvocation *context)
{
mm_modem_get_ip4_config (modem, get_ip4_done, context);
}
void
mm_modem_disconnect (MMModem *self,
MMModemFn callback,
@@ -118,9 +210,9 @@ mm_modem_init (gpointer g_iface)
/* Properties */
g_object_interface_install_property
(g_iface,
g_param_spec_string (MM_MODEM_DATA_DEVICE,
"DataDevice",
"DataDevice",
g_param_spec_string (MM_MODEM_DEVICE,
"Device",
"Device",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
@@ -140,6 +232,16 @@ mm_modem_init (gpointer g_iface)
0, G_MAXUINT32, 0,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_interface_install_property
(g_iface,
g_param_spec_uint (MM_MODEM_IP_METHOD,
"IP method",
"IP configuration method",
MM_MODEM_IP_METHOD_PPP,
MM_MODEM_IP_METHOD_DHCP,
MM_MODEM_IP_METHOD_PPP,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
initialized = TRUE;
}
+25 -5
View File
@@ -10,19 +10,25 @@
#define MM_IS_MODEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_MODEM))
#define MM_MODEM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MM_TYPE_MODEM, MMModem))
#define MM_MODEM_DATA_DEVICE "data-device"
#define MM_MODEM_DRIVER "driver"
#define MM_MODEM_TYPE "type"
#define MM_MODEM_DEVICE "device"
#define MM_MODEM_DRIVER "driver"
#define MM_MODEM_TYPE "type"
#define MM_MODEM_IP_METHOD "ip-method"
#define MM_MODEM_TYPE_GSM 1
#define MM_MODEM_TYPE_CDMA 2
#define MM_MODEM_IP_METHOD_PPP 0
#define MM_MODEM_IP_METHOD_STATIC 1
#define MM_MODEM_IP_METHOD_DHCP 2
typedef enum {
MM_MODEM_PROP_FIRST = 0x1000,
MM_MODEM_PROP_DATA_DEVICE = MM_MODEM_PROP_FIRST,
MM_MODEM_PROP_DEVICE = MM_MODEM_PROP_FIRST,
MM_MODEM_PROP_DRIVER,
MM_MODEM_PROP_TYPE
MM_MODEM_PROP_TYPE,
MM_MODEM_PROP_IP_METHOD,
} MMModemProp;
typedef struct _MMModem MMModem;
@@ -41,6 +47,12 @@ typedef void (*MMModemStringFn) (MMModem *modem,
GError *error,
gpointer user_data);
typedef void (*MMModemIp4Fn) (MMModem *modem,
guint32 address,
GArray *dns,
GError *error,
gpointer user_data);
struct _MMModem {
GTypeInterface g_iface;
@@ -55,6 +67,10 @@ struct _MMModem {
MMModemFn callback,
gpointer user_data);
void (*get_ip4_config) (MMModem *self,
MMModemIp4Fn callback,
gpointer user_data);
void (*disconnect) (MMModem *self,
MMModemFn callback,
gpointer user_data);
@@ -72,6 +88,10 @@ void mm_modem_connect (MMModem *self,
MMModemFn callback,
gpointer user_data);
void mm_modem_get_ip4_config (MMModem *self,
MMModemIp4Fn callback,
gpointer user_data);
void mm_modem_disconnect (MMModem *self,
MMModemFn callback,
gpointer user_data);
+1 -1
View File
@@ -13,7 +13,7 @@
#define MM_IS_SERIAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MM_TYPE_SERIAL))
#define MM_SERIAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_SERIAL, MMSerialClass))
#define MM_SERIAL_DEVICE "device"
#define MM_SERIAL_DEVICE "serial-device"
#define MM_SERIAL_BAUD "baud"
#define MM_SERIAL_BITS "bits"
#define MM_SERIAL_PARITY "parity"