Linux bluetooth development
 help / color / mirror / Atom feed
* [PATCH BlueZ 7/8] hog: Rename hog_device_register
From: Andre Guedes @ 2012-12-18 18:49 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1355856590-19222-1-git-send-email-andre.guedes@openbossa.org>

This patch renames hog_device_register function to hog_register_device.
---
 profiles/input/hog.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/profiles/input/hog.c b/profiles/input/hog.c
index 8d8f804..fa8069c 100644
--- a/profiles/input/hog.c
+++ b/profiles/input/hog.c
@@ -716,7 +716,7 @@ static void hog_free_device(struct hog_device *hogdev)
 	g_free(hogdev);
 }
 
-static struct hog_device *hog_device_register(struct btd_device *device,
+static struct hog_device *hog_register_device(struct btd_device *device,
 						struct gatt_primary *prim)
 {
 	struct hog_device *hogdev;
@@ -841,7 +841,7 @@ static int hog_probe(struct btd_profile *p, struct btd_device *device,
 		if (strcmp(prim->uuid, HOG_UUID) != 0)
 			continue;
 
-		hogdev = hog_device_register(device, prim);
+		hogdev = hog_register_device(device, prim);
 		if (hogdev == NULL)
 			continue;
 
-- 
1.8.0.1


^ permalink raw reply related

* [PATCH BlueZ 8/8] hog: Rename hog_device_unregister
From: Andre Guedes @ 2012-12-18 18:49 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1355856590-19222-1-git-send-email-andre.guedes@openbossa.org>

This patch renames hog_device_unregister function to hog_device_
unregister.
---
 profiles/input/hog.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/profiles/input/hog.c b/profiles/input/hog.c
index fa8069c..b6ac61d 100644
--- a/profiles/input/hog.c
+++ b/profiles/input/hog.c
@@ -753,7 +753,7 @@ static struct hog_device *hog_register_device(struct btd_device *device,
 	return hogdev;
 }
 
-static int hog_device_unregister(struct hog_device *hogdev)
+static int hog_unregister_device(struct hog_device *hogdev)
 {
 	struct uhid_event ev;
 
@@ -860,7 +860,7 @@ static void remove_device(gpointer a, gpointer b)
 		return;
 
 	devices = g_slist_remove(devices, hogdev);
-	hog_device_unregister(hogdev);
+	hog_unregister_device(hogdev);
 }
 
 static void hog_remove(struct btd_profile *p, struct btd_device *device)
-- 
1.8.0.1


^ permalink raw reply related

* [PATCH BlueZ] monitor: Add support for parsing Flow Control Lag flags
From: Vinicius Costa Gomes @ 2012-12-18 19:48 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Vinicius Costa Gomes

---
 monitor/packet.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/monitor/packet.c b/monitor/packet.c
index 1ca94e8..fb2d8d7 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -1146,6 +1146,9 @@ static const struct features_data features_page0[] = {
 	{ 17, "Paging parameter negotiation"		},
 	{ 18, "Power control"				},
 	{ 19, "Transparent synchronous data"		},
+	{ 20, "Flow control lag (least significant bit)"},
+	{ 21, "Flow control lag (middle bit)"		},
+	{ 22, "Flow control lag (most significant bit)"	},
 	{ 23, "Broadcast Encryption"			},
 	{ 25, "Enhanced Data Rate ACL 2 Mbps mode"	},
 	{ 26, "Enhanced Data Rate ACL 3 Mbps mode"	},
-- 
1.8.0.1


^ permalink raw reply related

* Re: [PATCH BlueZ 8/8] hog: Rename hog_device_unregister
From: Anderson Lizardo @ 2012-12-18 20:13 UTC (permalink / raw)
  To: Andre Guedes; +Cc: linux-bluetooth
In-Reply-To: <1355856590-19222-8-git-send-email-andre.guedes@openbossa.org>

Hi Guedes,

On Tue, Dec 18, 2012 at 2:49 PM, Andre Guedes
<andre.guedes@openbossa.org> wrote:
> This patch renames hog_device_unregister function to hog_device_
> unregister.

Minor typo:   "hog_device_ unregister" -> "hog_unregister_device".

Regards,
-- 
Anderson Lizardo
Instituto Nokia de Tecnologia - INdT
Manaus - Brazil

^ permalink raw reply

* Re: PulseAudio branch to test BlueZ master
From: Vinicius Costa Gomes @ 2012-12-18 20:24 UTC (permalink / raw)
  To: Mikel Astiz; +Cc: linux-bluetooth, Tanu Kaskinen
In-Reply-To: <CANT-zCVXOjncycx6GSghO6T5y3TEM0FDA1Ke3W8FZSE=ZOhbVQ@mail.gmail.com>

Hi Mikel,

On 11:19 Tue 18 Dec, Mikel Astiz wrote:
> On the other hand, A2DP is not working for me any more. I think this
> might be an unrelated issue, probably a regression in BlueZ, but I
> have to do further research.
> 

This problem may have been caused by me :-) The commit "bluetooth: Add
HFP 1.6 codec ID" was buggy, and was registering the A2DP endpoint with
the wrong codec. Sorry about that. I pushed an updated version to my
fork of pulseaudio[1].


Cheers,
-- 
Vinicius

[1] git://github.com/vcgomes/pulseaudio-bluez5.git 


^ permalink raw reply

* [PATCH BlueZ 1/3] core: Fix trying to store NULL adapter->name
From: Anderson Lizardo @ 2012-12-19  1:16 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Anderson Lizardo

When BlueZ starts without a main.conf, adapter->name will be initially
NULL, until adapter_name_changed() is called and name is set to "BlueZ".

Before this, store_adapter_info() will try to access a NULL pointer.

Fixes this GLib error:

(bluetoothd:1721): GLib-CRITICAL **: g_key_file_set_string: assertion
`string != NULL' failed
---
 src/adapter.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/adapter.c b/src/adapter.c
index 9b83afe..d62b0fe 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -193,7 +193,9 @@ static void store_adapter_info(struct btd_adapter *adapter)
 
 	key_file = g_key_file_new();
 
-	g_key_file_set_string(key_file, "General", "Name", adapter->name);
+	if (adapter->name)
+		g_key_file_set_string(key_file, "General", "Name",
+								adapter->name);
 
 	g_key_file_set_boolean(key_file, "General", "Pairable",
 				adapter->pairable);
-- 
1.7.9.5


^ permalink raw reply related

* [PATCH BlueZ 2/3] core: Remove bogus DBG()
From: Anderson Lizardo @ 2012-12-19  1:16 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Anderson Lizardo
In-Reply-To: <1355879775-5809-1-git-send-email-anderson.lizardo@openbossa.org>

mgmt_set_name() already prints the same information, and message still
refers to mgmtops.
---
 src/mgmt.c |    2 --
 1 file changed, 2 deletions(-)

diff --git a/src/mgmt.c b/src/mgmt.c
index ce1ff2f..17518cb 100644
--- a/src/mgmt.c
+++ b/src/mgmt.c
@@ -1163,8 +1163,6 @@ static void read_info_complete(int sk, uint16_t index, void *buf, size_t len)
 
 	name = btd_adapter_get_name(adapter);
 
-	DBG("mgmtops setting name %s", name);
-
 	if (name)
 		mgmt_set_name(index, name);
 	else
-- 
1.7.9.5


^ permalink raw reply related

* [PATCH BlueZ 3/3] core: Remove reference to old "mgmtops" name
From: Anderson Lizardo @ 2012-12-19  1:16 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Anderson Lizardo
In-Reply-To: <1355879775-5809-1-git-send-email-anderson.lizardo@openbossa.org>

---
 src/mgmt.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/mgmt.c b/src/mgmt.c
index 17518cb..f10bd15 100644
--- a/src/mgmt.c
+++ b/src/mgmt.c
@@ -1155,7 +1155,7 @@ static void read_info_complete(int sk, uint16_t index, void *buf, size_t len)
 	adapter = btd_manager_register_adapter(index,
 					mgmt_powered(info->current_settings));
 	if (adapter == NULL) {
-		error("mgmtops: unable to register adapter");
+		error("mgmt: unable to register adapter");
 		return;
 	}
 
-- 
1.7.9.5


^ permalink raw reply related

* Re: [PATCH BlueZ 1/3] core: Fix trying to store NULL adapter->name
From: Johan Hedberg @ 2012-12-19  7:32 UTC (permalink / raw)
  To: Anderson Lizardo; +Cc: linux-bluetooth
In-Reply-To: <1355879775-5809-1-git-send-email-anderson.lizardo@openbossa.org>

Hi Lizardo,

On Tue, Dec 18, 2012, Anderson Lizardo wrote:
> When BlueZ starts without a main.conf, adapter->name will be initially
> NULL, until adapter_name_changed() is called and name is set to "BlueZ".
> 
> Before this, store_adapter_info() will try to access a NULL pointer.
> 
> Fixes this GLib error:
> 
> (bluetoothd:1721): GLib-CRITICAL **: g_key_file_set_string: assertion
> `string != NULL' failed
> ---
>  src/adapter.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)

All three patches have been applied. Thanks.

Johan

^ permalink raw reply

* Re: PulseAudio branch to test BlueZ master
From: Mikel Astiz @ 2012-12-19 11:07 UTC (permalink / raw)
  To: Vinicius Costa Gomes; +Cc: linux-bluetooth, Tanu Kaskinen
In-Reply-To: <20121218202458.GA8716@samus>

Hi Vinicius,

On Tue, Dec 18, 2012 at 9:24 PM, Vinicius Costa Gomes
<vinicius.gomes@openbossa.org> wrote:
> Hi Mikel,
>
> On 11:19 Tue 18 Dec, Mikel Astiz wrote:
>> On the other hand, A2DP is not working for me any more. I think this
>> might be an unrelated issue, probably a regression in BlueZ, but I
>> have to do further research.
>>
>
> This problem may have been caused by me :-) The commit "bluetooth: Add
> HFP 1.6 codec ID" was buggy, and was registering the A2DP endpoint with
> the wrong codec. Sorry about that. I pushed an updated version to my
> fork of pulseaudio[1].

You're right, it was caused by this patch. Thanks for testing.

I updated now and it seems to work both with A2DP and HFP.

Btw, now that the PulseAudio "next" branch has been merged to the
master branch, I'll send the patches as RFC to the PulseAudio mailing
list.

Cheers,
Mikel

^ permalink raw reply

* hci_emu and hci_vhci
From: Kevin Wilson @ 2012-12-19 11:10 UTC (permalink / raw)
  To: linux-bluetooth

Hi,

What can we test with hci_emu and hci_vhci ?

When I tried:
modprobe hci_vhci
and then
./hciemu -n 10

I see with hciconfig that a virtual device was created (it shows Bus: VIRTUAL)
When I have no other BT physical device, which tests can I do with the virtual
	hci device ?
	
When I try :
hciconfig scan
or
hciconfig inq
I get this answer in both cases:
Inquiry failed: Invalid request code

Also when I set both PSCAN/ISCAN bit in it, I cannot see it when scanning
from other machine with physical BT devices.

So I assume testing with pan --connect, etc also won't work.

Are there any tests which we can do with a virtual
hci device ?

rgs
Kevin

^ permalink raw reply

* [PATCH BlueZ 1/4] core: Print profile name in device_profile_connected
From: Luiz Augusto von Dentz @ 2012-12-19 11:26 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

---
 src/device.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/device.c b/src/device.c
index 6a98645..ba8790e 100644
--- a/src/device.c
+++ b/src/device.c
@@ -1112,7 +1112,7 @@ static int connect_next(struct btd_device *dev)
 void device_profile_connected(struct btd_device *dev,
 					struct btd_profile *profile, int err)
 {
-	DBG("%s (%d)", strerror(-err), -err);
+	DBG("%s %s (%d)", profile->name, strerror(-err), -err);
 
 	dev->pending = g_slist_remove(dev->pending, profile);
 
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH BlueZ 2/4] audio: Fix not cleaning up player when device is removed
From: Luiz Augusto von Dentz @ 2012-12-19 11:26 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1355916421-29304-1-git-send-email-luiz.dentz@gmail.com>

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

All profile connections need to be reported to the core otherwise it
won't be able to disconnect them properly.
---
 profiles/audio/control.c | 58 ++++++------------------------------------------
 profiles/audio/control.h |  5 ++---
 profiles/audio/manager.c | 14 ++++++++++--
 profiles/audio/manager.h |  2 ++
 4 files changed, 23 insertions(+), 56 deletions(-)

diff --git a/profiles/audio/control.c b/profiles/audio/control.c
index 1600fce..642fdd5 100644
--- a/profiles/audio/control.c
+++ b/profiles/audio/control.c
@@ -61,28 +61,11 @@
 
 static unsigned int avctp_id = 0;
 
-struct pending_request {
-	audio_device_cb cb;
-	void *data;
-	unsigned int id;
-};
-
 struct control {
 	struct avctp *session;
 	gboolean target;
-	struct pending_request *connect;
 };
 
-static void pending_request_free(struct audio_device *dev,
-					struct pending_request *pending,
-					int err)
-{
-	if (pending->cb)
-		pending->cb(dev, err, pending->data);
-
-	g_free(pending);
-}
-
 static void state_changed(struct audio_device *dev, avctp_state_t old_state,
 				avctp_state_t new_state, void *user_data)
 {
@@ -94,13 +77,12 @@ static void state_changed(struct audio_device *dev, avctp_state_t old_state,
 	case AVCTP_STATE_DISCONNECTED:
 		control->session = NULL;
 
-		if (control->connect) {
-			pending_request_free(dev, control->connect, -EIO);
-			control->connect = NULL;
+		if (old_state != AVCTP_STATE_CONNECTED) {
+			audio_control_connected(dev->btd_dev, -EIO);
+			break;
 		}
 
-		if (old_state != AVCTP_STATE_CONNECTED)
-			break;
+		audio_control_disconnected(dev->btd_dev, 0);
 
 		g_dbus_emit_property_changed(conn, path,
 					AUDIO_CONTROL_INTERFACE, "Connected");
@@ -114,10 +96,7 @@ static void state_changed(struct audio_device *dev, avctp_state_t old_state,
 
 		break;
 	case AVCTP_STATE_CONNECTED:
-		if (control->connect) {
-			pending_request_free(dev, control->connect, 0);
-			control->connect = NULL;
-		}
+		audio_control_connected(dev->btd_dev, 0);
 
 		g_dbus_emit_property_changed(conn, path,
 					AUDIO_CONTROL_INTERFACE, "Connected");
@@ -127,10 +106,9 @@ static void state_changed(struct audio_device *dev, avctp_state_t old_state,
 	}
 }
 
-int control_connect(struct audio_device *dev, audio_device_cb cb, void *data)
+int control_connect(struct audio_device *dev)
 {
 	struct control *control = dev->control;
-	struct pending_request *pending;
 
 	if (control->session)
 		return -EALREADY;
@@ -138,42 +116,23 @@ int control_connect(struct audio_device *dev, audio_device_cb cb, void *data)
 	if (!control->target)
 		return -ENOTSUP;
 
-	if (control->connect)
-		return -EINPROGRESS;
-
 	control->session = avctp_connect(dev);
 	if (!control->session)
 		return -EIO;
 
-	pending = g_new0(struct pending_request, 1);
-	pending->cb = cb;
-	pending->data = data;
-	control->connect = pending;
-
 	return 0;
 }
 
-int control_disconnect(struct audio_device *dev, audio_device_cb cb,
-								void *data)
+int control_disconnect(struct audio_device *dev)
 {
 	struct control *control = dev->control;
 
 	if (!control->session)
 		return -ENOTCONN;
 
-	/* cancel pending connect */
-	if (control->connect) {
-		pending_request_free(dev, control->connect, -ECANCELED);
-		control->connect = NULL;
-	}
-
 	avctp_disconnect(control->session);
 
-	if (cb)
-		cb(dev, 0, data);
-
 	return 0;
-
 }
 
 static DBusMessage *key_pressed(DBusConnection *conn, DBusMessage *msg,
@@ -291,9 +250,6 @@ static void path_unregister(void *data)
 	if (control->session)
 		avctp_disconnect(control->session);
 
-	if (control->connect)
-		pending_request_free(dev, control->connect, -ECANCELED);
-
 	g_free(control);
 	dev->control = NULL;
 }
diff --git a/profiles/audio/control.h b/profiles/audio/control.h
index 878dd1e..001b564 100644
--- a/profiles/audio/control.h
+++ b/profiles/audio/control.h
@@ -29,6 +29,5 @@ void control_update(struct control *control, GSList *uuids);
 void control_unregister(struct audio_device *dev);
 gboolean control_is_active(struct audio_device *dev);
 
-int control_connect(struct audio_device *dev, audio_device_cb cb, void *data);
-int control_disconnect(struct audio_device *dev, audio_device_cb cb,
-								void *data);
+int control_connect(struct audio_device *dev);
+int control_disconnect(struct audio_device *dev);
diff --git a/profiles/audio/manager.c b/profiles/audio/manager.c
index 422316e..620127c 100644
--- a/profiles/audio/manager.c
+++ b/profiles/audio/manager.c
@@ -270,7 +270,7 @@ static int avrcp_control_connect(struct btd_device *dev,
 		return -1;
 	}
 
-	return control_connect(audio_dev, connect_cb, profile);
+	return control_connect(audio_dev);
 }
 
 static int avrcp_control_disconnect(struct btd_device *dev,
@@ -287,7 +287,7 @@ static int avrcp_control_disconnect(struct btd_device *dev,
 		return -1;
 	}
 
-	return control_disconnect(audio_dev, disconnect_cb, profile);
+	return control_disconnect(audio_dev);
 }
 
 static struct audio_adapter *audio_adapter_ref(struct audio_adapter *adp)
@@ -512,6 +512,16 @@ void audio_source_disconnected(struct btd_device *dev, int err)
 	device_profile_connected(dev, &a2dp_source_profile, err);
 }
 
+void audio_control_connected(struct btd_device *dev, int err)
+{
+	device_profile_connected(dev, &avrcp_profile, err);
+}
+
+void audio_control_disconnected(struct btd_device *dev, int err)
+{
+	device_profile_disconnected(dev, &avrcp_profile, err);
+}
+
 int audio_manager_init(GKeyFile *conf)
 {
 	char **list;
diff --git a/profiles/audio/manager.h b/profiles/audio/manager.h
index 2b924dc..e70d795 100644
--- a/profiles/audio/manager.h
+++ b/profiles/audio/manager.h
@@ -33,6 +33,8 @@ void audio_sink_connected(struct btd_device *dev, int err);
 void audio_sink_disconnected(struct btd_device *dev, int err);
 void audio_source_connected(struct btd_device *dev, int err);
 void audio_source_disconnected(struct btd_device *dev, int err);
+void audio_control_connected(struct btd_device *dev, int err);
+void audio_control_disconnected(struct btd_device *dev, int err);
 
 int audio_manager_init(GKeyFile *config);
 void audio_manager_exit(void);
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH BlueZ 3/4] audio: Remove unused parameters from sink_connect/sink_disconnect
From: Luiz Augusto von Dentz @ 2012-12-19 11:27 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1355916421-29304-1-git-send-email-luiz.dentz@gmail.com>

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

Profile .connect and .disconnect no longer use callbacks so there is no
reason to keep these parameters around.
---
 profiles/audio/device.c  |  2 +-
 profiles/audio/manager.c | 18 ++----------------
 profiles/audio/sink.c    |  5 ++---
 profiles/audio/sink.h    |  5 ++---
 4 files changed, 7 insertions(+), 23 deletions(-)

diff --git a/profiles/audio/device.c b/profiles/audio/device.c
index 080ebc9..d4ba6d2 100644
--- a/profiles/audio/device.c
+++ b/profiles/audio/device.c
@@ -184,7 +184,7 @@ static void disconnect_cb(struct btd_device *btd_dev, gboolean removal,
 		avrcp_disconnect(dev);
 
 	if (dev->sink && priv->sink_state != SINK_STATE_DISCONNECTED)
-		sink_disconnect(dev, TRUE, NULL, NULL);
+		sink_disconnect(dev, TRUE);
 	else
 		priv->disconnecting = FALSE;
 }
diff --git a/profiles/audio/manager.c b/profiles/audio/manager.c
index 620127c..1f49aa3 100644
--- a/profiles/audio/manager.c
+++ b/profiles/audio/manager.c
@@ -174,20 +174,6 @@ static int avrcp_probe(struct btd_profile *p, struct btd_device *device,
 	return 0;
 }
 
-static void connect_cb(struct audio_device *dev, int err, void *data)
-{
-	struct btd_profile *profile = data;
-
-	device_profile_connected(dev->btd_dev, profile, err);
-}
-
-static void disconnect_cb(struct audio_device *dev, int err, void *data)
-{
-	struct btd_profile *profile = data;
-
-	device_profile_disconnected(dev->btd_dev, profile, err);
-}
-
 static int a2dp_source_connect(struct btd_device *dev,
 						struct btd_profile *profile)
 {
@@ -236,7 +222,7 @@ static int a2dp_sink_connect(struct btd_device *dev,
 		return -1;
 	}
 
-	return sink_connect(audio_dev, connect_cb, profile);
+	return sink_connect(audio_dev);
 }
 
 static int a2dp_sink_disconnect(struct btd_device *dev,
@@ -253,7 +239,7 @@ static int a2dp_sink_disconnect(struct btd_device *dev,
 		return -1;
 	}
 
-	return sink_disconnect(audio_dev, FALSE, disconnect_cb, profile);
+	return sink_disconnect(audio_dev, FALSE);
 }
 
 static int avrcp_control_connect(struct btd_device *dev,
diff --git a/profiles/audio/sink.c b/profiles/audio/sink.c
index b12c913..02e1a65 100644
--- a/profiles/audio/sink.c
+++ b/profiles/audio/sink.c
@@ -305,7 +305,7 @@ gboolean sink_setup_stream(struct sink *sink, struct avdtp *session)
 	return TRUE;
 }
 
-int sink_connect(struct audio_device *dev, audio_device_cb cb, void *data)
+int sink_connect(struct audio_device *dev)
 {
 	struct sink *sink = dev->sink;
 
@@ -415,8 +415,7 @@ gboolean sink_new_stream(struct audio_device *dev, struct avdtp *session,
 	return TRUE;
 }
 
-int sink_disconnect(struct audio_device *dev, gboolean shutdown,
-						audio_device_cb cb, void *data)
+int sink_disconnect(struct audio_device *dev, gboolean shutdown)
 {
 	struct sink *sink = dev->sink;
 
diff --git a/profiles/audio/sink.h b/profiles/audio/sink.h
index b9e97e3..fc7ed92 100644
--- a/profiles/audio/sink.h
+++ b/profiles/audio/sink.h
@@ -42,9 +42,8 @@ gboolean sink_remove_state_cb(unsigned int id);
 struct sink *sink_init(struct audio_device *dev);
 void sink_unregister(struct audio_device *dev);
 gboolean sink_is_active(struct audio_device *dev);
-int sink_connect(struct audio_device *dev, audio_device_cb cb, void *data);
+int sink_connect(struct audio_device *dev);
 gboolean sink_new_stream(struct audio_device *dev, struct avdtp *session,
 				struct avdtp_stream *stream);
 gboolean sink_setup_stream(struct sink *sink, struct avdtp *session);
-int sink_disconnect(struct audio_device *dev, gboolean shutdown,
-						audio_device_cb cb, void *data);
+int sink_disconnect(struct audio_device *dev, gboolean shutdown);
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH BlueZ 4/4] audio: Fix calling device_profile_connected on disconnected cases
From: Luiz Augusto von Dentz @ 2012-12-19 11:27 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1355916421-29304-1-git-send-email-luiz.dentz@gmail.com>

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

---
 profiles/audio/manager.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/profiles/audio/manager.c b/profiles/audio/manager.c
index 1f49aa3..0f6a4f7 100644
--- a/profiles/audio/manager.c
+++ b/profiles/audio/manager.c
@@ -485,7 +485,7 @@ void audio_sink_connected(struct btd_device *dev, int err)
 
 void audio_sink_disconnected(struct btd_device *dev, int err)
 {
-	device_profile_connected(dev, &a2dp_sink_profile, err);
+	device_profile_disconnected(dev, &a2dp_sink_profile, err);
 }
 
 void audio_source_connected(struct btd_device *dev, int err)
@@ -495,7 +495,7 @@ void audio_source_connected(struct btd_device *dev, int err)
 
 void audio_source_disconnected(struct btd_device *dev, int err)
 {
-	device_profile_connected(dev, &a2dp_source_profile, err);
+	device_profile_disconnected(dev, &a2dp_source_profile, err);
 }
 
 void audio_control_connected(struct btd_device *dev, int err)
-- 
1.7.11.7


^ permalink raw reply related

* Re: [PATCH BlueZ 1/4] core: Print profile name in device_profile_connected
From: Johan Hedberg @ 2012-12-19 11:41 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: linux-bluetooth
In-Reply-To: <1355916421-29304-1-git-send-email-luiz.dentz@gmail.com>

Hi Luiz,

On Wed, Dec 19, 2012, Luiz Augusto von Dentz wrote:
> ---
>  src/device.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

All patches in this set have been applied. Thanks.

Johan

^ permalink raw reply

* [PATCH] gdbus: Fix double free when calling g_dbus_remove_all_watches
From: Tomasz Bursztyka @ 2012-12-19 12:01 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Tomasz Bursztyka
In-Reply-To: <20121128122318.GA30710@x220.ger.corp.intel.com>

Valgrind output:
==21779== Invalid free() / delete / delete[] / realloc()
==21779==    at 0x4A080BC: free (vg_replace_malloc.c:427)
==21779==    by 0x406700: filter_data_free (watch.c:285)
==21779==    by 0x406D92: g_dbus_remove_all_watches (watch.c:315)
==21779==    by 0x408787: connman_interface_finalize (interface.c:99)
==21779==    by 0x40EA14: main (main.c:113)
==21779==  Address 0x6893810 is 0 bytes inside a block of size 56 free'd
==21779==    at 0x4A080BC: free (vg_replace_malloc.c:427)
==21779==    by 0x406D81: g_dbus_remove_all_watches (watch.c:309)
==21779==    by 0x408787: connman_interface_finalize (interface.c:99)
==21779==    by 0x40EA14: main (main.c:113)
---
Hi Johan,

I finally put the valgrind output, since backtrace is actually useless:

*** glibc detected *** ./project: double free or corruption (fasttop): 0x000000000075b5a0 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x7adf5)[0x7f6701e5adf5]
./project[0x4066b1]
./project[0x406d43]
./project[0x408738]
./project[0x40e9a5]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x7f6701e024bd]
./project[0x4053f9] 

Anyway, this bug was never found before for a good reason: no projects (but mine) uses g_dbus_remove_all_watches()

 gdbus/watch.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/gdbus/watch.c b/gdbus/watch.c
index 9e4f994..9451d5d 100644
--- a/gdbus/watch.c
+++ b/gdbus/watch.c
@@ -309,6 +309,9 @@ static void filter_data_call_and_free(struct filter_data *data)
 		g_free(cb);
 	}
 
