diff options
-rw-r--r-- | docs/reference/libmm-glib/libmm-glib-docs.xml | 8 | ||||
-rw-r--r-- | docs/reference/libmm-glib/libmm-glib-sections.txt | 144 | ||||
-rw-r--r-- | docs/reference/libmm-glib/libmm-glib.types | 4 | ||||
-rw-r--r-- | libmm-glib/Makefile.am | 2 | ||||
-rw-r--r-- | libmm-glib/libmm-glib.h | 1 | ||||
-rw-r--r-- | libmm-glib/mm-manager.c | 1 | ||||
-rw-r--r-- | libmm-glib/mm-modem-signal.c | 356 | ||||
-rw-r--r-- | libmm-glib/mm-modem-signal.h | 120 | ||||
-rw-r--r-- | libmm-glib/mm-object.c | 36 | ||||
-rw-r--r-- | libmm-glib/mm-object.h | 3 |
10 files changed, 675 insertions, 0 deletions
diff --git a/docs/reference/libmm-glib/libmm-glib-docs.xml b/docs/reference/libmm-glib/libmm-glib-docs.xml index 9b4162b3..e175b208 100644 --- a/docs/reference/libmm-glib/libmm-glib-docs.xml +++ b/docs/reference/libmm-glib/libmm-glib-docs.xml @@ -110,6 +110,10 @@ <xi:include href="xml/mm-modem-firmware.xml"/> <xi:include href="xml/mm-firmware-properties.xml"/> </section> + <section> + <title>Extended signal information</title> + <xi:include href="xml/mm-modem-signal.xml"/> + </section> </chapter> <chapter> @@ -175,6 +179,10 @@ <xi:include href="xml/MmGdbusModemFirmwareProxy.xml"/> <xi:include href="xml/MmGdbusModemFirmwareSkeleton.xml"/> + <xi:include href="xml/MmGdbusModemSignal.xml"/> + <xi:include href="xml/MmGdbusModemSignalProxy.xml"/> + <xi:include href="xml/MmGdbusModemSignalSkeleton.xml"/> + <!--xi:include href="xml/MmGdbusModemContacts.xml"/> <xi:include href="xml/MmGdbusModemContactsProxy.xml"/> <xi:include href="xml/MmGdbusModemContactsSkeleton.xml"/--> diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt index ec807c96..57445748 100644 --- a/docs/reference/libmm-glib/libmm-glib-sections.txt +++ b/docs/reference/libmm-glib/libmm-glib-sections.txt @@ -58,6 +58,8 @@ mm_object_peek_modem_firmware mm_object_get_modem_firmware mm_object_peek_modem_simple mm_object_get_modem_simple +mm_object_peek_modem_signal +mm_object_get_modem_signal <SUBSECTION Standard> MMObjectClass MM_IS_OBJECT @@ -762,6 +764,42 @@ mm_simple_status_get_type </SECTION> <SECTION> +<FILE>mm-modem-signal</FILE> +<TITLE>MMModemSignal</TITLE> +MMModemSignal +<SUBSECTION Getters> +mm_modem_signal_get_path +mm_modem_signal_dup_path +mm_modem_signal_get_rate +mm_modem_signal_get_cdma_rssi +mm_modem_signal_get_cdma_ecio +mm_modem_signal_get_evdo_rssi +mm_modem_signal_get_evdo_ecio +mm_modem_signal_get_evdo_sinr +mm_modem_signal_get_evdo_io +mm_modem_signal_get_gsm_rssi +mm_modem_signal_get_umts_rssi +mm_modem_signal_get_umts_ecio +mm_modem_signal_get_lte_rssi +mm_modem_signal_get_lte_rsrq +mm_modem_signal_get_lte_rsrp +mm_modem_signal_get_lte_snr +<SUBSECTION Methods> +mm_modem_signal_setup +mm_modem_signal_setup_finish +mm_modem_signal_setup_sync +<SUBSECTION Standard> +MMModemSignalClass +MM_IS_MODEM_SIGNAL +MM_IS_MODEM_SIGNAL_CLASS +MM_MODEM_SIGNAL +MM_MODEM_SIGNAL_CLASS +MM_MODEM_SIGNAL_GET_CLASS +MM_TYPE_MODEM_SIGNAL +mm_modem_signal_get_type +</SECTION> + +<SECTION> <FILE>mm-bearer</FILE> <TITLE>MMBearer</TITLE> MMBearer @@ -2087,6 +2125,109 @@ MmGdbusModemSimpleSkeletonPrivate mm_gdbus_modem_simple_skeleton_get_type </SECTION> +<SECTION> +<FILE>MmGdbusModemSignal</FILE> +<TITLE>MmGdbusModemSignal</TITLE> +MmGdbusModemSignal +MmGdbusModemSignalIface +<SUBSECTION Getters> +mm_gdbus_modem_signal_get_cdma_ecio +mm_gdbus_modem_signal_get_cdma_rssi +mm_gdbus_modem_signal_get_evdo_ecio +mm_gdbus_modem_signal_get_evdo_io +mm_gdbus_modem_signal_get_evdo_rssi +mm_gdbus_modem_signal_get_evdo_sinr +mm_gdbus_modem_signal_get_gsm_rssi +mm_gdbus_modem_signal_get_lte_rsrp +mm_gdbus_modem_signal_get_lte_rsrq +mm_gdbus_modem_signal_get_lte_rssi +mm_gdbus_modem_signal_get_lte_snr +mm_gdbus_modem_signal_get_rate +mm_gdbus_modem_signal_get_umts_ecio +mm_gdbus_modem_signal_get_umts_rssi +mm_gdbus_modem_signal_dup_cdma_ecio +mm_gdbus_modem_signal_dup_cdma_rssi +mm_gdbus_modem_signal_dup_evdo_ecio +mm_gdbus_modem_signal_dup_evdo_io +mm_gdbus_modem_signal_dup_evdo_rssi +mm_gdbus_modem_signal_dup_evdo_sinr +mm_gdbus_modem_signal_dup_gsm_rssi +mm_gdbus_modem_signal_dup_lte_rsrp +mm_gdbus_modem_signal_dup_lte_rsrq +mm_gdbus_modem_signal_dup_lte_rssi +mm_gdbus_modem_signal_dup_lte_snr +mm_gdbus_modem_signal_dup_umts_ecio +mm_gdbus_modem_signal_dup_umts_rssi +<SUBSECTION Methods> +mm_gdbus_modem_signal_call_setup +mm_gdbus_modem_signal_call_setup_finish +mm_gdbus_modem_signal_call_setup_sync +<SUBSECTION Private> +mm_gdbus_modem_signal_set_cdma_ecio +mm_gdbus_modem_signal_set_cdma_rssi +mm_gdbus_modem_signal_set_evdo_ecio +mm_gdbus_modem_signal_set_evdo_io +mm_gdbus_modem_signal_set_evdo_rssi +mm_gdbus_modem_signal_set_evdo_sinr +mm_gdbus_modem_signal_set_gsm_rssi +mm_gdbus_modem_signal_set_lte_rsrp +mm_gdbus_modem_signal_set_lte_rsrq +mm_gdbus_modem_signal_set_lte_rssi +mm_gdbus_modem_signal_set_lte_snr +mm_gdbus_modem_signal_set_rate +mm_gdbus_modem_signal_set_umts_ecio +mm_gdbus_modem_signal_set_umts_rssi +mm_gdbus_modem_signal_complete_setup +mm_gdbus_modem_signal_interface_info +mm_gdbus_modem_signal_override_properties +<SUBSECTION Standard> +MM_GDBUS_IS_MODEM_SIGNAL +MM_GDBUS_MODEM_SIGNAL +MM_GDBUS_MODEM_SIGNAL_GET_IFACE +MM_GDBUS_TYPE_MODEM_SIGNAL +mm_gdbus_modem_signal_get_type +</SECTION> + +<SECTION> +<FILE>MmGdbusModemSignalProxy</FILE> +<TITLE>MmGdbusModemSignalProxy</TITLE> +MmGdbusModemSignalProxy +<SUBSECTION New> +mm_gdbus_modem_signal_proxy_new +mm_gdbus_modem_signal_proxy_new_finish +mm_gdbus_modem_signal_proxy_new_for_bus +mm_gdbus_modem_signal_proxy_new_for_bus_finish +mm_gdbus_modem_signal_proxy_new_for_bus_sync +mm_gdbus_modem_signal_proxy_new_sync +<SUBSECTION Standard> +MmGdbusModemSignalProxyClass +MM_GDBUS_IS_MODEM_SIGNAL_PROXY +MM_GDBUS_IS_MODEM_SIGNAL_PROXY_CLASS +MM_GDBUS_MODEM_SIGNAL_PROXY +MM_GDBUS_MODEM_SIGNAL_PROXY_CLASS +MM_GDBUS_MODEM_SIGNAL_PROXY_GET_CLASS +MM_GDBUS_TYPE_MODEM_SIGNAL_PROXY +MmGdbusModemSignalProxyPrivate +mm_gdbus_modem_signal_proxy_get_type +</SECTION> + +<SECTION> +<FILE>MmGdbusModemSignalSkeleton</FILE> +<TITLE>MmGdbusModemSignalSkeleton</TITLE> +MmGdbusModemSignalSkeleton +<SUBSECTION New> +mm_gdbus_modem_signal_skeleton_new +<SUBSECTION Standard> +MmGdbusModemSignalSkeletonClass +MM_GDBUS_IS_MODEM_SIGNAL_SKELETON +MM_GDBUS_IS_MODEM_SIGNAL_SKELETON_CLASS +MM_GDBUS_MODEM_SIGNAL_SKELETON +MM_GDBUS_MODEM_SIGNAL_SKELETON_CLASS +MM_GDBUS_MODEM_SIGNAL_SKELETON_GET_CLASS +MM_GDBUS_TYPE_MODEM_SIGNAL_SKELETON +MmGdbusModemSignalSkeletonPrivate +mm_gdbus_modem_signal_skeleton_get_type +</SECTION> <SECTION> <FILE>MmGdbusObject</FILE> @@ -2112,6 +2253,8 @@ mm_gdbus_object_peek_modem_firmware mm_gdbus_object_get_modem_firmware mm_gdbus_object_peek_modem_simple mm_gdbus_object_get_modem_simple +mm_gdbus_object_peek_modem_signal +mm_gdbus_object_get_modem_signal <SUBSECTION Methods> <SUBSECTION Private> <SUBSECTION Standard> @@ -2156,6 +2299,7 @@ mm_gdbus_object_skeleton_set_modem_location mm_gdbus_object_skeleton_set_modem_messaging mm_gdbus_object_skeleton_set_modem_simple mm_gdbus_object_skeleton_set_modem_time +mm_gdbus_object_skeleton_set_modem_signal <SUBSECTION Standard> MmGdbusObjectSkeletonClass MM_GDBUS_IS_OBJECT_SKELETON diff --git a/docs/reference/libmm-glib/libmm-glib.types b/docs/reference/libmm-glib/libmm-glib.types index 8e516bc2..c39e1b26 100644 --- a/docs/reference/libmm-glib/libmm-glib.types +++ b/docs/reference/libmm-glib/libmm-glib.types @@ -33,6 +33,9 @@ mm_gdbus_modem_messaging_get_type mm_gdbus_modem_messaging_proxy_get_type mm_gdbus_modem_messaging_skeleton_get_type mm_gdbus_modem_proxy_get_type +mm_gdbus_modem_signal_get_type +mm_gdbus_modem_signal_proxy_get_type +mm_gdbus_modem_signal_skeleton_get_type mm_gdbus_modem_simple_get_type mm_gdbus_modem_simple_proxy_get_type mm_gdbus_modem_simple_skeleton_get_type @@ -83,6 +86,7 @@ mm_modem_messaging_get_type mm_modem_mode_get_type mm_modem_port_type_get_type mm_modem_power_state_get_type +mm_modem_signal_get_type mm_modem_simple_get_type mm_modem_state_change_reason_get_type mm_modem_state_failed_reason_get_type diff --git a/libmm-glib/Makefile.am b/libmm-glib/Makefile.am index fbfe6d27..a9c6f2d5 100644 --- a/libmm-glib/Makefile.am +++ b/libmm-glib/Makefile.am @@ -27,6 +27,8 @@ libmm_glib_la_SOURCES = \ mm-modem-time.c \ mm-modem-firmware.h \ mm-modem-firmware.c \ + mm-modem-signal.h \ + mm-modem-signal.c \ mm-sim.h \ mm-sim.c \ mm-sms.h \ diff --git a/libmm-glib/libmm-glib.h b/libmm-glib/libmm-glib.h index 212ac0e4..732b212c 100644 --- a/libmm-glib/libmm-glib.h +++ b/libmm-glib/libmm-glib.h @@ -43,6 +43,7 @@ # include <mm-modem-messaging.h> # include <mm-modem-time.h> # include <mm-modem-firmware.h> +# include <mm-modem-signal.h> #endif #if defined (_LIBMM_INSIDE_MM) || \ diff --git a/libmm-glib/mm-manager.c b/libmm-glib/mm-manager.c index 81c6e4f8..22b9bdf1 100644 --- a/libmm-glib/mm-manager.c +++ b/libmm-glib/mm-manager.c @@ -70,6 +70,7 @@ get_proxy_type (GDBusObjectManagerClient *manager, g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Messaging", GSIZE_TO_POINTER (MM_TYPE_MODEM_MESSAGING)); g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Location", GSIZE_TO_POINTER (MM_TYPE_MODEM_LOCATION)); g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Time", GSIZE_TO_POINTER (MM_TYPE_MODEM_TIME)); + g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Signal", GSIZE_TO_POINTER (MM_TYPE_MODEM_SIGNAL)); g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Firmware", GSIZE_TO_POINTER (MM_TYPE_MODEM_FIRMWARE)); g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.ModemCdma", GSIZE_TO_POINTER (MM_TYPE_MODEM_CDMA)); g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Modem3gpp", GSIZE_TO_POINTER (MM_TYPE_MODEM_3GPP)); diff --git a/libmm-glib/mm-modem-signal.c b/libmm-glib/mm-modem-signal.c new file mode 100644 index 00000000..f930a923 --- /dev/null +++ b/libmm-glib/mm-modem-signal.c @@ -0,0 +1,356 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * libmm -- Access modem status & information from glib applications + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + * Copyright (C) 2012 Google, Inc. + * Copyright (C) 2012 Lanedo GmbH <aleksander@lanedo.com> + */ + +#include <gio/gio.h> + +#include "mm-helpers.h" +#include "mm-errors-types.h" +#include "mm-modem-signal.h" + +/** + * SECTION: mm-modem-signal + * @title: MMModemSignal + * @short_description: The extended Signal interface + * + * The #MMModemSignal is an object providing access to the methods, signals and + * properties of the Signal interface. + * + * The Signal interface is exposed whenever a modem has extended signal retrieval + * capabilities. + */ + +G_DEFINE_TYPE (MMModemSignal, mm_modem_signal, MM_GDBUS_TYPE_MODEM_SIGNAL_PROXY) + +/*****************************************************************************/ + +/** + * mm_modem_signal_get_path: + * @self: A #MMModemSignal. + * + * Gets the DBus path of the #MMObject which implements this interface. + * + * Returns: (transfer none): The DBus path of the #MMObject object. + */ +const gchar * +mm_modem_signal_get_path (MMModemSignal *self) +{ + g_return_val_if_fail (MM_IS_MODEM_SIGNAL (self), NULL); + + RETURN_NON_EMPTY_CONSTANT_STRING ( + g_dbus_proxy_get_object_path (G_DBUS_PROXY (self))); +} + +/** + * mm_modem_signal_dup_path: + * @self: A #MMModemSignal. + * + * Gets a copy of the DBus path of the #MMObject object which implements this interface. + * + * Returns: (transfer full): The DBus path of the #MMObject. The returned value should be freed with g_free(). + */ +gchar * +mm_modem_signal_dup_path (MMModemSignal *self) +{ + gchar *value; + + g_return_val_if_fail (MM_IS_MODEM_SIGNAL (self), NULL); + + g_object_get (G_OBJECT (self), + "g-object-path", &value, + NULL); + RETURN_NON_EMPTY_STRING (value); +} + +/*****************************************************************************/ + +/** + * mm_modem_signal_setup_finish: + * @self: A #MMModemSignal. + * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_modem_signal_setup(). + * @error: Return location for error or %NULL. + * + * Finishes an operation started with mm_modem_signal_setup(). + * + * Returns: %TRUE if the setup was successful, %FALSE if @error is set. + */ +gboolean +mm_modem_signal_setup_finish (MMModemSignal *self, + GAsyncResult *res, + GError **error) +{ + g_return_val_if_fail (MM_IS_MODEM_SIGNAL (self), FALSE); + + return mm_gdbus_modem_signal_call_setup_finish (MM_GDBUS_MODEM_SIGNAL (self), res, error); +} + +/** + * mm_modem_signal_setup: + * @self: A #MMModemSignal. + * @rate: Rate to use when refreshing signal values. + * @cancellable: (allow-none): A #GCancellable or %NULL. + * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. + * @user_data: User data to pass to @callback. + * + * Asynchronously setups the extended signal quality retrieval. + * + * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from. + * You can then call mm_modem_signal_setup_finish() to get the result of the operation. + * + * See mm_modem_signal_setup_sync() for the synchronous, blocking version of this method. + */ +void +mm_modem_signal_setup (MMModemSignal *self, + guint rate, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + g_return_if_fail (MM_IS_MODEM_SIGNAL (self)); + + mm_gdbus_modem_signal_call_setup (MM_GDBUS_MODEM_SIGNAL (self), rate, cancellable, callback, user_data); +} + +/** + * mm_modem_signal_setup_sync: + * @self: A #MMModemSignal. + * @rate: Rate to use when refreshing signal values. + * @cancellable: (allow-none): A #GCancellable or %NULL. + * @error: Return location for error or %NULL. + * + * Synchronously setups the extended signal quality retrieval. + * + * The calling thread is blocked until a reply is received. See mm_modem_signal_setup() + * for the asynchronous version of this method. + * + * Returns: %TRUE if the setup was successful, %FALSE if @error is set. + */ +gboolean +mm_modem_signal_setup_sync (MMModemSignal *self, + guint rate, + GCancellable *cancellable, + GError **error) +{ + g_return_val_if_fail (MM_IS_MODEM_SIGNAL (self), FALSE); + + return mm_gdbus_modem_signal_call_setup_sync (MM_GDBUS_MODEM_SIGNAL (self), rate, cancellable, error); +} + +/*****************************************************************************/ + +/** + * mm_modem_get_rate: + * @self: A #MMModemSignal. + * + * Gets the currently configured refresh rate. + * + * Returns: the refresh rate, in seconds. + */ +guint +mm_modem_signal_get_rate (MMModemSignal *self) +{ + g_return_val_if_fail (MM_IS_MODEM_SIGNAL (self), 0); + + return mm_gdbus_modem_signal_get_rate (MM_GDBUS_MODEM_SIGNAL (self)); +} + +/*****************************************************************************/ + +#define GETTER(VALUE) \ + gboolean \ + mm_modem_signal_get_##VALUE (MMModemSignal *self, \ + gdouble *value) \ + { \ + GVariant *variant; \ + gboolean is_valid = FALSE; \ + double val = 0.0; \ + \ + g_return_val_if_fail (MM_IS_MODEM_SIGNAL (self), FALSE); \ + \ + variant = mm_gdbus_modem_signal_dup_##VALUE (MM_GDBUS_MODEM_SIGNAL (self)); \ + if (variant) { \ + g_variant_get (variant, \ + "(bd)", \ + &is_valid, \ + &val); \ + g_variant_unref (variant); \ + } \ + \ + if (is_valid) \ + *value = val; \ + return is_valid; \ + } + +/** + * mm_modem_get_cdma_rssi: + * @self: A #MMModemSignal. + * @value: (out): Return location for the value. + * + * Gets the CDMA1x RSSI (Received Signal Strength Indication), in dBm. + * + * Returns: %TRUE if @value is valid, %FALSE otherwise. + */ +GETTER(cdma_rssi) + +/** + * mm_modem_get_cdma_ecio: + * @self: A #MMModemSignal. + * @value: (out): Return location for the value. + * + * Gets the CDMA1x Ec/Io, in dBm. + * + * Returns: %TRUE if @value is valid, %FALSE otherwise. + */ +GETTER(cdma_ecio) + +/** + * mm_modem_get_evdo_rssi: + * @self: A #MMModemSignal. + * @value: (out): Return location for the value. + * + * Gets the CDMA EV-DO RSSI (Received Signal Strength Indication), in dBm. + * + * Returns: %TRUE if @value is valid, %FALSE otherwise. + */ +GETTER(evdo_rssi) + +/** + * mm_modem_get_evdo_ecio: + * @self: A #MMModemSignal. + * @value: (out): Return location for the value. + * + * Gets the CDMA EV-DO Ec/Io, in dBm. + * + * Returns: %TRUE if @value is valid, %FALSE otherwise. + */ +GETTER(evdo_ecio) + +/** + * mm_modem_get_evdo_sinr: + * @self: A #MMModemSignal. + * @value: (out): Return location for the value. + * + * Gets the CDMA EV-DO SINR level, in dB. + * + * Returns: %TRUE if @value is valid, %FALSE otherwise. + */ +GETTER(evdo_sinr) + +/** + * mm_modem_get_evdo_io: + * @self: A #MMModemSignal. + * @value: (out): Return location for the value. + * + * Gets the CDMA EV-DO IO, in dBm. + * + * Returns: %TRUE if @value is valid, %FALSE otherwise. + */ +GETTER(evdo_io) + +/** + * mm_modem_get_gsm_rssi: + * @self: A #MMModemSignal. + * @value: (out): Return location for the value. + * + * Gets the GSM RSSI (Received Signal Strength Indication), in dBm. + * + * Returns: %TRUE if @value is valid, %FALSE otherwise. + */ +GETTER(gsm_rssi) + +/** + * mm_modem_get_umts_rssi: + * @self: A #MMModemSignal. + * @value: (out): Return location for the value. + * + * Gets the UMTS (WCDMA) RSSI (Received Signal Strength Indication), in dBm. + * + * Returns: %TRUE if @value is valid, %FALSE otherwise. + */ +GETTER(umts_rssi) + +/** + * mm_modem_get_umts_ecio: + * @self: A #MMModemSignal. + * @value: (out): Return location for the value. + * + * Gets the UMTS (WCDMA) Ec/Io, in dBm. + * + * Returns: %TRUE if @value is valid, %FALSE otherwise. + */ +GETTER(umts_ecio) + +/** + * mm_modem_get_lte_rssi: + * @self: A #MMModemSignal. + * @value: (out): Return location for the value. + * + * Gets the LTE RSSI (Received Signal Strength Indication), in dBm. + * + * Returns: %TRUE if @value is valid, %FALSE otherwise. + */ +GETTER(lte_rssi) + +/** + * mm_modem_get_lte_rsrq: + * @self: A #MMModemSignal. + * @value: (out): Return location for the value. + * + * Gets the LTE RSRQ (Reference Signal Received Quality), in dB. + * + * Returns: %TRUE if @value is valid, %FALSE otherwise. + */ +GETTER(lte_rsrq) + +/** + * mm_modem_get_lte_rsrp: + * @self: A #MMModemSignal. + * @value: (out): Return location for the value. + * + * Gets the LTE RSRP (Reference Signal Received Power), in dBm. + * + * Returns: %TRUE if @value is valid, %FALSE otherwise. + */ +GETTER(lte_rsrp) + +/** + * mm_modem_get_lte_snr: + * @self: A #MMModemSignal. + * @value: (out): Return location for the value. + * + * Gets the LTE S/R ratio, in dB. + * + * Returns: %TRUE if @value is valid, %FALSE otherwise. + */ +GETTER(lte_snr) + +/*****************************************************************************/ + +static void +mm_modem_signal_init (MMModemSignal *self) +{ +} + +static void +mm_modem_signal_class_init (MMModemSignalClass *modem_class) +{ +} diff --git a/libmm-glib/mm-modem-signal.h b/libmm-glib/mm-modem-signal.h new file mode 100644 index 00000000..67bc62cc --- /dev/null +++ b/libmm-glib/mm-modem-signal.h @@ -0,0 +1,120 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * libmm -- Access modem status & information from glib applications + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + * Copyright (C) 2013 Aleksander Morgado <aleksander@gnu.org> + */ + +#ifndef _MM_MODEM_SIGNAL_H_ +#define _MM_MODEM_SIGNAL_H_ + +#if !defined (__LIBMM_GLIB_H_INSIDE__) && !defined (LIBMM_GLIB_COMPILATION) +#error "Only <libmm-glib.h> can be included directly." +#endif + +#include <ModemManager.h> + +#include "mm-gdbus-modem.h" + +G_BEGIN_DECLS + +#define MM_TYPE_MODEM_SIGNAL (mm_modem_signal_get_type ()) +#define MM_MODEM_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_MODEM_SIGNAL, MMModemSignal)) +#define MM_MODEM_SIGNAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MM_TYPE_MODEM_SIGNAL, MMModemSignalClass)) +#define MM_IS_MODEM_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_MODEM_SIGNAL)) +#define MM_IS_MODEM_SIGNAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), MM_TYPE_MODEM_SIGNAL)) +#define MM_MODEM_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_MODEM_SIGNAL, MMModemSignalClass)) + +typedef struct _MMModemSignal MMModemSignal; +typedef struct _MMModemSignalClass MMModemSignalClass; + +/** + * MMModemSignal: + * + * The #MMModemSignal structure contains private data and should only be accessed + * using the provided API. + */ +struct _MMModemSignal { + /*< private >*/ + MmGdbusModemSignalProxy parent; + gpointer unused; +}; + +struct _MMModemSignalClass { + /*< private >*/ + MmGdbusModemSignalProxyClass parent; +}; + +GType mm_modem_signal_get_type (void); + +const gchar *mm_modem_signal_get_path (MMModemSignal *self); +gchar *mm_modem_signal_dup_path (MMModemSignal *self); +guint mm_modem_signal_get_rate (MMModemSignal *self); + +void mm_modem_signal_setup (MMModemSignal *self, + guint rate, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean mm_modem_signal_setup_finish (MMModemSignal *self, + GAsyncResult *res, + GError **error); +gboolean mm_modem_signal_setup_sync (MMModemSignal *self, + guint rate, + GCancellable *cancellable, + GError **error); + +/* CDMA1x */ +gboolean mm_modem_signal_get_cdma_rssi (MMModemSignal *self, + gdouble *value); +gboolean mm_modem_signal_get_cdma_ecio (MMModemSignal *self, + gdouble *value); + +/* EV-DO */ +gboolean mm_modem_signal_get_evdo_rssi (MMModemSignal *self, + gdouble *value); +gboolean mm_modem_signal_get_evdo_ecio (MMModemSignal *self, + gdouble *value); +gboolean mm_modem_signal_get_evdo_sinr (MMModemSignal *self, + gdouble *value); +gboolean mm_modem_signal_get_evdo_io (MMModemSignal *self, + gdouble *value); + +/* GSM */ +gboolean mm_modem_signal_get_gsm_rssi (MMModemSignal *self, + gdouble *value); + +/* UMTS */ +gboolean mm_modem_signal_get_umts_rssi (MMModemSignal *self, + gdouble *value); +gboolean mm_modem_signal_get_umts_ecio (MMModemSignal *self, + gdouble *value); + +/* LTE */ +gboolean mm_modem_signal_get_lte_rssi (MMModemSignal *self, + gdouble *value); +gboolean mm_modem_signal_get_lte_rsrq (MMModemSignal *self, + gdouble *value); +gboolean mm_modem_signal_get_lte_rsrp (MMModemSignal *self, + gdouble *value); +gboolean mm_modem_signal_get_lte_snr (MMModemSignal *self, + gdouble *value); + +G_END_DECLS + +#endif /* _MM_MODEM_SIGNAL_H_ */ diff --git a/libmm-glib/mm-object.c b/libmm-glib/mm-object.c index 8d549bc0..d01686e2 100644 --- a/libmm-glib/mm-object.c +++ b/libmm-glib/mm-object.c @@ -412,6 +412,42 @@ mm_object_peek_modem_firmware (MMObject *self) /*****************************************************************************/ +/** + * mm_object_get_modem_signal: + * @self: A #MMObject. + * + * Gets the #MMModemSignal instance for the D-Bus interface org.freedesktop.ModemManager1.Modem.Signal on @self, if any. + * + * Returns: (transfer full): A #MMModemSignal that must be freed with g_object_unref() or %NULL if @self does not implement the interface. + */ +MMModemSignal * +mm_object_get_modem_signal (MMObject *self) +{ + g_return_val_if_fail (MM_IS_OBJECT (MM_GDBUS_OBJECT (self)), NULL); + + return (MMModemSignal *)mm_gdbus_object_get_modem_signal (MM_GDBUS_OBJECT (self)); +} + +/** + * mm_object_peek_modem_signal: (skip) + * @self: A #MMObject. + * + * Like mm_object_get_modem_signal() but doesn't increase the reference count on the returned object. + * + * <warning>It is not safe to use the returned object if you are on another thread than the one where the #MMManager is running.</warning> + * + * Returns: (transfer none): A #MMModemSignal or %NULL if @self does not implement the interface. Do not free the returned object, it is owned by @self. + */ +MMModemSignal * +mm_object_peek_modem_signal (MMObject *self) +{ + g_return_val_if_fail (MM_IS_OBJECT (MM_GDBUS_OBJECT (self)), NULL); + + return (MMModemSignal *)mm_gdbus_object_peek_modem_signal (MM_GDBUS_OBJECT (self)); +} + +/*****************************************************************************/ + static void mm_object_init (MMObject *self) { diff --git a/libmm-glib/mm-object.h b/libmm-glib/mm-object.h index e2a758f5..cbd5fd22 100644 --- a/libmm-glib/mm-object.h +++ b/libmm-glib/mm-object.h @@ -40,6 +40,7 @@ #include "mm-modem-messaging.h" #include "mm-modem-time.h" #include "mm-modem-firmware.h" +#include "mm-modem-signal.h" G_BEGIN_DECLS @@ -84,6 +85,7 @@ MMModemLocation *mm_object_get_modem_location (MMObject *self); MMModemMessaging *mm_object_get_modem_messaging (MMObject *self); MMModemTime *mm_object_get_modem_time (MMObject *self); MMModemFirmware *mm_object_get_modem_firmware (MMObject *self); +MMModemSignal *mm_object_get_modem_signal (MMObject *self); MMModem *mm_object_peek_modem (MMObject *self); MMModem3gpp *mm_object_peek_modem_3gpp (MMObject *self); @@ -94,6 +96,7 @@ MMModemLocation *mm_object_peek_modem_location (MMObject *self); MMModemMessaging *mm_object_peek_modem_messaging (MMObject *self); MMModemTime *mm_object_peek_modem_time (MMObject *self); MMModemFirmware *mm_object_peek_modem_firmware (MMObject *self); +MMModemSignal *mm_object_peek_modem_signal (MMObject *self); G_END_DECLS |