diff options
-rw-r--r-- | libmm-glib/mm-common-helpers.c | 71 | ||||
-rw-r--r-- | libmm-glib/mm-common-helpers.h | 7 | ||||
-rw-r--r-- | libmm-glib/mm-helper-types.h | 16 |
3 files changed, 94 insertions, 0 deletions
diff --git a/libmm-glib/mm-common-helpers.c b/libmm-glib/mm-common-helpers.c index 72007ab5..e249a2fc 100644 --- a/libmm-glib/mm-common-helpers.c +++ b/libmm-glib/mm-common-helpers.c @@ -1281,6 +1281,77 @@ mm_common_build_oma_pending_network_initiated_sessions_default (void) } /******************************************************************************/ +/* MMModemCellbroadcastChannel array management */ + +GArray * +mm_common_cell_broadcast_channels_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) { + MMCellBroadcastChannels channels; + + array = g_array_sized_new (FALSE, FALSE, sizeof (MMCellBroadcastChannels), n); + while (g_variant_iter_loop (&iter, "(uu)", &channels.start, &channels.end)) + g_array_append_val (array, channels); + } + } + + /* If nothing set, fallback to empty */ + if (!array) + array = g_array_new (FALSE, FALSE, sizeof (MMCellBroadcastChannels)); + + return array; +} + +GVariant * +mm_common_cell_broadcast_channels_array_to_variant (const MMCellBroadcastChannels *channels, + guint n_sessions) +{ + if (n_sessions > 0) { + GVariantBuilder builder; + guint i; + + g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(uu)")); + + for (i = 0; i < n_sessions; i++) + g_variant_builder_add_value (&builder, + g_variant_new ("(uu)", + ((guint32)channels[i].start), + ((guint32)channels[i].end))); + return g_variant_builder_end (&builder); + } + + return mm_common_build_cell_broadcast_channels_default (); +} + +GVariant * +mm_common_cell_broadcast_channels_garray_to_variant (GArray *array) +{ + if (array) + return mm_common_cell_broadcast_channels_array_to_variant ((const MMCellBroadcastChannels *)array->data, + array->len); + + return mm_common_cell_broadcast_channels_array_to_variant (NULL, 0); +} + +GVariant * +mm_common_build_cell_broadcast_channels_default (void) +{ + GVariantBuilder builder; + + g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(uu)")); + return g_variant_builder_end (&builder); +} + +/******************************************************************************/ /* Common parsers */ /* Expecting input as: diff --git a/libmm-glib/mm-common-helpers.h b/libmm-glib/mm-common-helpers.h index 6ff89e21..bea220e0 100644 --- a/libmm-glib/mm-common-helpers.h +++ b/libmm-glib/mm-common-helpers.h @@ -164,6 +164,13 @@ GVariant *mm_common_oma_pending_network_initiated_sessions_array_to_variant (co GVariant *mm_common_oma_pending_network_initiated_sessions_garray_to_variant (GArray *array); GVariant *mm_common_build_oma_pending_network_initiated_sessions_default (void); +/* MMModemCellbroadcastChannel array management */ +GArray *mm_common_cell_broadcast_channels_variant_to_garray (GVariant *variant); +GVariant *mm_common_cell_broadcast_channels_array_to_variant (const MMCellBroadcastChannels *channels, + guint n_sessions); +GVariant *mm_common_cell_broadcast_channels_garray_to_variant (GArray *array); +GVariant *mm_common_build_cell_broadcast_channels_default (void); + /******************************************************************************/ const gchar *mm_common_str_boolean (gboolean value); diff --git a/libmm-glib/mm-helper-types.h b/libmm-glib/mm-helper-types.h index 0d9de269..cc0d3a28 100644 --- a/libmm-glib/mm-helper-types.h +++ b/libmm-glib/mm-helper-types.h @@ -80,4 +80,20 @@ struct _MMOmaPendingNetworkInitiatedSession { guint session_id; }; +/** + * MMCellBroadcastChannels: + * @start: The first channel + * @end: The last channel + * + * #MMCellBroadcastChannels is a simple struct specifying the start and end + * of a channel interval. + * + * Since: 1.24 + */ +typedef struct _MMCellBroadcastChannels MMCellBroadcastChannels; +struct _MMCellBroadcastChannels { + guint start; + guint end; +}; + #endif /* _MM_HELPER_TYPES_H_ */ |