summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Chan <benchan@chromium.org>2018-08-14 14:54:14 -0700
committerBen Chan <benchan@chromium.org>2018-08-18 13:34:06 -0700
commitd46aa0c36a8543857e28f151e134f88462369fc4 (patch)
tree482c03ac63af9191aa4e56ecf336904b7dadfa4b
parenteb327b4203601a6c09f6369927325767391b86e7 (diff)
downloadModemManager-d46aa0c36a8543857e28f151e134f88462369fc4.tar.gz
modem-3gpp: add 'Pco' property to Modem3gpp interface
This patch adds a 'Pco' property to the Modem3gpp interface for tracking PCOs that the modem has received from the network.
-rw-r--r--docs/reference/libmm-glib/libmm-glib-sections.txt4
-rw-r--r--introspection/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml7
-rw-r--r--libmm-glib/mm-modem-3gpp.c40
-rw-r--r--libmm-glib/mm-modem-3gpp.h2
-rw-r--r--src/mm-iface-modem-3gpp.c29
-rw-r--r--src/mm-iface-modem-3gpp.h2
6 files changed, 84 insertions, 0 deletions
diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt
index 01a5de27a..3cd3364d7 100644
--- a/docs/reference/libmm-glib/libmm-glib-sections.txt
+++ b/docs/reference/libmm-glib/libmm-glib-sections.txt
@@ -277,6 +277,7 @@ mm_modem_3gpp_get_enabled_facility_locks
mm_modem_3gpp_get_registration_state
mm_modem_3gpp_get_subscription_state
mm_modem_3gpp_get_eps_ue_mode_operation
+mm_modem_3gpp_get_pco
<SUBSECTION Methods>
mm_modem_3gpp_register
mm_modem_3gpp_register_finish
@@ -1703,6 +1704,8 @@ mm_gdbus_modem3gpp_dup_operator_name
mm_gdbus_modem3gpp_get_enabled_facility_locks
mm_gdbus_modem3gpp_get_subscription_state
mm_gdbus_modem3gpp_get_eps_ue_mode_operation
+mm_gdbus_modem3gpp_get_pco
+mm_gdbus_modem3gpp_dup_pco
<SUBSECTION Methods>
mm_gdbus_modem3gpp_call_register
mm_gdbus_modem3gpp_call_register_finish
@@ -1726,6 +1729,7 @@ mm_gdbus_modem3gpp_set_operator_name
mm_gdbus_modem3gpp_set_registration_state
mm_gdbus_modem3gpp_set_subscription_state
mm_gdbus_modem3gpp_set_eps_ue_mode_operation
+mm_gdbus_modem3gpp_set_pco
<SUBSECTION Standard>
MM_GDBUS_IS_MODEM3GPP
MM_GDBUS_MODEM3GPP
diff --git a/introspection/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml b/introspection/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml
index 1aaba4c09..423ee0b62 100644
--- a/introspection/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml
+++ b/introspection/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml
@@ -164,5 +164,12 @@
-->
<property name="EpsUeModeOperation" type="u" access="read" />
+ <!--
+ Pco:
+
+ The raw PCOs received from the network.
+ -->
+ <property name="Pco" type="a(ubay)" access="read" />
+
</interface>
</node>
diff --git a/libmm-glib/mm-modem-3gpp.c b/libmm-glib/mm-modem-3gpp.c
index 69edc276d..360aaef60 100644
--- a/libmm-glib/mm-modem-3gpp.c
+++ b/libmm-glib/mm-modem-3gpp.c
@@ -26,6 +26,7 @@
#include "mm-helpers.h"
#include "mm-errors-types.h"
#include "mm-modem-3gpp.h"
+#include "mm-pco.h"
/**
* SECTION: mm-modem-3gpp
@@ -299,6 +300,45 @@ mm_modem_3gpp_get_eps_ue_mode_operation (MMModem3gpp *self)
/*****************************************************************************/
/**
+ * mm_modem_3gpp_get_pco:
+ * @self: A #MMModem3gpp.
+ *
+ * Get the list of #MMPco received from the network.
+ *
+ * The caller is responsible for freeing the returned #GList with
+ * mm_pco_list_free().
+ *
+ * Returns: (transfer full): A list of #MMPco.
+ */
+GList *
+mm_modem_3gpp_get_pco (MMModem3gpp *self)
+{
+ GList *pco_list = NULL;
+ GVariant *container, *child;
+ GVariantIter iter;
+
+ g_return_val_if_fail (MM_IS_MODEM_3GPP (self), NULL);
+
+ container = mm_gdbus_modem3gpp_get_pco (MM_GDBUS_MODEM3GPP (self));
+
+ g_return_val_if_fail (g_variant_is_of_type (container, G_VARIANT_TYPE ("a(ubay)")),
+ NULL);
+ g_variant_iter_init (&iter, container);
+ while ((child = g_variant_iter_next_value (&iter))) {
+ MMPco *pco;
+
+ pco = mm_pco_from_variant (child, NULL);
+ pco_list = mm_pco_list_add (pco_list, pco);
+ g_object_unref (pco);
+ g_variant_unref (child);
+ }
+
+ return pco_list;
+}
+
+/*****************************************************************************/
+
+/**
* mm_modem_3gpp_register_finish:
* @self: A #MMModem3gpp.
* @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_modem_3gpp_register().
diff --git a/libmm-glib/mm-modem-3gpp.h b/libmm-glib/mm-modem-3gpp.h
index a3b37f08b..539674f78 100644
--- a/libmm-glib/mm-modem-3gpp.h
+++ b/libmm-glib/mm-modem-3gpp.h
@@ -82,6 +82,8 @@ MMModem3gppFacility mm_modem_3gpp_get_enabled_facility_locks (MMModem3
MMModem3gppEpsUeModeOperation mm_modem_3gpp_get_eps_ue_mode_operation (MMModem3gpp *self);
+GList *mm_modem_3gpp_get_pco (MMModem3gpp *self);
+
void mm_modem_3gpp_register (MMModem3gpp *self,
const gchar *network_id,
GCancellable *cancellable,
diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c
index 72a9ab6d7..d57e59826 100644
--- a/src/mm-iface-modem-3gpp.c
+++ b/src/mm-iface-modem-3gpp.c
@@ -1540,6 +1540,34 @@ periodic_registration_check_enable (MMIfaceModem3gpp *self)
/*****************************************************************************/
+void
+mm_iface_modem_3gpp_update_pco_list (MMIfaceModem3gpp *self,
+ const GList *pco_list)
+{
+ MmGdbusModem3gpp *skeleton = NULL;
+ GVariantBuilder builder;
+ GVariant *variant;
+ const GList *iter;
+
+ g_object_get (self,
+ MM_IFACE_MODEM_3GPP_DBUS_SKELETON, &skeleton,
+ NULL);
+ if (!skeleton)
+ return;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ubay)"));
+ for (iter = pco_list; iter; iter = g_list_next (iter)) {
+ g_variant_builder_add_value (&builder,
+ mm_pco_to_variant (MM_PCO (iter->data)));
+ }
+ variant = g_variant_ref_sink (g_variant_builder_end (&builder));
+ mm_gdbus_modem3gpp_set_pco (skeleton, variant);
+ g_variant_unref (variant);
+ g_object_unref (skeleton);
+}
+
+/*****************************************************************************/
+
typedef struct _DisablingContext DisablingContext;
static void interface_disabling_step (GTask *task);
@@ -2242,6 +2270,7 @@ mm_iface_modem_3gpp_initialize (MMIfaceModem3gpp *self,
mm_gdbus_modem3gpp_set_operator_name (skeleton, NULL);
mm_gdbus_modem3gpp_set_enabled_facility_locks (skeleton, MM_MODEM_3GPP_FACILITY_NONE);
mm_gdbus_modem3gpp_set_subscription_state (skeleton, MM_MODEM_3GPP_SUBSCRIPTION_STATE_UNKNOWN);
+ mm_gdbus_modem3gpp_set_pco (skeleton, NULL);
/* Bind our RegistrationState property */
g_object_bind_property (self, MM_IFACE_MODEM_3GPP_REGISTRATION_STATE,
diff --git a/src/mm-iface-modem-3gpp.h b/src/mm-iface-modem-3gpp.h
index a08c5fb67..7ea190a21 100644
--- a/src/mm-iface-modem-3gpp.h
+++ b/src/mm-iface-modem-3gpp.h
@@ -259,6 +259,8 @@ void mm_iface_modem_3gpp_update_location (MMIfaceModem3gpp *self,
gulong location_area_code,
gulong tracking_area_code,
gulong cell_id);
+void mm_iface_modem_3gpp_update_pco_list (MMIfaceModem3gpp *self,
+ const GList *pco_list);
/* Run all registration checks */
void mm_iface_modem_3gpp_run_registration_checks (MMIfaceModem3gpp *self,