aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libmm-common/mm-common-helpers.c92
-rw-r--r--libmm-common/mm-common-helpers.h13
2 files changed, 82 insertions, 23 deletions
diff --git a/libmm-common/mm-common-helpers.c b/libmm-common/mm-common-helpers.c
index b117c3f9..ea544c0d 100644
--- a/libmm-common/mm-common-helpers.c
+++ b/libmm-common/mm-common-helpers.c
@@ -286,42 +286,74 @@ mm_common_get_bands_from_string (const gchar *str,
GArray *
mm_common_bands_variant_to_garray (GVariant *variant)
{
- GArray *array;
- GVariantIter iter;
- guint32 band = MM_MODEM_BAND_UNKNOWN;
-
- g_variant_iter_init (&iter, variant);
- array = g_array_sized_new (FALSE,
- FALSE,
- sizeof (MMModemBand),
- g_variant_iter_n_children (&iter));
- while (g_variant_iter_loop (&iter, "u", &band))
+ 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 band;
+
+ array = g_array_sized_new (FALSE, FALSE, sizeof (MMModemBand), n);
+ while (g_variant_iter_loop (&iter, "u", &band))
+ g_array_append_val (array, band);
+ }
+ }
+
+ /* If nothing set, fallback to default */
+ if (!array) {
+ guint32 band = MM_MODEM_BAND_UNKNOWN;
+
+ array = g_array_sized_new (FALSE, FALSE, sizeof (MMModemBand), 1);
g_array_append_val (array, band);
+ }
return array;
}
+MMModemBand *
+mm_common_bands_variant_to_array (GVariant *variant,
+ guint *n_bands)
+{
+ GArray *array;
+
+ array = mm_common_bands_variant_to_garray (variant);
+ if (n_bands)
+ *n_bands = array->len;
+ return (MMModemBand *) g_array_free (array, FALSE);
+}
+
GVariant *
mm_common_bands_array_to_variant (const MMModemBand *bands,
guint n_bands)
{
- GVariantBuilder builder;
- guint i;
+ if (n_bands > 0) {
+ GVariantBuilder builder;
+ guint i;
- g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
- for (i = 0; i < n_bands; i++) {
- g_variant_builder_add_value (&builder,
- g_variant_new_uint32 ((guint32)bands[i]));
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
+
+ for (i = 0; i < n_bands; i++)
+ g_variant_builder_add_value (&builder,
+ g_variant_new_uint32 ((guint32)bands[i]));
+ return g_variant_builder_end (&builder);
}
- return g_variant_builder_end (&builder);
+ return mm_common_build_bands_unknown ();
}
GVariant *
mm_common_bands_garray_to_variant (GArray *array)
{
- return mm_common_bands_array_to_variant ((const MMModemBand *)array->data,
- array->len);
+ if (array)
+ return mm_common_bands_array_to_variant ((const MMModemBand *)array->data,
+ array->len);
+
+ return mm_common_bands_array_to_variant (NULL, 0);
}
gboolean
@@ -339,3 +371,25 @@ mm_common_get_boolean_from_string (const gchar *value,
return FALSE;
}
+
+GVariant *
+mm_common_build_bands_unknown (void)
+{
+ GVariantBuilder builder;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
+ g_variant_builder_add_value (&builder,
+ g_variant_new_uint32 (MM_MODEM_BAND_UNKNOWN));
+ return g_variant_builder_end (&builder);
+}
+
+GVariant *
+mm_common_build_bands_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_BAND_ANY));
+ return g_variant_builder_end (&builder);
+}
diff --git a/libmm-common/mm-common-helpers.h b/libmm-common/mm-common-helpers.h
index 077828e1..c14dc4b2 100644
--- a/libmm-common/mm-common-helpers.h
+++ b/libmm-common/mm-common-helpers.h
@@ -34,9 +34,14 @@ void mm_common_get_bands_from_string (const gchar *str,
gboolean mm_common_get_boolean_from_string (const gchar *value,
GError **error);
-GArray *mm_common_bands_variant_to_garray (GVariant *variant);
-GVariant *mm_common_bands_array_to_variant (const MMModemBand *bands,
- guint n_bands);
-GVariant *mm_common_bands_garray_to_variant (GArray *array);
+GArray *mm_common_bands_variant_to_garray (GVariant *variant);
+MMModemBand *mm_common_bands_variant_to_array (GVariant *variant,
+ guint *n_bands);
+GVariant *mm_common_bands_array_to_variant (const MMModemBand *bands,
+ guint n_bands);
+GVariant *mm_common_bands_garray_to_variant (GArray *array);
+
+GVariant *mm_common_build_bands_any (void);
+GVariant *mm_common_build_bands_unknown (void);
#endif /* MM_COMMON_HELPERS_H */