aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-08-09 16:58:34 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-08-23 19:10:58 +0200
commitb0e676cb8ae60e6633fa595d67ac150f19d13598 (patch)
treeb70b52b1f65f7346416624719754e3897eba2d49
parent174396cb3e9e03c486ed4104f8cbe8149ea6cfec (diff)
broadband-modem-qmi: use only deprecated commands
The QMI protocol is updated frequently with new commands replacing and improving some already existing ones, which get marked as deprecated. Instead of initially try to cover the logic with both the old and the new commands, we'll default to use only the old deprecated ones, which should be supported also in the modems with newer services. The supported already implemented for the new QMI commands is hidden behind a `--with-newest-qmi-commands' configure switch. Once the implementation is fully developed and tested using the deprecated commands we can then focus in including the support for the new ones.
-rw-r--r--configure.ac16
-rw-r--r--src/mm-broadband-modem-qmi.c114
2 files changed, 110 insertions, 20 deletions
diff --git a/configure.ac b/configure.ac
index 84c7f06b..f35f37e0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -170,6 +170,21 @@ case $with_tests in
;;
esac
+dnl
+dnl Newest QMI commands
+dnl
+AC_ARG_WITH(newest_qmi_commands, AS_HELP_STRING([--with-newest-qmi-commands], [Try to avoid deprecated QMI commands]))
+AM_CONDITIONAL(WITH_NEWEST_QMI_COMMANDS, test "x$with_newest_qmi_commands" = "xyes")
+case $with_newest_qmi_commands in
+ yes)
+ AC_DEFINE(WITH_NEWEST_QMI_COMMANDS, 1, [Define if we enable new QMI commands support])
+ with_newest_qmi_commands=yes
+ ;;
+ *)
+ with_newest_qmi_commands=no
+ ;;
+esac
+
NM_COMPILER_WARNINGS
@@ -233,4 +248,5 @@ echo "
PPP-enabled tests: ${have_pppd_headers}
PolicyKit support: ${with_polkit}
Documentation: ${with_docs}
+ Newest QMI commands: ${with_newest_qmi_commands}
"
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index 21fdf4a9..206f5574 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -49,13 +49,17 @@ struct _MMBroadbandModemQmiPrivate {
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;
guint event_report_indication_id;
+#if defined WITH_NEWEST_QMI_COMMANDS
guint signal_info_indication_id;
+#endif /* WITH_NEWEST_QMI_COMMANDS */
/* 3GPP/CDMA registration helpers */
gchar *current_operator_id;
@@ -63,7 +67,9 @@ struct _MMBroadbandModemQmiPrivate {
gboolean unsolicited_registration_events_enabled;
gboolean unsolicited_registration_events_setup;
guint serving_system_indication_id;
+#if defined WITH_NEWEST_QMI_COMMANDS
guint system_info_indication_id;
+#endif /* WITH_NEWEST_QMI_COMMANDS */
};
/*****************************************************************************/
@@ -1243,6 +1249,8 @@ load_signal_quality_finish (MMIfaceModem *self,
G_SIMPLE_ASYNC_RESULT (res)));
}
+#if defined WITH_NEWEST_QMI_COMMANDS
+
static gint8
signal_info_get_quality (MMBroadbandModemQmi *self,
QmiMessageNasGetSignalInfoOutput *output)
@@ -1320,6 +1328,8 @@ get_signal_info_ready (QmiClientNas *client,
load_signal_quality_context_complete_and_free (ctx);
}
+#endif /* WITH_NEWEST_QMI_COMMANDS */
+
static gint8
signal_strength_get_quality (MMBroadbandModemQmi *self,
QmiMessageNasGetSignalStrengthOutput *output)
@@ -1419,21 +1429,25 @@ load_signal_quality (MMIfaceModem *self,
mm_dbg ("loading signal quality...");
+#if defined WITH_NEWEST_QMI_COMMANDS
/* Signal info introduced in NAS 1.8 */
- if (qmi_client_check_version (ctx->client, 1, 8))
+ if (qmi_client_check_version (ctx->client, 1, 8)) {
qmi_client_nas_get_signal_info (QMI_CLIENT_NAS (ctx->client),
NULL,
10,
NULL,
(GAsyncReadyCallback)get_signal_info_ready,
ctx);
- else
- qmi_client_nas_get_signal_strength (QMI_CLIENT_NAS (ctx->client),
- NULL,
- 10,
- NULL,
- (GAsyncReadyCallback)get_signal_strength_ready,
- ctx);
+ return;
+ }
+#endif /* WITH_NEWEST_QMI_COMMANDS */
+
+ qmi_client_nas_get_signal_strength (QMI_CLIENT_NAS (ctx->client),
+ NULL,
+ 10,
+ NULL,
+ (GAsyncReadyCallback)get_signal_strength_ready,
+ ctx);
}
/*****************************************************************************/
@@ -1654,7 +1668,9 @@ 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;
@@ -1776,6 +1792,8 @@ get_technology_preference_ready (QmiClientNas *client,
load_allowed_modes_context_complete_and_free (ctx);
}
+#if defined WITH_NEWEST_QMI_COMMANDS
+
static MMModemMode
modem_mode_from_qmi_rat_mode_preference (QmiNasRatModePreference qmi)
{
@@ -1891,9 +1909,12 @@ 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,
@@ -1904,6 +1925,7 @@ 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 (
@@ -1945,12 +1967,15 @@ 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 */
+
/* Technology preference introduced in NAS 1.7 */
ctx->run_get_technology_preference = qmi_client_check_version (client, 1, 7);
@@ -1966,7 +1991,9 @@ 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;
@@ -2017,6 +2044,8 @@ 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,
@@ -2050,6 +2079,8 @@ allowed_modes_set_system_selection_preference_ready (QmiClientNas *client,
set_allowed_modes_context_step (ctx);
}
+#endif /* WITH_NEWEST_QMI_COMMANDS */
+
static QmiNasRatModePreference
modem_mode_to_qmi_radio_technology_preference (MMModemMode mode,
gboolean is_cdma)
@@ -2076,6 +2107,8 @@ modem_mode_to_qmi_radio_technology_preference (MMModemMode mode,
return pref;
}
+#if defined WITH_NEWEST_QMI_COMMANDS
+
static QmiNasRatModePreference
modem_mode_to_qmi_rat_mode_preference (MMModemMode mode,
gboolean is_cdma,
@@ -2129,9 +2162,12 @@ modem_mode_to_qmi_gsm_wcdma_acquisition_order_preference (MMModemMode mode)
return MM_MODEM_MODE_NONE;
}
+#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;
@@ -2175,6 +2211,7 @@ 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;
@@ -2251,12 +2288,16 @@ set_allowed_modes (MMIfaceModem *self,
set_allowed_modes);
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 */
+
/* Technology preference introduced in NAS 1.7 */
ctx->run_set_technology_preference = qmi_client_check_version (client, 1, 7);
@@ -3178,6 +3219,8 @@ get_serving_system_3gpp_ready (QmiClientNas *client,
run_3gpp_registration_checks_context_complete_and_free (ctx);
}
+#if defined WITH_NEWEST_QMI_COMMANDS
+
static gboolean
process_common_info (QmiNasServiceStatus service_status,
gboolean domain_valid,
@@ -3694,6 +3737,8 @@ get_system_info_ready (QmiClientNas *client,
run_3gpp_registration_checks_context_complete_and_free (ctx);
}
+#endif /* WITH_NEWEST_QMI_COMMANDS */
+
static void
modem_3gpp_run_registration_checks (MMIfaceModem3gpp *self,
gboolean cs_supported,
@@ -3717,21 +3762,25 @@ modem_3gpp_run_registration_checks (MMIfaceModem3gpp *self,
user_data,
modem_3gpp_run_registration_checks);
+#if defined WITH_NEWEST_QMI_COMMANDS
/* System Info was added in NAS 1.8 */
- if (qmi_client_check_version (client, 1, 8))
+ if (qmi_client_check_version (client, 1, 8)) {
qmi_client_nas_get_system_info (ctx->client,
NULL,
10,
NULL,
(GAsyncReadyCallback)get_system_info_ready,
ctx);
- else
- qmi_client_nas_get_serving_system (ctx->client,
- NULL,
- 10,
- NULL,
- (GAsyncReadyCallback)get_serving_system_3gpp_ready,
- ctx);
+ return;
+ }
+#endif /* WITH_NEWEST_QMI_COMMANDS */
+
+ qmi_client_nas_get_serving_system (ctx->client,
+ NULL,
+ 10,
+ NULL,
+ (GAsyncReadyCallback)get_serving_system_3gpp_ready,
+ ctx);
}
/*****************************************************************************/
@@ -3825,6 +3874,7 @@ common_enable_disable_unsolicited_registration_events_serving_system (Unsolicite
qmi_message_nas_register_indications_input_unref (input);
}
+#if defined WITH_NEWEST_QMI_COMMANDS
static void
common_enable_disable_unsolicited_registration_events_system_info (UnsolicitedRegistrationEventsContext *ctx)
{
@@ -3841,6 +3891,7 @@ common_enable_disable_unsolicited_registration_events_system_info (UnsolicitedRe
ctx);
qmi_message_nas_register_indications_input_unref (input);
}
+#endif /* WITH_NEWEST_QMI_COMMANDS */
static void
modem_3gpp_disable_unsolicited_registration_events (MMIfaceModem3gpp *self,
@@ -3863,11 +3914,13 @@ modem_3gpp_disable_unsolicited_registration_events (MMIfaceModem3gpp *self,
callback,
user_data);
+#if defined WITH_NEWEST_QMI_COMMANDS
/* System Info was added in NAS 1.8 */
if (qmi_client_check_version (client, 1, 8)) {
common_enable_disable_unsolicited_registration_events_system_info (ctx);
return;
}
+#endif /* WITH_NEWEST_QMI_COMMANDS */
/* Ability to explicitly enable/disable serving system indications was
* added in NAS 1.2 */
@@ -4156,6 +4209,7 @@ common_setup_cleanup_unsolicited_registration_events_finish (MMBroadbandModemQmi
return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
}
+#if defined WITH_NEWEST_QMI_COMMANDS
static void
system_info_indication_cb (QmiClientNas *client,
QmiIndicationNasSystemInfoOutput *output,
@@ -4164,6 +4218,7 @@ system_info_indication_cb (QmiClientNas *client,
if (mm_iface_modem_is_3gpp (MM_IFACE_MODEM (self)))
common_process_system_info_3gpp (self, NULL, output);
}
+#endif
static void
serving_system_indication_cb (QmiClientNas *client,
@@ -4207,6 +4262,7 @@ common_setup_cleanup_unsolicited_registration_events (MMBroadbandModemQmi *self,
/* Store new state */
self->priv->unsolicited_registration_events_setup = enable;
+#if defined WITH_NEWEST_QMI_COMMANDS
/* Signal info introduced in NAS 1.8 */
if (qmi_client_check_version (client, 1, 8)) {
/* Connect/Disconnect "System Info" indications */
@@ -4222,7 +4278,9 @@ common_setup_cleanup_unsolicited_registration_events (MMBroadbandModemQmi *self,
g_signal_handler_disconnect (client, self->priv->system_info_indication_id);
self->priv->system_info_indication_id = 0;
}
- } else {
+ } else
+#endif /* WITH_NEWEST_QMI_COMMANDS */
+ {
/* Connect/Disconnect "Serving System" indications */
if (enable) {
g_assert (self->priv->serving_system_indication_id == 0);
@@ -4460,6 +4518,8 @@ common_enable_disable_unsolicited_events_signal_strength (EnableUnsolicitedEvent
qmi_message_nas_set_event_report_input_unref (input);
}
+#if defined WITH_NEWEST_QMI_COMMANDS
+
static void
ri_signal_info_ready (QmiClientNas *client,
GAsyncResult *res,
@@ -4563,6 +4623,8 @@ common_enable_disable_unsolicited_events_signal_info_config (EnableUnsolicitedEv
qmi_message_nas_config_signal_info_input_unref (input);
}
+#endif /* WITH_NEWEST_QMI_COMMANDS */
+
static void
common_enable_disable_unsolicited_events (MMBroadbandModemQmi *self,
gboolean enable,
@@ -4598,11 +4660,15 @@ common_enable_disable_unsolicited_events (MMBroadbandModemQmi *self,
ctx->enable = enable;
ctx->result = result;
+#if defined WITH_NEWEST_QMI_COMMANDS
/* Signal info introduced in NAS 1.8 */
- if (qmi_client_check_version (client, 1, 8))
+ if (qmi_client_check_version (client, 1, 8)) {
common_enable_disable_unsolicited_events_signal_info_config (ctx);
- else
- common_enable_disable_unsolicited_events_signal_strength (ctx);
+ return;
+ }
+#endif /* WITH_NEWEST_QMI_COMMANDS */
+
+common_enable_disable_unsolicited_events_signal_strength (ctx);
}
/*****************************************************************************/
@@ -4709,6 +4775,8 @@ event_report_indication_cb (QmiClientNas *client,
}
}
+#if defined WITH_NEWEST_QMI_COMMANDS
+
static void
signal_info_indication_cb (QmiClientNas *client,
QmiIndicationNasSignalInfoOutput *output,
@@ -4757,6 +4825,8 @@ signal_info_indication_cb (QmiClientNas *client,
mm_iface_modem_update_signal_quality (MM_IFACE_MODEM (self), quality);
}
+#endif /* WITH_NEWEST_QMI_COMMANDS */
+
static void
common_setup_cleanup_unsolicited_events (MMBroadbandModemQmi *self,
gboolean enable,
@@ -4802,6 +4872,7 @@ common_setup_cleanup_unsolicited_events (MMBroadbandModemQmi *self,
self->priv->event_report_indication_id = 0;
}
+#if defined WITH_NEWEST_QMI_COMMANDS
/* Connect/Disconnect "Signal Info" indications.
* Signal info introduced in NAS 1.8 */
if (qmi_client_check_version (client, 1, 8)) {
@@ -4818,6 +4889,7 @@ common_setup_cleanup_unsolicited_events (MMBroadbandModemQmi *self,
self->priv->signal_info_indication_id = 0;
}
}
+#endif /* WITH_NEWEST_QMI_COMMANDS */
g_simple_async_result_set_op_res_gboolean (result, TRUE);
g_simple_async_result_complete_in_idle (result);
@@ -5068,9 +5140,11 @@ mm_broadband_modem_qmi_init (MMBroadbandModemQmi *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