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:
@@ -8,7 +8,6 @@ EXTRA_DIST = \
|
||||
mm-modem-gsm-card.xml \
|
||||
mm-modem-gsm-contacts.xml \
|
||||
mm-modem-gsm-hso.xml \
|
||||
mm-modem-gsm-mbm.xml \
|
||||
mm-modem-gsm-network.xml \
|
||||
mm-modem-gsm-sms.xml \
|
||||
mm-modem-simple.xml \
|
||||
|
||||
@@ -15,26 +15,5 @@
|
||||
The password.
|
||||
</arg>
|
||||
</method>
|
||||
|
||||
<method name="GetIP4Config">
|
||||
<tp:docstring>
|
||||
Request the IP4 configuration from the device.
|
||||
</tp:docstring>
|
||||
<annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
|
||||
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_hso_get_ip4_config"/>
|
||||
<arg name="address" type="u" direction="out">
|
||||
The IP4 address.
|
||||
</arg>
|
||||
<arg name="dns" type="au" direction="out">
|
||||
The DNS addresses.
|
||||
</arg>
|
||||
</method>
|
||||
|
||||
<property name="NetworkDevice" type="s" access="read">
|
||||
<tp:docstring>
|
||||
The network device.
|
||||
</tp:docstring>
|
||||
</property>
|
||||
|
||||
</interface>
|
||||
</node>
|
||||
|
||||
@@ -26,11 +26,7 @@
|
||||
The index of the SMS.
|
||||
</tp:docstring>
|
||||
</arg>
|
||||
<arg name="sms" type="(ussd)" direction="out">
|
||||
<tp:docstring>
|
||||
The SMS structure containing index, number, contents and time stamp.
|
||||
</tp:docstring>
|
||||
</arg>
|
||||
<arg name="sms" type="a{sv}" direction="out"/>
|
||||
</method>
|
||||
|
||||
<method name="GetFormat">
|
||||
@@ -50,17 +46,37 @@
|
||||
</method>
|
||||
|
||||
<method name="List">
|
||||
<arg name="result" type="a(ussd)" direction="out"/>
|
||||
<arg name="result" type="aa{sv}" direction="out"/>
|
||||
</method>
|
||||
|
||||
<method name="Save">
|
||||
<arg name="number" type="s" direction="in"/>
|
||||
<arg name="contents" type="s" direction="in"/>
|
||||
<arg name="index" type="u" direction="out"/>
|
||||
<arg name="properties" type="a{sv}" direction="in">
|
||||
<tp:docstring>
|
||||
SMS properties to save with the following key values:
|
||||
|
||||
number : string - Phone number (mandatory)
|
||||
text : string - SMS text (mandatory)
|
||||
smsc : string - SMS service center number (optional)
|
||||
validity : uint (0..255) - Specifies when the SMS expires in SMSC (optional)
|
||||
class : uint (0..3) - Message importance and location (optional)
|
||||
</tp:docstring>
|
||||
</arg>
|
||||
<arg name="index" type="au" direction="out"/>
|
||||
</method>
|
||||
|
||||
<method name="Send">
|
||||
<arg name="result" type="u" direction="out"/>
|
||||
<arg name="properties" type="a{sv}" direction="in">
|
||||
<tp:docstring>
|
||||
SMS properties to save with the following key values:
|
||||
|
||||
number : string - Phone number (mandatory)
|
||||
text : string - SMS text (mandatory)
|
||||
smsc : string - SMS service center number (optional)
|
||||
validity : uint (0..255) - Specifies when the SMS expires in SMSC (optional)
|
||||
class : uint (0..3) - Message importance and location (optional)
|
||||
</tp:docstring>
|
||||
</arg>
|
||||
<arg name="result" type="au" direction="out"/>
|
||||
</method>
|
||||
|
||||
<method name="SendFromStorage">
|
||||
|
||||
@@ -36,9 +36,22 @@
|
||||
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_modem_disconnect"/>
|
||||
</method>
|
||||
|
||||
<property name="DataDevice" type="s" access="read">
|
||||
<method name="GetIP4Config">
|
||||
<tp:docstring>
|
||||
The serial device which can be used to start pppd.
|
||||
Request the IP4 configuration from the device.
|
||||
Note that it'll only be supported for IPMethod MM_MODEM_IP_METHOD_STATIC.
|
||||
</tp:docstring>
|
||||
<annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
|
||||
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_modem_get_ip4_config"/>
|
||||
<arg name="address" type="(uuuu)" direction="out">
|
||||
Structure containing IP4 address, DNS1, DNS2, DNS3.
|
||||
The DNS list is padded with 0's if there's less than 3 DNS servers.
|
||||
</arg>
|
||||
</method>
|
||||
|
||||
<property name="Device" type="s" access="read">
|
||||
<tp:docstring>
|
||||
The device to use for IP configuration and traffic.
|
||||
</tp:docstring>
|
||||
</property>
|
||||
|
||||
@@ -54,6 +67,12 @@
|
||||
</tp:docstring>
|
||||
</property>
|
||||
|
||||
<property name="IpMethod" type="u" access="read" tp:type="MM_MODEM_IP_METHOD">
|
||||
<tp:docstring>
|
||||
The IP configuration method.
|
||||
</tp:docstring>
|
||||
</property>
|
||||
|
||||
<tp:enum name="MM_MODEM_TYPE" type="u">
|
||||
<tp:enumvalue suffix="GSM" value="1">
|
||||
<tp:docstring>
|
||||
@@ -67,5 +86,23 @@
|
||||
</tp:enumvalue>
|
||||
</tp:enum>
|
||||
|
||||
<tp:enum name="MM_MODEM_IP_METHOD" type="u">
|
||||
<tp:enumvalue suffix="PPP" value="0">
|
||||
<tp:docstring>
|
||||
Use PPP to get the address.
|
||||
</tp:docstring>
|
||||
</tp:enumvalue>
|
||||
<tp:enumvalue suffix="STATIC" value="1">
|
||||
<tp:docstring>
|
||||
Static configuration, the modem will provide IP information.
|
||||
</tp:docstring>
|
||||
</tp:enumvalue>
|
||||
<tp:enumvalue suffix="DHCP" value="2">
|
||||
<tp:docstring>
|
||||
Use DHCP
|
||||
</tp:docstring>
|
||||
</tp:enumvalue>
|
||||
</tp:enum>
|
||||
|
||||
</interface>
|
||||
</node>
|
||||
|
||||
+1
-6
@@ -41,15 +41,11 @@ libmm_plugin_hso_la_LDFLAGS = -module -avoid-version
|
||||
# MBM
|
||||
|
||||
libmm_plugin_mbm_la_SOURCES = \
|
||||
mm-modem-gsm-mbm-glue.h \
|
||||
mm-modem-mbm.c \
|
||||
mm-modem-mbm.h \
|
||||
mm-plugin-mbm.c \
|
||||
mm-plugin-mbm.h
|
||||
|
||||
mm-modem-gsm-mbm-glue.h: $(top_srcdir)/introspection/mm-modem-gsm-mbm.xml
|
||||
dbus-binding-tool --prefix=mm_modem_gsm_mbm --mode=glib-server --output=$@ $<
|
||||
|
||||
libmm_plugin_mbm_la_CPPFLAGS = \
|
||||
$(MM_CFLAGS) \
|
||||
-I$(top_srcdir)/src
|
||||
@@ -100,7 +96,6 @@ libmm_plugin_novatel_la_LDFLAGS = -module -avoid-version
|
||||
|
||||
|
||||
BUILT_SOURCES = \
|
||||
mm-modem-gsm-hso-glue.h \
|
||||
mm-modem-gsm-mbm-glue.h
|
||||
mm-modem-gsm-hso-glue.h
|
||||
|
||||
CLEANFILES = $(BUILT_SOURCES)
|
||||
|
||||
+116
-171
@@ -20,9 +20,6 @@ static void impl_hso_authenticate (MMModemHso *self,
|
||||
const char *password,
|
||||
DBusGMethodInvocation *context);
|
||||
|
||||
static void impl_hso_get_ip4_config (MMModemHso *self,
|
||||
DBusGMethodInvocation *context);
|
||||
|
||||
#include "mm-modem-gsm-hso-glue.h"
|
||||
|
||||
static gpointer mm_modem_hso_parent_class = NULL;
|
||||
@@ -30,7 +27,6 @@ static gpointer mm_modem_hso_parent_class = NULL;
|
||||
#define MM_MODEM_HSO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MM_TYPE_MODEM_HSO, MMModemHsoPrivate))
|
||||
|
||||
typedef struct {
|
||||
char *network_device;
|
||||
GRegex *connection_enabled_regex;
|
||||
gpointer std_parser;
|
||||
|
||||
@@ -39,13 +35,6 @@ typedef struct {
|
||||
guint connect_pending_id;
|
||||
} MMModemHsoPrivate;
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_NETWORK_DEVICE,
|
||||
|
||||
LAST_PROP
|
||||
};
|
||||
|
||||
#define OWANDATA_TAG "_OWANDATA: "
|
||||
|
||||
MMModem *
|
||||
@@ -61,7 +50,9 @@ mm_modem_hso_new (const char *serial_device,
|
||||
MM_SERIAL_DEVICE, serial_device,
|
||||
MM_SERIAL_SEND_DELAY, (guint64) 10000,
|
||||
MM_MODEM_DRIVER, driver,
|
||||
MM_MODEM_HSO_NETWORK_DEVICE, network_device,
|
||||
MM_MODEM_DEVICE, network_device,
|
||||
MM_MODEM_IP_METHOD, MM_MODEM_IP_METHOD_STATIC,
|
||||
MM_MODEM_TYPE, MM_MODEM_TYPE_GSM,
|
||||
NULL));
|
||||
}
|
||||
|
||||
@@ -217,96 +208,6 @@ mm_hso_modem_authenticate (MMModemHso *self,
|
||||
auth_done (MM_SERIAL (self), NULL, NULL, info);
|
||||
}
|
||||
|
||||
static void
|
||||
free_dns_array (gpointer data)
|
||||
{
|
||||
g_array_free ((GArray *) data, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
ip4_config_invoke (MMCallbackInfo *info)
|
||||
{
|
||||
MMModemHsoIp4Fn callback = (MMModemHsoIp4Fn) info->callback;
|
||||
|
||||
callback (MM_MODEM_HSO (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);
|
||||
}
|
||||
|
||||
static void
|
||||
get_ip4_config_done (MMSerial *serial,
|
||||
GString *response,
|
||||
GError *error,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
char **items, **iter;
|
||||
GArray *dns_array;
|
||||
int i;
|
||||
guint32 tmp;
|
||||
guint cid;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto out;
|
||||
} else if (!g_str_has_prefix (response->str, OWANDATA_TAG)) {
|
||||
info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL,
|
||||
"Retrieving failed: invalid response.");
|
||||
goto out;
|
||||
}
|
||||
|
||||
cid = hso_get_cid (MM_MODEM_HSO (serial));
|
||||
dns_array = g_array_sized_new (FALSE, TRUE, sizeof (guint32), 2);
|
||||
items = g_strsplit (response->str + strlen (OWANDATA_TAG), ", ", 0);
|
||||
|
||||
for (iter = items, i = 0; *iter; iter++, i++) {
|
||||
if (i == 0) { /* CID */
|
||||
long int tmp;
|
||||
|
||||
errno = 0;
|
||||
tmp = strtol (*iter, NULL, 10);
|
||||
if (errno != 0 || tmp < 0 || (guint) tmp != cid) {
|
||||
info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL,
|
||||
"Unknown CID in OWANDATA response (got %d, expected %d)", (guint) tmp, cid);
|
||||
break;
|
||||
}
|
||||
} else if (i == 1) { /* IP address */
|
||||
if (inet_pton (AF_INET, *iter, &tmp) > 0)
|
||||
mm_callback_info_set_data (info, "ip4-address", GUINT_TO_POINTER (tmp), NULL);
|
||||
} else if (i == 3) { /* DNS 1 */
|
||||
if (inet_pton (AF_INET, *iter, &tmp) > 0)
|
||||
g_array_append_val (dns_array, tmp);
|
||||
} else if (i == 4) { /* DNS 2 */
|
||||
if (inet_pton (AF_INET, *iter, &tmp) > 0)
|
||||
g_array_append_val (dns_array, tmp);
|
||||
}
|
||||
}
|
||||
|
||||
g_strfreev (items);
|
||||
mm_callback_info_set_data (info, "ip4-dns", dns_array, free_dns_array);
|
||||
|
||||
out:
|
||||
mm_callback_info_schedule (info);
|
||||
}
|
||||
|
||||
void
|
||||
mm_hso_modem_get_ip4_config (MMModemHso *self,
|
||||
MMModemHsoIp4Fn callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info;
|
||||
char *command;
|
||||
|
||||
g_return_if_fail (MM_IS_MODEM_HSO (self));
|
||||
g_return_if_fail (callback != NULL);
|
||||
|
||||
info = mm_callback_info_new_full (MM_MODEM (self), ip4_config_invoke, G_CALLBACK (callback), user_data);
|
||||
command = g_strdup_printf ("AT_OWANDATA=%d", hso_get_cid (self));
|
||||
mm_serial_queue_command (MM_SERIAL (self), command, 3, get_ip4_config_done, info);
|
||||
g_free (command);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
@@ -380,6 +281,105 @@ do_connect (MMModem *modem,
|
||||
mm_callback_info_schedule (info);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
free_dns_array (gpointer data)
|
||||
{
|
||||
g_array_free ((GArray *) data, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
ip4_config_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);
|
||||
}
|
||||
|
||||
static void
|
||||
get_ip4_config_done (MMSerial *serial,
|
||||
GString *response,
|
||||
GError *error,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
char **items, **iter;
|
||||
GArray *dns_array;
|
||||
int i;
|
||||
guint32 tmp;
|
||||
guint cid;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto out;
|
||||
} else if (!g_str_has_prefix (response->str, OWANDATA_TAG)) {
|
||||
info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL,
|
||||
"Retrieving failed: invalid response.");
|
||||
goto out;
|
||||
}
|
||||
|
||||
cid = hso_get_cid (MM_MODEM_HSO (serial));
|
||||
dns_array = g_array_sized_new (FALSE, TRUE, sizeof (guint32), 2);
|
||||
items = g_strsplit (response->str + strlen (OWANDATA_TAG), ", ", 0);
|
||||
|
||||
for (iter = items, i = 0; *iter; iter++, i++) {
|
||||
if (i == 0) { /* CID */
|
||||
long int tmp;
|
||||
|
||||
errno = 0;
|
||||
tmp = strtol (*iter, NULL, 10);
|
||||
if (errno != 0 || tmp < 0 || (guint) tmp != cid) {
|
||||
info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL,
|
||||
"Unknown CID in OWANDATA response (got %d, expected %d)", (guint) tmp, cid);
|
||||
break;
|
||||
}
|
||||
} else if (i == 1) { /* IP address */
|
||||
if (inet_pton (AF_INET, *iter, &tmp) > 0)
|
||||
mm_callback_info_set_data (info, "ip4-address", GUINT_TO_POINTER (tmp), NULL);
|
||||
} else if (i == 3) { /* DNS 1 */
|
||||
if (inet_pton (AF_INET, *iter, &tmp) > 0)
|
||||
g_array_append_val (dns_array, tmp);
|
||||
} else if (i == 4) { /* DNS 2 */
|
||||
if (inet_pton (AF_INET, *iter, &tmp) > 0)
|
||||
g_array_append_val (dns_array, tmp);
|
||||
}
|
||||
}
|
||||
|
||||
g_strfreev (items);
|
||||
mm_callback_info_set_data (info, "ip4-dns", dns_array, free_dns_array);
|
||||
|
||||
out:
|
||||
mm_callback_info_schedule (info);
|
||||
}
|
||||
|
||||
static void
|
||||
get_ip4_config (MMModem *modem,
|
||||
MMModemIp4Fn callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info;
|
||||
char *command;
|
||||
|
||||
info = mm_callback_info_new_full (modem, ip4_config_invoke, G_CALLBACK (callback), user_data);
|
||||
command = g_strdup_printf ("AT_OWANDATA=%d", hso_get_cid (MM_MODEM_HSO (modem)));
|
||||
mm_serial_queue_command (MM_SERIAL (modem), command, 3, get_ip4_config_done, info);
|
||||
g_free (command);
|
||||
}
|
||||
|
||||
static void
|
||||
disconnect (MMModem *modem,
|
||||
MMModemFn callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info;
|
||||
|
||||
info = mm_callback_info_new (modem, callback, user_data);
|
||||
mm_serial_queue_command (MM_SERIAL (modem), "AT_OWANCALL=1,0,0", 3, NULL, info);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
@@ -410,28 +410,6 @@ impl_hso_authenticate (MMModemHso *self,
|
||||
mm_hso_modem_authenticate (self, username, password, impl_hso_auth_done, context);
|
||||
}
|
||||
|
||||
static void
|
||||
impl_hso_ip4_config_done (MMModemHso *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
|
||||
dbus_g_method_return (context, address, dns);
|
||||
}
|
||||
|
||||
static void
|
||||
impl_hso_get_ip4_config (MMModemHso *self,
|
||||
DBusGMethodInvocation *context)
|
||||
{
|
||||
mm_hso_modem_get_ip4_config (self, impl_hso_ip4_config_done, context);
|
||||
}
|
||||
|
||||
static void
|
||||
connection_enabled (const char *str, gpointer data)
|
||||
{
|
||||
@@ -566,6 +544,8 @@ modem_init (MMModem *modem_class)
|
||||
{
|
||||
modem_class->enable = enable;
|
||||
modem_class->connect = do_connect;
|
||||
modem_class->get_ip4_config = get_ip4_config;
|
||||
modem_class->disconnect = disconnect;
|
||||
}
|
||||
|
||||
static GObject*
|
||||
@@ -574,7 +554,8 @@ constructor (GType type,
|
||||
GObjectConstructParam *construct_params)
|
||||
{
|
||||
GObject *object;
|
||||
MMModemHsoPrivate *priv;
|
||||
char *modem_device;
|
||||
char *serial_device;
|
||||
|
||||
object = G_OBJECT_CLASS (mm_modem_hso_parent_class)->constructor (type,
|
||||
n_construct_params,
|
||||
@@ -582,49 +563,24 @@ constructor (GType type,
|
||||
if (!object)
|
||||
return NULL;
|
||||
|
||||
priv = MM_MODEM_HSO_GET_PRIVATE (object);
|
||||
/* Make sure both serial device and data device are provided */
|
||||
g_object_get (object,
|
||||
MM_MODEM_DEVICE, &modem_device,
|
||||
MM_SERIAL_DEVICE, &serial_device,
|
||||
NULL);
|
||||
|
||||
if (!priv->network_device) {
|
||||
if (!modem_device || !serial_device || !strcmp (modem_device, serial_device)) {
|
||||
g_warning ("No network device provided");
|
||||
g_object_unref (object);
|
||||
return NULL;
|
||||
object = NULL;
|
||||
}
|
||||
|
||||
g_free (modem_device);
|
||||
g_free (serial_device);
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
static void
|
||||
set_property (GObject *object, guint prop_id,
|
||||
const GValue *value, GParamSpec *pspec)
|
||||
{
|
||||
MMModemHsoPrivate *priv = MM_MODEM_HSO_GET_PRIVATE (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_NETWORK_DEVICE:
|
||||
/* Construct only */
|
||||
priv->network_device = g_value_dup_string (value);
|
||||
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)
|
||||
{
|
||||
MMModemHsoPrivate *priv = MM_MODEM_HSO_GET_PRIVATE (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_NETWORK_DEVICE:
|
||||
g_value_set_string (value, priv->network_device);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
static void
|
||||
finalize (GObject *object)
|
||||
{
|
||||
@@ -633,7 +589,6 @@ finalize (GObject *object)
|
||||
/* Clear the pending connection if necessary */
|
||||
connect_pending_done (MM_MODEM_HSO (object));
|
||||
|
||||
g_free (priv->network_device);
|
||||
g_regex_unref (priv->connection_enabled_regex);
|
||||
mm_serial_parser_v1_destroy (priv->std_parser);
|
||||
|
||||
@@ -650,17 +605,7 @@ mm_modem_hso_class_init (MMModemHsoClass *klass)
|
||||
|
||||
/* Virtual methods */
|
||||
object_class->constructor = constructor;
|
||||
object_class->set_property = set_property;
|
||||
object_class->get_property = get_property;
|
||||
object_class->finalize = finalize;
|
||||
/* Properties */
|
||||
g_object_class_install_property
|
||||
(object_class, PROP_NETWORK_DEVICE,
|
||||
g_param_spec_string (MM_MODEM_HSO_NETWORK_DEVICE,
|
||||
"NetworkDevice",
|
||||
"Network device",
|
||||
NULL,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||
}
|
||||
|
||||
GType
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
#define MM_IS_MODEM_HSO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MM_TYPE_MODEM_HSO))
|
||||
#define MM_MODEM_HSO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_MODEM_HSO, MMModemHsoClass))
|
||||
|
||||
#define MM_MODEM_HSO_NETWORK_DEVICE "network-device"
|
||||
|
||||
typedef struct {
|
||||
MMGenericGsm parent;
|
||||
} MMModemHso;
|
||||
@@ -22,13 +20,6 @@ typedef struct {
|
||||
MMGenericGsmClass parent;
|
||||
} MMModemHsoClass;
|
||||
|
||||
typedef void (*MMModemHsoIp4Fn) (MMModemHso *modem,
|
||||
guint32 address,
|
||||
GArray *dns,
|
||||
GError *error,
|
||||
gpointer user_data);
|
||||
|
||||
|
||||
GType mm_modem_hso_get_type (void);
|
||||
|
||||
MMModem *mm_modem_hso_new (const char *serial_device,
|
||||
@@ -41,9 +32,4 @@ void mm_hso_modem_authenticate (MMModemHso *self,
|
||||
MMModemFn callback,
|
||||
gpointer user_data);
|
||||
|
||||
void mm_hso_modem_get_ip4_config (MMModemHso *self,
|
||||
MMModemHsoIp4Fn callback,
|
||||
gpointer user_data);
|
||||
|
||||
|
||||
#endif /* MM_MODEM_HSO_H */
|
||||
|
||||
@@ -47,8 +47,9 @@ mm_modem_huawei_new (const char *data_device,
|
||||
|
||||
return MM_MODEM (g_object_new (MM_TYPE_MODEM_HUAWEI,
|
||||
MM_SERIAL_DEVICE, monitor_device,
|
||||
MM_MODEM_DATA_DEVICE, data_device,
|
||||
MM_MODEM_DEVICE, data_device,
|
||||
MM_MODEM_DRIVER, driver,
|
||||
MM_MODEM_TYPE, MM_MODEM_TYPE_GSM,
|
||||
NULL));
|
||||
}
|
||||
|
||||
|
||||
+15
-56
@@ -48,7 +48,6 @@ static gpointer mm_modem_mbm_parent_class = NULL;
|
||||
#define MM_MODEM_MBM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MM_TYPE_MODEM_MBM, MMModemMbmPrivate))
|
||||
|
||||
typedef struct {
|
||||
char *network_device;
|
||||
GRegex *boot_trig_regex;
|
||||
GRegex *msg_waiting_regex;
|
||||
GRegex *ciev_regex;
|
||||
@@ -56,13 +55,6 @@ typedef struct {
|
||||
guint32 signal_quality;
|
||||
} MMModemMbmPrivate;
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_NETWORK_DEVICE,
|
||||
|
||||
LAST_PROP
|
||||
};
|
||||
|
||||
MMModem *
|
||||
mm_modem_mbm_new (const char *serial_device,
|
||||
const char *network_device,
|
||||
@@ -76,7 +68,9 @@ mm_modem_mbm_new (const char *serial_device,
|
||||
MM_SERIAL_DEVICE, serial_device,
|
||||
MM_SERIAL_SEND_DELAY, (guint64) 10000,
|
||||
MM_MODEM_DRIVER, driver,
|
||||
MM_MODEM_MBM_NETWORK_DEVICE, network_device,
|
||||
MM_MODEM_DEVICE, network_device,
|
||||
MM_MODEM_IP_METHOD, MM_MODEM_IP_METHOD_DHCP,
|
||||
MM_MODEM_TYPE, MM_MODEM_TYPE_GSM,
|
||||
NULL));
|
||||
}
|
||||
|
||||
@@ -460,7 +454,8 @@ constructor (GType type,
|
||||
GObjectConstructParam *construct_params)
|
||||
{
|
||||
GObject *object;
|
||||
MMModemMbmPrivate *priv;
|
||||
char *modem_device;
|
||||
char *serial_device;
|
||||
|
||||
object = G_OBJECT_CLASS (mm_modem_mbm_parent_class)->constructor (type,
|
||||
n_construct_params,
|
||||
@@ -468,55 +463,29 @@ constructor (GType type,
|
||||
if (!object)
|
||||
return NULL;
|
||||
|
||||
priv = MM_MODEM_MBM_GET_PRIVATE (object);
|
||||
/* Make sure both serial device and data device are provided */
|
||||
g_object_get (object,
|
||||
MM_MODEM_DEVICE, &modem_device,
|
||||
MM_SERIAL_DEVICE, &serial_device,
|
||||
NULL);
|
||||
|
||||
if (!priv->network_device) {
|
||||
if (!modem_device || !serial_device || !strcmp (modem_device, serial_device)) {
|
||||
g_warning ("No network device provided");
|
||||
g_object_unref (object);
|
||||
return NULL;
|
||||
object = NULL;
|
||||
}
|
||||
|
||||
g_free (modem_device);
|
||||
g_free (serial_device);
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
static void
|
||||
set_property (GObject *object, guint prop_id,
|
||||
const GValue *value, GParamSpec *pspec)
|
||||
{
|
||||
MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_NETWORK_DEVICE:
|
||||
/* Construct only */
|
||||
priv->network_device = g_value_dup_string (value);
|
||||
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)
|
||||
{
|
||||
MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_NETWORK_DEVICE:
|
||||
g_value_set_string (value, priv->network_device);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
static void
|
||||
finalize (GObject *object)
|
||||
{
|
||||
MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (object);
|
||||
|
||||
g_free (priv->network_device);
|
||||
mm_serial_parser_v1_destroy (priv->std_parser);
|
||||
g_regex_unref (priv->boot_trig_regex);
|
||||
g_regex_unref (priv->msg_waiting_regex);
|
||||
@@ -535,17 +504,7 @@ mm_modem_mbm_class_init (MMModemMbmClass *klass)
|
||||
|
||||
/* Virtual methods */
|
||||
object_class->constructor = constructor;
|
||||
object_class->set_property = set_property;
|
||||
object_class->get_property = get_property;
|
||||
object_class->finalize = finalize;
|
||||
/* Properties */
|
||||
g_object_class_install_property
|
||||
(object_class, PROP_NETWORK_DEVICE,
|
||||
g_param_spec_string (MM_MODEM_MBM_NETWORK_DEVICE,
|
||||
"NetworkDevice",
|
||||
"Network device",
|
||||
NULL,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||
}
|
||||
|
||||
GType
|
||||
|
||||
@@ -35,8 +35,6 @@
|
||||
#define MM_IS_MODEM_MBM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MM_TYPE_MODEM_MBM))
|
||||
#define MM_MODEM_MBM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_MODEM_MBM, MMModemMbmClass))
|
||||
|
||||
#define MM_MODEM_MBM_NETWORK_DEVICE "network-device"
|
||||
|
||||
typedef struct {
|
||||
MMGenericGsm parent;
|
||||
} MMModemMbm;
|
||||
@@ -45,27 +43,10 @@ typedef struct {
|
||||
MMGenericGsmClass parent;
|
||||
} MMModemMbmClass;
|
||||
|
||||
typedef void (*MMModemMbmIp4Fn) (MMModemMbm *modem,
|
||||
guint32 address,
|
||||
GArray *dns,
|
||||
GError *error,
|
||||
gpointer user_data);
|
||||
|
||||
|
||||
GType mm_modem_mbm_get_type (void);
|
||||
|
||||
MMModem *mm_modem_mbm_new (const char *serial_device,
|
||||
const char *network_device,
|
||||
const char *driver);
|
||||
|
||||
void mm_mbm_modem_authenticate (MMModemMbm *self,
|
||||
const char *username,
|
||||
const char *password,
|
||||
MMModemFn callback,
|
||||
gpointer user_data);
|
||||
|
||||
void mm_mbm_modem_get_ip4_config (MMModemMbm *self,
|
||||
MMModemMbmIp4Fn callback,
|
||||
gpointer user_data);
|
||||
|
||||
#endif /* MM_MODEM_MBM_H */
|
||||
|
||||
@@ -20,6 +20,7 @@ mm_modem_novatel_new (const char *data_device,
|
||||
return MM_MODEM (g_object_new (MM_TYPE_MODEM_NOVATEL,
|
||||
MM_SERIAL_DEVICE, data_device,
|
||||
MM_MODEM_DRIVER, driver,
|
||||
MM_MODEM_TYPE, MM_MODEM_TYPE_GSM,
|
||||
NULL));
|
||||
}
|
||||
|
||||
@@ -51,7 +52,7 @@ pin_check_done (MMModem *modem, GError *error, gpointer user_data)
|
||||
mm_callback_info_schedule (info);
|
||||
} else
|
||||
/* Finish the initialization */
|
||||
mm_serial_queue_command (MM_SERIAL (modem), "Z X4 &C1 +CMEE=1;+CFUN=1", 10, init_modem_done, info);
|
||||
mm_serial_queue_command (MM_SERIAL (modem), "Z E0 V1 X4 &C1 +CMEE=1;+CFUN=1", 10, init_modem_done, info);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -20,6 +20,7 @@ mm_modem_option_new (const char *data_device,
|
||||
return MM_MODEM (g_object_new (MM_TYPE_MODEM_OPTION,
|
||||
MM_SERIAL_DEVICE, data_device,
|
||||
MM_MODEM_DRIVER, driver,
|
||||
MM_MODEM_TYPE, MM_MODEM_TYPE_GSM,
|
||||
NULL));
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ mm_modem_sierra_new (const char *data_device,
|
||||
return MM_MODEM (g_object_new (MM_TYPE_MODEM_SIERRA,
|
||||
MM_SERIAL_DEVICE, data_device,
|
||||
MM_MODEM_DRIVER, driver,
|
||||
MM_MODEM_TYPE, MM_MODEM_TYPE_GSM,
|
||||
NULL));
|
||||
}
|
||||
|
||||
|
||||
+13
-4
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user