All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] Add support for emergency number list from modem
@ 2011-03-25 14:08 Jeevaka Badrappan
  2011-03-25 14:08 ` [PATCH 1/2] voicecall: add ofono_voicecall_en_list_notify api Jeevaka Badrappan
  2011-03-25 14:08 ` [PATCH 2/2] ifxmodem: add support for emergency number list Jeevaka Badrappan
  0 siblings, 2 replies; 4+ messages in thread
From: Jeevaka Badrappan @ 2011-03-25 14:08 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 884 bytes --]

Hi,

 Following set of patch adds the emergency number list update from
the modem. Upon emergency number list update from modem, ofono
core will be updated which will result in dbus property change signal
as well. With this patch, even if the emergency number list maintained
in ofono matches with the received emergency number list from modem,
dbus property change will be signalled. If this should be avoided,
then it needs to be decided whether the check should be added in core
or for each modem.

Regards,
Jeevaka

Jeevaka Badrappan (2):
  voicecall: add ofono_voicecall_en_list_notify api
  ifxmodem: add support for emergency number list

 drivers/ifxmodem/voicecall.c |   98 ++++++++++++++++++++++++++++++++++++++++++
 include/voicecall.h          |    3 +
 src/voicecall.c              |   12 +++++
 3 files changed, 113 insertions(+), 0 deletions(-)


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] voicecall: add ofono_voicecall_en_list_notify api
  2011-03-25 14:08 [PATCH 0/2] Add support for emergency number list from modem Jeevaka Badrappan
@ 2011-03-25 14:08 ` Jeevaka Badrappan
  2011-03-25 17:44   ` Denis Kenzior
  2011-03-25 14:08 ` [PATCH 2/2] ifxmodem: add support for emergency number list Jeevaka Badrappan
  1 sibling, 1 reply; 4+ messages in thread
From: Jeevaka Badrappan @ 2011-03-25 14:08 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 1239 bytes --]

---
 include/voicecall.h |    3 +++
 src/voicecall.c     |   12 ++++++++++++
 2 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/include/voicecall.h b/include/voicecall.h
index f00eb08..3710646 100644
--- a/include/voicecall.h
+++ b/include/voicecall.h
@@ -140,6 +140,9 @@ struct ofono_voicecall_driver {
 			ofono_voicecall_cb_t cb, void *data);
 };
 
+void ofono_voicecall_en_list_notify(struct ofono_voicecall *vc,
+					GSList *nw_en_list);
+
 void ofono_voicecall_notify(struct ofono_voicecall *vc,
 				const struct ofono_call *call);
 void ofono_voicecall_disconnected(struct ofono_voicecall *vc, int id,
diff --git a/src/voicecall.c b/src/voicecall.c
index d6e8539..74fe910 100644
--- a/src/voicecall.c
+++ b/src/voicecall.c
@@ -2150,6 +2150,18 @@ check:
 	set_new_ecc(vc);
 }
 
+void ofono_voicecall_en_list_notify(struct ofono_voicecall *vc,
+					GSList *new_en_list)
+{
+	GSList *l;
+
+	for (l = new_en_list; l; l = l->next)
+		vc->new_en_list = g_slist_prepend(vc->new_en_list,
+							g_strdup(l->data));
+
+	set_new_ecc(vc);
+}
+
 int ofono_voicecall_driver_register(const struct ofono_voicecall_driver *d)
 {
 	DBG("driver: %p, name: %s", d, d->name);
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] ifxmodem: add support for emergency number list
  2011-03-25 14:08 [PATCH 0/2] Add support for emergency number list from modem Jeevaka Badrappan
  2011-03-25 14:08 ` [PATCH 1/2] voicecall: add ofono_voicecall_en_list_notify api Jeevaka Badrappan
