Open Source Telephony
 help / color / mirror / Atom feed
* [PATCH 0/6] Add HandsfreeAudioCard to emulator
@ 2013-04-24 17:13 Paulo Borges
  2013-04-24 17:13 ` [PATCH 1/6] include: Add ofono_emulator_create_card() Paulo Borges
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: Paulo Borges @ 2013-04-24 17:13 UTC (permalink / raw)
  To: ofono

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

This patch series starts to implement HandsfreeAudioCard logic to Audio
Gateway role from HFP version 1.6 profile:

* Patches 01 to 03 implement a function to add a new
HandsfreeAudioCard to an emulator and call it when a new connection
arrives.

* Patch 04 registers the card when the Service Level Connection is
established.

* Patches 05 and 06 stores the remote and local address in the card.

What is expected for upcoming series?

* Card driver for Audio Gateway version 1.6
* Handle specific AT commands from HFP version 1.6 (AT+BAC, ...)

Paulo Borges (6):
  include: Add ofono_emulator_create_card()
  emulator: Implement ofono_emulator_create_card()
  hfp_ag_bluez5: Create card when connect
  emulator: Register card when establish SLC
  emulator: Set local and remote address of card
  hfp_ag_bluez5: Send fd to card creation

 include/emulator.h      |    2 ++
 plugins/hfp_ag_bluez5.c |    8 ++++++
 src/emulator.c          |   63 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 73 insertions(+)

-- 
1.7.9.5


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

* [PATCH 1/6] include: Add ofono_emulator_create_card()
  2013-04-24 17:13 [PATCH 0/6] Add HandsfreeAudioCard to emulator Paulo Borges
@ 2013-04-24 17:13 ` Paulo Borges
  2013-04-25  8:35   ` Denis Kenzior
  2013-04-24 17:13 ` [PATCH 2/6] emulator: Implement ofono_emulator_create_card() Paulo Borges
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 9+ messages in thread
From: Paulo Borges @ 2013-04-24 17:13 UTC (permalink / raw)
  To: ofono

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

---
 include/emulator.h |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/include/emulator.h b/include/emulator.h
index 5cd894b..49168a1 100644
--- a/include/emulator.h
+++ b/include/emulator.h
@@ -74,6 +74,8 @@ void ofono_emulator_register(struct ofono_emulator *em, int fd);
 
 void ofono_emulator_remove(struct ofono_emulator *em);
 
