diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2013-03-13 11:16:13 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2013-04-11 09:17:13 +0200 |
commit | 162d96b11680bbdf819a3f8e1c058184abb7b792 (patch) | |
tree | bc983e82899cbe9ab3174fcb6b1bf8e1bceb4da9 /src/mm-modem-helpers-qmi.c | |
parent | be8c8a99bb29d340720715874696bc1fae11d331 (diff) |
test-modem-helpers-qmi: new unit tests to check the 'current-capabilities' logic
Based on Dan's tests with QMI modems.
Diffstat (limited to 'src/mm-modem-helpers-qmi.c')
-rw-r--r-- | src/mm-modem-helpers-qmi.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/mm-modem-helpers-qmi.c b/src/mm-modem-helpers-qmi.c index 7de04347..3331de6a 100644 --- a/src/mm-modem-helpers-qmi.c +++ b/src/mm-modem-helpers-qmi.c @@ -1145,3 +1145,74 @@ mm_bearer_allowed_auth_to_qmi_authentication (MMBearerAllowedAuth auth) return out; } + +/*****************************************************************************/ + +MMModemCapability +mm_modem_capability_from_qmi_capabilities_context (MMQmiCapabilitiesContext *ctx) +{ + MMModemCapability tmp = MM_MODEM_CAPABILITY_NONE; + gchar *nas_ssp_mode_preference_str; + gchar *nas_ssp_band_preference_str; + gchar *nas_ssp_lte_band_preference_str; + gchar *nas_tp_str; + gchar *dms_capabilities_str; + gchar *tmp_str; + + /* SSP logic to gather capabilities uses the Mode Preference TLV if available, + * and if not available it falls back to using Band Preference TLVs */ + if (ctx->nas_ssp_mode_preference_mask) + tmp = mm_modem_capability_from_qmi_rat_mode_preference (ctx->nas_ssp_mode_preference_mask); + else if (ctx->nas_ssp_band_preference_mask) { + tmp = mm_modem_capability_from_qmi_band_preference (ctx->nas_ssp_band_preference_mask); + /* Just the presence of the LTE band preference tells us it's LTE */ + if (ctx->nas_ssp_lte_band_preference_mask) + tmp |= MM_MODEM_CAPABILITY_LTE; + } + + /* If no value retrieved from SSP, check TP. We only process TP + * values if not 'auto'. */ + if ( tmp == MM_MODEM_CAPABILITY_NONE + && ctx->nas_tp_mask + && ctx->nas_tp_mask != QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AUTO) + tmp = mm_modem_capability_from_qmi_radio_technology_preference (ctx->nas_tp_mask); + + /* Final capabilities are the intersection between the Technology + * Preference or SSP and the device's capabilities. + * If the Technology Preference was "auto" or unknown we just fall back + * to the Get Capabilities response. + */ + if (tmp == MM_MODEM_CAPABILITY_NONE) + tmp = ctx->dms_capabilities; + else + tmp &= ctx->dms_capabilities; + + + /* Log about the logic applied */ + nas_ssp_mode_preference_str = qmi_nas_rat_mode_preference_build_string_from_mask (ctx->nas_ssp_mode_preference_mask); + nas_ssp_band_preference_str = qmi_nas_band_preference_build_string_from_mask (ctx->nas_ssp_band_preference_mask); + nas_ssp_lte_band_preference_str = qmi_nas_lte_band_preference_build_string_from_mask (ctx->nas_ssp_band_preference_mask); + nas_tp_str = qmi_nas_radio_technology_preference_build_string_from_mask (ctx->nas_tp_mask); + dms_capabilities_str = mm_modem_capability_build_string_from_mask (ctx->dms_capabilities); + tmp_str = mm_modem_capability_build_string_from_mask (tmp); + mm_dbg ("Current capabilities built: '%s'\n" + " SSP mode preference: '%s'\n" + " SSP band preference: '%s'\n" + " SSP LTE band preference: '%s'\n" + " TP: '%s'\n" + " DMS Capabilities: '%s'", + tmp_str, + nas_ssp_mode_preference_str ? nas_ssp_mode_preference_str : "unknown", + nas_ssp_band_preference_str ? nas_ssp_band_preference_str : "unknown", + nas_ssp_lte_band_preference_str ? nas_ssp_lte_band_preference_str : "unknown", + nas_tp_str ? nas_tp_str : "unknown", + dms_capabilities_str); + g_free (nas_ssp_mode_preference_str); + g_free (nas_ssp_band_preference_str); + g_free (nas_ssp_lte_band_preference_str); + g_free (nas_tp_str); + g_free (dms_capabilities_str); + g_free (tmp_str); + + return tmp; +} |