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.
This commit is contained in:
16
configure.ac
16
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}
|
||||
"
|
||||
|
@@ -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,15 +1429,19 @@ 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
|
||||
return;
|
||||
}
|
||||
#endif /* WITH_NEWEST_QMI_COMMANDS */
|
||||
|
||||
qmi_client_nas_get_signal_strength (QMI_CLIENT_NAS (ctx->client),
|
||||
NULL,
|
||||
10,
|
||||
@@ -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,15 +3762,19 @@ 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
|
||||
return;
|
||||
}
|
||||
#endif /* WITH_NEWEST_QMI_COMMANDS */
|
||||
|
||||
qmi_client_nas_get_serving_system (ctx->client,
|
||||
NULL,
|
||||
10,
|
||||
@@ -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
|
||||
|
Reference in New Issue
Block a user