diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-09-13 15:17:36 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-09-13 15:20:50 +0200 |
commit | 4b906f7996256bf16453bc05b4b5444f8a692411 (patch) | |
tree | dcf2858288e1238e34706017d8c99a586f4b6a4e | |
parent | 0080a0d023278bcb456b810cf29eba1901e2d381 (diff) |
broadband-modem-qmi: update access technology along with signal quality
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index 5e1b6d97..9a7ba048 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -1566,13 +1566,16 @@ get_signal_info_ready (QmiClientNas *client, #endif /* WITH_NEWEST_QMI_COMMANDS */ -static gint8 -signal_strength_get_quality (MMBroadbandModemQmi *self, - QmiMessageNasGetSignalStrengthOutput *output) +static void +signal_strength_get_quality_and_access_tech (MMBroadbandModemQmi *self, + QmiMessageNasGetSignalStrengthOutput *output, + guint8 *o_quality, + MMModemAccessTechnology *o_act) { GArray *array = NULL; gint8 signal_max; QmiNasRadioInterface main_interface; + MMModemAccessTechnology act; guint8 quality; /* We do not report per-technology signal quality, so just get the highest @@ -1584,6 +1587,8 @@ signal_strength_get_quality (MMBroadbandModemQmi *self, qmi_nas_radio_interface_get_string (main_interface), signal_max); + act = mm_modem_access_technology_from_qmi_radio_interface (main_interface); + /* On multimode devices we may get more */ if (qmi_message_nas_get_signal_strength_output_get_strength_list (output, &array, NULL)) { guint i; @@ -1598,6 +1603,8 @@ signal_strength_get_quality (MMBroadbandModemQmi *self, element->strength); signal_max = MAX (element->strength, signal_max); + + act |= mm_modem_access_technology_from_qmi_radio_interface (element->radio_interface); } } @@ -1605,7 +1612,9 @@ signal_strength_get_quality (MMBroadbandModemQmi *self, quality = STRENGTH_TO_QUALITY (signal_max); mm_dbg ("Signal strength: %d dBm --> %u%%", signal_max, quality); - return quality; + + *o_quality = quality; + *o_act = act; } static void @@ -1615,7 +1624,8 @@ get_signal_strength_ready (QmiClientNas *client, { QmiMessageNasGetSignalStrengthOutput *output; GError *error = NULL; - guint quality; + guint8 quality = 0; + MMModemAccessTechnology act = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN; output = qmi_client_nas_get_signal_strength_finish (client, res, &error); if (!output) { @@ -1631,7 +1641,14 @@ get_signal_strength_ready (QmiClientNas *client, return; } - quality = signal_strength_get_quality (ctx->self, output); + signal_strength_get_quality_and_access_tech (ctx->self, output, &quality, &act); + + /* 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 (ctx->self), + act, + (MM_IFACE_MODEM_3GPP_ALL_ACCESS_TECHNOLOGIES_MASK | MM_IFACE_MODEM_CDMA_ALL_ACCESS_TECHNOLOGIES_MASK)); g_simple_async_result_set_op_res_gpointer ( ctx->result, @@ -4661,6 +4678,10 @@ event_report_indication_cb (QmiClientNas *client, quality); mm_iface_modem_update_signal_quality (MM_IFACE_MODEM (self), quality); + mm_iface_modem_update_access_technologies ( + MM_IFACE_MODEM (self), + mm_modem_access_technology_from_qmi_radio_interface (signal_strength_radio_interface), + (MM_IFACE_MODEM_3GPP_ALL_ACCESS_TECHNOLOGIES_MASK | MM_IFACE_MODEM_CDMA_ALL_ACCESS_TECHNOLOGIES_MASK)); } } |