aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTambet Ingo <tambet@gmail.com>2008-08-29 11:43:36 +0300
committerTambet Ingo <tambet@gmail.com>2008-08-29 11:43:36 +0300
commit424f514b02494e62097d0a15fb17be4b7e92262f (patch)
tree337e49feebe82dc4d0febad2c7c2a1648d9b9a09 /src
parent2d00b7534137f6fa6ccf9b951efff699fcf75044 (diff)
Implement the more granular GSM interfaces as agreed on NM mailing list.
Convert all exisiting code over to new DBus interfaces.
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am29
-rw-r--r--src/mm-cdma-modem.h39
-rw-r--r--src/mm-generic-cdma.c12
-rw-r--r--src/mm-generic-gsm.c127
-rw-r--r--src/mm-generic-gsm.h4
-rw-r--r--src/mm-gsm-modem.c470
-rw-r--r--src/mm-gsm-modem.h186
-rw-r--r--src/mm-modem-cdma.c (renamed from src/mm-cdma-modem.c)36
-rw-r--r--src/mm-modem-cdma.h39
-rw-r--r--src/mm-modem-gsm-card.c319
-rw-r--r--src/mm-modem-gsm-card.h87
-rw-r--r--src/mm-modem-gsm-network.c507
-rw-r--r--src/mm-modem-gsm-network.h178
-rw-r--r--src/mm-modem.h5
14 files changed, 1246 insertions, 792 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 554f6627..9240d9f4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -11,20 +11,22 @@ modem_manager_SOURCES = \
main.c \
mm-callback-info.c \
mm-callback-info.h \
- mm-cdma-modem.c \
- mm-cdma-modem.h \
mm-generic-cdma.c \
mm-generic-cdma.h \
mm-generic-gsm.c \
mm-generic-gsm.h \
- mm-gsm-modem.c \
- mm-gsm-modem.h \
mm-manager.c \
mm-manager.h \
mm-modem.c \
mm-modem.h \
+ mm-modem-cdma.c \
+ mm-modem-cdma.h \
mm-modem-error.c \
mm-modem-error.h \
+ mm-modem-gsm-card.c \
+ mm-modem-gsm-card.h \
+ mm-modem-gsm-network.c \
+ mm-modem-gsm-network.h \
mm-plugin.c \
mm-plugin.h \
mm-serial.c \
@@ -36,16 +38,21 @@ mm-manager-glue.h: $(top_srcdir)/introspection/mm-manager.xml
mm-modem-glue.h: $(top_srcdir)/introspection/mm-modem.xml
dbus-binding-tool --prefix=mm_modem --mode=glib-server --output=$@ $<
-mm-gsm-modem-glue.h: $(top_srcdir)/introspection/mm-gsm-modem.xml
- dbus-binding-tool --prefix=mm_gsm_modem --mode=glib-server --output=$@ $<
+mm-modem-cdma-glue.h: $(top_srcdir)/introspection/mm-modem-cdma.xml
+ dbus-binding-tool --prefix=mm_modem_cdma --mode=glib-server --output=$@ $<
+
+mm-modem-gsm-card-glue.h: $(top_srcdir)/introspection/mm-modem-gsm-card.xml
+ dbus-binding-tool --prefix=mm_modem_gsm_card --mode=glib-server --output=$@ $<
+
+mm-modem-gsm-network-glue.h: $(top_srcdir)/introspection/mm-modem-gsm-network.xml
+ dbus-binding-tool --prefix=mm_modem_gsm_network --mode=glib-server --output=$@ $<
-mm-cdma-modem-glue.h: $(top_srcdir)/introspection/mm-cdma-modem.xml
- dbus-binding-tool --prefix=mm_cdma_modem --mode=glib-server --output=$@ $<
BUILT_SOURCES = \
- mm-cdma-modem-glue.h \
- mm-gsm-modem-glue.h \
mm-manager-glue.h \
- mm-modem-glue.h
+ mm-modem-glue.h \
+ mm-modem-cdma-glue.h \
+ mm-modem-gsm-card-glue.h \
+ mm-modem-gsm-network-glue.h
CLEANFILES = $(BUILT_SOURCES)
diff --git a/src/mm-cdma-modem.h b/src/mm-cdma-modem.h
deleted file mode 100644
index 69fd215b..00000000
--- a/src/mm-cdma-modem.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-
-#ifndef MM_CDMA_MODEM_H
-#define MM_CDMA_MODEM_H
-
-#include <mm-modem.h>
-
-#define MM_TYPE_CDMA_MODEM (mm_cdma_modem_get_type ())
-#define MM_CDMA_MODEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_CDMA_MODEM, MMCdmaModem))
-#define MM_IS_CDMA_MODEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_CDMA_MODEM))
-#define MM_CDMA_MODEM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MM_TYPE_CDMA_MODEM, MMCdmaModem))
-
-typedef struct _MMCdmaModem MMCdmaModem;
-
-struct _MMCdmaModem {
- GTypeInterface g_iface;
-
- /* Methods */
- void (*get_signal_quality) (MMCdmaModem *self,
- MMModemUIntFn callback,
- gpointer user_data);
-
- /* Signals */
- void (*signal_quality) (MMCdmaModem *self,
- guint32 quality);
-};
-
-GType mm_cdma_modem_get_type (void);
-
-void mm_cdma_modem_get_signal_quality (MMCdmaModem *self,
- MMModemUIntFn callback,
- gpointer user_data);
-
-/* Protected */
-
-void mm_cdma_modem_signal_quality (MMCdmaModem *self,
- guint32 quality);
-
-#endif /* MM_CDMA_MODEM_H */
diff --git a/src/mm-generic-cdma.c b/src/mm-generic-cdma.c
index d73eea37..8e64a5e4 100644
--- a/src/mm-generic-cdma.c
+++ b/src/mm-generic-cdma.c
@@ -4,7 +4,7 @@
#include <stdio.h>
#include "mm-generic-cdma.h"
-#include "mm-cdma-modem.h"
+#include "mm-modem-cdma.h"
#include "mm-modem-error.h"
#include "mm-callback-info.h"
@@ -196,7 +196,7 @@ get_signal_quality_done (MMSerial *serial, const char *reply, gpointer user_data
}
static void
-get_signal_quality (MMCdmaModem *modem,
+get_signal_quality (MMModemCdma *modem,
MMModemUIntFn callback,
gpointer user_data)
{
@@ -226,7 +226,7 @@ modem_init (MMModem *modem_class)
}
static void
-cdma_modem_init (MMCdmaModem *cdma_modem_class)
+modem_cdma_init (MMModemCdma *cdma_modem_class)
{
cdma_modem_class->get_signal_quality = get_signal_quality;
}
@@ -333,14 +333,14 @@ mm_generic_cdma_get_type (void)
(GInterfaceInitFunc) modem_init
};
- static const GInterfaceInfo cdma_modem_iface_info = {
- (GInterfaceInitFunc) cdma_modem_init
+ static const GInterfaceInfo modem_cdma_iface_info = {
+ (GInterfaceInitFunc) modem_cdma_init
};
generic_cdma_type = g_type_register_static (MM_TYPE_SERIAL, "MMGenericCdma", &generic_cdma_type_info, 0);
g_type_add_interface_static (generic_cdma_type, MM_TYPE_MODEM, &modem_iface_info);
- g_type_add_interface_static (generic_cdma_type, MM_TYPE_CDMA_MODEM, &cdma_modem_iface_info);
+ g_type_add_interface_static (generic_cdma_type, MM_TYPE_MODEM_CDMA, &modem_cdma_iface_info);
}
return generic_cdma_type;
diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c
index 80b85b61..3e3fbe75 100644
--- a/src/mm-generic-gsm.c
+++ b/src/mm-generic-gsm.c
@@ -4,7 +4,8 @@
#include <stdio.h>
#include <string.h>
#include "mm-generic-gsm.h"
-#include "mm-gsm-modem.h"
+#include "mm-modem-gsm-card.h"
+#include "mm-modem-gsm-network.h"
#include "mm-modem-error.h"
#include "mm-callback-info.h"
@@ -16,12 +17,12 @@ typedef struct {
char *driver;
char *oper_code;
char *oper_name;
- MMGsmModemRegStatus reg_status;
+ MMModemGsmNetworkRegStatus reg_status;
guint32 cid;
guint32 pending_id;
} MMGenericGsmPrivate;
-static void register_auto (MMGsmModem *modem, MMCallbackInfo *info);
+static void register_auto (MMModemGsmNetwork *modem, MMCallbackInfo *info);
MMModem *
mm_generic_gsm_new (const char *serial_device, const char *driver)
@@ -45,7 +46,7 @@ mm_generic_gsm_get_cid (MMGenericGsm *modem)
void
mm_generic_gsm_set_reg_status (MMGenericGsm *modem,
- MMGsmModemRegStatus status)
+ MMModemGsmNetworkRegStatus status)
{
g_return_if_fail (MM_IS_GENERIC_GSM (modem));
@@ -73,7 +74,7 @@ mm_generic_gsm_set_operator (MMGenericGsm *modem,
/*****************************************************************************/
static void
-need_auth_done (MMSerial *serial,
+check_pin_done (MMSerial *serial,
int reply_index,
gpointer user_data)
{
@@ -101,21 +102,18 @@ need_auth_done (MMSerial *serial,
}
static void
-need_auth (MMGsmModem *modem,
- MMModemFn callback,
- gpointer user_data)
+check_pin (MMSerial *serial, gpointer user_data)
{
- MMCallbackInfo *info;
char *responses[] = { "READY", "SIM PIN", "SIM PUK", "ERROR", "ERR", NULL };
char *terminators[] = { "OK", "ERROR", "ERR", NULL };
guint id = 0;
- info = mm_callback_info_new (MM_MODEM (modem), callback, user_data);
-
- if (mm_serial_send_command_string (MM_SERIAL (modem), "AT+CPIN?"))
- id = mm_serial_wait_for_reply (MM_SERIAL (modem), 3, responses, terminators, need_auth_done, info);
+ if (mm_serial_send_command_string (serial, "AT+CPIN?"))
+ id = mm_serial_wait_for_reply (serial, 3, responses, terminators, check_pin_done, user_data);
if (!id) {
+ MMCallbackInfo *info = (MMCallbackInfo *) user_data;
+
info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL, "%s", "PIN checking failed.");
mm_callback_info_schedule (info);
}
@@ -131,7 +129,7 @@ init_done (MMSerial *serial,
switch (reply_index) {
case 0:
/* success */
- mm_gsm_modem_need_authentication (MM_GSM_MODEM (serial), info->callback, info->user_data);
+ check_pin (serial, user_data);
break;
case -1:
info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL, "%s", "Modem initialization timed out.");
@@ -215,10 +213,10 @@ set_pin_done (MMSerial *serial,
}
static void
-set_pin (MMGsmModem *modem,
- const char *pin,
- MMModemFn callback,
- gpointer user_data)
+send_pin (MMModemGsmCard *modem,
+ const char *pin,
+ MMModemFn callback,
+ gpointer user_data)
{
MMCallbackInfo *info;
char *command;
@@ -331,27 +329,27 @@ get_reg_status_done (MMSerial *serial,
switch (reply_index) {
case 0:
- info->uint_result = (guint32) MM_GSM_MODEM_REG_STATUS_IDLE;
+ info->uint_result = (guint32) MM_MODEM_GSM_NETWORK_REG_STATUS_IDLE;
break;
case 1:
- info->uint_result = (guint32) MM_GSM_MODEM_REG_STATUS_HOME;
+ info->uint_result = (guint32) MM_MODEM_GSM_NETWORK_REG_STATUS_HOME;
break;
case 2:
- info->uint_result = (guint32) MM_GSM_MODEM_REG_STATUS_SEARCHING;
+ info->uint_result = (guint32) MM_MODEM_GSM_NETWORK_REG_STATUS_SEARCHING;
break;
case 3:
- info->uint_result = (guint32) MM_GSM_MODEM_REG_STATUS_DENIED;
+ info->uint_result = (guint32) MM_MODEM_GSM_NETWORK_REG_STATUS_DENIED;
break;
case 4:
- info->uint_result = (guint32) MM_GSM_MODEM_REG_STATUS_ROAMING;
+ info->uint_result = (guint32) MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING;
break;
case -1:
- info->uint_result = (guint32) MM_GSM_MODEM_REG_STATUS_UNKNOWN;
+ info->uint_result = (guint32) MM_MODEM_GSM_NETWORK_REG_STATUS_UNKNOWN;
info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL, "%s",
"Reading registration status timed out");
break;
default:
- info->uint_result = (guint32) MM_GSM_MODEM_REG_STATUS_UNKNOWN;
+ info->uint_result = (guint32) MM_MODEM_GSM_NETWORK_REG_STATUS_UNKNOWN;
info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL, "%s",
"Reading registration status failed");
break;
@@ -363,7 +361,7 @@ get_reg_status_done (MMSerial *serial,
}
static void
-get_registration_status (MMGsmModem *modem, MMModemUIntFn callback, gpointer user_data)
+get_registration_status (MMModemGsmNetwork *modem, MMModemUIntFn callback, gpointer user_data)
{
MMCallbackInfo *info;
char *responses[] = { "+CREG: 0,0", "+CREG: 0,1", "+CREG: 0,2", "+CREG: 0,3", "+CREG: 0,5", NULL };
@@ -390,7 +388,7 @@ register_manual_get_status_done (MMModem *modem,
{
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
- if (result == MM_GSM_MODEM_REG_STATUS_HOME || result == MM_GSM_MODEM_REG_STATUS_ROAMING)
+ if (result == MM_MODEM_GSM_NETWORK_REG_STATUS_HOME || result == MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING)
read_operator (MM_GENERIC_GSM (modem), info);
else
mm_callback_info_schedule (info);
@@ -406,7 +404,7 @@ register_manual_done (MMSerial *serial,
switch (reply_index) {
case 0:
/* success */
- get_registration_status (MM_GSM_MODEM (serial), register_manual_get_status_done, info);
+ get_registration_status (MM_MODEM_GSM_NETWORK (serial), register_manual_get_status_done, info);
break;
case -1:
info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL, "%s", "Manual registration timed out");
@@ -421,7 +419,7 @@ register_manual_done (MMSerial *serial,
}
static void
-register_manual (MMGsmModem *modem, const char *network_id, MMCallbackInfo *info)
+register_manual (MMModemGsmNetwork *modem, const char *network_id, MMCallbackInfo *info)
{
char *command;
char *responses[] = { "OK", "ERROR", "ERR", NULL };
@@ -445,7 +443,7 @@ automatic_registration_again (gpointer data)
{
MMCallbackInfo *info = (MMCallbackInfo *) data;
- register_auto (MM_GSM_MODEM (info->modem), info);
+ register_auto (MM_MODEM_GSM_NETWORK (info->modem), info);
return FALSE;
}
@@ -464,22 +462,22 @@ register_auto_done (MMModem *modem,
}
switch (result) {
- case MM_GSM_MODEM_REG_STATUS_IDLE:
+ case MM_MODEM_GSM_NETWORK_REG_STATUS_IDLE:
info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL,
"%s", "Automatic registration failed: not registered and not searching.");
break;
- case MM_GSM_MODEM_REG_STATUS_HOME:
+ case MM_MODEM_GSM_NETWORK_REG_STATUS_HOME:
g_message ("Registered on Home network");
break;
- case MM_GSM_MODEM_REG_STATUS_SEARCHING:
+ case MM_MODEM_GSM_NETWORK_REG_STATUS_SEARCHING:
MM_GENERIC_GSM_GET_PRIVATE (modem)->pending_id = g_timeout_add (1000, automatic_registration_again, info);
return;
break;
- case MM_GSM_MODEM_REG_STATUS_DENIED:
+ case MM_MODEM_GSM_NETWORK_REG_STATUS_DENIED:
info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL, "%s",
"Automatic registration failed: registration denied");
break;
- case MM_GSM_MODEM_REG_STATUS_ROAMING:
+ case MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING:
g_message ("Registered on Roaming network");
break;
case -1:
@@ -499,13 +497,13 @@ register_auto_done (MMModem *modem,
}
static void
-register_auto (MMGsmModem *modem, MMCallbackInfo *info)
+register_auto (MMModemGsmNetwork *modem, MMCallbackInfo *info)
{
get_registration_status (modem, register_auto_done, info);
}
static void
-do_register (MMGsmModem *modem,
+do_register (MMModemGsmNetwork *modem,
const char *network_id,
MMModemFn callback,
gpointer user_data)
@@ -526,10 +524,10 @@ get_registration_info_done (MMModem *modem, GError *error, gpointer user_data)
{
MMGenericGsmPrivate *priv = MM_GENERIC_GSM_GET_PRIVATE (modem);
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
- MMGsmModemRegInfoFn reg_info_fn;
+ MMModemGsmNetworkRegInfoFn reg_info_fn;
- reg_info_fn = (MMGsmModemRegInfoFn) mm_callback_info_get_data (info, "reg-info-callback");
- reg_info_fn (MM_GSM_MODEM (modem),
+ reg_info_fn = (MMModemGsmNetworkRegInfoFn) mm_callback_info_get_data (info, "reg-info-callback");
+ reg_info_fn (MM_MODEM_GSM_NETWORK (modem),
priv->reg_status,
priv->oper_code,
priv->oper_name,
@@ -538,8 +536,8 @@ get_registration_info_done (MMModem *modem, GError *error, gpointer user_data)
}
static void
-get_registration_info (MMGsmModem *self,
- MMGsmModemRegInfoFn callback,
+get_registration_info (MMModemGsmNetwork *self,
+ MMModemGsmNetworkRegInfoFn callback,
gpointer user_data)
{
MMCallbackInfo *info;
@@ -640,15 +638,15 @@ scan_callback_wrapper (MMModem *modem,
gpointer user_data)
{
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
- MMGsmModemScanFn scan_fn;
+ MMModemGsmNetworkScanFn scan_fn;
GPtrArray *results;
gpointer data;
- scan_fn = (MMGsmModemScanFn) mm_callback_info_get_data (info, "scan-callback");
+ scan_fn = (MMModemGsmNetworkScanFn) mm_callback_info_get_data (info, "scan-callback");
results = (GPtrArray *) mm_callback_info_get_data (info, "scan-results");
data = mm_callback_info_get_data (info, "scan-data");
- scan_fn (MM_GSM_MODEM (modem), results, error, data);
+ scan_fn (MM_MODEM_GSM_NETWORK (modem), results, error, data);
}
static void
@@ -711,8 +709,8 @@ scan_done (MMSerial *serial, const char *reply, gpointer user_data)
}
static void
-scan (MMGsmModem *modem,
- MMGsmModemScanFn callback,
+scan (MMModemGsmNetwork *modem,
+ MMModemGsmNetworkScanFn callback,
gpointer user_data)
{
MMCallbackInfo *info;
@@ -754,7 +752,7 @@ set_apn_done (MMSerial *serial,
}
static void
-set_apn (MMGsmModem *modem,
+set_apn (MMModemGsmNetwork *modem,
const char *apn,
MMModemFn callback,
gpointer user_data)
@@ -810,7 +808,7 @@ get_signal_quality_done (MMSerial *serial, const char *reply, gpointer user_data
}
static void
-get_signal_quality (MMGsmModem *modem,
+get_signal_quality (MMModemGsmNetwork *modem,
MMModemUIntFn callback,
gpointer user_data)
{
@@ -840,15 +838,19 @@ modem_init (MMModem *modem_class)
}
static void
-gsm_modem_init (MMGsmModem *gsm_modem_class)
+modem_gsm_card_init (MMModemGsmCard *class)
{
- gsm_modem_class->need_authentication = need_auth;
- gsm_modem_class->set_pin = set_pin;
- gsm_modem_class->do_register = do_register;
- gsm_modem_class->get_registration_info = get_registration_info;
- gsm_modem_class->set_apn = set_apn;
- gsm_modem_class->scan = scan;
- gsm_modem_class->get_signal_quality = get_signal_quality;
+ class->send_pin = send_pin;
+}
+
+static void
+modem_gsm_network_init (MMModemGsmNetwork *class)
+{
+ class->do_register = do_register;
+ class->get_registration_info = get_registration_info;
+ class->set_apn = set_apn;
+ class->scan = scan;
+ class->get_signal_quality = get_signal_quality;
}
static void
@@ -960,14 +962,19 @@ mm_generic_gsm_get_type (void)
(GInterfaceInitFunc) modem_init
};
- static const GInterfaceInfo gsm_modem_iface_info = {
- (GInterfaceInitFunc) gsm_modem_init
+ static const GInterfaceInfo modem_gsm_card_info = {
+ (GInterfaceInitFunc) modem_gsm_card_init
+ };
+
+ static const GInterfaceInfo modem_gsm_network_info = {
+ (GInterfaceInitFunc) modem_gsm_network_init
};
generic_gsm_type = g_type_register_static (MM_TYPE_SERIAL, "MMGenericGsm", &generic_gsm_type_info, 0);
g_type_add_interface_static (generic_gsm_type, MM_TYPE_MODEM, &modem_iface_info);
- g_type_add_interface_static (generic_gsm_type, MM_TYPE_GSM_MODEM, &gsm_modem_iface_info);
+ g_type_add_interface_static (generic_gsm_type, MM_TYPE_MODEM_GSM_CARD, &modem_gsm_card_info);
+ g_type_add_interface_static (generic_gsm_type, MM_TYPE_MODEM_GSM_NETWORK, &modem_gsm_network_info);
}
return generic_gsm_type;
diff --git a/src/mm-generic-gsm.h b/src/mm-generic-gsm.h
index a439bae5..e2afc006 100644
--- a/src/mm-generic-gsm.h
+++ b/src/mm-generic-gsm.h
@@ -3,7 +3,7 @@
#ifndef MM_GENERIC_GSM_H
#define MM_GENERIC_GSM_H
-#include "mm-gsm-modem.h"
+#include "mm-modem-gsm-network.h"
#include "mm-serial.h"
#define MM_TYPE_GENERIC_GSM (mm_generic_gsm_get_type ())
@@ -28,7 +28,7 @@ MMModem *mm_generic_gsm_new (const char *serial_device,
guint32 mm_generic_gsm_get_cid (MMGenericGsm *modem);
void mm_generic_gsm_set_reg_status (MMGenericGsm *modem,
- MMGsmModemRegStatus status);
+ MMModemGsmNetworkRegStatus status);
void mm_generic_gsm_set_operator (MMGenericGsm *modem,
const char *code,
diff --git a/src/mm-gsm-modem.c b/src/mm-gsm-modem.c
deleted file mode 100644
index 717391a0..00000000
--- a/src/mm-gsm-modem.c
+++ /dev/null
@@ -1,470 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-
-#include <string.h>
-#include <dbus/dbus-glib.h>
-#include "mm-gsm-modem.h"
-#include "mm-modem-error.h"
-#include "mm-callback-info.h"
-
-static void impl_gsm_modem_set_pin (MMGsmModem *modem, const char *pin, DBusGMethodInvocation *context);
-static void impl_gsm_modem_register (MMGsmModem *modem, const char *network_id, DBusGMethodInvocation *context);
-static void impl_gsm_modem_get_reg_info (MMGsmModem *modem, DBusGMethodInvocation *context);
-static void impl_gsm_modem_scan (MMGsmModem *modem, DBusGMethodInvocation *context);
-static void impl_gsm_modem_set_apn (MMGsmModem *modem, const char *apn, DBusGMethodInvocation *context);
-static void impl_gsm_modem_get_signal_quality (MMGsmModem *modem, DBusGMethodInvocation *context);
-static void impl_gsm_modem_set_band (MMGsmModem *modem, guint32 band, DBusGMethodInvocation *context);
-static void impl_gsm_modem_get_band (MMGsmModem *modem, DBusGMethodInvocation *context);
-static void impl_gsm_modem_set_network_mode (MMGsmModem *modem, guint32 mode, DBusGMethodInvocation *context);
-static void impl_gsm_modem_get_network_mode (MMGsmModem *modem, DBusGMethodInvocation *context);
-
-#include "mm-gsm-modem-glue.h"
-
-enum {
- SIGNAL_QUALITY,
- NETWORK_MODE,
-
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-static void
-async_op_not_supported (MMModem *self,
- MMModemFn callback,
- gpointer user_data)
-{
- MMCallbackInfo *info;
-
- info = mm_callback_info_new (self, callback, user_data);
- info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED,
- "%s", "Operation not supported");
- mm_callback_info_schedule (info);
-}
-
-static void
-async_call_done (MMModem *modem, 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);
-}
-
-static void
-uint_op_not_supported (MMModem *self,
- MMModemUIntFn callback,
- gpointer user_data)
-{
- MMCallbackInfo *info;
-
- info = mm_callback_info_uint_new (self, callback, user_data);
- info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED,
- "%s", "Operation not supported");
- mm_callback_info_schedule (info);
-}
-
-static void
-uint_call_done (MMModem *modem, guint32 result, 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, result);
-}
-
-void
-mm_gsm_modem_need_authentication (MMGsmModem *self,
- MMModemFn callback,
- gpointer user_data)
-{
- g_return_if_fail (MM_IS_GSM_MODEM (self));
- g_return_if_fail (callback != NULL);
-
- if (MM_GSM_MODEM_GET_INTERFACE (self)->need_authentication)
- MM_GSM_MODEM_GET_INTERFACE (self)->need_authentication (self, callback, user_data);
- else
- async_op_not_supported (MM_MODEM (self), callback, user_data);
-}
-
-void
-mm_gsm_modem_set_pin (MMGsmModem *self,
- const char *pin,
- MMModemFn callback,
- gpointer user_data)
-{
- g_return_if_fail (MM_IS_GSM_MODEM (self));
- g_return_if_fail (callback != NULL);
- g_return_if_fail (pin != NULL);
-
- if (MM_GSM_MODEM_GET_INTERFACE (self)->set_pin)
- MM_GSM_MODEM_GET_INTERFACE (self)->set_pin (self, pin, callback, user_data);
- else
- async_op_not_supported (MM_MODEM (self), callback, user_data);
-}
-
-static void
-impl_gsm_modem_set_pin (MMGsmModem *modem,
- const char *pin,
- DBusGMethodInvocation *context)
-{
- mm_gsm_modem_set_pin (modem, pin, async_call_done, context);
-}
-
-void
-mm_gsm_modem_register (MMGsmModem *self,
- const char *network_id,
- MMModemFn callback,
- gpointer user_data)
-{
- g_return_if_fail (MM_IS_GSM_MODEM (self));
- g_return_if_fail (callback != NULL);
-
- if (MM_GSM_MODEM_GET_INTERFACE (self)->do_register)
- MM_GSM_MODEM_GET_INTERFACE (self)->do_register (self, network_id, callback, user_data);
- else
- async_op_not_supported (MM_MODEM (self), callback, user_data);
-}
-
-static void
-impl_gsm_modem_register (MMGsmModem *modem,
- const char *network_id,
- DBusGMethodInvocation *context)
-{
- const char *id;
-
- /* DBus does not support NULL strings, so the caller should pass an empty string
- for manual registration. */
- if (strlen (network_id) < 1)
- id = NULL;
- else
- id = network_id;
-
- mm_gsm_modem_register (modem, id, async_call_done, context);
-}
-
-static void
-reg_not_supported (MMModem *modem, GError *error, gpointer user_data)
-{
- MMCallbackInfo *info = (MMCallbackInfo *) user_data;
- MMGsmModemRegInfoFn callback = (MMGsmModemRegInfoFn) mm_callback_info_get_data (info, "reg-info-callback");
-
- callback (MM_GSM_MODEM (modem), 0, NULL, NULL, error, mm_callback_info_get_data (info, "reg-info-data"));
-}
-
-void
-mm_gsm_modem_get_reg_info (MMGsmModem *self,
- MMGsmModemRegInfoFn callback,
- gpointer user_data)
-{
- g_return_if_fail (MM_IS_GSM_MODEM (self));
- g_return_if_fail (callback != NULL);
-
- if (MM_GSM_MODEM_GET_INTERFACE (self)->get_registration_info)
- MM_GSM_MODEM_GET_INTERFACE (self)->get_registration_info (self, callback, user_data);
- else {
- MMCallbackInfo *info;
-
- info = mm_callback_info_new (MM_MODEM (self), reg_not_supported, user_data);
- info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED,
- "%s", "Operation not supported");
-
- info->user_data = info;
- mm_callback_info_set_data (info, "reg-info-callback", callback, NULL);
- mm_callback_info_set_data (info, "reg-info-data", user_data, NULL);
-
- mm_callback_info_schedule (info);
- }
-}
-
-static void
-get_reg_info_done (MMGsmModem *modem,
- MMGsmModemRegStatus status,
- const char *oper_code,
- const char *oper_name,
- 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, status,
- oper_code ? oper_code : "",
- oper_name ? oper_name : "");
- }
-}
-
-static void
-impl_gsm_modem_get_reg_info (MMGsmModem *modem, DBusGMethodInvocation *context)
-{
- mm_gsm_modem_get_reg_info (modem, get_reg_info_done, context);
-}
-
-void
-mm_gsm_modem_scan (MMGsmModem *self,
- MMGsmModemScanFn callback,
- gpointer user_data)
-{
- g_return_if_fail (MM_IS_GSM_MODEM (self));
- g_return_if_fail (callback != NULL);
-
- if (MM_GSM_MODEM_GET_INTERFACE (self)->scan)
- MM_GSM_MODEM_GET_INTERFACE (self)->scan (self, callback, user_data);
- else
- /* FIXME */ ;
-}
-
-static void
-impl_scan_done (MMGsmModem *modem, GPtrArray *results, 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, results);
-}
-
-static void
-impl_gsm_modem_scan (MMGsmModem *modem,
- DBusGMethodInvocation *context)
-{
- mm_gsm_modem_scan (modem, impl_scan_done, context);
-}
-
-void
-mm_gsm_modem_set_apn (MMGsmModem *self,
- const char *apn,
- MMModemFn callback,
- gpointer user_data)
-{
- g_return_if_fail (MM_IS_GSM_MODEM (self));
- g_return_if_fail (apn != NULL);
- g_return_if_fail (callback != NULL);
-
- if (MM_GSM_MODEM_GET_INTERFACE (self)->set_apn)
- MM_GSM_MODEM_GET_INTERFACE (self)->set_apn (self, apn, callback, user_data);
- else
- async_op_not_supported (MM_MODEM (self), callback, user_data);
-}
-
-static void
-impl_gsm_modem_set_apn (MMGsmModem *modem,
- const char *apn,
- DBusGMethodInvocation *context)
-{
- mm_gsm_modem_set_apn (modem, apn, async_call_done, context);
-}
-
-void
-mm_gsm_modem_get_signal_quality (MMGsmModem *self,
- MMModemUIntFn callback,
- gpointer user_data)
-{
- g_return_if_fail (MM_IS_GSM_MODEM (self));
- g_return_if_fail (callback != NULL);
-
- if (MM_GSM_MODEM_GET_INTERFACE (self)->get_signal_quality)
- MM_GSM_MODEM_GET_INTERFACE (self)->get_signal_quality (self, callback, user_data);
- else
- uint_op_not_supported (MM_MODEM (self), callback, user_data);
-}
-
-static void
-impl_gsm_modem_get_signal_quality (MMGsmModem *modem, DBusGMethodInvocation *context)
-{
- mm_gsm_modem_get_signal_quality (modem, uint_call_done, context);
-}
-
-void
-mm_gsm_modem_set_band (MMGsmModem *self,
- MMGsmModemBand band,
- MMModemFn callback,
- gpointer user_data)
-{
- g_return_if_fail (MM_IS_GSM_MODEM (self));
- g_return_if_fail (callback != NULL);
-
- if (MM_GSM_MODEM_GET_INTERFACE (self)->set_band)
- MM_GSM_MODEM_GET_INTERFACE (self)->set_band (self, band, callback, user_data);
- else
- async_op_not_supported (MM_MODEM (self), callback, user_data);
-}
-
-static void
-impl_gsm_modem_set_band (MMGsmModem *modem,
- guint32 band,
- DBusGMethodInvocation *context)
-{
- if (band >= MM_GSM_MODEM_BAND_ANY && band <= MM_GSM_MODEM_BAND_LAST)
- mm_gsm_modem_set_band (modem, (MMGsmModemBand) band, async_call_done, context);
- else {
- GError *error;
-
- error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL,
- "%s", "Invalid band");
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- }
-}
-
-void
-mm_gsm_modem_get_band (MMGsmModem *self,
- MMModemUIntFn callback,
- gpointer user_data)
-{
- g_return_if_fail (MM_IS_GSM_MODEM (self));
- g_return_if_fail (callback != NULL);
-
- if (MM_GSM_MODEM_GET_INTERFACE (self)->get_band)
- MM_GSM_MODEM_GET_INTERFACE (self)->get_band (self, callback, user_data);
- else
- uint_op_not_supported (MM_MODEM (self), callback, user_data);
-}
-
-static void
-impl_gsm_modem_get_band (MMGsmModem *modem, DBusGMethodInvocation *context)
-{
- mm_gsm_modem_get_band (modem, uint_call_done, context);
-}
-
-void
-mm_gsm_modem_set_network_mode (MMGsmModem *self,
- MMGsmModemNetworkMode mode,
- MMModemFn callback,
- gpointer user_data)
-{
- g_return_if_fail (MM_IS_GSM_MODEM (self));
- g_return_if_fail (callback != NULL);
-
- if (MM_GSM_MODEM_GET_INTERFACE (self)->set_network_mode)
- MM_GSM_MODEM_GET_INTERFACE (self)->set_network_mode (self, mode, callback, user_data);
- else
- async_op_not_supported (MM_MODEM (self), callback, user_data);
-}
-
-static void
-impl_gsm_modem_set_network_mode (MMGsmModem *modem,
- guint32 mode,
- DBusGMethodInvocation *context)
-{
- if (mode >= MM_GSM_MODEM_NETWORK_MODE_ANY && mode <= MM_GSM_MODEM_NETWORK_MODE_LAST)
- mm_gsm_modem_set_network_mode (modem, (MMGsmModemNetworkMode) mode, async_call_done, context);
- else {
- GError *error;
-
- error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL,
- "%s", "Invalid network mode");
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- }
-}
-
-void
-mm_gsm_modem_get_network_mode (MMGsmModem *self,
- MMModemUIntFn callback,
- gpointer user_data)
-{
- g_return_if_fail (MM_IS_GSM_MODEM (self));
- g_return_if_fail (callback != NULL);
-
- if (MM_GSM_MODEM_GET_INTERFACE (self)->get_network_mode)
- MM_GSM_MODEM_GET_INTERFACE (self)->get_network_mode (self, callback, user_data);
- else
- uint_op_not_supported (MM_MODEM (self), callback, user_data);
-}
-
-static void
-impl_gsm_modem_get_network_mode (MMGsmModem *modem, DBusGMethodInvocation *context)
-{
- mm_gsm_modem_get_network_mode (modem, uint_call_done, context);
-}
-
-void
-mm_gsm_modem_signal_quality (MMGsmModem *self,
- guint32 quality)
-{
- g_return_if_fail (MM_IS_GSM_MODEM (self));
-
- g_signal_emit (self, signals[SIGNAL_QUALITY], 0, quality);
-}
-
-void
-mm_gsm_modem_network_mode (MMGsmModem *self,
- MMGsmModemNetworkMode mode)
-{
- g_return_if_fail (MM_IS_GSM_MODEM (self));
-
- g_signal_emit (self, signals[NETWORK_MODE], 0, mode);
-}
-
-
-/*****************************************************************************/
-
-static void
-mm_gsm_modem_init (gpointer g_iface)
-{
- GType iface_type = G_TYPE_FROM_INTERFACE (g_iface);
- static gboolean initialized = FALSE;
-
- if (initialized)
- return;
-
- /* Signals */
- signals[SIGNAL_QUALITY] =
- g_signal_new ("signal-quality",
- iface_type,
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (MMGsmModem, signal_quality),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1,
- G_TYPE_UINT);
-
- signals[NETWORK_MODE] =
- g_signal_new ("network-mode",
- iface_type,
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (MMGsmModem, network_mode),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1,
- G_TYPE_UINT);
-
- initialized = TRUE;
-}
-
-GType
-mm_gsm_modem_get_type (void)
-{
- static GType modem_type = 0;
-
- if (!G_UNLIKELY (modem_type)) {
- const GTypeInfo modem_info = {
- sizeof (MMGsmModem), /* class_size */
- mm_gsm_modem_init, /* base_init */
- NULL, /* base_finalize */
- NULL,
- NULL, /* class_finalize */
- NULL, /* class_data */
- 0,
- 0, /* n_preallocs */
- NULL
- };
-
- modem_type = g_type_register_static (G_TYPE_INTERFACE,
- "MMGsmModem",
- &modem_info, 0);
-
- g_type_interface_add_prerequisite (modem_type, MM_TYPE_MODEM);
-
- dbus_g_object_type_install_info (modem_type, &dbus_glib_mm_gsm_modem_object_info);
- }
-
- return modem_type;
-}
diff --git a/src/mm-gsm-modem.h b/src/mm-gsm-modem.h
deleted file mode 100644
index ee356ae9..00000000
--- a/src/mm-gsm-modem.h
+++ /dev/null
@@ -1,186 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-
-#ifndef MM_GSM_MODEM_H
-#define MM_GSM_MODEM_H
-
-#include <mm-modem.h>
-
-#define MM_TYPE_GSM_MODEM (mm_gsm_modem_get_type ())
-#define MM_GSM_MODEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_GSM_MODEM, MMGsmModem))
-#define MM_IS_GSM_MODEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_GSM_MODEM))
-#define MM_GSM_MODEM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MM_TYPE_GSM_MODEM, MMGsmModem))
-
-typedef enum {
- MM_GSM_MODEM_NETWORK_MODE_ANY = 0,
- MM_GSM_MODEM_NETWORK_MODE_GPRS = 1,
- MM_GSM_MODEM_NETWORK_MODE_EDGE = 2,
- MM_GSM_MODEM_NETWORK_MODE_3G = 3,
- MM_GSM_MODEM_NETWORK_MODE_HSDPA = 4,
- MM_GSM_MODEM_NETWORK_MODE_PREFER_2G = 5,
- MM_GSM_MODEM_NETWORK_MODE_PREFER_3G = 6,
-
- MM_GSM_MODEM_NETWORK_MODE_LAST = MM_GSM_MODEM_NETWORK_MODE_PREFER_3G
-} MMGsmModemNetworkMode;
-
-typedef enum {
- MM_GSM_MODEM_BAND_ANY = 0,
- MM_GSM_MODEM_BAND_EGSM = 1, /* 900 MHz */
- MM_GSM_MODEM_BAND_DCS = 2, /* 1800 MHz */
- MM_GSM_MODEM_BAND_PCS = 3, /* 1900 MHz */
- MM_GSM_MODEM_BAND_G850 = 4, /* 850 MHz */
- MM_GSM_MODEM_BAND_U2100 = 5, /* WCDMA 2100 MHz (Class I) */
- MM_GSM_MODEM_BAND_U1700 = 6, /* WCDMA 3GPP UMTS1800 MHz (Class III) */
- MM_GSM_MODEM_BAND_17IV = 7, /* WCDMA 3GPP AWS 1700/2100 MHz (Class IV) */
- MM_GSM_MODEM_BAND_U800 = 8, /* WCDMA 3GPP UMTS800 MHz (Class VI) */
- MM_GSM_MODEM_BAND_U850 = 9, /* WCDMA 3GPP UMTS850 MHz (Class V) */
- MM_GSM_MODEM_BAND_U900 = 10, /* WCDMA 3GPP UMTS900 MHz (Class VIII) */
- MM_GSM_MODEM_BAND_U17IX = 11, /* WCDMA 3GPP UMTS MHz (Class IX) */
-
- MM_GSM_MODEM_BAND_LAST = MM_GSM_MODEM_BAND_U17IX
-} MMGsmModemBand;
-
-typedef 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
-} MMGsmModemRegStatus;
-
-typedef struct _MMGsmModem MMGsmModem;
-
-typedef void (*MMGsmModemScanFn) (MMGsmModem *modem,
- GPtrArray *results,
- GError *error,
- gpointer user_data);
-
-typedef void (*MMGsmModemRegInfoFn) (MMGsmModem *modem,
- MMGsmModemRegStatus status,
- const char *oper_code,
- const char *oper_name,
- GError *error,
- gpointer user_data);
-
-struct _MMGsmModem {
- GTypeInterface g_iface;
-
- /* Methods */
- void (*need_authentication) (MMGsmModem *self,
- MMModemFn callback,
- gpointer user_data);
-
- void (*set_pin) (MMGsmModem *self,
- const char *pin,
- MMModemFn callback,
- gpointer user_data);
-
- /* 'register' is a reserved word */
- void (*do_register) (MMGsmModem *self,
- const char *network_id,
- MMModemFn callback,
- gpointer user_data);
-
- void (*get_registration_info) (MMGsmModem *self,
- MMGsmModemRegInfoFn callback,
- gpointer user_data);
-
- void (*scan) (MMGsmModem *self,
- MMGsmModemScanFn callback,
- gpointer user_data);
-
- void (*get_signal_quality) (MMGsmModem *self,
- MMModemUIntFn callback,
- gpointer user_data);
-
- void (*set_apn) (MMGsmModem *self,
- const char *apn,
- MMModemFn callback,
- gpointer user_data);
-
- void (*set_band) (MMGsmModem *self,
- MMGsmModemBand band,
- MMModemFn callback,
- gpointer user_data);
-
- void (*get_band) (MMGsmModem *self,
- MMModemUIntFn callback,
- gpointer user_data);
-
- void (*set_network_mode) (MMGsmModem *self,
- MMGsmModemNetworkMode mode,
- MMModemFn callback,
- gpointer user_data);
-
- void (*get_network_mode) (MMGsmModem *self,
- MMModemUIntFn callback,
- gpointer user_data);
-
- /* Signals */
- void (*signal_quality) (MMGsmModem *self,
- guint32 quality);
-
- void (*network_mode) (MMGsmModem *self,
- MMGsmModemNetworkMode mode);
-};
-
-GType mm_gsm_modem_get_type (void);
-
-void mm_gsm_modem_need_authentication (MMGsmModem *self,
- MMModemFn callback,
- gpointer user_data);
-
-void mm_gsm_modem_set_pin (MMGsmModem *self,
- const char *pin,
- MMModemFn callback,
- gpointer user_data);
-
-void mm_gsm_modem_register (MMGsmModem *self,
- const char *network_id,
- MMModemFn callback,
- gpointer user_data);
-
-void mm_gsm_modem_get_reg_info (MMGsmModem *self,
- MMGsmModemRegInfoFn callback,
- gpointer user_data);
-
-void mm_gsm_modem_scan (MMGsmModem *self,
- MMGsmModemScanFn callback,
- gpointer user_data);
-
-void mm_gsm_modem_set_apn (MMGsmModem *self,
- const char *apn,
- MMModemFn callback,
- gpointer user_data);
-
-void mm_gsm_modem_get_signal_quality (MMGsmModem *self,
- MMModemUIntFn callback,
- gpointer user_data);
-
-void mm_gsm_modem_set_band (MMGsmModem *self,
- MMGsmModemBand band,
- MMModemFn callback,
- gpointer user_data);
-
-void mm_gsm_modem_get_band (MMGsmModem *self,
- MMModemUIntFn callback,
- gpointer user_data);
-
-void mm_gsm_modem_set_network_mode (MMGsmModem *self,
- MMGsmModemNetworkMode mode,
- MMModemFn callback,
- gpointer user_data);
-
-void mm_gsm_modem_get_network_mode (MMGsmModem *self,
- MMModemUIntFn callback,
- gpointer user_data);
-
-/* Protected */
-
-void mm_gsm_modem_signal_quality (MMGsmModem *self,
- guint32 quality);
-
-void mm_gsm_modem_network_mode (MMGsmModem *self,
- MMGsmModemNetworkMode mode);
-
-#endif /* MM_GSM_MODEM_H */
diff --git a/src/mm-cdma-modem.c b/src/mm-modem-cdma.c
index 564fd9e4..7b0321e5 100644
--- a/src/mm-cdma-modem.c
+++ b/src/mm-modem-cdma.c
@@ -2,13 +2,13 @@
#include <string.h>
#include <dbus/dbus-glib.h>
-#include "mm-cdma-modem.h"
+#include "mm-modem-cdma.h"
#include "mm-modem-error.h"
#include "mm-callback-info.h"
-static void impl_cdma_modem_get_signal_quality (MMCdmaModem *modem, DBusGMethodInvocation *context);
+static void impl_modem_cdma_get_signal_quality (MMModemCdma *modem, DBusGMethodInvocation *context);
-#include "mm-cdma-modem-glue.h"
+#include "mm-modem-cdma-glue.h"
enum {
SIGNAL_QUALITY,
@@ -43,30 +43,30 @@ uint_call_done (MMModem *modem, guint32 result, GError *error, gpointer user_dat
}
void
-mm_cdma_modem_get_signal_quality (MMCdmaModem *self,
+mm_modem_cdma_get_signal_quality (MMModemCdma *self,
MMModemUIntFn callback,
gpointer user_data)
{
- g_return_if_fail (MM_IS_CDMA_MODEM (self));
+ g_return_if_fail (MM_IS_MODEM_CDMA (self));
g_return_if_fail (callback != NULL);
- if (MM_CDMA_MODEM_GET_INTERFACE (self)->get_signal_quality)
- MM_CDMA_MODEM_GET_INTERFACE (self)->get_signal_quality (self, callback, user_data);
+ if (MM_MODEM_CDMA_GET_INTERFACE (self)->get_signal_quality)
+ MM_MODEM_CDMA_GET_INTERFACE (self)->get_signal_quality (self, callback, user_data);
else
uint_op_not_supported (MM_MODEM (self), callback, user_data);
}
static void
-impl_cdma_modem_get_signal_quality (MMCdmaModem *modem, DBusGMethodInvocation *context)
+impl_modem_cdma_get_signal_quality (MMModemCdma *modem, DBusGMethodInvocation *context)
{
- mm_cdma_modem_get_signal_quality (modem, uint_call_done, context);
+ mm_modem_cdma_get_signal_quality (modem, uint_call_done, context);
}
void
-mm_cdma_modem_signal_quality (MMCdmaModem *self,
+mm_modem_cdma_signal_quality (MMModemCdma *self,
guint32 quality)
{
- g_return_if_fail (MM_IS_CDMA_MODEM (self));
+ g_return_if_fail (MM_IS_MODEM_CDMA (self));
g_signal_emit (self, signals[SIGNAL_QUALITY], 0, quality);
}
@@ -75,7 +75,7 @@ mm_cdma_modem_signal_quality (MMCdmaModem *self,
/*****************************************************************************/
static void
-mm_cdma_modem_init (gpointer g_iface)
+mm_modem_cdma_init (gpointer g_iface)
{
GType iface_type = G_TYPE_FROM_INTERFACE (g_iface);
static gboolean initialized = FALSE;
@@ -88,7 +88,7 @@ mm_cdma_modem_init (gpointer g_iface)
g_signal_new ("signal-quality",
iface_type,
G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (MMCdmaModem, signal_quality),
+ G_STRUCT_OFFSET (MMModemCdma, signal_quality),
NULL, NULL,
g_cclosure_marshal_VOID__UINT,
G_TYPE_NONE, 1,
@@ -98,14 +98,14 @@ mm_cdma_modem_init (gpointer g_iface)
}
GType
-mm_cdma_modem_get_type (void)
+mm_modem_cdma_get_type (void)
{
static GType modem_type = 0;
if (!G_UNLIKELY (modem_type)) {
const GTypeInfo modem_info = {
- sizeof (MMCdmaModem), /* class_size */
- mm_cdma_modem_init, /* base_init */
+ sizeof (MMModemCdma), /* class_size */
+ mm_modem_cdma_init, /* base_init */
NULL, /* base_finalize */
NULL,
NULL, /* class_finalize */
@@ -116,12 +116,12 @@ mm_cdma_modem_get_type (void)
};
modem_type = g_type_register_static (G_TYPE_INTERFACE,
- "MMCdmaModem",
+ "MMModemCdma",
&modem_info, 0);
g_type_interface_add_prerequisite (modem_type, MM_TYPE_MODEM);
- dbus_g_object_type_install_info (modem_type, &dbus_glib_mm_cdma_modem_object_info);
+ dbus_g_object_type_install_info (modem_type, &dbus_glib_mm_modem_cdma_object_info);
}
return modem_type;
diff --git a/src/mm-modem-cdma.h b/src/mm-modem-cdma.h
new file mode 100644
index 00000000..7910b63c
--- /dev/null
+++ b/src/mm-modem-cdma.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+#ifndef MM_MODEM_CDMA_H
+#define MM_MODEM_CDMA_H
+
+#include <mm-modem.h>
+
+#define MM_TYPE_MODEM_CDMA (mm_modem_cdma_get_type ())
+#define MM_MODEM_CDMA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_MODEM_CDMA, MMModemCdma))
+#define MM_IS_MODEM_CDMA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_MODEM_CDMA))
+#define MM_MODEM_CDMA_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MM_TYPE_MODEM_CDMA, MMModemCdma))
+
+typedef struct _MMModemCdma MMModemCdma;
+
+struct _MMModemCdma {
+ GTypeInterface g_iface;
+
+ /* Methods */
+ void (*get_signal_quality) (MMModemCdma *self,
+ MMModemUIntFn callback,
+ gpointer user_data);
+
+ /* Signals */
+ void (*signal_quality) (MMModemCdma *self,
+ guint32 quality);
+};
+
+GType mm_modem_cdma_get_type (void);
+
+void mm_modem_cdma_get_signal_quality (MMModemCdma *self,
+ MMModemUIntFn callback,
+ gpointer user_data);
+
+/* Protected */
+
+void mm_modem_cdma_signal_quality (MMModemCdma *self,
+ guint32 quality);
+
+#endif /* MM_MODEM_CDMA_H */
diff --git a/src/mm-modem-gsm-card.c b/src/mm-modem-gsm-card.c
new file mode 100644
index 00000000..3a5502a6
--- /dev/null
+++ b/src/mm-modem-gsm-card.c
@@ -0,0 +1,319 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+#include <dbus/dbus-glib.h>
+
+#include "mm-modem-gsm-card.h"
+#include "mm-modem-error.h"
+#include "mm-callback-info.h"
+
+static void impl_gsm_modem_get_imei (MMModemGsmCard *modem,
+ DBusGMethodInvocation *context);
+
+static void impl_gsm_modem_get_imsi (MMModemGsmCard *modem,
+ DBusGMethodInvocation *context);
+
+static void impl_gsm_modem_get_info (MMModemGsmCard *modem,
+ DBusGMethodInvocation *context);
+
+static void impl_gsm_modem_send_pin (MMModemGsmCard *modem,
+ const char *pin,
+ DBusGMethodInvocation *context);
+
+static void impl_gsm_modem_enable_pin (MMModemGsmCard *modem,
+ const char *pin,
+ gboolean enabled,
+ DBusGMethodInvocation *context);
+
+static void impl_gsm_modem_change_pin (MMModemGsmCard *modem,
+ const char *old_pin,
+ const char *new_pin,
+ DBusGMethodInvocation *context);
+
+#include "mm-modem-gsm-card-glue.h"
+
+/*****************************************************************************/
+
+static void
+str_call_done (MMModem *modem, const char *result, 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, result);
+}
+
+static void
+str_not_supported_wrapper (MMModem *modem, GError *error, gpointer user_data)
+{
+ MMCallbackInfo *info = (MMCallbackInfo *) user_data;
+ MMModemStringFn callback;
+
+ callback = (MMModemStringFn) mm_callback_info_get_data (info, "str-callback");
+ callback (MM_MODEM (modem), NULL, error, mm_callback_info_get_data (info, "str-data"));
+}
+
+static void
+str_call_not_supported (MMModemGsmCard *self,
+ MMModemStringFn callback,
+ gpointer user_data)
+{
+ MMCallbackInfo *info;
+
+ info = mm_callback_info_new (MM_MODEM (self), str_not_supported_wrapper, NULL);
+ info->user_data = info;
+ mm_callback_info_set_data (info, "str-callback", callback, NULL);
+ mm_callback_info_set_data (info, "str-data", user_data, NULL);
+ info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED,
+ "%s", "Operation not supported");
+
+ mm_callback_info_schedule (info);
+}
+
+static void
+info_call_done (MMModemGsmCard *self,
+ const char *manufacturer,
+ const char *model,
+ const char *version,
+ 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, manufacturer, model, version);
+}
+
+static void
+info_not_supported_wrapper (MMModem *modem, GError *error, gpointer user_data)
+{
+ MMCallbackInfo *info = (MMCallbackInfo *) user_data;
+ MMModemGsmCardInfoFn callback;
+
+ callback = (MMModemGsmCardInfoFn) mm_callback_info_get_data (info, "info-callback");
+ callback (MM_MODEM_GSM_CARD (modem), NULL, NULL, NULL, error, mm_callback_info_get_data (info, "info-data"));
+}
+
+static void
+info_call_not_supported (MMModemGsmCard *self,
+ MMModemGsmCardInfoFn callback,
+ gpointer user_data)
+{
+ MMCallbackInfo *info;
+
+ info = mm_callback_info_new (MM_MODEM (self), info_not_supported_wrapper, NULL);
+ info->user_data = info;
+ mm_callback_info_set_data (info, "info-callback", callback, NULL);
+ mm_callback_info_set_data (info, "info-data", user_data, NULL);
+ info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED,
+ "%s", "Operation not supported");
+
+ mm_callback_info_schedule (info);
+}
+
+static void
+async_call_done (MMModem *modem, 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);
+}
+
+static void
+async_call_not_supported (MMModemGsmCard *self,
+ MMModemFn callback,
+ gpointer user_data)
+{
+ MMCallbackInfo *info;
+
+ info = mm_callback_info_new (MM_MODEM (self), callback, user_data);
+ info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED,
+ "%s", "Operation not supported");
+ mm_callback_info_schedule (info);
+}
+
+/*****************************************************************************/
+
+void
+mm_modem_gsm_card_get_imei (MMModemGsmCard *self,
+ MMModemStringFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_CARD (self));
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_CARD_GET_INTERFACE (self)->get_imei)
+ MM_MODEM_GSM_CARD_GET_INTERFACE (self)->get_imei (self, callback, user_data);
+ else
+ str_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_card_get_imsi (MMModemGsmCard *self,
+ MMModemStringFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_CARD (self));
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_CARD_GET_INTERFACE (self)->get_imsi)
+ MM_MODEM_GSM_CARD_GET_INTERFACE (self)->get_imsi (self, callback, user_data);
+ else
+ str_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_card_get_info (MMModemGsmCard *self,
+ MMModemGsmCardInfoFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_CARD (self));
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_CARD_GET_INTERFACE (self)->get_info)
+ MM_MODEM_GSM_CARD_GET_INTERFACE (self)->get_info (self, callback, user_data);
+ else
+ info_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_card_send_pin (MMModemGsmCard *self,
+ const char *pin,
+ MMModemFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_CARD (self));
+ g_return_if_fail (pin != NULL);
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_CARD_GET_INTERFACE (self)->send_pin)
+ MM_MODEM_GSM_CARD_GET_INTERFACE (self)->send_pin (self, pin, callback, user_data);
+ else
+ async_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_card_enable_pin (MMModemGsmCard *self,
+ const char *pin,
+ gboolean enabled,
+ MMModemFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_CARD (self));
+ g_return_if_fail (pin != NULL);
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_CARD_GET_INTERFACE (self)->enable_pin)
+ MM_MODEM_GSM_CARD_GET_INTERFACE (self)->enable_pin (self, pin, enabled, callback, user_data);
+ else
+ async_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_card_change_pin (MMModemGsmCard *self,
+ const char *old_pin,
+ const char *new_pin,
+ MMModemFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_CARD (self));
+ g_return_if_fail (old_pin != NULL);
+ g_return_if_fail (new_pin != NULL);
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_CARD_GET_INTERFACE (self)->change_pin)
+ MM_MODEM_GSM_CARD_GET_INTERFACE (self)->change_pin (self, old_pin, new_pin, callback, user_data);
+ else
+ async_call_not_supported (self, callback, user_data);
+}
+
+/*****************************************************************************/
+
+static void
+impl_gsm_modem_get_imei (MMModemGsmCard *modem,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_card_get_imei (modem, str_call_done, context);
+}
+
+static void
+impl_gsm_modem_get_imsi (MMModemGsmCard *modem,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_card_get_imsi (modem, str_call_done, context);
+}
+
+static void
+impl_gsm_modem_get_info (MMModemGsmCard *modem,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_card_get_info (modem, info_call_done, context);
+}
+
+static void
+impl_gsm_modem_send_pin (MMModemGsmCard *modem,
+ const char *pin,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_card_send_pin (modem, pin, async_call_done, context);
+}
+
+static void
+impl_gsm_modem_enable_pin (MMModemGsmCard *modem,
+ const char *pin,
+ gboolean enabled,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_card_enable_pin (modem, pin, enabled, async_call_done, context);
+}
+
+static void
+impl_gsm_modem_change_pin (MMModemGsmCard *modem,
+ const char *old_pin,
+ const char *new_pin,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_card_change_pin (modem, old_pin, new_pin, async_call_done, context);
+}
+
+/*****************************************************************************/
+
+static void
+mm_modem_gsm_card_init (gpointer g_iface)
+{
+}
+
+GType
+mm_modem_gsm_card_get_type (void)
+{
+ static GType card_type = 0;
+
+ if (!G_UNLIKELY (card_type)) {
+ const GTypeInfo card_info = {
+ sizeof (MMModemGsmCard), /* class_size */
+ mm_modem_gsm_card_init, /* base_init */
+ NULL, /* base_finalize */
+ NULL,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ 0,
+ 0, /* n_preallocs */
+ NULL
+ };
+
+ card_type = g_type_register_static (G_TYPE_INTERFACE,
+ "MMModemGsmCard",
+ &card_info, 0);
+
+ g_type_interface_add_prerequisite (card_type, G_TYPE_OBJECT);
+ dbus_g_object_type_install_info (card_type, &dbus_glib_mm_modem_gsm_card_object_info);
+ }
+
+ return card_type;
+}
diff --git a/src/mm-modem-gsm-card.h b/src/mm-modem-gsm-card.h
new file mode 100644
index 00000000..f795e833
--- /dev/null
+++ b/src/mm-modem-gsm-card.h
@@ -0,0 +1,87 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+#ifndef MM_MODEM_GSM_CARD_H
+#define MM_MODEM_GSM_CARD_H
+
+#include <mm-modem.h>
+
+#define MM_TYPE_MODEM_GSM_CARD (mm_modem_gsm_card_get_type ())
+#define MM_MODEM_GSM_CARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_MODEM_GSM_CARD, MMModemGsmCard))
+#define MM_IS_MODEM_GSM_CARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_MODEM_GSM_CARD))
+#define MM_MODEM_GSM_CARD_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MM_TYPE_MODEM_GSM_CARD, MMModemGsmCard))
+
+typedef struct _MMModemGsmCard MMModemGsmCard;
+
+typedef void (*MMModemGsmCardInfoFn) (MMModemGsmCard *self,
+ const char *manufacturer,
+ const char *model,
+ const char *version,
+ GError *error,
+ gpointer user_data);
+
+struct _MMModemGsmCard {
+ GTypeInterface g_iface;
+
+ /* Methods */
+ void (*get_imei) (MMModemGsmCard *self,
+ MMModemStringFn callback,
+ gpointer user_data);
+
+ void (*get_imsi) (MMModemGsmCard *self,
+ MMModemStringFn callback,
+ gpointer user_data);
+
+ void (*get_info) (MMModemGsmCard *self,
+ MMModemGsmCardInfoFn callback,
+ gpointer user_data);
+
+ void (*send_pin) (MMModemGsmCard *self,
+ const char *pin,
+ MMModemFn callback,
+ gpointer user_data);
+
+ void (*enable_pin) (MMModemGsmCard *self,
+ const char *pin,
+ gboolean enabled,
+ MMModemFn callback,
+ gpointer user_data);
+
+ void (*change_pin) (MMModemGsmCard *self,
+ const char *old_pin,
+ const char *new_pin,
+ MMModemFn callback,
+ gpointer user_data);
+};
+
+GType mm_modem_gsm_card_get_type (void);
+
+void mm_modem_gsm_card_get_imei (MMModemGsmCard *self,
+ MMModemStringFn callback,
+ gpointer user_data);
+
+void mm_modem_gsm_card_get_imsi (MMModemGsmCard *self,
+ MMModemStringFn callback,
+ gpointer user_data);
+
+void mm_modem_gsm_card_get_info (MMModemGsmCard *self,
+ MMModemGsmCardInfoFn callback,
+ gpointer user_data);
+
+void mm_modem_gsm_card_send_pin (MMModemGsmCard *self,
+ const char *pin,
+ MMModemFn callback,
+ gpointer user_data);
+
+void mm_modem_gsm_card_enable_pin (MMModemGsmCard *self,
+ const char *pin,
+ gboolean enabled,
+ MMModemFn callback,
+ gpointer user_data);
+
+void mm_modem_gsm_card_change_pin (MMModemGsmCard *self,
+ const char *old_pin,
+ const char *new_pin,
+ MMModemFn callback,
+ gpointer user_data);
+
+#endif /* MM_MODEM_GSM_CARD_H */
diff --git a/src/mm-modem-gsm-network.c b/src/mm-modem-gsm-network.c
new file mode 100644
index 00000000..e83b48c6
--- /dev/null
+++ b/src/mm-modem-gsm-network.c
@@ -0,0 +1,507 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+#include <string.h>
+#include <dbus/dbus-glib.h>
+
+#include "mm-modem-gsm-network.h"
+#include "mm-modem-error.h"
+#include "mm-callback-info.h"
+
+static void impl_gsm_modem_register (MMModemGsmNetwork *modem,
+ const char *network_id,
+ DBusGMethodInvocation *context);
+
+static void impl_gsm_modem_scan (MMModemGsmNetwork *modem,
+ DBusGMethodInvocation *context);
+
+static void impl_gsm_modem_set_apn (MMModemGsmNetwork *modem,
+ const char *apn,
+ DBusGMethodInvocation *context);
+
+static void impl_gsm_modem_get_signal_quality (MMModemGsmNetwork *modem,
+ DBusGMethodInvocation *context);
+
+static void impl_gsm_modem_set_band (MMModemGsmNetwork *modem,
+ MMModemGsmNetworkBand band,
+ DBusGMethodInvocation *context);
+
+static void impl_gsm_modem_get_band (MMModemGsmNetwork *modem,
+ DBusGMethodInvocation *context);
+
+static void impl_gsm_modem_set_network_mode (MMModemGsmNetwork *modem,
+ MMModemGsmNetworkMode mode,
+ DBusGMethodInvocation *context);
+
+static void impl_gsm_modem_get_network_mode (MMModemGsmNetwork *modem,
+ DBusGMethodInvocation *context);
+
+static void impl_gsm_modem_get_reg_info (MMModemGsmNetwork *modem,
+ DBusGMethodInvocation *context);
+
+#include "mm-modem-gsm-network-glue.h"
+
+/*****************************************************************************/
+
+enum {
+ SIGNAL_QUALITY,
+ REGISTRATION_INFO,
+ NETWORK_MODE,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+/*****************************************************************************/
+
+static void
+async_call_done (MMModem *modem, 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);
+}
+
+static void
+async_call_not_supported (MMModemGsmNetwork *self,
+ MMModemFn callback,
+ gpointer user_data)
+{
+ MMCallbackInfo *info;
+
+ info = mm_callback_info_new (MM_MODEM (self), callback, user_data);
+ info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED,
+ "%s", "Operation not supported");
+ mm_callback_info_schedule (info);
+}
+
+static void
+uint_call_done (MMModem *modem, guint32 result, 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, result);
+}
+
+static void
+uint_call_not_supported (MMModemGsmNetwork *self,
+ MMModemUIntFn callback,
+ gpointer user_data)
+{
+ MMCallbackInfo *info;
+
+ info = mm_callback_info_uint_new (MM_MODEM (self), callback, user_data);
+ info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED,
+ "%s", "Operation not supported");
+ mm_callback_info_schedule (info);
+}
+
+static void
+reg_info_call_done (MMModemGsmNetwork *self,
+ MMModemGsmNetworkRegStatus status,
+ const char *oper_code,
+ const char *oper_name,
+ 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, status,
+ oper_code ? oper_code : "",
+ oper_name ? oper_name : "");
+ }
+}
+
+static void
+reg_info_not_supported_wrapper (MMModem *modem, GError *error, gpointer user_data)
+{
+ MMCallbackInfo *info = (MMCallbackInfo *) user_data;
+ MMModemGsmNetworkRegInfoFn callback;
+
+ callback = (MMModemGsmNetworkRegInfoFn) mm_callback_info_get_data (info, "reg-info-callback");
+ callback (MM_MODEM_GSM_NETWORK (modem), 0, NULL, NULL, error, mm_callback_info_get_data (info, "reg-info-data"));
+}
+
+static void
+reg_info_call_not_supported (MMModemGsmNetwork *self,
+ MMModemGsmNetworkRegInfoFn callback,
+ gpointer user_data)
+{
+ MMCallbackInfo *info;
+
+ info = mm_callback_info_new (MM_MODEM (self), reg_info_not_supported_wrapper, NULL);
+ info->user_data = info;
+ mm_callback_info_set_data (info, "reg-info-callback", callback, NULL);
+ mm_callback_info_set_data (info, "reg-info-data", user_data, NULL);
+ info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED,
+ "%s", "Operation not supported");
+
+ mm_callback_info_schedule (info);
+}
+
+static void
+scan_call_done (MMModemGsmNetwork *self,
+ GPtrArray *results,
+ 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, results);
+}
+
+static void
+scan_not_supported_wrapper (MMModem *modem, GError *error, gpointer user_data)
+{
+ MMCallbackInfo *info = (MMCallbackInfo *) user_data;
+ MMModemGsmNetworkScanFn callback;
+
+ callback = (MMModemGsmNetworkScanFn) mm_callback_info_get_data (info, "scan-callback");
+ callback (MM_MODEM_GSM_NETWORK (modem), NULL, error, mm_callback_info_get_data (info, "scan-data"));
+}
+
+static void
+scan_call_not_supported (MMModemGsmNetwork *self,
+ MMModemGsmNetworkScanFn callback,
+ gpointer user_data)
+{
+ MMCallbackInfo *info;
+
+ info = mm_callback_info_new (MM_MODEM (self), scan_not_supported_wrapper, NULL);
+ info->user_data = info;
+ mm_callback_info_set_data (info, "scan-callback", callback, NULL);
+ mm_callback_info_set_data (info, "scan-data", user_data, NULL);
+ info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED,
+ "%s", "Operation not supported");
+
+ mm_callback_info_schedule (info);
+}
+
+/*****************************************************************************/
+
+void
+mm_modem_gsm_network_register (MMModemGsmNetwork *self,
+ const char *network_id,
+ MMModemFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self));
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->do_register)
+ MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->do_register (self, network_id, callback, user_data);
+ else
+ async_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_network_scan (MMModemGsmNetwork *self,
+ MMModemGsmNetworkScanFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self));
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->scan)
+ MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->scan (self, callback, user_data);
+ else
+ scan_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_network_set_apn (MMModemGsmNetwork *self,
+ const char *apn,
+ MMModemFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self));
+ g_return_if_fail (apn != NULL);
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->set_apn)
+ MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->set_apn (self, apn, callback, user_data);
+ else
+ async_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_network_get_signal_quality (MMModemGsmNetwork *self,
+ MMModemUIntFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self));
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->get_signal_quality)
+ MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->get_signal_quality (self, callback, user_data);
+ else
+ uint_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_network_set_band (MMModemGsmNetwork *self,
+ MMModemGsmNetworkBand band,
+ MMModemFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self));
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->set_band)
+ MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->set_band (self, band, callback, user_data);
+ else
+ async_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_network_get_band (MMModemGsmNetwork *self,
+ MMModemUIntFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self));
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->get_band)
+ MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->get_band (self, callback, user_data);
+ else
+ uint_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_network_set_mode (MMModemGsmNetwork *self,
+ MMModemGsmNetworkMode mode,
+ MMModemFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self));
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->set_network_mode)
+ MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->set_network_mode (self, mode, callback, user_data);
+ else
+ async_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_network_get_mode (MMModemGsmNetwork *self,
+ MMModemUIntFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self));
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->get_network_mode)
+ MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->get_network_mode (self, callback, user_data);
+ else
+ uint_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_network_get_registration_info (MMModemGsmNetwork *self,
+ MMModemGsmNetworkRegInfoFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self));
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->get_registration_info)
+ MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)->get_registration_info (self, callback, user_data);
+ else
+ reg_info_call_not_supported (self, callback, user_data);
+}
+
+void
+mm_modem_gsm_network_signal_quality (MMModemGsmNetwork *self,
+ guint32 quality)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self));
+
+ g_signal_emit (self, signals[SIGNAL_QUALITY], 0, quality);
+}
+
+void
+mm_modem_gsm_network_registration_info (MMModemGsmNetwork *self,
+ MMModemGsmNetworkRegStatus status,
+ const char *oper_code,
+ const char *oper_name)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self));
+
+ g_signal_emit (self, signals[REGISTRATION_INFO], 0, status, oper_code, oper_name);
+}
+
+void
+mm_modem_gsm_network_mode (MMModemGsmNetwork *self,
+ MMModemGsmNetworkMode mode)
+{
+ g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self));
+
+ g_signal_emit (self, signals[NETWORK_MODE], 0, mode);
+}
+
+/*****************************************************************************/
+
+static void
+impl_gsm_modem_register (MMModemGsmNetwork *modem,
+ const char *network_id,
+ DBusGMethodInvocation *context)
+{
+ const char *id;
+
+ /* DBus does not support NULL strings, so the caller should pass an empty string
+ for manual registration. */
+ if (strlen (network_id) < 1)
+ id = NULL;
+ else
+ id = network_id;
+
+ mm_modem_gsm_network_register (modem, id, async_call_done, context);
+}
+
+static void
+impl_gsm_modem_scan (MMModemGsmNetwork *modem,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_network_scan (modem, scan_call_done, context);
+}
+
+static void
+impl_gsm_modem_set_apn (MMModemGsmNetwork *modem,
+ const char *apn,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_network_set_apn (modem, apn, async_call_done, context);
+}
+
+static void
+impl_gsm_modem_get_signal_quality (MMModemGsmNetwork *modem,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_network_get_signal_quality (modem, uint_call_done, context);
+}
+
+static void
+impl_gsm_modem_set_band (MMModemGsmNetwork *modem,
+ MMModemGsmNetworkBand band,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_network_set_band (modem, band, async_call_done, context);
+}
+
+static void
+impl_gsm_modem_get_band (MMModemGsmNetwork *modem,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_network_get_band (modem, uint_call_done, context);
+}
+
+static void
+impl_gsm_modem_set_network_mode (MMModemGsmNetwork *modem,
+ MMModemGsmNetworkMode mode,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_network_set_mode (modem, mode, async_call_done, context);
+}
+
+static void
+impl_gsm_modem_get_network_mode (MMModemGsmNetwork *modem,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_network_get_mode (modem, uint_call_done, context);
+}
+
+static void
+impl_gsm_modem_get_reg_info (MMModemGsmNetwork *modem,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_gsm_network_get_registration_info (modem, reg_info_call_done, context);
+}
+
+/*****************************************************************************/
+
+static void
+mm_modem_gsm_network_init (gpointer g_iface)
+{
+ GType iface_type = G_TYPE_FROM_INTERFACE (g_iface);
+ static gboolean initialized = FALSE;
+
+ if (initialized)
+ return;
+
+ /* Signals */
+ signals[SIGNAL_QUALITY] =
+ g_signal_new ("signal-quality",
+ iface_type,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (MMModemGsmNetwork, signal_quality),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__UINT,
+ G_TYPE_NONE, 1,
+ G_TYPE_UINT);
+
+ /* FIXME */
+#if 0
+ signals[REGISTRATION_INFO] =
+ g_signal_new ("registration-info",
+ iface_type,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (MMModemGsmNetwork, registration_info),
+ NULL, NULL,
+ mm_marshal_VOID__UINT_STRING_STRING,
+ G_TYPE_NONE, 3,
+ G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING);
+#endif
+
+ signals[NETWORK_MODE] =
+ g_signal_new ("network-mode",
+ iface_type,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (MMModemGsmNetwork, network_mode),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__UINT,
+ G_TYPE_NONE, 1,
+ G_TYPE_UINT);
+
+ initialized = TRUE;
+}
+
+GType
+mm_modem_gsm_network_get_type (void)
+{
+ static GType network_type = 0;
+
+ if (!G_UNLIKELY (network_type)) {
+ const GTypeInfo network_info = {
+ sizeof (MMModemGsmNetwork), /* class_size */
+ mm_modem_gsm_network_init, /* base_init */
+ NULL, /* base_finalize */
+ NULL,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ 0,
+ 0, /* n_preallocs */
+ NULL
+ };
+
+ network_type = g_type_register_static (G_TYPE_INTERFACE,
+ "MMModemGsmNetwork",
+ &network_info, 0);
+
+ g_type_interface_add_prerequisite (network_type, G_TYPE_OBJECT);
+ dbus_g_object_type_install_info (network_type, &dbus_glib_mm_modem_gsm_network_object_info);
+ }
+
+ return network_type;
+}
diff --git a/src/mm-modem-gsm-network.h b/src/mm-modem-gsm-network.h
new file mode 100644
index 00000000..f6d08721
--- /dev/null
+++ b/src/mm-modem-gsm-network.h
@@ -0,0 +1,178 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+#ifndef MM_MODEM_GSM_NETWORK_H
+#define MM_MODEM_GSM_NETWORK_H
+
+#include <mm-modem.h>
+
+#define MM_TYPE_MODEM_GSM_NETWORK (mm_modem_gsm_network_get_type ())
+#define MM_MODEM_GSM_NETWORK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_MODEM_GSM_NETWORK, MMModemGsmNetwork))
+#define MM_IS_MODEM_GSM_NETWORK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_MODEM_GSM_NETWORK))
+#define MM_MODEM_GSM_NETWORK_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MM_TYPE_MODEM_GSM_NETWORK, MMModemGsmNetwork))
+
+typedef enum {
+ MM_MODEM_GSM_NETWORK_MODE_ANY = 0,
+ MM_MODEM_GSM_NETWORK_MODE_GPRS = 1,
+ MM_MODEM_GSM_NETWORK_MODE_EDGE = 2,
+ MM_MODEM_GSM_NETWORK_MODE_3G = 3,
+ MM_MODEM_GSM_NETWORK_MODE_HSDPA = 4,
+ MM_MODEM_GSM_NETWORK_MODE_PREFER_2G = 5,
+ MM_MODEM_GSM_NETWORK_MODE_PREFER_3G = 6,
+
+ MM_MODEM_GSM_NETWORK_MODE_LAST = MM_MODEM_GSM_NETWORK_MODE_PREFER_3G
+} MMModemGsmNetworkMode;
+
+typedef enum {
+ MM_MODEM_GSM_NETWORK_BAND_ANY = 0,
+ MM_MODEM_GSM_NETWORK_BAND_EGSM = 1, /* 900 MHz */
+ MM_MODEM_GSM_NETWORK_BAND_DCS = 2, /* 1800 MHz */
+ MM_MODEM_GSM_NETWORK_BAND_PCS = 3, /* 1900 MHz */
+ MM_MODEM_GSM_NETWORK_BAND_G850 = 4, /* 850 MHz */
+ MM_MODEM_GSM_NETWORK_BAND_U2100 = 5, /* WCDMA 2100 MHz (Class I) */
+ MM_MODEM_GSM_NETWORK_BAND_U1700 = 6, /* WCDMA 3GPP UMTS1800 MHz (Class III) */
+ MM_MODEM_GSM_NETWORK_BAND_17IV = 7, /* WCDMA 3GPP AWS 1700/2100 MHz (Class IV) */
+ MM_MODEM_GSM_NETWORK_BAND_U800 = 8, /* WCDMA 3GPP UMTS800 MHz (Class VI) */
+ MM_MODEM_GSM_NETWORK_BAND_U850 = 9, /* WCDMA 3GPP UMTS850 MHz (Class V) */
+ MM_MODEM_GSM_NETWORK_BAND_U900 = 10, /* WCDMA 3GPP UMTS900 MHz (Class VIII) */
+ MM_MODEM_GSM_NETWORK_BAND_U17IX = 11, /* WCDMA 3GPP UMTS MHz (Class IX) */
+
+ MM_MODEM_GSM_NETWORK_BAND_LAST = MM_MODEM_GSM_NETWORK_BAND_U17IX
+} MMModemGsmNetworkBand;
+
+typedef enum {
+ MM_MODEM_GSM_NETWORK_REG_STATUS_IDLE = 0,
+ MM_MODEM_GSM_NETWORK_REG_STATUS_HOME = 1,
+ MM_MODEM_GSM_NETWORK_REG_STATUS_SEARCHING = 2,
+ MM_MODEM_GSM_NETWORK_REG_STATUS_DENIED = 3,
+ MM_MODEM_GSM_NETWORK_REG_STATUS_UNKNOWN = 4,
+ MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING = 5
+} MMModemGsmNetworkRegStatus;
+
+typedef struct _MMModemGsmNetwork MMModemGsmNetwork;
+
+typedef void (*MMModemGsmNetworkScanFn) (MMModemGsmNetwork *self,
+ GPtrArray *results,
+ GError *error,
+ gpointer user_data);
+
+typedef void (*MMModemGsmNetworkRegInfoFn) (MMModemGsmNetwork *self,
+ MMModemGsmNetworkRegStatus status,
+ const char *oper_code,
+ const char *oper_name,
+ GError *error,
+ gpointer user_data);
+
+struct _MMModemGsmNetwork {
+ GTypeInterface g_iface;
+
+ /* Methods */
+ /* 'register' is a reserved word */
+ void (*do_register) (MMModemGsmNetwork *self,
+ const char *network_id,
+ MMModemFn callback,
+ gpointer user_data);
+
+ void (*scan) (MMModemGsmNetwork *self,
+ MMModemGsmNetworkScanFn callback,
+ gpointer user_data);
+
+ void (*set_apn) (MMModemGsmNetwork *self,
+ const char *apn,
+ MMModemFn callback,
+ gpointer user_data);
+
+ void (*get_signal_quality) (MMModemGsmNetwork *self,
+ MMModemUIntFn callback,
+ gpointer user_data);
+
+ void (*set_band) (MMModemGsmNetwork *self,
+ MMModemGsmNetworkBand band,
+ MMModemFn callback,
+ gpointer user_data);
+
+ void (*get_band) (MMModemGsmNetwork *self,
+ MMModemUIntFn callback,
+ gpointer user_data);
+
+ void (*set_network_mode) (MMModemGsmNetwork *self,
+ MMModemGsmNetworkMode mode,
+ MMModemFn callback,
+ gpointer user_data);
+
+ void (*get_network_mode) (MMModemGsmNetwork *self,
+ MMModemUIntFn callback,
+ gpointer user_data);
+
+ void (*get_registration_info) (MMModemGsmNetwork *self,
+ MMModemGsmNetworkRegInfoFn callback,
+ gpointer user_data);
+
+ /* Signals */
+ void (*signal_quality) (MMModemGsmNetwork *self,
+ guint32 quality);
+
+ void (*registration_info) (MMModemGsmNetwork *self,
+ MMModemGsmNetworkRegStatus status,
+ const char *open_code,
+ const char *oper_name);
+
+ void (*network_mode) (MMModemGsmNetwork *self,
+ MMModemGsmNetworkMode mode);
+};
+
+GType mm_modem_gsm_network_get_type (void);
+
+void mm_modem_gsm_network_register (MMModemGsmNetwork *self,
+ const char *network_id,
+ MMModemFn callback,
+ gpointer user_data);
+
+void mm_modem_gsm_network_scan (MMModemGsmNetwork *self,
+ MMModemGsmNetworkScanFn callback,
+ gpointer user_data);
+
+void mm_modem_gsm_network_set_apn (MMModemGsmNetwork *self,
+ const char *apn,
+ MMModemFn callback,
+ gpointer user_data);
+
+void mm_modem_gsm_network_get_signal_quality (MMModemGsmNetwork *self,
+ MMModemUIntFn callback,
+ gpointer user_data);
+
+void mm_modem_gsm_network_set_band (MMModemGsmNetwork *self,
+ MMModemGsmNetworkBand band,
+ MMModemFn callback,
+ gpointer user_data);
+
+void mm_modem_gsm_network_get_band (MMModemGsmNetwork *self,
+ MMModemUIntFn callback,
+ gpointer user_data);
+
+void mm_modem_gsm_network_set_mode (MMModemGsmNetwork *self,
+ MMModemGsmNetworkMode mode,
+ MMModemFn callback,
+ gpointer user_data);
+
+void mm_modem_gsm_network_get_mode (MMModemGsmNetwork *self,
+ MMModemUIntFn callback,
+ gpointer user_data);
+
+void mm_modem_gsm_network_get_registration_info (MMModemGsmNetwork *self,
+ MMModemGsmNetworkRegInfoFn callback,
+ gpointer user_data);
+
+/* Protected */
+
+void mm_modem_gsm_network_signal_quality (MMModemGsmNetwork *self,
+ guint32 quality);
+
+void mm_modem_gsm_network_registration_info (MMModemGsmNetwork *self,
+ MMModemGsmNetworkRegStatus status,
+ const char *oper_code,
+ const char *oper_name);
+
+void mm_modem_gsm_network_mode (MMModemGsmNetwork *self,
+ MMModemGsmNetworkMode mode);
+
+#endif /* MM_MODEM_GSM_NETWORK_H */
diff --git a/src/mm-modem.h b/src/mm-modem.h
index fa8aaee7..fdcce25b 100644
--- a/src/mm-modem.h
+++ b/src/mm-modem.h
@@ -36,6 +36,11 @@ typedef void (*MMModemUIntFn) (MMModem *modem,
GError *error,
gpointer user_data);
+typedef void (*MMModemStringFn) (MMModem *modem,
+ const char *result,
+ GError *error,
+ gpointer user_data);
+
struct _MMModem {
GTypeInterface g_iface;