+	g_slist_free(data->callbacks);
+	data->callbacks = NULL;
+
 	filter_data_free(data);
 }
 
-- 
1.8.0.2


^ permalink raw reply related

* Re: [PATCH 00/16] audio: Use device/adapter reference instead of bdaddr_t
From: Luiz Augusto von Dentz @ 2012-12-19 12:16 UTC (permalink / raw)
  To: Szymon Janc; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <1355308088-9080-1-git-send-email-szymon.janc@tieto.com>

Hi Szymon,

On Wed, Dec 12, 2012 at 12:27 PM, Szymon Janc <szymon.janc@tieto.com> wrote:
> This remove use of bdaddr_t in favour of using references to struct btd_adapter
> and struct btd_device.
>
> note:
> This patch triggers a bug introduced when a2dp was splitted into two
> btd_profile resulting in a2dp_unregister() is never called (so adapter
> ref is not dropped properly). This is not fixed in this patch set.
>
> Szymon Janc (16):
>   a2dp: Remove bogus '\' at the end of line
>   a2dp: Remove useless return
>   a2dp: Remove not used macros definitions
>   a2dp: Convert sink/source register to accept btd_adapter
>   a2dp: Convert a2dp_unregister to accept btd_adapter
>   media: Convert register/unregister to accept btd_adapter
>   a2dp: Convert a2dp_add_sep to accept struct btd_adapter
>   avdtp: Use refs to adapter and device instead of bdaddr_t
>   a2dp: Use btd_adapter ref in a2dp_server instead of bdaddr_t
>   avrcp: Convert to accept btd_adapter instead of bdaddr_t
>   avctp: Convert register/unregister to accept btd_adapter
>   avdtp: Replace avdtp_get_peers with adapter and device getters
>   audio: Use manager_get_device to get device object
>   audio: Make manager_get_device accept btd_device
>   audio: Simplify manager_find_device
>   avctp: Remove double looking for audio device
>
>  profiles/audio/a2dp.c    |  75 +++++++++++---------------
>  profiles/audio/a2dp.h    |   8 +--
>  profiles/audio/avctp.c   |  96 +++++++++++++++-------------------
>  profiles/audio/avctp.h   |   4 +-
>  profiles/audio/avdtp.c   | 119 ++++++++++++++++++------------------------
>  profiles/audio/avdtp.h   |  10 ++--
>  profiles/audio/avrcp.c   |  37 ++++++-------
>  profiles/audio/avrcp.h   |   6 +--
>  profiles/audio/manager.c | 133 +++++++++--------------------------------------
>  profiles/audio/manager.h |  17 +-----
>  profiles/audio/media.c   |  35 ++++++-------
>  profiles/audio/media.h   |   4 +-
>  profiles/audio/sink.c    |   5 +-
>  profiles/audio/source.c  |   5 +-
>  14 files changed, 206 insertions(+), 348 deletions(-)
>
> --
> 1.8.0

