core: consolidate mobile broadband device types

These days more and more devices are showing up that support a
number of different access technology families in the same hardware,
like Qualcomm Gobi (CDMA and GSM), Pantech UM190 (CDMA and GSM),
Pantech UML290 (CDMA and LTE), LG VL600 (CDMA and LTE), Sierra
320U (GSM and LTE), etc.  The previous scheme of having device
classes based on access technology family simply cannot handle
this hardware and attempting to add LTE to both the CDMA and GSM
device classes would result in a bunch of code duplication that
we don't want.  There's a better way...

Instead, combine both CDMA and GSM device classes into a generic
"Modem" device class that provides capabilities indicating what
access technology families a modem supports, and what families
it supports immediately without a firmware reload.  (Gobi devices
for example require a firmware reload before they can switch
between GSM and CDMA).  This provides the necessary flexibility
to the client and allows us to keep the API stable when the
same consolidation change is made in ModemManager.

The current code doesn't yet allow multi-mode operation internally,
but the API is now what we want it to be and won't need to be
changed.
This commit is contained in:
Dan Williams 2011-02-25 10:16:17 -06:00
parent 3b61adec74
commit 2140dad5e0
33 changed files with 466 additions and 1052 deletions

View file

@ -46,8 +46,7 @@
#if WITH_WIMAX
#include <nm-device-wimax.h>
#endif
#include <nm-gsm-device.h>
#include <nm-cdma-device.h>
#include <nm-device-modem.h>
#include <nm-device-bt.h>
//#include <nm-device-olpc-mesh.h>
#include <nm-remote-settings.h>
@ -922,54 +921,46 @@ check_wimax_compatible (NMDeviceWimax *device, NMConnection *connection, GError
#endif
static gboolean
check_gsm_compatible (NMGsmDevice *device, NMConnection *connection, GError **error)
check_modem_compatible (NMDeviceModem *device, NMConnection *connection, GError **error)
{
NMSettingConnection *s_con;
NMSettingGsm *s_gsm;
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
g_assert (s_con);
if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_GSM_SETTING_NAME)) {
g_set_error (error, 0, 0,
"The connection was not a GSM connection.");
return FALSE;
}
s_gsm = NM_SETTING_GSM (nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM));
if (!s_gsm) {
g_set_error (error, 0, 0,
"The connection was not a valid GSM connection.");
return FALSE;
}
return TRUE;
}
static gboolean
check_cdma_compatible (NMCdmaDevice *device, NMConnection *connection, GError **error)
{
NMSettingConnection *s_con;
NMSettingCdma *s_cdma;
NMDeviceModemCapabilities caps = NM_DEVICE_MODEM_CAPABILITY_NONE;
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
g_assert (s_con);
if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_CDMA_SETTING_NAME)) {
g_set_error (error, 0, 0,
"The connection was not a CDMA connection.");
return FALSE;
}
/* Figure out what the modem supports */
caps = nm_device_modem_get_current_capabilities (device);
if (caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS) {
if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_GSM_SETTING_NAME)) {
g_set_error (error, 0, 0,
"The connection was not a GSM connection.");
return FALSE;
}
s_cdma = NM_SETTING_CDMA (nm_connection_get_setting (connection, NM_TYPE_SETTING_CDMA));
if (!s_cdma) {
g_set_error (error, 0, 0,
"The connection was not a valid CDMA connection.");
return FALSE;
s_gsm = NM_SETTING_GSM (nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM));
if (!s_gsm) {
g_set_error (error, 0, 0,
"The connection was not a valid GSM connection.");
return FALSE;
}
} else if (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO) {
if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_CDMA_SETTING_NAME)) {
g_set_error (error, 0, 0,
"The connection was not a CDMA connection.");
return FALSE;
}
s_cdma = NM_SETTING_CDMA (nm_connection_get_setting (connection, NM_TYPE_SETTING_CDMA));
if (!s_cdma) {
g_set_error (error, 0, 0,
"The connection was not a valid CDMA connection.");
return FALSE;
}
}
return TRUE;
@ -993,10 +984,8 @@ nm_device_is_connection_compatible (NMDevice *device, NMConnection *connection,
else if (NM_IS_DEVICE_WIMAX (device))
return check_wimax_compatible (NM_DEVICE_WIMAX (device), connection, error);
#endif
else if (NM_IS_GSM_DEVICE (device))
return check_gsm_compatible (NM_GSM_DEVICE (device), connection, error);
else if (NM_IS_CDMA_DEVICE (device))
return check_cdma_compatible (NM_CDMA_DEVICE (device), connection, error);
else if (NM_IS_DEVICE_MODEM (device))
return check_modem_compatible (NM_DEVICE_MODEM (device), connection, error);
g_set_error (error, 0, 0, "unhandled device type '%s'", G_OBJECT_TYPE_NAME (device));
return FALSE;

View file

@ -33,8 +33,7 @@
#include <nm-device.h>
#include <nm-device-ethernet.h>
#include <nm-device-wifi.h>
#include <nm-gsm-device.h>
#include <nm-cdma-device.h>
#include <nm-device-modem.h>
#include <nm-device-bt.h>
//#include <nm-device-olpc-mesh.h>
#if WITH_WIMAX
@ -312,17 +311,22 @@ device_state_to_string (NMDeviceState state)
* connection type names.
*/
static const char *
device_type_to_string (NMDeviceType device_type)
device_type_to_string (NMDevice *device)
{
switch (device_type) {
NMDeviceModemCapabilities caps = NM_DEVICE_MODEM_CAPABILITY_NONE;
switch (nm_device_get_device_type (device)) {
case NM_DEVICE_TYPE_ETHERNET:
return NM_SETTING_WIRED_SETTING_NAME;
case NM_DEVICE_TYPE_WIFI:
return NM_SETTING_WIRELESS_SETTING_NAME;
case NM_DEVICE_TYPE_GSM:
return NM_SETTING_GSM_SETTING_NAME;
case NM_DEVICE_TYPE_CDMA:
return NM_SETTING_CDMA_SETTING_NAME;
case NM_DEVICE_TYPE_MODEM:
caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
if (caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS)
return NM_SETTING_GSM_SETTING_NAME;
else if (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)
return NM_SETTING_CDMA_SETTING_NAME;
return _("Unknown");
case NM_DEVICE_TYPE_BT:
return NM_SETTING_BLUETOOTH_SETTING_NAME;
// case NM_DEVICE_TYPE_OLPC_MESH:
@ -647,7 +651,7 @@ show_device_info (gpointer data, gpointer user_data)
nmc->allowed_fields[0].value = nmc_fields_dev_list_sections[0].name; /* "GENERAL"*/
nmc->allowed_fields[1].value = nm_device_get_iface (device);
nmc->allowed_fields[2].value = device_type_to_string (nm_device_get_device_type (device));
nmc->allowed_fields[2].value = device_type_to_string (device);
nmc->allowed_fields[3].value = nm_device_get_driver (device) ? nm_device_get_driver (device) : _("(unknown)");
nmc->allowed_fields[4].value = hwaddr ? hwaddr : _("unknown)");
nmc->allowed_fields[5].value = device_state_to_string (state);
@ -956,7 +960,7 @@ static void
show_device_status (NMDevice *device, NmCli *nmc)
{
nmc->allowed_fields[0].value = nm_device_get_iface (device);
nmc->allowed_fields[1].value = device_type_to_string (nm_device_get_device_type (device));
nmc->allowed_fields[1].value = device_type_to_string (device);
nmc->allowed_fields[2].value = device_state_to_string (nm_device_get_state (device));
nmc->allowed_fields[3].value = nm_object_get_path (NM_OBJECT (device));

View file

@ -43,6 +43,7 @@ IGNORE_HFILES= \
nm-device-bt-bindings.h \
nm-device-ethernet-bindings.h \
nm-device-wifi-bindings.h \
nm-device-modem-bindings.h \
nm-dhcp4-config-bindings.h \
nm-dhcp6-config-bindings.h \
nm-settings-connection-glue.h \

View file

@ -18,9 +18,7 @@
<xi:include href="xml/nm-device.xml"/>
<xi:include href="xml/nm-device-ethernet.xml"/>
<xi:include href="xml/nm-device-wifi.xml"/>
<xi:include href="xml/nm-serial-device.xml"/>
<xi:include href="xml/nm-gsm-device.xml"/>
<xi:include href="xml/nm-cdma-device.xml"/>
<xi:include href="xml/nm-device-modem.xml"/>
<xi:include href="xml/nm-device-bt.xml"/>
<xi:include href="xml/nm-device-wimax.xml"/>
<xi:include href="xml/nm-access-point.xml"/>

View file

@ -1,9 +1,7 @@
#include <nm-client.h>
#include <nm-device-ethernet.h>
#include <nm-device-wifi.h>
#include <nm-cdma-device.h>
#include <nm-gsm-device.h>
#include <nm-serial-device.h>
#include <nm-device-modem.h>
#include <nm-access-point.h>
#include <nm-ip4-config.h>
#include <nm-ip6-config.h>
@ -15,9 +13,7 @@ nm_client_get_type
nm_device_get_type
nm_device_ethernet_get_type
nm_device_wifi_get_type
nm_gsm_device_get_type
nm_cdma_device_get_type
nm_serial_device_get_type
nm_device_modem_get_type
nm_access_point_get_type
nm_ip4_config_get_type
nm_active_connection_get_type

View file

@ -36,9 +36,7 @@
#define NM_DBUS_INTERFACE_DEVICE_BLUETOOTH NM_DBUS_INTERFACE_DEVICE ".Bluetooth"
#define NM_DBUS_PATH_ACCESS_POINT NM_DBUS_PATH "/AccessPoint"
#define NM_DBUS_INTERFACE_ACCESS_POINT NM_DBUS_INTERFACE ".AccessPoint"
#define NM_DBUS_INTERFACE_SERIAL_DEVICE NM_DBUS_INTERFACE_DEVICE ".Serial"
#define NM_DBUS_INTERFACE_GSM_DEVICE NM_DBUS_INTERFACE_DEVICE ".Gsm"
#define NM_DBUS_INTERFACE_CDMA_DEVICE NM_DBUS_INTERFACE_DEVICE ".Cdma"
#define NM_DBUS_INTERFACE_DEVICE_MODEM NM_DBUS_INTERFACE_DEVICE ".Modem"
#define NM_DBUS_INTERFACE_DEVICE_WIMAX NM_DBUS_INTERFACE_DEVICE ".WiMax"
#define NM_DBUS_INTERFACE_WIMAX_NSP NM_DBUS_INTERFACE ".WiMax.Nsp"
#define NM_DBUS_PATH_WIMAX_NSP NM_DBUS_PATH "/Nsp"
@ -94,11 +92,12 @@ typedef enum {
NM_DEVICE_TYPE_UNKNOWN = 0,
NM_DEVICE_TYPE_ETHERNET = 1,
NM_DEVICE_TYPE_WIFI = 2,
NM_DEVICE_TYPE_GSM = 3,
NM_DEVICE_TYPE_CDMA = 4,
NM_DEVICE_TYPE_UNUSED1 = 3,
NM_DEVICE_TYPE_UNUSED2 = 4,
NM_DEVICE_TYPE_BT = 5, /* Bluetooth */
NM_DEVICE_TYPE_OLPC_MESH = 6,
NM_DEVICE_TYPE_WIMAX = 7
NM_DEVICE_TYPE_WIMAX = 7,
NM_DEVICE_TYPE_MODEM = 8,
} NMDeviceType;
/* General device capability flags */
@ -173,6 +172,30 @@ typedef enum {
NM_BT_CAPABILITY_NAP = 0x00000002,
} NMBluetoothCapabilities;
/**
* NMDeviceModemCapabilities:
* @NM_DEVICE_MODEM_CAPABILITY_NONE: modem has no usable capabilities
* @NM_DEVICE_MODEM_CAPABILITY_POTS: modem uses the analog wired telephone
* network and is not a wireless/cellular device
* @NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO: modem supports at least one of CDMA
* 1xRTT, EVDO revision 0, EVDO revision A, or EVDO revision B
* @NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS: modem supports at least one of GSM,
* GPRS, EDGE, UMTS, HSDPA, HSUPA, or HSPA+ packet switched data capability
* @NM_DEVICE_MODEM_CAPABILITY_LTE: modem has LTE data capability
*
* #NMDeviceModemCapabilities values indicate the generic radio access
* technology families a modem device supports. For more information on the
* specific access technologies the device supports use the ModemManager D-Bus
* API.
*/
typedef enum {
NM_DEVICE_MODEM_CAPABILITY_NONE = 0x00000000,
NM_DEVICE_MODEM_CAPABILITY_POTS = 0x00000001,
NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO = 0x00000002,
NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS = 0x00000004,
NM_DEVICE_MODEM_CAPABILITY_LTE = 0x00000008,
} NMDeviceModemCapabilities;
/**
* NMDeviceState:

View file

@ -8,9 +8,7 @@ EXTRA_DIST = \
nm-device-wifi.xml \
nm-device-olpc-mesh.xml \
nm-device-ethernet.xml \
nm-device-cdma.xml \
nm-device-gsm.xml \
nm-device-serial.xml \
nm-device-modem.xml \
nm-device-wimax.xml \
nm-device.xml \
nm-ip4-config.xml \

View file

@ -30,9 +30,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<xi:include href="nm-device.xml"/>
<xi:include href="nm-device-ethernet.xml"/>
<xi:include href="nm-device-wifi.xml"/>
<xi:include href="nm-device-cdma.xml"/>
<xi:include href="nm-device-gsm.xml"/>
<xi:include href="nm-device-serial.xml"/>
<xi:include href="nm-device-modem.xml"/>
<xi:include href="nm-device-bt.xml"/>
<xi:include href="nm-device-olpc-mesh.xml"/>
<xi:include href="nm-device-wimax.xml"/>

View file

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8" ?>
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.Device.Modem">
<signal name="PropertiesChanged">
<arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
<tp:docstring>
A dictionary mapping property names to variant boxed values
</tp:docstring>
</arg>
</signal>
<property name="ModemCapabilities" type="u" access="read" tp:type="NM_DEVICE_MODEM_CAPABILITIES">
<tp:docstring>
The generic family of access technologies the modem supports. Not all
capabilities are available at the same time however; some modems require
a firmware reload or other reinitialization to switch between eg CDMA/EVDO
and GSM/UMTS.
</tp:docstring>
</property>
<property name="CurrentCapabilities" type="u" access="read" tp:type="NM_DEVICE_MODEM_CAPABILITIES">
<tp:docstring>
The generic family of access technologies the modem currently supports
without a firmware reload or reinitialization.
</tp:docstring>
</property>
<tp:flags name="NM_DEVICE_MODEM_CAPABILITIES" value-prefix="NM_DEVICE_MODEM_CAPABILITY" type="u">
<tp:docstring>
Flags describing one or more of the general access technology families
that a modem device supports.
</tp:docstring>
<tp:flag suffix="NONE" value="0x0">
<tp:docstring>Modem has no capabilties.</tp:docstring>
</tp:flag>
<tp:flag suffix="POTS" value="0x1">
<tp:docstring>
Modem supports the analog wired telephone network (ie 56k dialup) and
does not have wireless/cellular capabilities.
</tp:docstring>
</tp:flag>
<tp:flag suffix="CDMA_EVDO" value="0x2">
<tp:docstring>
Modem supports at least one of CDMA 1xRTT, EVDO revision 0, EVDO
revision A, or EVDO revision B.
</tp:docstring>
</tp:flag>
<tp:flag suffix="GSM_UMTS" value="0x4">
<tp:docstring>
Modem supports at least one of GSM, GPRS, EDGE, UMTS, HSDPA, HSUPA, or
HSPA+ packet switched data capability.
</tp:docstring>
</tp:flag>
<tp:flag suffix="LTE" value="0x8">
<tp:docstring>
Modem has at LTE data capability.
</tp:docstring>
</tp:flag>
</tp:flags>
</interface>
</node>

View file

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.Device.Serial">
<signal name="PppStats">
<arg name="in_bytes" type="u">
<tp:docstring>
Bytes received
</tp:docstring>
</arg>
<arg name="out_bytes" type="u">
<tp:docstring>
Bytes sent
</tp:docstring>
</arg>
</signal>
</interface>
</node>

View file

@ -14,6 +14,7 @@ BUILT_SOURCES = \
nm-device-bt-bindings.h \
nm-settings-connection-bindings.h \
nm-device-wimax-bindings.h \
nm-device-modem-bindings.h \
nm-settings-bindings.h \
nm-vpn-connection-bindings.h \
nm-vpn-plugin-glue.h \
@ -73,9 +74,7 @@ libnminclude_HEADERS = \
nm-device-bt.h \
nm-access-point.h \
nm-ip4-config.h \
nm-gsm-device.h \
nm-cdma-device.h \
nm-serial-device.h \
nm-device-modem.h \
nm-vpn-connection.h \
nm-types.h \
nm-active-connection.h \
@ -103,9 +102,7 @@ libnm_glib_la_csources = \
nm-device-bt.c \
nm-access-point.c \
nm-ip4-config.c \
nm-gsm-device.c \
nm-cdma-device.c \
nm-serial-device.c \
nm-device-modem.c \
nm-vpn-connection.c \
nm-types.c \
nm-object-cache.c \
@ -232,6 +229,9 @@ nm-secret-agent-glue.h: $(top_srcdir)/introspection/nm-secret-agent.xml
nm-device-wimax-bindings.h: $(top_srcdir)/introspection/nm-device-wimax.xml
dbus-binding-tool --prefix=nm_device_wimax --mode=glib-client --output=$@ $<
nm-device-modem-bindings.h: $(top_srcdir)/introspection/nm-device-modem.xml
dbus-binding-tool --prefix=nm_device_modem --mode=glib-client --output=$@ $<
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libnm-glib.pc libnm-glib-vpn.pc

View file

@ -24,8 +24,6 @@ global:
nm_active_connection_get_state;
nm_active_connection_get_type;
nm_active_connection_new;
nm_cdma_device_get_type;
nm_cdma_device_new;
nm_client_activate_connection;
nm_client_add_and_activate_connection;
nm_client_deactivate_connection;
@ -85,6 +83,9 @@ global:
nm_device_get_udi;
nm_device_get_vendor;
nm_device_new;
nm_device_modem_get_type;
nm_device_modem_get_modem_capabilities;
nm_device_modem_get_current_capabilities;
nm_device_wifi_get_access_point_by_path;
nm_device_wifi_get_access_points;
nm_device_wifi_get_active_access_point;
@ -114,8 +115,6 @@ global:
nm_dhcp6_config_get_options;
nm_dhcp6_config_get_type;
nm_dhcp6_config_new;
nm_gsm_device_get_type;
nm_gsm_device_new;
nm_ip4_config_get_addresses;
nm_ip4_config_get_domains;
nm_ip4_config_get_hostname;

View file

@ -1,130 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
* libnm_glib -- Access network status & information from glib applications
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2008 Red Hat, Inc.
* Copyright (C) 2008 Novell, Inc.
*/
#include "nm-cdma-device.h"
#include "nm-device-private.h"
#include "nm-object-private.h"
G_DEFINE_TYPE (NMCdmaDevice, nm_cdma_device, NM_TYPE_SERIAL_DEVICE)
#define NM_CDMA_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CDMA_DEVICE, NMCdmaDevicePrivate))
typedef struct {
DBusGProxy *proxy;
gboolean disposed;
} NMCdmaDevicePrivate;
static void
nm_cdma_device_init (NMCdmaDevice *device)
{
}
static void
register_for_property_changed (NMCdmaDevice *device)
{
NMCdmaDevicePrivate *priv = NM_CDMA_DEVICE_GET_PRIVATE (device);
const NMPropertiesChangedInfo property_changed_info[] = {
{ NULL },
};
_nm_object_handle_properties_changed (NM_OBJECT (device),
priv->proxy,
property_changed_info);
}
static GObject*
constructor (GType type,
guint n_construct_params,
GObjectConstructParam *construct_params)
{
GObject *object;
NMCdmaDevicePrivate *priv;
object = G_OBJECT_CLASS (nm_cdma_device_parent_class)->constructor (type,
n_construct_params,
construct_params);
if (!object)
return NULL;
priv = NM_CDMA_DEVICE_GET_PRIVATE (object);
priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
NM_DBUS_SERVICE,
nm_object_get_path (NM_OBJECT (object)),
NM_DBUS_INTERFACE_CDMA_DEVICE);
register_for_property_changed (NM_CDMA_DEVICE (object));
return object;
}
static void
dispose (GObject *object)
{
NMCdmaDevicePrivate *priv = NM_CDMA_DEVICE_GET_PRIVATE (object);
if (priv->disposed) {
G_OBJECT_CLASS (nm_cdma_device_parent_class)->dispose (object);
return;
}
priv->disposed = TRUE;
g_object_unref (priv->proxy);
G_OBJECT_CLASS (nm_cdma_device_parent_class)->dispose (object);
}
static void
nm_cdma_device_class_init (NMCdmaDeviceClass *device_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (device_class);
g_type_class_add_private (device_class, sizeof (NMCdmaDevicePrivate));
/* virtual methods */
object_class->constructor = constructor;
object_class->dispose = dispose;
}
/**
* nm_cdma_device_new:
* @connection: the #DBusGConnection
* @path: the DBus object path of the device
*
* Creates a new #NMCdmaDevice.
*
* Returns: a new device
**/
GObject *
nm_cdma_device_new (DBusGConnection *connection, const char *path)
{
g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (path != NULL, NULL);
return g_object_new (NM_TYPE_CDMA_DEVICE,
NM_OBJECT_DBUS_CONNECTION, connection,
NM_OBJECT_DBUS_PATH, path,
NULL);
}

View file

@ -1,60 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
* libnm_glib -- Access network status & information from glib applications
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2008 Red Hat, Inc.
* Copyright (C) 2008 Novell, Inc.
*/
#ifndef NM_CDMA_DEVICE_H
#define NM_CDMA_DEVICE_H
#include "nm-serial-device.h"
G_BEGIN_DECLS
#define NM_TYPE_CDMA_DEVICE (nm_cdma_device_get_type ())
#define NM_CDMA_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CDMA_DEVICE, NMCdmaDevice))
#define NM_CDMA_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_CDMA_DEVICE, NMCdmaDeviceClass))
#define NM_IS_CDMA_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CDMA_DEVICE))
#define NM_IS_CDMA_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_CDMA_DEVICE))
#define NM_CDMA_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CDMA_DEVICE, NMCdmaDeviceClass))
typedef struct {
NMSerialDevice parent;
} NMCdmaDevice;
typedef struct {
NMSerialDeviceClass parent;
/* Padding for future expansion */
void (*_reserved1) (void);
void (*_reserved2) (void);
void (*_reserved3) (void);
void (*_reserved4) (void);
void (*_reserved5) (void);
void (*_reserved6) (void);
} NMCdmaDeviceClass;
GType nm_cdma_device_get_type (void);
GObject *nm_cdma_device_new (DBusGConnection *connection, const char *path);
G_END_DECLS
#endif /* NM_CDMA_DEVICE_H */

View file

@ -28,8 +28,6 @@
#include "nm-client.h"
#include "nm-device-ethernet.h"
#include "nm-device-wifi.h"
#include "nm-gsm-device.h"
#include "nm-cdma-device.h"
#include "nm-device-private.h"
#include "nm-marshal.h"
#include "nm-types-private.h"

View file

@ -0,0 +1,186 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
* libnm_glib -- Access network status & information from glib applications
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2011 Red Hat, Inc.
* Copyright (C) 2008 Novell, Inc.
*/
#include "nm-device-modem.h"
#include "nm-device-private.h"
#include "nm-object-private.h"
#include "nm-marshal.h"
G_DEFINE_TYPE (NMDeviceModem, nm_device_modem, NM_TYPE_DEVICE)
#define NM_DEVICE_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
NM_TYPE_DEVICE_MODEM, \
NMDeviceModemPrivate))
typedef struct {
DBusGProxy *proxy;
NMDeviceModemCapabilities caps;
NMDeviceModemCapabilities current_caps;
gboolean disposed;
} NMDeviceModemPrivate;
enum {
PROP_0,
PROP_MODEM_CAPABILITIES,
PROP_CURRENT_CAPABILITIES,
LAST_PROP
};
#define DBUS_PROP_MODEM_CAPS "ModemCapabilities"
#define DBUS_PROP_CURRENT_CAPS "CurrentCapabilities"
/**
* nm_device_modem_get_modem_capabilities:
* @self: a #NMDeviceModem
*
* Returns a bitfield of the generic access technology families the modem
* supports. Not all capabilities are available concurrently however; some
* may require a firmware reload or reinitialization.
*
* Returns: the generic access technology families the modem supports
**/
NMDeviceModemCapabilities
nm_device_modem_get_modem_capabilities (NMDeviceModem *self)
{
NMDeviceModemPrivate *priv;
g_return_val_if_fail (self != NULL, NM_DEVICE_MODEM_CAPABILITY_NONE);
g_return_val_if_fail (NM_IS_DEVICE_MODEM (self), NM_DEVICE_MODEM_CAPABILITY_NONE);
priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
if (!priv->caps) {
priv->caps = _nm_object_get_uint_property (NM_OBJECT (self),
NM_DBUS_INTERFACE_DEVICE_MODEM,
DBUS_PROP_MODEM_CAPS,
NULL);
}
return priv->caps;
}
/**
* nm_device_modem_get_current_capabilities:
* @self: a #NMDeviceModem
*
* Returns a bitfield of the generic access technology families the modem
* supports without a firmware reload or reinitialization. This value
* represents the network types the modem can immediately connect to.
*
* Returns: the generic access technology families the modem supports without
* a firmware reload or other reinitialization
**/
NMDeviceModemCapabilities
nm_device_modem_get_current_capabilities (NMDeviceModem *self)
{
NMDeviceModemPrivate *priv;
g_return_val_if_fail (self != NULL, NM_DEVICE_MODEM_CAPABILITY_NONE);
g_return_val_if_fail (NM_IS_DEVICE_MODEM (self), NM_DEVICE_MODEM_CAPABILITY_NONE);
priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
if (!priv->current_caps) {
priv->current_caps = _nm_object_get_uint_property (NM_OBJECT (self),
NM_DBUS_INTERFACE_DEVICE_MODEM,
DBUS_PROP_CURRENT_CAPS,
NULL);
}
return priv->current_caps;
}
static void
register_for_property_changed (NMDeviceModem *device)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
const NMPropertiesChangedInfo property_changed_info[] = {
{ NM_DEVICE_MODEM_MODEM_CAPABILITIES, _nm_object_demarshal_generic, &priv->caps },
{ NM_DEVICE_MODEM_CURRENT_CAPABILITIES, _nm_object_demarshal_generic, &priv->current_caps },
{ NULL },
};
_nm_object_handle_properties_changed (NM_OBJECT (device),
priv->proxy,
property_changed_info);
}
static GObject*
constructor (GType type,
guint n_construct_params,
GObjectConstructParam *construct_params)
{
GObject *object;
NMDeviceModemPrivate *priv;
object = G_OBJECT_CLASS (nm_device_modem_parent_class)->constructor (type,
n_construct_params,
construct_params);
if (object) {
priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
NM_DBUS_SERVICE,
nm_object_get_path (NM_OBJECT (object)),
NM_DBUS_INTERFACE_DEVICE_MODEM);
register_for_property_changed (NM_DEVICE_MODEM (object));
}
return object;
}
static void
nm_device_modem_init (NMDeviceModem *device)
{
}
static void
dispose (GObject *object)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
if (priv->disposed) {
G_OBJECT_CLASS (nm_device_modem_parent_class)->dispose (object);
return;
}
priv->disposed = TRUE;
g_object_unref (priv->proxy);
G_OBJECT_CLASS (nm_device_modem_parent_class)->dispose (object);
}
static void
nm_device_modem_class_init (NMDeviceModemClass *device_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (device_class);
g_type_class_add_private (device_class, sizeof (NMDeviceModemPrivate));
/* virtual methods */
object_class->constructor = constructor;
object_class->dispose = dispose;
}

