diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2019-12-23 14:38:09 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2020-01-30 11:59:14 +0100 |
commit | 337e5e96e0a0d8fd0e6ffcc02e9c90aaaf0baa91 (patch) | |
tree | 679e9e35b66d490594497256159811f226d2321a /src | |
parent | f0377d6e36505fa7383c20218e223b5389a42aa3 (diff) |
broadband-modem: rework +CIEV URC handling
Switch to use the helper methods to parse strings and numbers from
match info results.
Also, avoid warnings with -Wsign-compare.
Diffstat (limited to 'src')
-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 |