All patches are now upstream, thanks.


--
Luiz Augusto von Dentz

^ permalink raw reply

* [PATCH BlueZ] build: Check for UDEV before setting rulesdir/rules_DATA
From: Anderson Lizardo @ 2012-12-19 12:56 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Anderson Lizardo

Without this check, UDEV_DIR will be empty and an empty "/rules.d"
directory is created on DESTDIR.
---
 Makefile.am |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/Makefile.am b/Makefile.am
index a482b54..c10c1fa 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -174,6 +174,7 @@ test_scripts =
 include Makefile.tools
 include Makefile.obexd
 
+if UDEV
 rulesdir = @UDEV_DIR@/rules.d
 
 udev_files =
@@ -187,6 +188,7 @@ EXTRA_DIST += tools/hid2hci.rules
 rules_DATA = $(foreach file,$(udev_files), tools/97-$(notdir $(file)))
 
 CLEANFILES += $(rules_DATA)
+endif
 
 if TEST
 testdir = $(pkglibdir)/test
-- 
1.7.9.5


^ permalink raw reply related

* [PATCH] monitor: Fix crash in btmon
From: Frédéric Danis @ 2012-12-19 13:20 UTC (permalink / raw)
  To: linux-bluetooth

When retrieving SDP records from keyboard btmon crashes (see below).