View file

@ -17,33 +17,34 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2011 Red Hat, Inc.
* Copyright (C) 2008 Novell, Inc.
*/
#ifndef NM_SERIAL_DEVICE_H
#define NM_SERIAL_DEVICE_H
#ifndef NM_DEVICE_MODEM_H
#define NM_DEVICE_MODEM_H
#include "nm-device.h"
G_BEGIN_DECLS
#define NM_TYPE_SERIAL_DEVICE (nm_serial_device_get_type ())
#define NM_SERIAL_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SERIAL_DEVICE, NMSerialDevice))
#define NM_SERIAL_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SERIAL_DEVICE, NMSerialDeviceClass))
#define NM_IS_SERIAL_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SERIAL_DEVICE))
#define NM_IS_SERIAL_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_SERIAL_DEVICE))
#define NM_SERIAL_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SERIAL_DEVICE, NMSerialDeviceClass))
#define NM_TYPE_DEVICE_MODEM (nm_device_modem_get_type ())
#define NM_DEVICE_MODEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_MODEM, NMDeviceModem))
#define NM_DEVICE_MODEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_MODEM, NMDeviceModemClass))
#define NM_IS_DEVICE_MODEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_MODEM))
#define NM_IS_DEVICE_MODEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_DEVICE_MODEM))
#define NM_DEVICE_MODEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_MODEM, NMDeviceModemClass))
#define NM_DEVICE_MODEM_MODEM_CAPABILITIES "modem-capabilities"
#define NM_DEVICE_MODEM_CURRENT_CAPABILITIES "current-capabilities"
typedef struct {
NMDevice parent;
} NMSerialDevice;
} NMDeviceModem;
typedef struct {
NMDeviceClass parent;
/* Signals */
void (*ppp_stats) (NMSerialDevice *self, guint32 in_bytes, guint32 out_bytes);
/* Padding for future expansion */
void (*_reserved1) (void);
void (*_reserved2) (void);
@ -51,13 +52,13 @@ typedef struct {
void (*_reserved4) (void);
void (*_reserved5) (void);
void (*_reserved6) (void);
} NMSerialDeviceClass;
} NMDeviceModemClass;
GType nm_serial_device_get_type (void);
GType nm_device_modem_get_type (void);
guint32 nm_serial_device_get_bytes_received (NMSerialDevice *self);
guint32 nm_serial_device_get_bytes_sent (NMSerialDevice *self);
NMDeviceModemCapabilities nm_device_modem_get_modem_capabilities (NMDeviceModem *modem);
NMDeviceModemCapabilities nm_device_modem_get_current_capabilities (NMDeviceModem *modem);
G_END_DECLS
#endif /* NM_SERIAL_DEVICE_H */
#endif /* NM_DEVICE_MODEM_H */

