aboutsummaryrefslogtreecommitdiff
path: root/plugins/wavecom
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-04-03 15:15:13 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-05-06 15:34:12 +0200
commit65b92dfba5131579be663f6b00140342d5b450e7 (patch)
treeb01a3792ede392aeca30d3562ec1617b85b387cd /plugins/wavecom
parentb7d423288a9fdf98bdc99426a7134e28aaf01471 (diff)
wavecom: implement custom power down sequence
Diffstat (limited to 'plugins/wavecom')
-rw-r--r--plugins/wavecom/mm-broadband-modem-wavecom.c41
1 files changed, 40 insertions, 1 deletions
diff --git a/plugins/wavecom/mm-broadband-modem-wavecom.c b/plugins/wavecom/mm-broadband-modem-wavecom.c
index b8abcd22..e49c3e2d 100644
--- a/plugins/wavecom/mm-broadband-modem-wavecom.c
+++ b/plugins/wavecom/mm-broadband-modem-wavecom.c
@@ -27,9 +27,41 @@
#include "ModemManager.h"
#include "mm-log.h"
+#include "mm-iface-modem.h"
+#include "mm-base-modem-at.h"
#include "mm-broadband-modem-wavecom.h"
-G_DEFINE_TYPE (MMBroadbandModemWavecom, mm_broadband_modem_wavecom, MM_TYPE_BROADBAND_MODEM);
+static void iface_modem_init (MMIfaceModem *iface);
+
+G_DEFINE_TYPE_EXTENDED (MMBroadbandModemWavecom, mm_broadband_modem_wavecom, MM_TYPE_BROADBAND_MODEM, 0,
+ G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM, iface_modem_init))
+
+/*****************************************************************************/
+/* Modem power down (Modem interface) */
+
+static gboolean
+modem_power_down_finish (MMIfaceModem *self,
+ GAsyncResult *res,
+ GError **error)
+{
+ return !!mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, error);
+}
+
+static void
+modem_power_down (MMIfaceModem *self,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ /* Use AT+CFUN=4 for power down. It will stop the RF (IMSI detach), and
+ * keeps access to the SIM */
+ mm_base_modem_at_command (
+ MM_BASE_MODEM (self),
+ "+CFUN=4",
+ 3,
+ FALSE,
+ callback,
+ user_data);
+}
/*****************************************************************************/
@@ -55,6 +87,13 @@ mm_broadband_modem_wavecom_init (MMBroadbandModemWavecom *self)
}
static void
+iface_modem_init (MMIfaceModem *iface)
+{
+ iface->modem_power_down = modem_power_down;
+ iface->modem_power_down_finish = modem_power_down_finish;
+}
+
+static void
mm_broadband_modem_wavecom_class_init (MMBroadbandModemWavecomClass *klass)
{
}