The tid_list in sdp.c is filled up by SDP Service search request,
as Service Search responses are treated as invalid and do not free
tid_list entries.

This is due to passing last fragment instead of complete frame to
l2cap_frame().



< ACL Data TX: Handle 11 flags 0x00 dlen 26                                                                                                                                                       [hci0] 24.082133
      Channel: 511 len 22 [PSM 1 mode 0] {chan 0}
      SDP: Service Search Attribute Request (0x06) tid 14 len 17
        Search pattern: [len 5]
          Sequence (6) with 3 bytes [8 extra bits] len 5
            UUID (3) with 2 bytes [0 extra bits] len 3
              L2CAP (0x0100)
        Max record count: 65535
        Attribute list: [len 7]
          Sequence (6) with 5 bytes [8 extra bits] len 7
            Unsigned Integer (1) with 4 bytes [0 extra bits] len 5
              0x0000ffff
        Continuation state: 2
        00 1d                                            ..
> HCI Event: Number of Completed Packets (0x13) plen 5                                                                                                                                            [hci0] 24.085458
        Num handles: 1
        Handle: 11
        Count: 2
> ACL Data RX: Handle 11 flags 0x02 dlen 27                                                                                                                                                       [hci0] 24.102205
> ACL Data RX: Handle 11 flags 0x01 dlen 14                                                                                                                                                       [hci0] 24.103339
      Channel: 64 len 37 [PSM 1 mode 0] {chan 0}
        invalid frame size
        23 03 09 02 04 28 01 09 02 05 09 00 02 00 09 04  #....(..........
        6d 09 02 02 09 b3 01 09 02 03 09 64 00 00 00 00  m..........d....
        00 00 00 00 00                                   .....