View file

@ -29,8 +29,7 @@
#include "NetworkManager.h"
#include "nm-device-ethernet.h"
#include "nm-device-wifi.h"
#include "nm-gsm-device.h"
#include "nm-cdma-device.h"
#include "nm-device-modem.h"
#include "nm-device-bt.h"
#include "nm-device-wimax.h"
#include "nm-device.h"
@ -748,11 +747,8 @@ nm_device_new (DBusGConnection *connection, const char *path)
case NM_DEVICE_TYPE_WIFI:
dtype = NM_TYPE_DEVICE_WIFI;
break;
case NM_DEVICE_TYPE_GSM:
dtype = NM_TYPE_GSM_DEVICE;
break;
case NM_DEVICE_TYPE_CDMA:
dtype = NM_TYPE_CDMA_DEVICE;
case NM_DEVICE_TYPE_MODEM:
dtype = NM_TYPE_DEVICE_MODEM;
break;
case NM_DEVICE_TYPE_BT:
dtype = NM_TYPE_DEVICE_BT;

View file

@ -1,130 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
* libnm_glib -- Access network status & information from glib applications
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
* Copyright (C) 2007 - 2008 Red Hat, Inc.
*/
#include "nm-gsm-device.h"
#include "nm-device-private.h"
#include "nm-object-private.h"
G_DEFINE_TYPE (NMGsmDevice, nm_gsm_device, NM_TYPE_SERIAL_DEVICE)
#define NM_GSM_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_GSM_DEVICE, NMGsmDevicePrivate))
typedef struct {
DBusGProxy *proxy;
gboolean disposed;
} NMGsmDevicePrivate;
static void
nm_gsm_device_init (NMGsmDevice *device)
{
}
static void
register_for_property_changed (NMGsmDevice *device)
{
NMGsmDevicePrivate *priv = NM_GSM_DEVICE_GET_PRIVATE (device);
const NMPropertiesChangedInfo property_changed_info[] = {
{ NULL },
};
_nm_object_handle_properties_changed (NM_OBJECT (device),
priv->proxy,
property_changed_info);
}
static GObject*
constructor (GType type,
guint n_construct_params,
GObjectConstructParam *construct_params)
{
GObject *object;
NMGsmDevicePrivate *priv;
object = G_OBJECT_CLASS (nm_gsm_device_parent_class)->constructor (type,
n_construct_params,
construct_params);
if (!object)
return NULL;
priv = NM_GSM_DEVICE_GET_PRIVATE (object);
priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
NM_DBUS_SERVICE,
nm_object_get_path (NM_OBJECT (object)),
NM_DBUS_INTERFACE_GSM_DEVICE);
register_for_property_changed (NM_GSM_DEVICE (object));
return object;
}
static void
dispose (GObject *object)
{
NMGsmDevicePrivate *priv = NM_GSM_DEVICE_GET_PRIVATE (object);
if (priv->disposed) {
G_OBJECT_CLASS (nm_gsm_device_parent_class)->dispose (object);
return;
}
priv->disposed = TRUE;
g_object_unref (priv->proxy);
G_OBJECT_CLASS (nm_gsm_device_parent_class)->dispose (object);
}
static void
nm_gsm_device_class_init (NMGsmDeviceClass *device_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (device_class);
g_type_class_add_private (device_class, sizeof (NMGsmDevicePrivate));
/* virtual methods */
object_class->constructor = constructor;
object_class->dispose = dispose;
}
/**
* nm_gsm_device_new:
* @connection: the #DBusGConnection
* @path: the DBus object path of the device
*
* Creates a new #NMGsmDevice.
*
* Returns: a new device
**/
NMGsmDevice *
nm_gsm_device_new (DBusGConnection *connection, const char *path)
{
g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (path != NULL, NULL);
return (NMGsmDevice *) g_object_new (NM_TYPE_GSM_DEVICE,
NM_OBJECT_DBUS_CONNECTION, connection,
NM_OBJECT_DBUS_PATH, path,
NULL);
}

