broadband-modem-qmi: use System Selection Preference when available

Get/Set Technology Preference was introduced in NAS 1.0, so should be always
available (even if we thought it was introduced in NAS 1.7, that's not true).
But the newer System Selection Preference behaves better as it allows more
features like 'preferred' modes; so use it when available (NAS >= 1.1).
This commit is contained in:
Aleksander Morgado
2012-08-31 16:52:59 +02:00
parent 61d41978c1
commit 04ce8b567c
3 changed files with 10 additions and 64 deletions

View File

@@ -56,11 +56,6 @@ struct _MMBroadbandModemQmiPrivate {
gchar *meid;
gchar *esn;
/* Allowed mode related */
#if defined WITH_NEWEST_QMI_COMMANDS
gboolean has_mode_preference_in_system_selection_preference;
#endif /* WITH_NEWEST_QMI_COMMANDS */
/* 3GPP and CDMA share unsolicited events setup/enable/disable/cleanup */
gboolean unsolicited_events_enabled;
gboolean unsolicited_events_setup;
@@ -1589,9 +1584,7 @@ typedef struct {
MMBroadbandModemQmi *self;
QmiClientNas *client;
GSimpleAsyncResult *result;
#if defined WITH_NEWEST_QMI_COMMANDS
gboolean run_get_system_selection_preference;
#endif /* WITH_NEWEST_QMI_COMMANDS */
gboolean run_get_technology_preference;
} LoadAllowedModesContext;
@@ -1686,8 +1679,6 @@ get_technology_preference_ready (QmiClientNas *client,
load_allowed_modes_context_complete_and_free (ctx);
}
#if defined WITH_NEWEST_QMI_COMMANDS
static void
allowed_modes_get_system_selection_preference_ready (QmiClientNas *client,
GAsyncResult *res,
@@ -1709,9 +1700,6 @@ allowed_modes_get_system_selection_preference_ready (QmiClientNas *client,
output,
&mode_preference_mask,
NULL)) {
/* Assuming here that Get System Selection Preference reports *always* all
* optional fields that the current message version supports */
ctx->self->priv->has_mode_preference_in_system_selection_preference = FALSE;
mm_dbg ("Mode preference not reported in system selection preference");
} else {
MMModemMode allowed;
@@ -1731,8 +1719,8 @@ allowed_modes_get_system_selection_preference_ready (QmiClientNas *client,
result->allowed = allowed;
result->preferred = MM_MODEM_MODE_NONE;
if (mode_preference_mask & QMI_NAS_RAT_MODE_PREFERENCE_GSM &&
mode_preference_mask & QMI_NAS_RAT_MODE_PREFERENCE_UMTS &&
if ((mode_preference_mask & QMI_NAS_RAT_MODE_PREFERENCE_GSM) &&
(mode_preference_mask & QMI_NAS_RAT_MODE_PREFERENCE_UMTS) &&
qmi_message_nas_get_system_selection_preference_output_get_gsm_wcdma_acquisition_order_preference (
output,
&gsm_or_wcdma,
@@ -1759,12 +1747,9 @@ allowed_modes_get_system_selection_preference_ready (QmiClientNas *client,
load_allowed_modes_context_complete_and_free (ctx);
}
#endif /* WITH_NEWEST_QMI_COMMANDS */
static void
load_allowed_modes_context_step (LoadAllowedModesContext *ctx)
{
#if defined WITH_NEWEST_QMI_COMMANDS
if (ctx->run_get_system_selection_preference) {
qmi_client_nas_get_system_selection_preference (
ctx->client,
@@ -1775,7 +1760,6 @@ load_allowed_modes_context_step (LoadAllowedModesContext *ctx)
ctx);
return;
}
#endif /* WITH_NEWEST_QMI_COMMANDS */
if (ctx->run_get_technology_preference) {
qmi_client_nas_get_technology_preference (
@@ -1817,17 +1801,11 @@ load_allowed_modes (MMIfaceModem *self,
user_data,
load_allowed_modes);
#if defined WITH_NEWEST_QMI_COMMANDS
/* System selection preference introduced in NAS 1.1
* TODO: Not sure when the System Selection Preference got the
* 'Mode Preference' TLV, so we'll need to handle the fallback. */
ctx->run_get_system_selection_preference =
(qmi_client_check_version (client, 1, 1) &&
ctx->self->priv->has_mode_preference_in_system_selection_preference);
#endif /* WITH_NEWEST_QMI_COMMANDS */
/* System selection preference introduced in NAS 1.1 */
ctx->run_get_system_selection_preference = qmi_client_check_version (client, 1, 1);
/* Technology preference introduced in NAS 1.7 */
ctx->run_get_technology_preference = qmi_client_check_version (client, 1, 7);
/* Technology preference introduced in NAS 1.0, so always available */
ctx->run_get_technology_preference = TRUE;
load_allowed_modes_context_step (ctx);
}
@@ -1841,9 +1819,7 @@ typedef struct {
GSimpleAsyncResult *result;
MMModemMode allowed;
MMModemMode preferred;
#if defined WITH_NEWEST_QMI_COMMANDS
gboolean run_set_system_selection_preference;
#endif /* WITH_NEWEST_QMI_COMMANDS */
gboolean run_set_technology_preference;
} SetAllowedModesContext;
@@ -1894,8 +1870,6 @@ set_technology_preference_ready (QmiClientNas *client,
set_allowed_modes_context_step (ctx);
}
#if defined WITH_NEWEST_QMI_COMMANDS
static void
allowed_modes_set_system_selection_preference_ready (QmiClientNas *client,
GAsyncResult *res,
@@ -1909,10 +1883,6 @@ allowed_modes_set_system_selection_preference_ready (QmiClientNas *client,
mm_dbg ("QMI operation failed: %s", error->message);
g_error_free (error);
} else if (!qmi_message_nas_set_system_selection_preference_output_get_result (output, &error)) {
if (g_error_matches (error,
QMI_PROTOCOL_ERROR,
QMI_PROTOCOL_ERROR_DEVICE_UNSUPPORTED))
ctx->self->priv->has_mode_preference_in_system_selection_preference = FALSE;
mm_dbg ("Couldn't set system selection preference: %s", error->message);
g_error_free (error);
qmi_message_nas_set_system_selection_preference_output_unref (output);
@@ -1929,12 +1899,9 @@ allowed_modes_set_system_selection_preference_ready (QmiClientNas *client,
set_allowed_modes_context_step (ctx);
}
#endif /* WITH_NEWEST_QMI_COMMANDS */
static void
set_allowed_modes_context_step (SetAllowedModesContext *ctx)
{
#if defined WITH_NEWEST_QMI_COMMANDS
if (ctx->run_set_system_selection_preference) {
QmiMessageNasSetSystemSelectionPreferenceInput *input;
QmiNasRatModePreference pref;
@@ -1978,7 +1945,6 @@ set_allowed_modes_context_step (SetAllowedModesContext *ctx)
qmi_message_nas_set_system_selection_preference_input_unref (input);
return;
}
#endif /* WITH_NEWEST_QMI_COMMANDS */
if (ctx->run_set_technology_preference) {
QmiMessageNasSetTechnologyPreferenceInput *input;
@@ -2056,17 +2022,11 @@ set_allowed_modes (MMIfaceModem *self,
ctx->allowed = allowed;
ctx->preferred = preferred;
#if defined WITH_NEWEST_QMI_COMMANDS
/* System selection preference introduced in NAS 1.1
* TODO: Not sure when the System Selection Preference got the
* 'Mode Preference' TLV, so we'll need to handle the fallback. */
ctx->run_set_system_selection_preference =
(qmi_client_check_version (client, 1, 1) &&
ctx->self->priv->has_mode_preference_in_system_selection_preference);
#endif /* WITH_NEWEST_QMI_COMMANDS */
/* System selection preference introduced in NAS 1.1 */
ctx->run_set_system_selection_preference = qmi_client_check_version (client, 1, 1);
/* Technology preference introduced in NAS 1.7 */
ctx->run_set_technology_preference = qmi_client_check_version (client, 1, 7);
/* Technology preference introduced in NAS 1.0, so always available */
ctx->run_set_technology_preference = TRUE;
set_allowed_modes_context_step (ctx);
}
@@ -4740,12 +4700,6 @@ mm_broadband_modem_qmi_init (MMBroadbandModemQmi *self)
self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self),
MM_TYPE_BROADBAND_MODEM_QMI,
MMBroadbandModemQmiPrivate);
#if defined WITH_NEWEST_QMI_COMMANDS
/* Some initial defaults for when we need to gather info about
* supported commands/TLVs */
self->priv->has_mode_preference_in_system_selection_preference = TRUE;
#endif /* WITH_NEWEST_QMI_COMMANDS */
}
static void

View File

@@ -572,8 +572,6 @@ mm_modem_mode_to_qmi_radio_technology_preference (MMModemMode mode,
/*****************************************************************************/
#if defined WITH_NEWEST_QMI_COMMANDS
MMModemMode
mm_modem_mode_from_qmi_rat_mode_preference (QmiNasRatModePreference qmi)
{
@@ -674,8 +672,6 @@ mm_modem_mode_to_qmi_gsm_wcdma_acquisition_order_preference (MMModemMode mode)
return MM_MODEM_MODE_NONE;
}
#endif /* WITH_NEWEST_QMI_COMMANDS */
/*****************************************************************************/
MMModem3gppRegistrationState

View File

@@ -47,8 +47,6 @@ MMModemMode mm_modem_mode_from_qmi_radio_technology_preference (QmiNasRadioTechn
QmiNasRadioTechnologyPreference mm_modem_mode_to_qmi_radio_technology_preference (MMModemMode mode,
gboolean is_cdma);
#if defined WITH_NEWEST_QMI_COMMANDS
MMModemMode mm_modem_mode_from_qmi_rat_mode_preference (QmiNasRatModePreference qmi);
QmiNasRatModePreference mm_modem_mode_to_qmi_rat_mode_preference (MMModemMode mode,
gboolean is_cdma,
@@ -57,8 +55,6 @@ QmiNasRatModePreference mm_modem_mode_to_qmi_rat_mode_preference (MMModemMode mo
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);
#endif /* WITH_NEWEST_QMI_COMMANDS */
GArray *mm_modem_bands_from_qmi_rf_band_information_array (GArray *info_array);
MMModem3gppRegistrationState mm_modem_3gpp_registration_state_from_qmi_registration_state (QmiNasAttachState attach_state,