summaryrefslogtreecommitdiffstats
path: root/drivers/atmodem/network-registration.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/atmodem/network-registration.c')
-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 */