* [PATCH v2 0/9] HSP profile implementation
@ 2011-03-17 18:55 =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 1/9] bluetooth: add functions for sco connection =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (9 more replies)
0 siblings, 10 replies; 18+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau @ 2011-03-17 18:55 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1257 bytes --]
This patch will start providing an HSP profile implementation
in oFono. This is work in progress, and based of what was done for
HFP profile. Finally added the audio connection, that will provide
a base for discussion. To avoid emulator depend upon btio, there is
a callback fom the emulator to the hsp plugin to connect audio,
Some question remains :
* How should pulse audio be notified?
* What is the behavior of hsp when receiving CKPD=200?
Next step will be to dial/hangup a call.
Frédéric Dalleau (9):
bluetooth: add functions for sco connection
emulator: add hsp emulator type
hsp_ag: add hsp atom type
hsp_ag: Initial plugin commit
hsp_ag: add modem watch
emulator: add CKPD support
emulator: add audio connection API
emulator: implement audio connection API
hsp_ag: add audio connection support
Makefile.am | 3 +
include/emulator.h | 8 ++
plugins/bluetooth.c | 122 +++++++++++++++++++++++++++++++
plugins/bluetooth.h | 7 ++
plugins/hsp_ag.c | 200 +++++++++++++++++++++++++++++++++++++++++++++++++++
src/emulator.c | 50 +++++++++++++
src/ofono.h | 1 +
7 files changed, 391 insertions(+), 0 deletions(-)
create mode 100644 plugins/hsp_ag.c
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 1/9] bluetooth: add functions for sco connection
2011-03-17 18:55 [PATCH v2 0/9] HSP profile implementation =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
@ 2011-03-17 18:55 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-18 20:27 ` Denis Kenzior
2011-03-17 18:55 ` [PATCH v2 2/9] emulator: add hsp emulator type =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (8 subsequent siblings)
9 siblings, 1 reply; 18+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau @ 2011-03-17 18:55 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 4307 bytes --]
---
plugins/bluetooth.c | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++
plugins/bluetooth.h | 7 +++
2 files changed, 129 insertions(+), 0 deletions(-)
diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c
index 7c2d5b0..89cc72d 100644
--- a/plugins/bluetooth.c
+++ b/plugins/bluetooth.c
@@ -64,6 +64,14 @@ struct cb_data {
GIOChannel *io;
};
+struct sco {
+ char laddress[18];
+ char raddress[18];
+ guint active_watch;
+ GIOChannel *active;
+ GIOChannel *listening;
+};
+
void bluetooth_create_path(const char *dev_addr, const char *adapter_addr,
char *buf, int size)
{
@@ -932,5 +940,119 @@ void bluetooth_unregister_server(struct server *server)
bluetooth_unref();
}
+static gboolean sco_disconnect_cb(GIOChannel *io, GIOCondition cond,
+ gpointer data)
+{
+ struct sco *sco = data;
+
+ if(cond & (G_IO_HUP | G_IO_ERR | G_IO_NVAL)) {
+ DBG("");
+ sco->active = NULL;
+ sco->active_watch = 0;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void sco_connect_cb(GIOChannel *channel, GError *err, gpointer data)
+{
+ struct sco *sco = data;
+
+ if(err != NULL) {
+ DBG("Failed to connect SCO channel: %s", err->message);
+ return;
+ }
+
+ DBG("sco->active_watch %d sco->active %p sco->listening %p",
+ sco->active_watch, sco->active, sco->listening);
+
+ if(sco->active_watch)
+ return;
+
+ sco->active_watch = g_io_add_watch(channel,
+ G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+ sco_disconnect_cb, data);
+
+ if(sco->active)
+ g_io_channel_unref(sco->active);
+
+ sco->active = channel;
+ g_io_channel_set_close_on_unref(sco->active, TRUE);
+}
+
+void sco_connect(struct sco *sco)
+{
+ GError *err = NULL;
+
+ if(sco->active != NULL)
+ return;
+
+ sco->active = bt_io_connect(BT_IO_SCO, sco_connect_cb, sco,
+ NULL, &err, BT_IO_OPT_SOURCE, sco->laddress,
+ BT_IO_OPT_DEST, sco->raddress, BT_IO_OPT_INVALID);
+
+ if(sco->active)
+ g_io_channel_set_close_on_unref(sco->active, TRUE);
+
+ if(err != NULL) {
+ DBG("Failed to get device address: %s", err->message);
+ g_error_free(err);
+ }
+}
+
+void sco_disconnect(struct sco *sco)
+{
+ if(sco->active == NULL)
+ return;
+
+ g_source_remove(sco->active_watch);
+ sco->active_watch = 0;
+ sco->active = NULL;
+}
+
+struct sco *sco_register_server(GIOChannel *channel)
+{
+ struct sco *sco;
+ GError *err = NULL;
+
+ sco = g_try_malloc0(sizeof(struct sco));
+ if(sco == NULL)
+ return NULL;
+
+ sco->listening = bt_io_listen(BT_IO_SCO, sco_connect_cb, NULL, sco,
+ NULL, &err, BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
+ BT_IO_OPT_INVALID);
+
+ if(err != NULL) {
+ DBG("Failed to listen incoming SCO: %s", err->message);
+ g_error_free(err);
+ err = NULL;
+ }
+
+ if(sco->listening)
+ g_io_channel_set_close_on_unref(sco->listening, TRUE);
+
+ bt_io_get(channel, BT_IO_RFCOMM, &err, BT_IO_OPT_SOURCE, sco->laddress,
+ BT_IO_OPT_DEST, sco->raddress, BT_IO_OPT_INVALID);
+
+ if(err != NULL) {
+ DBG("Failed to get device address: %s", err->message);
+ g_error_free(err);
+ }
+
+ return sco;
+}
+
+void sco_unregister_server(struct sco *sco)
+{
+ sco_disconnect(sco);
+
+ if(sco->listening != NULL)
+ g_io_channel_unref(sco->listening);
+
+ g_free(sco);
+}
+
OFONO_PLUGIN_DEFINE(bluetooth, "Bluetooth Utils Plugins", VERSION,
OFONO_PLUGIN_PRIORITY_DEFAULT, NULL, NULL)
diff --git a/plugins/bluetooth.h b/plugins/bluetooth.h
index 505d908..ba88e96 100644
--- a/plugins/bluetooth.h
+++ b/plugins/bluetooth.h
@@ -42,6 +42,8 @@ struct bluetooth_profile {
struct server;
+struct sco;
+
typedef void (*ConnectFunc)(GIOChannel *io, GError *err, gpointer user_data);
int bluetooth_register_uuid(const char *uuid,
@@ -52,6 +54,11 @@ struct server *bluetooth_register_server(guint8 channel, const char *sdp_record,
ConnectFunc cb, gpointer user_data);
void bluetooth_unregister_server(struct server *server);
+void sco_connect(struct sco *sco);
+void sco_disconnect(struct sco *sco);
+struct sco *sco_register_server(GIOChannel *channel);
+void sco_unregister_server(struct sco *sco);
+
void bluetooth_create_path(const char *dev_addr, const char *adapter_addr,
char *buf, int size);
--
1.7.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 2/9] emulator: add hsp emulator type
2011-03-17 18:55 [PATCH v2 0/9] HSP profile implementation =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 1/9] bluetooth: add functions for sco connection =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
@ 2011-03-17 18:55 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 3/9] hsp_ag: add hsp atom type =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (7 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau @ 2011-03-17 18:55 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 447 bytes --]
---
include/emulator.h | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/include/emulator.h b/include/emulator.h
index 71b7c24..e010606 100644
--- a/include/emulator.h
+++ b/include/emulator.h
@@ -42,6 +42,7 @@ struct ofono_emulator_request;
enum ofono_emulator_type {
OFONO_EMULATOR_TYPE_DUN,
OFONO_EMULATOR_TYPE_HFP,
+ OFONO_EMULATOR_TYPE_HSP,
};
enum ofono_emulator_request_type {
--
1.7.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 3/9] hsp_ag: add hsp atom type
2011-03-17 18:55 [PATCH v2 0/9] HSP profile implementation =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 1/9] bluetooth: add functions for sco connection =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 2/9] emulator: add hsp emulator type =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
@ 2011-03-17 18:55 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 4/9] hsp_ag: Initial plugin commit =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (6 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau @ 2011-03-17 18:55 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1313 bytes --]
---
src/emulator.c | 4 ++++
src/ofono.h | 1 +
2 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/src/emulator.c b/src/emulator.c
index c84f0a9..ce3fabd 100644
--- a/src/emulator.c
+++ b/src/emulator.c
@@ -470,6 +470,8 @@ void ofono_emulator_register(struct ofono_emulator *em, int fd)
g_at_server_register(em->server, "D", dial_cb, em, NULL);
else if (em->type == OFONO_EMULATOR_TYPE_HFP)
g_at_server_set_echo(em->server, FALSE);
+ else if (em->type == OFONO_EMULATOR_TYPE_HSP)
+ g_at_server_set_echo(em->server, FALSE);
}
static void emulator_remove(struct ofono_atom *atom)
@@ -493,6 +495,8 @@ struct ofono_emulator *ofono_emulator_create(struct ofono_modem *modem,
atom_t = OFONO_ATOM_TYPE_EMULATOR_DUN;
else if (type == OFONO_EMULATOR_TYPE_HFP)
atom_t = OFONO_ATOM_TYPE_EMULATOR_HFP;
+ else if (type == OFONO_EMULATOR_TYPE_HSP)
+ atom_t = OFONO_ATOM_TYPE_EMULATOR_HSP;
else
return NULL;
diff --git a/src/ofono.h b/src/ofono.h
index 1628df3..f294b87 100644
--- a/src/ofono.h
+++ b/src/ofono.h
@@ -130,6 +130,7 @@ enum ofono_atom_type {
OFONO_ATOM_TYPE_SIM_AUTH,
OFONO_ATOM_TYPE_EMULATOR_DUN,
OFONO_ATOM_TYPE_EMULATOR_HFP,
+ OFONO_ATOM_TYPE_EMULATOR_HSP,
OFONO_ATOM_TYPE_LOCATION_REPORTING,
};
--
1.7.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 4/9] hsp_ag: Initial plugin commit
2011-03-17 18:55 [PATCH v2 0/9] HSP profile implementation =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (2 preceding siblings ...)
2011-03-17 18:55 ` [PATCH v2 3/9] hsp_ag: add hsp atom type =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
@ 2011-03-17 18:55 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 5/9] hsp_ag: add modem watch =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (5 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau @ 2011-03-17 18:55 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 3900 bytes --]
---
Makefile.am | 3 +
plugins/hsp_ag.c | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 118 insertions(+), 0 deletions(-)
create mode 100644 plugins/hsp_ag.c
diff --git a/Makefile.am b/Makefile.am
index 79bf364..50e7e96 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -335,6 +335,9 @@ builtin_sources += plugins/hfp_ag.c plugins/bluetooth.h
builtin_modules += dun_gw
builtin_sources += plugins/dun_gw.c plugins/bluetooth.h
+builtin_modules += hsp_ag
+builtin_sources += plugins/hsp_ag.c plugins/bluetooth.h
+
builtin_sources += $(btio_sources)
builtin_cflags += @BLUEZ_CFLAGS@
builtin_libadd += @BLUEZ_LIBS@
diff --git a/plugins/hsp_ag.c b/plugins/hsp_ag.c
new file mode 100644
index 0000000..a8e6f40
--- /dev/null
+++ b/plugins/hsp_ag.c
@@ -0,0 +1,115 @@
+/*
+ *
+ * oFono - Open Source Telephony
+ *
+ * Copyright (C) 2011 Intel Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+#include <glib.h>
+#include <gatchat.h>
+#include <gattty.h>
+#include <gdbus.h>
+#include <ofono.h>
+
+#define OFONO_API_SUBJECT_TO_CHANGE
+#include <ofono/plugin.h>
+#include <ofono/log.h>
+#include <ofono/modem.h>
+#include <ofono/netreg.h>
+#include <ofono/voicecall.h>
+#include <ofono/call-volume.h>
+
+#include <ofono/dbus.h>
+
+#include "bluetooth.h"
+
+#define HSP_RFCOMM_CHAN 17
+
+static struct server *hsp;
+
+static const gchar *hsp_record =
+"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
+"<record>\n"
+" <attribute id=\"0x0000\">\n"
+" <uint32 value=\"0x00010006\" />\n"
+" </attribute>\n"
+" <attribute id=\"0x0001\">\n"
+" <sequence>\n"
+" <uuid value=\"0x1112\" />\n"
+" <uuid value=\"0x1203\" />\n"
+" </sequence>\n"
+" </attribute>\n"
+" <attribute id=\"0x0004\">\n"
+" <sequence>\n"
+" <sequence>\n"
+" <uuid value=\"0x0100\" />\n"
+" </sequence>\n"
+" <sequence>\n"
+" <uuid value=\"0x0003\" />\n"
+" <uint8 value=\"17\" name=\"channel\" />\n"
+" </sequence>\n"
+" </sequence>\n"
+" </attribute>\n"
+" <attribute id=\"0x0005\">\n"
+" <sequence>\n"
+" <uuid value=\"0x1002\" />\n"
+" </sequence>\n"
+" </attribute>\n"
+" <attribute id=\"0x0009\">\n"
+" <sequence>\n"
+" <sequence>\n"
+" <uuid value=\"0x1108\" />\n"
+" <uint16 value=\"0x0102\" />\n"
+" </sequence>\n"
+" </sequence>\n"
+" </attribute>\n"
+" <attribute id=\"0x0100\">\n"
+" <text value=\"Headset Audio Gateway\" />\n"
+" </attribute>\n"
+"</record>\n";
+
+static void connect_cb(GIOChannel *channel, GError *err, gpointer user_data)
+{
+}
+
+static int hsp_ag_init(void)
+{
+ hsp = bluetooth_register_server(HSP_RFCOMM_CHAN, hsp_record, connect_cb, NULL);
+
+ if(!hsp)
+ return -1;
+
+ DBG("HSP Gateway profile starting");
+ return 0;
+}
+
+static void hsp_ag_exit(void)
+{
+ if(hsp)
+ bluetooth_unregister_server(hsp);
+}
+
+OFONO_PLUGIN_DEFINE(hsp_ag, "Headset Gateway Profile", VERSION,
+ OFONO_PLUGIN_PRIORITY_DEFAULT, hsp_ag_init, hsp_ag_exit)
--
1.7.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 5/9] hsp_ag: add modem watch
2011-03-17 18:55 [PATCH v2 0/9] HSP profile implementation =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (3 preceding siblings ...)
2011-03-17 18:55 ` [PATCH v2 4/9] hsp_ag: Initial plugin commit =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
@ 2011-03-17 18:55 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 6/9] emulator: add CKPD support =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (4 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau @ 2011-03-17 18:55 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 2845 bytes --]
---
plugins/hsp_ag.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 67 insertions(+), 9 deletions(-)
diff --git a/plugins/hsp_ag.c b/plugins/hsp_ag.c
index a8e6f40..5a60269 100644
--- a/plugins/hsp_ag.c
+++ b/plugins/hsp_ag.c
@@ -47,7 +47,9 @@
#define HSP_RFCOMM_CHAN 17
-static struct server *hsp;
+static struct server *server;
+static guint modemwatch_id;
+static GList *modems;
static const gchar *hsp_record =
"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
@@ -90,25 +92,81 @@ static const gchar *hsp_record =
" </attribute>\n"
"</record>\n";
-static void connect_cb(GIOChannel *channel, GError *err, gpointer user_data)
+static void connect_cb(GIOChannel *channel, GError *err, gpointer data)
+{ int fd;
+ struct ofono_emulator *em;
+ struct ofono_modem *modem;
+
+ /* Pick the first powered modem */
+ modem = modems->data;
+ DBG("Picked modem %p for emulator", modem);
+
+ em = ofono_emulator_create(modem, OFONO_EMULATOR_TYPE_HSP);
+ if (em == NULL)
+ return;
+
+ fd = g_io_channel_unix_get_fd(channel);
+
+ ofono_emulator_register(em, fd);
+
+ g_io_channel_set_close_on_unref(channel, FALSE);
+}
+
+static void voicecall_watch(struct ofono_atom *atom,
+ enum ofono_atom_watch_condition cond,
+ void *data)
{
+ struct ofono_modem *modem = data;
+
+ if (cond == OFONO_ATOM_WATCH_CONDITION_REGISTERED) {
+ modems = g_list_append(modems, modem);
+
+ if (modems->next == NULL)
+ server = bluetooth_register_server(HSP_RFCOMM_CHAN,
+ hsp_record,
+ connect_cb,
+ NULL);
+ } else {
+ modems = g_list_remove(modems, modem);
+ if (modems == NULL && server != NULL) {
+ bluetooth_unregister_server(server);
+ server = NULL;
+ }
+ }
}
-static int hsp_ag_init(void)
+static void modem_watch(struct ofono_modem *modem, gboolean added, void *user)
{
- hsp = bluetooth_register_server(HSP_RFCOMM_CHAN, hsp_record, connect_cb, NULL);
+ DBG("modem: %p, added: %d", modem, added);
- if(!hsp)
- return -1;
+ if (added == FALSE)
+ return;
+
+ __ofono_modem_add_atom_watch(modem, OFONO_ATOM_TYPE_VOICECALL,
+ voicecall_watch, modem, NULL);
+}
+
+static void call_modemwatch(struct ofono_modem *modem, void *user)
+{
+ modem_watch(modem, TRUE, user);
+}
+
+static int hsp_ag_init(void)
+{
+ modemwatch_id = __ofono_modemwatch_add(modem_watch, NULL, NULL);
+ __ofono_modem_foreach(call_modemwatch, NULL);
- DBG("HSP Gateway profile starting");
return 0;
}
static void hsp_ag_exit(void)
{
- if(hsp)
- bluetooth_unregister_server(hsp);
+ __ofono_modemwatch_remove(modemwatch_id);
+
+ if (server) {
+ bluetooth_unregister_server(server);
+ server = NULL;
+ }
}
OFONO_PLUGIN_DEFINE(hsp_ag, "Headset Gateway Profile", VERSION,
--
1.7.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 6/9] emulator: add CKPD support
2011-03-17 18:55 [PATCH v2 0/9] HSP profile implementation =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (4 preceding siblings ...)
2011-03-17 18:55 ` [PATCH v2 5/9] hsp_ag: add modem watch =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
@ 2011-03-17 18:55 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-18 20:25 ` Denis Kenzior
2011-03-17 18:55 ` [PATCH v2 7/9] emulator: add audio connection API =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (3 subsequent siblings)
9 siblings, 1 reply; 18+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau @ 2011-03-17 18:55 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1476 bytes --]
---
src/emulator.c | 30 ++++++++++++++++++++++++++++++
1 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/src/emulator.c b/src/emulator.c
index ce3fabd..1d4fbc6 100644
--- a/src/emulator.c
+++ b/src/emulator.c
@@ -387,6 +387,34 @@ fail:
}
}
+static void ckpd_cb(GAtServer *server, GAtServerRequestType type,
+ GAtResult *result, gpointer user_data)
+{
+ switch (type) {
+ case G_AT_SERVER_REQUEST_TYPE_SET:
+ {
+ GAtResultIter iter;
+ int key;
+ g_at_result_iter_init(&iter, result);
+ g_at_result_iter_next(&iter, "");
+
+ if (g_at_result_iter_next_number(&iter, &key) == FALSE)
+ goto fail;
+
+ if (key != 200)
+ goto fail;
+
+ g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
+ break;
+ }
+
+ default:
+fail:
+ g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR);
+ break;
+ }
+}
+
static void emulator_add_indicator(struct ofono_emulator *em, const char* name,
int min, int max, int dflt)
{
@@ -462,6 +490,8 @@ void ofono_emulator_register(struct ofono_emulator *em, int fd)
g_at_server_register(em->server, "+BRSF", brsf_cb, em, NULL);
g_at_server_register(em->server, "+CIND", cind_cb, em, NULL);
g_at_server_register(em->server, "+CMER", cmer_cb, em, NULL);
+ } else if (em->type == OFONO_EMULATOR_TYPE_HSP) {
+ g_at_server_register(em->server, "+CKPD", ckpd_cb, em, NULL);
}
__ofono_atom_register(em->atom, emulator_unregister);
--
1.7.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 7/9] emulator: add audio connection API
2011-03-17 18:55 [PATCH v2 0/9] HSP profile implementation =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (5 preceding siblings ...)
2011-03-17 18:55 ` [PATCH v2 6/9] emulator: add CKPD support =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
@ 2011-03-17 18:55 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 8/9] emulator: implement " =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (2 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau @ 2011-03-17 18:55 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 985 bytes --]
---
include/emulator.h | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/include/emulator.h b/include/emulator.h
index e010606..1657f56 100644
--- a/include/emulator.h
+++ b/include/emulator.h
@@ -56,6 +56,9 @@ typedef void (*ofono_emulator_request_cb_t)(struct ofono_emulator *em,
struct ofono_emulator_request *req,
void *data);
+typedef void (*ofono_emulator_audio_conn_cb_t)(struct ofono_emulator *em,
+ void *data);
+
struct ofono_emulator *ofono_emulator_create(struct ofono_modem *modem,
enum ofono_emulator_type type);
@@ -94,6 +97,10 @@ enum ofono_emulator_request_type ofono_emulator_request_get_type(
void ofono_emulator_set_indicator(struct ofono_emulator *em,
const char *name, int value);
+void ofono_emulator_set_audio_connect_handler(struct ofono_emulator *em,
+ ofono_emulator_audio_conn_cb_t cb,
+ void *user_data);
+
#ifdef __cplusplus
}
#endif
--
1.7.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 8/9] emulator: implement audio connection API
2011-03-17 18:55 [PATCH v2 0/9] HSP profile implementation =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (6 preceding siblings ...)
2011-03-17 18:55 ` [PATCH v2 7/9] emulator: add audio connection API =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
@ 2011-03-17 18:55 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 9/9] hsp_ag: add audio connection support =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-21 12:53 ` [PATCH v2 0/9] HSP profile implementation Luiz Augusto von Dentz
9 siblings, 0 replies; 18+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau @ 2011-03-17 18:55 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1298 bytes --]
---
src/emulator.c | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/src/emulator.c b/src/emulator.c
index 1d4fbc6..2f39599 100644
--- a/src/emulator.c
+++ b/src/emulator.c
@@ -49,6 +49,9 @@ struct ofono_emulator {
int events_mode;
gboolean events_ind;
GSList *indicators;
+ void *user_data;
+ ofono_emulator_audio_conn_cb_t conn_cb;
+ void *conn_user_data;
};
struct indicator {
@@ -390,6 +393,8 @@ fail:
static void ckpd_cb(GAtServer *server, GAtServerRequestType type,
GAtResult *result, gpointer user_data)
{
+ struct ofono_emulator *em = user_data;
+
switch (type) {
case G_AT_SERVER_REQUEST_TYPE_SET:
{
@@ -404,6 +409,9 @@ static void ckpd_cb(GAtServer *server, GAtServerRequestType type,
if (key != 200)
goto fail;
+ if(em->conn_cb != NULL)
+ em->conn_cb(em, em->conn_user_data);
+
g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
break;
}
@@ -734,3 +742,11 @@ void ofono_emulator_set_indicator(struct ofono_emulator *em,
return;
}
}
+
+void ofono_emulator_set_audio_connect_handler(struct ofono_emulator *em,
+ ofono_emulator_audio_conn_cb_t cb,
+ void *user_data)
+{
+ em->conn_cb = cb;
+ em->conn_user_data = user_data;
+}
--
1.7.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 9/9] hsp_ag: add audio connection support
2011-03-17 18:55 [PATCH v2 0/9] HSP profile implementation =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (7 preceding siblings ...)
2011-03-17 18:55 ` [PATCH v2 8/9] emulator: implement " =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
@ 2011-03-17 18:55 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-21 12:53 ` [PATCH v2 0/9] HSP profile implementation Luiz Augusto von Dentz
9 siblings, 0 replies; 18+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau @ 2011-03-17 18:55 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1435 bytes --]
---
plugins/hsp_ag.c | 27 +++++++++++++++++++++++++++
1 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/plugins/hsp_ag.c b/plugins/hsp_ag.c
index 5a60269..73050aa 100644
--- a/plugins/hsp_ag.c
+++ b/plugins/hsp_ag.c
@@ -92,10 +92,30 @@ static const gchar *hsp_record =
" </attribute>\n"
"</record>\n";
+static gboolean sco_unregister_cb(GIOChannel *channel,
+ GIOCondition cond, gpointer data)
+{
+ struct sco *sco = data;
+
+ if (cond & (G_IO_NVAL | G_IO_ERR | G_IO_HUP)) {
+ sco_unregister_server(sco);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void audio_connect_cb(struct ofono_emulator *em, void *data)
+{
+ struct sco *sco = data;
+ sco_connect(sco);
+}
+
static void connect_cb(GIOChannel *channel, GError *err, gpointer data)
{ int fd;
struct ofono_emulator *em;
struct ofono_modem *modem;
+ struct sco *sco;
/* Pick the first powered modem */
modem = modems->data;
@@ -110,6 +130,13 @@ static void connect_cb(GIOChannel *channel, GError *err, gpointer data)
ofono_emulator_register(em, fd);
g_io_channel_set_close_on_unref(channel, FALSE);
+
+ sco = sco_register_server(channel);
+
+ ofono_emulator_set_audio_connect_handler(em, audio_connect_cb, sco);
+
+ g_io_add_watch(channel, G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+ sco_unregister_cb, sco);
}
static void voicecall_watch(struct ofono_atom *atom,
--
1.7.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH v2 6/9] emulator: add CKPD support
2011-03-17 18:55 ` [PATCH v2 6/9] emulator: add CKPD support =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
@ 2011-03-18 20:25 ` Denis Kenzior
2011-03-21 18:15 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
0 siblings, 1 reply; 18+ messages in thread
From: Denis Kenzior @ 2011-03-18 20:25 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1717 bytes --]
Hi Frédéric,
On 03/17/2011 01:55 PM, Frédéric Dalleau wrote:
> ---
> src/emulator.c | 30 ++++++++++++++++++++++++++++++
> 1 files changed, 30 insertions(+), 0 deletions(-)
>
> diff --git a/src/emulator.c b/src/emulator.c
> index ce3fabd..1d4fbc6 100644
> --- a/src/emulator.c
> +++ b/src/emulator.c
> @@ -387,6 +387,34 @@ fail:
> }
> }
>
> +static void ckpd_cb(GAtServer *server, GAtServerRequestType type,
> + GAtResult *result, gpointer user_data)
> +{
> + switch (type) {
> + case G_AT_SERVER_REQUEST_TYPE_SET:
> + {
> + GAtResultIter iter;
> + int key;
> + g_at_result_iter_init(&iter, result);
> + g_at_result_iter_next(&iter, "");
> +
> + if (g_at_result_iter_next_number(&iter, &key) == FALSE)
> + goto fail;
> +
> + if (key != 200)
> + goto fail;
> +
> + g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
> + break;
> + }
> +
> + default:
> +fail:
> + g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR);
> + break;
> + }
> +}
Do you have a plan on what to do with these key presses?
> +
> static void emulator_add_indicator(struct ofono_emulator *em, const char* name,
> int min, int max, int dflt)
> {
> @@ -462,6 +490,8 @@ void ofono_emulator_register(struct ofono_emulator *em, int fd)
> g_at_server_register(em->server, "+BRSF", brsf_cb, em, NULL);
> g_at_server_register(em->server, "+CIND", cind_cb, em, NULL);
> g_at_server_register(em->server, "+CMER", cmer_cb, em, NULL);
> + } else if (em->type == OFONO_EMULATOR_TYPE_HSP) {
> + g_at_server_register(em->server, "+CKPD", ckpd_cb, em, NULL);
> }
>
> __ofono_atom_register(em->atom, emulator_unregister);
Regards,
-Denis
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 1/9] bluetooth: add functions for sco connection
2011-03-17 18:55 ` [PATCH v2 1/9] bluetooth: add functions for sco connection =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
@ 2011-03-18 20:27 ` Denis Kenzior
2011-03-19 11:06 ` Johan Hedberg
0 siblings, 1 reply; 18+ messages in thread
From: Denis Kenzior @ 2011-03-18 20:27 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 514 bytes --]
Hi Frédéric,
On 03/17/2011 01:55 PM, Frédéric Dalleau wrote:
> ---
> plugins/bluetooth.c | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++
> plugins/bluetooth.h | 7 +++
> 2 files changed, 129 insertions(+), 0 deletions(-)
>
So before you run too far with this I suggest you speak to Marcel and
Johan on whether handling SCO audio inside oFono is a good idea.
Personally I'd rather see this piece remain inside BlueZ, but I'm no
longer an expert in this area.
Regards,
-Denis
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 1/9] bluetooth: add functions for sco connection
2011-03-18 20:27 ` Denis Kenzior
@ 2011-03-19 11:06 ` Johan Hedberg
2011-03-21 17:08 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
0 siblings, 1 reply; 18+ messages in thread
From: Johan Hedberg @ 2011-03-19 11:06 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1054 bytes --]
Hi,
On Fri, Mar 18, 2011, Denis Kenzior wrote:
> > ---
> > plugins/bluetooth.c | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++
> > plugins/bluetooth.h | 7 +++
> > 2 files changed, 129 insertions(+), 0 deletions(-)
>
> So before you run too far with this I suggest you speak to Marcel and
> Johan on whether handling SCO audio inside oFono is a good idea.
> Personally I'd rather see this piece remain inside BlueZ, but I'm no
> longer an expert in this area.
AFAIK the plan is still to have only one interface towards PulseAudio as
far as Bluetooth audio is concerned, and that's the Media interface in
BlueZ. So oFono shouldn't need any SCO support as such. What will be
needed though is for oFono to indicate to BlueZ once the SLC
establishment signaling commands are complete (so SCO connections are
neither accepted nor initiated before that) as well as for BlueZ to
indicate to oFono when SCO has been established (so e.g. RING
indications aren't sent prematurely in the case of in-band ring tone).
Johan
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 0/9] HSP profile implementation
2011-03-17 18:55 [PATCH v2 0/9] HSP profile implementation =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
` (8 preceding siblings ...)
2011-03-17 18:55 ` [PATCH v2 9/9] hsp_ag: add audio connection support =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
@ 2011-03-21 12:53 ` Luiz Augusto von Dentz
2011-03-21 18:10 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
9 siblings, 1 reply; 18+ messages in thread
From: Luiz Augusto von Dentz @ 2011-03-21 12:53 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 2713 bytes --]
Hi Frederic,
2011/3/17 Frédéric Dalleau <frederic.dalleau@linux.intel.com>:
> This patch will start providing an HSP profile implementation
> in oFono. This is work in progress, and based of what was done for
> HFP profile. Finally added the audio connection, that will provide
> a base for discussion. To avoid emulator depend upon btio, there is
> a callback fom the emulator to the hsp plugin to connect audio,
>
> Some question remains :
>
> * How should pulse audio be notified?
I suppose we should use the Media API to notify PA, it is already
upstream, in that case oFono doesn't need to deal with SCO at all. If
that is the plan then I suggest we first define a D-Bus spec on how to
signal things like SLC and NREC to BlueZ, the record and socket
listening/connection handling logic could also be done in BlueZ side
so we use D-Bus to transfer the fd to oFono.
> * What is the behavior of hsp when receiving CKPD=200?
This is what oFono does in BlueZ:
void telephony_key_press_req(void *telephony_device, const char *keys)
{
struct voice_call *active, *waiting;
int err;
DBG("telephony-ofono: got key press request for %s", keys);
waiting = find_vc_with_status(CALL_STATUS_INCOMING);
if (!waiting)
waiting = find_vc_with_status(CALL_STATUS_DIALING);
active = find_vc_with_status(CALL_STATUS_ACTIVE);
if (waiting)
err = answer_call(waiting);
else if (active)
err = release_call(active);
else
err = 0;
if (err < 0)
telephony_key_press_rsp(telephony_device,
CME_ERROR_AG_FAILURE);
else
telephony_key_press_rsp(telephony_device, CME_ERROR_NONE);
}
> Next step will be to dial/hangup a call.
>
> Frédéric Dalleau (9):
> bluetooth: add functions for sco connection
> emulator: add hsp emulator type
> hsp_ag: add hsp atom type
> hsp_ag: Initial plugin commit
> hsp_ag: add modem watch
> emulator: add CKPD support
> emulator: add audio connection API
> emulator: implement audio connection API
> hsp_ag: add audio connection support
>
> Makefile.am | 3 +
> include/emulator.h | 8 ++
> plugins/bluetooth.c | 122 +++++++++++++++++++++++++++++++
> plugins/bluetooth.h | 7 ++
> plugins/hsp_ag.c | 200 +++++++++++++++++++++++++++++++++++++++++++++++++++
> src/emulator.c | 50 +++++++++++++
> src/ofono.h | 1 +
> 7 files changed, 391 insertions(+), 0 deletions(-)
> create mode 100644 plugins/hsp_ag.c
>
> _______________________________________________
> ofono mailing list
> ofono(a)ofono.org
> http://lists.ofono.org/listinfo/ofono
>
--
Luiz Augusto von Dentz
Computer Engineer
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 1/9] bluetooth: add functions for sco connection
2011-03-19 11:06 ` Johan Hedberg
@ 2011-03-21 17:08 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
0 siblings, 0 replies; 18+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau @ 2011-03-21 17:08 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 467 bytes --]
Hi Johan,
> AFAIK the plan is still to have only one interface towards PulseAudio as
> far as Bluetooth audio is concerned, and that's the Media interface in
> BlueZ. So oFono shouldn't need any SCO support as such.
Thanks for feedback,
My understanding was that profiles had to be prototyped using btio, then
moving to use bluez over dbus similar to hfp handsfree implementation. I
have no real idea when this transition could occur...
Frédéric
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 0/9] HSP profile implementation
2011-03-21 12:53 ` [PATCH v2 0/9] HSP profile implementation Luiz Augusto von Dentz
@ 2011-03-21 18:10 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
0 siblings, 0 replies; 18+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau @ 2011-03-21 18:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 679 bytes --]
Hi Luiz,
> that is the plan then I suggest we first define a D-Bus spec on how to
> signal things like SLC and NREC to BlueZ, the record and socket
> listening/connection handling logic could also be done in BlueZ side
> so we use D-Bus to transfer the fd to oFono.
I didn't expect that yet, but if everybody agrees, why not!
>> * What is the behavior of hsp when receiving CKPD=200?
> This is what oFono does in BlueZ:
> if (waiting)
> err = answer_call(waiting);
> else if (active)
> err = release_call(active);
> else
> err = 0;
I'm fine with it!
If there is no call setup, is it worth trying to enable voice recognition?
Thanks,
Frédéric
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 6/9] emulator: add CKPD support
2011-03-18 20:25 ` Denis Kenzior
@ 2011-03-21 18:15 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-21 18:28 ` Denis Kenzior
0 siblings, 1 reply; 18+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau @ 2011-03-21 18:15 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 369 bytes --]
On 03/18/2011 09:25 PM, Denis Kenzior wrote:
> Do you have a plan on what to do with these key presses?
I was thinking about "Answer incoming call, audio transfer, and some
funky double tap to release active call", but luiz suggested "Answer
incoming call and release active call".
Are you trying to tell me this should go into voice call atom?
Frédéric
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 6/9] emulator: add CKPD support
2011-03-21 18:15 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
@ 2011-03-21 18:28 ` Denis Kenzior
0 siblings, 0 replies; 18+ messages in thread
From: Denis Kenzior @ 2011-03-21 18:28 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 621 bytes --]
Hi Frédéric,
On 03/21/2011 01:15 PM, Frédéric Dalleau wrote:
> On 03/18/2011 09:25 PM, Denis Kenzior wrote:
>> Do you have a plan on what to do with these key presses?
> I was thinking about "Answer incoming call, audio transfer, and some
> funky double tap to release active call", but luiz suggested "Answer
> incoming call and release active call".
>
> Are you trying to tell me this should go into voice call atom?
No, I was just wondering. I have not spent any time thinking of HSP,
but you also have to remember that there might be potential VoIP
usecases with it as well.
Regards,
-Denis
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2011-03-21 18:28 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-17 18:55 [PATCH v2 0/9] HSP profile implementation =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 1/9] bluetooth: add functions for sco connection =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-18 20:27 ` Denis Kenzior
2011-03-19 11:06 ` Johan Hedberg
2011-03-21 17:08 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 2/9] emulator: add hsp emulator type =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 3/9] hsp_ag: add hsp atom type =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 4/9] hsp_ag: Initial plugin commit =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 5/9] hsp_ag: add modem watch =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 6/9] emulator: add CKPD support =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-18 20:25 ` Denis Kenzior
2011-03-21 18:15 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-21 18:28 ` Denis Kenzior
2011-03-17 18:55 ` [PATCH v2 7/9] emulator: add audio connection API =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 8/9] emulator: implement " =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-17 18:55 ` [PATCH v2 9/9] hsp_ag: add audio connection support =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
2011-03-21 12:53 ` [PATCH v2 0/9] HSP profile implementation Luiz Augusto von Dentz
2011-03-21 18:10 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Dalleau
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.