aboutsummaryrefslogtreecommitdiff
path: root/src/mm-modem-cdma.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2009-06-19 13:55:00 -0400
committerDan Williams <dcbw@redhat.com>2009-06-19 13:55:00 -0400
commitaf4ecc3e6dce5a3ad6bad3f6276151a2d783f1ac (patch)
treea7313db4f7b0f348cc13c7af9891f979794cbd8d /src/mm-modem-cdma.c
parentf50a762763f7060cdd1c3417a4e68918bfef101b (diff)
cdma: implement GetServingSystem
Diffstat (limited to 'src/mm-modem-cdma.c')
-rw-r--r--src/mm-modem-cdma.c88
1 files changed, 87 insertions, 1 deletions
diff --git a/src/mm-modem-cdma.c b/src/mm-modem-cdma.c
index 80de742a..01272590 100644
--- a/src/mm-modem-cdma.c
+++ b/src/mm-modem-cdma.c
@@ -8,6 +8,7 @@
static void impl_modem_cdma_get_signal_quality (MMModemCdma *modem, DBusGMethodInvocation *context);
static void impl_modem_cdma_get_esn (MMModemCdma *modem, DBusGMethodInvocation *context);
+static void impl_modem_cdma_get_serving_system (MMModemCdma *modem, DBusGMethodInvocation *context);
#include "mm-modem-cdma-glue.h"
@@ -19,6 +20,7 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
+/*****************************************************************************/
static void
str_call_done (MMModem *modem, const char *result, GError *error, gpointer user_data)
@@ -69,6 +71,91 @@ uint_call_done (MMModem *modem, guint32 result, GError *error, gpointer user_dat
dbus_g_method_return (context, result);
}
+static void
+serving_system_call_done (MMModemCdma *self,
+ guint32 class,
+ char band,
+ guint32 sid,
+ GError *error,
+ gpointer user_data)
+{
+ DBusGMethodInvocation *context = (DBusGMethodInvocation *) user_data;
+
+ if (error)
+ dbus_g_method_return_error (context, error);
+ else {
+ GValueArray *array;
+ GValue value = { 0, };
+ char band_str[2] = { 0, 0 };
+
+ array = g_value_array_new (3);
+
+ /* Band Class */
+ g_value_init (&value, G_TYPE_UINT);
+ g_value_set_uint (&value, class);
+ g_value_array_append (array, &value);
+ g_value_unset (&value);
+
+ /* Band */
+ g_value_init (&value, G_TYPE_STRING);
+ band_str[0] = band;
+ g_value_set_string (&value, band_str);
+ g_value_array_append (array, &value);
+ g_value_unset (&value);
+
+ /* SID */
+ g_value_init (&value, G_TYPE_UINT);
+ g_value_set_uint (&value, sid);
+ g_value_array_append (array, &value);
+ g_value_unset (&value);
+
+ dbus_g_method_return (context, array);
+ }
+}
+
+static void
+serving_system_invoke (MMCallbackInfo *info)
+{
+ MMModemCdmaServingSystemFn callback = (MMModemCdmaServingSystemFn) info->callback;
+
+ callback (MM_MODEM_CDMA (info->modem), 0, 0, 0, info->error, info->user_data);
+}
+
+static void
+serving_system_call_not_supported (MMModemCdma *self,
+ MMModemCdmaServingSystemFn callback,
+ gpointer user_data)
+{
+ MMCallbackInfo *info;
+
+ info = mm_callback_info_new_full (MM_MODEM (self), serving_system_invoke, G_CALLBACK (callback), user_data);
+ info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED,
+ "Operation not supported");
+
+ mm_callback_info_schedule (info);
+}
+
+void
+mm_modem_cdma_get_serving_system (MMModemCdma *self,
+ MMModemCdmaServingSystemFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM_CDMA (self));
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_CDMA_GET_INTERFACE (self)->get_serving_system)
+ MM_MODEM_CDMA_GET_INTERFACE (self)->get_serving_system (self, callback, user_data);
+ else
+ serving_system_call_not_supported (self, callback, user_data);
+}
+
+static void
+impl_modem_cdma_get_serving_system (MMModemCdma *modem,
+ DBusGMethodInvocation *context)
+{
+ mm_modem_cdma_get_serving_system (modem, serving_system_call_done, context);
+}
+
void
mm_modem_cdma_get_esn (MMModemCdma *self,
MMModemStringFn callback,
@@ -119,7 +206,6 @@ mm_modem_cdma_signal_quality (MMModemCdma *self,
g_signal_emit (self, signals[SIGNAL_QUALITY], 0, quality);
}
-
/*****************************************************************************/
static void