diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-generic-cdma.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/mm-generic-cdma.c b/src/mm-generic-cdma.c index 7f19820a..f836c6b1 100644 --- a/src/mm-generic-cdma.c +++ b/src/mm-generic-cdma.c @@ -357,18 +357,22 @@ get_signal_quality_done (MMSerialPort *port, info->error = g_error_copy (error); else if (!strncmp (reply, "+CSQ: ", 6)) { /* Got valid reply */ - int quality; - int ber; + int quality, ber; reply += 6; if (sscanf (reply, "%d,%d", &quality, &ber)) { - /* 99 means unknown */ - if (quality != 99) + /* 99 means unknown/no service */ + if (quality == 99) { + info->error = g_error_new_literal (MM_MOBILE_ERROR, + MM_MOBILE_ERROR_NO_NETWORK, + "No service"); + } else { /* Normalize the quality */ - quality = quality * 100 / 31; + quality = CLAMP (quality, 0, 31) * 100 / 31; - mm_callback_info_set_result (info, GUINT_TO_POINTER (quality), NULL); + mm_callback_info_set_result (info, GUINT_TO_POINTER (quality), NULL); + } } else info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL, "%s", "Could not parse signal quality results"); |