diff options
author | Daniele Palmas <dnlplm@gmail.com> | 2021-10-18 11:38:29 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-11-09 08:34:01 +0000 |
commit | 639d0c62a94e6bac5d3f6d65e5eba874e357f42a (patch) | |
tree | b5793f86e14c94d0cf741de723f828b5cc914a30 /src | |
parent | ec2e5403f14892047f391f63982bf5e4b30438c2 (diff) |
broadband-modem-qmi: replace get signal strength with get signal info
Set get signal info as default and fall back to get signal strength
for those modems not supporting the former.
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 137 |
1 files changed, 73 insertions, 64 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index 8ab0662d..67c21f0f 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -1337,8 +1337,6 @@ load_signal_quality_finish (MMIfaceModem *self, return value; } -#if defined WITH_NEWEST_QMI_COMMANDS - static gboolean common_signal_info_get_quality (MMBroadbandModemQmi *self, gint8 cdma1x_rssi, @@ -1434,58 +1432,6 @@ signal_info_get_quality (MMBroadbandModemQmi *self, return common_signal_info_get_quality (self, cdma1x_rssi, evdo_rssi, gsm_rssi, wcdma_rssi, lte_rssi, out_quality, out_act); } -static void -get_signal_info_ready (QmiClientNas *client, - GAsyncResult *res, - GTask *task) -{ - MMBroadbandModemQmi *self; - QmiMessageNasGetSignalInfoOutput *output; - GError *error = NULL; - guint8 quality = 0; - MMModemAccessTechnology act = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN; - - output = qmi_client_nas_get_signal_info_finish (client, res, &error); - if (!output) { - g_task_return_error (task, error); - g_object_unref (task); - return; - } - - if (!qmi_message_nas_get_signal_info_output_get_result (output, &error)) { - qmi_message_nas_get_signal_info_output_unref (output); - g_task_return_error (task, error); - g_object_unref (task); - return; - } - - self = g_task_get_source_object (task); - - if (!signal_info_get_quality (self, output, &quality, &act)) { - qmi_message_nas_get_signal_info_output_unref (output); - g_task_return_new_error (task, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "Signal info reported invalid signal strength."); - g_object_unref (task); - return; - } - - /* We update the access technologies directly here when loading signal - * quality. It goes a bit out of context, but we can do it nicely */ - mm_iface_modem_update_access_technologies ( - MM_IFACE_MODEM (self), - act, - (MM_IFACE_MODEM_3GPP_ALL_ACCESS_TECHNOLOGIES_MASK | MM_IFACE_MODEM_CDMA_ALL_ACCESS_TECHNOLOGIES_MASK)); - - g_task_return_int (task, quality); - g_object_unref (task); - - qmi_message_nas_get_signal_info_output_unref (output); -} - -#else /* WITH_NEWEST_QMI_COMMANDS */ - static gboolean signal_strength_get_quality_and_access_tech (MMBroadbandModemQmi *self, QmiMessageNasGetSignalStrengthOutput *output, @@ -1593,7 +1539,79 @@ get_signal_strength_ready (QmiClientNas *client, qmi_message_nas_get_signal_strength_output_unref (output); } -#endif /* WITH_NEWEST_QMI_COMMANDS */ +static void +get_signal_info_ready (QmiClientNas *client, + GAsyncResult *res, + GTask *task) +{ + MMBroadbandModemQmi *self; + QmiMessageNasGetSignalInfoOutput *output; + GError *error = NULL; + guint8 quality = 0; + MMModemAccessTechnology act = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN; + + self = g_task_get_source_object (task); + + output = qmi_client_nas_get_signal_info_finish (client, res, &error); + if (!output) { + mm_obj_dbg (self, "couldn't get signal info: '%s': falling back to get signal strength", + error->message); + qmi_client_nas_get_signal_strength (client, + NULL, + 10, + NULL, + (GAsyncReadyCallback)get_signal_strength_ready, + task); + g_clear_error (&error); + return; + } + + if (!qmi_message_nas_get_signal_info_output_get_result (output, &error)) { + qmi_message_nas_get_signal_info_output_unref (output); + if (g_error_matches (error, + QMI_PROTOCOL_ERROR, + QMI_PROTOCOL_ERROR_INVALID_QMI_COMMAND) || + g_error_matches (error, + QMI_PROTOCOL_ERROR, + QMI_PROTOCOL_ERROR_NOT_SUPPORTED)) { + mm_obj_dbg (self, "couldn't get signal info: '%s': falling back to get signal strength", + error->message); + qmi_client_nas_get_signal_strength (client, + NULL, + 10, + NULL, + (GAsyncReadyCallback)get_signal_strength_ready, + task); + g_clear_error (&error); + return; + } + g_task_return_error (task, error); + g_object_unref (task); + return; + } + + if (!signal_info_get_quality (self, output, &quality, &act)) { + qmi_message_nas_get_signal_info_output_unref (output); + g_task_return_new_error (task, + MM_CORE_ERROR, + MM_CORE_ERROR_FAILED, + "Signal info reported invalid signal strength."); + g_object_unref (task); + return; + } + + /* We update the access technologies directly here when loading signal + * quality. It goes a bit out of context, but we can do it nicely */ + mm_iface_modem_update_access_technologies ( + MM_IFACE_MODEM (self), + act, + (MM_IFACE_MODEM_3GPP_ALL_ACCESS_TECHNOLOGIES_MASK | MM_IFACE_MODEM_CDMA_ALL_ACCESS_TECHNOLOGIES_MASK)); + + g_task_return_int (task, quality); + g_object_unref (task); + + qmi_message_nas_get_signal_info_output_unref (output); +} static void load_signal_quality (MMIfaceModem *self, @@ -1612,21 +1630,12 @@ load_signal_quality (MMIfaceModem *self, mm_obj_dbg (self, "loading signal quality..."); -#if defined 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 */ } /*****************************************************************************/ |