View file

@ -1,61 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
* libnm_glib -- Access network status & information from glib applications
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
* Copyright (C) 2007 - 2008 Red Hat, Inc.
*/
#ifndef NM_GSM_DEVICE_H
#define NM_GSM_DEVICE_H
#include "nm-serial-device.h"
G_BEGIN_DECLS
#define NM_TYPE_GSM_DEVICE (nm_gsm_device_get_type ())
#define NM_GSM_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_GSM_DEVICE, NMGsmDevice))
#define NM_GSM_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_GSM_DEVICE, NMGsmDeviceClass))
#define NM_IS_GSM_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_GSM_DEVICE))
#define NM_IS_GSM_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_GSM_DEVICE))
#define NM_GSM_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_GSM_DEVICE, NMGsmDeviceClass))
typedef struct {
NMSerialDevice parent;
} NMGsmDevice;
typedef struct {
NMSerialDeviceClass parent;
/* Padding for future expansion */
void (*_reserved1) (void);
void (*_reserved2) (void);
void (*_reserved3) (void);
void (*_reserved4) (void);
void (*_reserved5) (void);
void (*_reserved6) (void);
} NMGsmDeviceClass;
GType nm_gsm_device_get_type (void);
NMGsmDevice *nm_gsm_device_new (DBusGConnection *connection,
const char *path);
G_END_DECLS
#endif /* NM_GSM_DEVICE_H */

