xmm: implement signal interface with +XCESQ polling

This commit is contained in:
Paul Bartell
2018-09-13 07:17:51 +00:00
committed by Aleksander Morgado
parent 73045e931b
commit 6b30f552a9
3 changed files with 96 additions and 0 deletions
+11
View File
@@ -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))
/*****************************************************************************/
@@ -86,6 +88,15 @@ iface_modem_init (MMIfaceModem *iface)
iface->reset_finish = mm_shared_xmm_reset_finish;
}
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)
{
+64
View File
@@ -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)
{
+21
View File
@@ -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 */