< ACL Data TX: Handle 11 flags 0x00 dlen 24                                                                                                                                                       [hci0] 24.170595
      Channel: 511 len 20 [PSM 1 mode 0] {chan 0}
      SDP: Service Search Attribute Request (0x06) tid 15 len 15
        Search pattern: [len 5]
          Sequence (6) with 3 bytes [8 extra bits] len 5
            UUID (3) with 2 bytes [0 extra bits] len 3
              PnP Information (0x1200)
        Max record count: 65535
        Attribute list: [len 7]
          Sequence (6) with 5 bytes [8 extra bits] len 7
            Unsigned Integer (1) with 4 bytes [0 extra bits] len 5
              0x0000ffff
        Continuation state: 0
> ACL Data RX: Handle 11 flags 0x02 dlen 27                                                                                                                                                       [hci0] 24.192217
> ACL Data RX: Handle 11 flags 0x01 dlen 25                                                                                                                                                       [hci0] 24.193327
      Channel: 64 len 48 [PSM 1 mode 0] {chan 0}
        invalid frame size
        01 35 03 19 12 00 09 00 04 35 0d 35 06 19 01 00  .5.......5.5....
        09 00 01 35 03 19 02 00 32 09 00 64 00 00 00 00  ...5....2..d....
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
< ACL Data TX: Handle 11 flags 0x00 dlen 26                                                                                                                                                       [hci0] 24.205765
      Channel: 511 len 22 [PSM 1 mode 0] {chan 0}
      SDP: Service Search Attribute Request (0x06) tid 16 len 17
        Search pattern: [len 5]
          Sequence (6) with 3 bytes [8 extra bits] len 5
            UUID (3) with 2 bytes [0 extra bits] len 3
              PnP Information (0x1200)
        Max record count: 65535
        Attribute list: [len 7]
          Sequence (6) with 5 bytes [8 extra bits] len 7
            Unsigned Integer (1) with 4 bytes [0 extra bits] len 5
              0x0000ffff