View file

@ -1,207 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
* libnm_glib -- Access network status & information from glib applications
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2008 Novell, Inc.
*/
#include "nm-serial-device.h"
#include "nm-device-private.h"
#include "nm-object-private.h"
#include "nm-marshal.h"
G_DEFINE_ABSTRACT_TYPE (NMSerialDevice, nm_serial_device, NM_TYPE_DEVICE)
#define NM_SERIAL_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SERIAL_DEVICE, NMSerialDevicePrivate))
typedef struct {
DBusGProxy *proxy;
guint32 in_bytes;
guint32 out_bytes;
gboolean disposed;
} NMSerialDevicePrivate;
enum {
PPP_STATS,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
/**
* nm_serial_device_get_bytes_received:
* @self: a #NMSerialDevice
*
* Gets the amount of bytes received by the serial device.
* This counter is reset when the device is activated.
*
* Returns: bytes received
**/
guint32
nm_serial_device_get_bytes_received (NMSerialDevice *self)
{
g_return_val_if_fail (NM_IS_SERIAL_DEVICE (self), 0);
return NM_SERIAL_DEVICE_GET_PRIVATE (self)->in_bytes;
}
/**
* nm_serial_device_get_bytes_sent:
* @self: a #NMSerialDevice
*
* Gets the amount of bytes sent by the serial device.
* This counter is reset when the device is activated.
*
* Returns: bytes sent
**/
guint32
nm_serial_device_get_bytes_sent (NMSerialDevice *self)
{
g_return_val_if_fail (NM_IS_SERIAL_DEVICE (self), 0);
return NM_SERIAL_DEVICE_GET_PRIVATE (self)->out_bytes;
}
static void
ppp_stats (DBusGProxy *proxy,
guint32 in_bytes,
guint32 out_bytes,
gpointer user_data)
{
NMSerialDevice *self = NM_SERIAL_DEVICE (user_data);
NMSerialDevicePrivate *priv = NM_SERIAL_DEVICE_GET_PRIVATE (self);
priv->in_bytes = in_bytes;
priv->out_bytes = out_bytes;
g_signal_emit (self, signals[PPP_STATS], 0, in_bytes, out_bytes);
}
static void
device_state_changed (NMDevice *device, GParamSpec *pspec, gpointer user_data)
{
NMSerialDevicePrivate *priv;
switch (nm_device_get_state (device)) {
case NM_DEVICE_STATE_UNMANAGED:
case NM_DEVICE_STATE_UNAVAILABLE:
case NM_DEVICE_STATE_DISCONNECTED:
priv = NM_SERIAL_DEVICE_GET_PRIVATE (device);
priv->in_bytes = priv->out_bytes = 0;
break;
default:
break;
}
}
static void
nm_serial_device_init (NMSerialDevice *device)
{
}
static GObject*
constructor (GType type,
guint n_construct_params,
GObjectConstructParam *construct_params)
{
GObject *object;
NMSerialDevicePrivate *priv;
object = G_OBJECT_CLASS (nm_serial_device_parent_class)->constructor (type,
n_construct_params,
construct_params);
if (!object)
return NULL;
priv = NM_SERIAL_DEVICE_GET_PRIVATE (object);
priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
NM_DBUS_SERVICE,
nm_object_get_path (NM_OBJECT (object)),
NM_DBUS_INTERFACE_SERIAL_DEVICE);
dbus_g_object_register_marshaller (_nm_marshal_VOID__UINT_UINT,
G_TYPE_NONE,
G_TYPE_UINT, G_TYPE_UINT,
G_TYPE_INVALID);
dbus_g_proxy_add_signal (priv->proxy, "PppStats", G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (priv->proxy, "PppStats",
G_CALLBACK (ppp_stats),
object,
NULL);
/* Catch NMDevice::state changes to reset the counters */
g_signal_connect (object, "notify::state",
G_CALLBACK (device_state_changed),
object);
return object;
}
static void
dispose (GObject *object)
{
NMSerialDevicePrivate *priv = NM_SERIAL_DEVICE_GET_PRIVATE (object);
if (priv->disposed) {
G_OBJECT_CLASS (nm_serial_device_parent_class)->dispose (object);
return;
}
priv->disposed = TRUE;
g_object_unref (priv->proxy);
G_OBJECT_CLASS (nm_serial_device_parent_class)->dispose (object);
}
static void
nm_serial_device_class_init (NMSerialDeviceClass *device_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (device_class);
g_type_class_add_private (device_class, sizeof (NMSerialDevicePrivate));
/* virtual methods */
object_class->constructor = constructor;
object_class->dispose = dispose;
/* Signals */
/**
* NMSerialDevice::ppp-stats:
* @device: the serial device that received the signal
* @in_bytes: the amount of bytes received
* @out_bytes: the amount of bytes sent
*
* Notifies that a #NMAccessPoint is added to the wifi device.
**/
signals[PPP_STATS] =
g_signal_new ("ppp-stats",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMSerialDeviceClass, ppp_stats),
NULL, NULL,
_nm_marshal_VOID__UINT_UINT,
G_TYPE_NONE, 2,
G_TYPE_UINT, G_TYPE_UINT);
}

