Add a callback to get status update from AG side. +CIEV commands send
updates such as roaming status, battery and signal level and call
status.
---
plugins/hfp.c | 30 ++++++++++++++++++++++++++++++
1 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/plugins/hfp.c b/plugins/hfp.c
index 9733cfc..211c874 100644
--- a/plugins/hfp.c
+++ b/plugins/hfp.c
@@ -104,6 +104,33 @@ error:
hfp_disable(modem);
}
+static void ciev_cb(GAtResult *result, gpointer user_data)
+{
+ struct ofono_modem *modem = user_data;
+ struct hfp_data *data = ofono_modem_get_data(modem);
+ GAtResultIter iter;
+ int index, value, i;
+
+ g_at_result_iter_init(&iter, result);
+
+ if (!g_at_result_iter_next(&iter, "+CIEV:"))
+ goto error;
+
+ g_at_result_iter_next_number(&iter, &index);
+ g_at_result_iter_next_number(&iter, &value);
+
+ for (i = 0; i < HFP_INDICATOR_LAST; i++) {
+ if (index != data->cind_pos[i])
+ continue;
+
+ data->cind_val[i] = value;
+ }
+ return;
+
+error:
+ hfp_disable(modem);
+}
+
static void cmer_cb(gboolean ok, GAtResult *result, gpointer user_data)
{
struct ofono_modem *modem = user_data;
@@ -116,6 +143,9 @@ static void cmer_cb(gboolean ok, GAtResult *result, gpointer
user_data)
g_at_chat_send(data->chat, "AT+CIND?", cind_prefix,
cind_status_cb, modem, NULL);
+
+ g_at_chat_register(data->chat, "+CIEV:", ciev_cb, FALSE,
+ modem, NULL);
}
static void cind_cb(gboolean ok, GAtResult *result, gpointer user_data)
--
1.6.4.4
Show replies by date