aboutsummaryrefslogtreecommitdiff
path: root/libmm-glib/mm-common-helpers.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmm-glib/mm-common-helpers.c')
-rw-r--r--libmm-glib/mm-common-helpers.c125
1 files changed, 125 insertions, 0 deletions
diff --git a/libmm-glib/mm-common-helpers.c b/libmm-glib/mm-common-helpers.c
index 2b158354..04ffe36d 100644
--- a/libmm-glib/mm-common-helpers.c
+++ b/libmm-glib/mm-common-helpers.c
@@ -26,6 +26,34 @@
#include "mm-common-helpers.h"
gchar *
+mm_common_build_capabilities_string (const MMModemCapability *capabilities,
+ guint n_capabilities)
+{
+ gboolean first = TRUE;
+ GString *str;
+ guint i;
+
+ if (!capabilities || !n_capabilities)
+ return g_strdup ("none");
+
+ str = g_string_new ("");
+ for (i = 0; i < n_capabilities; i++) {
+ gchar *tmp;
+
+ tmp = mm_modem_capability_build_string_from_mask (capabilities[i]);
+ g_string_append_printf (str, "%s%s",
+ first ? "" : "\n",
+ tmp);
+ g_free (tmp);
+
+ if (first)
+ first = FALSE;
+ }
+
+ return g_string_free (str, FALSE);
+}
+
+gchar *
mm_common_build_bands_string (const MMModemBand *bands,
guint n_bands)
{
@@ -216,6 +244,103 @@ mm_common_get_modes_from_string (const gchar *str,
return modes;
}
+GArray *
+mm_common_capability_combinations_variant_to_garray (GVariant *variant)
+{
+ GArray *array = NULL;
+
+ if (variant) {
+ GVariantIter iter;
+ guint n;
+
+ g_variant_iter_init (&iter, variant);
+ n = g_variant_iter_n_children (&iter);
+
+ if (n > 0) {
+ guint32 capability;
+
+ array = g_array_sized_new (FALSE, FALSE, sizeof (MMModemCapability), n);
+ while (g_variant_iter_loop (&iter, "u", &capability))
+ g_array_append_val (array, capability);
+ }
+ }
+
+ /* If nothing set, fallback to default */
+ if (!array) {
+ guint32 capability = MM_MODEM_CAPABILITY_NONE;
+
+ array = g_array_sized_new (FALSE, FALSE, sizeof (MMModemCapability), 1);
+ g_array_append_val (array, capability);
+ }
+
+ return array;
+}
+
+MMModemCapability *
+mm_common_capability_combinations_variant_to_array (GVariant *variant,
+ guint *n_capabilities)
+{
+ GArray *array;
+
+ array = mm_common_capability_combinations_variant_to_garray (variant);
+ if (n_capabilities)
+ *n_capabilities = array->len;
+ return (MMModemCapability *) g_array_free (array, FALSE);
+}
+
+GVariant *
+mm_common_capability_combinations_array_to_variant (const MMModemCapability *capabilities,
+ guint n_capabilities)
+{
+ GVariantBuilder builder;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
+
+ if (n_capabilities > 0) {
+ guint i;
+
+ for (i = 0; i < n_capabilities; i++)
+ g_variant_builder_add_value (&builder,
+ g_variant_new_uint32 ((guint32)capabilities[i]));
+ } else
+ g_variant_builder_add_value (&builder,
+ g_variant_new_uint32 (MM_MODEM_CAPABILITY_NONE));
+
+ return g_variant_builder_end (&builder);
+}
+
+GVariant *
+mm_common_capability_combinations_garray_to_variant (GArray *array)
+{
+ if (array)
+ return mm_common_capability_combinations_array_to_variant ((const MMModemCapability *)array->data,
+ array->len);
+
+ return mm_common_capability_combinations_array_to_variant (NULL, 0);
+}
+
+GVariant *
+mm_common_build_capability_combinations_none (void)
+{
+ GVariantBuilder builder;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
+ g_variant_builder_add_value (&builder,
+ g_variant_new_uint32 (MM_MODEM_CAPABILITY_NONE));
+ return g_variant_builder_end (&builder);
+}
+
+GVariant *
+mm_common_build_capability_combinations_any (void)
+{
+ GVariantBuilder builder;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
+ g_variant_builder_add_value (&builder,
+ g_variant_new_uint32 (MM_MODEM_CAPABILITY_ANY));
+ return g_variant_builder_end (&builder);
+}
+
void
mm_common_get_bands_from_string (const gchar *str,
MMModemBand **bands,