View file

@ -126,10 +126,6 @@ NetworkManager_SOURCES = \
nm-device-bt.h \
nm-device-modem.h \
nm-device-modem.c \
nm-device-cdma.c \
nm-device-cdma.h \
nm-device-gsm.c \
nm-device-gsm.h \
nm-wifi-ap.c \
nm-wifi-ap.h \
nm-wifi-ap-utils.c \
@ -213,11 +209,8 @@ nm-dhcp4-config-glue.h: $(top_srcdir)/introspection/nm-dhcp4-config.xml
nm-dhcp6-config-glue.h: $(top_srcdir)/introspection/nm-dhcp6-config.xml
$(AM_V_GEN) dbus-binding-tool --prefix=nm_dhcp6_config --mode=glib-server --output=$@ $<
nm-device-cdma-glue.h: $(top_srcdir)/introspection/nm-device-cdma.xml
$(AM_V_GEN) dbus-binding-tool --prefix=nm_device_cdma --mode=glib-server --output=$@ $<
nm-device-gsm-glue.h: $(top_srcdir)/introspection/nm-device-gsm.xml
$(AM_V_GEN) dbus-binding-tool --prefix=nm_device_gsm --mode=glib-server --output=$@ $<
nm-device-modem-glue.h: $(top_srcdir)/introspection/nm-device-modem.xml
$(AM_V_GEN) dbus-binding-tool --prefix=nm_device_modem --mode=glib-server --output=$@ $<
BUILT_SOURCES = \
nm-access-point-glue.h \
@ -227,8 +220,7 @@ BUILT_SOURCES = \
nm-device-wifi-glue.h \
nm-device-olpc-mesh-glue.h \
nm-device-bt-glue.h \
nm-device-cdma-glue.h \
nm-device-gsm-glue.h \
nm-device-modem-glue.h \
nm-ip4-config-glue.h \
nm-ip6-config-glue.h \
nm-active-connection-glue.h \

View file

@ -26,10 +26,3 @@ libmodem_manager_la_LIBADD = \
$(top_builddir)/src/logging/libnm-logging.la \
$(DBUS_LIBS)
nm-serial-device-glue.h: $(top_srcdir)/introspection/nm-device-serial.xml
$(AM_V_GEN) dbus-binding-tool --prefix=nm_serial_device --mode=glib-server --output=$@ $<
BUILT_SOURCES = \
nm-serial-device-glue.h
CLEANFILES = $(BUILT_SOURCES)

View file

@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2009 - 2010 Red Hat, Inc.
* Copyright (C) 2009 - 2011 Red Hat, Inc.
* Copyright (C) 2009 Novell, Inc.
*/
@ -33,8 +33,6 @@
#include "nm-device-interface.h"
#include "nm-dbus-glib-types.h"
#include "nm-serial-device-glue.h"
G_DEFINE_TYPE (NMModem, nm_modem, G_TYPE_OBJECT)
#define NM_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_MODEM, NMModemPrivate))
@ -1184,9 +1182,3 @@ nm_modem_class_init (NMModemClass *klass)
G_TYPE_NONE, 1, G_TYPE_POINTER);
}
const DBusGObjectInfo *
nm_modem_get_serial_dbus_info (void)
{
return &dbus_glib_nm_serial_device_object_info;
}

View file

@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2009 - 2010 Red Hat, Inc.
* Copyright (C) 2009 - 2011 Red Hat, Inc.
* Copyright (C) 2009 Novell, Inc.
*/
@ -152,8 +152,6 @@ gboolean nm_modem_hw_is_up (NMModem *modem, NMDevice *device);
gboolean nm_modem_hw_bring_up (NMModem *modem, NMDevice *device, gboolean *no_firmware);
const DBusGObjectInfo *nm_modem_get_serial_dbus_info (void);
gboolean nm_modem_get_mm_enabled (NMModem *self);
void nm_modem_set_mm_enabled (NMModem *self, gboolean enabled);

View file

@ -1,75 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager -- Network link manager
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2009 - 2010 Red Hat, Inc.
*/
#include <string.h>
#include "nm-modem-cdma.h"
#include "nm-device-interface.h"
#include "nm-device-cdma.h"
#include "nm-properties-changed-signal.h"
#include "nm-rfkill.h"
#include "nm-device-cdma-glue.h"
G_DEFINE_TYPE (NMDeviceCdma, nm_device_cdma, NM_TYPE_DEVICE_MODEM)
enum {
PROPERTIES_CHANGED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
NMDevice *
nm_device_cdma_new (NMModemCdma *modem, const char *driver)
{
g_return_val_if_fail (modem != NULL, NULL);
g_return_val_if_fail (NM_IS_MODEM_CDMA (modem), NULL);
g_return_val_if_fail (driver != NULL, NULL);
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_CDMA,
NM_DEVICE_INTERFACE_UDI, nm_modem_get_path (NM_MODEM (modem)),
NM_DEVICE_INTERFACE_IFACE, nm_modem_get_iface (NM_MODEM (modem)),
NM_DEVICE_INTERFACE_DRIVER, driver,
NM_DEVICE_INTERFACE_TYPE_DESC, "CDMA",
NM_DEVICE_INTERFACE_DEVICE_TYPE, NM_DEVICE_TYPE_CDMA,
NM_DEVICE_INTERFACE_RFKILL_TYPE, RFKILL_TYPE_WWAN,
NM_DEVICE_MODEM_MODEM, modem,
NULL);
}
static void
nm_device_cdma_init (NMDeviceCdma *self)
{
}
static void
nm_device_cdma_class_init (NMDeviceCdmaClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
/* Signals */
signals[PROPERTIES_CHANGED] =
nm_properties_changed_signal_new (object_class,
G_STRUCT_OFFSET (NMDeviceCdmaClass, properties_changed));
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
&dbus_glib_nm_device_cdma_object_info);
}

