aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniele Palmas <dnlplm@gmail.com>2021-10-18 11:38:29 +0200
committerAleksander Morgado <aleksander@aleksander.es>2021-11-09 08:34:01 +0000
commit639d0c62a94e6bac5d3f6d65e5eba874e357f42a (patch)
treeb5793f86e14c94d0cf741de723f828b5cc914a30 /src
parentec2e5403f14892047f391f63982bf5e4b30438c2 (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.c137
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 */
}
/*****************************************************************************/