diff options
Diffstat (limited to 'nm-applet-r874-use-modem-manager.patch')
-rw-r--r-- | nm-applet-r874-use-modem-manager.patch | 427 |
1 files changed, 0 insertions, 427 deletions
diff --git a/nm-applet-r874-use-modem-manager.patch b/nm-applet-r874-use-modem-manager.patch deleted file mode 100644 index 4d965461..00000000 --- a/nm-applet-r874-use-modem-manager.patch +++ /dev/null @@ -1,427 +0,0 @@ -diff --git a/src/Makefile.am b/src/Makefile.am -index de8ccb4..fe60b87 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -49,6 +49,9 @@ nm_applet_SOURCES = \ - applet-device-gsm.c \ - applet-device-cdma.h \ - applet-device-cdma.c \ -+ mm-types.h \ -+ nma-gsm-modem.c \ -+ nma-gsm-modem.h \ - $(NULL) - - nm_applet_LDADD = \ -diff --git a/src/applet-device-gsm.c b/src/applet-device-gsm.c -index 1641661..fd2601d 100644 ---- a/src/applet-device-gsm.c -+++ b/src/applet-device-gsm.c -@@ -39,6 +39,8 @@ - - #include "applet.h" - #include "applet-device-gsm.h" -+#include "nma-gsm-modem.h" -+#include "mm-types.h" - #include "utils.h" - - typedef struct { -@@ -277,16 +279,64 @@ out: - } - - static void -+signal_quality_changed (NMAGsmModem *modem, guint32 quality, gpointer user_data) -+{ -+ applet_schedule_update_icon (NM_APPLET (user_data)); -+} -+ -+static void - gsm_device_state_changed (NMDevice *device, - NMDeviceState state, - NMApplet *applet) - { -- if (state == NM_DEVICE_STATE_ACTIVATED) { -- applet_do_notify (applet, NOTIFY_URGENCY_LOW, -- _("Connection Established"), -- _("You are now connected to the GSM network."), -- "nm-device-wwan", NULL, NULL, NULL, NULL); -+ NMAGsmModem *modem; -+ char *oper_code; -+ char *oper_name; -+ char *msg; -+ guint32 reg_status; -+ -+ if (state != NM_DEVICE_STATE_ACTIVATED) -+ return; -+ -+ modem = (NMAGsmModem *) g_object_get_data (G_OBJECT (device), "gsm-modem"); -+ if (!modem) { -+ DBusGConnection *bus; -+ -+ bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL); -+ if (!bus) -+ return; -+ -+ modem = nma_gsm_modem_new (bus, nm_device_get_udi (device)); -+ dbus_g_connection_unref (bus); -+ -+ g_object_set_data_full (G_OBJECT (device), "gsm-modem", modem, g_object_unref); -+ -+ g_signal_connect (modem, "signal-quality", -+ G_CALLBACK (signal_quality_changed), -+ applet); - } -+ -+ g_message ("Signal quality: %d", nma_gsm_modem_get_signal_quality (modem)); -+ g_message ("Network mode: %d", nma_gsm_modem_get_network_mode (modem)); -+ -+ oper_code = NULL; -+ oper_name = NULL; -+ -+ reg_status = nma_gsm_modem_get_registration_info (modem, &oper_code, &oper_name); -+ -+ g_message ("Reg status: %d code: %s name: %s", reg_status, oper_code, oper_name); -+ -+ msg = g_strdup_printf (_("You are now connected to the %s GSM network '%s'."), -+ reg_status == MM_GSM_MODEM_REG_STATUS_ROAMING ? _("roaming") : _("home"), -+ oper_name); -+ -+ applet_do_notify (applet, NOTIFY_URGENCY_LOW, -+ _("Connection Established"), msg, -+ "nm-device-wwan", NULL, NULL, NULL, NULL); -+ -+ g_free (oper_code); -+ g_free (oper_name); -+ g_free (msg); - } - - static GdkPixbuf * -@@ -295,6 +345,7 @@ gsm_get_icon (NMDevice *device, - char **tip, - NMApplet *applet) - { -+ NMAGsmModem *modem; - GdkPixbuf *pixbuf = NULL; - const char *iface; - -@@ -311,8 +362,40 @@ gsm_get_icon (NMDevice *device, - *tip = g_strdup_printf (_("Waiting for user authentication on device '%s'..."), iface); - break; - case NM_DEVICE_STATE_ACTIVATED: -- *tip = g_strdup (_("GSM connection")); -- pixbuf = applet->wwan_icon; -+ modem = (NMAGsmModem *) g_object_get_data (G_OBJECT (device), "gsm-modem"); -+ if (modem) { -+ char *oper_code; -+ char *oper_name; -+ guint32 reg_status; -+ guint32 quality; -+ -+ quality = nma_gsm_modem_get_signal_quality (modem); -+ quality = CLAMP (quality, 0, 100); -+ -+ if (quality > 80) -+ pixbuf = applet->wireless_100_icon; -+ else if (quality > 55) -+ pixbuf = applet->wireless_75_icon; -+ else if (quality > 30) -+ pixbuf = applet->wireless_50_icon; -+ else if (quality > 5) -+ pixbuf = applet->wireless_25_icon; -+ else -+ pixbuf = applet->wireless_00_icon; -+ -+ reg_status = nma_gsm_modem_get_registration_info (modem, &oper_code, &oper_name); -+ *tip = g_strdup_printf (_("%s GSM connection '%s' (%d%%)"), -+ reg_status == MM_GSM_MODEM_REG_STATUS_ROAMING ? _("Roaming") : _("Home"), -+ oper_name, quality); -+ -+ g_free (oper_name); -+ g_free (oper_code); -+ -+ } else { -+ pixbuf = applet->wireless_00_icon; -+ *tip = g_strdup_printf (_("GSM connection")); -+ } -+ - break; - default: - break; -diff --git a/src/mm-types.h b/src/mm-types.h -new file mode 100644 -index 0000000..a1f9979 ---- /dev/null -+++ b/src/mm-types.h -@@ -0,0 +1,18 @@ -+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */ -+ -+#ifndef MM_TYPES_H -+#define MM_TYPES_H -+ -+#define MM_DBUS_SERVICE "org.freedesktop.ModemManager" -+#define MM_DBUS_INTERFACE_MODEM_GSM "org.freedesktop.ModemManager.Modem.Gsm.Network" -+ -+enum { -+ MM_GSM_MODEM_REG_STATUS_IDLE = 0, -+ MM_GSM_MODEM_REG_STATUS_HOME = 1, -+ MM_GSM_MODEM_REG_STATUS_SEARCHING = 2, -+ MM_GSM_MODEM_REG_STATUS_DENIED = 3, -+ MM_GSM_MODEM_REG_STATUS_UNKNOWN = 4, -+ MM_GSM_MODEM_REG_STATUS_ROAMING = 5 -+}; -+ -+#endif /* MM_TYPES_H */ -diff --git a/src/nma-gsm-modem.c b/src/nma-gsm-modem.c -new file mode 100644 -index 0000000..584090b ---- /dev/null -+++ b/src/nma-gsm-modem.c -@@ -0,0 +1,198 @@ -+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */ -+ -+#include "nma-gsm-modem.h" -+#include "mm-types.h" -+ -+G_DEFINE_TYPE (NMAGsmModem, nma_gsm_modem, G_TYPE_OBJECT) -+ -+#define NMA_GSM_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMA_TYPE_GSM_MODEM, NMAGsmModemPrivate)) -+ -+typedef struct { -+ DBusGProxy *proxy; -+ int signal_quality; -+ -+ gboolean disposed; -+} NMAGsmModemPrivate; -+ -+enum { -+ SIGNAL_QUALITY, -+ NETWORK_MODE, -+ -+ LAST_SIGNAL -+}; -+ -+static guint signals[LAST_SIGNAL] = { 0 }; -+ -+static void -+signal_quality_proxy (DBusGProxy *proxy, -+ guint32 signal_quality, -+ gpointer user_data) -+{ -+ NMAGsmModem *modem = NMA_GSM_MODEM (user_data); -+ -+ NMA_GSM_MODEM_GET_PRIVATE (modem)->signal_quality = signal_quality; -+ -+ g_signal_emit (modem, signals[SIGNAL_QUALITY], 0, signal_quality); -+} -+ -+static void -+network_mode_proxy (DBusGProxy *proxy, -+ guint32 network_mode, -+ gpointer user_data) -+{ -+ NMAGsmModem *modem = NMA_GSM_MODEM (user_data); -+ -+ g_signal_emit (modem, signals[NETWORK_MODE], 0, network_mode); -+} -+ -+NMAGsmModem * -+nma_gsm_modem_new (DBusGConnection *bus, const char *object_path) -+{ -+ NMAGsmModem *modem; -+ NMAGsmModemPrivate *priv; -+ -+ g_return_val_if_fail (bus != NULL, NULL); -+ g_return_val_if_fail (object_path != NULL, NULL); -+ -+ modem = (NMAGsmModem *) g_object_new (NMA_TYPE_GSM_MODEM, NULL); -+ if (!modem) -+ return NULL; -+ -+ priv = NMA_GSM_MODEM_GET_PRIVATE (modem); -+ priv->proxy = dbus_g_proxy_new_for_name (bus, MM_DBUS_SERVICE, object_path, MM_DBUS_INTERFACE_MODEM_GSM); -+ -+ dbus_g_proxy_add_signal (priv->proxy, "SignalQuality", G_TYPE_UINT, G_TYPE_INVALID); -+ dbus_g_proxy_connect_signal (priv->proxy, "SignalQuality", -+ G_CALLBACK (signal_quality_proxy), -+ modem, -+ NULL); -+ -+ dbus_g_proxy_add_signal (priv->proxy, "NetworkMode", G_TYPE_UINT, G_TYPE_INVALID); -+ dbus_g_proxy_connect_signal (priv->proxy, "NetworkMode", -+ G_CALLBACK (network_mode_proxy), -+ modem, -+ NULL); -+ -+ return modem; -+} -+ -+guint32 -+nma_gsm_modem_get_signal_quality (NMAGsmModem *modem) -+{ -+ NMAGsmModemPrivate *priv = NMA_GSM_MODEM_GET_PRIVATE (modem); -+ GError *err = NULL; -+ -+ g_return_val_if_fail (NMA_IS_GSM_MODEM (modem), 0); -+ -+ if (priv->signal_quality == -1) { -+ if (dbus_g_proxy_call (priv->proxy, "GetSignalQuality", &err, -+ G_TYPE_INVALID, -+ G_TYPE_UINT, &priv->signal_quality, -+ G_TYPE_INVALID)) { -+ g_warning ("Error in getting signal quality: %s", err->message); -+ g_error_free (err); -+ } -+ } -+ -+ return priv->signal_quality; -+} -+ -+guint32 -+nma_gsm_modem_get_registration_info (NMAGsmModem *modem, -+ char **operator_code, -+ char **operator_name) -+{ -+ NMAGsmModemPrivate *priv = NMA_GSM_MODEM_GET_PRIVATE (modem); -+ GError *err = NULL; -+ guint32 status = MM_GSM_MODEM_REG_STATUS_UNKNOWN; -+ -+ g_return_val_if_fail (NMA_IS_GSM_MODEM (modem), 0); -+ -+ if (!dbus_g_proxy_call (priv->proxy, "GetRegistrationInfo", &err, -+ G_TYPE_INVALID, -+ G_TYPE_UINT, &status, -+ G_TYPE_STRING, operator_code, -+ G_TYPE_STRING, operator_name, -+ G_TYPE_INVALID)) { -+ g_warning ("Error in getting network mode: %s", err->message); -+ g_error_free (err); -+ } -+ -+ return status; -+} -+ -+guint32 -+nma_gsm_modem_get_network_mode (NMAGsmModem *modem) -+{ -+ NMAGsmModemPrivate *priv = NMA_GSM_MODEM_GET_PRIVATE (modem); -+ GError *err = NULL; -+ guint32 network_mode = 0; -+ -+ g_return_val_if_fail (NMA_IS_GSM_MODEM (modem), 0); -+ -+ if (!dbus_g_proxy_call (priv->proxy, "GetNetworkMode", &err, -+ G_TYPE_INVALID, -+ G_TYPE_UINT, &network_mode, -+ G_TYPE_INVALID)) { -+ g_warning ("Error in getting network mode: %s", err->message); -+ g_error_free (err); -+ } -+ -+ return network_mode; -+} -+ -+static void -+nma_gsm_modem_init (NMAGsmModem *modem) -+{ -+ NMAGsmModemPrivate *priv = NMA_GSM_MODEM_GET_PRIVATE (modem); -+ -+ priv->signal_quality = -1; -+} -+ -+static void -+dispose (GObject *object) -+{ -+ NMAGsmModemPrivate *priv = NMA_GSM_MODEM_GET_PRIVATE (object); -+ -+ if (priv->disposed) -+ return; -+ -+ priv->disposed = TRUE; -+ -+ if (priv->proxy) -+ g_object_unref (priv->proxy); -+ -+ G_OBJECT_CLASS (nma_gsm_modem_parent_class)->dispose (object); -+} -+ -+static void -+nma_gsm_modem_class_init (NMAGsmModemClass *modem_class) -+{ -+ GObjectClass *object_class = G_OBJECT_CLASS (modem_class); -+ -+ g_type_class_add_private (modem_class, sizeof (NMAGsmModemPrivate)); -+ -+ /* virtual methods */ -+ object_class->dispose = dispose; -+ -+ /* Signals */ -+ signals[SIGNAL_QUALITY] = -+ g_signal_new ("signal-quality", -+ G_OBJECT_CLASS_TYPE (object_class), -+ G_SIGNAL_RUN_FIRST, -+ G_STRUCT_OFFSET (NMAGsmModemClass, signal_quality), -+ NULL, NULL, -+ g_cclosure_marshal_VOID__UINT, -+ G_TYPE_NONE, 1, -+ G_TYPE_UINT); -+ -+ signals[NETWORK_MODE] = -+ g_signal_new ("network-mode", -+ G_OBJECT_CLASS_TYPE (object_class), -+ G_SIGNAL_RUN_FIRST, -+ G_STRUCT_OFFSET (NMAGsmModemClass, network_mode), -+ NULL, NULL, -+ g_cclosure_marshal_VOID__UINT, -+ G_TYPE_NONE, 1, -+ G_TYPE_UINT); -+} -diff --git a/src/nma-gsm-modem.h b/src/nma-gsm-modem.h -new file mode 100644 -index 0000000..90e7ae0 ---- /dev/null -+++ b/src/nma-gsm-modem.h -@@ -0,0 +1,45 @@ -+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */ -+ -+#ifndef NMA_GSM_MODEM_H -+#define NMA_GSM_MODEM_H -+ -+#include <glib/gtypes.h> -+#include <glib-object.h> -+#include <dbus/dbus-glib.h> -+ -+G_BEGIN_DECLS -+ -+#define NMA_TYPE_GSM_MODEM (nma_gsm_modem_get_type ()) -+#define NMA_GSM_MODEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_GSM_MODEM, NMAGsmModem)) -+#define NMA_GSM_MODEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_GSM_MODEM, NMAGsmModemClass)) -+#define NMA_IS_GSM_MODEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_GSM_MODEM)) -+#define NMA_IS_GSM_MODEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NMA_TYPE_GSM_MODEM)) -+#define NMA_GSM_MODEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_GSM_MODEM, NMAGsmModemClass)) -+ -+typedef struct { -+ GObject parent; -+} NMAGsmModem; -+ -+typedef struct { -+ GObjectClass parent; -+ -+ /* Signals */ -+ void (*signal_quality) (NMAGsmModem *modem, guint32 signal_quality); -+ void (*network_mode) (NMAGsmModem *modem, guint32 network_mode); -+} NMAGsmModemClass; -+ -+GType nma_gsm_modem_get_type (void); -+ -+NMAGsmModem *nma_gsm_modem_new (DBusGConnection *bus, -+ const char *object_path); -+ -+guint32 nma_gsm_modem_get_signal_quality (NMAGsmModem *modem); -+guint32 nma_gsm_modem_get_registration_info (NMAGsmModem *modem, -+ char **operator_code, -+ char **operator_name); -+ -+guint32 nma_gsm_modem_get_network_mode (NMAGsmModem *modem); -+ -+G_END_DECLS -+ -+#endif /* NMA_GSM_MODEM_H */ |