diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 26 | ||||
-rw-r--r-- | src/mm-modem-helpers-qmi.c | 58 | ||||
-rw-r--r-- | src/mm-modem-helpers-qmi.h | 2 |
3 files changed, 86 insertions, 0 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index 11f697a1..929722e5 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -316,7 +316,33 @@ load_current_capabilities_get_system_selection_preference_ready (QmiClientNas *c output, &mode_preference_mask, NULL)) { + QmiNasBandPreference band_preference_mask; + mm_dbg ("Mode preference not reported in system selection preference"); + + if (qmi_message_nas_get_system_selection_preference_output_get_band_preference ( + output, + &band_preference_mask, + NULL)) { + gchar *str; + + str = qmi_nas_band_preference_build_string_from_mask (band_preference_mask); + ctx->capabilities = mm_modem_capability_from_qmi_band_preference (band_preference_mask); + mm_dbg ("%s bands reported in system selection preference: '%s'", + ctx->capabilities == MM_MODEM_CAPABILITY_NONE ? "Unsupported" : "Valid", + str); + g_free (str); + + /* Just the presence of the LTE band preference tells us it's LTE */ + if (qmi_message_nas_get_system_selection_preference_output_get_lte_band_preference ( + output, + NULL, + NULL)) { + mm_dbg ("LTE band preference found"); + ctx->capabilities |= MM_MODEM_CAPABILITY_LTE; + } + } else + mm_dbg ("Band preference not reported in system selection preference"); } else { gchar *str; diff --git a/src/mm-modem-helpers-qmi.c b/src/mm-modem-helpers-qmi.c index 9a986cac..af1a390c 100644 --- a/src/mm-modem-helpers-qmi.c +++ b/src/mm-modem-helpers-qmi.c @@ -687,6 +687,64 @@ mm_modem_capability_from_qmi_radio_technology_preference (QmiNasRadioTechnologyP /*****************************************************************************/ +#define ALL_3GPP2_BANDS \ + (QMI_NAS_BAND_PREFERENCE_BC_0_A_SYSTEM | \ + QMI_NAS_BAND_PREFERENCE_BC_0_B_SYSTEM | \ + QMI_NAS_BAND_PREFERENCE_BC_1_ALL_BLOCKS | \ + QMI_NAS_BAND_PREFERENCE_BC_2 | \ + QMI_NAS_BAND_PREFERENCE_BC_3_A_SYSTEM | \ + QMI_NAS_BAND_PREFERENCE_BC_4_ALL_BLOCKS | \ + QMI_NAS_BAND_PREFERENCE_BC_5_ALL_BLOCKS | \ + QMI_NAS_BAND_PREFERENCE_BC_6 | \ + QMI_NAS_BAND_PREFERENCE_BC_7 | \ + QMI_NAS_BAND_PREFERENCE_BC_8 | \ + QMI_NAS_BAND_PREFERENCE_BC_9 | \ + QMI_NAS_BAND_PREFERENCE_BC_10 | \ + QMI_NAS_BAND_PREFERENCE_BC_11 | \ + QMI_NAS_BAND_PREFERENCE_BC_12 | \ + QMI_NAS_BAND_PREFERENCE_BC_14 | \ + QMI_NAS_BAND_PREFERENCE_BC_15 | \ + QMI_NAS_BAND_PREFERENCE_BC_16 | \ + QMI_NAS_BAND_PREFERENCE_BC_17 | \ + QMI_NAS_BAND_PREFERENCE_BC_18 | \ + QMI_NAS_BAND_PREFERENCE_BC_19) + +#define ALL_3GPP_BANDS \ + (QMI_NAS_BAND_PREFERENCE_GSM_DCS_1800 | \ + QMI_NAS_BAND_PREFERENCE_GSM_900_EXTENDED | \ + QMI_NAS_BAND_PREFERENCE_GSM_900_PRIMARY | \ + QMI_NAS_BAND_PREFERENCE_GSM_450 | \ + QMI_NAS_BAND_PREFERENCE_GSM_480 | \ + QMI_NAS_BAND_PREFERENCE_GSM_750 | \ + QMI_NAS_BAND_PREFERENCE_GSM_850 | \ + QMI_NAS_BAND_PREFERENCE_GSM_900_RAILWAYS | \ + QMI_NAS_BAND_PREFERENCE_GSM_PCS_1900 | \ + QMI_NAS_BAND_PREFERENCE_WCDMA_2100 | \ + QMI_NAS_BAND_PREFERENCE_WCDMA_PCS_1900 | \ + QMI_NAS_BAND_PREFERENCE_WCDMA_DCS_1800 | \ + QMI_NAS_BAND_PREFERENCE_WCDMA_1700_US | \ + QMI_NAS_BAND_PREFERENCE_WCDMA_850_US | \ + QMI_NAS_BAND_PREFERENCE_WCDMA_800 | \ + QMI_NAS_BAND_PREFERENCE_WCDMA_2600 | \ + QMI_NAS_BAND_PREFERENCE_WCDMA_900 | \ + QMI_NAS_BAND_PREFERENCE_WCDMA_1700_JAPAN) + +MMModemCapability +mm_modem_capability_from_qmi_band_preference (QmiNasBandPreference qmi) +{ + MMModemCapability caps = MM_MODEM_CAPABILITY_NONE; + + if (qmi & ALL_3GPP_BANDS) + caps |= MM_MODEM_CAPABILITY_GSM_UMTS; + + if (qmi & ALL_3GPP2_BANDS) + caps |= MM_MODEM_CAPABILITY_CDMA_EVDO; + + return caps; +} + +/*****************************************************************************/ + MMModemMode mm_modem_mode_from_qmi_gsm_wcdma_acquisition_order_preference (QmiNasGsmWcdmaAcquisitionOrderPreference qmi) { diff --git a/src/mm-modem-helpers-qmi.h b/src/mm-modem-helpers-qmi.h index 8bdf6e67..9c3b1966 100644 --- a/src/mm-modem-helpers-qmi.h +++ b/src/mm-modem-helpers-qmi.h @@ -56,6 +56,8 @@ MMModemCapability mm_modem_capability_from_qmi_rat_mode_preference (QmiNasRatMod MMModemCapability mm_modem_capability_from_qmi_radio_technology_preference (QmiNasRadioTechnologyPreference qmi); +MMModemCapability mm_modem_capability_from_qmi_band_preference (QmiNasBandPreference qmi); + MMModemMode mm_modem_mode_from_qmi_gsm_wcdma_acquisition_order_preference (QmiNasGsmWcdmaAcquisitionOrderPreference qmi); QmiNasGsmWcdmaAcquisitionOrderPreference mm_modem_mode_to_qmi_gsm_wcdma_acquisition_order_preference (MMModemMode mode); |