View file

@ -1,55 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager -- Network link manager
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2009 Red Hat, Inc.
*/
#ifndef NM_DEVICE_CDMA_H
#define NM_DEVICE_CDMA_H
#include "nm-device-modem.h"
#include "nm-modem-cdma.h"
G_BEGIN_DECLS
#define NM_TYPE_DEVICE_CDMA (nm_device_cdma_get_type ())
#define NM_DEVICE_CDMA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_CDMA, NMDeviceCdma))
#define NM_DEVICE_CDMA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_CDMA, NMDeviceCdmaClass))
#define NM_IS_DEVICE_CDMA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_CDMA))
#define NM_IS_DEVICE_CDMA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_CDMA))
#define NM_DEVICE_CDMA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_CDMA, NMDeviceCdmaClass))
typedef struct {
NMDeviceModem parent;
} NMDeviceCdma;
typedef struct {
NMDeviceModemClass parent;
/* Signals */
void (*signal_quality) (NMDeviceCdma *self, guint32 quality);
void (*properties_changed) (NMDeviceCdma *self, GHashTable *properties);
} NMDeviceCdmaClass;
GType nm_device_cdma_get_type (void);
NMDevice *nm_device_cdma_new (NMModemCdma *modem, const char *driver);
G_END_DECLS
#endif /* NM_DEVICE_CDMA_H */

View file

@ -1,75 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager -- Network link manager
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2009 - 2010 Red Hat, Inc.
*/
#include <string.h>
#include "nm-modem-gsm.h"
#include "nm-device-interface.h"
#include "nm-device-gsm.h"
#include "nm-properties-changed-signal.h"
#include "nm-rfkill.h"
#include "nm-device-gsm-glue.h"
G_DEFINE_TYPE (NMDeviceGsm, nm_device_gsm, NM_TYPE_DEVICE_MODEM)
enum {
PROPERTIES_CHANGED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
NMDevice *
nm_device_gsm_new (NMModemGsm *modem, const char *driver)
{
g_return_val_if_fail (modem != NULL, NULL);
g_return_val_if_fail (NM_IS_MODEM_GSM (modem), NULL);
g_return_val_if_fail (driver != NULL, NULL);
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_GSM,
NM_DEVICE_INTERFACE_UDI, nm_modem_get_path (NM_MODEM (modem)),
NM_DEVICE_INTERFACE_IFACE, nm_modem_get_iface (NM_MODEM (modem)),
NM_DEVICE_INTERFACE_DRIVER, driver,
NM_DEVICE_INTERFACE_TYPE_DESC, "GSM",
NM_DEVICE_INTERFACE_DEVICE_TYPE, NM_DEVICE_TYPE_GSM,
NM_DEVICE_INTERFACE_RFKILL_TYPE, RFKILL_TYPE_WWAN,
NM_DEVICE_MODEM_MODEM, modem,
NULL);
}
static void
nm_device_gsm_init (NMDeviceGsm *self)
{
}
static void
nm_device_gsm_class_init (NMDeviceGsmClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
/* Signals */
signals[PROPERTIES_CHANGED] =
nm_properties_changed_signal_new (object_class,
G_STRUCT_OFFSET (NMDeviceGsmClass, properties_changed));
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
&dbus_glib_nm_device_gsm_object_info);
}

View file

@ -1,55 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager -- Network link manager
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2009 Red Hat, Inc.
*/
#ifndef NM_DEVICE_GSM_H
#define NM_DEVICE_GSM_H
#include "nm-device-modem.h"
#include "nm-modem-gsm.h"
G_BEGIN_DECLS
#define NM_TYPE_DEVICE_GSM (nm_device_gsm_get_type ())
#define NM_DEVICE_GSM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_GSM, NMDeviceGsm))
#define NM_DEVICE_GSM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_GSM, NMDeviceGsmClass))
#define NM_IS_DEVICE_GSM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_GSM))
#define NM_IS_DEVICE_GSM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_GSM))
#define NM_DEVICE_GSM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_GSM, NMDeviceGsmClass))
typedef struct {
NMDeviceModem parent;
} NMDeviceGsm;
typedef struct {
NMDeviceModemClass parent;
/* Signals */
void (*signal_quality) (NMDeviceGsm *self, guint32 quality);
void (*properties_changed) (NMDeviceGsm *self, GHashTable *properties);
} NMDeviceGsmClass;
GType nm_device_gsm_get_type (void);
NMDevice *nm_device_gsm_new (NMModemGsm *modem, const char *driver);
G_END_DECLS
#endif /* NM_DEVICE_GSM_H */

View file

