diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2012-02-14 15:23:59 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2012-02-14 15:23:59 +0100 |
commit | 1ed0b9997c22f1f1933db24ed7dd83c6a578f232 (patch) | |
tree | 48aa88f33f2e9a8ee46f701d6acd5dddf3d1eba0 | |
parent | 286b4a853057814be74d5c8877ccce97db13150b (diff) | |
download | ofono-1ed0b9997c22f1f1933db24ed7dd83c6a578f232.tar.bz2 |
atmodem: Fix handling of IFX signal strength indication
-rw-r--r-- | drivers/atmodem/network-registration.c | 10 |
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); |