aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2020-06-11 14:41:44 +0200
committerAleksander Morgado <aleksander@aleksander.es>2020-06-23 12:29:05 +0000
commitc6d213d6523a70aa8504bda4dbd1796a0b1cd4c7 (patch)
treee185b2cb3a13ccb58aa3adaf5560abace06e8975 /src
parent62956b5c7a1bcfa143e6f5915562c55c4923eec4 (diff)
broadband-modem-qmi,bearer-qmi: avoid depending on the client version
The QMI client version is an information provided by the QMI protocol only when QMUX or MBIM backends are used, it won't be available when e.g. QRTR is used. The logic in ModemManager should not rely on this information.
Diffstat (limited to 'src')
-rw-r--r--src/mm-bearer-qmi.c39
-rw-r--r--src/mm-broadband-modem-qmi.c542
2 files changed, 230 insertions, 351 deletions
diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c
index 7a6c2941..1afb6c25 100644
--- a/src/mm-bearer-qmi.c
+++ b/src/mm-bearer-qmi.c
@@ -1372,8 +1372,7 @@ connect_context_step (GTask *task)
case CONNECT_STEP_IP_FAMILY_IPV4:
/* If client is new enough, select IP family */
- if (!ctx->no_ip_family_preference &&
- qmi_client_check_version (QMI_CLIENT (ctx->client_ipv4), 1, 9)) {
+ if (!ctx->no_ip_family_preference) {
QmiMessageWdsSetIpFamilyInput *input;
mm_obj_dbg (self, "setting default IP family to: IPv4");
@@ -1467,31 +1466,23 @@ connect_context_step (GTask *task)
ctx->step++;
} /* fall through */
- case CONNECT_STEP_IP_FAMILY_IPV6:
+ case CONNECT_STEP_IP_FAMILY_IPV6: {
+ QmiMessageWdsSetIpFamilyInput *input;
g_assert (ctx->no_ip_family_preference == FALSE);
- /* If client is new enough, select IP family */
- if (qmi_client_check_version (QMI_CLIENT (ctx->client_ipv6), 1, 9)) {
- QmiMessageWdsSetIpFamilyInput *input;
-
- mm_obj_dbg (self, "setting default IP family to: IPv6");
- input = qmi_message_wds_set_ip_family_input_new ();
- qmi_message_wds_set_ip_family_input_set_preference (input, QMI_WDS_IP_FAMILY_IPV6, NULL);
- qmi_client_wds_set_ip_family (ctx->client_ipv6,
- input,
- 10,
- g_task_get_cancellable (task),
- (GAsyncReadyCallback)set_ip_family_ready,
- task);
- qmi_message_wds_set_ip_family_input_unref (input);
- return;
- }
-
- ctx->default_ip_family_set = FALSE;
-
- ctx->step++;
- /* fall through */
+ mm_obj_dbg (self, "setting default IP family to: IPv6");
+ input = qmi_message_wds_set_ip_family_input_new ();
+ qmi_message_wds_set_ip_family_input_set_preference (input, QMI_WDS_IP_FAMILY_IPV6, NULL);
+ qmi_client_wds_set_ip_family (ctx->client_ipv6,
+ input,
+ 10,
+ g_task_get_cancellable (task),
+ (GAsyncReadyCallback)set_ip_family_ready,
+ task);
+ qmi_message_wds_set_ip_family_input_unref (input);
+ return;
+ }
case CONNECT_STEP_ENABLE_INDICATIONS_IPV6:
common_setup_cleanup_packet_service_status_unsolicited_events (ctx->self,
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index 357a3fae..6125cd4f 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -1715,24 +1715,20 @@ load_signal_quality (MMIfaceModem *self,
mm_obj_dbg (self, "loading signal quality...");
#if defined WITH_NEWEST_QMI_COMMANDS
- /* Signal info introduced in NAS 1.8 */
- if (qmi_client_check_version (client, 1, 8)) {
- qmi_client_nas_get_signal_info (QMI_CLIENT_NAS (client),
- NULL,
- 10,
- NULL,
- (GAsyncReadyCallback)get_signal_info_ready,
- task);
- return;
- }
-#endif /* WITH_NEWEST_QMI_COMMANDS */
-
+ qmi_client_nas_get_signal_info (QMI_CLIENT_NAS (client),
+ NULL,
+ 10,
+ NULL,
+ (GAsyncReadyCallback)get_signal_info_ready,
+ task);
+#else
qmi_client_nas_get_signal_strength (QMI_CLIENT_NAS (client),
NULL,
10,
NULL,
(GAsyncReadyCallback)get_signal_strength_ready,
task);
+#endif /* WITH_NEWEST_QMI_COMMANDS */
}
/*****************************************************************************/
@@ -3373,24 +3369,20 @@ modem_3gpp_run_registration_checks (MMIfaceModem3gpp *self,
task = g_task_new (self, NULL, 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)) {
- qmi_client_nas_get_system_info (QMI_CLIENT_NAS (client),
- NULL,
- 10,
- NULL,
- (GAsyncReadyCallback)get_system_info_ready,
- task);
- return;
- }
-#endif /* WITH_NEWEST_QMI_COMMANDS */
-
+ qmi_client_nas_get_system_info (QMI_CLIENT_NAS (client),
+ NULL,
+ 10,
+ NULL,
+ (GAsyncReadyCallback)get_system_info_ready,
+ task);
+#else
qmi_client_nas_get_serving_system (QMI_CLIENT_NAS (client),
NULL,
10,
NULL,
(GAsyncReadyCallback)get_serving_system_3gpp_ready,
task);
+#endif /* WITH_NEWEST_QMI_COMMANDS */
}
/*****************************************************************************/
@@ -3429,9 +3421,9 @@ unsolicited_registration_events_task_new (MMBroadbandModemQmi *self,
}
static gboolean
-modem_3gpp_enable_disable_unsolicited_registration_events_finish (MMIfaceModem3gpp *self,
- GAsyncResult *res,
- GError **error)
+modem_3gpp_enable_disable_unsolicited_registration_events_finish (MMIfaceModem3gpp *self,
+ GAsyncResult *res,
+ GError **error)
{
return g_task_propagate_boolean (G_TASK (res), error);
}
@@ -3439,28 +3431,28 @@ modem_3gpp_enable_disable_unsolicited_registration_events_finish (MMIfaceModem3g
static void
ri_serving_system_or_system_info_ready (QmiClientNas *client,
GAsyncResult *res,
- GTask *task)
+ GTask *task)
{
- MMBroadbandModemQmi *self;
- UnsolicitedRegistrationEventsContext *ctx;
- QmiMessageNasRegisterIndicationsOutput *output = NULL;
- GError *error = NULL;
+ MMBroadbandModemQmi *self;
+ UnsolicitedRegistrationEventsContext *ctx;
+ g_autoptr(QmiMessageNasRegisterIndicationsOutput) output = NULL;
+ g_autoptr(GError) error = NULL;
self = g_task_get_source_object (task);
- ctx = g_task_get_task_data (task);
+ ctx = g_task_get_task_data (task);
output = qmi_client_nas_register_indications_finish (client, res, &error);
- if (!output) {
- mm_obj_dbg (self, "QMI operation failed: '%s'", error->message);
- g_error_free (error);
- } else if (!qmi_message_nas_register_indications_output_get_result (output, &error)) {
+ if (!output || !qmi_message_nas_register_indications_output_get_result (output, &error)) {
mm_obj_dbg (self, "couldn't register indications: '%s'", error->message);
- g_error_free (error);
+ if (ctx->enable) {
+#if defined WITH_NEWEST_QMI_COMMANDS
+ mm_obj_dbg (self, "assuming system info indications are always enabled");
+#else
+ mm_obj_dbg (self, "assuming serving system indications are always enabled");
+#endif
+ }
}
- if (output)
- qmi_message_nas_register_indications_output_unref (output);
-
/* Just ignore errors for now */
self->priv->unsolicited_registration_events_enabled = ctx->enable;
g_task_return_boolean (task, TRUE);
@@ -3470,8 +3462,8 @@ ri_serving_system_or_system_info_ready (QmiClientNas *client,
static void
common_enable_disable_unsolicited_registration_events_serving_system (GTask *task)
{
- UnsolicitedRegistrationEventsContext *ctx;
- QmiMessageNasRegisterIndicationsInput *input;
+ UnsolicitedRegistrationEventsContext *ctx;
+ g_autoptr(QmiMessageNasRegisterIndicationsInput) input = NULL;
ctx = g_task_get_task_data (task);
input = qmi_message_nas_register_indications_input_new ();
@@ -3483,15 +3475,14 @@ common_enable_disable_unsolicited_registration_events_serving_system (GTask *tas
NULL,
(GAsyncReadyCallback)ri_serving_system_or_system_info_ready,
task);
- qmi_message_nas_register_indications_input_unref (input);
}
#if defined WITH_NEWEST_QMI_COMMANDS
static void
common_enable_disable_unsolicited_registration_events_system_info (GTask *task)
{
- UnsolicitedRegistrationEventsContext *ctx;
- QmiMessageNasRegisterIndicationsInput *input;
+ UnsolicitedRegistrationEventsContext *ctx;
+ g_autoptr(QmiMessageNasRegisterIndicationsInput) input = NULL;
ctx = g_task_get_task_data (task);
input = qmi_message_nas_register_indications_input_new ();
@@ -3503,20 +3494,18 @@ common_enable_disable_unsolicited_registration_events_system_info (GTask *task)
NULL,
(GAsyncReadyCallback)ri_serving_system_or_system_info_ready,
task);
- qmi_message_nas_register_indications_input_unref (input);
}
#endif /* WITH_NEWEST_QMI_COMMANDS */
static void
-modem_3gpp_disable_unsolicited_registration_events (MMIfaceModem3gpp *_self,
- gboolean cs_supported,
- gboolean ps_supported,
- gboolean eps_supported,
- GAsyncReadyCallback callback,
- gpointer user_data)
+modem_3gpp_disable_unsolicited_registration_events (MMIfaceModem3gpp *self,
+ gboolean cs_supported,
+ gboolean ps_supported,
+ gboolean eps_supported,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
- MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (_self);
- GTask *task;
+ GTask *task;
QmiClient *client = NULL;
if (!mm_shared_qmi_ensure_client (MM_SHARED_QMI (self),
@@ -3524,46 +3513,28 @@ modem_3gpp_disable_unsolicited_registration_events (MMIfaceModem3gpp *_self,
callback, user_data))
return;
- task = unsolicited_registration_events_task_new (self,
+ task = unsolicited_registration_events_task_new (MM_BROADBAND_MODEM_QMI (self),
client,
FALSE,
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 (task);
- return;
- }
+ common_enable_disable_unsolicited_registration_events_system_info (task);
+#else
+ common_enable_disable_unsolicited_registration_events_serving_system (task);
#endif /* WITH_NEWEST_QMI_COMMANDS */
-
- /* Ability to explicitly enable/disable serving system indications was
- * added in NAS 1.2 */
- if (qmi_client_check_version (client, 1, 2)) {
- common_enable_disable_unsolicited_registration_events_serving_system (task);
- return;
- }
-
- /* Devices with NAS < 1.2 will just always issue serving system indications */
- self->priv->unsolicited_registration_events_enabled = FALSE;
- g_task_return_new_error (task,
- MM_CORE_ERROR,
- MM_CORE_ERROR_FAILED,
- "Device doesn't allow disabling registration events");
- g_object_unref (task);
}
static void
-modem_3gpp_enable_unsolicited_registration_events (MMIfaceModem3gpp *_self,
- gboolean cs_supported,
- gboolean ps_supported,
- gboolean eps_supported,
- GAsyncReadyCallback callback,
- gpointer user_data)
+modem_3gpp_enable_unsolicited_registration_events (MMIfaceModem3gpp *self,
+ gboolean cs_supported,
+ gboolean ps_supported,
+ gboolean eps_supported,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
- MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (_self);
- GTask *task;
+ GTask *task;
QmiClient *client = NULL;
if (!mm_shared_qmi_ensure_client (MM_SHARED_QMI (self),
@@ -3571,24 +3542,17 @@ modem_3gpp_enable_unsolicited_registration_events (MMIfaceModem3gpp *_self,
callback, user_data))
return;
- task = unsolicited_registration_events_task_new (self,
+ task = unsolicited_registration_events_task_new (MM_BROADBAND_MODEM_QMI (self),
client,
TRUE,
callback,
user_data);
- /* Ability to explicitly enable/disable serving system indications was
- * added in NAS 1.2 */
- if (qmi_client_check_version (client, 1, 2)) {
- common_enable_disable_unsolicited_registration_events_serving_system (task);
- return;
- }
-
- /* Devices with NAS < 1.2 will just always issue serving system indications */
- mm_obj_dbg (self, "assuming serving system indications are always enabled");
- self->priv->unsolicited_registration_events_enabled = TRUE;
- g_task_return_boolean (task, TRUE);
- g_object_unref (task);
+#if defined WITH_NEWEST_QMI_COMMANDS
+ common_enable_disable_unsolicited_registration_events_system_info (task);
+#else
+ common_enable_disable_unsolicited_registration_events_serving_system (task);
+#endif /* WITH_NEWEST_QMI_COMMANDS */
}
/*****************************************************************************/
@@ -4594,38 +4558,34 @@ common_setup_cleanup_unsolicited_registration_events (MMBroadbandModemQmi *self,
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 */
- if (enable) {
- g_assert (self->priv->system_info_indication_id == 0);
- self->priv->system_info_indication_id =
- g_signal_connect (client,
- "system-info",
- G_CALLBACK (system_info_indication_cb),
- self);
- } else {
- g_assert (self->priv->system_info_indication_id != 0);
- g_signal_handler_disconnect (client, self->priv->system_info_indication_id);
- self->priv->system_info_indication_id = 0;
- }
- } else
-#endif /* WITH_NEWEST_QMI_COMMANDS */
- {
- /* Connect/Disconnect "Serving System" indications */
- if (enable) {
- g_assert (self->priv->serving_system_indication_id == 0);
- self->priv->serving_system_indication_id =
- g_signal_connect (client,
- "serving-system",
- G_CALLBACK (serving_system_indication_cb),
- self);
- } else {
- g_assert (self->priv->serving_system_indication_id != 0);
- g_signal_handler_disconnect (client, self->priv->serving_system_indication_id);
- self->priv->serving_system_indication_id = 0;
- }
+ /* Connect/Disconnect "System Info" indications */
+ if (enable) {
+ g_assert (self->priv->system_info_indication_id == 0);
+ self->priv->system_info_indication_id =
+ g_signal_connect (client,
+ "system-info",
+ G_CALLBACK (system_info_indication_cb),
+ self);
+ } else {
+ g_assert (self->priv->system_info_indication_id != 0);
+ g_signal_handler_disconnect (client, self->priv->system_info_indication_id);
+ self->priv->system_info_indication_id = 0;
}
+#else
+ /* Connect/Disconnect "Serving System" indications */
+ if (enable) {
+ g_assert (self->priv->serving_system_indication_id == 0);
+ self->priv->serving_system_indication_id =
+ g_signal_connect (client,
+ "serving-system",
+ G_CALLBACK (serving_system_indication_cb),
+ self);
+ } else {
+ g_assert (self->priv->serving_system_indication_id != 0);
+ g_signal_handler_disconnect (client, self->priv->serving_system_indication_id);
+ self->priv->serving_system_indication_id = 0;
+ }
+#endif /* WITH_NEWEST_QMI_COMMANDS */
g_task_return_boolean (task, TRUE);
g_object_unref (task);
@@ -4727,19 +4687,11 @@ modem_cdma_load_esn (MMIfaceModemCdma *_self,
}
/*****************************************************************************/
-/* Enabling/disabling unsolicited events (3GPP and CDMA interface)
- *
- * If NAS >= 1.8:
- * - Config Signal Info (only when enabling)
- * - Register Indications with Signal Info
- *
- * If NAS < 1.8:
- * - Set Event Report with Signal Strength
- */
+/* Enabling/disabling unsolicited events (3GPP and CDMA interface) */
typedef struct {
QmiClientNas *client;
- gboolean enable;
+ gboolean enable;
} EnableUnsolicitedEventsContext;
static void
@@ -4750,9 +4702,9 @@ enable_unsolicited_events_context_free (EnableUnsolicitedEventsContext *ctx)
}
static gboolean
-common_enable_disable_unsolicited_events_finish (MMBroadbandModemQmi *self,
- GAsyncResult *res,
- GError **error)
+common_enable_disable_unsolicited_events_finish (MMBroadbandModemQmi *self,
+ GAsyncResult *res,
+ GError **error)
{
return g_task_propagate_boolean (G_TASK (res), error);
}
@@ -4760,27 +4712,19 @@ common_enable_disable_unsolicited_events_finish (MMBroadbandModemQmi *self,
static void
ser_signal_strength_ready (QmiClientNas *client,
GAsyncResult *res,
- GTask *task)
+ GTask *task)
{
- MMBroadbandModemQmi *self;
- EnableUnsolicitedEventsContext *ctx;
- QmiMessageNasSetEventReportOutput *output = NULL;
- GError *error = NULL;
+ MMBroadbandModemQmi *self;
+ EnableUnsolicitedEventsContext *ctx;
+ g_autoptr(QmiMessageNasSetEventReportOutput) output = NULL;
+ g_autoptr(GError) error = NULL;
self = g_task_get_source_object (task);
- ctx = g_task_get_task_data (task);
+ ctx = g_task_get_task_data (task);
output = qmi_client_nas_set_event_report_finish (client, res, &error);
- if (!output) {
- mm_obj_dbg (self, "QMI operation failed: '%s'", error->message);
- g_error_free (error);
- } else if (!qmi_message_nas_set_event_report_output_get_result (output, &error)) {
+ if (!output || !qmi_message_nas_set_event_report_output_get_result (output, &error))
mm_obj_dbg (self, "couldn't set event report: '%s'", error->message);
- g_error_free (error);
- }
-
- if (output)
- qmi_message_nas_set_event_report_output_unref (output);
/* Just ignore errors for now */
self->priv->unsolicited_events_enabled = ctx->enable;
@@ -4791,30 +4735,28 @@ ser_signal_strength_ready (QmiClientNas *client,
static void
common_enable_disable_unsolicited_events_signal_strength (GTask *task)
{
- EnableUnsolicitedEventsContext *ctx;
-
- /* The device doesn't really like to have many threshold values, so don't
- * grow this array without checking first */
- static const gint8 thresholds_data[] = { -80, -40, 0, 40, 80 };
- QmiMessageNasSetEventReportInput *input;
- GArray *thresholds;
+ EnableUnsolicitedEventsContext *ctx;
+ g_autoptr(QmiMessageNasSetEventReportInput) input = NULL;
+ g_autoptr(GArray) thresholds = NULL;
ctx = g_task_get_task_data (task);
- input = qmi_message_nas_set_event_report_input_new ();
-
- /* Prepare thresholds, separated 20 each */
- thresholds = g_array_sized_new (FALSE, FALSE, sizeof (gint8), G_N_ELEMENTS (thresholds_data));
/* Only set thresholds during enable */
- if (ctx->enable)
+ if (ctx->enable) {
+ /* The device doesn't really like to have many threshold values, so don't
+ * grow this array without checking first */
+ static const gint8 thresholds_data[] = { -80, -40, 0, 40, 80 };
+
+ thresholds = g_array_sized_new (FALSE, FALSE, sizeof (gint8), G_N_ELEMENTS (thresholds_data));
g_array_append_vals (thresholds, thresholds_data, G_N_ELEMENTS (thresholds_data));
+ }
+ input = qmi_message_nas_set_event_report_input_new ();
qmi_message_nas_set_event_report_input_set_signal_strength_indicator (
input,
ctx->enable,
thresholds,
NULL);
- g_array_unref (thresholds);
qmi_client_nas_set_event_report (
ctx->client,
input,
@@ -4822,7 +4764,6 @@ common_enable_disable_unsolicited_events_signal_strength (GTask *task)
NULL,
(GAsyncReadyCallback)ser_signal_strength_ready,
task);
- qmi_message_nas_set_event_report_input_unref (input);
}
#if defined WITH_NEWEST_QMI_COMMANDS
@@ -4830,27 +4771,19 @@ common_enable_disable_unsolicited_events_signal_strength (GTask *task)
static void
ri_signal_info_ready (QmiClientNas *client,
GAsyncResult *res,
- GTask *task)
+ GTask *task)
{
- MMBroadbandModemQmi *self;
- EnableUnsolicitedEventsContext *ctx;
- QmiMessageNasRegisterIndicationsOutput *output = NULL;
- GError *error = NULL;
+ MMBroadbandModemQmi *self;
+ EnableUnsolicitedEventsContext *ctx;
+ g_autoptr(QmiMessageNasRegisterIndicationsOutput) output = NULL;
+ g_autoptr(GError) error = NULL;
self = g_task_get_source_object (task);
- ctx = g_task_get_task_data (task);
+ ctx = g_task_get_task_data (task);
output = qmi_client_nas_register_indications_finish (client, res, &error);
- if (!output) {
- mm_obj_dbg (self, "QMI operation failed: '%s'", error->message);
- g_error_free (error);
- } else if (!qmi_message_nas_register_indications_output_get_result (output, &error)) {
+ if (!output || !qmi_message_nas_register_indications_output_get_result (output, &error))
mm_obj_dbg (self, "couldn't register indications: '%s'", error->message);
- g_error_free (error);
- }
-
- if (output)
- qmi_message_nas_register_indications_output_unref (output);
/* Just ignore errors for now */
self->priv->unsolicited_events_enabled = ctx->enable;
@@ -4861,8 +4794,8 @@ ri_signal_info_ready (QmiClientNas *client,
static void
common_enable_disable_unsolicited_events_signal_info (GTask *task)
{
- EnableUnsolicitedEventsContext *ctx;
- QmiMessageNasRegisterIndicationsInput *input;
+ EnableUnsolicitedEventsContext *ctx;
+ g_autoptr(QmiMessageNasRegisterIndicationsInput) input = NULL;
ctx = g_task_get_task_data (task);
input = qmi_message_nas_register_indications_input_new ();
@@ -4874,28 +4807,19 @@ common_enable_disable_unsolicited_events_signal_info (GTask *task)
NULL,
(GAsyncReadyCallback)ri_signal_info_ready,
task);
- qmi_message_nas_register_indications_input_unref (input);
}
static void
config_signal_info_ready (QmiClientNas *client,
GAsyncResult *res,
- GTask *task)
+ GTask *task)
{
- QmiMessageNasConfigSignalInfoOutput *output = NULL;
- GError *error = NULL;
+ g_autoptr(QmiMessageNasConfigSignalInfoOutput) output = NULL;
+ g_autoptr(GError) error = NULL;
output = qmi_client_nas_config_signal_info_finish (client, res, &error);
- if (!output) {
- mm_obj_dbg (self, "QMI operation failed: '%s'", error->message);
- g_error_free (error);
- } else if (!qmi_message_nas_config_signal_info_output_get_result (output, &error)) {
+ if (!output || !qmi_message_nas_config_signal_info_output_get_result (output, &error))
mm_obj_dbg (self, "couldn't config signal info: '%s'", error->message);
- g_error_free (error);
- }
-
- if (output)
- qmi_message_nas_config_signal_info_output_unref (output);
/* Keep on */
common_enable_disable_unsolicited_events_signal_info (task);
@@ -4904,12 +4828,8 @@ config_signal_info_ready (QmiClientNas *client,
static void
common_enable_disable_unsolicited_events_signal_info_config (GTask *task)
{
- EnableUnsolicitedEventsContext *ctx;
- /* RSSI values go between -105 and -60 for 3GPP technologies,
- * and from -105 to -90 in 3GPP2 technologies (approx). */
- static const gint8 thresholds_data[] = { -100, -97, -95, -92, -90, -85, -80, -75, -70, -65 };
- QmiMessageNasConfigSignalInfoInput *input;
- GArray *thresholds;
+ EnableUnsolicitedEventsContext *ctx;
+ g_autoptr(QmiMessageNasConfigSignalInfoInput) input = NULL;
ctx = g_task_get_task_data (task);
@@ -4922,14 +4842,20 @@ common_enable_disable_unsolicited_events_signal_info_config (GTask *task)
input = qmi_message_nas_config_signal_info_input_new ();
/* Prepare thresholds, separated 20 each */
- thresholds = g_array_sized_new (FALSE, FALSE, sizeof (gint8), G_N_ELEMENTS (thresholds_data));
- g_array_append_vals (thresholds, thresholds_data, G_N_ELEMENTS (thresholds_data));
+ {
+ /* RSSI values go between -105 and -60 for 3GPP technologies,
+ * and from -105 to -90 in 3GPP2 technologies (approx). */
+ static const gint8 thresholds_data[] = { -100, -97, -95, -92, -90, -85, -80, -75, -70, -65 };
+ g_autoptr(GArray) thresholds = NULL;
+
+ thresholds = g_array_sized_new (FALSE, FALSE, sizeof (gint8), G_N_ELEMENTS (thresholds_data));
+ g_array_append_vals (thresholds, thresholds_data, G_N_ELEMENTS (thresholds_data));
+ qmi_message_nas_config_signal_info_input_set_rssi_threshold (
+ input,
+ thresholds,
+ NULL);
+ }
- qmi_message_nas_config_signal_info_input_set_rssi_threshold (
- input,
- thresholds,
- NULL);
- g_array_unref (thresholds);
qmi_client_nas_config_signal_info (
ctx->client,
input,
@@ -4937,20 +4863,19 @@ common_enable_disable_unsolicited_events_signal_info_config (GTask *task)
NULL,
(GAsyncReadyCallback)config_signal_info_ready,
task);
- 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,
- GAsyncReadyCallback callback,
- gpointer user_data)
+ gboolean enable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
EnableUnsolicitedEventsContext *ctx;
- GTask *task;
- QmiClient *client = NULL;
+ GTask *task;
+ QmiClient *client = NULL;
if (!mm_shared_qmi_ensure_client (MM_SHARED_QMI (self),
QMI_SERVICE_NAS, &client,
@@ -4973,14 +4898,10 @@ common_enable_disable_unsolicited_events (MMBroadbandModemQmi *self,
g_task_set_task_data (task, ctx, (GDestroyNotify)enable_unsolicited_events_context_free);
#if defined WITH_NEWEST_QMI_COMMANDS
- /* Signal info introduced in NAS 1.8 */
- if (qmi_client_check_version (client, 1, 8)) {
- common_enable_disable_unsolicited_events_signal_info_config (task);
- return;
- }
-#endif /* WITH_NEWEST_QMI_COMMANDS */
-
+ common_enable_disable_unsolicited_events_signal_info_config (task);
+#else
common_enable_disable_unsolicited_events_signal_strength (task);
+#endif /* WITH_NEWEST_QMI_COMMANDS */
}
/*****************************************************************************/
@@ -5177,21 +5098,17 @@ common_setup_cleanup_unsolicited_events (MMBroadbandModemQmi *self,
}
#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)) {
- if (enable) {
- g_assert (self->priv->signal_info_indication_id == 0);
- self->priv->signal_info_indication_id =
- g_signal_connect (client,
- "signal-info",
- G_CALLBACK (signal_info_indication_cb),
- self);
- } else {
- g_assert (self->priv->signal_info_indication_id != 0);
- g_signal_handler_disconnect (client, self->priv->signal_info_indication_id);
- self->priv->signal_info_indication_id = 0;
- }
+ if (enable) {
+ g_assert (self->priv->signal_info_indication_id == 0);
+ self->priv->signal_info_indication_id =
+ g_signal_connect (client,
+ "signal-info",
+ G_CALLBACK (signal_info_indication_cb),
+ self);
+ } else {
+ g_assert (self->priv->signal_info_indication_id != 0);
+ g_signal_handler_disconnect (client, self->priv->signal_info_indication_id);
+ self->priv->signal_info_indication_id = 0;
}
#endif /* WITH_NEWEST_QMI_COMMANDS */
@@ -8549,32 +8466,25 @@ typedef struct {
} SignalLoadValuesResult;
typedef struct {
- QmiClientNas *client;
- SignalLoadValuesStep step;
+ QmiClientNas *client;
+ SignalLoadValuesStep step;
SignalLoadValuesResult *values_result;
} SignalLoadValuesContext;
static void
signal_load_values_result_free (SignalLoadValuesResult *result)
{
- if (result->cdma)
- g_object_unref (result->cdma);
- if (result->evdo)
- g_object_unref (result->evdo);
- if (result->gsm)
- g_object_unref (result->gsm);
- if (result->umts)
- g_object_unref (result->umts);
- if (result->lte)
- g_object_unref (result->lte);
+ g_clear_object (&result->cdma);
+ g_clear_object (&result->evdo);
+ g_clear_object (&result->gsm);
+ g_clear_object (&result->lte);
g_slice_free (SignalLoadValuesResult, result);
}
static void
signal_load_values_context_free (SignalLoadValuesContext *ctx)
{
- if (ctx->values_result)
- signal_load_values_result_free (ctx->values_result);
+ g_clear_pointer (&ctx->values_result, (GDestroyNotify)signal_load_values_result_free);
g_slice_free (SignalLoadValuesContext, ctx);
}
@@ -8599,14 +8509,14 @@ get_db_from_sinr_level (MMBroadbandModemQmi *self,
}
static gboolean
-signal_load_values_finish (MMIfaceModemSignal *self,
- GAsyncResult *res,
- MMSignal **cdma,
- MMSignal **evdo,
- MMSignal **gsm,
- MMSignal **umts,
- MMSignal **lte,
- GError **error)
+signal_load_values_finish (MMIfaceModemSignal *self,
+ GAsyncResult *res,
+ MMSignal **cdma,
+ MMSignal **evdo,
+ MMSignal **gsm,
+ MMSignal **umts,
+ MMSignal **lte,
+ GError **error)
{
SignalLoadValuesResult *values_result;
@@ -8628,28 +8538,26 @@ static void signal_load_values_context_step (GTask *task);
static void
signal_load_values_get_signal_strength_ready (QmiClientNas *client,
GAsyncResult *res,
- GTask *task)
-{
- MMBroadbandModemQmi *self;
- SignalLoadValuesContext *ctx;
- QmiMessageNasGetSignalStrengthOutput *output;
- GArray *array;
- gint32 aux_int32;
- gint16 aux_int16;
- gint8 aux_int8;
- QmiNasRadioInterface radio_interface;
- QmiNasEvdoSinrLevel sinr;
+ GTask *task)
+{
+ MMBroadbandModemQmi *self;
+ SignalLoadValuesContext *ctx;
+ GArray *array;
+ gint32 aux_int32;
+ gint16 aux_int16;
+ gint8 aux_int8;
+ QmiNasRadioInterface radio_interface;
+ QmiNasEvdoSinrLevel sinr;
+ g_autoptr(QmiMessageNasGetSignalStrengthOutput) output = NULL;
self = g_task_get_source_object (task);
- ctx = g_task_get_task_data (task);
+ ctx = g_task_get_task_data (task);
output = qmi_client_nas_get_signal_strength_finish (client, res, NULL);
if (!output || !qmi_message_nas_get_signal_strength_output_get_result (output, NULL)) {
/* No hard errors, go on to next step */
ctx->step++;
signal_load_values_context_step (task);
- if (output)
- qmi_message_nas_get_signal_strength_output_unref (output);
return;
}
@@ -8775,8 +8683,6 @@ signal_load_values_get_signal_strength_ready (QmiClientNas *client,
mm_signal_set_sinr (ctx->values_result->evdo, get_db_from_sinr_level (self, sinr));
}
- qmi_message_nas_get_signal_strength_output_unref (output);
-
/* Go on */
ctx->step++;
signal_load_values_context_step (task);
@@ -8785,29 +8691,27 @@ signal_load_values_get_signal_strength_ready (QmiClientNas *client,
static void
signal_load_values_get_signal_info_ready (QmiClientNas *client,
GAsyncResult *res,
- GTask *task)
+ GTask *task)
{
- MMBroadbandModemQmi *self;
- SignalLoadValuesContext *ctx;
- QmiMessageNasGetSignalInfoOutput *output;
- gint8 rssi;
- gint16 ecio;
- QmiNasEvdoSinrLevel sinr_level;
- gint32 io;
- gint8 rsrq;
- gint16 rsrp;
- gint16 snr;
+ MMBroadbandModemQmi *self;
+ SignalLoadValuesContext *ctx;
+ gint8 rssi;
+ gint16 ecio;
+ QmiNasEvdoSinrLevel sinr_level;
+ gint32 io;
+ gint8 rsrq;
+ gint16 rsrp;
+ gint16 snr;
+ g_autoptr(QmiMessageNasGetSignalInfoOutput) output = NULL;
self = g_task_get_source_object (task);
- ctx = g_task_get_task_data (task);
+ ctx = g_task_get_task_data (task);
output = qmi_client_nas_get_signal_info_finish (client, res, NULL);
if (!output || !qmi_message_nas_get_signal_info_output_get_result (output, NULL)) {
/* No hard errors, go on to next step */
ctx->step++;
signal_load_values_context_step (task);
- if (output)
- qmi_message_nas_get_signal_info_output_unref (output);
return;
}
@@ -8870,8 +8774,6 @@ signal_load_values_get_signal_info_ready (QmiClientNas *client,
mm_signal_set_snr (ctx->values_result->lte, (0.1) * ((gdouble)snr));
}
- qmi_message_nas_get_signal_info_output_unref (output);
-
/* Keep on */
ctx->step++;
signal_load_values_context_step (task);
@@ -8898,22 +8800,18 @@ signal_load_values_context_step (GTask *task)
/* Fall through */
case SIGNAL_LOAD_VALUES_STEP_SIGNAL_INFO:
- if (qmi_client_check_version (QMI_CLIENT (ctx->client), 1, 8)) {
- qmi_client_nas_get_signal_info (ctx->client,
- NULL,
- 5,
- NULL,
- (GAsyncReadyCallback)signal_load_values_get_signal_info_ready,
- task);
- return;
- }
- ctx->step++;
- /* Fall through */
+ qmi_client_nas_get_signal_info (ctx->client,
+ NULL,
+ 5,
+ NULL,
+ (GAsyncReadyCallback)signal_load_values_get_signal_info_ready,
+ task);
+ return;
case SIGNAL_LOAD_VALUES_STEP_SIGNAL_STRENGTH:
/* If already loaded with signal info, don't try signal strength */
if (!VALUES_RESULT_LOADED (ctx)) {
- QmiMessageNasGetSignalStrengthInput *input;
+ g_autoptr(QmiMessageNasGetSignalStrengthInput) input = NULL;
input = qmi_message_nas_get_signal_strength_input_new ();
qmi_message_nas_get_signal_strength_input_set_request_mask (
@@ -8932,7 +8830,6 @@ signal_load_values_context_step (GTask *task)
NULL,
(GAsyncReadyCallback)signal_load_values_get_signal_strength_ready,
task);
- qmi_message_nas_get_signal_strength_input_unref (input);
return;
}
ctx->step++;
@@ -8940,22 +8837,15 @@ signal_load_values_context_step (GTask *task)
case SIGNAL_LOAD_VALUES_STEP_SIGNAL_LAST:
/* If any result is set, succeed */
- if (VALUES_RESULT_LOADED (ctx)) {
- SignalLoadValuesResult *values_result;
-
- /* Steal results from context in order to return them */
- values_result = ctx->values_result;
- ctx->values_result = NULL;
-
+ if (VALUES_RESULT_LOADED (ctx))
g_task_return_pointer (task,
- values_result,
+ g_steal_pointer (&ctx->values_result),
(GDestroyNotify)signal_load_values_result_free);
- } else {
+ else
g_task_return_new_error (task,
MM_CORE_ERROR,
MM_CORE_ERROR_FAILED,
"No way to load extended signal information");
- }
g_object_unref (task);
return;
@@ -8969,14 +8859,14 @@ signal_load_values_context_step (GTask *task)
}
static void
-signal_load_values (MMIfaceModemSignal *self,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
+signal_load_values (MMIfaceModemSignal *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
SignalLoadValuesContext *ctx;
- GTask *task;
- QmiClient *client = NULL;
+ GTask *task;
+ QmiClient *client = NULL;
mm_obj_dbg (self, "loading extended signal information...");
@@ -8990,9 +8880,7 @@ signal_load_values (MMIfaceModemSignal *self,
ctx->step = SIGNAL_LOAD_VALUES_STEP_SIGNAL_FIRST;
task = g_task_new (self, cancellable, callback, user_data);
- g_task_set_task_data (task,
- ctx,
- (GDestroyNotify)signal_load_values_context_free);
+ g_task_set_task_data (task, ctx, (GDestroyNotify)signal_load_values_context_free);
signal_load_values_context_step (task);
}