@ 2011-03-25 14:08 ` Jeevaka Badrappan
  1 sibling, 0 replies; 4+ messages in thread
From: Jeevaka Badrappan @ 2011-03-25 14:08 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 3862 bytes --]

---
 drivers/ifxmodem/voicecall.c |   98 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 98 insertions(+), 0 deletions(-)

diff --git a/drivers/ifxmodem/voicecall.c b/drivers/ifxmodem/voicecall.c
index 87a48e6..a92ac11 100644
--- a/drivers/ifxmodem/voicecall.c
+++ b/drivers/ifxmodem/voicecall.c
@@ -42,11 +42,13 @@
 #include "ifxmodem.h"
 
 static const char *none_prefix[] = { NULL };
+static const char *xlema_prefix[] = { "+XLEMA:", NULL };
 
 struct voicecall_data {
 	GSList *calls;
 	unsigned int local_release;
 	GAtChat *chat;
+	GSList *en_list;
 };
 
 struct release_id_req {
@@ -786,6 +788,95 @@ static void xcolp_notify(GAtResult *result, gpointer user_data)
 	ofono_voicecall_notify(vc, call);
 }
 
+static gint number_compare(gconstpointer a, gconstpointer b)
+{
+	const char *s1 = a, *s2 = b;
+	return strcmp(s1, s2);
+}
+
+static void xlema_notify(GAtResult *result, gpointer user_data)
+{
+	struct ofono_voicecall *vc = user_data;
+	struct voicecall_data *vd = ofono_voicecall_get_data(vc);
+	GAtResultIter iter;
+	int index, total_cnt;
+	const char *number;
+
+	g_at_result_iter_init(&iter, result);
+
+	if (!g_at_result_iter_next(&iter, "+XLEMA:"))
+		return;
+
+	if (!g_at_result_iter_next_number(&iter, &index))
+		return;
+
+	if (!g_at_result_iter_next_number(&iter, &total_cnt))
+		return;
+
+	if (!g_at_result_iter_next_string(&iter, &number))
+		return;
+
+	// Skip the category, EN valid with simpresence and mcc fields
+
+	if (!g_slist_find_custom(vd->en_list, number, number_compare))
+		vd->en_list = g_slist_prepend(vd->en_list, g_strdup(number));
+
+	if (index != total_cnt)
+		return;
+
+	vd->en_list = g_slist_reverse(vd->en_list);
+
+	ofono_voicecall_en_list_notify(vc, vd->en_list);
+
+	g_slist_foreach(vd->en_list, (GFunc) g_free, NULL);
+	g_slist_free(vd->en_list);
+	vd->en_list = NULL;
+}
+
+static void xlema_read(gboolean ok, GAtResult *result, gpointer user_data)
+{
+	struct ofono_voicecall *vc = user_data;
+	struct voicecall_data *vd = ofono_voicecall_get_data(vc);
+	GAtResultIter iter;
+	int index, total_cnt;
+	const char *number;
+
+	if (!ok) {
+		DBG("Emergency number list read failed");
+		return;
+	}
+
+	g_at_result_iter_init(&iter, result);
+
+	while (g_at_result_iter_next(&iter, "+XLEMA:")) {
+		if (!g_at_result_iter_next_number(&iter, &index))
+			continue;
+
+		if (!g_at_result_iter_next_number(&iter, &total_cnt))
+			continue;
+
+		if (!g_at_result_iter_next_string(&iter, &number))
+			continue;
+
+		// Skip the category, EN valid with simpresence and mcc fields
+		g_at_result_iter_skip_next(&iter);
+		g_at_result_iter_skip_next(&iter);
+		g_at_result_iter_skip_next(&iter);
+
+		if (!g_slist_find_custom(vd->en_list, number, number_compare))
+			vd->en_list = g_slist_prepend(vd->en_list,
+							g_strdup(number));
+	}
+
+	vd->en_list = g_slist_reverse(vd->en_list);
+
+	ofono_voicecall_en_list_notify(vc, vd->en_list);
+
+	g_slist_foreach(vd->en_list, (GFunc) g_free, NULL);
+	g_slist_free(vd->en_list);
+	vd->en_list = NULL;
+}
+
 static void ifx_voicecall_initialized(gboolean ok, GAtResult *result,
 					gpointer user_data)
 {
@@ -803,7 +894,14 @@ static void ifx_voicecall_initialized(gboolean ok, GAtResult *result,
 							FALSE, vc, NULL);
 	g_at_chat_register(vd->chat, "+XCOLP:", xcolp_notify, FALSE, vc, NULL);
 
+	g_at_chat_register(vd->chat, "+XLEMA:", xlema_notify, FALSE, vc, NULL);
+	/* Enable emergency number list notification */
+	g_at_chat_send(vd->chat, "AT+XLEMA=1", none_prefix, NULL, NULL, NULL);
+
 	ofono_voicecall_register(vc);
+
+	g_at_chat_send(vd->chat, "AT+XLEMA?", xlema_prefix, xlema_read, vc,
+									NULL);
 }
 
 static int ifx_voicecall_probe(struct ofono_voicecall *vc, unsigned int vendor,
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] voicecall: add ofono_voicecall_en_list_notify api
  2011-03-25 14:08 ` [PATCH 1/2] voicecall: add ofono_voicecall_en_list_notify api Jeevaka Badrappan
@ 2011-03-25 17:44   ` Denis Kenzior
  0 siblings, 0 replies; 4+ messages in thread
From: Denis Kenzior @ 2011-03-25 17:44 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 1014 bytes --]

Hi Jeevaka,

On 03/25/2011 09:08 AM, Jeevaka Badrappan wrote:
> ---
>  include/voicecall.h |    3 +++

Please break this up into two patches.

>  src/voicecall.c     |   12 ++++++++++++
>  2 files changed, 15 insertions(+), 0 deletions(-)
> 

<snip>

> +void ofono_voicecall_en_list_notify(struct ofono_voicecall *vc,
> +					GSList *new_en_list)
> +{
> +	GSList *l;
> +
> +	for (l = new_en_list; l; l = l->next)
> +		vc->new_en_list = g_slist_prepend(vc->new_en_list,
> +							g_strdup(l->data));

The pure 27.007 version of this function assumes that the en set is
being signaled by the cell tower.  This set needs to be union-ed with
the set obtained from the sim.

Likely you will need to track the sim list separately from the one
obtained from the cell tower and remove any duplicates.

> +
> +	set_new_ecc(vc);
> +}
> +
>  int ofono_voicecall_driver_register(const struct ofono_voicecall_driver *d)
>  {
>  	DBG("driver: %p, name: %s", d, d->name);

Regards,
-Denis

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-03-25 17:44 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-25 14:08 [PATCH 0/2] Add support for emergency number list from modem Jeevaka Badrappan
2011-03-25 14:08 ` [PATCH 1/2] voicecall: add ofono_voicecall_en_list_notify api Jeevaka Badrappan
2011-03-25 17:44   ` Denis Kenzior
2011-03-25 14:08 ` [PATCH 2/2] ifxmodem: add support for emergency number list Jeevaka Badrappan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.