aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2011-01-14 12:17:02 -0600
committerDan Williams <dcbw@redhat.com>2011-01-14 12:17:02 -0600
commitd908389aff85a77757d3a86f0be6b47535991e3c (patch)
tree0a5ef3f0b217a170bb07a95f5728c24ad9212390 /src
parent12b144e120b7a275f4b1ffe5a51fc772304f4fa1 (diff)
core: add modem reset/power-cycle command
Based on a patch by Elly Jones from Google.
Diffstat (limited to 'src')
-rw-r--r--src/mm-modem.c51
-rw-r--r--src/mm-modem.h8
2 files changed, 59 insertions, 0 deletions
diff --git a/src/mm-modem.c b/src/mm-modem.c
index c65bee54..3535cded 100644
--- a/src/mm-modem.c
+++ b/src/mm-modem.c
@@ -28,6 +28,7 @@ static void impl_modem_connect (MMModem *modem, const char *number, DBusGMethodI
static void impl_modem_disconnect (MMModem *modem, DBusGMethodInvocation *context);
static void impl_modem_get_ip4_config (MMModem *modem, DBusGMethodInvocation *context);
static void impl_modem_get_info (MMModem *modem, DBusGMethodInvocation *context);
+static void impl_modem_reset (MMModem *modem, DBusGMethodInvocation *context);
static void impl_modem_factory_reset (MMModem *modem, const char *code, DBusGMethodInvocation *context);
#include "mm-modem-glue.h"
@@ -478,6 +479,56 @@ impl_modem_get_info (MMModem *modem,
/*****************************************************************************/
static void
+reset_auth_cb (MMAuthRequest *req,
+ GObject *owner,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
+{
+ MMModem *self = MM_MODEM (owner);
+ GError *error = NULL;
+
+ /* Return any authorization error, otherwise try to reset the modem */
+ if (!mm_modem_auth_finish (self, req, &error)) {
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ } else
+ mm_modem_reset (self, async_call_done, context);
+}
+
+static void
+impl_modem_reset (MMModem *modem, DBusGMethodInvocation *context)
+{
+ GError *error = NULL;
+
+ /* Make sure the caller is authorized to reset the device */
+ if (!mm_modem_auth_request (MM_MODEM (modem),
+ MM_AUTHORIZATION_DEVICE_CONTROL,
+ context,
+ reset_auth_cb,
+ NULL, NULL,
+ &error)) {
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ }
+}
+
+void
+mm_modem_reset (MMModem *self,
+ MMModemFn callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MODEM (self));
+ g_return_if_fail (callback != NULL);
+
+ if (MM_MODEM_GET_INTERFACE (self)->reset)
+ MM_MODEM_GET_INTERFACE (self)->reset (self, callback, user_data);
+ else
+ async_op_not_supported (self, callback, user_data);
+}
+
+/*****************************************************************************/
+
+static void
factory_reset_auth_cb (MMAuthRequest *req,
GObject *owner,
DBusGMethodInvocation *context,
diff --git a/src/mm-modem.h b/src/mm-modem.h
index 1faf3838..8a755d88 100644
--- a/src/mm-modem.h
+++ b/src/mm-modem.h
@@ -194,6 +194,10 @@ struct _MMModem {
MMAuthRequest *req,
GError **error);
+ void (*reset) (MMModem *self,
+ MMModemFn callback,
+ gpointer user_data);
+
void (*factory_reset) (MMModem *self,
const char *code,
MMModemFn callback,
@@ -257,6 +261,10 @@ void mm_modem_set_charset (MMModem *self,
MMModemFn callback,
gpointer user_data);
+void mm_modem_reset (MMModem *self,
+ MMModemFn callback,
+ gpointer user_data);
+
void mm_modem_factory_reset (MMModem *self,
const char *code,
MMModemFn callback,