+int ofono_emulator_create_card(struct ofono_emulator *em, int fd, int version);
+
 void ofono_emulator_send_final(struct ofono_emulator *em,
 				const struct ofono_error *final);
 void ofono_emulator_send_unsolicited(struct ofono_emulator *em,
-- 
1.7.9.5


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

* [PATCH 2/6] emulator: Implement ofono_emulator_create_card()
  2013-04-24 17:13 [PATCH 0/6] Add HandsfreeAudioCard to emulator Paulo Borges
  2013-04-24 17:13 ` [PATCH 1/6] include: Add ofono_emulator_create_card() Paulo Borges
@ 2013-04-24 17:13 ` Paulo Borges
  2013-04-24 17:13 ` [PATCH 3/6] hfp_ag_bluez5: Create card when connect Paulo Borges
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Paulo Borges @ 2013-04-24 17:13 UTC (permalink / raw)
  To: ofono

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

---
 src/emulator.c |   16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/src/emulator.c b/src/emulator.c
index 70505b5..8acdae1 100644
--- a/src/emulator.c
+++ b/src/emulator.c
@@ -29,6 +29,9 @@
 
 #include <glib.h>
 
+#define OFONO_API_SUBJECT_TO_CHANGE
+#include <ofono/handsfree-audio.h>
+
 #include "ofono.h"
 #include "common.h"
 #include "hfp.h"
@@ -53,6 +56,7 @@ struct ofono_emulator {
 	gboolean clip;
 	gboolean ccwa;
 	int pns_id;
+	struct ofono_handsfree_card *card;
 };
 
 struct indicator {
@@ -880,6 +884,11 @@ static void emulator_unregister(struct ofono_atom *atom)
 
 	g_at_server_unref(em->server);
 	em->server = NULL;
+
+	if (em->card) {
+		ofono_handsfree_card_remove(em->card);
+		em->card = NULL;
+	}
 }
 
 void ofono_emulator_register(struct ofono_emulator *em, int fd)
@@ -990,6 +999,13 @@ struct ofono_emulator *ofono_emulator_create(struct ofono_modem *modem,
 	return em;
 }
 
+int ofono_emulator_create_card(struct ofono_emulator *em, int fd, int version)
+{
+	em->card = ofono_handsfree_card_create(0, NULL, NULL);
+
+	return 0;
+}
+
 void ofono_emulator_remove(struct ofono_emulator *em)
 {
 	__ofono_atom_free(em->atom);
-- 
1.7.9.5


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

* [PATCH 3/6] hfp_ag_bluez5: Create card when connect
  2013-04-24 17:13 [PATCH 0/6] Add HandsfreeAudioCard to emulator Paulo Borges
  2013-04-24 17:13 ` [PATCH 1/6] include: Add ofono_emulator_create_card() Paulo Borges
  2013-04-24 17:13 ` [PATCH 2/6] emulator: Implement ofono_emulator_create_card() Paulo Borges
@ 2013-04-24 17:13 ` Paulo Borges
  2013-04-24 17:13 ` [PATCH 4/6] emulator: Register card when establish SLC Paulo Borges
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Paulo Borges @ 2013-04-24 17:13 UTC (permalink / raw)
  To: ofono

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

---
 plugins/hfp_ag_bluez5.c |    8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/plugins/hfp_ag_bluez5.c b/plugins/hfp_ag_bluez5.c
index 245de21..e971a22 100644
--- a/plugins/hfp_ag_bluez5.c
+++ b/plugins/hfp_ag_bluez5.c
@@ -123,6 +123,14 @@ static DBusMessage *profile_new_connection(DBusConnection *conn,
 
 	ofono_emulator_register(em, fd);
 
+	if (ofono_emulator_create_card(em, 0, 0) < 0) {
+		close(fd);
+		ofono_emulator_remove(em);
+		return g_dbus_create_error(msg, BLUEZ_ERROR_INTERFACE
+						".Rejected",
+						"Not enough resources");
+	}
+
 	fd_dup = dup(fd);
 	io = g_io_channel_unix_new(fd_dup);
 	g_io_add_watch_full(io, G_PRIORITY_DEFAULT, G_IO_HUP, io_hup_cb,
-- 
1.7.9.5


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

* [PATCH 4/6] emulator: Register card when establish SLC
  2013-04-24 17:13 [PATCH 0/6] Add HandsfreeAudioCard to emulator Paulo Borges
                   ` (2 preceding siblings ...)
  2013-04-24 17:13 ` [PATCH 3/6] hfp_ag_bluez5: Create card when connect Paulo Borges
@ 2013-04-24 17:13 ` Paulo Borges
  2013-04-24 17:13 ` [PATCH 5/6] emulator: Set local and remote address of card Paulo Borges
  2013-04-24 17:13 ` [PATCH 6/6] hfp_ag_bluez5: Send fd to card creation Paulo Borges
  5 siblings, 0 replies; 9+ messages in thread
From: Paulo Borges @ 2013-04-24 17:13 UTC (permalink / raw)
  To: ofono

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

---
 src/emulator.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/emulator.c b/src/emulator.c
index 8acdae1..4d5e835 100644
--- a/src/emulator.c
+++ b/src/emulator.c
@@ -641,6 +641,9 @@ done:
 		g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
 
 		em->slc = TRUE;
+
+		ofono_handsfree_card_register(em->card);
+
 		break;
 	}
 
-- 
1.7.9.5


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

* [PATCH 5/6] emulator: Set local and remote address of card
  2013-04-24 17:13 [PATCH 0/6] Add HandsfreeAudioCard to emulator Paulo Borges
                   ` (3 preceding siblings ...)
  2013-04-24 17:13 ` [PATCH 4/6] emulator: Register card when establish SLC Paulo Borges
