summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Bartell <p.bartell@temperednetworks.com>2018-09-10 15:25:15 -0700
committerAleksander Morgado <aleksander@gnu.org>2018-09-13 07:17:51 +0000
commit6b30f552a91ec0478f6a06fdc4e3d6740064bc0a (patch)
tree7f0be34a42d3f0a60e1f2e98f1dd3caa58f043a7
parent73045e931bd0cdef99c89ee56639850430430f41 (diff)
downloadModemManager-6b30f552a91ec0478f6a06fdc4e3d6740064bc0a.tar.gz
xmm: implement signal interface with +XCESQ polling
-rw-r--r--plugins/xmm/mm-broadband-modem-xmm.c11
-rw-r--r--plugins/xmm/mm-shared-xmm.c64
-rw-r--r--plugins/xmm/mm-shared-xmm.h21
3 files changed, 96 insertions, 0 deletions
diff --git a/plugins/xmm/mm-broadband-modem-xmm.c b/plugins/xmm/mm-broadband-modem-xmm.c
index cf9bdeb70..87625bfee 100644
--- a/plugins/xmm/mm-broadband-modem-xmm.c
+++ b/plugins/xmm/mm-broadband-modem-xmm.c
@@ -29,9 +29,11 @@
static void iface_modem_init (MMIfaceModem *iface);
static void shared_xmm_init (MMSharedXmm *iface);
+static void iface_modem_signal_init (MMIfaceModemSignal *iface);
G_DEFINE_TYPE_EXTENDED (MMBroadbandModemXmm, mm_broadband_modem_xmm, MM_TYPE_BROADBAND_MODEM, 0,
G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM, iface_modem_init)
+ G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_SIGNAL, iface_modem_signal_init)
G_IMPLEMENT_INTERFACE (MM_TYPE_SHARED_XMM, shared_xmm_init))
/*****************************************************************************/
@@ -87,6 +89,15 @@ iface_modem_init (MMIfaceModem *iface)
}
static void
+iface_modem_signal_init (MMIfaceModemSignal *iface)
+{
+ iface->check_support = mm_shared_xmm_signal_check_support;
+ iface->check_support_finish = mm_shared_xmm_signal_check_support_finish;
+ iface->load_values = mm_shared_xmm_signal_load_values;
+ iface->load_values_finish = mm_shared_xmm_signal_load_values_finish;
+}
+
+static void
shared_xmm_init (MMSharedXmm *iface)
{
}
diff --git a/plugins/xmm/mm-shared-xmm.c b/plugins/xmm/mm-shared-xmm.c
index 5e562dffd..6181a4447 100644
--- a/plugins/xmm/mm-shared-xmm.c
+++ b/plugins/xmm/mm-shared-xmm.c
@@ -23,6 +23,7 @@
#include "mm-log.h"
#include "mm-iface-modem.h"
+#include "mm-iface-modem-signal.h"
#include "mm-base-modem.h"
#include "mm-base-modem-at.h"
#include "mm-shared-xmm.h"
@@ -689,6 +690,69 @@ mm_shared_xmm_power_up (MMIfaceModem *self,
/*****************************************************************************/
+
+/*****************************************************************************/
+/* Check support (Signal interface) */
+
+gboolean
+mm_shared_xmm_signal_check_support_finish (MMIfaceModemSignal *self,
+ GAsyncResult *res,
+ GError **error)
+{
+ return !!mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, error);
+}
+
+void
+mm_shared_xmm_signal_check_support (MMIfaceModemSignal *self,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ mm_base_modem_at_command (MM_BASE_MODEM (self),
+ "+XCESQ=?",
+ 3,
+ FALSE,
+ callback,
+ user_data);
+}
+
+/*****************************************************************************/
+/* Load extended signal information (Signal interface) */
+
+gboolean
+mm_shared_xmm_signal_load_values_finish (MMIfaceModemSignal *self,
+ GAsyncResult *res,
+ MMSignal **cdma,
+ MMSignal **evdo,
+ MMSignal **gsm,
+ MMSignal **umts,
+ MMSignal **lte,
+ GError **error)
+{
+ const gchar *response;
+
+ response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, error);
+ if (!response || !mm_xmm_xcesq_response_to_signal_info (response, gsm, umts, lte, error))
+ return FALSE;
+
+ return TRUE;
+}
+
+void
+mm_shared_xmm_signal_load_values (MMIfaceModemSignal *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ mm_base_modem_at_command (MM_BASE_MODEM (self),
+ "+XCESQ?",
+ 3,
+ FALSE,
+ callback,
+ user_data);
+}
+
+/*****************************************************************************/
+
static void
shared_xmm_init (gpointer g_iface)
{
diff --git a/plugins/xmm/mm-shared-xmm.h b/plugins/xmm/mm-shared-xmm.h
index 9fd610d00..d32cea144 100644
--- a/plugins/xmm/mm-shared-xmm.h
+++ b/plugins/xmm/mm-shared-xmm.h
@@ -23,6 +23,7 @@
#include <libmm-glib.h>
#include "mm-iface-modem.h"
+#include "mm-iface-modem-signal.h"
#define MM_TYPE_SHARED_XMM (mm_shared_xmm_get_type ())
#define MM_SHARED_XMM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_SHARED_XMM, MMSharedXmm))
@@ -113,4 +114,24 @@ gboolean mm_shared_xmm_reset_finish (MMIfaceModem *s
GAsyncResult *res,
GError **error);
+gboolean mm_shared_xmm_signal_check_support_finish (MMIfaceModemSignal *self,
+ GAsyncResult *res,
+ GError **error);
+
+void mm_shared_xmm_signal_check_support (MMIfaceModemSignal *self,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean mm_shared_xmm_signal_load_values_finish (MMIfaceModemSignal *self,
+ GAsyncResult *res,
+ MMSignal **cdma,
+ MMSignal **evdo,
+ MMSignal **gsm,
+ MMSignal **umts,
+ MMSignal **lte,
+ GError **error);
+void mm_shared_xmm_signal_load_values (MMIfaceModemSignal *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
#endif /* MM_SHARED_XMM_H */