Program received signal SIGSEGV, Segmentation fault.
__memcpy_ssse3_back () at ../sysdeps/x86_64/multiarch/memcpy-ssse3-back.S:2184
2184	../sysdeps/x86_64/multiarch/memcpy-ssse3-back.S: No such file or directory.
(gdb) bt
#0  __memcpy_ssse3_back () at ../sysdeps/x86_64/multiarch/memcpy-ssse3-back.S:2184
#1  0x0000000000418607 in search_attr_req (frame=0x7fffffffdff0, tid=0x0) at /usr/include/x86_64-linux-gnu/bits/string3.h:52
#2  0x0000000000418ebb in sdp_packet (frame=0x7fffffffe0e0, channel=0) at monitor/sdp.c:743
#3  0x000000000041547e in l2cap_frame (index=<optimised out>, in=<optimised out>, handle=<optimised out>, cid=<optimised out>, data=0x6370d0, size=22) at monitor/l2cap.c:2161
#4  0x000000000040f8c4 in packet_hci_acldata (tv=0x7fffffffe330, index=0, in=false, data=0x6370cc, size=26) at monitor/packet.c:4812
#5  0x000000000040fd35 in packet_monitor (tv=0x7fffffffe330, index=0, opcode=<optimised out>, data=0x6370c8, size=<optimised out>) at monitor/packet.c:1839
#6  0x0000000000403da2 in data_callback (user_data=0x6370c0, fd=<optimised out>, events=<optimised out>) at monitor/control.c:599
#7  data_callback (fd=<optimised out>, events=<optimised out>, user_data=0x6370c0) at monitor/control.c:541
#8  0x00000000004021c4 in mainloop_run () at monitor/mainloop.c:142
#9  0x0000000000401c7c in main (argc=1, argv=0x7fffffffe5f8) at monitor/main.c:154
---
 monitor/l2cap.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/monitor/l2cap.c b/monitor/l2cap.c