@ 2013-04-24 17:13 ` Paulo Borges
  2013-04-24 17:13 ` [PATCH 6/6] hfp_ag_bluez5: Send fd to card creation Paulo Borges
  5 siblings, 0 replies; 9+ messages in thread
From: Paulo Borges @ 2013-04-24 17:13 UTC (permalink / raw)
  To: ofono

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

This commit extracts local and remote address from the socket and
stores them into the card.
---
 src/emulator.c |   46 +++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 45 insertions(+), 1 deletion(-)

diff --git a/src/emulator.c b/src/emulator.c
index 4d5e835..6acf384 100644
--- a/src/emulator.c
+++ b/src/emulator.c
@@ -23,11 +23,15 @@
 #include <config.h>
 #endif
 
+#include <stdlib.h>
 #include <stdio.h>
+#include <stdint.h>
 #include <string.h>
 #include <unistd.h>
+#include <errno.h>
 
 #include <glib.h>
+#include <sys/socket.h>
 
 #define OFONO_API_SUBJECT_TO_CHANGE
 #include <ofono/handsfree-audio.h>
@@ -37,6 +41,7 @@
 #include "hfp.h"
 #include "gatserver.h"
 #include "gatppp.h"
+#include "bluetooth.h"
 
 #define RING_TIMEOUT 3
 
@@ -1002,11 +1007,50 @@ struct ofono_emulator *ofono_emulator_create(struct ofono_modem *modem,
 	return em;
 }
 
+static int card_set_local_remote(struct ofono_handsfree_card *card, int fd)
+{
+	struct sockaddr_rc saddr;
+	socklen_t optlen;
+	char local[18], remote[18];
+	int err;
+
+	memset(&saddr, 0, sizeof(saddr));
+	optlen = sizeof(saddr);
+
+	if (getsockname(fd, (struct sockaddr *) &saddr, &optlen) < 0) {
+		err = errno;
+		ofono_error("RFCOMM getsockname: %s (%d)", strerror(err), err);
+		return -err;
+	}
+
+	bt_ba2str(&saddr.rc_bdaddr, local);
+
+	DBG("local %s", local);
+
+	memset(&saddr, 0, sizeof(saddr));
+	optlen = sizeof(saddr);
+
+	if (getpeername(fd, (struct sockaddr *) &saddr, &optlen) < 0) {
+		err = errno;
+		ofono_error("RFCOMM getpeername: %s (%d)", strerror(err), err);
+		return -err;
+	}
+
+	bt_ba2str(&saddr.rc_bdaddr, remote);
+
+	DBG("remote %s", remote);
+
+	ofono_handsfree_card_set_local(card, local);
+	ofono_handsfree_card_set_remote(card, remote);
+
+	return 0;
+}
+
 int ofono_emulator_create_card(struct ofono_emulator *em, int fd, int version)
 {
 	em->card = ofono_handsfree_card_create(0, NULL, NULL);
 
-	return 0;
+	return card_set_local_remote(em->card, fd);
 }
 
 void ofono_emulator_remove(struct ofono_emulator *em)
-- 
1.7.9.5


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

* [PATCH 6/6] hfp_ag_bluez5: Send fd to card creation
  2013-04-24 17:13 [PATCH 0/6] Add HandsfreeAudioCard to emulator Paulo Borges
                   ` (4 preceding siblings ...)
  2013-04-24 17:13 ` [PATCH 5/6] emulator: Set local and remote address of card Paulo Borges
@ 2013-04-24 17:13 ` Paulo Borges
  5 siblings, 0 replies; 9+ messages in thread
From: Paulo Borges @ 2013-04-24 17:13 UTC (permalink / raw)
  To: ofono

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

---
 plugins/hfp_ag_bluez5.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/plugins/hfp_ag_bluez5.c b/plugins/hfp_ag_bluez5.c
index e971a22..b3017a9 100644
--- a/plugins/hfp_ag_bluez5.c
+++ b/plugins/hfp_ag_bluez5.c
@@ -123,7 +123,7 @@ static DBusMessage *profile_new_connection(DBusConnection *conn,
 
 	ofono_emulator_register(em, fd);
 
-	if (ofono_emulator_create_card(em, 0, 0) < 0) {
+	if (ofono_emulator_create_card(em, fd, 0) < 0) {
 		close(fd);
 		ofono_emulator_remove(em);
 		return g_dbus_create_error(msg, BLUEZ_ERROR_INTERFACE
-- 
1.7.9.5


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

* Re: [PATCH 1/6] include: Add ofono_emulator_create_card()
  2013-04-24 17:13 ` [PATCH 1/6] include: Add ofono_emulator_create_card() Paulo Borges
