xmm: implement signal interface with +XCESQ polling
This commit is contained in:
committed by
Aleksander Morgado
parent
73045e931b
commit
6b30f552a9
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user