diff options
-rw-r--r-- | src/mm-bearer-qmi.c | 39 | ||||
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 542 |
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); } |