@ 2013-04-25  8:35   ` Denis Kenzior
  2013-04-25 17:36     ` Paulo Borges
  0 siblings, 1 reply; 9+ messages in thread
From: Denis Kenzior @ 2013-04-25  8:35 UTC (permalink / raw)
  To: ofono

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

Hi Paulo,

On 04/24/2013 12:13 PM, Paulo Borges wrote:
> ---
>   include/emulator.h |    2 ++
>   1 file changed, 2 insertions(+)
>
> diff --git a/include/emulator.h b/include/emulator.h
> index 5cd894b..49168a1 100644
> --- a/include/emulator.h
> +++ b/include/emulator.h
> @@ -74,6 +74,8 @@ void ofono_emulator_register(struct ofono_emulator *em, int fd);
>
>   void ofono_emulator_remove(struct ofono_emulator *em);
>
> +int ofono_emulator_create_card(struct ofono_emulator *em, int fd, int version);
> +

Why do you need the fd argument?  It can be obtained from the 
g_at_server object.  e.g.
GIOChannel *channel = g_at_server_get_channel(server);
fd = g_io_channel_get_unix_fd(channel);

Also, what is the purpose of the version parameter?

>   void ofono_emulator_send_final(struct ofono_emulator *em,
>   				const struct ofono_error *final);
>   void ofono_emulator_send_unsolicited(struct ofono_emulator *em,

Regards,
-Denis

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

* Re: [PATCH 1/6] include: Add ofono_emulator_create_card()
  2013-04-25  8:35   ` Denis Kenzior
@ 2013-04-25 17:36     ` Paulo Borges
  0 siblings, 0 replies; 9+ messages in thread
From: Paulo Borges @ 2013-04-25 17:36 UTC (permalink / raw)
  To: ofono

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

Hi Denis,

On Thu, Apr 25, 2013 at 5:35 AM, Denis Kenzior <denkenz@gmail.com> wrote:
>
>
> Why do you need the fd argument?  It can be obtained from the g_at_server
> object.  e.g.
> GIOChannel *channel = g_at_server_get_channel(**server);
> fd = g_io_channel_get_unix_fd(**channel);
>

You are right, I'll fix it.


> Also, what is the purpose of the version parameter?


In the next patch series I'll need this parameter to set the correct card
driver. So I already put the parameter here to prevent breaking the build.

-- 
Cheers,
Paulo.

[-- Attachment #2: attachment.html --]
[-- Type: text/html, Size: 1228 bytes --]

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

end of thread, other threads:[~2013-04-25 17:36 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-24 17:13 [PATCH 0/6] Add HandsfreeAudioCard to emulator Paulo Borges
2013-04-24 17:13 ` [PATCH 1/6] include: Add ofono_emulator_create_card() Paulo Borges
2013-04-25  8:35   ` Denis Kenzior
2013-04-25 17:36     ` Paulo Borges
2013-04-24 17:13 ` [PATCH 2/6] emulator: Implement ofono_emulator_create_card() Paulo Borges
2013-04-24 17:13 ` [PATCH 3/6] hfp_ag_bluez5: Create card when connect Paulo Borges
2013-04-24 17:13 ` [PATCH 4/6] emulator: Register card when establish SLC Paulo Borges
2013-04-24 17:13 ` [PATCH 5/6] emulator: Set local and remote address of card Paulo Borges
2013-04-24 17:13 ` [PATCH 6/6] hfp_ag_bluez5: Send fd to card creation Paulo Borges

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox