[PATCH 1/1] Catch +CIEV commands from AG

Gustavo F. Padovan gustavo at padovan.org
Tue Oct 20 13:34:20 PDT 2009


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



More information about the ofono mailing list