diff options
author | Paul Bartell <p.bartell@temperednetworks.com> | 2018-09-10 15:25:15 -0700 |
---|---|---|
committer | Aleksander Morgado <aleksander@gnu.org> | 2018-09-13 07:17:51 +0000 |
commit | 6b30f552a91ec0478f6a06fdc4e3d6740064bc0a (patch) | |
tree | 7f0be34a42d3f0a60e1f2e98f1dd3caa58f043a7 | |
parent | 73045e931bd0cdef99c89ee56639850430430f41 (diff) | |
download | ModemManager-6b30f552a91ec0478f6a06fdc4e3d6740064bc0a.tar.gz |
xmm: implement signal interface with +XCESQ polling
-rw-r--r-- | plugins/xmm/mm-broadband-modem-xmm.c | 11 | ||||
-rw-r--r-- | plugins/xmm/mm-shared-xmm.c | 64 | ||||
-rw-r--r-- | plugins/xmm/mm-shared-xmm.h | 21 |
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 */ |