index e982bdd..dc4d8ea 100644
--- a/monitor/l2cap.c
+++ b/monitor/l2cap.c
@@ -2250,7 +2250,8 @@ void l2cap_packet(uint16_t index, bool in, uint16_t handle, uint8_t flags,
 			/* complete frame */
 			l2cap_frame(index, in, handle,
 					index_list[index].frag_cid,
-					data, index_list[index].frag_pos);
+					index_list[index].frag_buf,
+					index_list[index].frag_pos);
 			clear_fragment_buffer(index);
 			return;
 		}
-- 
1.7.9.5


^ permalink raw reply related

* Re: [PATCH BlueZ 8/8] hog: Rename hog_device_unregister
From: Andre Guedes @ 2012-12-19 13:38 UTC (permalink / raw)
  To: Anderson Lizardo; +Cc: linux-bluetooth
In-Reply-To: <CAJdJm_Ouhbv+jf920=aNjd2RsUt5PLjnUEbWqW5FapYa+Lu-hg@mail.gmail.com>

Hi Lizardo,

On Tue, Dec 18, 2012 at 5:13 PM, Anderson Lizardo
<anderson.lizardo@openbossa.org> wrote:
> Hi Guedes,
>
> On Tue, Dec 18, 2012 at 2:49 PM, Andre Guedes
> <andre.guedes@openbossa.org> wrote:
>> This patch renames hog_device_unregister function to hog_device_
>> unregister.
>
> Minor typo:   "hog_device_ unregister" -> "hog_unregister_device".

Thanks.

Johan, I'm fixing the typo and I'm going to send a new patch right away.

Regards,

Andre

^ permalink raw reply

* [PATCH BlueZ 8/8] hog: Rename hog_device_unregister
From: Andre Guedes @ 2012-12-19 13:42 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1355856590-19222-8-git-send-email-andre.guedes@openbossa.org>

This patch renames hog_device_unregister function to hog_unregister_
device.
---
 profiles/input/hog.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/profiles/input/hog.c b/profiles/input/hog.c
index fa8069c..b6ac61d 100644
--- a/profiles/input/hog.c
+++ b/profiles/input/hog.c
@@ -753,7 +753,7 @@ static struct hog_device *hog_register_device(struct btd_device *device,
 	return hogdev;
 }
 
-static int hog_device_unregister(struct hog_device *hogdev)
+static int hog_unregister_device(struct hog_device *hogdev)
 {
 	struct uhid_event ev;
 
@@ -860,7 +860,7 @@ static void remove_device(gpointer a, gpointer b)
 		return;
 
 	devices = g_slist_remove(devices, hogdev);
-	hog_device_unregister(hogdev);
+	hog_unregister_device(hogdev);
 }
 
 static void hog_remove(struct btd_profile *p, struct btd_device *device)
-- 
1.8.0.1


^ permalink raw reply related

* [PATCH] a2dp: Fix server unregister
From: Szymon Janc @ 2012-12-19 13:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc

When removing sink or source unregister its sep and sdp record. When
both sink and source are unregistered also unregister a2dp server.
---
 profiles/audio/a2dp.c    | 48 +++++++++++++++++++++++++++++++++++++++---------
 profiles/audio/a2dp.h    |  3 ++-
 profiles/audio/manager.c | 14 ++++++++++++++
 3 files changed, 55 insertions(+), 10 deletions(-)

diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c
index 145b1aa..3ec8b43 100644
--- a/profiles/audio/a2dp.c
+++ b/profiles/audio/a2dp.c
@@ -1224,7 +1224,20 @@ static void a2dp_unregister_sep(struct a2dp_sep *sep)
 	g_free(sep);
 }
 
-void a2dp_unregister(struct btd_adapter *adapter)
+static void a2dp_unregister(struct a2dp_server *server)
+{
+	if (server->sink_enabled || server->source_enabled)
+		return;
+
+	avdtp_exit(server->adapter);
+
+	servers = g_slist_remove(servers, server);
+
+	btd_adapter_unref(server->adapter);
+	g_free(server);
+}
+
+void a2dp_source_unregister(struct btd_adapter *adapter)
 {
 	struct a2dp_server *server;
 
@@ -1232,22 +1245,39 @@ void a2dp_unregister(struct btd_adapter *adapter)
 	if (!server)
 		return;
 
-	g_slist_free_full(server->sinks, (GDestroyNotify) a2dp_unregister_sep);
+	server->source_enabled = FALSE;
+
 	g_slist_free_full(server->sources,
 					(GDestroyNotify) a2dp_unregister_sep);
+	server->sources = NULL;
 
-	avdtp_exit(adapter);
+	if (server->source_record_id > 0) {
+		remove_record_from_server(server->source_record_id);
+		server->source_record_id = 0;
+	}
 
-	servers = g_slist_remove(servers, server);
+	a2dp_unregister(server);
+}
 
