summaryrefslogtreecommitdiffstats
path: root/drivers/atmodem
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2010-09-24 18:23:31 +0900
committerMarcel Holtmann <marcel@holtmann.org>2010-09-24 18:23:31 +0900
commit2be1c13dbb43cac6981789dacf25e440d5a04810 (patch)
treef1fb60ee72437d4ea7468c6dfbf9ff2f178a1a12 /drivers/atmodem
parent12bfc932f9dd91e245b56dba9efaf84a513ce22b (diff)
downloadofono-2be1c13dbb43cac6981789dacf25e440d5a04810.tar.bz2
atmodem: Add special handling of Infineon signal strength reporting
The custom signal strength reporting could be done inside the modem plugin actually, but Calypso, Huawei etc. add quirks to the generic network registration driver. So for now do it the same way until this gets cleaned up for all modem plugins.
Diffstat (limited to 'drivers/atmodem')
-rw-r--r--drivers/atmodem/network-registration.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/atmodem/network-registration.c b/drivers/atmodem/network-registration.c
index 5b03a932..75682c13 100644
--- a/drivers/atmodem/network-registration.c
+++ b/drivers/atmodem/network-registration.c
@@ -627,6 +627,30 @@ static void option_osigq_notify(GAtResult *result, gpointer user_data)
at_util_convert_signal_strength(strength));
}
+static void ifx_xciev_notify(GAtResult *result, gpointer user_data)
+{
+ struct ofono_netreg *netreg = user_data;
+ int strength, ind;
+ GAtResultIter iter;
+
+ g_at_result_iter_init(&iter, result);
+
+ if (!g_at_result_iter_next(&iter, "+XCIEV:"))
+ return;
+
+ if (!g_at_result_iter_next_number(&iter, &ind))
+ return;
+
+ if (ind == 0)
+ strength = 0;
+ else if (ind == 7)
+ strength = 100;
+ else
+ strength = (ind * 15);
+
+ ofono_netreg_strength_notify(netreg, ind);
+}
+
static void ciev_notify(GAtResult *result, gpointer user_data)
{
struct ofono_netreg *netreg = user_data;
@@ -1030,6 +1054,12 @@ static void at_creg_set_cb(gboolean ok, GAtResult *result, gpointer user_data)
g_at_chat_register(nd->chat, "^RSSI:", huawei_rssi_notify,
FALSE, netreg, NULL);
break;
+ case OFONO_VENDOR_IFX:
+ g_at_chat_send(nd->chat, "AT+XMER=1", none_prefix,
+ NULL, NULL, NULL);
+ g_at_chat_register(nd->chat, "+XCIEV:", ifx_xciev_notify,
+ FALSE, netreg, NULL);
+ break;
case OFONO_VENDOR_ZTE:
case OFONO_VENDOR_NOKIA:
/* Signal strength reporting via CIND is not supported */