aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2019-12-23 14:38:09 +0100
committerAleksander Morgado <aleksander@aleksander.es>2020-01-30 11:59:14 +0100
commit337e5e96e0a0d8fd0e6ffcc02e9c90aaaf0baa91 (patch)
tree679e9e35b66d490594497256159811f226d2321a /src
parentf0377d6e36505fa7383c20218e223b5389a42aa3 (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.c58
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