diff options
-rw-r--r-- | src/mm-broadband-modem.c | 58 |
1 files changed, 32 insertions, 26 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index e9b20cba..a5fea1b9 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -3110,41 +3110,47 @@ set_cgev_unsolicited_events_handlers (MMBroadbandModem *self, } static void -ciev_received (MMPortSerialAt *port, - GMatchInfo *info, - MMBroadbandModem *self) +ciev_signal_received (MMBroadbandModem *self, + GMatchInfo *match_info) { - gint ind = 0; - gchar *item; + guint quality; - item = g_match_info_fetch (info, 1); - if (item) - ind = atoi (item); + if (!mm_get_uint_from_match_info (match_info, 2, &quality)) { + mm_dbg ("Couldn't parse signal quality value from +CIEV"); + return; + } - /* Handle signal quality change indication */ - if (ind == self->priv->modem_cind_indicator_signal_quality || - g_str_equal (item, "signal")) { - gchar *value; + mm_iface_modem_update_signal_quality ( + MM_IFACE_MODEM (self), + normalize_ciev_cind_signal_quality (quality, + self->priv->modem_cind_min_signal_quality, + self->priv->modem_cind_max_signal_quality)); +} - value = g_match_info_fetch (info, 2); - if (value) { - gint quality = 0; +static void +ciev_received (MMPortSerialAt *port, + GMatchInfo *match_info, + MMBroadbandModem *self) +{ + guint ind; + gchar *item; - quality = atoi (value); + item = mm_get_string_unquoted_from_match_info (match_info, 1); + if (!item) + return; - mm_iface_modem_update_signal_quality ( - MM_IFACE_MODEM (self), - normalize_ciev_cind_signal_quality (quality, - self->priv->modem_cind_min_signal_quality, - self->priv->modem_cind_max_signal_quality)); - g_free (value); - } + /* numeric index? */ + if (mm_get_uint_from_str (item, &ind)) { + if (ind == self->priv->modem_cind_indicator_signal_quality) + ciev_signal_received (self, match_info); + } + /* string index? */ + else { + if (g_str_equal (item, "signal")) + ciev_signal_received (self, match_info); } g_free (item); - - /* FIXME: handle roaming and service indicators. - * ... wait, arent these already handle by unsolicited CREG responses? */ } static void |