aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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