summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2012-02-14 15:23:59 +0100
committerMarcel Holtmann <marcel@holtmann.org>2012-02-14 15:23:59 +0100
commit1ed0b9997c22f1f1933db24ed7dd83c6a578f232 (patch)
tree48aa88f33f2e9a8ee46f701d6acd5dddf3d1eba0
parent286b4a853057814be74d5c8877ccce97db13150b (diff)
downloadofono-1ed0b9997c22f1f1933db24ed7dd83c6a578f232.tar.bz2
atmodem: Fix handling of IFX signal strength indication
-rw-r--r--drivers/atmodem/network-registration.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/atmodem/network-registration.c b/drivers/atmodem/network-registration.c
index 7890fb1b..d098d373 100644
--- a/drivers/atmodem/network-registration.c
+++ b/drivers/atmodem/network-registration.c
@@ -692,12 +692,18 @@ static void ifx_xciev_notify(GAtResult *result, gpointer user_data)
if (!g_at_result_iter_next_number(&iter, &ind))
return;
- if (ind == 0)
+ /*
+ * Radio signal strength indicators are defined for 0-7,
+ * but in some cases XCIEV just returns CSQ 0-31,99 values.
+ */
+ if (ind == 0 || ind == 99)
strength = -1;
else if (ind == 7)
strength = 100;
- else
+ else if (ind < 7)
strength = (ind * 15);
+ else if (ind > 7)
+ strength = (ind * 100) / 31;
DBG("ind %d strength %d", ind, strength);