summaryrefslogtreecommitdiff
path: root/src/mm-modem-helpers-qmi.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-10-15 11:45:50 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-10-15 12:41:33 +0200
commitd64b016231aa5ea147b0fee813ea0d2507fdb1f3 (patch)
tree3ff83b586e40675422755e1949b228de6b90bc45 /src/mm-modem-helpers-qmi.c
parentc2d4dc3951d8d7483753c6d2733323483ab6c706 (diff)
downloadModemManager-d64b016231aa5ea147b0fee813ea0d2507fdb1f3.tar.gz
modem-helpers-qmi: new helper to load NAS band preferences from bands array
Diffstat (limited to 'src/mm-modem-helpers-qmi.c')
-rw-r--r--src/mm-modem-helpers-qmi.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/mm-modem-helpers-qmi.c b/src/mm-modem-helpers-qmi.c
index 0d2681bb8..2b16b2c8d 100644
--- a/src/mm-modem-helpers-qmi.c
+++ b/src/mm-modem-helpers-qmi.c
@@ -447,6 +447,59 @@ mm_modem_bands_from_qmi_band_preference (QmiNasBandPreference qmi_bands,
return mm_bands;
}
+void
+mm_modem_bands_to_qmi_band_preference (GArray *mm_bands,
+ QmiNasBandPreference *qmi_bands,
+ QmiNasLteBandPreference *qmi_lte_bands)
+{
+ guint i;
+
+ *qmi_bands = 0;
+ *qmi_lte_bands = 0;
+
+ /* Handle ANY separately */
+ if (mm_bands->len == 1 &&
+ g_array_index (mm_bands, MMModemBand, 0) == MM_MODEM_BAND_ANY)
+ return;
+
+ for (i = 0; i < mm_bands->len; i++) {
+ MMModemBand band;
+
+ band = g_array_index (mm_bands, MMModemBand, i);
+
+ if (band <= MM_MODEM_BAND_EUTRAN_XLIII &&
+ band >= MM_MODEM_BAND_EUTRAN_I) {
+ /* Add LTE band preference */
+ guint j;
+
+ for (j = 0; j < G_N_ELEMENTS (nas_lte_bands_map); j++) {
+ if (nas_lte_bands_map[j].mm_band == band) {
+ *qmi_lte_bands |= nas_lte_bands_map[j].qmi_band;
+ break;
+ }
+ }
+
+ if (j == G_N_ELEMENTS (nas_lte_bands_map))
+ mm_dbg ("Cannot add the following LTE band: '%s'",
+ mm_modem_band_get_string (band));
+ } else {
+ /* Add non-LTE band preference */
+ guint j;
+
+ for (j = 0; j < G_N_ELEMENTS (nas_bands_map); j++) {
+ if (nas_bands_map[j].mm_band == band) {
+ *qmi_bands |= nas_bands_map[j].qmi_band;
+ break;
+ }
+ }
+
+ if (j == G_N_ELEMENTS (nas_bands_map))
+ mm_dbg ("Cannot add the following band: '%s'",
+ mm_modem_band_get_string (band));
+ }
+ }
+}
+
/*****************************************************************************/
typedef struct {