-	if (server->source_record_id)
-		remove_record_from_server(server->source_record_id);
+void a2dp_sink_unregister(struct btd_adapter *adapter)
+{
+	struct a2dp_server *server;
+
+	server = find_server(servers, adapter);
+	if (!server)
+		return;
+
+	server->sink_enabled = FALSE;
+
+	g_slist_free_full(server->sinks, (GDestroyNotify) a2dp_unregister_sep);
+	server->sinks = NULL;
 
-	if (server->sink_record_id)
+	if (server->sink_record_id > 0) {
 		remove_record_from_server(server->sink_record_id);
+		server->sink_record_id = 0;
+	}
 
-	btd_adapter_unref(server->adapter);
-	g_free(server);
+	a2dp_unregister(server);
 }
 
 struct a2dp_sep *a2dp_add_sep(struct btd_adapter *adapter, uint8_t type,
diff --git a/profiles/audio/a2dp.h b/profiles/audio/a2dp.h
index 54c3bf3..af5c27d 100644
--- a/profiles/audio/a2dp.h
+++ b/profiles/audio/a2dp.h
@@ -66,7 +66,8 @@ typedef void (*a2dp_stream_cb_t) (struct avdtp *session,
 
 int a2dp_source_register(struct btd_adapter *adapter, GKeyFile *config);
 int a2dp_sink_register(struct btd_adapter *adapter, GKeyFile *config);
-void a2dp_unregister(struct btd_adapter *adapter);
+void a2dp_source_unregister(struct btd_adapter *adapter);
+void a2dp_sink_unregister(struct btd_adapter *adapter);
 
 struct a2dp_sep *a2dp_add_sep(struct btd_adapter *adapter, uint8_t type,
 				uint8_t codec, gboolean delay_reporting,
diff --git a/profiles/audio/manager.c b/profiles/audio/manager.c
index b6b2385..5e30fa8 100644
--- a/profiles/audio/manager.c
+++ b/profiles/audio/manager.c
@@ -348,6 +348,12 @@ static int a2dp_source_server_probe(struct btd_profile *p,
 	return a2dp_source_register(adapter, config);
 }
 
+static void a2dp_source_server_remove(struct btd_profile *p,
+						struct btd_adapter *adapter)
+{
+	a2dp_source_unregister(adapter);
+}
+
 static int a2dp_sink_server_probe(struct btd_profile *p,
 						struct btd_adapter *adapter)
 {
@@ -365,6 +371,12 @@ static int a2dp_sink_server_probe(struct btd_profile *p,
 	return a2dp_sink_register(adapter, config);
 }
 
+static void a2dp_sink_server_remove(struct btd_profile *p,
+						struct btd_adapter *adapter)
+{
+	a2dp_sink_unregister(adapter);
+}
+
 static int avrcp_server_probe(struct btd_profile *p,
 						struct btd_adapter *adapter)
 {
@@ -446,6 +458,7 @@ static struct btd_profile a2dp_source_profile = {
 	.disconnect	= a2dp_source_disconnect,
 
 	.adapter_probe	= a2dp_source_server_probe,
+	.adapter_remove = a2dp_source_server_remove,
 };
 
 static struct btd_profile a2dp_sink_profile = {
@@ -461,6 +474,7 @@ static struct btd_profile a2dp_sink_profile = {
 	.disconnect	= a2dp_sink_disconnect,
 
 	.adapter_probe	= a2dp_sink_server_probe,
+	.adapter_remove = a2dp_sink_server_remove,
 };
 
 static struct btd_profile avrcp_profile = {
-- 
1.8.0


^ permalink raw reply related

* Re: [PATCH BlueZ] monitor: Add support for parsing Flow Control Lag flags
From: Marcel Holtmann @ 2012-12-19 13:53 UTC (permalink / raw)
  To: Vinicius Costa Gomes; +Cc: linux-bluetooth
In-Reply-To: <1355860127-7011-1-git-send-email-vinicius.gomes@openbossa.org>

Hi Vinicious,

>  monitor/packet.c | 3 +++
>  1 file changed, 3 insertions(+)

sorry, I was faster with this one ;)

Regards

Marcel



^ permalink raw reply

* Re: hci_emu and hci_vhci
From: Marcel Holtmann @ 2012-12-19 13:57 UTC (permalink / raw)
  To: Kevin Wilson; +Cc: linux-bluetooth
In-Reply-To: <CAGXs5wVmFirtMq6ZeUna7q0hfxpedMOcPEEVuD2r09Whet1Z=A@mail.gmail.com>

Hi Kevin,

> What can we test with hci_emu and hci_vhci ?
> 
> When I tried:
> modprobe hci_vhci
> and then
> ./hciemu -n 10
> 
> I see with hciconfig that a virtual device was created (it shows Bus: VIRTUAL)
> When I have no other BT physical device, which tests can I do with the virtual
> 	hci device ?
> 	
> When I try :
> hciconfig scan
> or
> hciconfig inq
> I get this answer in both cases:
> Inquiry failed: Invalid request code
> 
> Also when I set both PSCAN/ISCAN bit in it, I cannot see it when scanning
> from other machine with physical BT devices.

of course not. This one is virtual and does not magically transmit radio
waves ;)

> So I assume testing with pan --connect, etc also won't work.

If you start two entities of hciemu which each its own port number, then
you can connect between them. Of course if they are running on the same
host, then the network interfaces will not see any traffic. Local
traffic goes over the loopback interface.

> Are there any tests which we can do with a virtual
> hci device ?

Plenty of them, but you need a full piconet emulation for anything
further.

Regards

Marcel



^ permalink raw reply


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