@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2009 - 2010 Red Hat, Inc.
* Copyright (C) 2009 - 2011 Red Hat, Inc.
*/
#include <glib.h>
@ -23,29 +23,38 @@
#include "nm-device-modem.h"
#include "nm-device-interface.h"
#include "nm-modem.h"
#include "nm-modem-cdma.h"
#include "nm-modem-gsm.h"
#include "nm-device-private.h"
#include "nm-properties-changed-signal.h"
#include "nm-rfkill.h"
#include "nm-marshal.h"
#include "nm-logging.h"
static void device_interface_init (NMDeviceInterface *iface_class);
G_DEFINE_TYPE_EXTENDED (NMDeviceModem, nm_device_modem, NM_TYPE_DEVICE, G_TYPE_FLAG_ABSTRACT,
G_DEFINE_TYPE_EXTENDED (NMDeviceModem, nm_device_modem, NM_TYPE_DEVICE, 0,
G_IMPLEMENT_INTERFACE (NM_TYPE_DEVICE_INTERFACE, device_interface_init))
#define NM_DEVICE_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_MODEM, NMDeviceModemPrivate))
#include "nm-device-modem-glue.h"
typedef struct {
NMModem *modem;
NMDeviceModemCapabilities caps;
NMDeviceModemCapabilities current_caps;
} NMDeviceModemPrivate;
enum {
PROP_0,
PROP_MODEM
PROP_MODEM,
PROP_CAPABILITIES,
PROP_CURRENT_CAPABILITIES,
};
enum {
PPP_STATS,
PROPERTIES_CHANGED,
ENABLE_CHANGED,
LAST_SIGNAL
};
@ -55,15 +64,6 @@ static void real_set_enabled (NMDeviceInterface *device, gboolean enabled);
/*****************************************************************************/
static void
ppp_stats (NMModem *modem,
guint32 in_bytes,
guint32 out_bytes,
gpointer user_data)
{
g_signal_emit (G_OBJECT (user_data), signals[PPP_STATS], 0, in_bytes, out_bytes);
}
static void
ppp_failed (NMModem *modem, NMDeviceStateReason reason, gpointer user_data)
{
@ -324,6 +324,40 @@ real_set_enabled (NMDeviceInterface *device, gboolean enabled)
/*****************************************************************************/
NMDevice *
nm_device_modem_new (NMModem *modem, const char *driver)
{
NMDeviceModemCapabilities caps = NM_DEVICE_MODEM_CAPABILITY_NONE;
const char *type_desc = NULL;
g_return_val_if_fail (modem != NULL, NULL);
g_return_val_if_fail (NM_IS_MODEM (modem), NULL);
g_return_val_if_fail (driver != NULL, NULL);
if (NM_IS_MODEM_CDMA (modem)) {
caps = NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO;
type_desc = "CDMA/EVDO";
} else if (NM_IS_MODEM_GSM (modem)) {
caps = NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS;
type_desc = "GSM/UMTS";
} else {
nm_log_warn (LOGD_MB, "unhandled modem type %s", G_OBJECT_TYPE_NAME (modem));
return NULL;
}
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_MODEM,
NM_DEVICE_INTERFACE_UDI, nm_modem_get_path (modem),
NM_DEVICE_INTERFACE_IFACE, nm_modem_get_iface (modem),
NM_DEVICE_INTERFACE_DRIVER, driver,
NM_DEVICE_INTERFACE_TYPE_DESC, type_desc,
NM_DEVICE_INTERFACE_DEVICE_TYPE, NM_DEVICE_TYPE_MODEM,
NM_DEVICE_INTERFACE_RFKILL_TYPE, RFKILL_TYPE_WWAN,
NM_DEVICE_MODEM_MODEM, modem,
NM_DEVICE_MODEM_CAPABILITIES, caps,
NM_DEVICE_MODEM_CURRENT_CAPABILITIES, caps,
NULL);
}
static void
device_interface_init (NMDeviceInterface *iface_class)
{
@ -346,7 +380,6 @@ set_modem (NMDeviceModem *self, NMModem *modem)
priv->modem = g_object_ref (modem);
g_signal_connect (modem, NM_MODEM_PPP_STATS, G_CALLBACK (ppp_stats), self);
g_signal_connect (modem, NM_MODEM_PPP_FAILED, G_CALLBACK (ppp_failed), self);
g_signal_connect (modem, NM_MODEM_PREPARE_RESULT, G_CALLBACK (modem_prepare_result), self);
g_signal_connect (modem, NM_MODEM_IP4_CONFIG_RESULT, G_CALLBACK (modem_ip4_config_result), self);
@ -359,11 +392,19 @@ static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
switch (prop_id) {
case PROP_MODEM:
/* construct-only */
set_modem (NM_DEVICE_MODEM (object), g_value_get_object (value));
break;
case PROP_CAPABILITIES:
priv->caps = g_value_get_uint (value);
break;
case PROP_CURRENT_CAPABILITIES:
priv->current_caps = g_value_get_uint (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@ -380,6 +421,12 @@ get_property (GObject *object, guint prop_id,
case PROP_MODEM:
g_value_set_object (value, priv->modem);
break;
case PROP_CAPABILITIES:
g_value_set_uint (value, priv->caps);
break;
case PROP_CURRENT_CAPABILITIES:
g_value_set_uint (value, priv->current_caps);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@ -431,27 +478,34 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass)
NM_TYPE_MODEM,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
g_object_class_install_property (object_class, PROP_CAPABILITIES,
g_param_spec_uint (NM_DEVICE_MODEM_CAPABILITIES,
"Modem Capabilities",
"Modem Capabilities",
0, G_MAXUINT32, NM_DEVICE_MODEM_CAPABILITY_NONE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_CURRENT_CAPABILITIES,
g_param_spec_uint (NM_DEVICE_MODEM_CURRENT_CAPABILITIES,
"Current modem Capabilities",
"Current modem Capabilities",
0, G_MAXUINT32, NM_DEVICE_MODEM_CAPABILITY_NONE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
/* Signals */
signals[PPP_STATS] =
g_signal_new ("ppp-stats",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMDeviceModemClass, ppp_stats),
NULL, NULL,
_nm_marshal_VOID__UINT_UINT,
G_TYPE_NONE, 2,
G_TYPE_UINT, G_TYPE_UINT);
signals[PROPERTIES_CHANGED] =
nm_properties_changed_signal_new (object_class,
G_STRUCT_OFFSET (NMDeviceModemClass, properties_changed));
signals[ENABLE_CHANGED] =
g_signal_new (NM_DEVICE_MODEM_ENABLE_CHANGED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0,
NULL, NULL,
0, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (mclass),
nm_modem_get_serial_dbus_info ());
&dbus_glib_nm_device_modem_object_info);
}

View file

@ -35,6 +35,8 @@
#define NM_DEVICE_MODEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_MODEM, NMDeviceModemClass))
#define NM_DEVICE_MODEM_MODEM "modem"
#define NM_DEVICE_MODEM_CAPABILITIES "modem-capabilities"
#define NM_DEVICE_MODEM_CURRENT_CAPABILITIES "current-capabilities"
#define NM_DEVICE_MODEM_ENABLE_CHANGED "enable-changed"
@ -45,11 +47,13 @@ typedef struct {
typedef struct {
NMDeviceClass parent;
void (*ppp_stats) (NMDeviceModem *self, guint32 in_bytes, guint32 out_bytes);
void (*properties_changed) (NMDeviceModem *self, GHashTable *properties);
} NMDeviceModemClass;
GType nm_device_modem_get_type (void);
NMDevice *nm_device_modem_new (NMModem *modem, const char *driver);
/* Private for subclases */
NMModem *nm_device_modem_get_modem (NMDeviceModem *self);

View file

@ -42,8 +42,7 @@
#if WITH_WIMAX
#include "nm-device-wimax.h"
#endif
#include "nm-device-cdma.h"
#include "nm-device-gsm.h"
#include "nm-device-modem.h"
#include "nm-system.h"
#include "nm-properties-changed-signal.h"
#include "nm-setting-bluetooth.h"
@ -421,14 +420,8 @@ modem_added (NMModemManager *modem_manager,
return;
}
/* Otherwise make a new top-level NMDevice for it */
if (NM_IS_MODEM_GSM (modem))
device = nm_device_gsm_new (NM_MODEM_GSM (modem), driver);
else if (NM_IS_MODEM_CDMA (modem))
device = nm_device_cdma_new (NM_MODEM_CDMA (modem), driver);
else
nm_log_info (LOGD_MB, "unhandled modem '%s'", ip_iface);
/* Make the new modem device */
device = nm_device_modem_new (modem, driver);
if (device)
add_device (self, device);
}

View file

@ -37,8 +37,7 @@
#include <nm-device.h>
#include <nm-device-ethernet.h>
#include <nm-device-wifi.h>
#include <nm-gsm-device.h>
#include <nm-cdma-device.h>
#include <nm-device-modem.h>
#include <nm-device-bt.h>
#if WITH_WIMAX
#include <nm-device-wimax.h>
@ -372,11 +371,17 @@ detail_device (gpointer data, gpointer user_data)
print_string ("Type", "Wired");
else if (NM_IS_DEVICE_WIFI (device))
print_string ("Type", "802.11 WiFi");
else if (NM_IS_GSM_DEVICE (device))
print_string ("Type", "Mobile Broadband (GSM)");
else if (NM_IS_CDMA_DEVICE (device))
print_string ("Type", "Mobile Broadband (CDMA)");
else if (NM_IS_DEVICE_BT (device))
else if (NM_IS_DEVICE_MODEM (device)) {
NMDeviceModemCapabilities modem_caps;
modem_caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
if (modem_caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS)
print_string ("Type", "Mobile Broadband (GSM)");
else if (modem_caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)
print_string ("Type", "Mobile Broadband (CDMA)");
else
print_string ("Type", "Mobile Broadband (unknown)");
} else if (NM_IS_DEVICE_BT (device))
print_string ("Type", "Bluetooth");
#if WITH_WIMAX
else if (NM_IS_DEVICE_WIMAX (device))